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;
}