diff --git a/Layout/default/Contract/Index.php b/Layout/default/Contract/Index.php index bbb32807b..eff3e0e99 100644 --- a/Layout/default/Contract/Index.php +++ b/Layout/default/Contract/Index.php @@ -1,3 +1,8 @@ +getUrl($Mod,"Index"); + $pagination_baseurl_params = ["filter" => $filter]; + $pagination_entity_name = "Verträge"; +?> @@ -28,6 +33,9 @@ "> Neuen Vertrag anlegen + + + @@ -42,26 +50,44 @@ - + - +
Inhaber
owner->getCompanyOrName()?> $contract->owner_id])?>" target="_blank">owner->getCompanyOrName()?> product->name?> termination_id): ?> termination->building->street?>
- termination->building->zip?> termination->building->city?> + termination->building->zip?> termination->building->city?>
+ ['code' => $contract->termination->building->code]])?>#building=termination->building_id?>" target="_blank"> + termination->code?> +
price?> price_setup?>billing_period)?>x Jährlich + billing_period == 1): ?> + monatlich + billing_period == 24): ?> + biennal + billing_period == 36): ?> + triennal + + billing_period)?>x Jährlich + + create)?> (creator->name?>) edit)?> (editor->name?>) $contract->id])?>"> + $contract->product->order_id])?>"> $contract->id])?>" class="text-danger" title="Vertrag kündigen">
+ + + + diff --git a/Layout/default/Order/Form.php b/Layout/default/Order/Form.php index 2b2c85db6..e955574bf 100644 --- a/Layout/default/Order/Form.php +++ b/Layout/default/Order/Form.php @@ -23,6 +23,12 @@
+ +
+ +
@@ -34,8 +40,6 @@ - -
@@ -624,27 +628,22 @@ files) && count($order->files)): ?> - +
- - files as $file): ?> - + - - @@ -660,13 +659,6 @@ -
- -
- -
-
-
@@ -1183,6 +1175,17 @@ finish_date): ?> $('#finish_date_field').hide(); + + finish_date && is_array($order->contracts) && count($order->contracts)): ?> + $("input").prop("disabled", true); + $("input[type=text]").prop("readonly", true); + $("select").prop("disabled", true); + $("textarea").prop("disabled", true); + $("button").prop("disabled", true); + //$("#files-table a.edit-button").removeAttr("href"); + $("#files-table a.delete-button").removeAttr("href").removeAttr("onclick"); + $("#contract-readonly-notice").show(); + }); diff --git a/application/Contract/Contract.php b/application/Contract/Contract.php index fed343d33..155ea8889 100644 --- a/application/Contract/Contract.php +++ b/application/Contract/Contract.php @@ -1,5 +1,94 @@ $name == null) { + + if(!$this->id) { + return null; + } + + if($name == "owner") { + $this->owner = mfValuecache::singleton()->get("mfObjectmodel-Address-".$this->owner_id); + if($this->owner === null) { + $this->owner = new Address($this->owner_id); + if($this->owner->id) { + mfValuecache::singleton()->set("mfObjectmodel-Address-".$this->owner_id, $this->owner); + } + } + return $this->owner; + } + + if($name == "billingaddress") { + $this->billingaddress = mfValuecache::singleton()->get("mfObjectmodel-Address-".$this->billingaddress_id); + if($this->billingaddress === null) { + $this->billingaddress = new Address($this->billingaddress_id); + if($this->billingaddress->id) { + mfValuecache::singleton()->set("mfObjectmodel-Address-".$this->billingaddress_id, $this->billingaddress); + } + } + return $this->billingaddress; + } + + if($name == "product") { + $this->product = mfValuecache::singleton()->get("mfObjectmodel-OrderProduct-".$this->orderproduct_id); + if($this->product === null) { + $this->product = new OrderProduct($this->orderproduct_id); + if($this->product->id) { + mfValuecache::singleton()->set("mfObjectmodel-OrderProduct-".$this->orderproduct_id, $this->product); + } + } + return $this->product; + } + + if($name == "creator") { + $this->creator = mfValuecache::singleton()->get("Worker-id-".$this->create_by); + if($this->creator === null) { + $this->creator = new User($this->create_by); + if($this->creator->id) { + mfValuecache::singleton()->set("Worker-id-".$this->create_by, $this->creator); + } + } + return $this->creator; + } + + if($name == "editor") { + $this->editor = mfValuecache::singleton()->get("Worker-id-".$this->edit_by); + if($this->editor === null) { + $this->editor = new User($this->edit_by); + if($this->editor->id) { + mfValuecache::singleton()->set("Worker-id-".$this->edit_by, $this->editor); + } + } + return $this->editor; + } + + + $classname = ucfirst($name); + $idfield = $name."_id"; + $this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-".$this->$idfield); + if(!$this->$name) { + $this->$name = new $classname($this->$idfield); + } + + if($this->$name->id) { + mfValuecache::singleton()->set("mfObjectmodel-$name-".$this->$name->id, $this->$name); + return $this->$name; + } else { + return null; + } + + } + + return $this->$name; + } } \ No newline at end of file diff --git a/application/Contract/ContractController.php b/application/Contract/ContractController.php index 37dd7483a..5f243a4b1 100644 --- a/application/Contract/ContractController.php +++ b/application/Contract/ContractController.php @@ -41,6 +41,7 @@ class ContractController extends mfBaseController { $contracts = ContractModel::search($filter, $pagination); $this->layout()->set("contracts", $contracts); + $this->layout()->set("pagination", $pagination); } private function getPreparedFilter($filter) { diff --git a/application/Contract/ContractModel.php b/application/Contract/ContractModel.php index 8f3909e4b..f10115f1c 100644 --- a/application/Contract/ContractModel.php +++ b/application/Contract/ContractModel.php @@ -60,11 +60,21 @@ class ContractModel { } - public static function getFirst() { + public static function getFirst($filter) { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $res = $db->select("Contract", "*", "$where ORDER BY owner_id,product_id,`create` LIMIT 1"); + $sql = "SELECT Contract.* FROM Contract + LEFT JOIN Address ON (Contract.owner_id = Address.id) + LEFT JOIN OrderProduct ON (Contract.orderproduct_id = OrderProduct.id) + LEFT JOIN `Order` ON (OrderProduct.order_id = `Order`.id) + LEFT JOIN Product ON (Contract.product_id = Product.id) + WHERE $where + GROUP BY Contract.id + ORDER BY Contract.owner_id,Contract.product_id,Contract.`create` + LIMIT 1"; + //var_dump($sql);exit; + $res = $db->query($sql); if($db->num_rows($res)) { $data = $db->fetch_object($res); $item = new Contract($data); @@ -81,11 +91,13 @@ class ContractModel { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $sql = "SELECT COUNT(*) FROM Contract - LEFT JOIN Address ON (Contract.address_id = Address.id) + $sql = "SELECT COUNT(*) as cnt FROM Contract + LEFT JOIN Address ON (Contract.owner_id = Address.id) + LEFT JOIN OrderProduct ON (Contract.orderproduct_id = OrderProduct.id) + LEFT JOIN `Order` ON (OrderProduct.order_id = `Order`.id) + LEFT JOIN Product ON (Contract.product_id = Product.id) WHERE $where - GROUP BY Contract.id - ORDER BY owner_id,product_id,`create`"; + GROUP BY Contract.id"; $res = $db->query($sql); if($db->num_rows($res)) { @@ -102,10 +114,13 @@ class ContractModel { $where = self::getSqlFilter($filter); $sql = "SELECT Contract.* FROM Contract - LEFT JOIN Address ON (Contract.address_id = Address.id) + LEFT JOIN Address ON (Contract.owner_id = Address.id) + LEFT JOIN OrderProduct ON (Contract.orderproduct_id = OrderProduct.id) + LEFT JOIN `Order` ON (OrderProduct.order_id = `Order`.id) + LEFT JOIN Product ON (Contract.product_id = Product.id) WHERE $where GROUP BY Contract.id - ORDER BY owner_id,product_id,`create`"; + ORDER BY Contract.owner_id,Contract.product_id,Contract.`create`"; if(is_array($limit) && count($limit)) { if(is_numeric($limit['start']) && is_numeric($limit['count'])) { @@ -147,6 +162,13 @@ class ContractModel { } } + if(array_key_exists("orderproduct_id", $filter)) { + $orderproduct_id = $filter['orderproduct_id']; + if(is_numeric($orderproduct_id)) { + $where .= " AND Contract.orderproduct_id=$orderproduct_id"; + } + } + if(array_key_exists("product_name", $filter)) { $product_name = $db->escape($filter['product_name']); if($product_name) { diff --git a/application/Order/Order.php b/application/Order/Order.php index aec88fabf..d125e2b51 100644 --- a/application/Order/Order.php +++ b/application/Order/Order.php @@ -4,6 +4,7 @@ class Order extends mfBaseModel { private $owner; private $billingaddress; private $products; + private $contracts; private $terminations; private $journals; private $files; @@ -195,6 +196,16 @@ class Order extends mfBaseModel { return $this->products; } + if($name == "contracts") { + foreach($this->getProperty("products") as $product) { + //var_dump($product); + if($product->contract && $product->contract->id) { + $this->contracts[] = $product->contract; + } + } + return $this->contracts; + } + if($name == "terminations") { $this->terminations = $this->getTerminations(); return $this->terminations; diff --git a/application/Order/OrderController.php b/application/Order/OrderController.php index 2c0210d40..f93c0fd2c 100644 --- a/application/Order/OrderController.php +++ b/application/Order/OrderController.php @@ -366,6 +366,18 @@ class OrderController extends mfBaseController { $this->layout()->setFlash("Bestellung nicht gefunden", "error"); $this->redirect("Order"); } + // refuse to save if there is a contract already + + if($order->finish_date && is_array($order->contracts) && count($order->contracts)) { + $this->layout()->setFlash("Bestellung kann nicht mehr bearbeitet werden, da sie bereits abgeschlossen und in Verrechnung ist.", "error"); + $this->redirect("Order", "edit", ['id' => $order->id]); + } + /*foreach($order->products as $p) { + if($p->contract && $p->contract->id) { + $this->layout()->setFlash("Bestellung kann nicht mehr bearbeitet werden, da sie bereits abgeschlossen und in Verrechnung ist.", "error"); + $this->redirect("Order", "edit", ['id' => $order->id]); + } + }*/ } else { $id = false; $mode = "add"; @@ -827,7 +839,7 @@ class OrderController extends mfBaseController { $of['order_id'] = $new_id; $of['file_id'] = $file_id; $of['name'] = $file->name; - $of['description'] = $file->description; + $of['description'] = $r->file_description; $orderfile = OrderFileModel::create($of); if(!$orderfile->save()) { diff --git a/application/OrderProduct/OrderProduct.php b/application/OrderProduct/OrderProduct.php index b959b3abc..d0aaaaae2 100644 --- a/application/OrderProduct/OrderProduct.php +++ b/application/OrderProduct/OrderProduct.php @@ -5,6 +5,7 @@ class OrderProduct extends mfBaseModel { private $product; private $termination; private $cpeprovisioning; + private $contract; private $editor; private $creator; @@ -35,11 +36,19 @@ class OrderProduct extends mfBaseModel { public function getProperty($name) { if($this->$name == null) { + if(!$this->id) { + return null; + } + if($name == "cpeprovisioning") { $this->cpeprovisioning = CpeprovisioningModel::getFirst(["orderproduct_id" => $this->id]); return $this->cpeprovisioning; } + if($name == "contract") { + $this->contract = ContractModel::getFirst(['orderproduct_id' => $this->id]); + return $this->contract; + } if($name == "creator") { $this->creator = mfValuecache::singleton()->get("Worker-id-".$this->create_by);
Name Beschreibung DateinameOriginal Dateiname HochgeladenZuletzt bearbeitet
$file->file->id])?>">name?>description)?>description))?> file->filename?>file->orig_filename?> create)?> (creator->name?>)edit)?> (editor->name?>) - $file->id])?>"> - $file->id])?>" onclick="if(!confirm('Dokument wirklich löschen?')) return false;" class="text-danger" title="Löschen"> + $file->id])?>" onclick="if(!confirm('Dokument wirklich löschen?')) return false;" title="Löschen">