angular.module('focaModalTipoComprobante') .controller('focaModalTipoComprobanteController', [ '$timeout', '$filter', '$scope', '$uibModalInstance', 'focaModalTipoComprobanteService', 'filters', function($timeout, $filter, $scope, $uibModalInstance, focaModalTipoComprobanteService, filters) { $scope.filters = filters; $scope.tiposComprobante = []; // pagination $scope.numPerPage = 10; $scope.currentPage = 1; $scope.filteredTiposComprobante = []; $scope.currentPageTiposComprobante = []; $scope.selectedTipoComprobante = -1; focaModalTipoComprobanteService.getTiposComprobante().then(function(res) { $scope.tiposComprobante = res.data; $scope.search(true); primera(); }); $scope.cancel = function() { $uibModalInstance.dismiss('cancel'); }; $scope.select = function(iva) { $uibModalInstance.close(iva); }; $scope.search = function(pressed) { if($scope.tiposComprobante.length > 0) { $scope.filteredTiposComprobante = $filter('filter')( $scope.tiposComprobante, { $: $scope.filters } ); if(pressed && $scope.filteredTiposComprobante.length === 0) { $timeout(function() { angular.element('#search')[0].focus(); $scope.filters = ''; }); } $scope.lastPage = Math.ceil( $scope.filteredTiposComprobante.length / $scope.numPerPage ); $scope.resetPage(); } }; $scope.resetPage = function() { $scope.currentPage = 1; $scope.selectPage(1); }; $scope.selectPage = function(page) { var start = (page - 1) * $scope.numPerPage; var end = start + $scope.numPerPage; $scope.paginas = []; $scope.paginas = calcularPages(page); $scope.currentPageTiposComprobante = $scope.filteredTiposComprobante.slice(start, end); $scope.currentPage = page; }; $scope.busquedaDown = function(key) { if (key === 40) { primera(key); } }; $scope.itemTipoComprobante = function(key) { if (key === 38) { anterior(key); } if (key === 40) { siguiente(key); } if (key === 37) { retrocederPagina(); } if (key === 39) { avanzarPagina(); } }; function calcularPages(paginaActual) { var paginas = []; paginas.push(paginaActual); if(paginaActual - 1 > 1) { paginas.unshift(paginaActual - 1); if(paginaActual - 2 > 1) { paginas.unshift(paginaActual - 2); } } if(paginaActual + 1 < $scope.lastPage) { paginas.push(paginaActual + 1); if(paginaActual + 2 < $scope.lastPage) { paginas.push(paginaActual + 2); } } if(paginaActual !== 1) { paginas.unshift(1); } if(paginaActual !== $scope.lastPage) { paginas.push($scope.lastPage); } return paginas; } function primera() { $scope.selectedTipoComprobante = 0; } function anterior() { if($scope.selectedTipoComprobante === 0 && $scope.currentPage > 1) { retrocederPagina(); }else { $scope.selectedTipoComprobante--; } } function siguiente() { if($scope.selectedTipoComprobante < $scope.currentPageTiposComprobante.length - 1) { $scope.selectedTipoComprobante++; }else { avanzarPagina(); } } function retrocederPagina() { if($scope.currentPage > 1) { $scope.selectPage($scope.currentPage - 1); $scope.selectedTipoComprobante = $scope.numPerPage - 1; } } function avanzarPagina() { if($scope.currentPage < $scope.lastPage) { $scope.selectPage($scope.currentPage + 1); $scope.selectedTipoComprobante = 0; } } }] );