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;
}
});
}
});