angular.module('odoo') /** * */ .controller('LeadsController', function ( $q, $scope, $ionicModal, $ionicActionSheet, $ionicFilterBar, leadsRemoteFactory, leadsStorageFactory, opportunitiesStorageFactory, customersStorageFactory, sqlFactory, deviceFactory ) { $scope.loading = false; $scope.selectedIndex = -1; $scope.leads = []; $scope.lead = {}; $scope.conversion = { action: 'convert', customer: 'create' }; $scope.search = null; $ionicModal.fromTemplateUrl('templates/sales/lead.html', { scope: $scope }).then(function (modal) { $scope.leadModal = modal; }); $ionicModal.fromTemplateUrl('templates/sales/leadToOpportunity.html', { scope: $scope }).then(function (modal) { $scope.leadToOpportunityModal = modal; }); /** * */ $scope.$on('$ionicView.enter', function () { $scope.fill(false); }); /** * */ $scope.$on('$destroy', function () { $scope.leadModal.remove(); $scope.leadToOpportunityModal.remove(); }); /** * */ $scope.$on('modal.hidden', function () { $scope.lead = {}; }); /** * */ $scope.$on('device.shaked', function () { if (!$scope.leadModal.isShown()) { $scope.fill(false); } }); /** * */ $scope.fill = function (refresh) { $scope.loading = !refresh; leadsRemoteFactory.sync(function (leads) { console.log('Leads sync correctly and receive ' + leads.length + ' items'); $scope.getLeads(function () { $scope.$broadcast('scroll.refreshComplete'); $scope.loading = false; }, function (getLeadsErr) { $scope.$broadcast('scroll.refreshComplete'); $scope.loading = false; deviceFactory.toast('No se pudo obtener las iniciativas'); }); }, function (syncErr) { $scope.getLeads(function () { $scope.$broadcast('scroll.refreshComplete'); $scope.loading = false; }, function (getLeadsErr) { $scope.$broadcast('scroll.refreshComplete'); $scope.loading = false; deviceFactory.toast('No se pudo obtener las iniciativas'); }); }); } /** * */ $scope.getLeads = function (success, error) { sqlFactory.selectByConstraint('crm_lead', "type = 'lead' AND modified != 2", function (leads) { $scope.leads = []; for (var i = 0; i < leads.length; i++) { $scope.leads.push(leads.item(i)); } $scope.$apply(); success(); }, function (sqlFactoryError) { error(sqlFactoryError); }); } /** * */ $scope.toogleNew = function () { $scope.leadModal.show(); } /** * */ $scope.getCustomersSuggestions = function (query) { var defer = $q.defer(); customersStorageFactory.getAll(function (customers) { defer.resolve(customers.filter(function (item) { return item.name.toLowerCase().indexOf(query) != -1 ? item : null; })); }, function (err) { defer.reject([]); }); return defer.promise; } /** * */ $scope.selectCustomer = function (callback) { $scope.lead.contact_name = callback.item.name; } /** * */ $scope.deselectCustomer = function (callback) { $scope.opportunity.contact_name = null; } /** * */ $scope.toggleSearch = function () { $scope.search = $ionicFilterBar.show({ items: $scope.leads, update: function (filtered, text) { $scope.leads = filtered; } }); } /** * */ $scope.save = function () { leadsStorageFactory.save($scope.lead, function (leadId) { if (!$scope.lead.id) { $scope.lead.id = leadId; $scope.leads.push($scope.lead); } $scope.lead = {}; $scope.leadModal.hide(); console.log('Lead saved'); }, function (error) { console.log(error); deviceFactory.toast('No se ha podido guardar la iniciativa'); }); } /** * */ $scope.delete = function () { deviceFactory.confirm('Estás seguro que quieres eliminar esta iniciativa?', 'Confirmar', function (index) { if (index == 1) { leadsStorageFactory.remove($scope.lead, function (affected) { if (affected != 0) { var index = $scope.leads.indexOf($scope.lead); $scope.leads.splice(index, 1); $scope.lead = {}; $scope.$apply(); } }, function (error) { console.log(error); deviceFactory.toast('No se ha podido eliminar la iniciativa'); }); } }); } /** * */ $scope.convertToOpportunity = function () { opportunitiesStorageFactory.save($scope.lead, function (opportunityId) { // $scope.leadToOpportunityModal.hide(); var index = $scope.leads.indexOf($scope.lead); $scope.leads.splice(index, 1); $scope.lead = {}; $scope.$apply(); deviceFactory.toast('Se convirtió la iniciativa'); }, function (saveErr) { console.log(saveErr); // $scope.leadToOpportunityModal.hide(); deviceFactory.toast('No se pudo convertir la iniciativa'); }); } /** * */ $scope.openOptions = function (index) { deviceFactory.vibrate(); $scope.selectedIndex = index; if (index == -1) { $scope.lead = {}; } else { $scope.lead = $scope.leads[index]; } console.log($scope.lead); $ionicActionSheet.show({ titleText: 'Acciones', buttons: [ { text: ' Abrir' }, { text: ' Convertir a oportunidad' } ], destructiveText: ' Eliminar', cancel: function () { $scope.lead = {}; $scope.selectedIndex = -1; }, buttonClicked: function (index) { $scope.selectedIndex = -1; switch (index) { case 0: $scope.toogleNew(); break; case 1: // $scope.leadToOpportunityModal.show(); $scope.convertToOpportunity(); break; default: $scope.toogleNew(); } return true; }, destructiveButtonClicked: function () { $scope.selectedIndex = -1; $scope.delete(); return true; } }); } });