Initial commit

This commit is contained in:
Senad Uka
2018-06-11 11:09:35 +02:00
commit ed7df7b11f
1954 changed files with 483354 additions and 0 deletions

View File

@@ -0,0 +1,184 @@
<?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;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,100 @@
<?php
class OrderDocuments{
private function getProductDocuments($idOrder){
global $database, $user;
$whreSql = "";
$data = [];
if($user->getUserType() !== USER_TYPES['BROKER']){
$whreSql = " AND visibleToCustomer=1";
}
$sql = "SELECT
d.id AS idDocument,
d.documentName,
d.documentPath,
d.extension,
dt.type AS documentType,
rpp.idPackage,
rpd.idProduct
FROM ".TABLES['rel_product_documents']." rpd
INNER JOIN ".TABLES['documents']." d
ON d.id=rpd.idDocument
INNER JOIN ".TABLES['document_types']." dt
ON dt.id=d.idDocumentType
INNER JOIN ".TABLES['rel_package_products']." rpp
ON rpp.idProduct=rpd.idProduct
INNER JOIN ".TABLES['rel_order_packages']." rop
ON rop.idPackage=rpp.idPackage AND rop.packageInstance=rpp.packageInstance
WHERE rop.idOrder=$idOrder $whreSql
";
$query = $database->query($sql);
while($row = $database->fetchArray($query)){
$data[$row['idPackage']][] = $row;
}
return $data;
}
/**
* get all docuemnts linked to an order
* @param INT $idOrder id for the order
* @return Array list of documetns for an order grouped by package id
*/
public function getOrderDocuments($idOrder){
global $database;
$data = [];
$sql = "SELECT
d.id AS idDocument,
d.documentName,
d.documentPath,
d.extension,
dt.type AS documentType,
dt.folderName AS documentTypeName,
IFNULL(rod.idPackage, 0) as idPackage
FROM ".TABLES['rel_order_documents']." rod
INNER JOIN ".TABLES['documents']." d
ON d.id=rod.idDocument
INNER JOIN ".TABLES['document_types']." dt
ON dt.id=d.idDocumentType
WHERE rod.idOrder=$idOrder
UNION all
SELECT
d.id AS idDocument,
d.documentName,
d.documentPath,
d.extension,
dt.type AS documentType,
dt.folderName AS documentTypeName,
rpd.idPackage
FROM ".TABLES['rel_package_documents']." rpd
INNER JOIN ".TABLES['rel_order_packages']." rop
ON rop.idPackage=rpd.idPackage
INNER JOIN ".TABLES['documents']." d
ON d.id=rpd.idDocument
INNER JOIN ".TABLES['document_types']." dt
ON dt.id=d.idDocumentType
WHERE rop.idOrder=$idOrder";
$query = $database->query($sql);
while($row = $database->fetchArray($query)){
$data[$row['idPackage']][] = $row;
}
$productDocuments = $this->getProductDocuments($idOrder);
if(!empty($productDocuments)){
foreach ($productDocuments as $idPackage => &$documents) {
if(isset($data[$idPackage])){
$data[$idPackage] = array_merge($data[$idPackage], $documents);
}else{
$data[$idPackage] = $documents;
}
}
}
return $data;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,122 @@
<?php
class OrderProcessHelper{
/**
* get all steps for an order
* @param INT $idOrder id of the order
* @return Array list of steps for an order grouped by process and package
*/
public function getOrderSteps($idOrder){
global $database, $user;
$userType = $user->getUserType();
$extraWhereClause = '';
$extraJoin = '';
$comments = $this->getStepComments($idOrder);
if($userType === USER_TYPES['CUSTOMER']) {
$extraWhereClause = " AND ps.isVisibleForCustomer = 1";
}
if($userType === USER_TYPES['SUPPLIER']) {
$extraJoin = " INNER JOIN(
SELECT DISTINCT rop.idOrder, rop.idPackage
FROM ".TABLES['rel_order_packages']." rop
INNER JOIN ".TABLES['rel_package_products']." rpp
ON rpp.idPackage=rop.idPackage and rpp.packageInstance=rpp.packageInstance
INNER JOIN ".TABLES['suppliers_countries_products']." scp
ON scp.idProduct=rpp.idProduct
INNER JOIN ".TABLES['suppliers']." s
ON s.id=scp.idSupplier
WHERE s.idUSer=".$user->getUserId()." AND rop.idOrder=$idOrder
) supplierPkg
ON rops.idOrder=supplierPkg.idOrder AND rops.idPackage=supplierPkg.idPackage";
}
$sql = "SELECT o.id AS idOrder,
ps.shortDesc,
ps.fullDesc,
ps.isVisibleForCustomer,
psa.actionCode,
psa.stepType,
rops.idProcessStep,
rops.status,
DATE_FORMAT(rops.actualDate, '%D %b, %y') as actualDate,
DATE_FORMAT(NOW(), '%D %b %y') as now,
rps.idProcess,
p.name AS processName
FROM ".TABLES['rel_order_process_step']." rops
INNER JOIN ".TABLES['orders']." o
ON o.id=rops.idOrder
INNER JOIN ".TABLES['rel_process_steps']." rps
ON rps.id=rops.idProcessStep
INNER JOIN ".TABLES['processes']." p
ON p.id=rps.idProcess
INNER JOIN ".TABLES['process_step']." ps
ON ps.id=rps.idStep
INNER JOIN ".TABLES['process_step_actions']." psa
ON psa.id=ps.idActionCode
$extraJoin
WHERE o.id=".$idOrder."
$extraWhereClause
ORDER BY rps.idProcess, rops.idProcessStep DESC
";
$query = $database->query($sql);
$data = [];
while($row = $database->fetchArray($query)){
$idProcess = $row['idProcess'];
$data[$idProcess]['idProcess'] = $row['idProcess'];
$data[$idProcess]['processName'] = $row['processName'];
unset($row['processName']);
$row['comments'] = isset($comments[$row['idProcessStep']]) ? $comments[$row['idProcessStep']] : [];
$row['isNewCommentVisible'] = $row['isVisibleForCustomer'];
$data[$idProcess]['steps'][] = $row;
}
return $data;
}
/**
* get comments from an order
* @param INT $idOrder id of the order
* @return Array list of comments for an order grouped by idPackage and idProcessStep
*/
private function getStepComments($idOrder){
global $database, $user;
$extraFields = '';
$whereSql = '';
$userType = $user->getUserType();
if($userType === USER_TYPES['BROKER']){
$extraFields = ",rsc.isVisible ";
}else{
$whereSql = " AND rsc.isVisible=1";
}
$sql = "SELECT rsc.id, rsc.idProcessStep,
rsc.idPackage,
rsc.comment,
DATE_FORMAT(rsc.addDate, '%D %b, %y') as addDate,
u.username as user
$extraFields
FROM ".TABLES['rel_step_comments']." rsc
INNER JOIN ".TABLES['users']." u
ON u.id=rsc.idUser
WHERE rsc.idOrder=$idOrder
AND rsc.type = 'stepComment'
$whereSql";
$comments = [];
$query = $database->query($sql);
while($row = $database->fetchArray($query)){
$idProcessStep = $row['idProcessStep'];
unset($row['idProcessStep']);
$idPackage = $row['idPackage'];
unset( $row['idPackage']);
$comments[$idPackage][$idProcessStep][] = $row;
}
return $comments;
}
}

View File

@@ -0,0 +1,159 @@
<?php
class OrdersController{
private $model;
function __construct(){
$this->model = new OrdersModel();
}
/**
* returns json response for ongoing orders
* @return list orders json
*/
public function getActiveOrders(){
echo json_encode($this->model->getActiveOrders(), JSON_NUMERIC_CHECK);
}
/**
* returns json response for completed orders
* @return list orders json
*/
public function getHistoryOrders(){
echo json_encode($this->model->getHistoryOrders(), JSON_NUMERIC_CHECK);
}
/**
* gets the info for an order
* @return [json] returns order info
*/
public function getOrderInfo() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
echo json_encode($this->model->getOrderInfo($idOrder), JSON_NUMERIC_CHECK);
}
/**
* update comment for an order
* @return json update message
*/
public function addOrderComment() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$comment = isset($_REQUEST['comment']) ? $_REQUEST['comment'] : null;
echo json_encode($this->model->addOrderComment($idOrder, $comment));
}
/**
* get customer questionnaires documents
* @return json list of documents
*/
public function getOrderDocumentsPerType(){
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$documentType = isset($_REQUEST['documentType']) ? $_REQUEST['documentType'] : '';
echo json_encode($this->model->getOrderDocumentsPerType($idOrder, $documentType), JSON_NUMERIC_CHECK);
}
/**
* upload againa questionnaire
* @return json upload message
*/
public function reUploadQuestionaire(){
$file = isset($_FILES['file']) ? $_FILES['file'] : [];
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
$idDocument = isset($_REQUEST['idDocument']) ? $_REQUEST['idDocument'] : 0;
echo json_encode($this->model->reUploadQuestionaire($idOrder, $idPackage, $idDocument, $file));
}
/**
* returns the comments and the user id based on the comment type
* @return json array with comments
*/
public function getCommentsByType() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
$idProcessStep = isset($_REQUEST['idProcessStep']) ? $_REQUEST['idProcessStep'] : 0;
$commentType = isset($_REQUEST['commentType']) ? $_REQUEST['commentType'] : '';
echo json_encode($this->model->getCommentsByType($idOrder, $idPackage, $idProcessStep, $commentType), JSON_NUMERIC_CHECK);
}
/**
* get information for customer acceptance
* @return json object with customer information
*/
public function getCustomerAcceptance(){
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
echo json_encode($this->model->getCustomerAcceptance($idOrder), JSON_NUMERIC_CHECK);
}
/**
* upload acceptance document
* @return json upload message
*/
public function uploadAcceptanceDocument(){
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$file = isset($_FILES['file']) ? $_FILES['file'] : [];
echo json_encode($this->model->uploadAcceptanceDocument($idOrder, $file));
}
/**
* customer change acceptance status for a package
* @return Array message confirmation
*/
public function acceptDeclineInstallation(){
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$actionType = isset($_REQUEST['actionType']) ? $_REQUEST['actionType'] : '';
$declineReason = isset($_REQUEST['declineReason']) ? $_REQUEST['declineReason'] : '';
echo json_encode($this->model->acceptDeclineInstallation($idOrder, $actionType, $declineReason));
}
/**
* returns the installation dates proposed/accepted/rejected by users
* @return json array with installation dates
*/
public function getInstallationDates() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
echo json_encode($this->model->getInstallationDates($idOrder, $idPackage), JSON_NUMERIC_CHECK);
}
public function getAllDataForInstallation() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$stepIds = isset($_REQUEST['stepsNameForInstallation']) ? $_REQUEST['stepsNameForInstallation'] : '[]';
$fileType = isset($_REQUEST['fileType']) ? $_REQUEST['fileType'] : '';
echo json_encode($this->model->getAllDataForInstallation($idOrder, $stepIds, $fileType));
}
/**
* returns a message if the new date for the installation was successfully added
* @return json array with confirmation messages
*/
public function updateInstallationDate() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
$installationDate = isset($_REQUEST['installationDate']) ? $_REQUEST['installationDate'] : '';
$status = isset($_REQUEST['status']) ? $_REQUEST['status'] : '';
echo json_encode($this->model->updateInstallationDate($idOrder, $idPackage, $installationDate, $status));
}
/**
* returns a message if the date was removed successfully
* @return json array with confirmation messages
*/
public function removeMyDate() {
$idOrder = isset($_REQUEST['idOrder']) ? $_REQUEST['idOrder'] : 0;
$idPackage = isset($_REQUEST['idPackage']) ? $_REQUEST['idPackage'] : 0;
$installationDate = isset($_REQUEST['installationDate']) ? $_REQUEST['installationDate'] : '';
echo json_encode($this->model->removeMyDate($idOrder, $idPackage, $installationDate));
}
/**
* sends a mail to the support team
* @return json confirmation message
*/
public function sendSupportMail() {
$ordersInfo = isset($_REQUEST['orderInfo']) ? $_REQUEST['orderInfo'] : '[]';
$orderPackages = isset($_REQUEST['orderPackages']) ? $_REQUEST['orderPackages'] : '[]';
$userText = isset($_REQUEST['supportText']) ? $_REQUEST['supportText'] : '';
echo json_encode($this->model->sendSupportMail($ordersInfo, $orderPackages, $userText));
}
}

File diff suppressed because it is too large Load Diff