| $file->file->id])?>">=$file->name?> |
- =nl2br($file->description)?> |
+ =nl2br(htmlentities($file->description))?> |
=$file->file->filename?> |
- =$file->file->orig_filename?> |
=date("d.m.Y", $file->create)?> (=$file->creator->name?>) |
- =date("d.m.Y", $file->edit)?> (=$file->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">
|
@@ -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);