(function () { global.dashModule .directive('editProcesses', editProcessesDirective) .controller('editProcessesCtrl', ['$scope', '$http', '$', '$timeout', '$translate', 'utilsService', editProcessesCtrl]); function editProcessesDirective() { return { restrict: 'E', templateUrl: 'processes/html/editProcessesTemplate' }; } function editProcessesCtrl($scope, $http, $, $timeout, $translate, utilsService) { let processStepsHeight; let availableStepDragged = {}; let processStepDragged = {}; $scope.initPRocessEdit = initPRocessEdit; $scope.getSteps = getSteps; $scope.isProcessSelected = isProcessSelected; $scope.getStepPadding = getStepPadding; $scope.startDragFromAvailableSteps = startDragFromAvailableSteps; $scope.endDragFromAvailableSteps = endDragFromAvailableSteps; $scope.availableStepDropped = availableStepDropped; $scope.startDragFromProcessSteps = startDragFromProcessSteps; $scope.endDragFromProcessSteps = endDragFromProcessSteps; $scope.processStepDropped = processStepDropped; $scope.editProcess = editProcess; $scope.setProcessAfterEdit = setProcessAfterEdit; $scope.resetProducts = resetProducts; $scope.isVisibleToCustomer = isVisibleToCustomer; function isVisibleToCustomer(stepVisibleInfo) { return stepVisibleInfo === '1' ? 'glyphicon-eye-open' : 'glyphicon-eye-close'; } function initPRocessEdit(){ getProcessNames(); getCountries(); } function getProcessNames(isAfterEdit = false) { $http({ methos: 'POST', url: 'processes/api/getProcessNames' }).then((response) => {setProcessNames(response, isAfterEdit);}, utilsService.onHttpError); } function setProcessNames(response, isAfterEdit) { $scope.processes = response.data ? response.data : []; if(isAfterEdit){ setProcessAfterEdit(); } } function getCountries() { const params = $.param({ getArray: true }); $http({ method: 'POST', data: params, url: 'countries/api/getAllCountries' }).then(setCountries, utilsService.onHttpError); } function setCountries(response){ if(response.data){ $scope.countries = response.data; } } function getSteps() { const processSelected = $scope.processes.find(processData => { return processData.id === $scope.idSelectedProccess.id; }); $scope.processName = processSelected.name; $scope.selectedCountry = processSelected.idCountry; $http({ method: 'POST', data: $.param({ idProcess: $scope.idSelectedProccess.id }), url: 'processes/api/getStepsForProcessSelected' }).then(setSteps, utilsService.onHttpError); } function setSteps(response) { if (response.data) { $scope.availableSteps = response.data.steps ? response.data.steps : {}; $scope.processSteps = response.data.processSteps ? response.data.processSteps : []; } processStepsHeight = $('#process-steps-list').height(); $('.available-steps-list').css({ height: processStepsHeight }); } function isProcessSelected() { return $scope.idSelectedProccess && $scope.idSelectedProccess.id ? $scope.idSelectedProccess.id : $scope.idSelectedProccess; } function getStepPadding(position) { return (position + 1) * 2; } function startDragFromAvailableSteps(event, ui, idStepDragged) { $('#available-steps-list').css({ height: '400px', overflow: 'visible' }); $('#process-steps-list').addClass('allowed-drop-zone'); availableStepDragged = { idStep: idStepDragged, shortDesc: $scope.availableSteps[idStepDragged].shortDesc, isVisibleForCustomer: $scope.availableSteps[idStepDragged].isVisibleForCustomer }; } function endDragFromAvailableSteps() { $('#available-steps-list').css({ height: processStepsHeight, 'overflow-y': 'scroll' }); $('#process-steps-list').removeClass('allowed-drop-zone'); } function availableStepDropped(event, ui) { let isStepMoved = false; if (Object.keys(availableStepDragged).length === 0) { processStepDragged = JSON.parse($(ui.helper).attr('step-info')); if (typeof processStepDragged === 'object') { isStepMoved = $scope.processSteps.some(processStep => { return processStep.idStep === processStepDragged.idStep; }); } } if (!isStepMoved) { $scope.processSteps.push(availableStepDragged); delete $scope.availableSteps[availableStepDragged.idStep]; availableStepDragged = {}; } $(ui.helper).css({ position: 'relative', left: 0, top: 0 }); } function startDragFromProcessSteps(event, ui) { $('#process-steps-list').css({ height: '400px', overflow: 'visible' }); $('#available-steps-list').addClass('allowed-drop-zone'); $('#process-steps-list').addClass('allowed-drop-zone'); processStepDragged = JSON.parse($(ui.helper).attr('step-info')); } function endDragFromProcessSteps() { processStepsHeight = $('#process-steps-list').height(); $('#process-steps-list').css({ height: processStepsHeight, 'overflow-y': 'scroll' }); $('#available-steps-list').removeClass('allowed-drop-zone'); $('#process-steps-list').removeClass('allowed-drop-zone'); $timeout(function () { $('.rearrange-steps').sortable('refreshPositions'); }); } function processStepDropped(event, ui) { if (typeof processStepDragged.idStep !== 'undefined') { $scope.availableSteps[processStepDragged.idStep] = processStepDragged; $scope.processSteps = $scope.processSteps.filter(removeDroppedStep); } processStepDragged = {}; $(ui.helper).css({ position: 'relative', left: 0, top: 0 }); } function removeDroppedStep(processStep) { return processStep.idStep !== processStepDragged.idStep; } function editProcess() { if ($scope.processSteps.length !== 0) { $http({ method: 'POST', url: 'processes/api/editProcess', data: $.param({ idProcess: $scope.idSelectedProccess.id, data: { processName: $scope.processName, idCountry: $scope.selectedCountry, processSteps: $scope.processSteps } }) }).then(displayEditMessage, utilsService.onHttpError); } else { const message = $translate.instant('processes.messages.NO_STEPS'); utilsService.displayMessage('error', message); } } function displayEditMessage(response) { if (response.data.hasOwnProperty('messageData') && response.data.messageData.length > 0) { response.data.messageData.forEach(messageData => { const message = $translate.instant('processes.messages.' + messageData.message); utilsService.displayMessage(messageData.code, message); if (messageData.code === 'success') { getProcessNames(true); } }); } } function setProcessAfterEdit(idProcessUpdated = 0) { if (idProcessUpdated) { $scope.idSelectedProccess = { id: idProcessUpdated }; getSteps(); } } function resetProducts() { getSteps(); const message = $translate.instant('processes.messages.RESET_PROCESS'); utilsService.displayMessage('success', message); } } })();