diff --git a/Layout/default/AddressDB/Index.php b/Layout/default/AddressDB/Index.php index f73e9b17b..3b7972df9 100644 --- a/Layout/default/AddressDB/Index.php +++ b/Layout/default/AddressDB/Index.php @@ -155,7 +155,8 @@
diff --git a/application/ADBStatusflag/ADBStatusflag.php b/application/ADBStatusflag/ADBStatusflag.php index e79d58178..fbae92b5b 100644 --- a/application/ADBStatusflag/ADBStatusflag.php +++ b/application/ADBStatusflag/ADBStatusflag.php @@ -3,6 +3,7 @@ class ADBStatusflag extends mfBaseModel { private $value; public $hausnummer_id; + public $wohneinheit_id; public function init() { @@ -14,14 +15,26 @@ class ADBStatusflag extends mfBaseModel { if($this->$name == null) { if($name == "value") { - if(!$this->hausnummer_id) return null; - $value = ADBHausnummerStatusflagValueModel::getFirst(["hausnummer_id" => $this->hausnummer_id, "flag_id" => $this->id]); - if(!$value) { - $value = ADBHausnummerStatusflagValueModel::create([ - "hausnummer_id" => $this->hausnummer_id, - "flag_id" => $this->id - ]); + if(!$this->hausnummer_id && !$this->wohneinheit_id) return null; + + if($this->hausnummer_id) { + $value = ADBHausnummerStatusflagValueModel::getFirst(["hausnummer_id" => $this->hausnummer_id, "flag_id" => $this->id]); + if(!$value) { + $value = ADBHausnummerStatusflagValueModel::create([ + "hausnummer_id" => $this->hausnummer_id, + "flag_id" => $this->id + ]); + } + } elseif($this->wohneinheit_id) { + $value = ADBWohneinheitStatusflagValueModel::getFirst(["wohneinheit_id" => $this->wohneinheit_id, "flag_id" => $this->id]); + if(!$value) { + $value = ADBWohneinheitStatusflagValueModel::create([ + "wohneinheit_id" => $this->wohneinheit_id, + "flag_id" => $this->id + ]); + } } + $this->value = $value; return $this->value; } diff --git a/application/ADBWohneinheit/ADBWohneinheit.php b/application/ADBWohneinheit/ADBWohneinheit.php index 374752b77..44c0b54ee 100644 --- a/application/ADBWohneinheit/ADBWohneinheit.php +++ b/application/ADBWohneinheit/ADBWohneinheit.php @@ -6,6 +6,7 @@ class ADBWohneinheit extends mfBaseModel { private $rimo_workorders; private $ftu_data; private $status; + private $statusflags; // TODO protected function init() { $this->db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -275,6 +276,18 @@ class ADBWohneinheit extends mfBaseModel { $this->status = new ADBStatus($this->status_id); return $this->status; } + + if($name == "statusflags") { + $flags = []; + foreach(ADBStatusflagModel::getAll() as $flag) { + $flag->wohneinheit_id = $this->id; + $flags[$flag->id] = $flag; + } + if(count($flags)) { + $this->statusflags = $flags; + } + return $this->statusflags; + } $classname = ucfirst($name); $idfield = $name."_id"; diff --git a/application/AddressDB/AddressDBController.php b/application/AddressDB/AddressDBController.php index de663bd8f..84c8a8f3c 100644 --- a/application/AddressDB/AddressDBController.php +++ b/application/AddressDB/AddressDBController.php @@ -405,8 +405,15 @@ class AddressDBController extends mfBaseController { $this->redirect("AddressDB"); } - + protected function exportAction() { + return $this->export(); + } + + protected function exportHomesAction() { + return $this->export(true); + } + private function export($export_homes = false) { $rfilter = $this->request->filter; if(!is_array($rfilter)) { $rfilter = []; @@ -448,8 +455,13 @@ class AddressDBController extends mfBaseController { // Get mysqli resource from Model so layout can output data as it's retrieved // Fixes lousy performance and horrendous memory usage $res = ADBHausnummerModel::search($addressdb_filter, [], true); - - $this->layout()->setTemplate("AddressDB/export.csv"); + + if($export_homes) { + $this->layout()->setTemplate("AddressDB/export_homes.csv"); + } else { + $this->layout()->setTemplate("AddressDB/export.csv"); + } + $this->layout()->set("res", $res); //var_dump($filter, $hausnummern);exit; @@ -782,25 +794,36 @@ class AddressDBController extends mfBaseController { private function findAddressApi() { $addresses = []; $search = trim($this->request->q); - $campagin_id = ($this->request->campaign_id); - - $campaign = new Preordercampaign($campagin_id); - if(!$campaign->id) { - header("Content-Type: application/json"); - echo json_encode(["results" => []]); - exit; - } - + $campagin_id = $this->request->campaign_id; + $include_gst = $this->request->include_gst ? $this->request->include_gst : false; + $scluster_ids = []; - foreach($campaign->salesclusters as $scluster) { - $scluster_ids[] = $scluster->id; + + if($campagin_id) { + $campaign = new Preordercampaign($campagin_id); + if(!$campaign->id) { + header("Content-Type: application/json"); + echo json_encode(["results" => []]); + exit; + } + + + foreach($campaign->salesclusters as $scluster) { + $scluster_ids[] = $scluster->id; + } + } else { + // get all salesclusters + foreach(ADBNetzgebietModel::getAll() as $scluster) { + $scluster_ids[] = $scluster->id; + } + + } - $results = []; $search_parts = explode(" ", $search); - $ort_search = $strasse_search = $plz_search = $hausnummer_search = []; + $ort_search = $strasse_search = $plz_search = $hausnummer_search = $gst_search = []; foreach($search_parts as $p) { $p = $this->db->escape(trim($p)); @@ -809,14 +832,21 @@ class AddressDBController extends mfBaseController { $strasse_search[] = "strasse like '$p%'"; $plz_search[] = "plz like '%$p%'"; $hausnummer_search[] = "hausnummer like '%$p%'"; + $gst_search[] = "grund_nr like '%$p%'"; } $where = "1=1"; if(count($scluster_ids)) { $where .= " AND netzgebiet_id IN (".implode(', ',$scluster_ids).")"; } - - $sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")) ORDER BY strasse, LENGTH(hausnummer), hausnummer"; + + if($include_gst) { + $sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).") OR (".implode(" OR ", $gst_search).") ) ORDER BY strasse, LENGTH(hausnummer), hausnummer"; + } else { + $sql = "SELECT * FROM view_hausnummer WHERE $where AND ((".implode(" OR ", $ort_search).") OR (".implode(" OR ", $strasse_search).") OR (".implode(" OR ", $plz_search).") OR (".implode(" OR ", $hausnummer_search).")) ORDER BY strasse, LENGTH(hausnummer), hausnummer"; + } + + $this->log->debug($sql); $adb = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME); @@ -831,6 +861,9 @@ class AddressDBController extends mfBaseController { while($data = $adb->fetch_object($res)) { $address_string = $data->plz." ".$data->ortschaft.", ".$data->strasse." ".$data->hausnummer; + if($include_gst) { + $address_string .= " | GST: ".$data->grund_nr; + } $sort_key = $data->plz." ".$data->ortschaft." ".$data->strasse; $address = [];