diff --git a/Layout/default/Admin/IvtContractImport.php b/Layout/default/Admin/IvtContractImport.php index 1e69bbcc2..919bb11c9 100644 --- a/Layout/default/Admin/IvtContractImport.php +++ b/Layout/default/Admin/IvtContractImport.php @@ -1,79 +1,103 @@ - - +
-
-
-
- -
-

IVT Import

+
+
+
+ +
+

IVT Import

+
-
- +
-
- - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - -
KundeIVT ProduktProduktPreis SetupPreisRech. IntervalAktion
getCompanyOrName()?>name?>name?>price_setup?>price?> - billing_period?> (billing_period == 1) ? "Monatlich" : ""?>billing_period == 12) ? "Jährlich" : ""?>billing_period == 24) ? "Zweijährlich" : ""?>billing_period == 36) ? "Dreijährlich" : ""?>) -
- -
- 1])?>"> +
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KundeIVT KundeIVT ProduktProduktPreis SetupPreisRech. IntervalHerstellungsd.AktionBestellung
getCompanyOrName()?> + (customer_number?>) + id?>name?>name?>price_setup?>price?> + billing_period?> + ( + billing_period == 1) ? "Monatlich" : ""?> + billing_period == 12) ? "Jährlich" : ""?> + billing_period == 24) ? "Zweijährlich" : ""?> + billing_period == 36) ? "Dreijährlich" : ""?> + ) + finish_date)?> + order_id): ?> + $d["orderproduct"]->order_id])?>" target="_blank">order_id?> + +
+ + + +
+
- -
-
-
- + - \ No newline at end of file + \ No newline at end of file diff --git a/application/Address/Address.php b/application/Address/Address.php index ea834c6ae..2d612b4d5 100644 --- a/application/Address/Address.php +++ b/application/Address/Address.php @@ -78,7 +78,12 @@ class Address extends mfBaseModel { $name_search = []; if($this->company) $name_search[] = $this->company; if($this->lastname) $name_search[] = $this->lastname; - + + $country = new Country($this->country_id); + if(!$country) { + return false; + } + $fibumerge = XinonFibuMergeModel::getFirst(["old_custnum" => $old_custnum, "name" => $name_search]); if(!$fibumerge) { // create fibu merge @@ -91,6 +96,7 @@ class Address extends mfBaseModel { "strasse" => $this->street, "plz" => $this->zip, "ort" => $this->city, + "land" => $country->isocode, "create_by" => 1, "edit_by" => 1 ]); diff --git a/application/Address/AddressModel.php b/application/Address/AddressModel.php index ef8298956..dc61e811a 100644 --- a/application/Address/AddressModel.php +++ b/application/Address/AddressModel.php @@ -52,6 +52,11 @@ class AddressModel { $me = new User(); $me->loadMe(); + if($model->phone == null) $model->phone = ""; + if($model->fax == null) $model->fax = ""; + if($model->mobile == null) $model->mobile = ""; + if($model->email == null) $model->email = ""; + if (!is_numeric($model->create_by) && !$model->create_by) { $model->create_by = $me->id; } diff --git a/application/Admin/AdminController.php b/application/Admin/AdminController.php index 7d9acd6bb..65cac0c1b 100644 --- a/application/Admin/AdminController.php +++ b/application/Admin/AdminController.php @@ -127,7 +127,7 @@ class AdminController extends mfBaseController { $products = []; foreach($ivtproducts as $product) { - $active_count = IvtCustomerProductModel::count(['pid' => $product->id]); + $active_count = IvtCustomerTelephoneNrModel::count(['pid' => $product->id]); if(!$active_count) continue; $new_product = []; @@ -136,7 +136,7 @@ class AdminController extends mfBaseController { $new_product["customer"] = false; if($active_count == 1) { - $cp = IvtCustomerProductModel::getFirst(["pid" => $product->id]); + $cp = IvtCustomerTelephoneNrModel::getFirst(["pid" => $product->id]); //var_dump($cp);exit; $customer = $cp->customer; //var_dump($customer);exit; @@ -151,7 +151,7 @@ class AdminController extends mfBaseController { } protected function ivtContractImportAction() { - exit; + //exit; $doit = false; if($this->request->doit == 1) { $doit = true; diff --git a/application/Admin/functions/IvtContractImport.php b/application/Admin/functions/IvtContractImport.php index 5cf184fec..891d38434 100644 --- a/application/Admin/functions/IvtContractImport.php +++ b/application/Admin/functions/IvtContractImport.php @@ -1,305 +1,731 @@ request = $request; - } - - public function run($doit = false) { - echo "running...
\n"; - $data = []; - $data['ignore'] = 0; - $data["contracts"] = []; - foreach(IvtCustomerProductModel::getAll() as $ivt_contract) { - $ivt_customer = $ivt_contract->customer; - $ivt_product = $ivt_contract->product; - - if(!$this->checkIvtCustomer($ivt_customer)) { - echo "IVT Customer ".$ivt_contract->cid." nicht im tool
\n"; - exit; - } - - $productMatch = IvtProductMatchModel::getFirst(["ivt_product_id" => $ivt_contract->pid]); - if(!$productMatch) { - echo "Kein Match zu IVT Product ".$ivt_contract->pid." gefunden.
\n"; - exit; - } - - - if(!$this->checkIvtProduct($productMatch->ivtproduct)) { - exit; - } - - $customer = AddressModel::getFirst(["customer_number" => $ivt_contract->cid]); - $ip = $productMatch->ivtproduct; - $product = $productMatch->product; - - if(!$customer->id) { - echo "Kein thetool Kunde zu IVT customer ".$ivt_contract->cid." gefunden -> wird angelegt
\n"; - $customer = $this->createAddressFromIvtCustomer($ivt_contract->customer); - if(!$customer) { - echo "Fehler beim anlegen der Adresse
\n"; - exit; + private $request; + private $log; + private $static_ivt_order_match = []; + + public function __construct($request) { + $this->request = $request; + $this->log = mfLoghandler::singleton(); + + /* + * ivt::customer_product::id => Order::id + * SELECT cp.id,cp.cid,cp.pid,products.name,cp.sid,cp.created,cp.lastdate,cp.comment,tp.name + * FROM `customer_product` as cp LEFT JOIN products ON (cp.pid = products.id) + * LEFT JOIN thetool_live4.IvtProductMatch ipm ON (ipm.ivt_product_id = cp.pid) + * LEFT JOIN thetool_live4.Product tp ON (ipm.product_id = tp.id) + * WHERE `cid` = 1840; + */ + $this->static_ivt_order_match = [ + 17245 => 3946, // lugitsch 1840 + 16704 => 3342, + 16703 => 3342, + 15712 => 3414, + 14798 => 2940, + 14322 => 2623, + 14321 => 2623, + 14222 => 2702, + 13951 => 2218, + 13322 => 2623, + 2034 => false, + 561 => false, + + 11409 => 1222, // x-tec 1842 + 14192 => 2596 + ]; + } + + public function run($doit = false) { + echo "running...
\n"; + $data = []; + $data['ignore'] = 0; + $data["contracts"] = []; + + $new_contracts = []; + $last_cid = 0; + + $i = 0; + foreach(IvtCustomerProductModel::search(["lasdt_date>", "2023-04-01"], "cid") as $ivt_contract) { + if($i > 1000 && $ivt_contract->cid != $last_cid) break; // only break after the last ivtcontract of this customer + $last_cid = $ivt_contract->cid; + + $i++; + $neu = []; + $orderproduct = false; + $orderproduct_id = false; + + $ivt_customer = $ivt_contract->customer; + $ivt_product = $ivt_contract->product; + + /* + * get thetool product from IvtProductMatch + */ + $productMatch = IvtProductMatchModel::getFirst(["ivt_product_id" => $ivt_contract->pid]); + if(!$productMatch) { + echo "Kein Match zu IVT Product " . $ivt_contract->pid . " gefunden.
\n"; + exit; + } + + if(!$this->checkIvtProduct($productMatch->ivtproduct, $doit)) { + exit; + } + + $ip = $productMatch->ivtproduct; + $product = $productMatch->product; + + /* + * check ivt customer and get Billingaddress + */ + $billingaddress_id = false; + + $customer_check_return = $this->checkIvtCustomer($ivt_contract, $ivt_customer, $product); + + if(!$customer_check_return || !array_key_exists("billingaddress_id", $customer_check_return) || !$customer_check_return["billingaddress_id"]) { + echo "IVT Customer " . $ivt_contract->cid . " nicht im tool
\n"; + exit; + } + + $billingaddress_id = $customer_check_return["billingaddress_id"]; + + /* + * get or create customer + */ + $customer = AddressModel::getFirst(["customer_number" => $ivt_contract->cid]); + /*if($ivt_contract->id == 3035) { + var_dump($ivt_contract->cid, $customer); + }*/ + + if(!$customer) { + $this->log->debug("Kein thetool Kunde zu IVT customer " . $ivt_contract->cid . " gefunden -> wird angelegt"); + $customer = $this->createAddressFromIvtCustomer($ivt_contract->customer); + if(!$customer) { + echo "Fehler beim anlegen der Adresse
\n"; + exit; + } + } + + + /* + // check if contract was imported already + $existing_contract = ContractModel::getFirst(["imported_from" => "ivt", "imported_data" => $ivt_contract->id]); + if($existing_contract) { + //echo "Contract gibts schon ".$existing_contract->id."
\n"; + continue; + } + */ + + + + $finish_date = new DateTime($ivt_contract->created); + $finish_date->modify("+2 hours"); + + + $contract_data = []; + $contract_data['owner_id'] = $customer->id; + $contract_data['billingaddress_id'] = $billingaddress_id; + $contract_data['product_id'] = $product->id; + $contract_data['product_name'] = $ip->name; + $contract_data['amount'] = 1; + $contract_data['price'] = $ip->price; + $contract_data['price_setup'] = 0; + $contract_data['price_nne'] = 0; + $contract_data['price_nbe'] = 0; + $contract_data['sla_id'] = $this->getNewSlaId($ivt_contract->sid); + $contract_data['order_date'] = $finish_date->getTimestamp(); + $contract_data['finish_date'] = $finish_date->getTimestamp(); + $contract_data['finish_date_by'] = 1; + $contract_data['imported_from'] = "ivt"; + $contract_data['imported_data'] = $ivt_contract->id; + $contract_data['create_by'] = 1; + $contract_data['edit_by'] = 1; + + switch($ip->interval) { + case 0: + $contract_data['billing_period'] = 1; + break; + case 1: + $contract_data['billing_period'] = 12; + break; + } + + + $neu["customer"] = $customer; + $neu["ivtcustomer"] = $ivt_customer; + $neu["ivtproduct"] = $ip; + $neu["product"] = $product; + $neu["orderproduct"] = false; + $neu['action'] = "import"; + $ignore = false; + + if($product->price <= 0 && $ivt_contract->cid != 1799) { + $contract_data['price'] = 0; + $contract_data['price_setup'] = $ip->price; + $contract_data['billing_period'] = 0; + $neu['action'] = "ignore"; + $ignore = true; + } + + if($product->billing_period > 1 && $ivt_contract->last_date < "2023-04-08") + + /* + * Try to match ivt contract to thetool Order + */ + $order = OrderModel::getFirst(["owner_id" => $customer->id]); + + if($order) { + foreach($order->products as $orderproduct) { + if($orderproduct->product_id == $product->id) { + $orderproduct_id = $orderproduct->id; + if($orderproduct->termination_id) { + $contract_data['termination_id'] = $orderproduct->termination_id; + } + break; + } + } + if($orderproduct_id) { + $contract_data["orderproduct_id"] = $orderproduct->id; + $neu["orderproduct"] = $orderproduct; + } else { + $this->log->debug("Kein Orderproduct gefunden in Order ".$order->id." für Ivt customer_product ".$ivt_contract->id); + } + } else { + //$this->log->debug("Keine thetool order für ivt customer_product ".$ivt_contract->id); + } + + /* + * Create Contract (dont save yet) + */ + $contract = ContractModel::create($contract_data); + if(trim($ivt_contract->comment)) { + $contract->matchcode = trim($ivt_contract->comment); + } else { + $contract->matchcode = $contract->generateMatchcode(); + } + /*if($ivt_contract->id == 3035) { + var_dump($contract); + }*/ + $neu["contract"] = $contract; + + if($doit && !$ignore) { + $contract_id = $contract->save(); + if(!$contract_id) { + echo "Fehler beim Contract speichern!
\n"; + exit; + } + + if(!array_key_exists($ivt_customer->id, $new_contracts)) { + $new_contracts[$ivt_customer->id] = []; + } + $new_contracts[$ivt_customer->id][] = $contract; + + + // create journal entry + $journal = ContractjournalModel::create([ + 'contract_id' => $contract_id, + 'type' => "created_from", + 'value' => "import", + 'text' => "IVT customer_product ".$ivt_contract->id."; cid: ".$ivt_contract->cid."; pid: ".$ivt_contract->pid + ]); + $journal_id = $journal->save(); + if(!$journal_id) { + echo "Fehler beim Journal erstellen.
\n"; + exit; + } + + // import Contractconfig + + } + + if($doit && !$ignore) { + $contractconfig = $this->importContractconfig($ivt_customer, $ivt_product, $contract); + } + + //var_dump($contractconfig);exit; + + $data["contracts"][] = $neu; + if($neu['action'] == "ignore") { + $data['ignore']++; + } + + /*if($ivt_contract->id == 3035) { + var_dump($neu);exit; + }*/ } - } - /* - // check if contract was imported already - $existing_contract = ContractModel::getFirst(["imported_from" => "ivt", "imported_data" => $ivt_contract->id]); - if($existing_contract) { - //echo "Contract gibts schon ".$existing_contract->id."
\n"; - continue; - } - */ - - - $contract_data = []; - $contract_data['owner_id'] = $customer->id; - //$contract_data['billingaddress_id'] = $customer->id; - $contract_data['product_id'] = $product->id; - $contract_data['product_name'] = $ip->name; - $contract_data['matchcode'] = ""; - $contract_data['amount'] = 1; - $contract_data['price'] = $ip->price; - $contract_data['price_setup'] = 0; - $contract_data['finish_date'] = mktime(2,0,0,date("m"),1,date("Y")); - $contract_data['finish_date_by'] = 1; - $contract_data['imported_from'] = "ivt"; - $contract_data['imported_data'] = $ivt_contract->id; - - switch($ip->interval) { - case 0: - $contract_data['billing_period'] = 1; - break; - case 1: - $contract_data['billing_period'] = 12; - break; - } - - - $neu["customer"] = $customer; - $neu["ivtproduct"] = $ip; - $neu["product"] = $product; - $neu['action'] = "import"; - $ignore = false; - - if($product->price <= 0) { - $contract_data['price'] = 0; - $contract_data['price_setup'] = $ip->price; - $contract_data['billing_period'] = 0; - $neu['action'] = "ignore"; - $ignore = true; - } - - $contract = ContractModel::create($contract_data); - $neu["contract"] = $contract; - - if($doit && !$ignore) { - $contract_id = $contract->save(); - if(!$contract_id) { - echo "Fehler beim Contract speichern!
\n"; - exit; + + if($doit) { + $this->log->debug("Linking new contracts and creating missing matchcodes"); + //var_dump($new_contracts[1789]);exit; + foreach($new_contracts as $ivt_customer_id => $contracts) { + if(count($contracts) < 2) continue; + $prev_contracts = []; + $primary_matchcode = false; + $primary_matchcode_source_product_group = ""; + $primary_matchcode_no_productgroups_pattern = '/(Pauschalen|TV|Managed Services|Vorbestellung|Mobilfunk|Standortvernetzung|Colo|Vorort|Webhosting|zusatz)/i'; + + + foreach($contracts as $contract) { + if($contract->matchcode && !$primary_matchcode && !preg_match($primary_matchcode_no_productgroups_pattern, $contract->product->productgroup->name)) { + $primary_matchcode = $contract->matchcode; + $primary_matchcode_source_product_group = $contract->product->productgroup->name; + } + if($primary_matchcode && !$contract->matchcode && !preg_match($primary_matchcode_no_productgroups_pattern, $primary_matchcode_source_product_group)) { + $contract->matchcode = $primary_matchcode; + $contract->save(); + } + + if(!count($prev_contracts)) { + $prev_contracts[] = $contract; + continue; + } + foreach($prev_contracts as $prev) { + if(!$prev->matchcode && $primary_matchcode && !preg_match($primary_matchcode_no_productgroups_pattern, $primary_matchcode_source_product_group)) { + $prev->matchcode = $primary_matchcode; + $prev->save(); + } + if(preg_match('/Service Pauschale/i',$prev->product->name)) { + foreach($contracts as $c) { + if($c->termination_id && $c->matchcode) { + $prev->matchcode = $c->matchcode; + $prev->save(); + break; + } + } + } + + + if (ContractLinkModel::getFirst(["contract_id" => $contract->id, "origin_contract_id" => $prev->id])) { + continue; + } + $link = ContractLinkModel::create([ + 'contract_id' => $contract->id, + 'origin_contract_id' => $prev->id, + 'type' => 'link' + ]); + $link->save(); + } + $prev_contracts[] = $contract; + + + + } + } } - - // create journal entry - $journal = ContractjournalModel::create([ - 'contract_id' => $contract_id, - 'type' => "created_from", - 'value' => "import", - 'text' => "IVT" - ]); - $journal_id = $journal->save(); - if(!$journal_id) { - echo "Fehler beim Journal erstellen.
\n"; - exit; + + return $data; + } + + private function checkIvtCustomer($ivt_contract, $ivt_customer, $product, $doit = false) + { + $return = []; + // create customer if not exists + $ivt_custnum = $ivt_customer->id; + if (!$ivt_custnum) return false; + + // sync billing address + $owner = AddressModel::getFirst(["customer_number" => $ivt_custnum]); + if (!$owner) { + //var_dump($ivt_customer, $ivt_contract); + die("Address $ivt_custnum not found!"); } - - // import Contractconfig - $this->importContractconfig($ivt_customer, $ivt_product, $contract); - - - } - - $data["contracts"][] = $neu; - if($neu['action'] == "ignore") { - $data['ignore']++; - } - } - return $data; - } - - private function checkIvtCustomer($customer) { - // create customer if not exists - $old_custnum = $customer->id; - if(!$old_custnum) return false; - - // TODO: sync bank data - - return true; - } - - private function checkIvtProduct($product) { - if(!$product->id) { - echo __METHOD__.": Keine Produkt id
\n"; - return false; - } - if(!$product->name) { - echo __METHOD__.": Keine Produkt id
\n"; - return false; - } - return true; - } - - private function importContractconfig($ivt_customer, $ivt_product, $contract) { - var_dump($contract, $contract->product, $contract->configgroups); - - - if(!is_array($contract->configgroups) || !count($contract->configgroups)) { - return true; - } - - $product = $contract->product; - if(!$product->id) { - echo "Produkt nicht gefunden für Contract ".$contract->id."
\n"; - exit; - } - - // lookup radius data - $radius_data = $this->getRadiusUser($ivt_customer, $ivt_product, $contract); - // lookup voip data - $voip_data = $this->getVoipData($ivt_customer, $ivt_product, $contract); - - foreach($contract->configgroups as $cgroup) { - - $items = $cgroup->items; - var_dump($cgroup); - var_dump($items); - - foreach($items as $i) { - switch($i->name) { - case "bandwidth_down": - $i->value->set($product->attributes["bw_down"]->value); - $i->value->save(); - break; - case "bandwidth_up": - $i->value->set($product->attributes["bw_up"]->value); - $i->value->save(); - break; - - case "radiususer_username": - $i->value->set($radius_data["username"]); - $i->value->sav(); - break; - case "radiususer_password": - $i->value->set($radius_data["username"]); - $i->value->sav(); - break; - case "radiususer_ipaddress": - $i->value->set($radius_data["ipaddress"]); - $i->value->sav(); - break; - case "radiususer_ipprefix": - $i->value->set($radius_data["subnetmask"]); - $i->value->sav(); - break; - - + + $order = $this->findOrder($ivt_contract); + if(!$order) { + return ["billingaddress_id" => $owner->id]; } - } - - - } - exit; - - /* - * backbone (vlan) - * Radiususer - * Bandbreite - * IPv4 - * SIP daten - * Voip - * Rufnummer - * Webhosting - * - */ - } - - private function getRadiusUser($ivt_customer, $ivt_product, $contract) { - // find radius user - - // return data - } - - private function getVoipData($ivt_customer, $ivt_product, $contract) { - - } - - private function createAddressFromIvtCustomer(IvtCustomer $cust) { - $address_data['customer_number'] = $cust->id; - $address_data['spin'] = $cust->MandatID; - $address_data['company'] = $cust->company; - $address_data['firstname'] = $cust->firstname; - $address_data['lastname'] = $cust->surname; - - if($cust->company && !$cust->firstname && $cust->company == $cust->surname) { - $address_data["firstname"] = ""; - $address_data["lastname"] = ""; - } - - $address_data['street'] = $cust->street; - if(strlen($cust->housenumber)) { - $address_data['street'] .= " ".$cust->housenumber; - } - $address_data['zip'] = $cust->zip; - $address_data['city'] = $cust->location; - $address_data['country'] = ""; - $address_data['phone'] = $cust->phone; - $address_data['fax'] = ""; - $address_data['mobile'] = ""; - $address_data['email'] = $cust->email; - $address_data['note'] = $cust->extrainfo; - $address_data['uid'] = ($cust->UID) ? $cust->UID : null; - $address_data["bank_account_bank"] = ""; - $address_data["bank_account_owner"] = ($cust->company) ? $cust->company : $cust->firstname . " " . $cust->surname; - $address_data["bank_account_iban"] = $cust->IBAN; - $address_data["bank_account_bic"] = $cust->BIC; + // look for billingaddress_id in order and use it + if ($order->billingaddress_id) { + if ($order->billingaddress_id == $ivt_custnum) { + $return["billingaddress_id"] = $order->billingaddress_id; + } else { + $billingaddress = new Address($order->billingaddress_id); + if (!$billingaddress->id) { + die("Billingaddress " . $order->billingaddress_id . " does not exist (order " . $order->id . "; ivt customer $ivt_custnum)"); + } + $return["billingaddress_id"] = $billingaddress->id; + } + } - if($cust->payment == 0 ) { // 0 = sepa / 1 = rechnung - $address_data['billing_type'] = "sepa"; - } else { - $address_data['billing_type'] = "invoice"; + // if no billingaddress_id in order, compare address of Address and ivt_customer and + // create new billingaddress if nessecary + + $new_billing = []; + + + if ($ivt_customer->company) { + if ($ivt_customer->company != $owner->company) $new_billing["company"] = $ivt_customer->company; + } else { + if ($ivt_customer->firstname != $owner->firstname) $new_billing["firstname"] = $ivt_customer->firstname; + if ($ivt_customer->surname != $owner->lastname) $new_billing["lastname"] = $ivt_customer->surname; + } + + //if ($ivt_customer->UID != $owner->uid) $new_billing["uid"] = $ivt_customer->UID; + if ($ivt_customer->zip != $owner->zip) $new_billing["zip"] = $ivt_customer->zip; + if ($ivt_customer->location != $owner->city) $new_billing["city"] = $ivt_customer->location; + if ($ivt_customer->street . " " . $ivt_customer->housenumber != $owner->street) $new_billing["street"] = $ivt_customer->street . " " . $ivt_customer->housenumber; + if ($ivt_customer->phone != $owner->phone) $new_billing["phone"] = $ivt_customer->phone; + if ($ivt_customer->email != $owner->email) $new_billing["email"] = $ivt_customer->email; + + if ($ivt_customer->payment == 1 && $owner->billing_type != "invoice") { + $new_billing["billing_type"] = "invoice"; + } elseif ($ivt_customer->payment == 0 && $owner->billing_type != "sepa") { + $new_billing["billing_type"] = "sepa"; + } elseif ($ivt_customer->paper_invoice == 1 && $owner->billing_delivery != "paper") { + $new_billing["billing_delivery"] = "paper"; + } elseif ($ivt_customer->paper_invoice == 0 && $owner->billing_delivery != "email") { + $new_billing["billing_delivery"] = "email"; + } + + //if($ivt_customer->bank_account_bank != $owner->bank_account_bank) $new_billing["bank_account_bank"] = $ivt_customer->bank_account_bank; + //if($ivt_customer->bank_account_owner != $owner->bank_account_owner) $new_billing["bank_account_owner"] = $ivt_customer->bank_account_owner; + $iban = strtoupper(trim($ivt_customer->IBAN)); + $bic = strtoupper(trim($ivt_customer->BIC)); + if ((array_key_exists("billing_type", $new_billing) && $new_billing["billing_type"] == "sepa") || $ivt_customer->payment == 0 && ($iban || $bic)) { + if ($iban != strtoupper(trim($owner->bank_account_iban))) $new_billing["bank_account_iban"] = $iban; + if ($bic != strtoupper(trim($owner->bank_account_bic))) $new_billing["bank_account_bic"] = $bic; + } + + $missing_fields = []; + $create = false; + foreach(["company", "firstname", "lastname", "street", "zip", "city", "phone", "email", "uid", "billing_type", "billing_delivery", + "bank_account_iban", "bank_account_bic"] as $field) { + if(!array_key_exists($field, $new_billing)) { + $new_billing[$field] = $owner->$field; + } else { + if($field == "email" && $field = "dummy@xinon.at") continue; + $missing_fields[] = $field; + $create = true; + } + } + + + if($create) { + $billingaddress = AddressModel::create($new_billing); + //var_dump($billingaddress, $missing_fields);exit; + if(!$billingaddress->save()) { + die("Error createing billingaddress\n"); + } + $return["billingaddress_id"] = $billingaddress->id; + } + + return ["billingaddress_id" => $owner->id]; } - if($cust->paper_invoice == 1) { - $address_data["billing_delivery"] = "paper"; - } else { - $address_data["billing_delivery"] = "email"; + private function checkIvtProduct($product) { + if(!$product->id) { + echo __METHOD__ . ": Keine Produkt id
\n"; + return false; + } + if(!$product->name) { + echo __METHOD__ . ": Keine Produkt id
\n"; + return false; + } + return true; } - if($cust->accept_adver == 2) { - $address_data["allow_contact"] = 1; - } else { - $address_data["allow_contact"] = 0; + private function importContractconfig($ivt_customer, $ivt_product, &$contract, $doit = false) { + //return true; + //var_dump($contract, $contract->product, $contract->configgroups); + $this->log->debug("Getting Contractconfig for ivt_customer ".$ivt_customer->id); + + if(!is_array($contract->configgroups) || !count($contract->configgroups)) { + //echo "no contract config"; + return true; + } + + $product = $contract->product; + if(!$product->id) { + echo "Produkt nicht gefunden für Contract " . $contract->id . "
\n"; + exit; + } + + // lookup radius data + $ruser = $this->getRadiusUser($ivt_customer, $ivt_product, $contract); + // lookup voip data + //$voip_data = $this->getVoipData($ivt_customer, $ivt_product, $contract); + + foreach($contract->configgroups as $cgroup) { + + $items = $cgroup->items; + /*var_dump($cgroup); + var_dump($items); + exit;*/ + + foreach($items as $i) { + /** @var ContractconfigItem $i */ + if(!$i->contract_id) { + $i->setContractId($contract->id); + } + + switch($i->name) { + case "bandwidth_down": + if($ruser) { + $i->value->set($ruser->getAttribute("Rate-Limit-Down")); + $i->value->save(); + } + break; + case "bandwidth_up": + if($ruser) { + $i->value->set($ruser->getAttribute("Rate-Limit-Up")); + $i->value->save(); + } + break; + case "radiususer_username": + if($ruser) { + $i->value->set($ruser->username); + $i->value->save(); + } + break; + case "radiususer_password": + if($ruser) { + $i->value->set($ruser->getPassword()); + $i->value->save(); + } + break; + case "radiususer_ipaddress": + case "ipv4_address": + if($ruser) { + $i->value->set($ruser->getAttribute("Framed-IP-Address")); + $i->value->save(); + + } + break; + case "radiususer_netmask": + case "ipv4_netmask": + if($ruser) { + $i->value->set($ruser->getAttribute("Framed-IP-Netmask")); + $i->value->save(); + + } + break; + case "radiususer_iproute": + if($ruser) { + $i->value->set($ruser->getAttribute("Framed-Route")); + $i->value->save(); + + } + break; + case "radiususer_dns1": + if($ruser) { + $i->value->set($ruser->getAttribute("MS-Primary-DNS-Server")); + $i->value->save(); + + } + break; + case "radiususer_dns2": + if($ruser) { + $i->value->set($ruser->getAttribute("MS-Secondary-DNS-Server")); + $i->value->save(); + + } + break; + default: + $this->log->debug(__METHOD__.": ".$ivt_customer->id.": Kein Wert für Configgroupitem ".$i->name." gefunden"); + } + //var_dump($i, $i->value); + + } + + + } + + //var_dump($contract->configgroups); + //exit; + + /* + * backbone (vlan) + * Radiususer + * Bandbreite + * IPv4 + * SIP daten + * Voip + * Rufnummer + * Webhosting + * + */ } - if($cust->accept_info == 2) { - $address_data["allow_spin"] = 1; - } else { - $address_data["allow_spin"] = 0; + + private function findOrder($ivt_contract) { + // find order + $ivt_customer = $ivt_contract->customer; + $ivt_product = $ivt_contract->product; + + $productMatch = IvtProductMatchModel::getFirst(["ivt_product_id" => $ivt_contract->pid]); + if(!$productMatch) { + echo "Kein Match zu IVT Product " . $ivt_contract->pid . " gefunden.
\n"; + exit; + } + + $product = $productMatch->product; + + $owner = AddressModel::getFirst(["customer_number" => $ivt_customer->id]); + if (!$owner) { + //var_dump($ivt_customer, $ivt_contract); + die("Address ".$ivt_customer->id." not found!"); + } + + if(array_key_exists($ivt_contract->id, $this->static_ivt_order_match)) { + $order_id = $this->static_ivt_order_match[$ivt_contract->id]; + if($order_id === false) { + return false; + } + $order = new Order($order_id); + if(!$order->id) { + die("Manually specified order id ".$this->static_ivt_order_match[$ivt_contract->id]." not found for customer ".$ivt_customer->id); + } + return $order; + } else { + $order_count = OrderModel::count(["owner_id" => $owner->id, "finish_date" => true]); + $order_id = false; + + if ($order_count > 1) { + $found_product = 0; + foreach(OrderModel::search(["owner_id" => $owner->id, "finish_date" => true]) as $o) { + // find the one with the right product + foreach(OrderProductModel::search(["order_id" => $o->id, "product_id" => $product->id]) as $op) { + $order_id = $op->id; + $found_product++; + } + if($found_product > 1) { + die("Mehr als eine Bestellung für ivt_customer ".$ivt_customer->id." gefunden.\n" . print_r($owner, true)); + } + } + $order = new Order($order_id); + if(!$order) { + die("Order $order_id not found"); + } + return $order; + } + + } + return false; } - $address_data['create_by'] = 1; - $address_data['edit_by'] = 1; + private function getRadiusUser($ivt_customer, $ivt_product, $contract) { + // find radius user (kundennummer in radius info feld + $radius = new RadiusDB_Client(); - $address = AddressModel::create($address_data); + $user_count = 0; + $user = $radius->getUserByCustnum($ivt_customer->id); + if(!$user) { + $this->log->debug("User in Radius nicht gefunden Kundennummer ".$ivt_customer->id); + return false; + } - if(!$address->save()) { - var_dump($address); - return false; + return $user; + + // return data + } + + private function getVoipData($ivt_customer, $ivt_product, $contract) { + // find voice number in ivt + $ivtnum = IvtCustomerTelephoneNrModel::getFirst(["cid" => $ivt_customer->id]); + if(!$ivtnum) return true; + + $number = preg_replace('/^0043/', '43', $ivtnum->number); + if(!$number) return true; + + // find number in block + $voicenumberblock = Voicenumberblock::findBlock($number); + if(!$voicenumberblock) return false; + + if(!$voicenumberblock->isNumberInBlock($number)) { + die("Block für Nummer $number enthält nummer nicht."); + } + + $voicenumber = $voicenumberblock->getVoicenumber($number); + if(!$voicenumber) { + die("Nummer $number gehört nicht in Block ".$voicenumberblock->id); + } + + // return voicenumber object + return $voicenumber; + } + + private function createAddressFromIvtCustomer(IvtCustomer $cust) { + $address_data['customer_number'] = $cust->id; + $address_data['spin'] = $cust->MandatID; + $address_data['company'] = $cust->company; + $address_data['firstname'] = $cust->firstname; + $address_data['lastname'] = $cust->surname; + + if($cust->company && !$cust->firstname && $cust->company == $cust->surname) { + $address_data["firstname"] = ""; + $address_data["lastname"] = ""; + } + + $address_data['street'] = $cust->street; + if(strlen($cust->housenumber)) { + $address_data['street'] .= " " . $cust->housenumber; + } + $address_data['zip'] = $cust->zip; + $address_data['city'] = $cust->location; + $address_data['country'] = ""; + $address_data['phone'] = $cust->phone; + $address_data['fax'] = ""; + $address_data['mobile'] = ""; + $address_data['email'] = $cust->email; + $address_data['note'] = $cust->extrainfo; + + $address_data['uid'] = ($cust->UID) ? $cust->UID : null; + $address_data["bank_account_bank"] = ""; + $address_data["bank_account_owner"] = ($cust->company) ? $cust->company : $cust->firstname . " " . $cust->surname; + $address_data["bank_account_iban"] = $cust->IBAN; + $address_data["bank_account_bic"] = $cust->BIC; + + if($cust->payment == 0) { // 0 = sepa / 1 = rechnung + $address_data['billing_type'] = "sepa"; + } else { + $address_data['billing_type'] = "invoice"; + } + + if($cust->paper_invoice == 1) { + $address_data["billing_delivery"] = "paper"; + } else { + $address_data["billing_delivery"] = "email"; + } + + if($cust->accept_adver == 2) { + $address_data["allow_contact"] = 1; + } else { + $address_data["allow_contact"] = 0; + } + + if($cust->accept_info == 2) { + $address_data["allow_spin"] = 1; + } else { + $address_data["allow_spin"] = 0; + } + + $address_data['create_by'] = 1; + $address_data['edit_by'] = 1; + + $address = AddressModel::create($address_data); + + if(!$address->save()) { + var_dump($address); + return false; + } + return $address; + } + + private function getNewSlaId($ivt_sla_id) { + $sla_trans = [ + 0 => 4, // ivt undefined => thetool residential + 1 => 4, // ivt undefined => thetool residential + 2 => 4, // ivt residential => thetool residential + 3 => 3, // ivt 8h/5T - Next Business Day => thetool 8h/5T - Next Business Day + 4 => 1, // ivt 12h/6T - Working Hours => thetool 12h/6T - Working Hours + 5 => 2 // ivt 24h/7T - 2h/6h Emergency => thetool 24h/7T - 2h/6h Emergency + ]; + + if(array_key_exists($ivt_sla_id, $sla_trans)) { + return $sla_trans[$ivt_sla_id]; + } + + return 4; // if ivt sla is unknown -> return residential } - return $address; - } } diff --git a/application/Contract/Contract.php b/application/Contract/Contract.php index 527395e4c..9b9c8de80 100644 --- a/application/Contract/Contract.php +++ b/application/Contract/Contract.php @@ -144,11 +144,19 @@ class Contract extends mfBaseModel { $termination_address = $termination->building->street.", ".$termination->building->zip." ".$termination->building->city; return $termination_address; } - - if(stripos($this->getProperty("product")->name, "dsl") != false) { - return $owner_address; - } - + + $product = $this->getProperty("product"); + /* + * exceptions for certain products + */ + foreach(["dsl", "standortgeber", "funkinternet", "glasfaser", "brettljausn"] as $qname) { + $qname = strtolower($qname); + $product_name = strtolower($product->name); + if(stripos($product_name, $qname) !== false) { + return $owner_address; + } + } + return false; } @@ -231,8 +239,34 @@ class Contract extends mfBaseModel { } return $this->orderproduct; } - - + + /*if($name == "contractConfigGroups") { + $product = $this->getProperty("product"); + $this->contractConfigGroups = ContractconfigGroupModel::search(['producttech_id' => $product->producttech_id]); + return $this->contractConfigGroups; + }*/ + + if($name == "configgroups") { + $product = $this->getProperty("product"); + $this->configgroups = []; + foreach(ContractconfiggroupProductgroupModel::search(['productgroup_id' => $product->productgroup_id]) as $ccpg) { + $ccpg->contractconfiggroup->setContractId($this->id); + $this->configgroups[] = $ccpg->contractconfiggroup; + } + + return $this->configgroups; + } + + if($name == "configvalues") { + foreach($this->getProperty("configgroups") as $group) { + foreach($group->items as $item) { + $this->configvalues[$item->name] = $item; + } + } + + return $this->configvalues; + } + if(!$this->id) { return null; } @@ -240,32 +274,11 @@ class Contract extends mfBaseModel { - /*if($name == "contractConfigGroups") { - $product = $this->getProperty("product"); - $this->contractConfigGroups = ContractconfigGroupModel::search(['producttech_id' => $product->producttech_id]); - return $this->contractConfigGroups; - }*/ + - if($name == "configgroups") { - $product = $this->getProperty("product"); - $this->configgroups = []; - foreach(ContractconfiggroupProductgroupModel::search(['productgroup_id' => $product->productgroup_id]) as $ccpg) { - $ccpg->contractconfiggroup->setContractId($this->id); - $this->configgroups[] = $ccpg->contractconfiggroup; - } - - return $this->configgroups; - } + - if($name == "configvalues") { - foreach($this->getProperty("configgroups") as $group) { - foreach($group->items as $item) { - $this->configvalues[$item->name] = $item; - } - } - - return $this->configvalues; - } + /*if($name == "contractConfigItems") { $product = $this->getProperty("product"); diff --git a/application/ContractconfigItem/ContractconfigItem.php b/application/ContractconfigItem/ContractconfigItem.php index a43ea5613..a60925903 100644 --- a/application/ContractconfigItem/ContractconfigItem.php +++ b/application/ContractconfigItem/ContractconfigItem.php @@ -2,7 +2,7 @@ class ContractconfigItem extends mfBaseModel { private $value; - private $contract_id; + public $contract_id; public function setContractId($contract_id) { if(!is_numeric($contract_id)) { diff --git a/application/IvtCustomerProduct/IvtCustomerProductModel.php b/application/IvtCustomerProduct/IvtCustomerProductModel.php index 4e09975b6..4c672e4b4 100644 --- a/application/IvtCustomerProduct/IvtCustomerProductModel.php +++ b/application/IvtCustomerProduct/IvtCustomerProductModel.php @@ -3,15 +3,19 @@ class IvtCustomerProductModel { - public static function getAll() { + public static function getAll($order = false) { $items = []; - + $db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME); - - $res = $db->select("customer_product", "*", "1=1 ORDER BY id"); + + if(!$order) { + $order = "id"; + } + + $res = $db->select("customer_product", "*", "1=1 ORDER BY $order"); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { - $items[] = new IvtCustomerProduct($data); + $items[] = new IvtCustomerTelephoneNr($data); } } return $items; @@ -24,7 +28,7 @@ class IvtCustomerProductModel { $res = $db->select("customer_product", "*", "$where ORDER BY id LIMIT 1"); if($db->num_rows($res)) { $data = $db->fetch_object($res); - $item = new IvtCustomerProduct($data); + $item = new IvtCustomerTelephoneNr($data); if($item->id) { return $item; } else { @@ -67,7 +71,7 @@ class IvtCustomerProductModel { $res = $db->query($sql); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { - $items[] = new IvtCustomerProduct($data); + $items[] = new IvtCustomerTelephoneNr($data); } } return $items; @@ -113,6 +117,13 @@ class IvtCustomerProductModel { $where .= " AND sid=$sid"; } } + + if(array_key_exists("last_date>", $filter)) { + $last_date = $filter['last_date>']; + if(is_numeric($last_date)) { + $where .= " AND last_date >=$last_date"; + } + } //var_dump($filter, $where);exit; return $where; diff --git a/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNr.php b/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNr.php new file mode 100644 index 000000000..b6bfa7ec7 --- /dev/null +++ b/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNr.php @@ -0,0 +1,67 @@ +log = mfLoghandler::singleton(); + $this->data = new stdClass(); + $this->table = "products"; + + $this->db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME); + + if(is_numeric($_)) { + $this->fetch($_); + } elseif(is_object($_)) { + $this->load($_); + } + } + + public function save() { + return true; + } + + public function getProperty($name) { + if($this->$name == null) { + + if($name == "customer") { + $ivtcustomer = new IvtCustomer($this->cid); + if($ivtcustomer->id) { + $this->ivtcustomer = $ivtcustomer; + } + return $this->ivtcustomer; + } + + $classname = ucfirst($name); + $idfield = $name . "_id"; + $this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield); + if(!$this->$name) { + $this->$name = new $classname($this->$idfield); + } + + if($this->$name->id) { + mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name); + return $this->$name; + } else { + return null; + } + + } + + return $this->$name; + } + + + public function __debugInfo() { + $vars = get_object_vars($this); + if(is_object($vars['db'])) $vars['db'] = "object(FronkDB)"; + if(is_object($vars['log'])) $vars['log'] = 'object(mfLoghandler)'; + return $vars; + } + +} \ No newline at end of file diff --git a/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNrModel.php b/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNrModel.php new file mode 100644 index 000000000..2a1ee3b18 --- /dev/null +++ b/application/IvtCustomerTelephoneNr/IvtCustomerTelephoneNrModel.php @@ -0,0 +1,115 @@ +select("customer_telephone_nr", "*", "1=1 ORDER BY $order"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new IvtCustomerTelephoneNr($data); + } + } + return $items; + } + + public static function getFirst($filter = []) { + $db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME); + + $where = self::getSqlFilter($filter); + $res = $db->select("customer_telephone_nr", "*", "$where ORDER BY id LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new IvtCustomerTelephoneNr($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function count($filter) { + $db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) cnt FROM customer_telephone_nr WHERE $where ORDER by id"; + + $res = $db->query($sql); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + return $data->cnt; + } + return 0; + } + + public static function search($filter, $limit = false) { + $items = []; + $db = FronkDB::singleton(IVT_DBHOST, IVT_DBUSER, IVT_DBPASS, IVT_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT * FROM customer_telephone_nr WHERE $where ORDER by cid,pid,sid,id"; + + mfLoghandler::singleton()->debug($sql); + if(is_array($limit) && count($limit)) { + if(is_numeric($limit['start']) && is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['start'].", ".$limit['count']; + } elseif(is_numeric($limit['count'])) { + $sql .= " LIMIT ".$limit['count']; + } + } + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new IvtCustomerTelephoneNr($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + if(array_key_exists("cid", $filter)) { + $cid = $filter['cid']; + if(is_numeric($cid)) { + $where .= " AND cid=$cid"; + } + } + + if(array_key_exists("pid", $filter)) { + $pid = $filter['pid']; + if(is_numeric($pid)) { + $where .= " AND pid=$pid"; + } + } + + if(array_key_exists("number", $filter)) { + $number = (string)FronkDB::singleton()->escape($filter['number']); + if($number) { + $where .= " AND number='$number'"; + } + } + + if(array_key_exists("number%", $filter)) { + $number = (string)FronkDB::singleton()->escape($filter['number']); + if($number) { + $where .= " AND number LIKE '%$number%'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/Order/Order.php b/application/Order/Order.php index 97f2ebad0..15637e98c 100644 --- a/application/Order/Order.php +++ b/application/Order/Order.php @@ -288,7 +288,7 @@ class Order extends mfBaseModel { $to = $values['to']; if(!$subject || !$from || !$from_name || !$to) { - $this->log->warn("Order Fileupload Email not sent. (subject: '$subject', from: '$from', from_email: '$from_email', to: '$to')"); + $this->log->warn("Order Fileupload Email not sent. (subject: '$subject', from: '$from_name', from_email: '$from', to: '$to')"); } else { $filepath = MFUPLOAD_FILE_SAVE_PATH; if($file->file->subfolder) { diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index 050ff4770..2e8e1e52e 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -1236,7 +1236,6 @@ class OrderController extends mfBaseController { $order->deletePositions(); - // TODO: check if Product is unused $order->delete(); $this->layout()->setFlash("Bestellung gelöscht", "success"); $this->redirect("Order"); diff --git a/application/Voicenumberblock/Voicenumberblock.php b/application/Voicenumberblock/Voicenumberblock.php index b40c60cba..a343d8473 100644 --- a/application/Voicenumberblock/Voicenumberblock.php +++ b/application/Voicenumberblock/Voicenumberblock.php @@ -34,7 +34,23 @@ class Voicenumberblock extends mfBaseModel { return $block; } - + + public function getVoicenumber($number) { + if(!$this->isNumberInBlock($number)) return false; + + $vn = VoicenumberModel::getFirst(["number" => $number]); + if(!$vn) { + $vn = VoicenumberModel::create([ + "voicenumberblock_id" => $this->id, + "active" => 1, + "activated_date" => date("U"), + "number" => $number + ]); + } + + return $vn; + } + public function getFreeNumbers() { if(!$this->id) return false; diff --git a/application/XinonFibuMerge/XinonFibuMergeModel.php b/application/XinonFibuMerge/XinonFibuMergeModel.php index d0565b02e..736c1e7a6 100644 --- a/application/XinonFibuMerge/XinonFibuMergeModel.php +++ b/application/XinonFibuMerge/XinonFibuMergeModel.php @@ -9,6 +9,7 @@ class XinonFibuMergeModel { public $strasse; public $plz; public $ort; + public $land; public $create_by = null; public $edit_by = null; @@ -41,11 +42,14 @@ class XinonFibuMergeModel { return $model; } - public static function getFirst($filter = []) { + public static function getFirst($filter = [], $order = false) { $db = FronkDB::singleton(); + if(!$order) { + $order = "old_custnum"; + } $where = self::getSqlFilter($filter); - $res = $db->select("XinonFibuMerge", "*", "$where ORDER BY old_custnum LIMIT 1"); + $res = $db->select("XinonFibuMerge", "*", "$where ORDER BY $order LIMIT 1"); if ($db->num_rows($res)) { $data = $db->fetch_object($res); $item = new XinonFibuMerge($data); @@ -58,12 +62,16 @@ class XinonFibuMergeModel { return null; } - public static function getAll() { + public static function getAll($order = false) { $items = []; + if(!$order) { + $order = "old_custnum"; + } + $db = FronkDB::singleton(); - $res = $db->select("XinonFibuMerge", "*", "1=1 ORDER BY old_custnum"); + $res = $db->select("XinonFibuMerge", "*", "1=1 ORDER BY $order"); if ($db->num_rows($res)) { while ($data = $db->fetch_object($res)) { $items[] = new XinonFibuMerge($data); @@ -88,20 +96,25 @@ class XinonFibuMergeModel { return 0; } - public static function search($filter = [], $limit = false) { + public static function search($filter = [], $limit = false, $order = false) { $items = []; $db = FronkDB::singleton(); + if(!$order) { + $order = "old_custnum"; + } + $where = self::getSqlFilter($filter); $sql = "SELECT * FROM XinonFibuMerge WHERE $where - ORDER BY old_custnum"; + ORDER BY $order"; + mfLoghandler::singleton()->debug($sql); if (is_array($limit) && count($limit)) { if (is_numeric($limit['start']) && is_numeric($limit['count'])) { $sql .= " LIMIT " . $limit['start'] . ", " . $limit['count']; - } elseif (is_numeric($count)) { + } elseif (is_numeric($limit['count'])) { $sql .= " LIMIT " . $limit['count']; } } diff --git a/lib/RadiusDB/Client.php b/lib/RadiusDB/Client.php new file mode 100644 index 000000000..9fac1c4a7 --- /dev/null +++ b/lib/RadiusDB/Client.php @@ -0,0 +1,78 @@ +db = new FronkDB($host,$user,$pass,$dbname); + } + + public function getUser($username) { + $user = new RadiusDB_User($this->db); + $user->load($username); + return $user; + } + + public function searchUsers($search, $exact=false) { + $users = array(); + $search = $this->db->escape($search); + if($exact) { + $res = $this->db->select("radcheck", "username", "username='$search' GROUP BY username ORDER BY LENGTH(username), username"); + } else { + $res = $this->db->select("radcheck", "username", "username like '$search' GROUP BY username ORDER BY LENGTH(username), username"); + } + if($this->db->num_rows($res)) { + while($data = $this->db->fetch_object($res)) { + $users[] = $data->username; + } + } + return $users; + } + + public function searchUsersByIp($ip) { + $users = array(); + $ip = $this->db->escape($ip); + $res = $this->db->select("radreply", "username", "attribute='Framed-IP-Address' AND value='$ip' GROUP BY username ORDER BY username"); + if($this->db->num_rows($res)) { + while($data = $this->db->fetch_object($res)) { + $users[] = $data->username; + } + } + return $users; + } + + public function getUserByCustnum($custnum, $e = false) { + $users = array(); + $search = $this->db->escape($custnum); + $field = "Custnum"; + if($e) { + $field = "Custnume"; + } + $res = $this->db->select("Hotspot_Usersettings", "Username", "$field = '$custnum' GROUP BY Username ORDER BY Username LIMIT 1"); + if($this->db->num_rows($res)) { + $data = $this->db->fetch_object($res); + $user = $this->getUser($data->Username); + if($user->username) { + return $user; + } + + } + return false; + } + + public function getNas($nasname) { + $nas = new RadiusDB_Nas($this->db); + $nas->load($nasname); + return $nas; + } + + public function restartRadiusServer() { + exec("/usr/bin/sudo /usr/sbin/service freeradius restart"); + return true; + } +} \ No newline at end of file diff --git a/lib/RadiusDB/Nas.php b/lib/RadiusDB/Nas.php new file mode 100644 index 000000000..ba458a48f --- /dev/null +++ b/lib/RadiusDB/Nas.php @@ -0,0 +1,69 @@ +db = $db; + } + + public function load($nasname) { + //var_dump($this->db); + $nasname = $this->db->escape($nasname); + + $res = $this->db->select("nas", "*", "nasname='$nasname'"); + if(!$this->db->num_rows($res)) { + $this->type = "other"; + $this->secret = Helper::getNewPassword(24); + return true; + } + $nas = $this->db->fetch_object($res); + + $this->id = $nas->id; + $this->nasname = $nas->nasname; + $this->intaddress = $nas->intaddress; + $this->shortname = $nas->shortname; + $this->type = $nas->type; + $this->secret = $nas->secret; + $this->description = $nas->description; + return true; + } + + public function save() { + if(!$this->nasname) { + return false; + } + if(!$this->secret) { + return false; + } + + if($this->id) { + $id = $this->id; + } + $values['nasname'] = $this->nasname; + $values['intaddress'] = $this->nasname; // is supposed to be the same as nasname + $values['shortname'] = $this->shortname; + $values['type'] = $this->type; + $values['secret'] = $this->secret; + $values['description'] = $this->description; + + if($id) { + if(!$this->db->update("nas", $values, "id=$id")) { + return false; + } + } else { + if(!$id = $this->db->insert("nas", $values)) { + return false; + } + } + + return $id; + } +} \ No newline at end of file diff --git a/lib/RadiusDB/User.php b/lib/RadiusDB/User.php new file mode 100644 index 000000000..f1dff6eb3 --- /dev/null +++ b/lib/RadiusDB/User.php @@ -0,0 +1,275 @@ +db = $db; + $this->Checks = array(); + $this->Attributes = array(); + $this->AllowedNas = array(); + $this->Info = false; + $this->_oldChecks = array(); + $this->_oldAttributes = array(); + $this->_oldAllowedNas = array(); + $this->_oldInfo = false; + } + + public function load($username) { + if(!$username) { + return false; + } + + $this->username = $username; + + $res = $this->db->select("radcheck","*","username='$username'"); + if($this->db->num_rows($res)) { + while($radcheck = $this->db->fetch_object($res)) { + $this->Checks[$radcheck->attribute] = $radcheck->value; + } + } else { + $this->setPassword(""); + return false; + } + + $res = $this->db->select("radreply","*","username='$username'"); + if($this->db->num_rows($res)) { + while($radreply = $this->db->fetch_object($res)) { + $this->Attributes[$radreply->attribute] = $radreply->value; + } + } + + $res = $this->db->select("radusergroup", "*", "username='$username'"); + if($this->db->num_rows($res)) { + $radusergroup = $this->db->fetch_object($res); + $this->Usergroup = $radusergroup->groupname; + } + + $res = $this->db->select("radnascheck", "*", "username='$username'"); + if($this->db->num_rows($res)) { + while($nascheck = $this->db->fetch_object($res)) { + $this->AllowedNas[] = $nascheck->nasname; + } + } + + $this->Info = new RadiusDB_UserInfo($username); + + $this->_oldUsergroup = $this->Usergroup; + $this->_oldChecks = $this->Checks; + $this->_oldAttributes = $this->Attributes; + $this->_oldAllowedNas = $this->AllowedNas; + + return true; + } + + public function getCheck($name) { + if(isset($this->Checks[$name])) { + return $this->Checks[$name]; + } + return null; + } + + public function getAttribute($name) { + if(isset($this->Attributes[$name])) { + return $this->Attributes[$name]; + } + return null; + } + + public function setCheck($name, $value) { + $this->Checks[$name] = $value; + } + + public function setAttribute($name, $value) { + $this->Attributes[$name] = $value; + } + + public function getPassword() { + return $this->getCheck("Cleartext-Password"); + } + public function setPassword($password) { + $this->setCheck("Cleartext-Password", $password); + } + public function getUsergroup() { + return $this->Usergroup; + } + public function setUsergroup($groupname) { + $this->Usergroup = $groupname; + } + + public function isNasAllowed($nas_ip) { + if(in_array($nas_ip, $this->AllowedNas)) { + return true; + } + return false; + } + + public function addAllowedNas($nas_ip) { + if(!in_array($nas_ip, $this->AllowedNas,true)) { + $this->AllowedNas[] = $nas_ip; + } + } + + public function removeAllowedNas($nas_ip) { + if(in_array($nas_ip, $this->AllowedNas, true) !== false) { + unset($this->AllowedNas[array_search($nas_ip, $this->AllowedNas)]); + } + } + + + public function unset($name) { + if($name == "usergroup") { + $this->Usergroup = false; + } + + if(isset($this->Checks[$name])) { + unset($this->Checks[$name]); + return true; + } + if(isset($this->Attributes[$name])) { + unset($this->Attributes[$name]); + return true; + } + return false; + } + + public function save() { + if(!$this->username) { + return false; + } + + $username = $this->username; + + $error = false; + + $this->db->query("START TRANSACTION"); // XXX should be put moved to a FronkDB function + // check queries + foreach($this->Checks as $attribute => $value) { + if(isset($this->_oldChecks[$attribute])) { + if(!$this->db->update("radcheck", ['value' => $value], "username='$username' AND attribute='$attribute'")) { + $error = true; + } + } else { + if(!$this->db->insert("radcheck", ['username' => $username, 'attribute' => $attribute, 'op' => $this->checkop, 'value' => $value])) { + $error = true; + } + } + } + // attribute queries + foreach($this->Attributes as $attribute => $value) { + if(isset($this->_oldAttributes[$attribute])) { + if(!$this->db->update("radreply", ['value' => $value], "username='$username' AND attribute='$attribute'")) { + $error = true; + } + } else { + if(!$this->db->insert("radreply", ['username' => $username, 'attribute' => $attribute, 'op' => $this->attribop, 'value' => $value])) { + $error = true; + } + } + } + + // update usergroup + if($this->Usergroup) { + if($this->_oldUsergroup) { + if(!$this->db->update("radusergroup", ['groupname' => $this->Usergroup], "username='$username'")) { + $error = true; + } + } else { + if(!$this->db->insert("radusergroup", ['username' => $username, 'groupname' => $this->Usergroup, 'priority' => 1])) { + $error = true; + } + } + } + + // update Nascheck + foreach($this->AllowedNas as $nas) { + if(!in_array($nas, $this->_oldAllowedNas, true)) { + + if(!$this->db->insert("radnascheck", ['username' => $username, 'nasname' => $nas])) { + $error = true; + } + } + } + + + // delete attributes + + foreach($this->_oldChecks as $attribute => $value) { + if(!isset($this->Checks[$attribute])) { + if(!$this->db->delete("radcheck", "username='$username' AND attribute='$attribute'")) { + $error = true; + } + } + } + + foreach($this->_oldAttributes as $attribute => $old) { + if(!isset($this->Attributes[$attribute])) { + if(!$this->db->delete("radreply", "username='$username' AND attribute='$attribute'")) { + $error = true; + } + } + } + + if($this->_oldUsergroup && !$this->Usergroup) { + if(!$this->db->delete("radusergroup", "username='$username'")) { + $error = true; + } + } + + foreach($this->_oldAllowedNas as $oldnas) { + if(!in_array($oldnas, $this->AllowedNas, true)) { + if(!$this->db->delete("radnascheck", "username='$username' AND nasname='$oldnas'")) { + $error = true; + } + } + } + + if($error) { + $this->db->query("ROLLBACK"); + return false; + } else { + $this->db->query("COMMIT"); + } + + // reinitialize _old* values + $this->_oldUsergroup = $this->Usergroup; + $this->_oldChecks = $this->Checks; + $this->_oldAttributes = $this->Attributes; + $this->_oldAllowedNas = $this->AllowedNas; + + return true; + } + + + public function __get($name) { + if($name === "username") { + return $this->username; + } + if(in_array($name, array_keys($this->Checks))) { + return $this->getCheck($name); + } + if(in_array($name, array_keys($this->Attributes))) { + return $this->getAttribute($name); + } + } + + public function __toString() { + return (string) $this->username; + } +} \ No newline at end of file diff --git a/lib/RadiusDB/UserInfo.php b/lib/RadiusDB/UserInfo.php new file mode 100644 index 000000000..1399d7249 --- /dev/null +++ b/lib/RadiusDB/UserInfo.php @@ -0,0 +1,43 @@ +db = $db; + } + + public function load($username) { + if(!$username) { + return false; + } + + $this->username = $username; + + $res = $this->db->select("Hotspot_Usersettings", "*", "Username='$username'"); + if($this->db->num_rows($res)) { + $rad = $this->db->fetch_object($res); + + $this->id = $rad->id; + $this->Username = $rad->Username; + $this->Custnum = $rad->Custnum; + $this->Custnume = $rad->Custnume; + $this->ContractUp = $rad->ContratUp; + $this->ContractDown = $rad->ContractDown; + $this->Duration = $rad->Duration; + $this->Info = $rad->Info; + $this->Wifikey = $rad->Wifikey; + $this->ont_sn = $rad->ont_sn; + + } + } +} \ No newline at end of file diff --git a/scripts/adb-rimo-import/rimo-import-test.php b/scripts/adb-rimo-import/rimo-import-test.php index 7221cfc74..454d7a451 100755 --- a/scripts/adb-rimo-import/rimo-import-test.php +++ b/scripts/adb-rimo-import/rimo-import-test.php @@ -24,15 +24,19 @@ $mainlog = \mfLoghandler::singleton(); $log = new \mfLog_File(); $log->init(BASEDIR."/var/log/rimo-import.log"); -$usage = "Usage: ".$argv[0]." [argument]\n\nAvailable arguments:\n\t--list-rimo-clusters\tLists Clusters returned by Rimo API, then exits\n\t--help\t\t\tLists available arguments\n\nRuns import when no argument is given\n\n"; +$usage = "Usage: ".$argv[0]." [argument|rimocluster]\n\nAvailable arguments:\n\t--list-rimo-clusters\tLists Clusters returned by Rimo API, then exits\n\t--help\t\t\tLists available arguments\n\nRuns import when no argument is given. If rimocluster is given, only imports this cluster.\n\n"; $command = false; +$request_cluster = false; if($argc > 1) { if($argv[1] == "--list-rimo-clusters") { $command = "list-rimo-clusters"; } elseif($argv[1] == "--help") { - echo $usage; - exit(0); + echo $usage; + exit(0); + } elseif(strpos($argv[1], "SDI") === 0) { + $command = "cluster_only"; + $request_cluster = $argv[1]; } else { die("Invalid argument.\n\n$usage"); } @@ -121,11 +125,13 @@ foreach($netowners as $apiOwner) { } $addressErrors = []; - - /*if($cluster_rimo_id != "SDISalesCluster_327804592385_1709728631") { - // stainz zentrum - continue; - }*/ + + if($command == "cluster_only" && $request_cluster) { + if($cluster_rimo_id != $request_cluster) { + continue; + } + } + /* * get Cluster Outline Coords diff --git a/scripts/preorder/dobl-zwaring/import-preorders-from-export-format.php b/scripts/preorder/dobl-zwaring/import-preorders-from-export-format.php index 93c26ccbc..744fcc1fb 100755 --- a/scripts/preorder/dobl-zwaring/import-preorders-from-export-format.php +++ b/scripts/preorder/dobl-zwaring/import-preorders-from-export-format.php @@ -33,7 +33,7 @@ $preorderTypes = [ $me = new User(1); $folder = __DIR__ . "/import/"; -$csvname = "Dateneinspielung_Dobl-Zwaring 09042024.csv"; +$csvname = "Dateneinspielung_Dobl-Zwaring 09042024-2024-05-08.csv"; $filename = $folder . $csvname; $adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -98,7 +98,13 @@ while($csv = fgetcsv($input, 0)) { } // fehler - + if($strasse_name == "Damweg") $strasse_name = "Dammweg"; + if($strasse_name == "Fadingerstraße") $strasse_name = "Fadinger Straße"; + if($strasse_name == "Petzendorferstraße") $strasse_name = "Petzendorfstraße"; + if($strasse_name == "Petzendorf" && $hausnummer_name == "6/EG/1") { + $hausnummer_name = 6; + $tuer = 1; + } $strasse_name = $db->escape($strasse_name); $hausnummer_name = $db->escape($hausnummer_name); diff --git a/scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024-2024-05-08.csv b/scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024-2024-05-08.csv new file mode 100644 index 000000000..a1b09454d --- /dev/null +++ b/scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024-2024-05-08.csv @@ -0,0 +1,114 @@ +Kampagne,Netzgebiet ID,Netzgebiet,Extref,Bestellcode,OAID,Bestelltyp,Status,Anschlusstyp,GWR Adresscode,Anschluss Strasse,Anschluss Hausnummer,Anschluss PLZ,Anschluss Ort,Anschluss Wohneinheit,GPS Breite,GPS Länge,Anzahl Anschlüsse,Kunde Firma,Kunde UID,Kunde Vorname,Kunde Nachname,Kunde Strasse,Kunde PLZ,Kunde Ort,Kunde Telefon,Kunde Email,Partner,Addon Lehrverrohrung Grundstück,Addon Hausverkabelung,BEP festgelegt,Starterpaket erhalten,Erstellt,Letzte Bearbeitung +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,156,8142,Dobl-Zwaring,,,,1,,,Mario,Berger,Zwaring 156,8142,Dobl-Zwaring,0664/4311529,mario.berger87@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,36,8142,Dobl-Zwaring,,,,1,,,Martin,Schmidt,Zwaring 36,8142,Dobl-Zwaring,0664/3202036,Office@wildacker.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,91,8143,Dobl-Zwaring,,,,1,,,Gernot,Stoifmann,Pangraz-Fuchs Straße 26,8071,Hausmannstätten,0664/4411061,gernot.stoifmann@hotmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Oberflurweg,1,8143,Dobl-Zwaring,,,,1,,,Wolfgang,Fernbach,Oberflurweg 1,8143,Dobl-Zwaring,0699/18000548,w.fernbach@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Oberflurweg,2,8143,Dobl-Zwaring,,,,1,,,Mario,Rucker,Oberflurweg 2,8143,Dobl-Zwaring,0664/4605149,mario.rucker@kulba.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Oberflurweg,3,8143,Dobl-Zwaring,,,,1,,,Kennan,Mesic,Am Wagrain 60a/1,8053,Graz,0676/9500177,kenan.mesic@live.de,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Oberflurweg,4,8143,Dobl-Zwaring,,,,1,,,Margarete,Bayer,Oberflurweg 4,8143,Dobl-Zwaring,0676/3634579,marga.b@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Oberflurweg,2A,8143,Dobl-Zwaring,,,,1,,,Dominik,Nehl,Oberflurweg 2A,8143,Dobl-Zwaring,0664/3234218,dominik.nehl@outlook.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Oberflurweg,3a,8143,Dobl-Zwaring,,,,1,Mesic Bau GmbH,ATU68278366,Kennan,Mesic,Am Wagrain 60a/1,8053,Graz,0676/9500177,office@mesicbau.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Weinzettlweg,28,8143,Dobl-Zwaring,,,,1,,,Christian,Sabathi,Weinzettlweg 28,8143,Dobl-Zwaring,0664/88199817,office.sabathi@icloud.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Am Sendegrund,1,8143,Dobl-Zwaring,,,,1,,,Markus,Glehr,Am Sendegrund 1,8143,Dobl-Zwaring,0664/1300351,glehrmarkus@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Am Sendegrund,18,8143,Dobl-Zwaring,,,,1,,,Christine,Gottscheber,Am Sendegrund 18,8143,Dobl-Zwaring,0664/6468535,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Am Sendegrund,22,8143,Dobl,,,,1,,,Isabelle,Lampl,Am Sendegrund 22,8143,Dobl,0699/10551177,isabelle.lampl@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Am Sendegrund,24,8143,Dobl-Zwaring,,,,1,,,Bernhard,Sailer,Am Sendegrund 24,8143,Dobl-Zwaring,0677/63040931,bernhardsailer@bernhardsailer.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,51,8504,Preding,,,,1,,,Maria,Edegger,Wuschan 51,8504,Preding,0664/4494539,mariachristine.grinschgl@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Dammweg,4,8143,Dobl-Zwaring,,,,1,,,Joachim,Großschedl,Dammweg 4,8143,Dobl-Zwaring,0681/20618773,elisabeth.oberlaender@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Dammweg,7,8143,Muttendorf,,,,1,,,Matija,Sedlar,Höllberg 89a,8151,Hitzendorf,0664/8481629,sedlar.matija@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Damweg,2,8143,Dobl-Zwaring,,,,1,,,Daniel,Hotca,Zettling-Kaiserwald 8/9,8141,Premstätten,0664/9237408,a11natalia7182@yahoo.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Dietersdorf,90,8142,Dobl-Zwaring,,,,1,,,Walter,Potetz,Dietersdorf 90,8142,Dobl-Zwaring,0664/8113457,walter.potetz@polizei.gv.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Dobl-Dorf,19,8143,Dobl-Zwaring,,,,1,,,Anton ,Weber,Dobl-Dorf 19,8143,Dobl-Zwaring,0699/19573107,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Dobl-Dorf,473,8143,Dobl,,,,1,,,Johannes ,Klinger,Dobl-Dorf 473,8143,Dobl,0699/19062926,office@elektro-klinger.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Edding,19,8142,Dobl-Zwaring,,,,1,,,Andreas u. Doris,Hemmer,Edding 19,8142,Dobl-Zwaring,0660/6009523,andreas.hemmer@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Fading,22a,8143,Dobl-Zwaring,,,,1,,,Hannes,Spitzer,Fading 22a,8143,Dobl-Zwaring,06766/6278659,johannes.spitzer@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Fading,73,8143,Dobl-Zwaring,,,,1,,,Reinhard,Schimpel,Fading 73,8143,Dobl-Zwaring,0664/4522456,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Fading,77,8143,Dobl-Zwaring,,,,1,,,Michael,Pichler,Fading 77,8143,Dobl-Zwaring,0664/5440335,michael.pichler@gmx.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Fading,78,8143,Dobl-Zwaring,,,,1,,,Peter,Pichler,Fading 78,8143,Dobl-Zwaring,0664/4095621,peter.pichler91@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Mehrfamilienhaus,,Fadingerstraße,8,8143,Dobl-Zwaring,,,,1,,,Josef,Gaisberger,Fadingerstraße 31,8143,Dobl-Zwaring,0664/3426183,josef.gaisberger@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Feldstraße,6,8143,Dobl,,,,1,,,Viola,Moisesbichler,Feldstraße 6,8143,Dobl,0664/5206307,viola.moisesbichler@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Flurweg,9,8143,Dobl-Zwaring,,,,1,,,Stefan,Schillegger,Flurweg 9,8143,Dobl-Zwaring,0664/5129223,stefan.schillegger@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Gantschenbergstraße,47,8504,Preding,,,,1,,,Maria,Edegger,Gantschenbergstraße 47,8504,Preding,0664/4494539,mariachristine.grinschgl@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,83,8143,Dobl-Zwaring,,,,1,,,Sarah,Hörzer,Hinterdorfweg 83,8143,Dobl-Zwaring,0664/1349960,Sarah.hoerzer@elin.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,85,8143,Dobl-Zwaring,,,,1,,,Michael,Polanz,Hinterdorfweg 85,8143,Dobl-Zwaring,0660/3066662,michael@polanz.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,86,8143,Dobl-Zwaring,,,,1,,,Elisabeth,Resch,Hinterdorfweg 86,8143,Dobl-Zwaring,0664/9758684,resch@immoresch.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,88,8143,Dobl-Zwaring,,,,1,,,Bernhard,Tollay,Hinterdorfweg 88,8143,Dobl-Zwaring,0660/8147085,bernhard.tollay@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,92,8143,Dobl-Zwaring,,,,1,,,Josef,Steiner,Hinterdorfweg 92,8143,Dobl-Zwaring,0664/8331054,josef.steiner@andritz.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,96,8143,Dobl-Zwaring,,,,1,,,Richard,Tompori,Hinterdorfweg 96,8143,Dobl-Zwaring,0660/7311981,richitompori@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Lamberg,12,8411,Lamberg,,,,1,,,Mario,Feirer,Lamberg 12,8411,Lamberg,0664/5405495,mario.feirer@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Lamberg,30,8411,Dobl-Zwaring,,,,1,,,Edmund,Zapusek,Leitnergasse 16,8010,Graz,0664/2174602,e.zapusek@hotmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Marktplatz,1,8143,Dobl-Zwaring,,,,1,Marktgemeinde Dobl Zwaring - Marktgemeindeamt,,,,Marktplatz 1,8143,Dobl-Zwaring,0699/15211121,gde@dobl-zwaring.gv.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,12/1,8143,Dobl,,,,1,,,Markus,Stangl,Muttendorf 12/1,8143,Dobl,0676/3764396,s.markus78@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,16c,8143,Dobl-Zwaring,,,,1,,,Pfeifer,Silvia,Muttendorf 16c,8143,Dobl-Zwaring,0664/ 80 666 66 41,silvia.pfeifer@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,18c,8143,Dobl-Zwaring,,,,1,,,Thomas,Gaar M.Sc.,Muttendorf 18c,8143,Dobl-Zwaring,0676/7902357,gaartom@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,20A,8143,Dobl-Zwaring,,,,1,,,Sandro,Sousa,Muttendorf 20A,8143,Dobl-Zwaring,0664/4458165, sandro_sousa_7@hotmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,20,8143,Dobl-Zwaring,,,,1,,,Dashurije,Grulaj,Muttendorf 20,8143,Dobl-Zwaring,0676/5934192,grulaj@outlook.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorfberg,27,8143,Dobl,,,,1,,,Kornelia,Weber,Muttendorfberg 27,8143,Dobl,0660/5376650,kornelia.weber@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Muttendorfer Straße,57a,8143,Dobl-Zwaring,,,,1,Reinhaltungsverband Unteres Kainachtal,ATU28551901,,,Hauptplatz 1,8502,Lannach,03136/82104-13,reinhaltungsverband@lannach.gv.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Petzendorf,34,8143,Dobl-Zwaring,,,,1,,,Bernhard,List,Petzendorf 34,8143,Dobl-Zwaring,0664/2364987,bernhard.list1986@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Petzendorf,6/EG/1,8143,Dobl,,,,1,,,Harald,Gödl,Petzendorf 6/EG/1,8143,Dobl,0664/4458468,h.goedl1311@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Petzendorferstraße,20,8143,Dobl-Zwaring,,,,1,,,Alfons,Moser,Petzendorferstraße 20,8143,Dobl-Zwaring,0699/16993582,alfonsmoser@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Pöls,28a,8504,Dobl-Zwaring,,,,1,,,Georg,Steinwender,Pöls 28a,8504,Dobl-Zwaring,0650/5090290,office@steinwender.st,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 7,,,1,,,Wilfried,Plank,Waltra 80,8354,St. Anna am Aigen,0676/845144413,willi.plank@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 8,,,1,,,Martin,Rainer,"Steindorf 71 - 72, Tür 8",8143,Dobl-Zwaring,0650/3112986,mr31@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 3,,,1,,,Martina,Marchel,"Steindorf 71 - 72, Tür 3",8143,Dobl-Zwaring,0664/4410165,martina.marchel@frikus.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 2,,,1,,,Andreas,Stoiser,"Steindorf 71 - 72, Tür 2",8143,Dobl-Zwaring,0699/10722121,stoiserandi@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 4,,,1,,,Andreas,Stoiser,"Steindorf 71 - 72, Tür 4",8143,Dobl-Zwaring,0699/10722121,stoiserandi@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 6,,,1,,,Lisa,Pracher,Petzendorf 18,8143,Dobl-Zwaring,0664/7876595,pracher.lisa@outlook.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 1,,,1,,,Mario u. Waltraud ,Hirtenfellner,Eisental 55,8076,Vasoldsberg,0664/9212425,mario.hirtenfellner@styria.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Steindorf,71 - 72,8143,Dobl-Zwaring,Tür 5,,,1,,,Paul,Kasper,Pöls 46,8504,Dobl-Zwaring,0664/88468710,paul.kasper@outlook.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Teichstraße,26,8143,Dobl-Zwaring,,,,1,,,Astrit,Krasniqi,Fasanweg 7a,8502,Lannach,0650/9931474,astrit.krasniqi@edu.fh-joanneum.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Teichstraße,GST 1212/1,8143,Dobl,,,,1,,,Klaus,Zink,Hangweg 16,8501,Lieboch,0680/2121123,klaus.z@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Teichstraße,GST 1212/2,8143,Dobl,,,,1,,,Klaus,Zink,Hangweg 16,8501,Lieboch,0680/2121123,klaus.z@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Teichstraße,GST 1212/3,8143,Dobl,,,,1,,,Klaus,Zink,Hangweg 16,8501,Lieboch,0680/2121123,klaus.z@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Tobisegg,26,8503,St. Josef i. d. Steiermark,,,,1,,,Hannes,Müller,Tobisegg 26,8503,St. Josef i. d. Steiermark,0664/1139362,honne_m@me.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,17,8143,Dobl-Zwaring,Tür 2,,,1,,,Simone,Schranz,Unterberg 17/2,8143,Dobl-Zwaring,0699/18190046,office@simone-schranz.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,17,8143,Dobl-Zwaring,Tür 3,,,1,,,Barbara,Koren,Unterberg 17/3,8143,Dobl-Zwaring,0660/3507706,koren.barbara@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,19,8143,Dobl ,Tür 2,,,1,,,Marianne,Grebenar,Unterberg 19/2,8143,Dobl ,0699/11589967,marianneneub@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Unterberg,34,8143,Dobl,,,,1,,,Wolfgang,Lanner,Unterberg 34,8143,Dobl,0676/86662549,wolfgang.lanner@outlook.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9,8143,Dobl-Zwaring,Tür 3,,,1,,,Iris u. Gerhard,Heinrich u. Ploschnitznigg,Unterberg 9/3,8143,Dobl-Zwaring,0677/62525671,"iris.heinrich@a1.net +g.ploschi@gmail.com",Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9,8143,Dobl,Tür 1,,,1,,,Michael,Dorner,Unterberg 9/1,,,0664/1457543,m.dorner76@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9,8143,Dobl-Zwaring,Tür 2,,,1,,,Angelika,Ebner,Unterberg 9/2,8143,Dobl-Zwaring,0664/88751090,angelika.scherz@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9a,8143,Dobl,Tür 5,,,1,,,Thomas,Dorner,Zirknitz 30c,8511,St. Stefan ob Stainz,0664/8205750,thomas.dorner@outlook.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9a,8143,Dobl-Zwaring,Tür 6,,,1,,,Andrea,Zettl,Unterberg 9a/6,8143,Dobl-Zwaring,0664/5352375,azettl@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9a,8143,Dobl,Tür 4,,,1,,,Stefan,Hösele,Unterberg 9a/4,8143,Dobl,0664/5093208,stefan.hoesele@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Unterberg,9a,8143,Dobl-Zwaring,Tür 2,,,1,,,Daniela,Kummer,Unterberg 9a/2,8143,Dobl-Zwaring,0664/4286707,kummer.daniela@live.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Weinzettl,169,8143,Dobl,,,,1,BLUE LIFE GmbH,,,,Weinzettl 169,8143,Dobl,0664/3344066,manfred.steinkellner@einfachcreativ.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wiesenweg,1,8143,Dobl,,,,1,,,Helfried,Müller,Wiesenweg 1,8143,Dobl,0664/88405861,Helfried.mueller@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wiesenweg,3,8143,Dobl,,,,1,,,Helfried,Müller,Wiesenweg 1,8143,Dobl-Zwaring,0664/88405861,Helfried.mueller@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wiesenweg,4,8143,Dobl-Zwaring,,,,1,,,Roland,Strametz,Wiesenweg 4,8143,Dobl-Zwaring,0664/5665536,roland.strametz@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,51,8504,Preding,,,,1,,,Maria,Edegger,Wuschan 51,8504,Preding,0664/4494539,mariachristine.grinschgl@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,91,8143,Dobl-Zwaring,,,,1,,,Gernot,Stoifmann,Pangraz-Fuchs Straße 26,8071,Hausmannstätten,0664/4411061,gernot.stoifmann@hotmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,92,8143,Dobl-Zwaring,,,,1,,,Bernhard,Baur,Radlstrasse 15,8501,Lieboch,0664-1339135,baur@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Wuschan,94,8504,Dobl-Zwaring,,,,1,,,Alexander,Grumeth,Wuschan 94,8504,Dobl-Zwaring,03185/3060050,A. grumeth@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Wuschan-Berg,27,8504,Dobl-Zwaring,,,,1,,,Maria,Stiger,Wuschan-Berg 27,8504,Dobl-Zwaring,0664/3355368,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,36,8142,Dobl-Zwaring,,,,1,,,Martin,Schmidt,Zwaring 36,8142,Dobl-Zwaring,0664/3202036,Office@wildacker.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,57,8142,Dobl-Zwaring,,,,1,,,Martin,Taucher,Grünbergerweg 20a,8410,Wildon,0650/3427296,mtaucher@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,74,8142,Dobl-Zwaring,,,,1,,,Heinz,Steingruber,Zwaring 74,8142,Dobl-Zwaring,0650/2602626,heinz.stoni@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,75,8142,Dobl-Zwaring,,,,1,,,Herbert,Lipp,Zwaring 75,8142,Dobl-Zwaring,0664/9169752,-,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,153,8142,Dobl-Zwaring,,,,1,,,Rene,Jurtin,Zwaring 153,8142,Dobl-Zwaring,0664/1494552,jurtinrene@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,154,8142,Dobl-Zwaring,,,,1,,,Dominik,Dampf,Zwaring 154,8142,Dobl-Zwaring,06641241977,dominik.dampf@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,156,8142,Dobl-Zwaring,,,,1,,,Mario,Berger,Zwaring 156,8142,Dobl-Zwaring,0664/4311529,mario.berger87@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Zwaring,168,8142,Dobl-Zwaring,,,,1,,,Philipp,Mayer,Zwaring 168,8142,Dobl-Zwaring,0660/4040645,philippmayer83@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Liebochstraße ,1,8143,Dobl-Zwaring,,,,1,,,Erich,Schellauf,Liebochstraße 1,8143,Dobl-Zwaring,0664/2100180,erich@schellauf.eu,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Liebochstraße ,1,8143,Dobl-Zwaring,,,,1,,,Josef u. Gerlinde,Ederer,Mühlenstraße 1,8074,Raaba,0664/3431202,gasthaus@raabahof-ederer.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,15,8143,Dobl-Zwaring,,,,1,,,Johann,Auinger,Muttendorf 15,8143,Dobl-Zwaring,0664/2755945,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorf,15,8143,Dobl-Zwaring,,,,1,,,Silke,Rossegger,Muttendorf 15,8143,Dobl-Zwaring,0677/61439304,silke1412@hotmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorfberg,24,8143,Dobl-Zwaring,,,,1,,,Wolfgang,Grinschgl,Muttendorfberg 24,8143,Dobl-Zwaring,0664/4203581,wolfgang.grinschgl82@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Muttendorfberg,24,8143,Dobl-Zwaring,,,,1,,,Wolfgang,Grinschgl,Muttendorfberg 24,8143,Dobl-Zwaring,,wolfgang.grinschgl82@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Petzendorf,1,8143,Dobl,,,,1,,,Christian,Rainer,Petzendorf 1,8143,Dobl,0664/1040812,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Petzendorf,1,8143,Dobl-Zwaring,,,,1,,,Christian,Rainer,Petzendorf 1,8143,Dobl-Zwaring,0664/1040812,agrar.rainer@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Unterberg,46,8143,Dobl-Zwaring,,,,1,Tanzbar Schiwago,ATU 39166406,,,Unterberg 46,8143,Dobl-Zwaring,03136/52134,tanzbar@schiwago.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Unterberg,46,8143,Dobl-Zwaring,,,,1,,,Robert,Fuchs,Unterberg 46,8143,Dobl-Zwaring,0664/4522050,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Weinzettl,1,8143,Dobl,Tür 7,,,1,,,Hermine,Zöhrer,Weinzettl 1/7,8143,Dobl,0664/4721122,herminezoehrer74@gmail.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Weinzettl,1,8143,Dobl-Zwaring,Tür 9,,,1,,,Dominik,Schmied,Weinzettl 1/9,8143,Dobl-Zwaring,0699/81507589,dominikschmied@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Weinzettl,1,8143,Dobl,Tür 2,,,1,,,Christoph,Wallgram,Weinzettl 1/2,8143,Dobl,0664/1955111,christoph.wallgram@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Weinzettlberg,12,8143,Dobl,,,,1,,,Günther,Peritsch,Weinzettlberg 12,8143,Dobl,0664/88631538,peritsch@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Weinzettlberg,12,8143,Dobl-Zwaring,,,,1,,,Günther,Peritsch,Weinzettlberg 12,8143,Dobl-Zwaring,0664/88631538,peritsch@aon.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,Zwaring,146,8142,Zwaring,,,,1,,,Jürgen,Schirmetz,Zwaring 146,8142,Zwaring,0664/88132819,juergen.schirmetz@holding-graz.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Wohneinheit in Mehrparteienhaus,,Zwaring,146,8142,Dobl-Zwaring,Tür 2,,,1,,,Silvia Wilhelmine,Müller,Zwaring 146/2,8142,Dobl-Zwaring,0664/4845259,,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Mehrparteienhaus,,Steindorf,12,8142,Dobl-Zwaring,,,,2,Mario u. Sigrid Zinterl GmbH,ATU72764813,,,Steindorf 12,8142,Dobl-Zwaring,0664/2516718,sigrid.zinterl@live.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Mehrparteienhaus,,Steindorf,62,8142,Dobl-Zwaring,,,,3,Mario u. Sigrid Zinterl GmbH,ATU72764814,,,Steindorf 62,8142,Dobl-Zwaring,0664/2516719,sigrid.zinterl@live.com,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vorsorgeanschluss,,Einfamilienhaus,,GST 1182/2,,8143,Dobl-Zwaring,,,,1,,,Daniel,Winter,Bahnhofstraße 50/3,8141,Premstätten,0650/3338777,winter.d@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, +Dobl-Zwaring,,Dobl-Zwaring,,,,Vollanschluss,,Einfamilienhaus,,Hinterdorfweg,,8143,Dobl-Zwaring,,,,1,,,Daniela,Schwarzl,Oberdorfweg 18,8143,Dobl-Zwaring,-,daniela.schwarzl@gmx.at,Energie Steiermark Technik GmbH,0,0,0,0,, diff --git a/scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024.csv b/scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024.csv.orig similarity index 100% rename from scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024.csv rename to scripts/preorder/dobl-zwaring/import/Dateneinspielung_Dobl-Zwaring 09042024.csv.orig