Files
thetool/application/Admin/functions/RtrReporting.php
Frank Schubert 33d7a4e5f1 WIP RTR Reporting
2024-12-06 13:45:20 +01:00

143 lines
4.5 KiB
PHP

<?php
class Admin_RtrReporting {
private $request;
private $db;
private $log;
private $flash = [];
public function __construct($request = false) {
$this->request = $request;
$this->db = FronkDB::singleton();
$this->log = mfLoghandler::singleton();
}
public function runRequest() {
$action = $this->request->do;
if(!$action) {
return $this->indexAction();
} else {
$method = $action."Action";
if(method_exists($this, $method)) {
return $this->$method();
} else {
throw new Exception("Method not found", "404");
}
}
}
public function indexAction() {
return [
"template" => "Admin/RtrReporting/Index",
"redirect" => "",
"templateVars" => []
];
}
public function a10reportAction() {
// alle anschlüsse
$rasterpunkte = [];
foreach(BuildingModel::getAll() as $building) {
$raster = $building->laea;
$prod_code = 14310;
$bb = "1000,00"; // glas = 1000, funk = 50
$user_count = TerminationModel::count(["building_id" => $building->id]);
if(!array_key_exists($raster, $rasterpunkte)) {
$rasterpunkte[$raster] = [];
}
if(!array_key_exists($prod_code, $rasterpunkte[$raster])) {
$rasterpunkte[$raster][$prod_code] = [
"bb" => $bb,
"user_count" => 0
];
}
$rasterpunkte[$raster][$prod_code]["user_count"] += $user_count;
}
$building = new Building();
$eigen_product_ids = $this->getEigenProductIds();
foreach(ContractModel::search(["product_id" => $eigen_product_ids]) as $contract) {
if($contract->termination_id) continue;
$address = $contract->owner;
if(!$address->gps_lat || !$address->gps_long || !$address->laea) {
//$address->getCoords();
$address->save();
}
$raster = $address->laea;
$rtr_code = $contract->product->attributes["rtr_tech_code"]->value;
if(substr($rtr_code, 0, 4) == 1431) {
$prod_code = 14310;
$bb = "1000,00";
} elseif(substr($rtr_code, 0, 4) == 1042) {
$prod_code = 10420;
$bb = "50,00";
} else {
continue; // incompatible product
}
$user_count = 1;
// get laea
if(!array_key_exists($raster, $rasterpunkte)) {
$rasterpunkte[$raster] = [];
}
if(!array_key_exists($prod_code, $rasterpunkte[$raster])) {
$rasterpunkte[$raster][$prod_code] = [
"bb" => $bb,
"user_count" => 0
];
}
$rasterpunkte[$raster][$prod_code]["user_count"] += $user_count;
}
$csv_header = "rasterid;code;dl_min_max_bb;dl_q25_max_bb;dl_avg_max_bb;dl_max_max_bb;ul_min_max_bb;ul_q25_max_bb;ul_avg_max_bb;ul_max_max_bb;dl_min_n_bb;dl_q25_n_bb;dl_avg_n_bb;dl_avg_n_bb;ul_min_n_bb;ul_q25_n_bb;ul_avg_n_bb;ul_avg_n_bb;anz_anschl_cov";
$csv = $csv_header."\n";
foreach($rasterpunkte as $rastercode => $raster) {
foreach($raster as $prod_code => $data) {
$csv .= $rastercode . ";";
$csv .= $prod_code . ";";
for($i = 0; $i < 16; $i++) {
$csv .= $data["bb"] . ";";
}
$csv .= $data["user_count"];
$csv .= "\n";
}
}
header("Content-type: text/csv; charset=utf-8");
header('Content-disposition: attachment; filename="rtr-A10-report-'.date('Y-m-d_H-i-s').'.csv"');
echo $csv;
exit;
}
/*
* 1042% = radio
* 1431% = fiber
*/
private function getEigenProductIds() {
$product_ids = [];
$sql = "SELECT product_id FROM `ProductAttribute`
LEFT JOIN ProducttechAttribute ON (ProductAttribute.producttechattribute_id = ProducttechAttribute.id)
WHERE ProducttechAttribute.name='rtr_tech_code'
AND (ProductAttribute.value LIKE '1042%' OR ProductAttribute.value LIKE '1431%')";
$res = $this->db->query($sql);
while($data = $this->db->fetch_object($res)) {
$product_ids[] = $data->product_id;
}
return $product_ids;
}
}