-
-
-
-
-
-
-
-
- | Kunde |
- IVT Produkt |
- Produkt |
- Preis Setup |
- Preis |
- Rech. Interval |
- Aktion |
-
-
-
-
-
- | =$d["customer"]->getCompanyOrName()?> |
- =$d["ivtproduct"]->name?> |
- =$d["product"]->name?> |
- =$d["contract"]->price_setup?> |
- =$d["contract"]->price?> |
-
- =$d["contract"]->billing_period?> (=($d["contract"]->billing_period == 1) ? "Monatlich" : ""?>=($d["contract"]->billing_period == 12) ? "Jährlich" : ""?>=($d["contract"]->billing_period == 24) ? "Zweijährlich" : ""?>=($d["contract"]->billing_period == 36) ? "Dreijährlich" : ""?>)
- |
- =$d["action"]?> |
-
-
-
-
-
-
-
1])?>">
+
+
+
+
+
+
+
+
+
+
+
+
+ | Kunde |
+ IVT Kunde |
+ IVT Produkt |
+ Produkt |
+ Preis Setup |
+ Preis |
+ Rech. Interval |
+ Herstellungsd. |
+ Aktion |
+ Bestellung |
+
+
+
+
+
+ | =$d["customer"]->getCompanyOrName()?>
+ (=$d["customer"]->customer_number?>)
+ |
+ =$d["ivtcustomer"]->id?> |
+ =$d["ivtproduct"]->name?> |
+ =$d["product"]->name?> |
+ =$d["contract"]->price_setup?> |
+ =$d["contract"]->price?> |
+
+ =$d["contract"]->billing_period?>
+ (
+ =($d["contract"]->billing_period == 1) ? "Monatlich" : ""?>
+ =($d["contract"]->billing_period == 12) ? "Jährlich" : ""?>
+ =($d["contract"]->billing_period == 24) ? "Zweijährlich" : ""?>
+ =($d["contract"]->billing_period == 36) ? "Dreijährlich" : ""?>
+ )
+ |
+ =date("d.m.Y H:i", $d["contract"]->finish_date)?> |
+ =$d["action"]?> |
+
+ order_id): ?>
+ $d["orderproduct"]->order_id])?>" target="_blank">=$d["orderproduct"]->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