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