Features: • Termin Typen wurden erweitert o IBN ESTMK (Kundensuche alles außer Xinon) o IBN Snopp (Kundensuche alles außer Xinon) o Störungen (Ticketsuche) Derzeit werden Ticket Informationen wie bei IBN (Betreff und Ort eingesetzt, wenn leer) bzw. die Beschreibung erhält den Ticket Link und das Subjekt des Tickets (Ticket Link derzeit nur im Outlook Anklickbar (offene Punkte Hyperlinks)) • Symbole der Termin Typen angepasst • Für Outlook werden für die verschiedenen Termintypen derzeit die Standard Kategorien in Deutsch hergenommen (Anfrage zwecks zentraler Kategorien läuft) o Gelbe Kategorie … IBN Xinon o Grüne Kategorie … IBN ESTMK o Lila Kategorie … IBN Snopp o Rote Kategorie … Störung • Filter wurden eingebaut o Es kann nun explizit nach Termintypen gefiltert werden o Es können auch Termintypen in Kombination gefiltert werden • Vorlagen können nun selbst erstellt und bearbeitet werden o Dynamische Felder Datum [&&date&&] … Startdatum des Termins Start [&&start&&] … Startuhrzeit des Termins Ende [&&end&&] … Enduhrzeit des Termins dyn. VM/NM [&&vmnm&&] … dynamisch vormittags oder nachmittags je nach Startzeit > 12:00 = nachmittags o Vorlagen sind jeweils für jeden IBN Termin Typ zu erstellen o Es darf nur 1ne Reminder Vorlage per Termintyp geben Bugfix: • Mehrfachanzeigebug vom gleichen Termin, wenn der Termin mehrfach in kurzer Zeit verschoben oder vergrößert/verkleinert wurde. • Tolltipps verschwinden jetzt nicht, wenn man direkt darauf fährt.
516 lines
15 KiB
PHP
516 lines
15 KiB
PHP
<?php
|
|
|
|
class AddressModel {
|
|
public $parent_id;
|
|
public $customer_number;
|
|
public $fibu_account_number;
|
|
public $fibu_supplier_number;
|
|
public $fibu_supplier_due;
|
|
public $fibu_supplier_skonto;
|
|
public $fibu_supplier_skonto_rate;
|
|
public $fibu_supplier_paymentblock;
|
|
public $fibu_primary_account;
|
|
public $spin;
|
|
public $company;
|
|
public $firstname;
|
|
public $lastname;
|
|
public $street;
|
|
public $zip;
|
|
public $city;
|
|
public $country_id;
|
|
public $gps_lat;
|
|
public $gps_long;
|
|
public $laea;
|
|
public $phone;
|
|
public $fax;
|
|
public $mobile;
|
|
public $email;
|
|
public $birthday;
|
|
public $uid;
|
|
public $billing_type;
|
|
public $billing_delivery;
|
|
public $bank_account_bank;
|
|
public $bank_account_owner;
|
|
public $bank_account_iban;
|
|
public $bank_account_bic;
|
|
public $sepa_date;
|
|
public $last_invoice_date;
|
|
public $allow_contact;
|
|
public $allow_spin;
|
|
|
|
public $note;
|
|
|
|
public $create_by;
|
|
public $edit_by;
|
|
public $create;
|
|
public $edit;
|
|
|
|
public static function create(array $data) {
|
|
$model = new Address();
|
|
|
|
foreach ($data as $field => $value) {
|
|
if (property_exists(get_called_class(), $field)) {
|
|
$model->$field = $value;
|
|
}
|
|
}
|
|
|
|
$me = new User();
|
|
$me->loadMe();
|
|
|
|
if($model->phone == null) $model->phone = "";
|
|
if($model->fax == null) $model->fax = "";
|
|
if($model->mobile == null) $model->mobile = "";
|
|
if($model->email == null) $model->email = "";
|
|
|
|
if (!is_numeric($model->create_by) && !$model->create_by) {
|
|
$model->create_by = $me->id;
|
|
}
|
|
if (!is_numeric($model->edit_by) && !$model->edit_by) {
|
|
$model->edit_by = $me->id;
|
|
}
|
|
|
|
if (!array_key_exists("note", $data)) {
|
|
$model->note = "";
|
|
}
|
|
|
|
return $model;
|
|
}
|
|
|
|
public static function getFirst($filter = null) {
|
|
$db = FronkDB::singleton();
|
|
|
|
$where = self::getSqlFilter($filter);
|
|
//mfLoghandler::singleton()->debug($where);
|
|
|
|
$sql = "SELECT Address.* FROM Address
|
|
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id)
|
|
LEFT JOIN Country ON (Country.id = Address.country_id)
|
|
WHERE $where
|
|
GROUP BY Address.id
|
|
ORDER BY company, lastname, firstname, zip, city, Address.id
|
|
LIMIT 1
|
|
";
|
|
|
|
$res = $db->query($sql);
|
|
//$res = $db->select("Address", "*", "$where ORDER BY company, lastname, firstname, zip, city LIMIT 1");
|
|
|
|
if ($db->num_rows($res)) {
|
|
$data = $db->fetch_object($res);
|
|
$item = new Address($data);
|
|
if ($item->id) {
|
|
return $item;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static function getOne($id) {
|
|
if (!is_numeric($id) || !$id) {
|
|
throw new Exception("Invalid number", 400);
|
|
}
|
|
$item = [];
|
|
$db = FronkDB::singleton();
|
|
|
|
$res = $db->select("Address", "*", "id=$id LIMIT 1");
|
|
if ($db->num_rows($res)) {
|
|
$data = $db->fetch_object($res);
|
|
$item = new Address($data);
|
|
}
|
|
return $item;
|
|
}
|
|
|
|
public static function getAll() {
|
|
$items = [];
|
|
|
|
$db = FronkDB::singleton();
|
|
|
|
$res = $db->select("Address", "*");
|
|
if ($db->num_rows($res)) {
|
|
while ($data = $db->fetch_object($res)) {
|
|
$items[] = new Address($data);
|
|
}
|
|
}
|
|
return $items;
|
|
|
|
}
|
|
|
|
public static function getLastCustomerNumber() {
|
|
$db = FronkDB::singleton();
|
|
|
|
$res = $db->select("Address", "customer_number", "customer_number > 0 AND customer_number < 200000 ORDER BY customer_number DESC LIMIT 1");
|
|
if ($db->num_rows($res)) {
|
|
$data = $db->fetch_object($res);
|
|
if ($data->customer_number + 1 >= 200000) {
|
|
$res = $db->select("Address", "customer_number", "customer_number > 0 ORDER BY customer_number DESC LIMIT 1");
|
|
$data = $db->fetch_object($res);
|
|
return $data->customer_number;
|
|
}
|
|
return $data->customer_number;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static function byNetwork($network_id, $addresstype) {
|
|
if (!is_numeric($network_id) || !$network_id) {
|
|
return false;
|
|
}
|
|
$db = FronkDB::singleton();
|
|
|
|
$addresses = [];
|
|
|
|
// get all addresses of network
|
|
|
|
$sql = "SELECT Address.id as id FROM `Address`
|
|
LEFT JOIN NetworkAddress ON (NetworkAddress.address_id = Address.id)
|
|
WHERE NetworkAddress.type = '$addresstype'
|
|
AND network_id = $network_id
|
|
GROUP BY id";
|
|
|
|
$res = $db->query($sql);
|
|
if ($db->num_rows($res)) {
|
|
while ($data = $db->fetch_object($res)) {
|
|
$addresses[] = new Address($data->id);
|
|
}
|
|
}
|
|
|
|
return $addresses;
|
|
}
|
|
|
|
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)
|
|
LEFT JOIN Country ON (Country.id = Address.country_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 (int)$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
|
|
WHERE Addresstype.address_id = Address.id
|
|
AND $where
|
|
GROUP BY Addresstype.address_id
|
|
ORDER BY Address.id";*/
|
|
$sql = "SELECT Address.* FROM Address
|
|
LEFT JOIN Addresstype ON (Addresstype.address_id = Address.id)
|
|
LEFT JOIN Country ON (Country.id = Address.country_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($limit['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;
|
|
}
|
|
}
|
|
/*
|
|
if(!array_key_exists("addresstype", $filter)) {
|
|
if($have) {
|
|
$res = $db->select("Address", "*", "$where AND id NOT IN (".implode(",", $have).")");
|
|
} else {
|
|
$res = $db->select("Address", "*", "$where AND id");
|
|
}
|
|
if($db->num_rows()) {
|
|
while($data = $db->fetch_object($res)) {
|
|
$items[] = new Address($data);
|
|
}
|
|
}
|
|
}*/
|
|
|
|
return $items;
|
|
}
|
|
|
|
private static 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)) {
|
|
$where .= " AND customer_number=$cn";
|
|
} elseif ($cn === true) {
|
|
$where .= " AND customer_number > 0";
|
|
} elseif ($cn === false || $cn === null) {
|
|
$where .= " AND customer_number IS NULL";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("fibu_account_number", $filter)) {
|
|
$fan = $filter["fibu_account_number"];
|
|
if ($fan) {
|
|
if (is_numeric($fan)) {
|
|
$where .= " AND fibu_account_number=$fan";
|
|
} elseif($fan === true) {
|
|
$where .= " AND (fibu_account_number IS NOT NULL AND fibu_account_number > 0)";
|
|
} else {
|
|
$fan = FronkDB::singleton()->escape($fan);
|
|
$where .= " AND fibu_account_number LIKE '$fan'";
|
|
}
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("fibu_supplier_number", $filter)) {
|
|
$fsn = $filter["fibu_supplier_number"];
|
|
if (is_numeric($fsn)) {
|
|
$where .= " AND fibu_supplier_number=$fsn";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("fibu_or_supplier_account_number", $filter)) {
|
|
$fsn = $filter["fibu_or_supplier_account_number"];
|
|
if ($fsn) {
|
|
$where .= " AND (fibu_account_number LIKE '$fsn' OR fibu_supplier_number LIKE '$fsn')";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("fibu_primary_account", $filter)) {
|
|
$fpa = $filter["fibu_primary_account"];
|
|
if ($fpa) {
|
|
$where .= " AND fibu_primary_account=1";
|
|
} else {
|
|
$where .= " AND fibu_primary_account=0";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("customer_or_fibu_numbers", $filter)) {
|
|
$cn = $filter["customer_or_fibu_numbers"];
|
|
if ($cn === true) {
|
|
$where .= " AND (customer_number > 0 OR fibu_account_number > 0 OR fibu_supplier_number > 0)";
|
|
} elseif ($cn === false || $cn === null) {
|
|
$where .= " AND customer_number IS NULL AND fibu_account_number IS NULL AND fibu_supplier_number IS NULL";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("spin", $filter)) {
|
|
$spin = FronkDB::singleton()->escape($filter["spin"]);
|
|
if ($spin) {
|
|
$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("mergedName", $filter)) {
|
|
$name = FronkDB::singleton()->escape($filter["mergedName"]);
|
|
if ($name) {
|
|
$where .= " AND (CONCAT(firstname, ' ', lastname) like '%$name%' OR CONCAT(lastname, ' ', firstname) like '%$name%' )";
|
|
}
|
|
}
|
|
|
|
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 = $filter['zip'];
|
|
if(is_array($zip)) {
|
|
if(count($zip)) {
|
|
$where .= " AND Address.zip IN ('".implode("','", $zip)."')";
|
|
}
|
|
} elseif($zip) {
|
|
$zip = FronkDB::singleton()->escape($filter['zip']);
|
|
$where .= " AND Address.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.name like '%$country%' OR Country.isocode = '$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%' )";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("billing_type", $filter)) {
|
|
$billing_type = FronkDB::singleton()->escape($filter["billing_type"]);
|
|
if ($billing_type) {
|
|
$where .= " AND billing_type='$billing_type'";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("id", $filter)) {
|
|
$id = $filter["id"];
|
|
if (is_numeric($id)) {
|
|
$where .= " AND Address.id=$id";
|
|
} elseif (is_array($id) && count($id)) {
|
|
$where .= " AND Address.id IN (" . implode(",", $id) . ")";
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Address Type
|
|
*/
|
|
if (array_key_exists("addresstype", $filter) && is_array($filter['addresstype']) && count($filter['addresstype'])) {
|
|
$at = $filter['addresstype'];
|
|
$in = [];
|
|
foreach (TT_ROLES as $role) {
|
|
if (in_array($role, $at)) {
|
|
$in[] = "Addresstype.type = '$role'";
|
|
}
|
|
}
|
|
|
|
$or = "";
|
|
if (count($in)) {
|
|
$or = implode(" OR ", $in);
|
|
$where .= " AND ( $or )";
|
|
}
|
|
}
|
|
|
|
//var_dump($filter);exit;
|
|
if (array_key_exists("parent_id", $filter)) {
|
|
$parentid = $filter['parent_id'];
|
|
if ($parentid === null || $parentid == "null") {
|
|
$where .= " AND parent_id IS NULL";
|
|
} elseif (is_numeric($parentid)) {
|
|
$where .= " AND parent_id=$parentid";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("create_by", $filter)) {
|
|
$create_by = $filter['create_by'];
|
|
if (is_numeric($create_by)) {
|
|
$where .= " AND Address.create_by=$create_by";
|
|
} elseif (is_array($create_by) && count($create_by)) {
|
|
$where .= " AND Address.create_by IN (" . implode(",", $create_by) . ")";
|
|
}
|
|
}
|
|
/*
|
|
if(array_key_exists("parents_only", $filter)) {
|
|
$po = $filter['parents_only'];
|
|
if($po) {
|
|
$where .= " AND parent_id IS NULL";
|
|
}
|
|
}*/
|
|
|
|
if (array_key_exists("create>", $filter)) {
|
|
$create = $filter['create>'];
|
|
if (is_numeric($create)) {
|
|
$where .= " AND Address.create > $create";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("create<", $filter)) {
|
|
$create = $filter['create<'];
|
|
if (is_numeric($create)) {
|
|
$where .= " AND Address.create < $create";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("edit>", $filter)) {
|
|
$edit = $filter['edit>'];
|
|
if (is_numeric($edit)) {
|
|
$where .= " AND Address.edit > $edit";
|
|
}
|
|
}
|
|
|
|
if (array_key_exists("edit<", $filter)) {
|
|
$edit = $filter['edit<'];
|
|
if (is_numeric($edit)) {
|
|
$where .= " AND Address.edit < $edit";
|
|
}
|
|
}
|
|
|
|
// custom where clause
|
|
if (array_key_exists("add-where", $filter)) {
|
|
$where .= " " . $filter['add-where'];
|
|
}
|
|
|
|
if (array_key_exists("Controller!", $filter)) {
|
|
$termstring = trim($filter['search_term!']);
|
|
$xinon= $filter['xinon'];
|
|
$termExplode = explode(" ", $termstring);
|
|
if ($xinon == 1) {
|
|
foreach ($termExplode as $term) {
|
|
$wherestring .= " AND (`customer_number` LIKE '%" . $term . "%' OR `company` LIKE '%" . $term . "%' OR `firstname` LIKE '%" . $term . "%' OR `lastname` LIKE '%" . $term . "%' OR `street` LIKE '%" . $term . "%' OR `zip` LIKE '%" . $term . "%' OR `city` LIKE '%" . $term . "%') ";
|
|
}
|
|
$where .= " AND customer_number > 0 $wherestring";
|
|
} else {
|
|
foreach ($termExplode as $term) {
|
|
$wherestring .= " AND (`company` LIKE '%" . $term . "%' OR `firstname` LIKE '%" . $term . "%' OR `lastname` LIKE '%" . $term . "%' OR `street` LIKE '%" . $term . "%' OR `zip` LIKE '%" . $term . "%' OR `city` LIKE '%" . $term . "%') ";
|
|
}
|
|
$where .= " AND customer_number is NULL $wherestring";
|
|
}
|
|
}
|
|
|
|
// var_dump($filter, $where);exit;
|
|
return $where;
|
|
}
|
|
|
|
}
|