angular.module('kalgudiApp.eCommerce').controller('storeAdminController', ['$scope', '$state', '$rootScope', '$uibModal', '$interval', 'kalgudiLiterals', 'eCommerceServices', '$uibModal', function ($scope, $state, $rootScope, $uibModal, $interval, kalgudiLiterals, eCommerceServices, $uibModal) { $scope.orderType = ''; $scope.selectedState = ''; $scope.allOrders = false; $scope.openOrders = false; $scope.closedOrders = false; $scope.ordersTakenByMe = false; $scope.minPrice = ''; $scope.maxPrice = ''; $scope.minDate = new Date(2018, 01, 01), $scope.maxDate = new Date(); $scope.sortBy = ''; $scope.sortOrder = ''; $scope.offset = 0; $scope.limit = 10; $scope.totalResults = 0; $scope.fiterMenuFlag = false; $scope.isFilterApplied = false; $scope.ordersList = []; orderListSet = new Set(); $scope.level = '70px'; $scope.time = '2 hrs left'; $scope.statesArray = [ { state: 'ORD_RECEIVED', name: 'Order Received' }, { state: 'ORD_INP', name: 'Order in progress' }, { state: 'QC_WAITING', name: 'Waiting for QC' }, { state: 'QC_INP', name: 'QC in progress' }, { state: 'PKG_WAITING', name: 'Waiting for Packging' }, { state: 'PKG_INP', name: 'Packging in progress' }, { state: 'TR_WAITING', name: 'Waiting for Intransit' }, { state: 'TRN_INP', name: 'Intransit' }, { state: 'ORD_DELIVERED', name: 'Delivered' }, { state: 'FMT_REJECTIONS', name: 'FMT Rejected' }, { state: 'TIME_OUT', name: 'Timeout' }, { state: 'REFUND_INPROGRESS', name: 'Refund in progress' }, { state: 'CLOSED', name: 'Order Closed' }, { state: 'CANCEL_REQUESTED', name: 'Order Cancelled' } ]; $scope.init = function () { var adminflag = false; $scope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState) { debugger const data = JSON.parse(localStorage.getItem('userdata')); if (fromState.name !== '') { if (data.listOfPageDetails) { for (var i = 0; i < data.listOfPageDetails.length; i++) { if ((data.listOfPageDetails[i].pageId === 'O00k4jn1PROCRE2018111425291806UNH001') || (data.listOfPageDetails[i].pageId === 'O00000u1PROCRE2018111424408497UNH001') && (data.listOfPageDetails[i].relation === 'CONTRIBUTOR')) { $state.go('eCommerce.storeadmin'); adminflag = true; break; } } if (!adminflag) { $state.go(fromState.name); } } } else { $state.go('home'); } }); $scope.getAllOrders(0, 10); } /* Date picker */ $scope.datevar = { fromDate: new Date(), toDate: new Date() } $scope.dateFormat = 'dd-MM-yyyy'; $scope.datePickerOptions = { formatYear: 'yy', startingDay: 1, minDate: new Date(1995, 5, 22), maxDate: new Date(2030, 5, 22) }; //Min date $scope.showMinDate = false; $scope.openMinDatePicker = function (indexDate) { $scope.showMinDate = true; }; $scope.minDateChanged = function (date) { console.log(date); }; //Max date $scope.showMaxDate = false; $scope.openMaxDatePicker = function (indexDate) { $scope.showMaxDate = true; }; $scope.maxDateChanged = function (date) { console.log(date); }; /* Date picker ends */ // Prepare request object var getRequestPayload = function () { if ($scope.minDate && $scope.maxDate) { return { orderType: $scope.orderType, orderTypeValue: $scope.orderTypeValue, state: $scope.selectedState.state, minPrice: $scope.minPrice || 0, maxPrice: $scope.maxPrice || 0, minDate: new Date($scope.minDate).toISOString(), maxDate: new Date($scope.maxDate).toISOString(), sortBy: $scope.sortBy, sortOrder: $scope.sortOrder }; } else { return { orderType: $scope.orderType, orderTypeValue: $scope.orderTypeValue, state: $scope.selectedState.state, minPrice: $scope.minPrice || 0, maxPrice: $scope.maxPrice || 0, minDate: $scope.minDate, maxDate: $scope.maxDate, sortBy: $scope.sortBy, sortOrder: $scope.sortOrder }; } } //filter applied $scope.submitFilter = function () { $scope.fiterMenuFlag = false; $scope.offset = 0; $scope.limit = 10; if ($scope.orderType || $scope.orderTypeValue || $scope.selectedState || $scope.minPrice || $scope.maxPrice || $scope.minDate || $scope.maxDate || $scope.sortBy || $scope.sortOrder || $scope.allOrders || $scope.openOrders || $scope.closedOrders || $scope.ordersTakenByMe) { $scope.isFilterApplied = true; var requestPayload = getRequestPayload(); console.log(requestPayload); $scope.getAllOrdersFiltered(requestPayload, $scope.offset, $scope.limit); } else { $scope.getAllOrders($scope.offset, $scope.limit); } } //filter cleared $scope.clearFilter = function () { $scope.isFilterApplied = false; $scope.orderType = ''; $scope.orderTypeValue = ''; $scope.selectedState = ''; $scope.minPrice = ''; $scope.maxPrice = ''; $scope.minDate = '', $scope.maxDate = ''; $scope.sortBy = ''; $scope.sortOrder = ''; $scope.allOrders = false; $scope.openOrders = false; $scope.closedOrders = false; $scope.ordersTakenByMe = false; $scope.offset = 0; $scope.limit = 10; } //select orders $scope.scrollTo = function (orderTypeSelected) { console.log('orderTypeSelected ', orderTypeSelected); switch (orderTypeSelected) { case "allOrders": $scope.orderType = orderTypeSelected; $scope.allOrders = true; $scope.openOrders = false; $scope.closedOrders = false; $scope.ordersTakenByMe = false; break; case "openOrders": $scope.orderType = orderTypeSelected; $scope.allOrders = false; $scope.openOrders = true; $scope.closedOrders = false; $scope.ordersTakenByMe = false; break; case "closedOrders": $scope.orderType = orderTypeSelected; $scope.allOrders = false; $scope.openOrders = false; $scope.closedOrders = true; $scope.ordersTakenByMe = false; break; case "ordersTakenByMe": $scope.orderType = orderTypeSelected; $scope.allOrders = false; $scope.openOrders = false; $scope.closedOrders = false; $scope.ordersTakenByMe = true; break; default: break; } }; $scope.sortingOrderSelected = false; $scope.sort = function (sortBy) { if (sortBy) { $scope.sortBy = sortBy; $scope.sortingOrderSelected = !$scope.sortingOrderSelected; if ($scope.sortingOrderSelected) { $scope.sortOrder = 'desc'; } else { $scope.sortOrder = 'asc'; } $scope.submitFilter(); } } //pagination concept // $scope.resultsToShow = $scope.totalResults / $scope.limit; // $scope.resultLeft = $scope.totalResults % $scope.limit; // if ($scope.resultLeft && $scope.resultLeft > 0) { // $scope.resultsToShow = $scope.resultsToShow + $scope.resultLeft; // } //load more results $scope.loadMore = function (btnType) { if (btnType == 'Next') { $scope.offset += $scope.limit; } else if (btnType == 'Previous') { $scope.offset -= $scope.limit; } if ($scope.isFilterApplied) { var requestPayload = getRequestPayload(); $scope.getAllOrdersFiltered(requestPayload, $scope.offset, $scope.limit); } else { $scope.getAllOrders($scope.offset, $scope.limit); } } //get filtered ordersList $scope.getAllOrdersFiltered = function (requestPayload, offset, limit) { console.log(offset, ' to ', limit); eCommerceServices.getAllOrdersListFiltered(requestPayload, offset, limit).then( function (response) { $rootScope.spinerisActive = false; if (response.code === 200) { response.data = JSON.parse(response.data); $scope.ordersList = response.data; for (var i = 0; i < $scope.ordersList.length; i++) { $scope.calculateTimeout($scope.ordersList[i]); } $scope.totalResults = response.numFound; } else { $scope.clearOrderList(); $rootScope.showSuccessMessage('No data found', 'Please try again with different filters', 2500); } }, function (err) { $rootScope.spinerisActive = false; $rootScope.showErrorMessage('Something went wrong', 'Please try again after some time', 2500); $scope.clearOrderList(); }); }; //get all orders list $scope.getAllOrders = function (offset, limit) { console.log(offset, ' to ', limit); eCommerceServices.getAllOrdersList(offset, limit).then( function (response) { $rootScope.spinerisActive = false; if (response.code === 200 || response.code === 201) { var data = JSON.parse(response.data); $scope.ordersList = data; for (var i = 0; i < $scope.ordersList.length; i++) { $scope.calculateTimeout($scope.ordersList[i]); } $scope.totalResults = response.numFound; } else { $scope.clearOrderList(); $rootScope.showSuccessMessage('No data found', 'Please try again', 2500); } }, function (err) { $rootScope.spinerisActive = false; $rootScope.showErrorMessage('Something went wrong', 'Please try again after some time', 2500); $scope.clearOrderList(); }); }; $scope.clearOrderList = function () { $scope.ordersList = []; $scope.offset = 0; $scope.limit = 10; $scope.totalResults = 0; } /* ORDER TABS */ $scope.tabs = ["All", "Cancelled", "Rejected", "Timeout", "Returned", "Delivered"]; $scope.selectedTab = "All"; $scope.selectedActivityTab = 0; $scope.orderLiterals = kalgudiLiterals; $scope.activityTabs = { ALL: 0, CANCELLED: 1, REJECTED: 2, TIMEOUT: 3, RETURNED: 4, DELIVERED: 5 }; $scope.toggleTabs = function (selectedTab) { $scope.selectedActivityTab = selectedTab; $scope.selectedSearchType = {}; $scope.isDisabled = true; $rootScope.spinerisActive = true; if (selectedTab == $scope.activityTabs.ALL) { $scope.clearFilter(); } if (selectedTab == $scope.activityTabs.DELIVERED) { $scope.clearFilter(); $scope.selectedState = { state: 'ORD_DELIVERED', name: 'Delivered' }; $scope.submitFilter(); } if (selectedTab == $scope.activityTabs.REJECTED) { $scope.clearFilter(); $scope.selectedState = { state: 'FMT_REJECTIONS', name: 'FMT Rejected' }; $scope.submitFilter(); } if (selectedTab == $scope.activityTabs.TIMEOUT) { $scope.clearFilter(); $scope.selectedState = { state: 'TIME_OUT', name: 'Timeout' }; $scope.submitFilter(); } if (selectedTab == $scope.activityTabs.RETURNED) { $scope.clearFilter(); $scope.selectedState = { state: 'CLOSED', name: 'Order Closed' }; $scope.submitFilter(); } if (selectedTab == $scope.activityTabs.CANCELLED) { $scope.clearFilter(); $scope.selectedState = { state: 'CANCEL_REQUESTED', name: 'Order Cancelled' }; $scope.submitFilter(); } $rootScope.spinerisActive = false; }; $scope.searchArray = [ { name: "Order Id", placeholder: "Enter the Order Id", value: "ORDER_ID", enteredValue: "" }, { name: "Buyer", placeholder: "Enter the Buyer Name", value: "BUYER_NAME", enteredValue: "" }, { name: "Seller", placeholder: "Enter the Seller Name", value: "SELLER_NAME", enteredValue: "" }, { name: "Product", placeholder: "Enter the Product Name", value: "PRODUCT_NAME", enteredValue: "" } ]; $scope.selectedSearchType; $scope.searchOrders = function (selectedSearch) { $scope.orderType = selectedSearch.value; $scope.orderTypeValue = selectedSearch.enteredValue; $scope.submitFilter(); } $scope.isDisabled = true; $scope.enabledSearch = function (selectedSearch) { if (selectedSearch) { $scope.isDisabled = false; } else { $scope.isDisabled = true; } } $scope.getCurrentStateLiteral = function (currentState) { if (currentState == 'ORD_RECEIVED') { return 'Order Received'; } if (currentState == 'ORD_INP') { return 'Order in progress'; } if (currentState == 'QC_WAITING') { return 'Waiting for QC'; } if (currentState == 'QC_INP') { return 'QC in progress'; } if (currentState == 'PKG_WAITING') { return 'Waiting for Packging'; } if (currentState == 'PKG_INP') { return 'Packging in progress'; } if (currentState == 'TR_WAITING') { return 'Waiting for Intransit'; } if (currentState == 'TR_INP') { return 'Intransit'; } if (currentState == 'ORD_DELIVERED') { return 'Delivered'; } if (currentState == 'FMT_REJECTIONS') { return 'FMT Rejected'; } if (currentState == 'TIME_OUT') { return 'Timeout'; } if (currentState == 'REFUND_INPROGRESS') { return 'Refund in progress'; } if (currentState == 'CLOSED') { return 'Order Closed'; } if (currentState == 'CANCEL_REQUESTED') { return 'Order Cancelled'; } if (currentState == 'QC_FAILURES') { return 'QC Failed'; } } $scope.calculateTimeout = function (order) { var expiryTime; var entryTime; var timeLeft = 100; var percentage; var seconds; var timeout = {}; if (order.stateInfo.entryTS && order.stateInfo.expiryTS) { entryTime = new Date(order.stateInfo.entryTS); expiryTime = new Date(order.stateInfo.expiryTS); percentage = ((expiryTime - new Date()) / (expiryTime - entryTime)) * 100; timeLeft = timeLeft - percentage; seconds = (expiryTime - new Date()) / 1000; var days = Math.floor(seconds / (3600 * 24)); seconds -= days * 3600 * 24; var hrs = Math.floor(seconds / 3600); seconds -= hrs * 3600; var mnts = Math.floor(seconds / 60); seconds -= mnts * 60; order.stateInfo.timeLeft = timeLeft + '%'; order.stateInfo.days = ""; switch (true) { case Boolean(days > 0): order.stateInfo.days += days + " Day(s), "; case Boolean(hrs > 0): order.stateInfo.days += hrs + " Hr(s), "; case Boolean(mnts > 0): order.stateInfo.days += mnts + " Minute(s)"; } } return order; } $scope.openStateMachineTimeConfig = function () { $scope.finalConfigData = []; eCommerceServices.getStateMachineTimeConfig().then( function (response) { if (response.code === 200 && response.data) { var data = JSON.parse(response.data); if ($scope.finalConfigData.length == 0) { for (i in data) { var timeoutConfigData = {}; timeoutConfigData.title = $scope.getCurrentTimoutStateLiteral(i); timeoutConfigData.time = data[i]; timeoutConfigData.state = i; $scope.finalConfigData.push(timeoutConfigData); } } console.log($scope.finalConfigData); } }, function (err) { console.log('Unable to get the State Machine Time Data'); } ); var obj = { configData: $scope.finalConfigData, }; $scope.timeoutConfig = obj; $scope.modalInstance = $uibModal.open({ templateUrl: $rootScope.themebasepathvalue + 'eCommerce/stateMachineConfig.html', scope: $scope, windowClass: 'app-modal-window', size: 'lg', resolve: { items: function () { return obj; } } }); } /* * Close the $uibModal */ $scope.cancel = function () { $scope.modalInstance.close(); } $interval(callAtInterval, 300000); function callAtInterval() { $scope.init(); console.log("Interval occurred"); } $scope.updateStateMachineTimeConfig = function (newTimeConfig) { $rootScope.spinerisActive = true; var requestPayload = { ORD_INP: '', QC_WAITING: '', QC_INP: '', PKG_WAITING: '', PKG_INP: '', TR_WAITING: '', TR_INP: '' }; for (var i = 0; i < newTimeConfig.length; i++) { if (newTimeConfig[i].state === 'ORD_INP') { requestPayload.ORD_INP = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'QC_WAITING') { requestPayload.QC_WAITING = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'QC_INP') { requestPayload.QC_INP = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'PKG_WAITING') { requestPayload.PKG_WAITING = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'PKG_INP') { requestPayload.PKG_INP = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'TR_WAITING') { requestPayload.TR_WAITING = newTimeConfig[i].time; } if (newTimeConfig[i].state === 'TR_INP') { requestPayload.TR_INP = newTimeConfig[i].time; } } if (newTimeConfig) { eCommerceServices.updateStateMachineTimeConfig(requestPayload).then( function (response) { if (response.code === 201) { $rootScope.spinerisActive = false; $scope.cancel(); $rootScope.showSuccessMessage('Configuration Updated Successfully'); } }, function (err) { $rootScope.spinerisActive = false; $rootScope.showErrorMessage('Something went wrong', 'Please try again after some time', 2500); } ); } } $scope.getCurrentTimoutStateLiteral = function (currentState) { if (currentState == 'ORD_RECEIVED') { return 'Waiting for seller acceptance'; } if (currentState == 'ORD_INP') { return 'Order to be in progress'; } if (currentState == 'QC_WAITING') { return 'Waiting for Quality check acceptance'; } if (currentState == 'QC_INP') { return 'Order to be in Quality check state'; } if (currentState == 'PKG_WAITING') { return ' Waiting for packer to accept'; } if (currentState == 'PKG_INP') { return 'Order to be in Packing state'; } if (currentState == 'TR_WAITING') { return 'Waiting for transporter acceptance'; } if (currentState == 'TR_INP') { return 'Order to be in Transportation'; } if (currentState == 'ORD_DELIVERED') { return 'Delivered'; } if (currentState == 'FMT_REJECTIONS') { return 'FMT Rejected'; } if (currentState == 'TIME_OUT') { return 'Timeout'; } if (currentState == 'REFUND_INPROGRESS') { return 'Refund in progress'; } if (currentState == 'CLOSED') { return 'Order Closed'; } if (currentState == 'CANCEL_REQUESTED') { return 'Order Cancelled'; } if (currentState == 'QC_FAILURES') { return 'QC Failed'; } } $scope.downloadSettlements = function () { eCommerceServices.getSettlementsFileUrl().then( function (response) { if (response.code === 201) { $rootScope.spinerisActive = false; var a = document.createElement("a"); a.download = response.data; a.href = response.data; a.target = '_blank'; a.click(); } else if (response.code === 401) { $rootScope.spinerisActive = false; $rootScope.showErrorMessage('You are not authorised to perform this action', 2500); } }, function (err) { $rootScope.showErrorMessage('Something went wrong', 'Please try again after some time', 2500); } ); } $scope.init(); }]);