Files
old-wiaas-legacy/api-wiaas/server/components/v1/contact/ContactModel.php
2018-06-11 11:09:35 +02:00

258 lines
9.1 KiB
PHP

<?php
/**
*ata manipulation for contact page
*/
class ContactModel{
/**
* get contact information based on user type
* @return array list of contacts based on the user type
*/
public function getContactInfo(){
global $user;
$userType = ucfirst($user->getUserType());
$method = 'getContactFor'.$userType;
$method = str_replace("_", "", $method);
if(method_exists ($this, $method)){
return $this->{$method}();
}else{
trigger_error("No contact for this user type!", E_USER_ERROR);
}
}
/**
* [getAddresses description]
* @param String $userType the type of the user
* @return Array list of addresses based on user type
*/
public function getAddresses($userType){
global $database, $user;
$extraJoin = "";
if($userType === USER_TYPES['BROKER']){
$extraJoin .= "INNER JOIN ".TABLES['commercial_leads']." cl
ON cl.idUser=a.idUser";
}
if($userType === USER_TYPES['COMMERCIAL_LEAD']){
$extraJoin .= "INNER JOIN
(SELECT
b.idUser
FROM ".TABLES['brokers']." b
UNION ALL
SELECT c.idUser
FROM ".TABLES['customers']." c
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
ON rclc.idCustomer=c.id
INNER JOIN ".TABLES['commercial_leads']." cl
ON cl.id=rclc.idCommercialLead
WHERE cl.idUser=".$user->getUserId()." AND rclc.isLinkEnabled=1
) users
ON users.idUser=a.idUser";
}
if($userType === USER_TYPES['CUSTOMER']){
$extraJoin .= "INNER JOIN ".TABLES['commercial_leads']." cl
ON cl.idUser=a.idUser
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
ON rclc.idCommercialLead=cl.id AND rclc.isLinkEnabled=1
INNER JOIN ".TABLES['customers']." cust
ON cust.id=rclc.idCustomer AND cust.idUser=".$user->getUserId();
}
$sql = "SELECT
a.idUser,
a.company,
a.firstName,
a.lastName,
a.city,
a.detailedAddress,
a.zip,
c.name as country
FROM ".TABLES['billing_information']." a
INNER JOIN ".TABLES['countries']." c
ON c.id=a.idCountry
$extraJoin";
$data = [];
$query = $database->query($sql);
while($row=$database->fetchArray($query)){
$data[$row['idUser']][] = $row;
}
return $data;
}
private function getSellCountries($userType){
global $database, $user;
$extraJoin = "";
if($userType === USER_TYPES['CUSTOMER']){
$extraJoin .= "INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
ON rclc.idCommercialLead=plcl.idCommercialLead AND rclc.isLinkEnabled=1
INNER JOIN ".TABLES['customers']." cust
ON cust.id=rclc.idCustomer AND cust.idUser=".$user->getUserId();
}
if($userType === USER_TYPES['COMMERCIAL_LEAD']){
$sql ="SELECT DISTINCT
c.name,
c.code,
0 AS idUserByType
FROM ".TABLES['countries']." c
INNER JOIN ".TABLES['packages']." p
ON p.idCountry=c.id
INNER JOIN ".TABLES['price_list_broker']." plb
ON plb.idPackage=p.id
ORDER BY c.name";
}else{
$sql ="SELECT DISTINCT
c.name,
c.code,
plcl.idCommercialLead AS idUserByType
FROM ".TABLES['countries']." c
INNER JOIN ".TABLES['packages']." p
ON p.idCountry=c.id
INNER JOIN ".TABLES['price_list_commercial_lead']." plcl
ON plcl.idPackage=p.id
$extraJoin
ORDER BY c.name";
}
$data = [];
$query = $database->query($sql);
while($row=$database->fetchArray($query)){
$data[$row['idUserByType']][] = $row;
}
return $data;
}
/**
* get contatc informations for brokers
* @return array list of contacts for broker
*/
public function getContactForBroker(){
global $database, $user;
$addresses = $this->getAddresses($user->getUserType());
$countries = $this->getSellCountries($user->getUserType());
$sql = "SELECT
cl.id as idCommercialLead,
cl.name,
cl.phone,
u.mail,
cl.idUser
FROM ".TABLES['commercial_leads']." cl
INNER JOIN ".TABLES['users']." u
ON u.id=cl.idUser
ORDER BY cl.name";
$data = [];
$query = $database->query($sql);
while($row=$database->fetchArray($query)){
$row['addresses'] = isset($addresses[$row['idUser']]) ? $addresses[$row['idUser']] : [];
unset($row['idUser']);
$row['countries'] = isset($countries[$row['idCommercialLead']]) ? $countries[$row['idCommercialLead']] : [];
unset($row['idCommercialLead']);
$data[] = $row;
}
return $data;
}
/**
* get contact information for customers
* @return array list of contacts for customers
*/
public function getContactForCustomer(){
global $database, $user;
$addresses = $this->getAddresses($user->getUserType());
$countries = $this->getSellCountries($user->getUserType());
$sql = "SELECT
cl.id AS idCommercialLead,
cl.name,
cl.phone,
cl.mail,
cl.idUser,
cl.vatCode
FROM ".TABLES['commercial_leads']." cl
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
ON rclc.idCommercialLead=cl.id AND rclc.isLinkEnabled=1
INNER JOIN ".TABLES['customers']." c
ON c.id=rclc.idCustomer
WHERE c.idUser=".$user->getUserId()."
ORDER BY cl.name";
$data = [];
$query = $database->query($sql);
while($row=$database->fetchArray($query)){
$row['addresses'] = isset($addresses[$row['idUser']]) ? $addresses[$row['idUser']] : [];
unset($row['idUser']);
$row['countries'] = isset($countries[$row['idCommercialLead']]) ? $countries[$row['idCommercialLead']] : [];
unset($row['idCommercialLead']);
$data[] = $row;
}
return $data;
}
/**
* get contact informations for commercial lead
* @return array list of contacts for commercial lead
*/
public function getContactForCommerciallead(){
global $database, $user;
$addresses = $this->getAddresses($user->getUserType());
$countries = $this->getSellCountries($user->getUserType());
$sql = "SELECT
b.id AS idByUserType,
b.name,
b.phone,
u.mail,
b.idUser,
'brokers' AS type
FROM ".TABLES['brokers']." b
INNER JOIN ".TABLES['users']." u
ON u.id=b.idUser
UNION ALL
SELECT
0 AS idByUserType,
c.name,
c.phone,
u.mail,
c.idUser,
'customers' AS type
FROM ".TABLES['customers']." c
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
ON rclc.idCustomer=c.id AND rclc.isLinkEnabled=1
INNER JOIN ".TABLES['commercial_leads']." cl
ON cl.id=rclc.idCommercialLead
INNER JOIN ".TABLES['users']." u
ON u.id=c.idUser
WHERE cl.idUser=".$user->getUserId()."
ORDER BY type,name";
$data = [];
$query = $database->query($sql);
while($row=$database->fetchArray($query)){
$row['addresses'] = isset($addresses[$row['idUser']]) ? $addresses[$row['idUser']] : [];
unset($row['idUser']);
if($row['idByUserType'] != 0){
$row['countries'] = isset($countries[0]) ? $countries[0] : [];
}
unset($row['idByUserType']);
$data[$row['type']][] = $row;
}
return $data;
}
}