added filter to Address

This commit is contained in:
Frank Schubert
2021-11-30 22:05:03 +01:00
parent 29f63d41a7
commit 6fa6dbbd87
4 changed files with 332 additions and 12 deletions
+50
View File
@@ -16,6 +16,39 @@ class AddressController extends mfBaseController {
}
protected function indexAction() {
$rfilter = $this->request->filter;
iF(!is_array($rfilter)) {
$rfilter = [];
}
if(!array_key_exists("addresstype", $rfilter)) {
$rfilter["addresstype"] = [];
}
$this->layout->set("filter", $rfilter);
$filter = $this->getPreparedFilter($rfilter);
// pagination defaults
$pagination = [];
$pagination['start'] = 0;
$pagination['count'] = 25;
$pagination['maxItems'] = 0;
if(is_numeric($this->request->s)) {
$pagination['start'] = intval($this->request->s);
}
//var_dump($filter);exit;
$pagination['maxItems'] = AddressModel::count($filter);
$addresses = AddressModel::search($filter, $pagination);
$this->layout()->set("addresses", $addresses);
$this->layout()->set("request", $this->request);
$this->layout()->set("pagination", $pagination);
return true;
//var_dump($this->request->filter);
$default_filter = ['parents_only' => 1];
if(is_array($this->request->filter) && count($this->request->filter)) {
@@ -31,6 +64,23 @@ class AddressController extends mfBaseController {
$this->layout()->set("request", $this->request);
}
private function getPreparedFilter($filter) {
$new_filter = [];
if(is_array($filter) && count($filter)) {
if(!array_key_exists("parents_only", $filter)) {
$new_filter["parents_only"] = 1;
}
foreach($filter as $name => $value) {
$new_filter[$name] = $value;
}
}
return $new_filter;
}
protected function addAction() {
$this->layout()->setTemplate("Address/Form");
+110 -8
View File
@@ -119,25 +119,63 @@ class AddressModel {
return $addresses;
}
public static function search($filter) {
public static function count($filter) {
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$sql = "SELECT COUNT(*) as cnt FROM (
SELECT Address.id as address_id
FROM Address
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id)
WHERE $where
GROUP BY Address.id
) as tbl";
mfLoghandler::singleton()->debug($sql);
$res = $db->query($sql);
if($db->num_rows($res)) {
$data = $db->fetch_object($res);
return $data->cnt;
}
return 0;
}
public static function search($filter, $limit = false) {
//var_dump($filter);exit;
$items = [];
$db = FronkDB::singleton();
$where = self::getSqlFilter($filter);
$have = [];
$sql = "SELECT Address.* FROM Address, Addresstype
/*$sql = "SELECT Address.* FROM Address, Addresstype
WHERE Addresstype.address_id = Address.id
AND $where
GROUP BY Addresstype.address_id
ORDER BY Address.id";
ORDER BY Address.id";*/
$sql = "SELECT Address.* FROM Address
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id)
WHERE $where
GROUP BY Address.id
ORDER BY company, lastname, firstname, zip, city, Address.id";
if(is_array($limit) && count($limit)) {
if(is_numeric($limit['start']) && is_numeric($limit['count'])) {
$sql .= " LIMIT ".$limit['start'].", ".$limit['count'];
} elseif(is_numeric($count)) {
$sql .= " LIMIT ".$limit['count'];
}
}
mfLoghandler::singleton()->debug($sql);
$res = $db->query($sql);
if($db->num_rows($res)) {
while($data = $db->fetch_object($res)) {
$items[] = new Address($data);
$have[] = $data->id;
//$have[] = $data->id;
}
}
/*
if(!array_key_exists("addresstype", $filter)) {
if($have) {
$res = $db->select("Address", "*", "$where AND id NOT IN (".implode(",", $have).")");
@@ -149,7 +187,7 @@ class AddressModel {
$items[] = new Address($data);
}
}
}
}*/
return $items;
}
@@ -157,7 +195,7 @@ class AddressModel {
private function getSqlFilter($filter) {
$where = "1=1 ";
//var_dump($filter);exit;
if(array_key_exists("customer_number", $filter)) {
$cn = $filter["customer_number"];
if(is_numeric($cn)) {
@@ -171,6 +209,70 @@ class AddressModel {
$where .= " AND spin='$spin'";
}
}
if(array_key_exists("company", $filter)) {
$company = FronkDB::singleton()->escape($filter["company"]);
if($company) {
$where .= " AND company like '%$company%'";
}
}
if(array_key_exists("firstname", $filter)) {
$firstname = FronkDB::singleton()->escape($filter["firstname"]);
if($firstname) {
$where .= " AND firstname like '%$firstname%'";
}
}
if(array_key_exists("lastname", $filter)) {
$lastname = FronkDB::singleton()->escape($filter["lastname"]);
if($lastname) {
$where .= " AND lastname like '%$lastname%'";
}
}
if(array_key_exists("street", $filter)) {
$street = FronkDB::singleton()->escape($filter["street"]);
if($street) {
$where .= " AND street like '%$street%'";
}
}
if(array_key_exists("zip", $filter)) {
$zip = FronkDB::singleton()->escape($filter["zip"]);
if($zip) {
$where .= " AND zip like '%$zip%'";
}
}
if(array_key_exists("city", $filter)) {
$city = FronkDB::singleton()->escape($filter["city"]);
if($city) {
$where .= " AND city like '%$city%'";
}
}
if(array_key_exists("country", $filter)) {
$country = FronkDB::singleton()->escape($filter["country"]);
if($country) {
$where .= " AND country like '%$country%'";
}
}
if(array_key_exists("email", $filter)) {
$email = FronkDB::singleton()->escape($filter["email"]);
if($email) {
$where .= " AND email like '%$email%'";
}
}
if(array_key_exists("pfm", $filter)) {
$pfm = FronkDB::singleton()->escape($filter["pfm"]);
if($pfm) {
$where .= " AND (phone like '%$pfm%' OR fax like '%$pfm%' OR mobile like '%$pfm%' )";
}
}
/*
* Address Type
*/
@@ -211,7 +313,7 @@ class AddressModel {
if(array_key_exists("parents_only", $filter)) {
$po = $filter['parents_only'];
if($po == 1) {
if($po) {
$where .= " AND parent_id IS NULL";
}
}