304 lines
12 KiB
JavaScript
304 lines
12 KiB
JavaScript
(function () {
|
|
global.dashModule
|
|
.controller('setDeliveryDatesCtrl', ['$scope', '$', '$http', '$translate', 'utilsService', 'ordersUtilsService', setDeliveryDatesCtrl])
|
|
.directive('setDeliveryDates', [setDeliveryDatesDirective]);
|
|
|
|
function setDeliveryDatesDirective() {
|
|
return {
|
|
restrict: 'E'
|
|
};
|
|
}
|
|
|
|
function setDeliveryDatesCtrl($scope, $, $http, $translate, utilsService, ordersUtilsService) {
|
|
let areEstimatedDatesSet = false;
|
|
let areConfirmedDatesSet = false;
|
|
const stepIdsForDeliveryDates = {
|
|
firstStepEnabled: 5,
|
|
lastStepEnabled: 6
|
|
};
|
|
$scope.isDatePickerOpen = {
|
|
estimatedDate: {},
|
|
confirmedDate: {}
|
|
};
|
|
const idOrder = global.getParameterByName('idOrder');
|
|
const process = $scope.$parent.process;
|
|
const idPackage = process.idPackage;
|
|
const idProcess = process.idProcess;
|
|
const stepInfo = {
|
|
idOrder,
|
|
idPackage,
|
|
idProcess
|
|
};
|
|
$scope.idPackage = idPackage;
|
|
$scope.getEstimationsAndEarliestInstallDate = getEstimationsAndEarliestInstallDate;
|
|
$scope.updateSupplierEstimation = updateSupplierEstimation;
|
|
$scope.getEstimationIcon = getEstimationIcon;
|
|
$scope.getEstimatedOrConfirmedMaxDate = getEstimatedOrConfirmedMaxDate;
|
|
$scope.updateTracking = updateTracking;
|
|
$scope.addTracking = addTracking;
|
|
$scope.supplierEstimations = [];
|
|
$scope.shouldShowAddNewTracking = shouldShowAddNewTracking;
|
|
$scope.showAddNewTracking = {};
|
|
$scope.removeTracking = removeTracking;
|
|
$scope.isRemoveDialogVisible = {};
|
|
$scope.showHideRemoveDialog = showHideRemoveDialog;
|
|
$scope.isTrackingEmpty = isTrackingEmpty;
|
|
$scope.removeSupplierEstimation = removeSupplierEstimation;
|
|
$scope.areProductsInOrder = true;
|
|
$scope.openDatePicker = openDatePicker;
|
|
$scope.isDateEditable = isDateEditable;
|
|
$scope.isRemoveDatesDialogVisible = {
|
|
'estimated': {},
|
|
'confirmed': {}
|
|
};
|
|
$scope.showHideRemoveDatesDialog = showHideRemoveDatesDialog;
|
|
$scope.earliestInstallationDate = () => {
|
|
return ordersUtilsService.getEarliestInstallationDate(idOrder);
|
|
};
|
|
$scope.isSetDeliveryDatesDisabled = () => {
|
|
return ordersUtilsService.isComponentDisabled(idOrder, 'setDeliveryDates');
|
|
};
|
|
|
|
function getEstimationsAndEarliestInstallDate() {
|
|
getSupplierEstimations();
|
|
ordersUtilsService.checkIfIsNextStepWanted(idOrder, 'setDeliveryDates', stepIdsForDeliveryDates);
|
|
ordersUtilsService.getEarliestInstallationDateFromDb(idOrder, idPackage);
|
|
utilsService.registerFunction('getSupplierEstimations', getSupplierEstimations);
|
|
}
|
|
|
|
function getSupplierEstimations(onInit = false) {
|
|
const params = $.param({
|
|
idOrder
|
|
});
|
|
|
|
$http({
|
|
method: 'POST',
|
|
data: params,
|
|
url: 'orders/api/getSupplierEstimations'
|
|
}).then((response) => {
|
|
setSuppliersEstimations(response, onInit);
|
|
}, utilsService.onHttpError);
|
|
}
|
|
|
|
function setSuppliersEstimations(response, onInit = false) {
|
|
areEstimatedDatesSet = false;
|
|
areConfirmedDatesSet = false;
|
|
|
|
if (response.data) {
|
|
$scope.supplierEstimations = response.data;
|
|
if ($scope.supplierEstimations.length === 0) {
|
|
$scope.areProductsInOrder = false;
|
|
}
|
|
|
|
$scope.supplierEstimations.forEach(supplierEstimation => {
|
|
$scope.showAddNewTracking[supplierEstimation.idSupplier] = !supplierEstimation.trackings.length;
|
|
});
|
|
}
|
|
|
|
if (!onInit) {
|
|
areEstimatedDatesSet = checkEstimatedDateSet($scope.supplierEstimations);
|
|
areConfirmedDatesSet = checkConfirmedDateSet($scope.supplierEstimations);
|
|
|
|
if (areConfirmedDatesSet) {
|
|
const maxConfDate = getEstimatedOrConfirmedMaxDate('confirmedDate');
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, maxConfDate);
|
|
} else if (areEstimatedDatesSet) {
|
|
const maxEstimatedDate = getEstimatedOrConfirmedMaxDate('estimatedDate');
|
|
const maxConfDate = getEstimatedOrConfirmedMaxDate('confirmedDate');
|
|
const maxDate = maxConfDate !== '-' ? maxConfDate > maxEstimatedDate ? maxConfDate : maxEstimatedDate : maxEstimatedDate;
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, maxDate);
|
|
}
|
|
}
|
|
|
|
utilsService.executeRegisteredFunction('isNextBtnDisabled', stepInfo);
|
|
}
|
|
|
|
function checkEstimatedDateSet(supplierEstimations) {
|
|
return supplierEstimations.every(supplierEstimation => {
|
|
return supplierEstimation.estimatedDate !== null;
|
|
});
|
|
}
|
|
|
|
function checkConfirmedDateSet(supplierEstimations) {
|
|
return supplierEstimations.every(supplierEstimation => {
|
|
return supplierEstimation.confirmedDate !== null;
|
|
});
|
|
}
|
|
|
|
function addTracking(idSupplier, trackingNumber, trackingUrl) {
|
|
const params = $.param({
|
|
idOrder,
|
|
idSupplier,
|
|
trackingNumber,
|
|
trackingUrl
|
|
});
|
|
|
|
$http({
|
|
method: 'POST',
|
|
data: params,
|
|
url: 'orders/api/addTracking'
|
|
}).then(displayUpdateMessage, utilsService.onHttpError);
|
|
}
|
|
|
|
function updateTracking(trackingInfo) {
|
|
const params = $.param({
|
|
idTracking: trackingInfo.idTracking,
|
|
trackingNumber: trackingInfo.trackingNumber,
|
|
trackingUrl: trackingInfo.trackingUrl
|
|
});
|
|
|
|
$http({
|
|
method: 'POST',
|
|
data: params,
|
|
url: 'orders/api/updateTracking'
|
|
}).then(displayUpdateMessage, utilsService.onHttpError);
|
|
}
|
|
|
|
function removeSupplierEstimation(fctParams) {
|
|
const params = $.param({
|
|
idOrder,
|
|
type: fctParams.type,
|
|
idSupplier: fctParams.idSupplier
|
|
});
|
|
|
|
if(areEstimatedDatesSet) {
|
|
if(!areConfirmedDatesSet && fctParams.type === 'estimation') {
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, 'remove');
|
|
}
|
|
} else if(!areEstimatedDatesSet && areConfirmedDatesSet){
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, 'remove');
|
|
} else if(areEstimatedDatesSet || areConfirmedDatesSet) {
|
|
const maxEstimatedDate = getEstimatedOrConfirmedMaxDate('estimatedDate');
|
|
const maxConfDate = getEstimatedOrConfirmedMaxDate('confirmedDate');
|
|
const maxDate = maxConfDate !== '-' ? maxConfDate > maxEstimatedDate ? maxConfDate : maxEstimatedDate : maxEstimatedDate;
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, maxDate);
|
|
}
|
|
|
|
$http({
|
|
method: 'POST',
|
|
data: params,
|
|
url: 'orders/api/removeSupplierEstimation'
|
|
}).then(displayUpdateMessage, utilsService.onHttpError);
|
|
}
|
|
|
|
function updateSupplierEstimation(date, supplierEstimation) {
|
|
if (Date.parse(date)) {
|
|
const params = $.param({
|
|
idOrder,
|
|
idSupplier: supplierEstimation.idSupplier,
|
|
estimatedDate: supplierEstimation.estimatedDate,
|
|
confirmedDate: supplierEstimation.confirmedDate
|
|
});
|
|
|
|
if (supplierEstimation.confirmedDate && areEstimatedDatesSet) {
|
|
const maxEstimatedDate = getEstimatedOrConfirmedMaxDate('estimatedDate');
|
|
const maxConfDate = getEstimatedOrConfirmedMaxDate('confirmedDate');
|
|
let maxDate = maxEstimatedDate;
|
|
if(maxConfDate !== '-') {
|
|
if(maxConfDate > maxEstimatedDate) {
|
|
maxDate = maxConfDate;
|
|
}
|
|
}
|
|
ordersUtilsService.setMaximumDeliveryDate(idOrder, 0, maxDate);
|
|
}
|
|
|
|
$http({
|
|
method: 'POST',
|
|
data: params,
|
|
url: 'orders/api/updateSupplierEstimation'
|
|
}).then(displayUpdateMessage, utilsService.onHttpError);
|
|
} else {
|
|
const translatedMessage = $translate.instant('orders.messages.WRONG_DATE_FORMAT');
|
|
utilsService.displayMessage('error', translatedMessage);
|
|
}
|
|
}
|
|
|
|
function displayUpdateMessage(response) {
|
|
if (typeof response.data.messages !== 'undefined') {
|
|
response.data.messages.forEach((messageObj) => {
|
|
const translatedMessage = $translate.instant('orders.messages.' + messageObj.message);
|
|
const messageKey = 'key' in messageObj ? messageObj.key : '';
|
|
utilsService.displayMessage(messageObj.code, translatedMessage + messageKey);
|
|
|
|
if (response.data.messages[0].code === 'success') {
|
|
getSupplierEstimations();
|
|
if ('idProduct' in response.data) {
|
|
$scope.isDatePickerOpen['estimatedDate'][response.data.idProduct] = false;
|
|
$scope.isDatePickerOpen['confirmedDate'][response.data.idProduct] = false;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function getEstimationIcon(confirmedDate) {
|
|
return confirmedDate ? 'glyphicon-ok' : 'glyphicon-time';
|
|
}
|
|
|
|
function getEstimatedOrConfirmedMaxDate(key) {
|
|
let maxDate = '2000-01-01';
|
|
let d1;
|
|
let d2;
|
|
|
|
const maxTempDate = $scope.supplierEstimations.length > 0 ?
|
|
$scope.supplierEstimations.reduce((a, b) => {
|
|
d1 = new Date(a[key]);
|
|
d2 = new Date(b[key]);
|
|
|
|
return d1 < d2 ? b : a;
|
|
}) : maxDate;
|
|
|
|
d1 = new Date(maxTempDate[key]);
|
|
d2 = new Date(maxDate);
|
|
maxDate = d1 > d2 ? maxTempDate[key] : maxDate;
|
|
|
|
return maxDate !== '2000-01-01' ? maxDate : '-';
|
|
}
|
|
|
|
function shouldShowAddNewTracking(idSupplier) {
|
|
$scope.$evalAsync(() => {
|
|
$scope.showAddNewTracking[idSupplier] = !$scope.showAddNewTracking[idSupplier];
|
|
});
|
|
}
|
|
|
|
function showHideRemoveDialog(idTracking) {
|
|
$scope.$evalAsync(() => {
|
|
$scope.isRemoveDialogVisible[idTracking] = !$scope.isRemoveDialogVisible[idTracking];
|
|
});
|
|
}
|
|
|
|
function removeTracking(trackingInfo) {
|
|
const params = $.param({
|
|
idTracking: trackingInfo.idTracking
|
|
});
|
|
|
|
$http({
|
|
method: 'POST',
|
|
url: 'orders/api/removeTracking',
|
|
data: params
|
|
}).then(displayUpdateMessage, utilsService.onHttpError);
|
|
}
|
|
|
|
function isTrackingEmpty(trackingData) {
|
|
return trackingData.length === 0;
|
|
}
|
|
|
|
function openDatePicker(dateType, idSupplier) {
|
|
if (!(idSupplier in $scope.isDatePickerOpen[dateType])) {
|
|
$scope.isDatePickerOpen[dateType][idSupplier] = false;
|
|
}
|
|
$scope.isDatePickerOpen[dateType][idSupplier] = !$scope.isDatePickerOpen[dateType][idSupplier];
|
|
}
|
|
|
|
function isDateEditable(dateType, supplierEstimation) {
|
|
return $scope.isDatePickerOpen[dateType][supplierEstimation.idSupplier] || !supplierEstimation[dateType];
|
|
}
|
|
|
|
function showHideRemoveDatesDialog(type, supplierEstimation) {
|
|
$scope.$evalAsync(() => {
|
|
$scope.isRemoveDatesDialogVisible[type][supplierEstimation.idSupplier] = !$scope.isRemoveDatesDialogVisible[type][supplierEstimation.idSupplier];
|
|
});
|
|
}
|
|
}
|
|
})();
|