diff --git a/Layout/default/Contract/View.php b/Layout/default/Contract/View.php index 4244d38c6..99eafa04d 100644 --- a/Layout/default/Contract/View.php +++ b/Layout/default/Contract/View.php @@ -33,8 +33,8 @@ - - + + @@ -101,8 +101,8 @@

Vertrag

ID: $contract->owner->id])?>">owner->id?>ID: $contract->owner->id])?>">owner->id?>
Kundennummer: owner->customer_number?>
- - + + @@ -165,6 +165,30 @@ +
+
+

Konfiguration

+ +
Matchcode:matchcode?>Matchcode:matchcode?>
Produkt: product_name?>
+ configgroups as $group): ?> + + + + + items as $item): ?> + + + + + + + +

name?>

displayname?>: + value->string?> +
+ + +
$filter, 's' => $s])?>" class="btn btn-secondary mr-1"> Zurück zur Vertragsübersicht diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php index 569a6882a..4df6026e9 100644 --- a/Layout/default/Preordercampaign/Form.php +++ b/Layout/default/Preordercampaign/Form.php @@ -122,6 +122,7 @@
+
@@ -142,6 +143,18 @@ Diese Felder müssen beim Bestellen angegeben werden
+ +
+ +
+ + Statt Ort muss Ortsteil/Bezirk angegeben werden +
+
+
diff --git a/application/Api/v1/PreorderApicontroller.php b/application/Api/v1/PreorderApicontroller.php index 92f92ac6c..79e90576e 100644 --- a/application/Api/v1/PreorderApicontroller.php +++ b/application/Api/v1/PreorderApicontroller.php @@ -119,7 +119,7 @@ class PreorderApicontroller extends mfBaseApicontroller { $unit_search[$key] = trim($this->post['address']->$key); } } - + /* * check customer */ diff --git a/application/Contract/Contract.php b/application/Contract/Contract.php index 80a373bcc..221632216 100644 --- a/application/Contract/Contract.php +++ b/application/Contract/Contract.php @@ -7,6 +7,9 @@ class Contract extends mfBaseModel { private $orderproduct; private $termination; private $sla; + private $contractConfigGroups; + private $contractConfigItems; + private $configgroups; private $finisher; private $canceler; private $creator; @@ -65,6 +68,34 @@ class Contract extends mfBaseModel { return $this->orderproduct; } + if($name == "contractConfigGroups") { + $product = $this->getProperty("product"); + $this->contractConfigGroups = ContractconfigGroupModel::search(['producttech_id' => $product->producttech_id]); + return $this->contractConfigGroups; + } + + if($name == "configgroups") { + $product = $this->getProperty("product"); + $this->configgroups = []; + foreach(ContractconfiggroupProductgroupModel::search(['productgroup_id' => $product->productgroup_id]) as $ccpg) { + $ccpg->contractconfiggroup->setContractId($this->id); + $this->configgroups[] = $ccpg->contractconfiggroup; + } + return $this->configgroups; + } + + if($name == "contractConfigItems") { + $product = $this->getProperty("product"); + + $this->contractConfigItems = []; + foreach(ProducttechAttributeModel::search(['producttech_id' => $product->producttech_id, "forcontract" => 1]) as $item) { + $item->setContractId($this->id); + $this->contractConfigItems [] = $item; + } + + return $this->contractConfigItems; + } + if($name == "finisher") { $this->finisher = mfValuecache::singleton()->get("Worker-id-".$this->finish_date_by); if($this->finisher === null) { diff --git a/application/ContractconfigGroup/ContractconfigGroup.php b/application/ContractconfigGroup/ContractconfigGroup.php index 66e425c03..d8a86a28d 100644 --- a/application/ContractconfigGroup/ContractconfigGroup.php +++ b/application/ContractconfigGroup/ContractconfigGroup.php @@ -2,15 +2,34 @@ class ContractconfigGroup extends mfBaseModel { private $items; - private $value; + private $contract_id; + public function setContractId($contract_id) { + if(!is_numeric($contract_id)) { + return false; + } + $this->contract_id = $contract_id; + return true; + } public function getProperty($name) { if($this->$name == null) { - if($name == "items") { + /*if($name == "items") { $this->items = ContractconfigItemModel::search(['group_id' => $this->id]); return $this->items; + }*/ + + if($name == "items") { + if($this->contract_id) { + foreach(ContractconfigItemModel::search(['contractconfiggroup_id' => $this->id]) as $item) { + $item->setContractId($this->contract_id); + $this->items[] = $item; + } + } else { + $this->items = ContractconfigItemModel::search(['contractconfiggroup_id' => $this->id]); + } + return $this->items; } $classname = ucfirst($name); diff --git a/application/ContractconfigGroup/ContractconfigGroupModel.php b/application/ContractconfigGroup/ContractconfigGroupModel.php index 220b38ac3..9579433ac 100644 --- a/application/ContractconfigGroup/ContractconfigGroupModel.php +++ b/application/ContractconfigGroup/ContractconfigGroupModel.php @@ -73,7 +73,14 @@ class ContractconfigGroupModel { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $res = $db->select("ContractconfigGroup", "*", "$where ORDER BY name, filename"); + $sql = "SELECT ContractconfigGroup.* FROM ContractconfigGroup + LEFT JOIN ContractconfiggroupProducttech ON (ContractconfigGroup.id = ContractconfiggroupProducttech.contractconfiggroup_id) + WHERE $where + ORDER BY ContractconfigGroup.id, producttech_id, `create` + "; + mfLoghandler::singleton()->debug($sql); + $res = $db->query($sql); + //$res = $db->select("ContractconfigGroup", "*", "$where ORDER BY name, `create`"); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { $items[] = new ContractconfigGroup($data); @@ -89,17 +96,20 @@ class ContractconfigGroupModel { if(array_key_exists("name", $filter)) { $name = FronkDB::singleton()->escape($filter['name']); if($name) { - $where .= " AND name='$name'"; + $where .= " AND ContractconfigGroup.name='$name'"; } } - if(array_key_exists("filename", $filter)) { - $filename = FronkDB::singleton()->escape($filter['filename']); - if($filename) { - $where .= " AND filename='$filename'"; + if(array_key_exists("producttech_id", $filter)) { + $producttech_id = $filter['producttech_id']; + if(is_numeric($producttech_id)) { + $where .= " AND producttech_id=$producttech_id"; + } elseif(is_array($producttech_id) && count($producttech_id)) { + $where .= " AND producttech_id IN (". implode(",", $producttech_id).")"; } } + if(array_key_exists("subfolder", $filter)) { $subfolder = FronkDB::singleton()->escape($filter['subfolder']); if($subfolder) { diff --git a/application/ContractconfigItem/ContractconfigItem.php b/application/ContractconfigItem/ContractconfigItem.php index e6fb43949..71dc66e83 100644 --- a/application/ContractconfigItem/ContractconfigItem.php +++ b/application/ContractconfigItem/ContractconfigItem.php @@ -1,5 +1,39 @@ contract_id = $contract_id; + return true; + } + + public function getProperty($name) { + if($this->$name == null) { + + if($name == "value") { + if(!$this->contract_id) { + return null; + } + $this->value = ContractconfigValueModel::getFirst(['item_id' => $this->id, "contract_id" => $this->contract_id]); + return $this->value; + } + + $classname = ucfirst($name); + $idfield = $name."_id"; + $this->$name = new $classname($this->$idfield); + + if($this->$name->id) { + return $this->$name; + } else { + return null; + } + } + + return $this->$name; + } } \ No newline at end of file diff --git a/application/ContractconfigItem/ContractconfigItemModel.php b/application/ContractconfigItem/ContractconfigItemModel.php index 7533d5929..384d21588 100644 --- a/application/ContractconfigItem/ContractconfigItemModel.php +++ b/application/ContractconfigItem/ContractconfigItemModel.php @@ -100,6 +100,13 @@ class ContractconfigItemModel { } } + if(array_key_exists("contractconfiggroup_id", $filter)) { + $contractconfiggroup_id = $filter['contractconfiggroup_id']; + if(is_numeric($contractconfiggroup_id)) { + $where .= " AND contractconfiggroup_id=$contractconfiggroup_id"; + } + } + if(array_key_exists("group_id", $filter)) { $group_id = $filter['group_id']; if(is_numeric($group_id)) { diff --git a/application/ContractconfigValue/ContractconfigValueModel.php b/application/ContractconfigValue/ContractconfigValueModel.php index f3e8441c2..cf8cec2f7 100644 --- a/application/ContractconfigValue/ContractconfigValueModel.php +++ b/application/ContractconfigValue/ContractconfigValueModel.php @@ -1,12 +1,11 @@ select("ContractconfigValue", "*", "$where LIMIT 1"); + $res = $db->select("ContractconfigValue", "*", "$where ORDER BY item_id, contract_id LIMIT 1"); if($db->num_rows($res)) { $data = $db->fetch_object($res); $item = new ContractconfigValue($data); @@ -73,7 +72,7 @@ class ContractconfigValueModel { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $res = $db->select("ContractconfigValue", "*", "$where ORDER BY name, filename"); + $res = $db->select("ContractconfigValue", "*", "$where ORDER BY item_id, contract_id"); if($db->num_rows($res)) { while($data = $db->fetch_object($res)) { $items[] = new ContractconfigValue($data); @@ -86,24 +85,44 @@ class ContractconfigValueModel { $where = "1=1 "; //var_dump($filter);exit; - if(array_key_exists("name", $filter)) { - $name = FronkDB::singleton()->escape($filter['name']); - if($name) { - $where .= " AND name='$name'"; + if(array_key_exists("contract_id", $filter)) { + $contract_id = $filter['contract_id']; + if(is_numeric($contract_id)) { + $where .= " AND contract_id=$contract_id"; + } elseif(is_array($contract_id) && count($contract_id)) { + $where .= " AND contract_id IN (". implode(",", $contract_id).")"; } } - if(array_key_exists("filename", $filter)) { - $filename = FronkDB::singleton()->escape($filter['filename']); - if($filename) { - $where .= " AND filename='$filename'"; + if(array_key_exists("item_id", $filter)) { + $item_id = $filter['item_id']; + if(is_numeric($item_id)) { + $where .= " AND item_id=$item_id"; + } elseif(is_array($item_id) && count($item_id)) { + $where .= " AND item_id IN (". implode(",", $item_id).")"; } } - if(array_key_exists("subfolder", $filter)) { - $subfolder = FronkDB::singleton()->escape($filter['subfolder']); - if($subfolder) { - $where .= " AND subfolder='$subfolder'"; + if(array_key_exists("int", $filter)) { + $int = $filter['int']; + if(is_numeric($int)) { + $where .= " AND int=$int"; + } elseif(is_array($int) && count($int)) { + $where .= " AND `int` IN (". implode(",", $int).")"; + } + } + + if(array_key_exists("string", $filter)) { + $string = FronkDB::singleton()->escape($filter['string']); + if($string) { + $where .= " AND `string`='$string'"; + } + } + + if(array_key_exists("text", $filter)) { + $text = FronkDB::singleton()->escape($filter['text']); + if($text) { + $where .= " AND `text`='$text'"; } } diff --git a/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroup.php b/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroup.php new file mode 100644 index 000000000..621e6cfce --- /dev/null +++ b/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroup.php @@ -0,0 +1,37 @@ +$name == null) { + + if(!$this->id) { + return null; + } + + if($name == "productgroup") { + $this->productgroup = new Productgroup($this->productgroup_id); + return $this->productgroup; + } + + if($name == "contractconfiggroup") { + $this->contractconfiggroup = new ContractconfigGroup($this->contractconfiggroup_id); + return $this->contractconfiggroup; + } + + $classname = ucfirst($name); + $idfield = $name."_id"; + $this->$name = new $classname($this->$idfield); + + if($this->$name->id) { + return $this->$name; + } else { + return null; + } + } + + return $this->$name; + } +} \ No newline at end of file diff --git a/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroupModel.php b/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroupModel.php new file mode 100644 index 000000000..30339e264 --- /dev/null +++ b/application/ContractconfiggroupProductgroup/ContractconfiggroupProductgroupModel.php @@ -0,0 +1,107 @@ + $value) { + if(property_exists(get_called_class(), $field)) { + $model ->$field = $value; + } + } + + $me = new User(); + $me->loadMe(); + + 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 getAll() { + $items = []; + + $db = FronkDB::singleton(); + + $res = $db->select("ContractconfiggroupProductgroup", "*", "1=1"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ContractconfiggroupProductgroup($data); + } + } + return $items; + + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $res = $db->select("ContractconfiggroupProductgroup", "*", "$where ORDER BY productgroup_id, contractconfiggroup_id LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new ContractconfiggroupProductgroup($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function search($filter) { + $items = []; + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $res = $db->select("ContractconfiggroupProductgroup", "*", "$where ORDER BY productgroup_id, contractconfiggroup_id"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new ContractconfiggroupProductgroup($data); + } + } + return $items; + } + + private static function getSqlFilter($filter) { + $where = "1=1 "; + + //var_dump($filter);exit; + if(array_key_exists("productgroup_id", $filter)) { + $productgroup_id = $filter['productgroup_id']; + if(is_numeric($productgroup_id)) { + $where .= " AND productgroup_id=$productgroup_id"; + } elseif(is_array($productgroup_id) && count($productgroup_id)) { + $where .= " AND productgroup_id IN (". implode(",", $productgroup_id).")"; + } + } + + if(array_key_exists("contractconfiggroup_id", $filter)) { + $contractconfiggroup_id = $filter['contractconfiggroup_id']; + if(is_numeric($contractconfiggroup_id)) { + $where .= " AND contractconfiggroup_id=$contractconfiggroup_id"; + } elseif(is_array($contractconfiggroup_id) && count($contractconfiggroup_id)) { + $where .= " AND contractconfiggroup_id IN (". implode(",", $contractconfiggroup_id).")"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} \ No newline at end of file diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 4497bddd4..71a617c0d 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -192,6 +192,12 @@ class PreordercampaignController extends mfBaseController { $data['required_preorder_fields'] = null; } + if($r->district_is_city == 1) { + $data['district_is_city'] = 1; + } else { + $data['district_is_city'] = 0; + } + $data['edit_by'] = $this->me->id; diff --git a/application/Preordercampaign/PreordercampaignModel.php b/application/Preordercampaign/PreordercampaignModel.php index c297c6f2c..af4e5ca31 100644 --- a/application/Preordercampaign/PreordercampaignModel.php +++ b/application/Preordercampaign/PreordercampaignModel.php @@ -3,11 +3,15 @@ class PreordercampaignModel { public $name; public $network_id; + public $homes_count; public $fulfillment; + public $product_type; public $description; public $area; public $from; public $to; + public $required_preorder_fields; + public $district_is_city; public $note; diff --git a/application/ProducttechAttribute/ProducttechAttribute.php b/application/ProducttechAttribute/ProducttechAttribute.php index a5dafef73..9d21cfc6f 100644 --- a/application/ProducttechAttribute/ProducttechAttribute.php +++ b/application/ProducttechAttribute/ProducttechAttribute.php @@ -2,10 +2,30 @@ class ProducttechAttribute extends mfBaseModel { private $producttech; + private $contractval; + private $contract_id; + + + public function setContractId($contract_id) { + if(!is_numeric($contract_id)) { + return false; + } + $this->contract_id = $contract_id; + return true; + } public function getProperty($name) { if($this->$name == null) { + if($name == "contractval") { + if(!$this->contract_id) { + return null; + } + $this->contractval = ContractconfigValueModel::getFirst(['item_id' => $this->id]); + //var_dump($this->contractval); + return $this->contractval; + } + $classname = ucfirst($name); $idfield = $name."_id"; $this->$name = new $classname($this->$idfield); diff --git a/application/ProducttechAttribute/ProducttechAttributeModel.php b/application/ProducttechAttribute/ProducttechAttributeModel.php index 6f72c54a9..3f6773ae4 100644 --- a/application/ProducttechAttribute/ProducttechAttributeModel.php +++ b/application/ProducttechAttribute/ProducttechAttributeModel.php @@ -102,6 +102,20 @@ class ProducttechAttributeModel { $db = FronkDB::singleton(); + if(array_key_exists("forproduct", $filter)) { + $forproduct = $db->escape($filter['forproduct']); + if(is_numeric($forproduct)) { + $where .= " AND `forproduct` = $forproduct"; + } + } + + if(array_key_exists("forcontract", $filter)) { + $forcontract = $db->escape($filter['forcontract']); + if(is_numeric($forcontract)) { + $where .= " AND `forcontract` = $forcontract"; + } + } + //var_dump($filter);exit; if(array_key_exists("name", $filter)) { $name = $db->escape($filter['name']);