diff --git a/Layout/default/AddressDB/Form.php b/Layout/default/AddressDB/Form.php index 82dacb375..19aa196ba 100644 --- a/Layout/default/AddressDB/Form.php +++ b/Layout/default/AddressDB/Form.php @@ -7,6 +7,16 @@ $urlfilter["filter"] = $filter; } $posturl = self::getUrl("AddressDB", "save", $urlfilter); + + + /* + * check if address is in one of our networks + */ + if($address_id && !array_key_exists($address->netzgebiet_id, $my_adb_networks)) { + $this->setFlash("Keine Berechtigung", "error"); + mfBaseController::redirect("AddressDB"); + } + ?> @@ -16,7 +26,7 @@
@@ -37,56 +47,219 @@
- + + + + + + + +
- + +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+
+ +
- +
- - Eindeutige Identifizierung das Produkts. Z.B. Anschlussadresse, Domainname usw. + + + + +
- +
+ +
+ + + + + +
+
- +
- + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+ +
+ + + + + +
+
+ +
+ +
+ + + + + +
+
+ +
+ +
+
+ id): ?> +
-
-
- - -
-
- +
- + + + + +
+ +
+ +
@@ -103,5 +276,21 @@
+ \ No newline at end of file diff --git a/Layout/default/AddressDB/Index.php b/Layout/default/AddressDB/Index.php index a605c3a6a..3c1f25f04 100644 --- a/Layout/default/AddressDB/Index.php +++ b/Layout/default/AddressDB/Index.php @@ -36,7 +36,7 @@ @@ -137,7 +137,7 @@

Liste aller GWR-Adressen

- + "> Neue Adresse anlegen Bulk update
diff --git a/Layout/default/Building/Form.php b/Layout/default/Building/Form.php index 3ae8672cb..88d218bc7 100644 --- a/Layout/default/Building/Form.php +++ b/Layout/default/Building/Form.php @@ -136,14 +136,14 @@
- +
gps_lat) ? "readonly='readonly'" : ""?> />
- +
gps_lat) ? "readonly='readonly'" : ""?> />
diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php index 01bd1b7b0..284df5ae5 100644 --- a/application/ADBHausnummer/ADBHausnummer.php +++ b/application/ADBHausnummer/ADBHausnummer.php @@ -77,7 +77,10 @@ class ADBHausnummer extends mfBaseModel { if($this->$name == null) { if($name == "freigaben") { - $this->freigaben = explode(",", $this->freigabe); + $this->freigaben = json_decode($this->freigabe); + if(!is_array($this->freigaben)) { + $this->freigaben = []; + } return $this->freigaben; } diff --git a/application/ADBHausnummer/ADBHausnummerModel.php b/application/ADBHausnummer/ADBHausnummerModel.php index 7d03e3061..9420e7176 100644 --- a/application/ADBHausnummer/ADBHausnummerModel.php +++ b/application/ADBHausnummer/ADBHausnummerModel.php @@ -20,6 +20,9 @@ class ADBHausnummerModel { public $manual_add; public $manual_add_by; public $manual_add_info; + public $manual_update; + public $manual_update_by; + public $manual_update_info; public $create = null; public $edit = null; diff --git a/application/AddressDB/AddressDB.php b/application/AddressDB/AddressDB.php index 41ca5ce2d..d30f6eeea 100644 --- a/application/AddressDB/AddressDB.php +++ b/application/AddressDB/AddressDB.php @@ -70,4 +70,182 @@ class AddressDB { } } + /* + * methods to create or update an Address from strings + */ + + public function createUpdateHausnummer($data) { + $netzgebiet = null; + $gemeinde = null; + $ortschaft = null; + $strasse = null; + $plz = null; + $hausnummer = null; + + //var_dump($data);exit; + + if(!array_key_exists("netzgebiet_id", $data)) { + return false; + } + + foreach(["gemeinde", "ortschaft", "strasse", "plz"] as $field) { + $classname = "ADB".ucfirst($field); + $idfield = $field."_id"; + if(!array_key_exists($field."_id", $data)) continue; + $$field = new $classname($data[$idfield]); + if(!${$field}->id) { + $$field = null; + } + } + + + $netzgebiet = new ADBNetzgebiet($data['netzgebiet_id']); + if(!$netzgebiet->id) { + $this->log->debug(__CLASS__."::".__METHOD__.": Missing netzgebiet_id"); + return false; + } + + if(!$gemeinde) { + // dont allow creating Gemeinden + $this->log->debug(__CLASS__."::".__METHOD__.": Missing Gemeinde"); + return false; + } + + if(!$ortschaft) { + // search by kennziffer + if(array_key_exists("ortschaft_kennziffer", $data) && $data['ortschaft_kennziffer']) { + $ortschaft = ADBOrtschaftModel::getFirst(['kennziffer' => $data['ortschaft_kennziffer']]); + } + + if(!$ortschaft) { + // search by name + if(!array_key_exists("ortschaft", $data) || !$data['ortschaft']) return false; + $ortschaft = ADBOrtschaftModel::getFirst(['gemeinde_id' => $gemeinde->id, 'name' => $data['ortschaft']]); + } + + if(!$ortschaft) { + // create Ortschaft + $ortschaft = ADBOrtschaftModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'kennziffer' => ($data['ortschaft_kennziffer']) ? $data['ortschaft_kennziffer'] : null, + 'name' => $data['ortschaft'] + ]); + if(!$ortschaft->save()) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save Ortschaft"); + return false; + } + } + } + + if(!$strasse) { + // search by kennziffer + if(array_key_exists("strasse_kennziffer", $data) && $data['strasse_kennziffer']) { + $strasse = ADBStrasseModel::getFirst(['kennziffer' => $data['strasse_kennziffer']]); + } + + if(!$strasse) { + // search by name + if(!array_key_exists("strasse", $data) || !$data['strasse']) return false; + $strasse = ADBStrasseModel::getFirst(['gemeinde_id' => $gemeinde->id, 'name' => $data['strasse']]); + } + + if(!$strasse) { + // create Strasse + if(!array_key_exists("strasse", $data) || !$data['strasse']) return false; + $strasse = ADBStrasseModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'kennziffer' => ($data['strasse_kennziffer']) ? $data['strasse_kennziffer'] : null, + 'name' => $data['strasse'] + ]); + if(!$strasse->save()) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save Strasse"); + return false; + } + } + } + + if(!$plz) { + // search by plz + if(!array_key_exists("plz", $data) || !$data['plz']) return false; + $plz = ADBPlzModel::getFirst(['gemeinde_id' => $gemeinde->id, 'plz' => $data['plz']]); + if(!$plz) { + // create PLZ + $plz = ADBPlzModel::create([ + 'gemeinde_id' => $gemeinde->id, + 'plz' => $data['plz'], + 'plzstring' => $data['plz'] + ]); + if(!$plz->save()) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save PLZ"); + return false; + } + } + } + + if(array_key_exists("hausnummer_id", $data)) { + // if hausnummer_id is set but empty => fail + if(!$data['hausnummer_id']) return false; + $hausnummer = new ADBHausnummer($data['hausnummer_id']); + if(!$hausnummer->id) { + return false; + } + } + + $me = new User(); + $me->loadMe(); + + // build hausnummer data + //$hausnummer_data['oaid'] = (array_key_exists("oaid", $data) && $data['oaid']) ? $data['oaid'] : null; + $hausnummer_data['adrcd'] = ($data['adrcd']) ? $data['adrcd'] : null; + $hausnummer_data['extref'] = ($data['extref']) ? $data['extref'] : null; + $hausnummer_data['netzgebiet_id'] = $netzgebiet->id; + $hausnummer_data['ortschaft_id'] = $ortschaft->id; + $hausnummer_data['plz_id'] = $plz->id; + $hausnummer_data['strasse_id'] = $strasse->id; + $hausnummer_data['hausnummer'] = $data['hausnummer']; + $hausnummer_data['grund_nr'] = $data['grund_nr']; + $hausnummer_data['gps_lat'] = ($data['gps_lat']) ? str_replace(",", ".", $data['gps_lat']) : null; + $hausnummer_data['gps_long'] = ($data['gps_long']) ? str_replace(",", ".", $data['gps_long']) : null; + $hausnummer_data['rollout'] = (trim($data['rollout'])) ? trim($data['rollout']) : null; + $hausnummer_data['rollout_info'] = (trim($data['rollout_info'])) ? trim($data['rollout_info']) : null; + $hausnummer_data['freigabe'] = json_encode($data['freigabe']); + $hausnummer_data['manual_add'] = date('U'); + $hausnummer_data['manual_add_by'] = $me->id; + $hausnummer_data['manual_add_info'] = "thetool user ".$me->username." via AddressDB"; + $hausnummer_data['manual_update'] = date('U'); + $hausnummer_data['manual_update_by'] = $me->id; + $hausnummer_data['manual_update_info'] = "thetool user ".$me->username." via AddressDB"; + + //var_dump($hausnummer_data, $hausnummer);exit; + + if(!$hausnummer) { + // create hausnummer + $hausnummer = ADBHausnummerModel::create($hausnummer_data); + } else { + // update hausnummer + $hausnummer->update($hausnummer_data); + } + + $hausnummer_id = $hausnummer->save(); + if(!$hausnummer_id) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save Hausnummer"); + return false; + } + + // create OAID + if(!$hausnummer->oaid) { + $hausnummer->oaid = $hausnummer->getNewOAID(); + if(!$hausnummer->save()) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save Hausnummer OAID"); + } + } + + + return $hausnummer_id; + } + + public function updateHausnummer($hausnummer_id, $data) { + + } + } \ No newline at end of file diff --git a/application/AddressDB/AddressDBController.php b/application/AddressDB/AddressDBController.php index 2df3e576b..b2b90f894 100644 --- a/application/AddressDB/AddressDBController.php +++ b/application/AddressDB/AddressDBController.php @@ -162,12 +162,169 @@ class AddressDBController extends mfBaseController { protected function addAction() { $this->layout()->setTemplate("AddressDB/Form"); + if($this->me->is("Admin")) { + $my_networks = NetworkModel::getAll(); + } else { + $my_networks = $this->me->myNetworks(["netowner", "salespartner"]); + } + + $netzgebiet_ids = []; + $my_adb_networks = []; + foreach($my_networks as $network) { + if($network->adb_netzgebiet_id && !in_array($network->adb_netzgebiet_id, $netzgebiet_ids)) { + $netzgebiet_ids[] = $network->adb_netzgebiet_id; + $my_adb_networks[$network->adb_netzgebiet_id] = new ADBNetzgebiet($network->adb_netzgebiet_id); + } + } + $this->layout()->set("my_adb_networks", $my_adb_networks); + + + $save_data = []; + foreach($this->request->get() as $key => $value) { + $save_data[$key] = $value; + } + //var_dump($save_data);exit; + $this->layout()->set("save_data", $save_data); + } protected function editAction() { + + $id = $this->request->id; + if(!is_numeric($id) || $id < 1) { + $this->layout()->setFlash("Adresse nicht gefunden", "error"); + $this->redirect("AddressDB"); + } + + $hausnummer = new ADBHausnummer($id); + if(!$hausnummer->id) { + $this->layout()->setFlash("Adresse nicht gefunden", "error"); + $this->redirect("AddressDB"); + } + + /*if(!in_array($hausnummer->netzgebiet_id, $my_adb_networks)) { + $this->layout()->setFlash("Adresse nicht gefunden", "error"); + $this->redirect("AddressDB"); + }*/ + + $this->layout()->set("address", $hausnummer); + return $this->addAction(); } + protected function saveAction() { + $r = $this->request; + $id = $r->id; + //var_dump($r->get());exit; + + $address_data = []; + + if(is_numeric($id) && $id > 0) { + $mode = "edit"; + $hausnummer = new ADBHausnummer($id); + if(!$hausnummer->id) { + $this->layout()->setFlash("Addresse nicht gefunden", "error"); + $this->redirect("AddressDB"); + } + $address_data['hausnummer_id'] = $hausnummer->id; + } else { + $mode = "add"; + } + + $required = ['netzgebiet_id','strasse','hausnummer','plz','ortschaft','gemeinde']; + foreach(['adrcd','extref','netzgebiet_id','strasse','hausnummer','plz','ortschaft','gemeinde','grund_nr','gps_lat','gps_long','unit_count'] as $field) { + if(in_array($field, $required)) { + if(!trim($r->$field)) { + $this->layout()->setFlash("'".ucfirst($field)."' darf nicht leer sein!", "error"); + return $this->addAction(); + //$this->redirect("AddressDB", $mode, ['id' => $id]); + } + } + $address_data[$field] = $this->db()->escape(trim($r->$field)); + } + + $gemeinde = ADBGemeindeModel::getFirst(['name' => $address_data['gemeinde']]); + if(!$gemeinde->id) { + $this->layout()->setFlash("Gemeinde nicht gefunden", "error"); + return $this->addAction(); + //$this->redirect("AddressDB", $mode, ['id' => $id]); + } + + $address_data['gemeinde_id'] = $gemeinde->id; + + $freigabe = []; + if(is_array($r->freigabe) && count($r->freigabe)) { + if(in_array("interest", $r->freigabe)) { + $freigabe[] = "interest"; + } + if(in_array("provision", $r->freigabe)) { + $freigabe[] = "provision"; + } + if(in_array("order", $r->freigabe)) { + $freigabe[] = "order"; + } + if(in_array("reorder", $r->freigabe)) { + $freigabe[] = "reorder"; + } + + } + + $address_data['freigabe'] = $freigabe; + + $rollout = null; + $rollout_info = null; + if(trim($r->rollout)) { + $rollout = intval(trim($r->rollout)); + } + if(trim($r->rollout_info)) { + $rollout_info = trim($r->rollout_info); + } + if(!$rollout_info) { + $rollout_info = "unscheduled"; + } + + $address_data['rollout'] = $rollout; + $address_data['rollout_info'] = $rollout_info; + + //var_dump($address_data);exit; + + $adb = new AddressDB(); + $hausnummer_id = $adb->createUpdateHausnummer($address_data); + if(!$hausnummer_id) { + $this->layout()->setFlash("Fehler beim Erstellen der Adresse!", "error"); + return $this->addAction(); + //$this->redirect("AddressDB"); + } + + if($mode == "add") { + $hausnummer = new ADBHausnummer($hausnummer_id); + + /* + * Wohneinheiten erstellen + */ + if($r->unit_count > 0) { + for($i = 1; $i <= $r->unit_count; $i++) { + $unit = ADBWohneinheitModel::create([ + 'hausnummer_id' => $hausnummer_id, + 'num' => $i, + ]); + $unit_id = $unit->save(); + if(!$unit_id) { + $this->log->debug(__CLASS__."::".__METHOD__.": Cannot save Woneinheit"); + continue; + } + $unit->oaid = $unit->getNewOAID(); + $unit->save(); + } + } + } + + $qs = http_build_query(['filter' => ['oaid' => $hausnummer->oaid]]); + //var_dump($qs);exit; + $this->layout()->setFlash("Adresse erfolgreich gespeichert", "success"); + $this->redirect("AddressDB", "Index", $qs); + + } protected function apiAction() { if(!$this->me->is(["Admin","netowner"])) { diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index c51d4b1a6..f63a761b4 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -384,7 +384,7 @@ class PreorderController extends mfBaseController { return $this->addAction(); } - $street = ADBStrasseModel::getFirst(['name' => $street_search, 'ortschaft_id' => $district->id, 'gemeinde_id' => $city->id]); + $street = ADBStrasseModel::getFirst(['name' => $street_search, 'gemeinde_id' => $city->id]); if(!$street) { $this->log->debug("create street"); $street = ADBStrasseModel::create([ @@ -439,7 +439,7 @@ class PreorderController extends mfBaseController { 'freigabe' => $netzgebiet->freigabe, 'manual_add' => date('U'), 'manual_add_by' => $this->me->id, - 'manual_add_info' => "thetool user ".$this->me->username + 'manual_add_info' => "thetool user ".$this->me->username." via Preorder create" ]); if(!$hausnummer->save()) {