diff --git a/Layout/default/Address/Form.php b/Layout/default/Address/Form.php index c3ba0c170..9620782d1 100644 --- a/Layout/default/Address/Form.php +++ b/Layout/default/Address/Form.php @@ -111,13 +111,13 @@
- + + + + + +
diff --git a/application/Address/Address.php b/application/Address/Address.php index 00d118af5..1b91e2030 100644 --- a/application/Address/Address.php +++ b/application/Address/Address.php @@ -2,6 +2,8 @@ class Address extends mfBaseModel { protected $forcestr = ['company','zip','phone','fax','mobile','note']; + private $types; + public function getFullName() { // Assumes "Firma1 Firma2" or "firstname lastname" as readable form @@ -18,4 +20,34 @@ class Address extends mfBaseModel { return $name; } + + private function loadAddresstypes() { + if(!$this->id) { + return false; + } + + $this->types = AddresstypeModel::search(['address_id' => $this->id]); + } + + public function getProperty($name) { + if($this->$name == null) { + + if($name == "types") { + $this->loadAddresstypes(); + return $this->types; + } + + $classname = ucfirst($name); + $idfield = $name."_id"; + $this->$name = new $classname($this->$idfield); + + if($this->$name->id) { + return $this->$name; + } else { + return null; + } + } + + return $this->$name; + } } \ No newline at end of file diff --git a/application/Address/AddressController.php b/application/Address/AddressController.php index 8645854f3..72a49e1de 100644 --- a/application/Address/AddressController.php +++ b/application/Address/AddressController.php @@ -18,6 +18,7 @@ class AddressController extends mfBaseController { protected function editAction() { $address = new Address($this->request->id); + $this->layout()->set("address", $address); if(!$address->id) { @@ -46,6 +47,7 @@ class AddressController extends mfBaseController { $mode = "add"; } + //var_dump($r->addresstypes);exit; $data = []; $data['parent_id'] = $r->parent_id; @@ -80,6 +82,29 @@ class AddressController extends mfBaseController { return $this->add(); } + $new_types = $r->addresstypes; + if(is_array($new_types)) { + foreach($address->types as $existing_type) { + //var_dump($existing_type); + //var_dump($new_types); + echo $existing_type->type; + if(!in_array($existing_type->type, $new_types)) { + $existing_type->delete(); + } else { + // remove existing type from new_types array (dont need to create again) + $new_types = array_diff($new_types, [$existing_type->type]); + //unset($new_types[$existing_type]); + } + } + //exit; + foreach($new_types as $type) { + $type_object = AddresstypeModel::create(['address_id' => $address->id, 'type' => $type]); + $type_object->save(); + $address->types[$type] = $type_object; + + } + } + $this->layout()->setFlash("Adresse erfolgreich gespeichert.", "success"); $this->redirect("Address", "Edit", ['id' => $new_id]); } diff --git a/application/Addresstype/Addresstype.php b/application/Addresstype/Addresstype.php new file mode 100644 index 000000000..b20ec6b98 --- /dev/null +++ b/application/Addresstype/Addresstype.php @@ -0,0 +1,5 @@ + $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 getOne($id) { + if(!is_numeric($id) || !$id) { + throw new Exception("Invalid number", 400); + } + $item = []; + $db = FronkDB::singleton(); + + $res = $db->select($this->table, "*", "id=$id LIMIT 1"); + if($db->num_rows($res)) { + $data = $db->fetch_object($res); + $item = new Addresstype($data); + } + return $item; + } + + public static function getAll() { + $items = []; + + $db = FronkDB::singleton(); + + $res = $db->select($this->table, "*"); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[] = new Addresstype($data); + } + } + return $items; + + } + + public static function search($filter) { + $items = []; + $db = FronkDB::singleton(); + + $where = self::getSqlFilter($filter); + $sql = "SELECT Addresstype.* FROM Addresstype + WHERE $where + ORDER BY address_id ASC, `primary` DESC, type ASC"; + //var_dump($sql); + $res = $db->query($sql); + if($db->num_rows($res)) { + while($data = $db->fetch_object($res)) { + $items[$data->type] = new Addresstype($data); + } + } + return $items; + } + + private function getSqlFilter($filter) { + $where = "1=1 "; + + /* + * Address Type + */ + if(is_array($filter['addresstype']) && count($filter['addresstype'])) { + $at = $filter['addresstype']; + $in = []; + if(in_array("owner", $at)) { + $in[] = "Addresstype.type = 'owner'"; + } + if(in_array("employee", $at)) { + $in[] = "Addresstype.type = 'employee'"; + } + if(in_array("customer", $at)) { + $in[] = "Addresstype.type = 'customer'"; + } + if(in_array("supplier", $at)) { + $in[] = "Addresstype.type = 'supplier'"; + } + if(in_array("contact", $at)) { + $in[] = "Addresstype.type = 'contact'"; + } + if(in_array("billing", $at)) { + $in[] = "Addresstype.type = 'billing'"; + } + + $or = ""; + if(count($in)) { + $or = implode(" OR ", $in); + $where .= " AND ( $or )"; + } + } + + if(array_key_exists("address_id", $filter)) { + $address_id = $filter['address_id']; + if(!is_numeric($address_id) || !$address_id) { + return false; + } + + $where .= " AND address_id=$address_id"; + } + + return $where; + } +} \ No newline at end of file diff --git a/lib/mvcfronk/mfBase/mfBaseModel.php b/lib/mvcfronk/mfBase/mfBaseModel.php index a4c3ddbcf..015d53909 100644 --- a/lib/mvcfronk/mfBase/mfBaseModel.php +++ b/lib/mvcfronk/mfBase/mfBaseModel.php @@ -214,10 +214,27 @@ class mfBaseModel { } public function __get($name) { + if($name == "create" || $name == "edit") { + if(isset($this->data->$name)) { + return $this->data->$name; + } else { + return $this->$name; + } + } + + if(isset($this->data->$name)) { return $this->data->$name; - } elseif(property_exists(__CLASS__, $name)) { - return $this->$name; + } elseif(property_exists($this, $name)) { + if(method_exists($this, "getProperty")) { + $prop = $this->getProperty($name); + if($prop === null){ + return null; + } + return $prop; + } else { + return $this->$name; + } } return null; }