(function () { global.dashModule .controller('ordersController', ['$scope', '$rootScope', '$http', '$compile', '$translate', '$', 'dataTableHelper', 'utilsService', 'ORDER_STATUSES_ICONS', 'ORDER_STATUSES', ordersController]) .directive('orders', [ordersDirective]); function ordersDirective() { return { restrict: 'E', templateUrl: 'orders/html/ordersTemplate' }; } function ordersController($scope, $rootScope, $http, $compile, $translate, $, dataTableHelper, utilsService, ORDER_STATUSES_ICONS, ORDER_STATUSES) { const translationPath = 'orders.tables.headers.'; $scope.subModule = global.getParameterByName('subModule') || 'ongoing_orders'; $scope.setSubModule = setSubModule; $scope.isSubmoduleVisible = isSubmoduleVisible; $scope.getOngoingOrders = getOngoingOrders; $scope.getOrdersHistory = getOrdersHistory; $scope.brokers = []; addUrlListener(); function addUrlListener() { window.addEventListener('popstate', function (e) { $scope.$evalAsync($scope => { $scope.subModule = e.state ? e.state.subModule : 'ongoing_orders'; }); }, false); } function setSubModule($event) { $scope.subModule = $event.currentTarget.attributes.subModule.value; history.pushState({ subModule: $scope.subModule }, null, '?subModule=' + $scope.subModule); } function isSubmoduleVisible(subModule) { return subModule === $scope.subModule; } function getOngoingOrders() { $http({ method: 'POST', url: 'orders/api/getOngoingOrdersHeaders', }).then(showOngoingOrders, utilsService.onHttpError); } function showOngoingOrders(response) { if (response.data.brokers && response.data.brokers.length > 0) { $scope.brokers = response.data.brokers; } if (response.data.headers.length > 0) { const params = { selector: '#ongoing-orders', url: 'orders/api/getOngoingOrders', hasDetails: true, extraTableOptions: { responsive: false, order: [ [1, 'asc'] ] } }; dataTableHelper.generateColumns(response.data.headers, translationPath, dataTableHelper.showTable, params, formatOrderColumn) .then((table) => { addDetailsEvent(table, params.selector); addAssignBrokerDirectives(); }); } } function addAssignBrokerDirectives() { $('#ongoing-orders tbody').off('click', '.assign-icon'); $('#ongoing-orders tbody').on('click', '.assign-icon', function () { const assignSelector = $(this).parent().find('.assign-broker'); if (assignSelector.length) { assignSelector.remove(); } else { const parent = $(this).parent(); const idOrder = parent.attr('id-order'); const directiveHtml = ''; const scope = $rootScope.$new(); scope.brokers = $scope.brokers; scope.idOrder = idOrder; scope.onUpdate = getOngoingOrders; const comp = $compile($(directiveHtml))(scope); parent.append(comp); } }); } function getOrdersHistory() { $http({ method: 'POST', url: 'orders/api/getOrdersHistoryHeaders', }).then(showOrdersHistory, utilsService.onHttpError); } function showOrdersHistory(response) { if (response.data.length > 0) { const params = { selector: '#orders-history', url: 'orders/api/getOrdersHistory', hasDetails: true, extraTableOptions: { responsive: false, order: [ [1, 'asc'] ] } }; dataTableHelper.generateColumns(response.data, translationPath, dataTableHelper.showTable, params, formatOrderColumn) .then((table) => { addDetailsEvent(table, params.selector); }); } } function addDetailsEvent(table, containerSelector) { $(containerSelector + ' tbody').off('click', 'td.info-control'); $(containerSelector + ' tbody').on('click', 'td.info-control', function () { var tr = $(this).closest('tr'); var row = table.row(tr); if (row.child.isShown()) { row.child.hide(); tr.removeClass('shown'); } else { const directiveHtml = ''; const scope = $rootScope.$new(); scope.data = row.data(); const layerSelector = 'details-layer-' + scope.data.id; row.child('
').show(); const comp = $compile($(directiveHtml))(scope); $('#' + layerSelector).append(comp); tr.addClass('shown'); } }); } function formatOrderColumn(value, translations) { const columnObj = { data: value, title: translations[translationPath + value] }; const renders = getOrderRenders(); columnObj.visible = isColumnVisible(value); if (typeof renders[value] !== 'undefined') { columnObj.render = renders[value]; } return columnObj; } function isColumnVisible(value) { const notVisibleFields = [ 'id', 'idCustomer', 'idCommercialLead', 'idCommercialLeadUser', 'idCustomerInstance', 'deliveryAddress', 'billingFirstName', 'billingLastName', 'billingMail', 'billingAddress', 'customerPhone', 'customerMail', 'commercialLeadPhone', 'commercialLeadMail' ]; return notVisibleFields.indexOf(value) === -1; } function getOrderRenders() { return { orderNumber: ordersNumberRenderer, status: ordersStatusRenderer, orderItems: orderItemsRender, step: orderStepRender, assignedTo: assignedToRender }; function ordersNumberRenderer(data, type, row) { return '' + data + ''; } function ordersStatusRenderer(data) { const status = ORDER_STATUSES[data] || data; return '
' + status + '
'; } function orderItemsRender(data, type, row) { let html = ''; row.packages.forEach((pacakgeObj) => { html += '
'; html += pacakgeObj.units + ' x ' + pacakgeObj.packageName; html += typeof pacakgeObj.shortDesc !== 'undefined' ? ' ( ' + pacakgeObj.shortDesc + ' )' : ''; html += ' '; html += '
'; }); return html; } function orderStepRender(data) { return data.replace(/,/g, '
'); } function assignedToRender(data, type, row) { const newData = data === '' ? $translate.instant('orders.tables.extra.NOT_ASSIGNED') : data; let html = '
'; html += '
' + newData + '
'; html += '
'; html += '
'; return html; } } } })();