Files
old-wiaas-legacy/api-wiaas/server/components/v2/orders/CustomerAcceptance.php
2018-06-11 11:09:35 +02:00

185 lines
6.5 KiB
PHP

<?php
class CustomerAcceptance{
/**
* get info for customer acceptance
* @param INT $idOrder id for the order
* @param INT $idPackage id for the package
* @return Array custoemr acceptance info
*/
public function getCustomerAcceptance($idOrder){
global $database;
$idOrder = $database->escapeValue($idOrder);
$data = [];
$orderExtraActions = new orderExtraActions();
$sql = "SELECT o.id AS idOrder,
o.customerAccepted,
o.customerDeclineReason,
DATE_FORMAT(o.acceptanceDueDate, '%D %b, %y') as acceptanceDueDate,
o.acceptanceDueDate as acceptanceDueDateNoFormat
FROM ".TABLES['orders']." o
WHERE o.id=$idOrder";
$query = $database->query($sql);
if($database->numRows($query) > 0){
$row = $database->fetchArray($query);
$dueDate = new DateTime($row['acceptanceDueDateNoFormat']);
$now = time();
$timeDiff = ($dueDate->getTimestamp() - $now ) / (3600 *24);
$row['daysDiff'] = $timeDiff;
}
$data = $row;
$sql = "SELECT
d.id AS idDocument,
d.documentName,
d.extension,
rod.idOrder
FROM ".TABLES['documents']." d
INNER JOIN ".TABLES['rel_order_documents']." rod
ON rod.idDocument=d.id
WHERE rod.idOrder=$idOrder AND d.idDocumentType=".$orderExtraActions::DOCUMENT_TYPES['ID_ACCEPTANCE_DOC_TYPE'];
$query = $database->query($sql);
while($row = $database->fetchArray($query)) {
$data['acceptanceDocuments'][] = $row;
}
return $data;
}
/**
* get the number of acceptance documents uploaded
* @param INT $idOrder id for the order
* @return INT number of uploaded documents
*/
private function getAcceptanceDocumentsCount($idOrder){
global $database;
$orderExtraActions = new orderExtraActions();
$sql = "SELECT COUNT(idDocument) AS totalDocumentsUplaoded
FROM ".TABLES['rel_order_documents']." rod
INNER JOIN ".TABLES['documents']." d
ON d.id=rod.idDocument AND d.idDocumentType=".$orderExtraActions::DOCUMENT_TYPES['ID_ACCEPTANCE_DOC_TYPE']."
WHERE rod.idOrder=$idOrder
";
$query = $database->query($sql);
$row = $database->fetchArray($query);
return intval($row['totalDocumentsUplaoded']);
}
/**
* customer change acceptance status for a package
* @param INT $idOrder id for the order
* @param String $actionType accept or decline the installation
* @param String $declineReason the reason why the customer declined the installation
* @return Array update message
*/
public function acceptDeclineInstallation($idOrder, $actionType, $declineReason){
global $database;
$idOrder = $database->escapeValue($idOrder);
$actionType = trim($database->escapeValue($actionType));
$declineReason = trim($database->escapeValue($declineReason));
$data = [];
$customerAcceptanceStatus = 1;
$successMessage = 'INSTALLATION_ACCEPTED';
if($actionType === 'decline') {
if(!$declineReason) {
$data['messages'][] = [
'code' => 'error',
'message' => 'DECLINE_REASON_EMPTY'
];
return $data;
}
$customerAcceptanceStatus = -1;
$successMessage = 'INSTALLATION_DECLINED';
}else{
$uploadedDocuments = $this->getAcceptanceDocumentsCount($idOrder);
if($uploadedDocuments === 0){
$data['messages'][] = [
'code' => 'error',
'message' => 'ACCEPTANCE_NOT_UPLOADED'
];
return $data;
}
}
$sql = "UPDATE ".TABLES['orders']."
SET customerAccepted=$customerAcceptanceStatus,
customerDeclineReason='$declineReason'
WHERE id=$idOrder";
$query = $database->query($sql);
if($database->affectedRows() > 0){
$data['messages'][] = [
'code' => 'success',
'message' => $successMessage
];
}else{
$data['messages'][] = [
'code' => 'warning',
'message' => 'ACCEPTANCE_NOT_UPDATED'
];
}
return $data;
}
/**
* upload customer acceptance document
* @param INT $idOrder id for the order
* @param FILE $file file to be uploaded
* @return Array upload status
*/
public function uploadAcceptanceDocument($idOrder, $file){
global $database, $user;
$orderExtraActions = new orderExtraActions();
$idOrder = $database->escapeValue($idOrder);
$fileManager = new FileManager();
$sql = "SELECT MAX(d.id)+1 AS maxIdDocument
FROM ".TABLES['documents']." d";
$maxId = $database->fetchResultArray($sql);
$maxIdDocument = $maxId && $maxId[0] && $maxId[0]['maxIdDocument'] ? $maxId[0]['maxIdDocument'] : 1;
$sql = "SELECT o.orderNumber
FROM orders o
WHERE id=$idOrder";
$query = $database->query($sql);
$row = $database->fetchArray($query);
$documentName = 'customerAcceptance_'.$row['orderNumber'].'_' . $maxIdDocument;
$uploadedBy = $user->getUserId();
$data = $fileManager->uploadFile($file, $orderExtraActions::DOCUMENT_TYPES['ID_ACCEPTANCE_DOC_TYPE'], $documentName, $uploadedBy);
if(isset($data['messages'])){
return $data;
}
$idDocument = $data['idDocument'];
$sql = "INSERT INTO ".TABLES['rel_order_documents']."
(idOrder, idDocument, validation)
VALUES($idOrder, $idDocument, 'not-validated')";
$query = $database->query($sql);
if($database->affectedRows() > 0){
$data['messages'][] = [
'code' => 'success',
'message' => 'FILE_UPLOADED'
];
}else{
$data['messages'][] = [
'code' => 'error',
'message' => 'NOT_LINKED_TO_ORDER'
];
}
return $data;
}
}