Added salescluster to addressdb and preorder

This commit is contained in:
Frank Schubert
2022-10-04 21:42:00 +02:00
parent 9db6ae59c3
commit 9b3335c820
17 changed files with 552 additions and 87 deletions
@@ -92,6 +92,8 @@ class ADBGemeindeModel {
$where = self::getSqlFilter($filter);
$sql = "SELECT Gemeinde.* FROM Gemeinde
LEFT JOIN Plz ON (Plz.gemeinde_id = Gemeinde.id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Gemeinde.id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Gemeinde.id
ORDER BY name,code,kennziffer";
@@ -118,6 +120,15 @@ class ADBGemeindeModel {
$where = "1=1 ";
if(array_key_exists("netzgebiet_id", $filter)) {
$netzgebiet_id = $filter['netzgebiet_id'];
if(is_numeric($netzgebiet_id)) {
$where .= " AND Netzgebiet.id=$netzgebiet_id";
} elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) {
$where .= " AND Netzgebiet.id IN (". implode(",", $netzgebiet_id).")";
}
}
if(array_key_exists("code", $filter)) {
$code = $filter['code'];
if(is_numeric($code)) {
@@ -46,6 +46,7 @@ class ADBHausnummerModel {
$db = FronkDB::singleton(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
$where = self::getSqlFilter($filter);
mfLoghandler::singleton()->debug($where);
$res = $db->select("Hausnummer", "*", "$where ORDER BY strasse_id,hausnummer LIMIT 1");
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
@@ -100,7 +101,7 @@ class ADBHausnummerModel {
WHERE $where
ORDER BY strasse_id,hausnummer";
//mfLoghandler::singleton()->debug($sql);
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'];
@@ -121,6 +122,13 @@ class ADBHausnummerModel {
private static function getSqlFilter($filter) {
$where = "1=1 ";
if(array_key_exists("extref", $filter)) {
$extref = FronkDB::singleton()->escape($filter['extref']);
if($extref) {
$where .= " AND Hausnummer.`extref` = '$extref'";
}
}
if(array_key_exists("plz_id", $filter)) {
$plz_id = $filter['plz_id'];
if(is_numeric($plz_id)) {
@@ -139,6 +147,8 @@ class ADBHausnummerModel {
}
}
if(array_key_exists("hausnummer", $filter)) {
$hausnummer = FronkDB::singleton()->escape($filter['hausnummer']);
if($hausnummer) {
@@ -0,0 +1,137 @@
<?php
class ADBNetzgebietModel {
public $name;
public $extref;
public $source;
public $source_id;
public $create = null;
public $edit = null;
public static function create(Array $data) {
$model = new ADBNetzgebiet();
foreach($data as $field => $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);
$res = $db->select("Netzgebiet", "*", "$where ORDER BY name LIMIT 1");
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new ADBNetzgebiet($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("Netzgebiet", "*", "1=1 ORDER BY name");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new ADBNetzgebiet($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 Netzgebiet
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 Netzgebiet.* FROM Netzgebiet
LEFT JOIN Plz ON (Plz.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Netzgebiet.id
ORDER BY name";
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)) {
$sql .= " LIMIT ".$limit['count'];
}
}
$res = $db->query($sql);
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new ADBNetzgebiet($data);
}
}
return $items;
}
private static function getSqlFilter($filter) {
$where = "1=1 ";
if(array_key_exists("name", $filter)) {
$name = FronkDB::singleton()->escape($filter['name']);
if($name) {
$where .= " AND Netzgebiet.`name` = '$name'";
}
}
if(array_key_exists("extref", $filter)) {
$extref = FronkDB::singleton()->escape($filter['extref']);
if($extref) {
$where .= " AND Netzgebiet.`extref` = '$extref'";
}
}
//var_dump($filter, $where);exit;
return $where;
}
}
+14 -1
View File
@@ -91,10 +91,14 @@ class ADBPlzModel {
$where = self::getSqlFilter($filter);
$sql = "SELECT Plz.* FROM Plz
LEFT JOIN Gemeinde ON (Gemeinde.id = Plz.gemeinde_id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Plz.gemeinde_id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Plz.id
ORDER BY plz";
//mfLoghandler::singleton()->debug($sql);
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'];
@@ -116,6 +120,15 @@ class ADBPlzModel {
$where = "1=1 ";
if(array_key_exists("netzgebiet_id", $filter)) {
$netzgebiet_id = $filter['netzgebiet_id'];
if(is_numeric($netzgebiet_id)) {
$where .= " AND Netzgebiet.id=$netzgebiet_id";
} elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) {
$where .= " AND Netzgebiet.id IN (". implode(",", $netzgebiet_id).")";
}
}
if(array_key_exists("hausnummer_id", $filter)) {
$hausnummer_id = $filter['hausnummer_id'];
if(is_numeric($hausnummer_id)) {
@@ -96,6 +96,8 @@ class ADBStrasseModel {
LEFT JOIN Hausnummer ON (Hausnummer.strasse_id = Strasse.id)
LEFT JOIN Plz ON (Plz.id = Hausnummer.plz_id)
LEFT JOIN Gemeinde ON (Gemeinde.id = Strasse.gemeinde_id)
LEFT JOIN GemeindeNetzgebiet ON (GemeindeNetzgebiet.gemeinde_id = Strasse.gemeinde_id)
LEFT JOIN Netzgebiet ON (GemeindeNetzgebiet.netzgebiet_id = Netzgebiet.id)
WHERE $where
GROUP BY Strasse.id
ORDER BY gemeinde_id,name,kennziffer";
@@ -121,6 +123,15 @@ class ADBStrasseModel {
private static function getSqlFilter($filter) {
$where = "1=1 ";
if(array_key_exists("netzgebiet_id", $filter)) {
$netzgebiet_id = $filter['netzgebiet_id'];
if(is_numeric($netzgebiet_id)) {
$where .= " AND Netzgebiet.id=$netzgebiet_id";
} elseif(is_array($netzgebiet_id) && count($netzgebiet_id)) {
$where .= " AND Netzgebiet.id IN (". implode(",", $netzgebiet_id).")";
}
}
if(array_key_exists("gemeinde_id", $filter)) {
$gemeinde_id = $filter['gemeinde_id'];
@@ -100,7 +100,7 @@ class ADBWohneinheitModel {
WHERE $where
ORDER BY hausnummer_id,block,stiege,LENGTH(stock),stock,LENGTH(tuer),tuer";
//mfLoghandler::singleton()->debug($sql);
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'];
@@ -121,6 +121,12 @@ class ADBWohneinheitModel {
private static function getSqlFilter($filter) {
$where = "1=1 ";
if(array_key_exists("extref", $filter)) {
$extref = FronkDB::singleton()->escape($filter['extref']);
if($extref) {
$where .= " AND Wohneinheit.`extref` = '$extref'";
}
}
if(array_key_exists("hausnummer_id", $filter)) {
$hausnummer_id = $filter['hausnummer_id'];
+73 -12
View File
@@ -1,7 +1,11 @@
<?php
class AddressdbApicontroller extends mfBaseApicontroller {
private $filter_gemeinde_ids = [];
private $campaigns = [];
private $filter_salescluster_ids = [];
private $campaigns_by_scluster = [];
private $allowed_preordertypes = [];
protected function init() {
$db = $this->db(ADDRESSDB_DBHOST, ADDRESSDB_DBUSER, ADDRESSDB_DBPASS, ADDRESSDB_DBNAME);
@@ -19,19 +23,42 @@ class AddressdbApicontroller extends mfBaseApicontroller {
}
protected function authenticated() {
$campaignApiuser = PreordercampaignApiuserModel::getFirst(["worker_id" => $this->me->id]);
$campaign = new Preordercampaign($campaignApiuser->preordercampaign_id);
if($campaign) {
foreach(PreordercampaignGemeindeModel::search(['preordercampaign_id' => $campaign->id]) as $gemeinde) {
$this->filter_gemeinde_ids[] = $gemeinde->id;
$campaignApiusers = PreordercampaignApiuserModel::search(["worker_id" => $this->me->id]);
foreach($campaignApiusers as $campaignApiuser) {
$campaign = new Preordercampaign($campaignApiuser->preordercampaign_id);
if($campaign) {
foreach(PreordercampaignSalesclusterModel::search(['preordercampaign_id' => $campaign->id]) as $campain_scluster) {
if(!in_array($campain_scluster->salescluster_id, $this->filter_salescluster_ids)) {
$this->filter_salescluster_ids[] = $campain_scluster->salescluster_id;
}
if(!array_key_exists($campain_scluster->salescluster_id, $this->campaigns_by_scluster)) {
$this->campaigns_by_scluster[$campain_scluster->salescluster_id] = [];
}
$this->campaigns_by_scluster[$campain_scluster->salescluster_id][] = $campaign->id;
}
$this->campaigns[$campaign->id] = $campaign;
// get allowed preordertypes
if(is_array($campaign->types) && count($campaign->types)) {
foreach($campaign->types as $type) {
$this->allowed_preordertypes[] = $type->type;
}
}
}
foreach(PreordercampaignOriginhostnameModel::search(['preordercampaign_id' => $campaign->id]) as $origin) {
$this->addAllowedOrigin($origin->hostname);
}
}
foreach(PreordercampaignOriginhostnameModel::search(['preordercampaign_id' => $campaign->id]) as $origin) {
$this->addAllowedOrigin($origin->hostname);
}
$this->allowed_preordertypes = array_unique($this->allowed_preordertypes);
//var_dump($this->allowed_preordertypes);exit;
//var_dump($this->filter_salescluster_ids, $this->campaigns_by_scluster);exit;
//var_dump($this->campaigns, $this->allowed_origins);exit;
//var_dump($campaign, $this->allowed_origins);exit;
}
protected function findCity() {
@@ -56,6 +83,10 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$city_search['plz%'] = $zip;
}
if(count($this->filter_salescluster_ids)) {
$city_search['netzgebiet_id'] = $this->filter_salescluster_ids;
}
$results = ADBGemeindeModel::search($city_search);
@@ -84,7 +115,13 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$zip = $search;
}
$results = ADBPlzModel::search(['plzstring%' => $zip]);
$zip_search = ['plzstring%' => $zip];
if(count($this->filter_salescluster_ids)) {
$zip_search['netzgebiet_id'] = $this->filter_salescluster_ids;
}
$results = ADBPlzModel::search($zip_search);
$zips = [];
@@ -122,6 +159,10 @@ class AddressdbApicontroller extends mfBaseApicontroller {
$street_search['plz%'] = $zip;
}
if(count($this->filter_salescluster_ids)) {
$street_search['netzgebiet_id'] = $this->filter_salescluster_ids;
}
$results = ADBStrasseModel::search($street_search);
@@ -131,6 +172,7 @@ class AddressdbApicontroller extends mfBaseApicontroller {
}
$streets = array_unique($streets);
sort($streets);
return mfResponse::Ok(['streets' => array_values($streets)]);
}
@@ -170,6 +212,22 @@ class AddressdbApicontroller extends mfBaseApicontroller {
if($this->db()->num_rows($res)) {
while($data = $this->db()->fetch_object($res)) {
$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";
}
}
$addresses[] = [
'zip' => $data->plz,
'city' => $data->gemeinde,
@@ -179,7 +237,10 @@ class AddressdbApicontroller extends mfBaseApicontroller {
'stock' => $data->stock,
'stiege' => $data->stiege,
'tuer' => $data->tuer,
'zusatz' => $data->zusatz
'zusatz' => $data->zusatz,
'gps_lat' => $data->gps_lat,
'gps_long' => $data->gps_long,
'preorderTypes' => $ptypes
];
}
}
@@ -5,7 +5,7 @@ class Preordercampaign extends mfBaseModel {
private $preorders;
private $types;
private $setup_products;
private $gemeinden;
private $salesclusters;
private $apiusers;
private $corsorigins;
@@ -88,12 +88,12 @@ class Preordercampaign extends mfBaseModel {
return $this->setup_products;
}
if($name == "gemeinden") {
$items = PreordercampaignGemeindeModel::search(["preordercampaign_id" => $this->id]);
if($name == "salesclusters") {
$items = PreordercampaignSalesclusterModel::search(["preordercampaign_id" => $this->id]);
foreach($items as $pog) {
$this->gemeinden[$pog->gemeinde_id] = $pog;
$this->salesclusters[$pog->salescluster_id] = $pog;
}
return $this->gemeinden;
return $this->salesclusters;
}
if($name == "apiusers") {
@@ -92,7 +92,9 @@ class PreordercampaignController extends mfBaseController {
$this->layout()->set("networksections", NetworksectionModel::getAll());
$this->layout()->set("adb_gemeinden", ADBGemeindeModel::getAll());
$this->layout()->set("adb_netzgebiete", ADBNetzgebietModel::getAll());
}
protected function editAction() {
@@ -110,7 +112,6 @@ class PreordercampaignController extends mfBaseController {
$this->layout()->set("campaign", $campaign);
return $this->addAction();
}
@@ -180,16 +181,17 @@ class PreordercampaignController extends mfBaseController {
$campaign->addTypes($r->types);
}
//var_dump($r->adb_gemeinde_ids);exit;
foreach(PreordercampaignGemeindeModel::search(['preordercampaign_id' => $campaign->id]) as $pcg) {
//var_dump($r->adb_netzgebiet_ids);exit;
foreach(PreordercampaignSalesclusterModel::search(['preordercampaign_id' => $campaign->id]) as $pcg) {
$pcg->delete();
}
if(is_array($r->adb_gemeinde_ids) && count($r->adb_gemeinde_ids)) {
foreach($r->adb_gemeinde_ids as $gemeinde_id) {
$pcg = PreordercampaignGemeindeModel::getFirst(['preordercampaign_id' => $campaign->id, 'gemeinde_id' => $gemeinde_id]);
//var_dump($r->adb_netzgebiet_ids);exit;
if(is_array($r->adb_netzgebiet_ids) && count($r->adb_netzgebiet_ids)) {
foreach($r->adb_netzgebiet_ids as $netzgebiet_id) {
$pcg = PreordercampaignSalesclusterModel::getFirst(['preordercampaign_id' => $campaign->id, 'salescluster_id' => $netzgebiet_id]);
if($pcg) continue;
$pcg = PreordercampaignGemeindeModel::create(['preordercampaign_id' => $campaign->id, 'gemeinde_id' => $gemeinde_id]);
$pcg = PreordercampaignSalesclusterModel::create(['preordercampaign_id' => $campaign->id, 'salescluster_id' => $netzgebiet_id]);
$pcg->save();
}
}
@@ -1,5 +0,0 @@
<?php
class PreordercampaignGemeinde extends mfBaseModel {
}
@@ -0,0 +1,5 @@
<?php
class PreordercampaignSalescluster extends mfBaseModel {
}
@@ -1,8 +1,8 @@
<?php
class PreordercampaignGemeindeModel {
class PreordercampaignSalesclusterModel {
public $preordercampaign_id;
public $gemeinde_id;
public $salescluster_id;
public $create_by;
public $edit_by;
@@ -10,7 +10,7 @@ class PreordercampaignGemeindeModel {
public $edit;
public static function create(Array $data) {
$model = new PreordercampaignGemeinde();
$model = new PreordercampaignSalescluster();
foreach($data as $field => $value) {
if(property_exists(get_called_class(), $field)) {
@@ -40,10 +40,10 @@ class PreordercampaignGemeindeModel {
$db = FronkDB::singleton();
$res = $db->select("PreordercampaignGemeinde", "*", "ORDER BY preordercampaign_id, gemeinde_id");
$res = $db->select("PreordercampaignSalescluster", "*", "ORDER BY preordercampaign_id, salescluster_id");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new PreordercampaignGemeinde($data);
$items[] = new PreordercampaignSalescluster($data);
}
}
return $items;
@@ -54,10 +54,10 @@ class PreordercampaignGemeindeModel {
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$res = $db->select("PreordercampaignGemeinde", "*", "$where ORDER BY preordercampaign_id, gemeinde_id");
$res = $db->select("PreordercampaignSalescluster", "*", "$where ORDER BY preordercampaign_id, salescluster_id");
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
$item = new PreordercampaignGemeinde($data);
$item = new PreordercampaignSalescluster($data);
if($item->id) {
return $item;
} else {
@@ -72,10 +72,10 @@ class PreordercampaignGemeindeModel {
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$res = $db->select("PreordercampaignGemeinde", "*", "$where ORDER BY preordercampaign_id, gemeinde_id");
$res = $db->select("PreordercampaignSalescluster", "*", "$where ORDER BY preordercampaign_id, salescluster_id");
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new PreordercampaignGemeinde($data);
$items[] = new PreordercampaignSalescluster($data);
}
}
return $items;
@@ -92,10 +92,10 @@ class PreordercampaignGemeindeModel {
}
}
if(array_key_exists("gemeinde_id", $filter)) {
$gemeinde_id = $filter['gemeinde_id'];
if(is_numeric($gemeinde_id)) {
$where .= " AND gemeinde_id=$gemeinde_id";
if(array_key_exists("salescluster_id", $filter)) {
$salescluster_id = $filter['salescluster_id'];
if(is_numeric($salescluster_id)) {
$where .= " AND salescluster_id=$salescluster_id";
}
}