From 58ff5234927daaa23ff2017d840f33f014626325 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Wed, 12 Oct 2022 17:41:03 +0200 Subject: [PATCH] Hausnummer Frigabe is own table now --- Layout/default/Preordercampaign/Form.php | 1 + application/ADBHausnummer/ADBHausnummer.php | 8 + .../ADBHausnummerFreigabe.php | 10 ++ .../ADBHausnummerFreigabeModel.php | 145 ++++++++++++++++++ application/Api/v1/AddressdbApicontroller.php | 28 ++-- application/Api/v1/PreorderApicontroller.php | 12 +- application/Preorder/PreorderModel.php | 1 + .../Preordercampaign/Preordercampaign.php | 2 +- lang/de.php | 1 + scripts/addressdb/add_freigabe.php | 29 ++++ 10 files changed, 221 insertions(+), 16 deletions(-) create mode 100644 application/ADBHausnummerFreigabe/ADBHausnummerFreigabe.php create mode 100644 application/ADBHausnummerFreigabe/ADBHausnummerFreigabeModel.php create mode 100755 scripts/addressdb/add_freigabe.php diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php index faf90b5a0..2c1042d4f 100644 --- a/Layout/default/Preordercampaign/Form.php +++ b/Layout/default/Preordercampaign/Form.php @@ -102,6 +102,7 @@ + diff --git a/application/ADBHausnummer/ADBHausnummer.php b/application/ADBHausnummer/ADBHausnummer.php index 80c22b46d..9f8683f65 100644 --- a/application/ADBHausnummer/ADBHausnummer.php +++ b/application/ADBHausnummer/ADBHausnummer.php @@ -3,6 +3,7 @@ class ADBHausnummer extends mfBaseModel { private $strasse; private $plz; + private $freigabe = []; protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -42,6 +43,13 @@ class ADBHausnummer extends mfBaseModel { public function getProperty($name) { if($this->$name == null) { + if($name == "freigabe") { + foreach(ADBHausnummerFreigabeModel::search(['hausnummer_id' => $this->id]) as $hf) { + $this->freigabe[] = $hf->freigabe; + } + return $this->freigabe; + } + if($name == "strasse") { $this->strasse = new ADBStrasse($this->strasse_id); return $this->strasse; diff --git a/application/ADBHausnummerFreigabe/ADBHausnummerFreigabe.php b/application/ADBHausnummerFreigabe/ADBHausnummerFreigabe.php new file mode 100644 index 000000000..8ea403155 --- /dev/null +++ b/application/ADBHausnummerFreigabe/ADBHausnummerFreigabe.php @@ -0,0 +1,10 @@ +db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + $this->table = "HausnummerFreigabe"; + } + +} diff --git a/application/ADBHausnummerFreigabe/ADBHausnummerFreigabeModel.php b/application/ADBHausnummerFreigabe/ADBHausnummerFreigabeModel.php new file mode 100644 index 000000000..a73da0f50 --- /dev/null +++ b/application/ADBHausnummerFreigabe/ADBHausnummerFreigabeModel.php @@ -0,0 +1,145 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = mfValuecache::singleton()->get("me"); + if(!$me) { + $me = new User(); + $me->loadMe(); + mfValuecache::singleton()->set("me", $me); + } + /* + if($model->create_by === null) { + $model->create_by = $me->id; + } + if($model->edit_by === null) { + $model->edit_by = $me->id; + }*/ + + return $model; + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + mfLoghandler::singleton()->debug($where); + $res = $db->select("HausnummerFreigabe", "*", "$where ORDER BY hausnummer_id,freigabe LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ADBHausnummerFreigabe($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $res = $db->select("HausnummerFreigabe", "*", "1=1 ORDER BY hausnummer_id,freigabe"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ADBHausnummerFreigabe($data); + } + } + return $items; + + } + + + public static function count($filter) { + $db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) as cnt FROM HausnummerFreigabe + WHERE $where + "; + + $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(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); + + $where = self::getSqlFilter($filter); + $sql = "SELECT HausnummerFreigabe.* FROM HausnummerFreigabe + WHERE $where + ORDER BY hausnummer_id,freigabe"; + + 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 ADBHausnummerFreigabe($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + if(array_key_exists("extref", $filter)) { + $extref = FronkDB::singleton()->escape($filter['extref']); + if($extref) { + $where .= " AND HausnummerFreigabe.`extref` = '$extref'"; + } + } + + if(array_key_exists("hausnummer_id", $filter)) { + $hausnummer_id = $filter['hausnummer_id']; + if(is_numeric($hausnummer_id)) { + $where .= " AND HausnummerFreigabe.hausnummer_id=$hausnummer_id"; + } elseif(is_array($hausnummer_id) && count($hausnummer_id)) { + $where .= " AND HausnummerFreigabe.hausnummer_id IN (". implode(",", $hausnummer_id).")"; + } + } + + + if(array_key_exists("freigabe", $filter)) { + $freigabe = FronkDB::singleton()->escape($filter['freigabe']); + if($freigabe) { + $where .= " AND HausnummerFreigabe.`freigabe` = '$freigabe'"; + } + } + + + //var_dump($filter, $where);exit; + return $where; + } + +} diff --git a/application/Api/v1/AddressdbApicontroller.php b/application/Api/v1/AddressdbApicontroller.php index ffbcd71ee..91b570069 100644 --- a/application/Api/v1/AddressdbApicontroller.php +++ b/application/Api/v1/AddressdbApicontroller.php @@ -210,22 +210,23 @@ class AddressdbApicontroller extends mfBaseApicontroller { $sql = "SELECT * FROM view_wohneinheit WHERE $where ORDER BY plz, gemeinde, ortschaft, strasse, LENGTH(hausnummer), hausnummer, block, stiege, stock, LENGTH(tuer), tuer"; $res = $this->db()->query($sql); + $hausnummer_cache = []; + if($this->db()->num_rows($res)) { while($data = $this->db()->fetch_object($res)) { + if(array_key_exists($data->hausnummer_id,$hausnummer_cache)) { + $hausnummer = $hausnummer_cache[$data->hausnummer_id]; + } else { + $hausnummer = new ADBHausnummer($data->hausnummer_id); + $hausnummer_cache[$data->hausnummer_id] = $hausnummer; + } + if(!$hausnummer->id) continue; + $ptypes = []; - switch($data->freigabe) { - case "voll": - if(in_array("order", $this->allowed_preordertypes)) { - $ptypes[] = "order"; - } - case "vorsorge": - if(in_array("provision", $this->allowed_preordertypes)) { - $ptypes[] = "provision"; - } - case "interesse": - if(in_array("interest", $this->allowed_preordertypes)) { - $ptypes[] = "interest"; - } + foreach($hausnummer->freigabe as $freigabe) { + if(in_array($freigabe, $this->allowed_preordertypes)) { + $ptypes[] = $freigabe; + } } $addresses[] = [ @@ -240,6 +241,7 @@ class AddressdbApicontroller extends mfBaseApicontroller { 'zusatz' => $data->zusatz, 'gps_lat' => $data->gps_lat, 'gps_long' => $data->gps_long, + 'rollout_year' => ($data->rollout) ? (int)$data->rollout : null, 'preorderTypes' => $ptypes ]; } diff --git a/application/Api/v1/PreorderApicontroller.php b/application/Api/v1/PreorderApicontroller.php index fc3b0f0d2..f685c7a5c 100644 --- a/application/Api/v1/PreorderApicontroller.php +++ b/application/Api/v1/PreorderApicontroller.php @@ -61,7 +61,7 @@ class PreorderApicontroller extends mfBaseApicontroller { } $type = $this->post['preorderType']; - if($type != "interest" && $type != "provision" && $type != "order") { + if($type != "interest" && $type != "provision" && $type != "order" && $type != "reorder") { return mfResponse::BadRequest(["message" => "Invalid preorderType"]); } @@ -137,6 +137,7 @@ class PreorderApicontroller extends mfBaseApicontroller { /* * search address in AddressDB */ + $where = "1=1 "; foreach($address_search as $field => $value) { $where .= " AND `$field` = '$value'"; } @@ -146,7 +147,7 @@ class PreorderApicontroller extends mfBaseApicontroller { $where .= " AND netzgebiet_id IN (".implode(',', $this->filter_salescluster_ids).")"; } - $sql = "SELECT * FROM view_hausnummer WHERE 1=1 $where"; + $sql = "SELECT * FROM view_hausnummer WHERE $where"; $res = $this->db()->query($sql); if(!$this->db()->num_rows($res)) { //var_dump($this->db()->num_rows($res), $this->db()->fetch_object($res)); @@ -279,6 +280,13 @@ class PreorderApicontroller extends mfBaseApicontroller { } } + if($customer->type == "tenant") { + $preorder_data['contact_type'] = "tenant"; + } elseif($customer->type == "owner") { + $preorder_data['contact_type'] = "owner"; + } else { + return mfResponse::BadRequest(["message" => "customer type must be 'tenant' or 'owner'"]); + } /* * create preorder record diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php index 8a88854eb..7a16acb5f 100644 --- a/application/Preorder/PreorderModel.php +++ b/application/Preorder/PreorderModel.php @@ -25,6 +25,7 @@ class PreorderModel { public $accept_dsgvo; public $accept_marketing; public $accept_withdrawal; + public $contact_type; public $company; public $uid; public $firstname; diff --git a/application/Preordercampaign/Preordercampaign.php b/application/Preordercampaign/Preordercampaign.php index fd41dc1d7..55dbb8e9e 100644 --- a/application/Preordercampaign/Preordercampaign.php +++ b/application/Preordercampaign/Preordercampaign.php @@ -13,7 +13,7 @@ class Preordercampaign extends mfBaseModel { public function addTypes(Array $types) { - $allowd_types = ["interest","provision","order"]; + $allowd_types = ["interest","provision","order","reorder"]; $new_types = []; diff --git a/lang/de.php b/lang/de.php index a4351b10c..87cdf1d1f 100644 --- a/lang/de.php +++ b/lang/de.php @@ -42,5 +42,6 @@ $l['sipit'] = "SCA (sipit)"; $l['preorder.interest'] = "Interessenbekundung"; $l['preorder.provision'] = "Vorsorgeanschluss"; $l['preorder.order'] = "Vollanschluss"; +$l['preorder.reorder'] = "Nachbestellung"; $lang['de'] = $l; \ No newline at end of file diff --git a/scripts/addressdb/add_freigabe.php b/scripts/addressdb/add_freigabe.php new file mode 100755 index 000000000..fdfc48d23 --- /dev/null +++ b/scripts/addressdb/add_freigabe.php @@ -0,0 +1,29 @@ +#!/usr/bin/php + [1,2]]) as $hausnummer) { + foreach(['interest','provision','order','reorder'] as $type) { + $freigabe = ADBHausnummerFreigabeModel::getFirst(['hausnummer_id' => $hausnummer->id, 'freigabe' => $type]); + if(!$freigabe) { + $freigabe = ADBHausnummerFreigabeModel::create([ + 'hausnummer_id' => $hausnummer->id, + 'freigabe' => $type + ]); + if(!$freigabe->save()) { + die("Error saving HausnummerFreigabe (".$hausnummer->id.", $type)\n"); + } + } + } +} \ No newline at end of file