Added RTR B10 report

This commit is contained in:
Frank Schubert
2024-12-12 21:52:46 +01:00
parent 76f3978e9c
commit 59759c5e99

View File

@@ -10,6 +10,144 @@ class Admin_RtrReporting {
private $additional_owner_networks = [
7 // mortantsch
];
private $ort_replace = [
"St.Ruprecht/Raab" => "Sankt Ruprecht an der Raab",
"St. Ruprecht / Raab" => "Sankt Ruprecht an der Raab",
"St. Ruprecht a.d. Raab" => "Sankt Ruprecht an der Raab",
"St. Ruprecht a.d. R." => "Sankt Ruprecht an der Raab",
"St. Ruprecht/Raab" => "Sankt Ruprecht an der Raab",
"St. Ruprecht" => "Sankt Ruprecht an der Raab",
"Seieersberg" => "Seiersberg",
"St.Stefan im Rosental" => "Sankt Stefan im Rosental",
"St Stefan im Rosental" => "Sankt Stefan im Rosental",
"St. Stefan i.R." => "Sankt Stefan im Rosental",
"St. Stefan i. R." => "Sankt Stefan im Rosental",
"St.Stefan i. R." => "Sankt Stefan im Rosental",
"St.Stefan i.R." => "Sankt Stefan im Rosental",
"St. Stefab i. R." => "Sankt Stefan im Rosental",
"St. Stefan i.R" => "Sankt Stefan im Rosental",
"St. Stefan/R." => "Sankt Stefan im Rosental",
"Pölfing-Bunn" => "Pölfing-Brunn",
"Pölfing Brunn" => "Pölfing-Brunn",
"Eibsiwald" => "Eibiswald",
"Wolfsberg" => "Schwarzautal",
"Wolfsberg i. Sch." => "Schwarzautal",
"Wolfsberg i. Schwarzautal" => "Schwarzautal",
"Wolfsberg i.S." => "Schwarzautal",
"Wolfsberg im Scharzautal" => "Schwarzautal",
"Wolfsberg im Schwarzautal" => "Schwarzautal",
"Wolfberg im Schwarzautal" => "Schwarzautal",
"Schwarzau" => "Schwarzautal",
"Sankt Radegund" => "Sankt Radegund bei Graz",
"Sankt Radegund" => "Sankt Radegund bei Graz",
"St. Radegund" => "Sankt Radegund bei Graz",
"Judendorf-Straßengel" => "Gratwein-Straßengel",
"Judendorf-Strassengel" => "Gratwein-Straßengel",
"Gartwein-Straßengel" => "Gratwein-Straßengel",
"Gratwein" => "Gratwein-Straßengel",
"Fladnitz" => "Fladnitz an der Teichalm",
"Fladnitz a.d.T." => "Fladnitz an der Teichalm",
"Fladnitz a. d. T." => "Fladnitz an der Teichalm",
"Fladnitz/Teichalm" => "Fladnitz an der Teichalm",
"Tulwitz" => "Fladnitz an der Teichalm",
"Fladnitz/T." => "Fladnitz an der Teichalm",
"Fladnitz a. d. Teichalm" => "Fladnitz an der Teichalm",
"Stübing" => "Deutschfeistritz",
"Minihof Liebau" => "Minihof-Liebau",
"Windisch-Minihof" => "Minihof-Liebau",
"Windisch Minihof" => "Minihof-Liebau",
"St. Anna / Aigen" => "Sankt Anna am Aigen",
"St.Anna" => "Sankt Anna am Aigen",
"St.Anna/Aigen" => "Sankt Anna am Aigen",
"St. Margarethen" => "St. Margarethen an der Raab",
"St. Margarethen a.d.Raab" => "St. Margarethen an der Raab",
"St. Margarethen a.d.R." => "St. Margarethen an der Raab",
"Passeil" => "Passail",
"Neudorf b. Passail" => "Passail",
"Neudorf bei Passail" => "Passail",
"Edelsbach" => "Edelsbach bei Feldbach",
"Neuhaus am Klausenb." => "Neuhaus am Klausenbach",
"Kirchberg" => "Kirchberg an der Raab",
"Kirchberg a.d. Raab" => "Kirchberg an der Raab",
"Kirchberg a.d. R." => "Kirchberg an der Raab",
"Kirchberg a. d. Raab" => "Kirchberg an der Raab",
"Kirchberg a. d. Raab" => "Kirchberg an der Raab",
"Kalsdorf" => "Kalsdorf bei Graz",
"Strass" => "Straß in Steiermark",
"St.Oswald o.E." => "Eibiswald",
"St. Peter i. S." => "Sankt Peter im Sulmtal",
"St. Nikolai i.S." => "Sankt Nikolai im Sausal",
"St. Nikoai im Sausal" => "Sankt Nikolai im Sausal",
"Limberg B. Wies" => "Wies",
"Limberg bei Wies" => "Wies",
"Kitzeck" => "Kitzeck im Sausal",
"Nikolai i. S." => "Sankt Nikolai im Sausal",
"St.Nikolai i.S." => "Sankt Nikolai im Sausal",
"St. Nikolai i. S." => "Sankt Nikolai im Sausal",
"Braunau/Inn" => "Braunau am Inn",
"Hohenbrugg" => "Fehring",
"Seiersberg - Pirka" => "Seiersberg-Pirka",
"Heiligenkreuz a. W." => "Heiligenkreuz am Waasen",
"Heiligen Kreuz am Waasen" => "Heiligenkreuz am Waasen",
"Heiligenkreuz a.W." => "Heiligenkreuz am Waasen",
"Heiligenkreuz /W" => "Heiligenkreuz am Waasen",
"Heiligenkreuz a/W" => "Heiligenkreuz am Waasen",
"Rettenbach in der Oststeiermark" => "Pirching am Traubenberg",
"Rettenbach" => "Pirching am Traubenberg",
"St. Ulrich im Greith" => "Sankt Martin im Sulmtal",
"St. Martin i. S." => "Sankt Martin im Sulmtal",
"St. Georgen/Stiefing" => "Sankt Georgen an der Stiefing",
"St. Georgen a. d. Stiefing" => "Sankt Georgen an der Stiefing",
"St.Georgen a/d Stief." => "Sankt Georgen an der Stiefing",
"St. Georgen" => "Sankt Georgen an der Stiefing",
"St. Johann im Sausal" => "Sankt Johann im Saggautal",
"Naas bei Weiz" => "Naas",
"Nöstl bei Weiz" => "Weiz",
"Weiz/Krottendorf" => "Weiz",
"St. Andrä Höch" => "Sankt Andrä-Höch",
"St.Andrä/Sausal" => "Sankt Andrä-Höch",
"Sankt Andrä Höch" => "Sankt Andrä-Höch",
"St. Andrä/Höch" => "Sankt Andrä-Höch",
"St. Andrä - Höch" => "Sankt Andrä-Höch",
"St. Andrä i/S" => "Sankt Andrä-Höch",
"St. Andrä" => "Sankt Andrä-Höch",
"St. Andrä /Höch" => "Sankt Andrä-Höch",
"Hartl bei Kaindorf" => "Hartl",
"Hartl/Tiefenbach" => "Hartl",
"Tilmitsch" => "Tillmitsch",
"St.Marein b. Graz" => "Sankt Marein bei Graz",
"St. Marein b. Graz" => "Sankt Marein bei Graz",
"St. Marein / Graz" => "Sankt Marein bei Graz",
"St. Marein" => "Sankt Marein bei Graz",
"St. MArein b. Graz" => "Sankt Marein bei Graz",
"Weiz - Thannhausen" => "Thannhausen",
"Hof bei Straden" => "Tieschen",
"Kopfing bei Kaindorf" => "Kaindorf",
"Wettmanstätten" => "Wettmannstätten",
"Kirchbach" => "Kirchbach-Zerlach",
"KIRCHBACH" => "Kirchbach-Zerlach",
"Kirchbach - Zerlach" => "Kirchbach-Zerlach",
"Kirchbach Zerlach" => "Kirchbach-Zerlach",
"Kirchbach/Zerlach" => "Kirchbach-Zerlach",
"Kirchbach in der Steiermark" => "Kirchbach-Zerlach",
"Groß-St. Florian" => "Groß Sankt Florian",
"Groß St. Florian" => "Groß Sankt Florian",
"Lang/Lebring" => "Lang",
"St.Stefan" => "Sankt Stefan ob Stainz",
"St.Stefan/Stainz" => "Sankt Stefan ob Stainz",
"St.Josef/Stainz" => "Sankt Josef (Weststeiermark)",
"Rosental" => "Rosental an der Kainach",
"Krottendorf" => "Krottendorf-Gaisfeld",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
//"" => "Sankt Ruprecht an der Raab",
];
public function __construct($request = false) {
$this->request = $request;
@@ -145,6 +283,160 @@ class Admin_RtrReporting {
exit;
}
protected function b10reportAction() {
$data = [];
$adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$ort2gem = [];
foreach(ContractModel::searchActive([]) as $contract) {
if(!$contract->product->attributes["rtr_tech_code"]->value) continue;
$prod_code = $contract->product->attributes["rtr_tech_code"]->value;
$bb_down = $contract->product->attributes["bw_down"]->value;
$bb_up = $contract->product->attributes["bw_up"]->value;
if(!$bb_down && substr($prod_code,0,4) == "1042") {
// funkprodukt
$bb_down = 50;
$bb_up = 10;
}
if(!$bb_down) {
/*$m = [];
if(preg_match('@\d/\d@', $contract->product_name, $m)) {
}*/
echo "Keine BB für ".$contract->product_name." ".$contract->id."\n";
exit;
}
$is_sym = false;
if($bb_down == $bb_up) {
$is_sym = true;
$bb_code = $this->getRtrBBCode($bb_down, "sym");
} else {
$bb_code_down = $this->getRtrBBCode($bb_down, "down");
$bb_code_up = $this->getRtrBBCode($bb_up, "up");
}
if($contract->termination_id) {
$plz = trim($contract->termination->building->zip);
$ort = trim($contract->termination->building->city);
} else {
$plz = trim($contract->owner->zip);
$ort = trim($contract->owner->city);
}
// get Gemeinde ID
if(!$ort) {
continue;
}
$ort = preg_replace('/\s+/', ' ', $ort);
$orte = [$ort];
if(substr($ort, 0, 4) == "St. " || substr($ort, 0, 4) == "St, ") {
$orte[] = preg_replace('/^St[.,]/', "Sankt", $ort);
}
if(substr($ort, 0, 3) == "St." || substr($ort, 0, 3) == "St,") {
$orte[] = preg_replace('/^St[.,]/', "Sankt ", $ort);
}
if(array_key_exists($ort, $this->ort_replace)) {
$orte[] = $this->ort_replace[$ort];
}
if(!array_key_exists("$plz--$ort", $ort2gem)) {
$sql = AddressDB::$wohneinheit_query;
$where = " WHERE Plz.plz='$plz' AND Gemeinde.name IN ('".implode("','", $orte)."') LIMIT 1";
$sql .= $where;
//$this->log->debug("$sql\n$where");
$res = $adb->query($sql);
if(!$adb->num_rows($res)) {
$sql = AddressDB::$wohneinheit_query;
$where = " WHERE Plz.plz='$plz' AND Ortschaft.name IN ('".implode("','", $orte)."') LIMIT 1";
//$this->log->debug("$sql\n$where");
$sql .= $where;
$res = $adb->query($sql);
if(!$adb->num_rows($res)) {
echo "Geminde nicht gefunden Plz.plz='$plz' AND Ortschaft.name='$ort'\n";
exit;
}
}
$row = $adb->fetch_object($res);
if(!$row->gemeinde_kennziffer) {
echo "Keine Gem KZ $plz $ort\n";
exit;
}
$gemid = $row->gemeinde_kennziffer;
//$this->log->debug("Adding '$plz--$ort' to $gemid");
$ort2gem["$plz--$ort"] = $gemid;
} else {
$gemid = $ort2gem["$plz--$ort"];
}
if(!array_key_exists($gemid, $data)) {
$data[$gemid] = [];
}
if(!array_key_exists($prod_code, $data[$gemid])) {
$data[$gemid][$prod_code] = [];
}
if($is_sym) {
if(!array_key_exists($bb_code, $data[$gemid][$prod_code])) {
$data[$gemid][$prod_code][$bb_code] = 0;
}
$data[$gemid][$prod_code][$bb_code]++;
} else {
if(!array_key_exists($bb_code_down, $data[$gemid][$prod_code])) {
$data[$gemid][$prod_code][$bb_code_down] = 0;
}
if(!array_key_exists($bb_code_up, $data[$gemid][$prod_code])) {
$data[$gemid][$prod_code][$bb_code_up] = 0;
}
$data[$gemid][$prod_code][$bb_code_down]++;
$data[$gemid][$prod_code][$bb_code_up]++;
}
}
$csv_header = "gemid;code;bb;anz_akt_anschl";
$csv = $csv_header."\n";
foreach($data as $gemid => $gem) {
foreach($gem as $prod_code => $prod) {
foreach($prod as $bb_code => $count) {
$csv .= $gemid . ";";
$csv .= $prod_code . ";";
$csv .= $bb_code . ";";
$csv .= $count . ";";
$csv .= "\n";
}
}
}
header("Content-type: text/csv; charset=utf-8");
header('Content-disposition: attachment; filename="rtr-B10-report-'.date('Y-m-d_H-i-s').'.csv"');
echo $csv;
exit;
}
/*
* 1042% = radio
* 1431% = fiber
@@ -166,4 +458,55 @@ class Admin_RtrReporting {
}
private function getRtrBBCode($bb, $direction = "down") {
if($direction == "down") {
if($bb < 1) return 1;
if($bb >= 1 && $bb < 2) return 2;
if($bb >= 2 && $bb < 10) return 3;
if($bb >= 10 && $bb < 30) return 4;
if($bb >= 30 && $bb < 50) return 5;
if($bb >= 50 && $bb < 75) return 6;
if($bb >= 75 && $bb < 100) return 7;
if($bb >= 100 && $bb < 150) return 8;
if($bb >= 150 && $bb < 300) return 9;
if($bb >= 300 && $bb < 1000) return 10;
if($bb >= 1000) return 11;
}
if($direction == "up") {
if($bb < 0.5) return 51;
if($bb >= 0.5 && $bb < 1) return 52;
if($bb >= 1 && $bb < 2) return 53;
if($bb >= 2 && $bb < 3) return 54;
if($bb >= 3 && $bb < 5) return 55;
if($bb >= 5 && $bb < 10) return 56;
if($bb >= 10 && $bb < 20) return 57;
if($bb >= 20 && $bb < 30) return 58;
if($bb >= 30 && $bb < 40) return 59;
if($bb >= 40 && $bb < 100) return 60;
if($bb >= 100 && $bb < 150) return 61;
if($bb >= 150 && $bb < 300) return 62;
if($bb >= 3000 && $bb < 1000) return 63;
if($bb >= 1000) return 64;
}
if($direction == "sym") {
if($bb < 1) return 21;
if($bb >= 1 && $bb < 2) return 22;
if($bb >= 2 && $bb < 10) return 23;
if($bb >= 10 && $bb < 30) return 24;
if($bb >= 30 && $bb < 50) return 25;
if($bb >= 50 && $bb < 75) return 26;
if($bb >= 75 && $bb < 100) return 27;
if($bb >= 100 && $bb < 150) return 28;
if($bb >= 150 && $bb < 300) return 29;
if($bb >= 300 && $bb < 500) return 30;
if($bb >= 500 && $bb < 750) return 31;
if($bb >= 750 && $bb < 1000) return 32;
if($bb >= 1000) return 33;
}
return 0;
}
}