(function() { 'use strict'; angular .module('app') .controller('LoyaltyCtrl', LoyaltyCtrl); LoyaltyCtrl.$inject = ['$scope', 'smartRequest', 'Notification']; function LoyaltyCtrl($scope, smartRequest, Notification) { $scope.discounts = []; $scope.currentDiscount = {}; $scope.terms = []; $scope.defaultTerm = 0; $scope.currentTerms = []; $scope.readonlyMode = false; $scope.selectedElement = { type: '', value: 0, currentModal: '', param: {}, info: '', subtype: '' }; $scope.navigationStack = []; $scope.update = function() { smartRequest.get('discount/list', function(data) { for(var i = 0; i < data.discounts.length; i++) { if(data.discounts[i].start_date === '0') { data.discounts[i].start_date = ''; } if(data.discounts[i].end_date === '0') { data.discounts[i].end_date = ''; } data.discounts[i].is_enable = data.discounts[i].is_enable === '1'; data.discounts[i].is_check_all = data.discounts[i].is_check_all === '1'; } $scope.discounts = data.discounts; }); }; $scope.delete = function() { $('#edit-discount-confirm-delete').modal('toggle'); $('#edit-discount').modal('toggle'); smartRequest.post('discount/delete', { id: $scope.currentDiscount.id }, function(data) { $scope.update(); }); }; $scope.add = function() { $scope.currentDiscount = {}; $scope.currentDiscount.value_type = '0'; $('#new-discount').modal(); }; $scope.create = function() { $('#new-discount').modal('toggle'); smartRequest.post('discount/store', { name: $scope.currentDiscount.name, value_type: $scope.currentDiscount.value_type, value: $scope.currentDiscount.value }, function(data) { $scope.update(); }); }; $scope.edit = function(discount) { $scope.currentDiscount = discount; $scope.currentDiscount.new_term_type = $scope.defaultTerm; $scope.updateTerms(); $('#edit-discount').modal(); }; $scope.save = function() { $('#edit-discount').modal('toggle'); smartRequest.post('discount/update', { id: $scope.currentDiscount.id, name: $scope.currentDiscount.name, value_type: $scope.currentDiscount.value_type, value: $scope.currentDiscount.value, is_enable: $scope.currentDiscount.is_enable, start_date: $scope.currentDiscount.start_date, end_date: $scope.currentDiscount.end_date, is_check_all: $scope.currentDiscount.is_check_all }, function(data) { for(var i = 0; i < $scope.currentTerms.length; i++) { var params = []; for(var j = 0; j < $scope.currentTerms[i].params.length; j++) { params.push({ code: $scope.currentTerms[i].params[j].code, value: $scope.currentTerms[i].params[j].value, subtype: $scope.currentTerms[i].params[j].subtype }); } smartRequest.post('discount/term/update', { id: $scope.currentTerms[i].id, is_term: $scope.currentTerms[i].is_term === false, value: JSON.stringify(params) }); } Notification.success('Скидка сохранена'); $scope.update(); }); }; $scope.updateTerms = function() { smartRequest.get('discount/term/list?discount_code=' + $scope.currentDiscount.code, function(data) { for(var i = 0; i < data.discount_terms.length; i++) { data.discount_terms[i].is_term = data.discount_terms[i].is_term === '0'; } $scope.currentTerms = data.discount_terms; }); }; $scope.addTerm = function() { smartRequest.post('discount/term/store', { discount_code: $scope.currentDiscount.code, discount_type: $scope.currentDiscount.new_term_type }, function(data) { $scope.update(); $scope.updateTerms(); }); }; $scope.askDeleteTerm = function(term) { $scope.currentTerm = term; $('#edit-term-confirm-delete').modal(); }; $scope.deleteTerm = function() { $('#edit-term-confirm-delete').modal('toggle'); smartRequest.post('discount/term/delete', { id: $scope.currentTerm.id }, function(data) { $scope.updateTerms(); }); }; /* MENU BLOCK */ $scope.selectMenuItemParams = { currentMenu: 0, currentFolder: 0, menus: [], folders: [], items: [] }; $scope.selectedMenuElement = {}; $scope.selectMenuNavigationStack = []; $scope.selectMenuItem = function() { $scope.selectMenuItemParams = { currentMenu: 0, currentFolder: 0, menus: [], folders: [], items: [] }; smartRequest.get('menu/list', function (data) { $scope.selectMenuItemParams.menus = data.menus; }); }; $scope.openMenuItem = function(menu) { $scope.selectMenuItemParams.currentMenu = menu.id; $scope.selectMenuNavigationStack.push({ type: 'menu', value: menu }); smartRequest.get('menu/folder/list?menu_id=' + $scope.selectMenuItemParams.currentMenu + '&parent_id=0', function (data) { $scope.selectMenuItemParams.folders = data.folders; }); smartRequest.get('menu/dish/list?menu_id=' + $scope.selectMenuItemParams.currentMenu + '&parent_id=0', function (data) { $scope.selectMenuItemParams.items = data.dishes; }); }; $scope.openFolderItem = function(folder) { $scope.selectMenuItemParams.currentFolder = folder.id; $scope.selectMenuNavigationStack.push({ type: 'folder', value: folder }); smartRequest.get('menu/folder/list?menu_id=' + $scope.selectMenuItemParams.currentMenu + '&parent_id=' + $scope.selectMenuItemParams.currentFolder, function (data) { $scope.selectMenuItemParams.folders = data.folders; }); smartRequest.get('menu/dish/list?menu_id=' + $scope.selectMenuItemParams.currentMenu + '&parent_id=' + $scope.selectMenuItemParams.currentFolder, function (data) { $scope.selectMenuItemParams.items = data.dishes; }); }; $scope.upMenuItem = function() { if($scope.selectMenuNavigationStack.length > 1) { $scope.selectMenuNavigationStack.pop(); var page = $scope.selectMenuNavigationStack.pop(); if(page.type === 'menu') { $scope.openMenuItem(page.value); } if(page.type === 'folder') { $scope.openFolderItem(page.value); } } else { $scope.selectMenuItem(); } }; /* END MENU BLOCK */ /* CLIENT BLOCK */ $scope.selectClientItemParams = { clients: [], groups: [], isParent: true }; $scope.selectClientItem = function() { $scope.selectClientItemParams = { clients: [], groups: [], isParent: true }; $scope.currentPage = 1; $scope.pages = 1; smartRequest.get('v1/clientgroup', function(data) { $scope.selectClientItemParams.groups = data.groups; }); }; $scope.openGroup = function(group) { $scope.selectClientItemParams.isParent = false; $scope.currentGroup = group.id; $scope.currentPage = 1; $scope.selectClientItemParams.groups = []; $scope.selectClientItemParams.clients = []; smartRequest.get('v1/clients?group_id=' + $scope.currentGroup + '&page=' + $scope.currentPage, function(data) { $scope.selectClientItemParams.clients = data.clients; $scope.pages = data.pages; $scope.currentGroup = data.currentGroup; }); }; $scope.pager = function(currentPage) { $scope.selectClientItemParams.isParent = false; $scope.selectClientItemParams.groups = []; $scope.selectClientItemParams.clients = []; smartRequest.get('v1/clients?group_id=' + $scope.currentGroup + '&page=' + $scope.currentPage, function(data) { $scope.selectClientItemParams.clients = data.clients; $scope.pages = data.pages; $scope.currentGroup = data.currentGroup; }); }; $scope.upGroup = function() { $scope.selectClientItemParams = { clients: [], groups: [], isParent: true }; smartRequest.get('v1/clientgroup', function(data) { $scope.selectClientItemParams.groups = data.groups; }); }; /* END CLIENT BLOCK */ $scope.selectItem = function(value, type, info) { $scope.selectedElement.value = value; $scope.selectedElement.type = type; $scope.selectedElement.info = info; }; $scope.editTermParam = function(param) { $scope.$eval(param.type[0].toLowerCase() + param.type.slice(1) + '()'); $scope.selectedElement = { type: param.type, value: param.value, currentModal: '#edit-' + param.type.toLowerCase(), param: param, info: param.info, subtype: param.subtype }; $($scope.selectedElement.currentModal).modal(); }; $scope.confirmSelect = function() { $($scope.selectedElement.currentModal).modal('toggle'); $scope.selectedElement.param.value = $scope.selectedElement.value; $scope.selectedElement.param.info = $scope.selectedElement.info; $scope.selectedElement.param.subtype = $scope.selectedElement.type; }; $scope.update(); smartRequest.get('discount/type/list', function(data) { $scope.terms = data.discount_types; $scope.defaultTerm = data.default.code; }); smartRequest.get('menu/readonly', function (data) { $scope.readonlyMode = data.readonly; if (data.readonly) { Notification.error('Режим просмотра!'); } }); } })();