controller.js 5.05 KB
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;
                }
            }
        }]
    );