angular.module('odoo') /** * */ .controller('OpportunitiesController', function ( $scope, $ionicPopup, $ionicFilterBar, $ionicActionSheet, deviceFactory, crmStagesDataFactory, opportunitiesDataFactory ) { $scope.loading = false; $scope.selectedIndex = -1; $scope.search = null; $scope.stages = []; $scope.opportunities = []; $scope.groupedOpportunities = []; $scope.stage = { previous: null, current: null, next: null }; $scope.stageToMove = {}; /** * */ $scope.$on("$ionicSlides.sliderInitialized", function (event, data) { $scope.slider = data.slider; }); /** * */ $scope.$on("$ionicSlides.slideChangeStart", function (event, data) { $scope.loading = true; }); /** * */ $scope.$on("$ionicSlides.slideChangeEnd", function (event, data) { $scope.loading = false; $scope.stageChanged(data.slider.activeIndex); }); /** * */ $scope.$on("$ionicView.enter", function () { $scope.initialize(); }); /** * */ $scope.initialize = function () { $scope.loading = true; $scope.getStages(function (stages) { $scope.slider.updateLoop(); $scope.getOpportunities(function (opportunities) { $scope.loading = false; $scope.groupOpportunities(); $scope.$apply(); }, function (err) { $scope.loading = false; }); }, function (err) { $scope.loading = false; deviceFactory.toast('No se ha podido cargar las oportunidades'); }); } /** * */ $scope.getStages = function (success, error) { crmStagesDataFactory.sync(function (stages) { $scope.stages = stages; $scope.stageChanged(0); success(stages); }, function (syncErr) { crmStagesDataFactory.getAll(function (stages) { $scope.stages = stages; $scope.stageChanged(0); success(stages); }, function (getAllErr) { error(getAllErr); }); }); } /** * */ $scope.getOpportunities = function (success, error) { opportunitiesDataFactory.sync(function (opportunities) { $scope.opportunities = opportunities; success(opportunities); }, function (syncErr) { opportunitiesDataFactory.getAll(function (opportunities) { $scope.opportunities = opportunities; success(opportunities); }, function (getAllErr) { error(getAllErr); }); }); } /** * */ $scope.groupOpportunities = function () { $scope.groupedOpportunities = $scope.opportunities.filter(function (item) { return item.stage_id == $scope.stage.current.remote_id; }); } /** * */ $scope.toggleSearch = function () { $scope.search = $ionicFilterBar.show({ items: $scope.groupedOpportunities, update: function (filtered, text) { $scope.groupedOpportunities = filtered; } }); } /** * Change the state */ $scope.changeStage = function (index) { switch (index) { case 0: $scope.slider.slidePrev(); break; case 1: $scope.slider.slideTo(0); break; case 2: $scope.slider.slideNext(); break; } } /** * Change stage name on title */ $scope.stageChanged = function (index) { if (!$scope.stages.length) { return; } $scope.stage.previous = index - 1 >= 0 ? $scope.stages[index - 1] : $scope.stages[index]; $scope.stage.current = $scope.stages[index]; $scope.stage.next = index + 1 <= $scope.stages.length ? $scope.stages[index + 1] : $scope.stages[index]; $scope.groupOpportunities(); if (!$scope.$$phase) { $scope.$apply(); } } /** * Show availables stages to move */ $scope.showStagesToMove = function () { $ionicPopup.show({ scope: $scope, title: 'Mover a', templateUrl: 'templates/sales/crm-stages.html', buttons: [ { text: 'Mover', type: 'button-positive', onTap: function (e) { // console.log(e); $scope.moveOpportunity(); } }, { text: 'Cancelar', type: 'button-default', onTap: function (e) { // e.preventDefault(); } } ] }); } /** * */ $scope.selectStageToMove = function (index) { $scope.stageToMove = $scope.stages[index]; } /** * Move opportunity to stage */ $scope.moveOpportunity = function () { console.log($scope.stageToMove); deviceFactory.toast('Se moviĆ³ la oportunidad a ' + $scope.stageToMove.name); } /** * Open the actionsheet action options */ $scope.openOptions = function (index) { deviceFactory.vibrate(); $scope.selectedIndex = index; console.log($scope.opportunities[index]); $ionicActionSheet.show({ titleText: 'Acciones', buttons: [ { text: ' Abrir' }, { text: ' Mover a' } ], destructiveText: ' Eliminar', cancel: function () { $scope.customer = {}; $scope.selectedIndex = -1; }, buttonClicked: function (index) { $scope.selectedIndex = -1; switch (index) { case 0: $scope.show(); break; case 1: $scope.showStagesToMove(); break; default: $scope.show(); } return true; }, destructiveButtonClicked: function () { $scope.selectedIndex = -1; $scope.delete(); return true; } }); } });