#!/usr/bin/php $gemeinde_kz]); if(!$gemeinde) { die("Gemeinde mit Kennziffer $gemeinde_kz nicht gefunden"); } $connectionTypes = [ "Einfamilienhaus" => "single-dwelling", "Einfahmilienhaus" => "single-dwelling", "Mehrfamilienhaus" => "multi-dwelling", "Mehrparteienhaus" => "apartment-building", "Wohneinheit in Mehrparteienhaus" => "apartment", "Wohnung" => "apartment", "Geschäft" => "business", ]; $preorderTypes = [ "Interessensbekundung" => "interest", "Vorsorgeanschluss" => "provision", "Vollanschluss" => "order", "Nachbestellung" => "reorder", ]; $me = new User(1); $folder = __DIR__."/import/"; $csvname = "Bestellungen Preding.csv"; $filename = $folder.$csvname; $adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); $db = FronkDB::singleton(); $log = mfLoghandler::singleton(); $input = fopen($filename, "r"); $l = 0; $c = 0; $u = 0; $w = 0; while($csv = fgetcsv($input, 0, ";")) { $l++; if($l == 1) continue; if(!trim($csv[0])) { continue; } //var_dump($csv);exit; $campaign_name = trim($csv[0]); $netzgebiet_name = trim($csv[2]); $bestelltyp = trim($csv[6]); $anschlusstyp = trim($csv[8]); $adrcd = trim($csv[9]); $strasse_name = trim($csv[10]); $hausnummer_name = trim($csv[11]); $plz_name = trim($csv[12]); $ort_name = trim($csv[13]); $unit_string = trim($csv[14]); $connection_count = trim($csv[17]); $kunde_firma = trim($csv[18]); $kunde_uid = trim($csv[19]); $kunde_vorname = trim($csv[20]); $kunde_nachname = trim($csv[21]); $kunde_strasse = trim($csv[22]); $kunde_tuer = ""; $kunde_plz = trim($csv[23]); $kunde_ort = trim($csv[24]); $kunde_phone = trim($csv[25]); $kunde_email = trim($csv[26]); $partner_name = trim($csv[27]); $tuer = 0; $m = []; if(preg_match('@ /\s+(?:tür|top)\s+(\d+)$@i', $kunde_strasse, $m)) { if($m[1]) $kunde_tuer = $m[1]; } if($strasse_name == 'Glaserweg' && $hausnummer_name == "1 Top 1") { $hausnummer_name = "1"; $unit_string = "Top 1"; } if($unit_string && preg_match('/(?:tür|top)\s+([0-9.,]+[a-z]*)/i', $unit_string, $m)) { $tuer = $m[1]; } if(!$bestelltyp || !$anschlusstyp || !$strasse_name || !$hausnummer_name || !$plz_name || !$ort_name || !$connection_count || (!$kunde_nachname && !$kunde_vorname && !$kunde_firma) || (!$kunde_phone && !$kunde_email)) { echo "incomplete row $i\n"; continue; } if($strasse_name == "Gewerbepark Süd West") $strasse_name = "Gewerbepark Südwest"; if($strasse_name == "Stanglweg" && $hausnummer_name == "1/2") $hausnummer_name = "1"; if($strasse_name == "Stewfeldstraße") $strasse_name = "Steinfeldstraße"; if($strasse_name == "Beindergasse") $strasse_name = "Bindergasse"; if($strasse_name == "Dorfstraße - Wieselsdorf") $strasse_name = "Dorfstraße"; if($strasse_name == "Leitendorfstraße") $strasse_name = "Leitersdorfstraße"; $strasse_name = $db->escape($strasse_name); $hausnummer_name = $db->escape($hausnummer_name); $strasse_search = [$strasse_name]; if(strpos($strasse_name, ' ') !== false) $strasse_search[] = str_replace(' ', '-', $strasse_name); if(strpos($strasse_name, '-') !== false) $strasse_search[] = str_replace('-', ' ', $strasse_name); if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '. ', $strasse_name); if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.', '.-', $strasse_name); if(strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.', $strasse_name); if(strpos($strasse_name, '. ') !== false) $strasse_search[] = str_replace('. ', '.-', $strasse_name); if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '.', $strasse_name); if(strpos($strasse_name, '.') !== false) $strasse_search[] = str_replace('.-', '. ', $strasse_name); foreach($strasse_search as $search) { if(strpos($search, 'ß') !== false) $strasse_search[] = str_replace('ß', 'ss', $search); if(strpos($search, 'ä') !== false) $strasse_search[] = str_replace('ä', 'ae', $search); if(strpos($search, 'ö') !== false) $strasse_search[] = str_replace('ö', 'oe', $search); if(strpos($search, 'ü') !== false) $strasse_search[] = str_replace('ü', 'ue', $search); if(strpos($search, 'ss') !== false) $strasse_search[] = str_replace('ss', 'ß', $search); if(strpos($search, 'ae') !== false) $strasse_search[] = str_replace('ae', 'ä', $search); if(strpos($search, 'oe') !== false) $strasse_search[] = str_replace('oe', 'ö', $search); if(strpos($search, 'ue') !== false) $strasse_search[] = str_replace('ue', 'ü', $search); } $sql = "SELECT * FROM view_hausnummer WHERE gemeinde_id = ".$gemeinde->id." AND strasse IN ('". implode("', '", $strasse_search)."') AND hausnummer='$hausnummer_name'"; //echo "$sql\n"; /*if(preg_match('/^Tobelbader/i',$strasse_name)) { echo "$sql\n"; }*/ $res = $adb->query($sql); if(!$adb->num_rows($res)) { echo "Adresse '$strasse_name $hausnummer_name' nicht gefunden!\n"; continue; } $data = $adb->fetch_object($res); $netzgebiet_id = $data->netzgebiet_id; $hausnummer_id = $data->hausnummer_id; if(!$netzgebiet_id) { //echo "$strasse_name $hausnummer_name kein Netzgebiet zuvgewiesen\n"; continue; } if(!$hausnummer_id) { echo "Hausnummer leer ($strasse_name $hausnummer_name)\n"; exit; } $network = NetworkModel::getFirst(["adb_netzgebiet_id" => $netzgebiet_id]); if(!$network) { echo "thetool Netzgebiet nicht gefunden (adb netzgebiet id $netzgebiet_id)\n"; continue; } $campaign = PreordercampaignModel::getFirst(["network_id" => $network->id]); if(!$campaign) { echo "Kampagne für Network ".$network->id." ".$network->name." nicht gefunden\n"; continue; } //echo $campaign->name." (".$network->name.")\n"; //var_dump($data);exit; $hausnummer = new ADBHausnummer($data->hausnummer_id); $wohneinheiten = ADBWohneinheitModel::search(["hausnummer_id" => $hausnummer->id]); $unit_count = count($wohneinheiten); if(!$unit_count) { echo "Keine Wohneinheiten gefunden $strasse_name $hausnummer_name\n"; continue; } $product_search = ['external_id' => $partner_id, 'attributename' => "presales", 'attributevalue' => ($preorderTypes[$bestelltyp] == "order") ? "activation" : $preorderTypes[$bestelltyp] ]; $product = ProductModel::getFirst($product_search); if(!$product) { echo "Kein product gefunden: $bestelltyp\n"; continue; } $price = $product->price; $price_setup = $product->price_setup; $pdata = [ 'preordercampaign_id' => $campaign->id, 'adb_hausnummer_id' => $hausnummer->id, 'status_id' => 1, 'connection_type' => $connectionTypes[$anschlusstyp], 'connection_count' => 1, 'product_id' => null, 'setup_product_id' => $product->id, 'type' => $preorderTypes[$bestelltyp], 'price' => null, 'price_setup' => $price_setup, 'price_nne' => null, 'price_nbe' => null, 'billing_delay' => null, 'billing_period' => null, 'partner_id' => $partner_id, 'accept_agb' => 1, 'accept_dsgvo' => 1, 'accept_marketing' => 1, 'accept_withdrawal' => 1, 'contact_type' => "owner", 'company' => ($kunde_firma) ? $kunde_firma : null, 'uid' => ($kunde_uid) ? $kunde_uid : null, 'firstname' => $kunde_vorname, 'lastname' => $kunde_nachname, 'street' => $kunde_strasse, 'housenumber' => null, 'tuer' => null, 'zip' => $kunde_plz, 'city' => $kunde_ort, 'phone' => $kunde_phone, 'email' => $kunde_email, 'submit_type' => "import", 'create_by' => 1, 'edit_by' => 1 ]; if($connection_count == 1) { if($unit_count === 1) { $unit = $wohneinheiten[0]; // check if wohneinheit in existing preorder if(PreorderModel::getFirst(["adb_wohneinheit_id" => $unit->id])) { //echo "1 Wohneinheit schon vergeben $strasse_name $hausnummer_name (unit id ".$unit->id."\n"; continue; } if(!$unit->oaid) { $unit->oaid = $unit->getNewOAID(); $unit->save(); } //create single preorder $pdata['adb_wohneinheit_id'] = $unit->id; $preorder = PreorderModel::create($pdata); $preorder->ucode = $preorder->createUcode(); $preorder->oaid = $unit->oaid; if(!$preorder->save()) { var_dump($preorder);exit; } continue; } if(($unit_count > 1 && $unit_count <= 4) || ($unit_count > 1 && $tuer)) { // assume its single-dwelling with erroneously high door count $unit_candidates = []; $fixed_candidate = false; foreach($wohneinheiten as $unit) { if(!$unit->tuer) continue; if($unit->tuer > 1) { $unit_candidates[$unit->tuer] = $unit; if($tuer && $unit->tuer == $tuer) { $fixed_candidate = $unit; } } } if(!count($unit_candidates)) { foreach($wohneinheiten as $unit) { if(!$unit->zusatz) continue; if(preg_match('/Top\s+\d+/i',$unit->zusatz)) { $unit_candidates[$unit->zusatz] = $unit; } } } if(!count($unit_candidates)) { $unit_candidates = $wohneinheiten; } if(count($unit_candidates)) { if($fixed_candidate) { $unit = $fixed_candidate; } else { ksort($unit_candidates, SORT_NUMERIC); $unit = array_shift($unit_candidates); } if(PreorderModel::getFirst(["adb_wohneinheit_id" => $unit->id])) { //echo "2 Wohneinheit schon vergeben $strasse_name $hausnummer_name (unit id ".$unit->id."\n"; continue; } if(!$unit->oaid) { $unit->oaid = $unit->getNewOAID(); $unit->save(); } //create single preorder $pdata['adb_wohneinheit_id'] = $unit->id; $preorder = PreorderModel::create($pdata); $preorder->ucode = $preorder->createUcode(); $preorder->oaid = $unit->oaid; //var_dump($preorder);exit; if(!$preorder->save()) { var_dump($preorder);exit; } //echo "Wohneinheit saved\n"; continue; } } } elseif($connection_count > 1) { if($unit_count < $connection_count) { /*$mu = []; $mu['preorder'] = $preorder; $mu['unit_count'] = $unit_count; $missing_units[] = $mu;*/ echo "$strasse_name $hausnummer_name: Nicht genug Wohneinheiten ".count($wohneinheiten)." - need ".$connection_count."\n"; continue; } $available_units = []; foreach($wohneinheiten as $unit) { if(!PreorderModel::getFirst(["adb_wohneinheit_id" => $unit->id])) { if($unit->tuer || preg_match('/^Top\s+\d+$/', $unit->zusatz)) { $available_units[] = $unit; } } } if($connection_count > count($available_units)) { // this usually means this order was created already /*$md = []; $md["unit_count"] = $unit_count; $md["door_count"] = count($available_units); $md["preorder"] = $preorder; $missing_doors[] = $md;*/ /*echo "$strasse_name $hausnummer_name: Not enough units with tuer - units total: $unit_count; units with tuer: ".count($available_units)."; need: ".$connection_count."\n"; foreach($available_units as $u) { echo $u->oaid. " tuer ".$u->tuer."\n"; }*/ continue; } //continue; // create new Preorders with available units // then set original Preorder deleted echo "Creating $connection_count new preorders\n"; for($i = 0; $i < $connection_count; $i++) { $unit = $available_units[$i]; if(PreorderModel::getFirst(["adb_wohneinheit_id" => $unit->id])) { //echo "3 Wohneinheit schon vergeben $strasse_name $hausnummer_name (unit id ".$unit->id."\n"; continue; } $pdata['adb_wohneinheit_id'] = $unit->id; $preorder = PreorderModel::create($pdata); $preorder->ucode = $preorder->createUcode(); $preorder->oaid = $unit->oaid; //var_dump($preorder);exit; if(!$preorder->save()) { var_dump($preorder);exit; } } continue; } echo "Not processed: $strasse_name $hausnummer_name -> need $connection_count but have $unit_count units \n"; }