controllerModal.js 7.55 KB
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 = '';
            };
        }]
    );