diff --git a/Layout/default/Contractconfig/Index.php b/Layout/default/Contractconfig/Index.php index 7847ae08e..eee3da959 100644 --- a/Layout/default/Contractconfig/Index.php +++ b/Layout/default/Contractconfig/Index.php @@ -10,11 +10,11 @@
-

Vertragsconfig

+

Contractconfig

@@ -26,87 +26,187 @@
- - -

Gruppe name?>

-
"> - - items) && count($group->items)): ?> - items as $item): ?> - -
-
+
+
+
+ "> + +
+ +
+ +
+
+ +
+ + +
+
+ + + +

Gruppe name?> Neues Element erstellen

- -
"> - -
-
-
- - +
@@ -118,7 +218,30 @@ allowClear: true, placeholder: "" }); - + + var item; + var hash = window.location.hash.substr(1); + var match = hash.match(/item=(\d+)/); + if(match && match[1]) { + item = match[1] + $('#item-edit-' + item).show() + var pos = $('#item-edit-' + item).offset().top; + $(window).scrollTop(pos); + } + + function toggleTypedata(id) { + var type = $('#item_' + id + '_type').val(); + if(type == "enum") { + $('#typedata_' + id + " .enum").show(); + $('#typedata_' + id + " .pattern").hide(); + } else if(type == "string") { + $('#typedata_' + id + " .pattern").show(); + $('#typedata_' + id + " .enum").hide(); + } else { + $('#typedata_' + id + " .pattern").hide(); + $('#typedata_' + id + " .enum").hide(); + } + } + + +
+
+
+
+ +
+

Productgruppen

+
+
+
+ + +
+
+ +
+
+

id) ? "Produktgruppe bearbeiten" : "Neue Produktgruppe"?>

+ +
"> +
+
+ + + +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+ +
+ +
+
+ + + +
+
+
+ +
+
+ + + \ No newline at end of file diff --git a/Layout/default/menu.php b/Layout/default/menu.php index 41a329735..293f7a7ba 100644 --- a/Layout/default/menu.php +++ b/Layout/default/menu.php @@ -24,18 +24,18 @@ Stammdaten
diff --git a/application/Contractconfig/ContractconfigController.php b/application/Contractconfig/ContractconfigController.php index 2a2178342..ccfb7f5d2 100644 --- a/application/Contractconfig/ContractconfigController.php +++ b/application/Contractconfig/ContractconfigController.php @@ -15,9 +15,100 @@ class ContractconfigController extends mfBaseController { } protected function indexAction() { - $groups = ContractconfigGroupModel::getAll(); + $groups = ContractconfigGroupModel::search([]); - $this->layout()->set("groups", $groups); + $this->layout()->set("configgroups", $groups); } + + protected function addGroupAction() { + $groupname = ucfirst(trim($this->request->name)); + + if(!$groupname) { + $this->layout()->setFlash("Gruppenname darf nicht leer sein!", "error"); + $this->redirect("Contractconfig"); + } + + $group = ContractconfigGroupModel::getFirst(["name" => $groupname]); + if($group) { + $this->layout()->setFlash("Gruppe gibs scho", "warn"); + $this->redirect("Contractconfig"); + } + + $group = ContractconfigGroupModel::create(["name" => $groupname]); + $group_id = $group->save(); + if(!$group_id) { + $this->layout()->setFlash("Fehler beim Speichern", "error"); + $this->redirect("Contractconfig"); + } + + $this->layout()->setFlash("Gruppe $groupname erfolgreich angelegt", "success"); + $this->redirect("Contractconfig"); + } + + protected function saveAction() { + $r = $this->request; + + $item_id = $r->item_id; + if(is_numeric($item_id) && $item_id > 0) { + $mode = "edit"; + $item = new ContractconfigItem($item_id); + if(!$item->id) { + $this->layout()->setFlash("Element nicht gefunden", "error"); + $this->redirect("Contractconfig"); + } + } else { + $mode = "add"; + } + + $item_data['contractconfiggroup_id'] = $r->group_id; + $item_data['name'] = $r->name; + $item_data['displayname'] = $r->displayname; + $item_data['description'] = $r->description; + + $item_data['typedata'] = ""; + $item_data['pattern'] = ""; + + switch($r->type) { + case "string": + $item_data['type'] = "string"; + $item_data['pattern'] = $r->pattern; + break; + case "enum": + $item_data['type'] = "enum"; + $item_data['typedata'] = $r->data; + break; + case "int": + $item_data['type'] = "int"; + break; + case "decimal": + $item_data['type'] = "decimal"; + break; + default: + $this->layout()->setFlash("Ungültiger Datentyp!"); + $this->redirect("Contractconfig"); + } + + if($mode == "edit") { + $item->update($item_data); + } else { + $item = ContractconfigItemModel::create($item_data); + } + + //var_dump($item);exit; + + $item_id = $item->save(); + + if(!$item_id) { + $this->layout()->setFlash("Fehler beim Speichern!"); + $this->redirect("Contractconfig"); + } + + $this->layout()->setFlash("Element erfolgreich gespeichert", "success"); + $this->redirect("Contractconfig"); + //$this->redirect("Contractconfig","Index","","item=$item_id"); + + + + } } \ No newline at end of file diff --git a/application/ContractconfigGroup/ContractconfigGroupModel.php b/application/ContractconfigGroup/ContractconfigGroupModel.php index 9579433ac..7203f1170 100644 --- a/application/ContractconfigGroup/ContractconfigGroupModel.php +++ b/application/ContractconfigGroup/ContractconfigGroupModel.php @@ -2,11 +2,6 @@ class ContractconfigGroupModel { public $name; - public $description; - public $filename; - public $store_filename; - public $orig_filename; - public $subfolder; public $create_by = null; public $edit_by = null; @@ -51,11 +46,11 @@ class ContractconfigGroupModel { } - public static function getFirst() { + public static function getFirst($filter = []) { $db = FronkDB::singleton(); $where = self::getSqlFilter($filter); - $res = $db->select("ContractconfigGroup", "*", "$where LIMIT 1"); + $res = $db->select("ContractconfigGroup", "*", "$where ORDER BY name, `create` LIMIT 1"); if($db->num_rows($res)) { $data = $db->fetch_object($res); $item = new ContractconfigGroup($data); @@ -74,9 +69,11 @@ class ContractconfigGroupModel { $where = self::getSqlFilter($filter); $sql = "SELECT ContractconfigGroup.* FROM ContractconfigGroup - LEFT JOIN ContractconfiggroupProducttech ON (ContractconfigGroup.id = ContractconfiggroupProducttech.contractconfiggroup_id) + LEFT JOIN ContractconfiggroupProductgroup ON (ContractconfigGroup.id = ContractconfiggroupProductgroup.contractconfiggroup_id) + LEFT JOIN Productgroup ON (ContractconfiggroupProductgroup.productgroup_id = Productgroup.id) WHERE $where - ORDER BY ContractconfigGroup.id, producttech_id, `create` + GROUP BY ContractconfigGroup.id + ORDER BY ContractconfigGroup.name, ContractconfigGroup.`create` "; mfLoghandler::singleton()->debug($sql); $res = $db->query($sql); @@ -109,6 +106,14 @@ class ContractconfigGroupModel { } } + 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("subfolder", $filter)) { $subfolder = FronkDB::singleton()->escape($filter['subfolder']); diff --git a/application/ContractconfigItem/ContractconfigItemModel.php b/application/ContractconfigItem/ContractconfigItemModel.php index 3869f21e2..3a0ce4e85 100644 --- a/application/ContractconfigItem/ContractconfigItemModel.php +++ b/application/ContractconfigItem/ContractconfigItemModel.php @@ -1,12 +1,14 @@ $name == null) { @@ -21,6 +22,20 @@ class Productgroup extends mfBaseModel { return $this->products; } + if($name == "contractconfiggroups") { + $this->contractconfiggroups = mfValuecache::singleton()->get("Contractconfiggroups-byProductgroupid-".$this->id); + if($this->contractconfiggroups === null) { + $this->contractconfiggroups = []; + foreach(ContractconfiggroupProductgroupModel::search(['productgroup_id' => $this->id]) as $ccpg) { + $this->contractconfiggroups[$ccpg->contractconfiggroup_id] = $ccpg->contractconfiggroup; + } + if(count($this->contractconfiggroups)) { + mfValuecache::singleton()->set("Contractconfiggroups-byProductgroupid-".$this->id, $this->contractconfiggroups); + } + } + return $this->contractconfiggroups; + } + if($name == "creator") { $this->creator = mfValuecache::singleton()->get("Worker-id-".$this->create_by); if($this->creator === null) { diff --git a/application/Productgroup/ProductgroupController.php b/application/Productgroup/ProductgroupController.php index 0fed5a2bd..d8b1cd5da 100644 --- a/application/Productgroup/ProductgroupController.php +++ b/application/Productgroup/ProductgroupController.php @@ -45,11 +45,73 @@ class ProductgroupController extends mfBaseController { } protected function addAction() { - + $this->layout()->setTemplate("Productgroup/Form"); } protected function editAction() { + $id = $this->request->id; + if(!is_numeric($id) || !$id) { + $this->layout()->setFlash("Produktgruppe nicht gefunden", "error"); + $this->redirect("Productgroup"); + } + $group = new Productgroup($id); + if(!$group->id) { + $this->layout()->setFlash("Produktgruppe nicht gefunden", "error"); + $this->redirect("Productgroup"); + } + + $this->layout()->set("group", $group); + + return $this->addAction(); + } + + protected function saveAction() { + $r = $this->request; + + $id = $r->id; + if(is_numeric($id) && $id > 0) { + $mode = "edit"; + $group = new Productgroup($id); + if(!$group->id) { + $this->layout()->setFlash("Produktgruppe nicht gefunden", "error"); + $this->redirect("Productgroup"); + } + } else { + $mode = "add"; + $group = new Productgroup(); + } + + $name = trim($r->name); + if(!$name) { + $this->layout()->setFlash("Name darf nicht leer sein", "error"); + $this->redirect("Productgroup"); + } + + $group->name = $r->name; + $id = $group->save(); + + if(!$id) { + $this->layout()->setFlash("Fehler beim Speichern", "error"); + $this->layout()->set("group", $group); + return $this->addAction(); + } + + // contractconfig groups + foreach(ContractconfiggroupProductgroupModel::search(['productgroup_id' => $id]) as $ccpg) { + $ccpg->delete(); + } + + foreach($r->contractconfiggroups as $cg_id) { + $ccgroup = ContractconfiggroupProductgroupModel::create([ + "productgroup_id" => $id, + "contractconfiggroup_id" => $cg_id + ]); + $ccgroup->save(); + } + + $this->layout()->setFlash("Produktgruppe erfolgreich gespeichert", "success"); + $this->redirect("Productgroup","edit", ['id' => $id]); }