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

259 lines
8.3 KiB
PHP

<?php
class SupplierEstimations{
private function getTrackingInfo($idOrder) {
global $database;
$data = [];
$sql = "
SELECT
roso.id AS idTracking,
roso.idSupplier,
roso.trackingNumber,
roso.trackingUrl
FROM
".TABLES['rel_order_supplier_options']." roso
WHERE roso.idOrder = $idOrder";
$query = $database->query($sql);
while($row = $database->fetchArray($query)) {
$data[$row['idSupplier']][] = $row;
}
return $data;
}
/**
* add null values for products estimations in an order
* @param INT $idOrder id of the order
*/
private function addStartEstimatisonForProducts($idOrder){
global $database;
$sql = "INSERT INTO ".TABLES['rel_order_supplier_estimations']."
(idOrder, idSupplier)
SELECT rop.idOrder, scp.idSupplier
FROM ".TABLES['rel_package_products']." rpp
INNER JOIN ".TABLES['rel_order_packages']." rop
ON rop.idPackage=rpp.idPackage AND rop.packageInstance=rpp.packageInstance
INNER JOIN ".TABLES['suppliers_countries_products']." scp
ON scp.idProduct=rpp.idProduct
WHERE rop.idOrder=$idOrder
GROUP BY rop.idOrder, scp.idSupplier";
$query = $database->query($sql);
return $database->affectedRows();
}
/**
* get estimations for products
* @param INT $idOrder id for the order
* @return Array Array of products estimations
*/
public function getSupplierEstimations($idOrder){
global $database, $user;
$idOrder = $database->escapeValue($idOrder);
$data = [];
$whereSql = "";
$trackingInfo = $this->getTrackingInfo($idOrder);
if($user->getUserType() === USER_TYPES['SUPPLIER']){
$whereSql = " AND s.idUser=".$user->getUserId();
}
$sql = "SELECT
rose.estimatedDate,
rose.confirmedDate,
s.id AS idSupplier,
s.name AS supplierName
FROM ".TABLES['rel_order_supplier_estimations']." rose
INNER JOIN ".TABLES['suppliers']." s
ON s.id=rose.idSupplier
WHERE idOrder=$idOrder $whereSql
ORDER BY s.id";
$query = $database->query($sql);
if($database->numRows($query) === 0){
if($user->getUserType() === USER_TYPES['SUPPLIER']) {
return $data;
}
$addedStartValues = $this->addStartEstimatisonForProducts($idOrder);
if($addedStartValues > 0){
return $this->getSupplierEstimations($idOrder);
}else{
return $data;
}
}
while($row = $database->fetchArray($query)){
$row['trackings'] = isset($trackingInfo[$row['idSupplier']]) ? $trackingInfo[$row['idSupplier']] : [];
$data[] = $row;
}
return $data;
}
private function isProductOwner($idSupplier){
global $user, $database;
if($user->getUserType() === USER_TYPES['BROKER']){
return true;
}else if($user->getUserType() === USER_TYPES['SUPPLIER']){
$sql = "SELECT s.id
FROM ".TABLES['suppliers']." s
WHERE s.id=$idSupplier AND s.idUser=".$user->getUserId();
$query = $database->query($sql);
return $database->numRows($query) > 0;
}
return false;
}
/**
* update dates for products in an order
* @param INT $idOrder id for the order
* @param INT $idSupplier od for the supplier
* @param String $estimatedDate estimated date
* @param String $confirmedDate confirmed date
* @return Array update message
*/
public function updateSupplierEstimation($idOrder, $idSupplier,$estimatedDate, $confirmedDate){
global $database;
$idOrder = $database->escapeValue($idOrder);
$idSupplier = $database->escapeValue($idSupplier);
$estimatedDate = $database->escapeValue($estimatedDate);
$confirmedDate = $database->escapeValue($confirmedDate);
$data = [];
if(!$this->isProductOwner($idSupplier)){
$data['messages'][] = [
'code' => 'error',
'message' => 'NOT_OWNER_OF_PROD'
];
return $data;
}
if(!$idOrder || !$idSupplier){
$data['messages'][] = [
'code' => 'error',
'message' => 'EST_MISSING_DATA'
];
return $data;
}
if(empty($estimatedDate) && empty($confirmedDate)){
$data['messages'][] = [
'code' => 'error',
'message' => 'EMPTY_DATES'
];
return $data;
}
$checkEstimatedDate = $database->invalidDate('INVALID_DATE_ESTIMATED', $estimatedDate);
$checkConfirmedDate = $database->invalidDate('INVALID_DATE_ESTIMATED', $confirmedDate);
if(($checkEstimatedDate && !empty($estimatedDate)) || ($checkConfirmedDate && !empty($confirmedDate))){
$data['messages'][] = $checkEstimatedDate ? $checkEstimatedDate : [];
$data['messages'][] = $checkConfirmedDate ? $checkConfirmedDate : [];
return $data;
}
if(empty($estimatedDate)){
$estimatedDate = $confirmedDate;
}
$estimatedDate = !empty($estimatedDate) ? "'$estimatedDate'" : "null";
$confirmedDate = !empty($confirmedDate) ? "'$confirmedDate'" : "null";
$sql = "UPDATE ".TABLES['rel_order_supplier_estimations']."
SET estimatedDate=$estimatedDate,
confirmedDate=$confirmedDate
WHERE idOrder=$idOrder AND idSupplier=$idSupplier";
$query = $database->query($sql);
if($database->affectedRows() > 0){
$data['messages'][] = [
'code' => 'success',
'message' => 'SUPPLIER_ESTIMATION_UPDATED'
];
$data['idSupplier'] = $idSupplier;
}else{
$data['messages'][] = [
'code' => 'warning',
'message' => 'NO_CHANGES'
];
}
return $data;
}
/**
* update dates for products in an order
* @param INT $idOrder id for the order
* @param INT $idSupplier id for the package
* @param String $type estiamtion or confirmation date
* @return Array update message
*/
public function removeSupplierEstimation($idOrder, $idSupplier, $type){
global $database;
$idOrder = $database->escapeValue($idOrder);
$idSupplier = $database->escapeValue($idSupplier);
$type = $database->escapeValue($type);
$data = [];
if(!$this->isProductOwner($idSupplier)){
$data['messages'][] = [
'code' => 'error',
'message' => 'NOT_OWNER_OF_PROD'
];
return $data;
}
if(!$idOrder || !$idSupplier){
$data['messages'][] = [
'code' => 'error',
'message' => 'EST_MISSING_DATA'
];
return $data;
}
if($type !== 'estimation' && $type !== 'confirmation'){
$data['messages'][] = [
'code' => 'error',
'message' => 'INVALID_ESTIMATION_TYPE'
];
return $data;
}
$fieldToUpdate = $type === 'estimation' ? "estimatedDate=NULL" : "confirmedDate=NULL";
$sql = "UPDATE ".TABLES['rel_order_supplier_estimations']."
SET $fieldToUpdate
WHERE idOrder=$idOrder AND idSupplier=$idSupplier";
$query = $database->query($sql);
if($database->affectedRows() > 0){
$data['messages'][] = [
'code' => 'success',
'message' => 'SUPPLIER_ESTIMATION_UPDATED'
];
}else{
$data['messages'][] = [
'code' => 'warning',
'message' => 'NO_CHANGES'
];
}
return $data;
}
}