-
+
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()) {