controller.js 6.3 KB
angular.module('focaModalRemito')
  .controller('focaModalRemitoController',
    [
      '$timeout', '$filter', '$scope', '$uibModalInstance',
      'focaModalRemitoService', 'usadoPor', 'focaModalService',
      function ($timeout, $filter, $scope, $uibModalInstance,
        focaModalRemitoService, usadoPor, focaModalService
      ) {
        var fecha = new Date();
        $scope.fechaHasta = new Date();
        $scope.fechaDesde = new Date(fecha.setMonth(fecha.getMonth() - 1));
        $scope.filtersCliente = '';
        $scope.filtersRemito = '';
        $scope.remitos = [];
        $scope.isCollapsed = false;
        $scope.verProductos = {};
        $scope.primerBusqueda = false;
        $scope.searchLoading = false;
        // pagination
        $scope.numPerPage = 10;
        $scope.currentPage = 1;
        $scope.filteredRemitos = [];
        $scope.currentPageRemitos = [];
        $scope.selectedRemito = -1;

        //METODOS
        $scope.busquedaPress = function (key) {
          if (key === 13) {
            if (!$scope.fechaDesde) {
              focaModalService
                .alert('INGRESE FECHA DESDE');
              return;
            }
            if (!$scope.fechaHasta) {
              focaModalService
                .alert('INGRESE FECHA HASTA');
              return;
            }
            if ($scope.fechaDesde > $scope.fechaHasta) {
              focaModalService
                .alert('La fecha desde no puede ser mayor a la fecha hasta');
              return;
            }
            $scope.searchLoading = true;
            //TODO: usar filtros en vez de toISOString
            focaModalRemitoService
              .getRemitos(usadoPor, $scope.fechaDesde.toISOString().split('.')[0],
                $scope.fechaHasta.toISOString().split('.')[0])
              .then(llenarDatos);
          }
        };

        function llenarDatos(res) {
          $scope.remitos = [];
          $scope.filteredRemitos = [];
          $scope.currentPageRemitos = [];
          $scope.selectedRemito = -1;
          $scope.searchLoading = false;
          $scope.primerBusqueda = true;
          $scope.remitos = res.data;
          $scope.searchRemito(true);
          primera();
        }

        $scope.searchRemito = function (pressed) {
          if ($scope.remitos.length > 0) {
            $scope.filteredRemitos = $filter('filter')(
              $scope.remitos,
              { numeroRemito: $scope.filtersRemito }
            );

            if (pressed && $scope.filteredRemitos.length === 0) {
              $timeout(function () {
                angular.element('#search')[0].focus();
                $scope.filtersRemito = '';
              });
            }

            $scope.lastPage = Math.ceil(
              $scope.filteredRemitos.length / $scope.numPerPage
            );

            $scope.resetPage();
          }
        }

        $scope.searchCliente = function (pressed) {
          if ($scope.remitos.length > 0) {
            $scope.filteredRemitos = $filter('filter')(
              $scope.remitos,
              { nombreCliente: $scope.filtersCliente }
            );

            if (pressed && $scope.filteredRemitos.length === 0) {
              $timeout(function () {
                angular.element('#search')[0].focus();
                $scope.filtersCliente = '';
              });
            }

            $scope.lastPage = Math.ceil(
              $scope.filteredRemitos.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.currentPageRemitos = $scope.filteredRemitos.slice(start, end);
          $scope.currentPage = page;
        };

        $scope.select = function (remito) {
          $uibModalInstance.close(remito);
        };

        $scope.cancel = function () {
          $uibModalInstance.dismiss('cancel');
        };

        $scope.busquedaDown = function (key) {
          if (key === 40) {
            primera(key);
          }
        };

        $scope.itemRemito = function (key) {
          switch (key) {
            case 38:
              anterior(key);
              break;
            case 40:
              siguiente(key);
              break;
            case 37:
              retrocederPagina();
              break;
            case 39:
              avanzarPagina();
              break;
          }
        };

        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.selectedRemito = 0;
        }

        function anterior() {
          if ($scope.selectedRemito === 0 && $scope.currentPage > 1) {
            retrocederPagina();
          } else {
            $scope.selectedRemito--;
          }
        }

        function siguiente() {
          if ($scope.selectedRemito < $scope.currentPageRemitos.length - 1) {
            $scope.selectedRemito++;
          } else {
            avanzarPagina();
          }
        }

        function retrocederPagina() {
          if ($scope.currentPage > 1) {
            $scope.selectPage($scope.currentPage - 1);
            $scope.selectedRemito = $scope.numPerPage - 1;
          }
        }

        function avanzarPagina() {
          if ($scope.currentPage < $scope.lastPage) {
            $scope.selectPage($scope.currentPage + 1);
            $scope.selectedRemito = 0;
          }
        }
      }
    ]
  );