264 lines
8.8 KiB
PHP
264 lines
8.8 KiB
PHP
<?php
|
|
class OrderHelper{
|
|
const DOCUMENT_TYPES = [
|
|
'ID_QUESTIONAIRE_DOC_TYPE' => 2, // 2 => 'orderQuestionaire'
|
|
'ID_CONFIGURATION_DOC_TYPE' => 3, // 3 => 'configuration'
|
|
'ID_ACCEPTANCE_DOC_TYPE' => 5, // 5 => 'customerAcceptance'
|
|
'ID_INSTALLATION_PROTOTCOL_DOC_TYPE' => 10 // 10 => 'installationProtocol'
|
|
];
|
|
|
|
/**
|
|
* get the orderNumber based on the order id
|
|
* @param Int $idOrder the id of the order
|
|
* @return Int the order number of that order
|
|
*/
|
|
public function getOrderNumberById($idOrder) {
|
|
global $database;
|
|
|
|
$sql = "
|
|
SELECT
|
|
o.orderNumber
|
|
FROM
|
|
".TABLES['orders']." o
|
|
WHERE o.id = $idOrder
|
|
LIMIT 1
|
|
";
|
|
$orderNumberArray = $database->fetchResultArray($sql);
|
|
if($orderNumberArray && $orderNumberArray[0]) {
|
|
return array_key_exists('orderNumber', $orderNumberArray[0]) ? $orderNumberArray[0]['orderNumber'] : '';
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* gets the name of the customer and commercial lead by order id
|
|
* @param Int $idOrder the id of the order
|
|
* @return Array the names of the customer and commercial lead from the given order
|
|
*/
|
|
public function getCustomerAndCLNamesFromOrder($idOrder) {
|
|
global $database;
|
|
|
|
$sql = "
|
|
SELECT
|
|
c.name AS customerName,
|
|
cl.name AS commercialLeadName
|
|
FROM
|
|
".TABLES['orders']." o
|
|
INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
|
ON rclc.id = o.idCustomerInstance
|
|
INNER JOIN ".TABLES['customers']." c
|
|
ON c.id = rclc.idCustomer
|
|
INNER JOIN ".TABLES['commercial_leads']." cl
|
|
ON cl.id = rclc.idCommercialLead
|
|
WHERE o.id = $idOrder
|
|
LIMIT 1
|
|
";
|
|
$values = $database->fetchResultArray($sql);
|
|
|
|
return $values && $values[0] ? $values[0] : [];
|
|
}
|
|
|
|
/**
|
|
* returns the processId selected for a package in an order
|
|
* @param Int $idOrder id of the order
|
|
* @param Int $idPackage id of the package
|
|
* @return Int the id of the process selected
|
|
*/
|
|
public function getIdProcessSelectedForPackageOrder($idOrder, $idPackage) {
|
|
global $database;
|
|
|
|
if(!$idPackage) {
|
|
return 0;
|
|
}
|
|
|
|
$sql = "
|
|
SELECT
|
|
rps.idProcess
|
|
FROM
|
|
".TABLES['rel_process_steps']." rps
|
|
INNER JOIN ".TABLES['rel_order_process_step']." rops
|
|
ON rops.idProcessStep = rps.id
|
|
AND rops.idPackage = $idPackage
|
|
AND rops.idOrder = $idOrder
|
|
GROUP BY rps.idProcess
|
|
LIMIT 1
|
|
";
|
|
|
|
return $database->fetchResultArray($sql)[0]['idProcess'];
|
|
}
|
|
|
|
/**
|
|
* returns the mail addresses for cl and customer involved in the order process
|
|
* @param String $customerName customer's name
|
|
* @param String $commercialLeadName commercial lead's name
|
|
* @return Array mails of the customer and commercial lead
|
|
*/
|
|
public function getCLAndCustomerMails($customerName, $commercialLeadName, $isForComment = 0) {
|
|
global $database, $user;
|
|
$mailArray = [];
|
|
|
|
$sql = "
|
|
SELECT
|
|
c.idUser,
|
|
u.mail,
|
|
'customer' AS type
|
|
FROM
|
|
".TABLES['customers']." c
|
|
INNER JOIN ".TABLES['users']." u
|
|
ON u.id = c.idUser
|
|
WHERE c.name = '$customerName'
|
|
UNION
|
|
SELECT
|
|
cl.idUser,
|
|
u.mail,
|
|
'other' AS type
|
|
FROM
|
|
".TABLES['commercial_leads']." cl
|
|
INNER JOIN ".TABLES['users']." u
|
|
ON u.id = cl.idUser
|
|
WHERE cl.name = '$commercialLeadName'
|
|
";
|
|
$result = $database->query($sql);
|
|
while($row = $database->fetchArray($result)) {
|
|
if($row['mail'] !== '') {
|
|
if($isForComment) {
|
|
if($row['idUser'] != $user->getUserId()) {
|
|
$mailArray[$row['type']][] = $row['mail'];
|
|
}
|
|
} else {
|
|
$mailArray[$row['type']][] = $row['mail'];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $mailArray;
|
|
}
|
|
|
|
/**
|
|
* check if user has rights to see a specific order
|
|
* @param INT $idOrder id of the order
|
|
* @return Boolean retruns true if the user can see the order
|
|
*/
|
|
public function checkOrderOwner($idOrder){
|
|
global $database, $user;
|
|
|
|
if($user->getUserType() === USER_TYPES['BROKER']){
|
|
return true;
|
|
}else if($user->getUserType() === USER_TYPES['CUSTOMER']){
|
|
$extraJoin = " INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
|
ON rclc.id=o.idCustomerInstance
|
|
INNER JOIN ".TABLES['customers']." u
|
|
ON u.id=rclc.idCustomer";
|
|
}else if($user->getUserType() === USER_TYPES['COMMERCIAL_LEAD']){
|
|
$extraJoin = "INNER JOIN ".TABLES['rel_commercial_lead_customers']." rclc
|
|
ON rclc.id=o.idCustomerInstance
|
|
INNER JOIN ".TABLES['commercial_leads']." u
|
|
ON u.id=rclc.idCommercialLead";
|
|
}else if($user->getUserType() === USER_TYPES['SUPPLIER']){
|
|
$extraJoin = "INNER JOIN ".TABLES['rel_order_products_estimation']." rope
|
|
ON rope.idOrder=o.id
|
|
INNER JOIN ".TABLES['suppliers_countries_products']." scp
|
|
ON scp.idProduct=rope.idProduct
|
|
OR scp.idProductCategory = ".self::ID_INSTALLATION_CATEGORY."
|
|
INNER JOIN ".TABLES['suppliers']." u
|
|
ON u.id=scp.idSupplier";
|
|
}else{
|
|
return false;
|
|
}
|
|
|
|
$sql = "SELECT o.id
|
|
FROM ".TABLES['orders']." o
|
|
$extraJoin
|
|
WHERE u.idUser=".$user->getUserId()." AND o.id=$idOrder
|
|
LIMIT 1";
|
|
$query = $database->query($sql);
|
|
|
|
return $database->numRows($query) === 1;
|
|
}
|
|
|
|
/**
|
|
* upload document for an order
|
|
* @param Int $idOrder id of the order
|
|
* @param Int $idPackage id of the package
|
|
* @param Int $idFileType the id of the type of the file uploaded
|
|
* @param String $fileName the name of the file
|
|
* @param FILE $file file to be uploaded
|
|
* @return Array message with status
|
|
*/
|
|
public function uploadOrderDocument($idOrder, $idPackage, $idDocumentType, $documentName, $file){
|
|
global $database;
|
|
$idOrder = $database->escapeValue($idOrder);
|
|
$idPackage = $database->escapeValue($idPackage);
|
|
$idDocumentType = $database->escapeValue($idDocumentType);
|
|
$documentName = $database->escapeValue($documentName);
|
|
|
|
if(!$documentName){
|
|
$data['messages'][] = [
|
|
'code' => 'error',
|
|
'message' => 'NO_NAME'
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
|
|
if(!$idDocumentType){
|
|
$data['messages'][] = [
|
|
'code' => 'error',
|
|
'message' => 'NO_TYPE'
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
|
|
if(!$idPackage){
|
|
$data['messages'][] = [
|
|
'code' => 'error',
|
|
'message' => 'NO_PACKAGE'
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
|
|
$sql = "SELECT d.id
|
|
FROM ".TABLES['documents']." d
|
|
WHERE d.documentName='$documentName'";
|
|
$query = $database->query($sql);
|
|
if($database->numRows($query) > 0){
|
|
$data['messages'][] = [
|
|
'code' => 'error',
|
|
'message' => 'NAME_EXISTS'
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
|
|
$fileManager = new FileManager();
|
|
$data = $fileManager->uploadFile($file, $idDocumentType, $documentName);
|
|
|
|
if(isset($data['messages'])){
|
|
return $data;
|
|
}
|
|
|
|
if(array_search($idDocumentType, [self::DOCUMENT_TYPES['ID_CONFIGURATION_DOC_TYPE'], self::DOCUMENT_TYPES['ID_INSTALLATION_PROTOTCOL_DOC_TYPE']])) {
|
|
$docValidation = 'not-required';
|
|
} else {
|
|
$docValidation = 'not-validated';
|
|
}
|
|
|
|
$idDocument = $data['idDocument'];
|
|
|
|
$sql = "INSERT INTO ".TABLES['rel_order_documents']."
|
|
(idOrder, idPackage, idDocument, validation)
|
|
VALUES($idOrder, $idPackage, $idDocument, '$docValidation')";
|
|
$query = $database->query($sql);
|
|
|
|
$data['messages'][] = [
|
|
'code' => 'success',
|
|
'message' => 'DOCUMENT_UPLOADED'
|
|
];
|
|
|
|
return $data;
|
|
}
|
|
}
|