diff --git a/Layout/default/Contract/Index.php b/Layout/default/Contract/Index.php new file mode 100644 index 000000000..bbb32807b --- /dev/null +++ b/Layout/default/Contract/Index.php @@ -0,0 +1,71 @@ + + + +
+
+
+
+ +
+

Verträge

+
+
+
+ + +
+
+ +
+
+
+

Liste aller Verträge

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
InhaberProduktAnschlussPreisPreis SetupRechnungsperiodeErstelltZuletzt bearbeitet
owner->getCompanyOrName()?>product->name?> + termination_id): ?> + termination->building->street?>
+ termination->building->zip?> termination->building->city?> + +
price?>price_setup?>billing_period)?>x Jährlichcreate)?> (creator->name?>)edit)?> (editor->name?>) + $contract->id])?>"> + $contract->id])?>" class="text-danger" title="Vertrag kündigen"> +
+
+
+ +
+
+ + diff --git a/Layout/default/Preorder/Form.php b/Layout/default/Preorder/Form.php index 464ae75ac..cd4e7a86d 100644 --- a/Layout/default/Preorder/Form.php +++ b/Layout/default/Preorder/Form.php @@ -119,9 +119,9 @@
diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php index a74750732..b8226e397 100644 --- a/Layout/default/Preordercampaign/Form.php +++ b/Layout/default/Preordercampaign/Form.php @@ -70,7 +70,6 @@ -
@@ -78,6 +77,39 @@
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ @@ -117,5 +149,12 @@ todayBtn: 'linked', autoclose: true }); + + $("#types").select2({ + allowClear: true, + placeholder: "", + closeOnSelect: false + }); + \ No newline at end of file diff --git a/application/Contract/Contract.php b/application/Contract/Contract.php new file mode 100644 index 000000000..fed343d33 --- /dev/null +++ b/application/Contract/Contract.php @@ -0,0 +1,5 @@ +needlogin=true; + $me = new User(); + $me->loadMe(); + $this->me = $me; + $this->layout()->set("me",$me); + + if(!$me->is(["Admin"])) { + $this->redirect("Dashboard"); + } + } + + + protected function indexAction() { + $this->layout()->setTemplate("Contract/Index"); + + $rfilter = $this->request->filter; + iF(!is_array($rfilter)) { + $rfilter = []; + } + + $this->layout->set("filter", $rfilter); + + $filter = $this->getPreparedFilter($rfilter); + + // pagination defaults + $pagination = []; + $pagination['start'] = 0; + $pagination['count'] = 50; + $pagination['maxItems'] = 0; + + if(is_numeric($this->request->s)) { + $pagination['start'] = intval($this->request->s); + } + //var_dump($filter);exit; + $pagination['maxItems'] = ContractModel::count($filter); + $contracts = ContractModel::search($filter, $pagination); + + $this->layout()->set("contracts", $contracts); + } + + private function getPreparedFilter($filter) { + $new_filter = []; + + if(is_array($filter) && count($filter)) { + foreach($filter as $name => $value) { + $new_filter[$name] = $value; + } + } + + return $new_filter; + } +} \ No newline at end of file diff --git a/application/Contract/ContractModel.php b/application/Contract/ContractModel.php new file mode 100644 index 000000000..8f3909e4b --- /dev/null +++ b/application/Contract/ContractModel.php @@ -0,0 +1,161 @@ + $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("Contract", "*", "1 = 1 ORDER BY owner_id,product_id,`create`"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new Contract($data); + } + } + return $items; + + } + + public static function getFirst() { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $res = $db->select("Contract", "*", "$where ORDER BY owner_id,product_id,`create` LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new Contract($data); + if($item->id) { + return $item; + } else { + return null; + } + } + return null; + } + + public static function count($filter) { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $sql = "SELECT COUNT(*) FROM Contract + LEFT JOIN Address ON (Contract.address_id = Address.id) + WHERE $where + GROUP BY Contract.id + ORDER BY owner_id,product_id,`create`"; + + $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) { + //var_dump($filter);exit; + $items = []; + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Contract.* FROM Contract + LEFT JOIN Address ON (Contract.address_id = Address.id) + WHERE $where + GROUP BY Contract.id + ORDER BY owner_id,product_id,`create`"; + + 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']; + } + } + + mfLoghandler::singleton()->debug($sql); + + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new Contract($data); + } + } + + return $items; + } + + private function getSqlFilter($filter) { + $where = "1=1 "; + + $db = FronkDB::singleton(); + + //var_dump($filter);exit; + if(array_key_exists("owner_id", $filter)) { + $owner_id = $filter['owner_id']; + if(is_numeric($owner_id)) { + $where .= " AND owner_id=$owner_id"; + } + } + + if(array_key_exists("product_id", $filter)) { + $product_id = $filter['product_id']; + if(is_numeric($product_id)) { + $where .= " AND product_id=$product_id"; + } + } + + if(array_key_exists("product_name", $filter)) { + $product_name = $db->escape($filter['product_name']); + if($product_name) { + $where .= " AND `product_name` like '$product_name'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +} \ No newline at end of file diff --git a/application/Preorder/PreorderController.php b/application/Preorder/PreorderController.php index 333d352a6..62a21db99 100644 --- a/application/Preorder/PreorderController.php +++ b/application/Preorder/PreorderController.php @@ -199,6 +199,13 @@ class PreorderController extends mfBaseController { $this->redirect("Preordercampaign"); } + if(!array_key_exists($data['type'], $campaign->types)) { + $this->layout()->setFlash("Bitte Vorbestelltyp auswählen!", "error"); + $this->layout()->set("preorder", $preorder); + $this->layout()->set("campaign", $campaign); + return $this->addAction(); + } + $product = new Product($data['product_id']); if(!$product->id) { $this->layout()->setFlash("Bitte Produkt auswählen!", "error"); diff --git a/application/Preorder/PreorderModel.php b/application/Preorder/PreorderModel.php index 2a9d39bbc..1308e3f95 100644 --- a/application/Preorder/PreorderModel.php +++ b/application/Preorder/PreorderModel.php @@ -6,6 +6,7 @@ class PreorderModel { public $termination_id; public $product_id; public $type; + public $order_id; public $price; public $price_setup; public $price_nne; diff --git a/application/Preordercampaign/Preordercampaign.php b/application/Preordercampaign/Preordercampaign.php index ccc84d970..61dc1fbcf 100644 --- a/application/Preordercampaign/Preordercampaign.php +++ b/application/Preordercampaign/Preordercampaign.php @@ -3,8 +3,45 @@ class Preordercampaign extends mfBaseModel { private $network; private $preorders; + private $types; + public function addTypes(Array $types) { + $allowd_types = ["interest","provision","order"]; + + $new_types = []; + + foreach($types as $type) { + if(!in_array($type, $allowd_types)) { + $this->log->debug("$type not in allowed_types"); + continue; + } + $new_types[] = $type; + } + //var_dump($new_types); + foreach($allowd_types as $atype) { + $existing = PreordercampaignTypeModel::getFirst(['preordercampaign_id' => $this->id, "type" => $atype]); + //var_dump($existing);exit; + if($existing) { + if(!in_array($atype,$new_types)) { + $existing->delete(); + } + } else { + if(in_array($atype, $new_types)) { + $data = []; + + $data['preordercampaign_id'] = $this->id; + $data['type'] = $atype; + $nt = PreordercampaignTypeModel::create($data); + $nt->save(); + } + } + } + + return true; + + } + public function getProperty($name) { if($this->$name == null) { @@ -13,6 +50,14 @@ class Preordercampaign extends mfBaseModel { return $this->preorders; } + if($name == "types") { + $types = PreordercampaignTypeModel::search(['preordercampaign_id' => $this->id]); + foreach($types as $type) { + $this->types[$type->type] = $type; + } + return $this->types; + } + if($name == "creator") { $user = mfValuecache::singleton()->get("Worker-id-".$this->create_by); if($user) { diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 7271c82d5..12c264aac 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -142,6 +142,19 @@ class PreordercampaignController extends mfBaseController { $data['to'] = self::dateToTimestamp($r->to); } + if($r->fulfillment == "thirdparty") { + $data['fulfillment'] = "thirdparty"; + } else { + $data['fulfillment'] = "thetool"; + } + + if($r->product_type == "setup_only") { + $data['product_type'] = "setup_only"; + } else { + $data['product_type'] = "all"; + } + + $data['edit_by'] = $this->me->id; if($mode == "add") { @@ -158,6 +171,11 @@ class PreordercampaignController extends mfBaseController { return $this->add(); } + if(is_array($r->types) && count($r->types)) { + $campaign->addTypes($r->types); + } + + $this->layout()->setFlash("Vorbestellkampagne erfolgreich gespeichert.", "success"); //$this->redirect("Preordercampaign", "Edit", ['id' => $new_id]); $this->redirect("Preordercampaign"); diff --git a/application/Preordercampaign/PreordercampaignModel.php b/application/Preordercampaign/PreordercampaignModel.php index 48351859a..7dfbe74b1 100644 --- a/application/Preordercampaign/PreordercampaignModel.php +++ b/application/Preordercampaign/PreordercampaignModel.php @@ -1,19 +1,20 @@ $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 getAll() { + $items = []; + + $db = FronkDB::singleton(); + + $res = $db->select("PreordercampaignType", "*", "ORDER BY preordercampaign_id, type"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new PreordercampaignType($data); + } + } + return $items; + + } + + public static function getFirst($filter) { + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $res = $db->select("PreordercampaignType", "*", "$where ORDER BY preordercampaign_id, type"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new PreordercampaignType($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("PreordercampaignType", "*", "$where ORDER BY preordercampaign_id, type"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new PreordercampaignType($data); + } + } + return $items; + } + + private function getSqlFilter($filter) { + $where = "1=1 "; + + //var_dump($filter);exit; + if(array_key_exists("preordercampaign_id", $filter)) { + $preordercampaign_id = $filter['preordercampaign_id']; + if(is_numeric($preordercampaign_id)) { + $where .= " AND preordercampaign_id=$preordercampaign_id"; + } + } + + if(array_key_exists("type", $filter)) { + $type = FronkDB::singleton()->escape($filter['type']); + if($type) { + $where .= " AND type='$type'"; + } + } + + //var_dump($filter, $where);exit; + return $where; + } + +}