angular.module('focaModal') .controller('focaModalController', [ '$timeout', '$filter', '$scope', '$uibModalInstance', 'focaModalService', 'parametrosModal', function($timeout, $filter, $scope, $uibModalInstance, focaModalService, parametrosModal) { $scope.parametrosModal = parametrosModal; $scope.filters = parametrosModal.searchText || ''; $scope.entidades = []; $scope.primerBusqueda = false; $scope.searchLoading = false; // pagination $scope.numPerPage = 10; $scope.currentPage = 1; $scope.filteredEntidades = []; $scope.currentPageEntidades = []; $scope.selectedEntidad = -1; $scope.busquedaPress = function(key) { if (key === 13) { $scope.searchLoading = true; if (parametrosModal.query) { focaModalService.getEntidad( $scope.filters, parametrosModal.query, parametrosModal.tipo, parametrosModal.json ).then( function(res) { $scope.searchLoading = false; $scope.primerBusqueda = true; $scope.entidades = res.data; filtros($scope.entidades); $scope.search(true); } ); } else { $scope.searchLoading = false; $scope.primerBusqueda = true; $scope.entidades = parametrosModal.data; filtros($scope.entidades); $scope.search(true); } } }; function filtros(entidades) { for (var i = 0; i < $scope.parametrosModal.columnas.length; i++) { var filtro = $scope.parametrosModal.columnas[i].filtro; if (filtro) { if (filtro.nombre === 'comprobante') { for (var j = 0; j < entidades.length; j++) { var array = []; $scope.parametrosModal.columnas[i].propiedad .forEach(function(prop) { array.push(entidades[j][prop]); }); entidades[j][$scope.parametrosModal.columnas[i].propiedad] = $filter('comprobante')(array); } } else { for (var j = 0; j < entidades.length; j++) { entidades[j][$scope.parametrosModal.columnas[i].propiedad] = $filter(filtro.nombre)(entidades[j][$scope .parametrosModal.columnas[i].propiedad], filtro.parametro); } } } } } $scope.search = function(pressed) { if ($scope.entidades.length > 0) { $scope.filteredEntidades = $filter('filter')( $scope.entidades, { $: $scope.filters } ); $scope.lastPage = Math.ceil( $scope.filteredEntidades.length / $scope.numPerPage ); $scope.resetPage(); } else if (pressed) { $timeout(function() { angular.element('#search')[0].focus(); $scope.filters = ''; }); } }; $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.currentPageEntidades = $scope.filteredEntidades.slice(start, end); $scope.currentPage = page; }; $scope.select = function(vendedor) { $uibModalInstance.close(vendedor); }; $scope.cancel = function() { $uibModalInstance.dismiss('cancel'); }; $scope.busquedaDown = function(key) { if (key === 40) { primera(key); } }; $scope.itemEntidad = function(key) { if (key === 38) { anterior(key); } if (key === 40) { siguiente(key); } if (key === 37) { retrocederPagina(); } if (key === 39) { avanzarPagina(); } }; $scope.esFecha = function(fecha) { if (fecha.includes('fecha')) { return true; } return false; }; 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.selectedEntidad = 0; } function anterior() { if ($scope.selectedEntidad === 0 && $scope.currentPage > 1) { retrocederPagina(); } else { $scope.selectedEntidad--; } } function siguiente() { if($scope.selectedEntidad < $scope.currentPageEntidades.length - 1) { $scope.selectedEntidad++; } else { avanzarPagina(); } } function retrocederPagina() { if ($scope.currentPage > 1) { $scope.selectPage($scope.currentPage - 1); $scope.selectedEntidad = $scope.numPerPage - 1; } } function avanzarPagina() { if ($scope.currentPage < $scope.lastPage) { $scope.selectPage($scope.currentPage + 1); $scope.selectedEntidad = 0; } } $scope.busquedaPress(13); $scope.clearInput = function(){ $scope.filters = ''; }; }] );