contracts can be added and saved

This commit is contained in:
Frank Schubert
2022-11-10 21:30:58 +01:00
parent e71126c8bf
commit e70adc0fa9
7 changed files with 391 additions and 25 deletions
+27 -1
View File
@@ -2,11 +2,14 @@
class Contract extends mfBaseModel {
private $owner;
private $creator;
private $billingaddress;
private $product;
private $orderproduct;
private $termination;
private $sla;
private $finisher;
private $canceler;
private $creator;
private $editor;
@@ -29,6 +32,7 @@ class Contract extends mfBaseModel {
}
if($name == "billingaddress") {
$this->billingaddress = mfValuecache::singleton()->get("mfObjectmodel-Address-".$this->billingaddress_id);
if($this->billingaddress === null) {
$this->billingaddress = new Address($this->billingaddress_id);
@@ -61,6 +65,28 @@ class Contract extends mfBaseModel {
return $this->orderproduct;
}
if($name == "finisher") {
$this->finisher = mfValuecache::singleton()->get("Worker-id-".$this->finish_date_by);
if($this->finisher === null) {
$this->finisher = new User($this->finish_date_by);
if($this->finisher->id) {
mfValuecache::singleton()->set("Worker-id-".$this->finish_date_by, $this->finisher);
}
}
return $this->finisher;
}
if($name == "canceler") {
$this->canceler = mfValuecache::singleton()->get("Worker-id-".$this->cancel_date_by);
if($this->canceler === null) {
$this->canceler = new User($this->cancel_date_by);
if($this->canceler->id) {
mfValuecache::singleton()->set("Worker-id-".$this->cancel_date_by, $this->canceler);
}
}
return $this->canceler;
}
if($name == "creator") {
$this->creator = mfValuecache::singleton()->get("Worker-id-".$this->create_by);
if($this->creator === null) {
+142 -2
View File
@@ -56,6 +56,32 @@ class ContractController extends mfBaseController {
return $new_filter;
}
protected function viewAction() {
$this->layout()->setTemplate("Contract/View");
$id = $this->request->id;
if(!is_numeric($id) || !$id) {
$this->layout()->setFlash("Vertrag nicht gefunden", "error");
$this->redirect("Contract");
}
$contract = new Contract($id);
if(!$contract->id) {
$this->layout()->setFlash("Vertrag nicht gefunden", "error");
$this->redirect("Contract");
}
$this->layout()->set("contract", $contract);
if($this->request->filter) {
$this->layout()->set("filter", $this->request->filter);
}
if($this->request->s) {
$this->layout()->set("filter", $this->request->s);
}
}
protected function addAction() {
$this->layout()->setTemplate("Contract/Form");
}
@@ -75,11 +101,125 @@ class ContractController extends mfBaseController {
$this->layout()->set("contract", $contract);
if($this->request->f == "view") $this->layout()->set("f", "view");
if($this->request->f != "view") $this->layout()->set("f", "index");
if($this->request->filter) {
$this->layout()->set("filter", $this->request->filter);
}
if($this->request->s) {
$this->layout()->set("filter", $this->request->s);
}
return $this->addAction();
}
protected function saveAction() {
$r = $this->request;
//var_dump($r);
/*
* add or edit
*/
$id = $r->id;
if(is_numeric($id) && $id > 0) {
$mode = "edit";
$contract = new Contract($id);
if(!$contract->id) {
$this->layout()->setFlash("Vertrag nicht gefunden", "error");
$this->redirect("Contract");
}
} else {
$id = false;
$mode = "add";
}
//var_dump($r->get());exit;
$contract_data = [];
$contract_data["owner_id"] = (int)$r->owner_id;
$contract_data["billingaddress_id"] = ($r->billingaddress_id) ? (int)$r->billingaddress_id : null;
$contract_data["product_id"] = (int)$r->product_id;
$contract_data["matchcode"] = $r->matchcode;
$contract_data["product_name"] = $r->product_name;
$contract_data["product_info"] = $r->product_info;
$contract_data['amount'] = ($r->amount) ? (float)$r->amount : 1;
$contract_data['price'] = (float)$r->price;
$contract_data['price_setup'] = (float)$r->price_setup;
$contract_data['price_nne'] = (float)$r->price_nne;
$contract_data['price_nbe'] = (float)$r->price_nbe;
$contract_data['billing_period'] = (int)$r->billing_period;
$contract_data['billing_delay'] = (int)$r->billing_delay;
$contract_data['finish_date'] = ($r->finish_date) ? $this->dateToTimestamp($r->finish_date) : null;
$contract_data['cancel_date'] = ($r->cancel_date) ? $this->dateToTimestamp($r->cancel_date) : null;
$contract_data['note'] = $r->note;
//var_dump($contract_data);exit;
if($mode == "add") {
$contract = ContractModel::create($contract_data);
} else {
$contract->update($contract_data);
}
$this->layout()->set("contract", $contract);
if(!$contract_data["owner_id"]) {
$this->layout()->setFlash("Bitte Vertragsinhaber auswählen.", "error");
return $this->addAction();
}
if(!$contract_data["product_id"]) {
$this->layout()->setFlash("Bitte Produkt auswählen.", "error");
return $this->addAction();
}
if(!$contract_data['billing_period']) {
$this->layout()->setFlash("Bitte Rechnungsperiode auswählen.", "error");
return $this->addAction();
}
if(!$contract->product_name) {
$product = new Product($contract_data["product_id"]);
if(!$product->id) {
$this->layout()->setFlash("Ungültiges Produkt.", "error");
return $this->addAction();
}
$contract->product_name = $product->name;
}
//var_dump($contract);exit;
$contract_id = $contract->save();
if(!$contract_id) {
$this->layout()->setFlash("Fehler beim Speichern.", "error");
$this->layout()->set("contract", $contract);
return $this->addAction();
}
$this->layout()->setFlash("Vertrag erfolgreich gespeichert.", "success");
$query = [];
if($r->s) {
$query['s'] = $r->s;
}
if($r->filter) {
$query["filter"] = $r->filter;
}
if($r->return != "index") {
$query['id'] = $contract_id;
}
$qs = http_build_query($query);
if($mode == "add" || $r->f == "view") {
$this->redirect("Contract", "view", $qs, "contract=$contract_id");
} else {
$this->redirect("Contract", "Index", $qs);
}
}
protected function apiAction() {
if(!$this->me->is(["Admin"])) {
+16 -7
View File
@@ -1,20 +1,29 @@
<?php
class ContractModel {
public $name = null;
public $description = null;
public $orderproduct_id;
public $owner_id;
public $billingaddress_id;
public $termination_id;
public $product_id;
public $product_name;
public $product_info;
public $matchcode;
public $amount;
public $sla_id = null;
public $external = null;
public $external_id;
public $productgroup_id = null;
public $producttech_id = null;
public $product_external;
public $product_external_id;
public $price = null;
public $price_setup = null;
public $price_nne = null;
public $price_nbe = null;
public $billing_delay = null;
public $billing_period = null;
public $ivt_id = null;
public $order_date;
public $finish_date;
public $finish_date_by;
public $cancel_date;
public $cancel_date_by;
public $note = null;
public $create_by = null;