controller.js 10.3 KB
angular.module('focaModalDomicilio')
  .controller('focaModalDomicilioController',
    ['$timeout', '$filter', '$scope', '$uibModalInstance', 'focaModalDomicilioService',
      '$uibModal', 'idCliente', 'esNuevo', 'focaModalService', 'IDomicilio',
      function ($timeout, $filter, $scope, $uibModalInstance, focaModalDomicilioService,
        $uibModal, idCliente, esNuevo, focaModalService, IDomicilio) {

        $scope.buscar = function () {
          focaModalDomicilioService
            .getDomiciliosEntregaByIdCliente($scope.idCliente)
            .then(function (res) {
              $scope.domicilios = res.data;
              $scope.search();
              $scope.primerBusqueda = true;
            });
        };
        $scope.filters = '';
        $scope.idCliente = idCliente;
        $scope.buscar();
        $scope.ingreso = esNuevo;
        $scope.primerBusqueda = false;
        $scope.contactos = [{}];
        // pagination
        $scope.numPerPage = 5;
        $scope.currentPage = 1;
        $scope.filteredDomicilios = [];
        $scope.currentPageDomicilios = [];
        $scope.selectedDomicilio = -1;
        $scope.focused = 1;
        $scope.domicilio = IDomicilio;

        //METODOS
        $scope.search = function (pressed) {
          $scope.filteredDomicilios = $filter('filter')(
            $scope.domicilios,
            { $: $scope.filters }
          );

          if (pressed) {
            if ($scope.filteredDomicilios.length === 0) {
              $timeout(function () {
                angular.element('#search')[0].focus();
                $scope.filters = '';
              });
            } else {
              primera();
            }
          }

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

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

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

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

        $scope.busquedaPress = function (key) {
          if (!key === 13) return;
          $scope.search(true);
        };

        $scope.seleccionarLocalidad = function (key) {
          if (!key === 13) return;
          if (!$scope.domicilio.provincia.ID) {
            focaModalService.alert('Seleccione una provincia');
            return;
          }

          var parametrosModal = {
            searchText: $scope.domicilio.localidad.NOMBRE,
            query: '/localidad/' + parseInt($scope.domicilio.provincia.ID),
            columnas: focaModalDomicilioService.getLocalidadTableFormat(),
            titulo: 'Búsqueda de localidades',
            size: 'md'
          };

          focaModalService.modal(parametrosModal)
            .then(function (localidad) {
              $scope.domicilio.localidad = localidad;
              $timeout(function () {
                $scope.focused = 5;
              });
            });
        };

        $scope.seleccionarProvincia = function (key) {
          if (!key === 13) return;
          var parametrosModal = {
            searchText: $scope.domicilio.provincia.NOMBRE,
            query: '/provincia',
            columnas: focaModalDomicilioService.getProvinciaTableFormat(),
            titulo: 'Búsqueda de provincias',
            size: 'md'
          };
          focaModalService.modal(parametrosModal)
            .then(function (provincia) {
              $scope.domicilio.provincia = provincia;
              $timeout(function () {
                $scope.focused = 4;
              });
            });
        };

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

        $scope.agregarDomicilio = function () {
          $scope.domicilio.valores = [];
          $scope.domicilio.idCliente = $scope.idCliente;
          if ($scope.domicilio.calle) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 1,
              dato: $scope.domicilio.calle
            });
          }
          if ($scope.domicilio.numeroCalle) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 2,
              dato: $scope.domicilio.numeroCalle
            });
          }
          if ($scope.domicilio.localidad.ID) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 3,
              dato: $scope.domicilio.localidad.NOMBRE
            });
          }
          if ($scope.domicilio.provincia.ID) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 4,
              dato: $scope.domicilio.provincia.NOMBRE
            });
          }
          if ($scope.domicilio.latitud) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 23,
              dato: $scope.domicilio.latitud.toString()
            });
          }
          if ($scope.domicilio.longitud) {
            $scope.domicilio.valores.push({
              ID_ADAC_1: 24,
              dato: $scope.domicilio.longitud.toString()
            });
          }

          if (!$scope.domicilio.titulo) {
            focaModalService.alert('Ingrese titulo');
            return;
          } else if (!$scope.domicilio.calle) {
            focaModalService.alert('Ingrese calle');
            return;
          } else if (!$scope.domicilio.numeroCalle) {
            focaModalService.alert('Ingrese numero de calle');
            return;
          } else if (!$scope.domicilio.localidad.ID) {
            focaModalService.alert('Ingrese localidad');
            return;
          } else if (!$scope.domicilio.provincia.ID) {
            focaModalService.alert('Ingrese provincia');
            return;
          }

          //domicilios de entrega corresponden al 1
          focaModalDomicilioService
            .obtenerUltimoPorNivelPadre(1)
            .then(function (res) {
              $scope.domicilio.nivel1 = 1; //domicilio de entrega corresponde 1
              $scope.domicilio.nivel2 = res.data[0].ultimo + 1;
              focaModalDomicilioService
                .guardarDomicilio($scope.domicilio)
                .then(function () {
                  $scope.buscar();
                  $scope.ingreso = false;
                  $scope.domicilio = {};
                })
                .catch(function () {
                  focaModalService.alert('Hubo un error al crear el domicilio');
                  $scope.ingreso = false;
                });
            });
        };

        $scope.verPuntosDescarga = function (key) {
          $scope.currentPageDomicilios[key].verPuntos = true;
          $scope.select($scope.currentPageDomicilios[key]);
        };

        $scope.localizarDomicilio = function (localizar) {
          var direccion = null;
          if (localizar) {
            direccion = {
              calle: $scope.domicilio.calle,
              numero: $scope.domicilio.numeroCalle,
              localidad: $scope.domicilio.localidad.NOMBRE,
              provincia: $scope.domicilio.provincia.NOMBRE
            };
          }
          var modalInstance = $uibModal.open(
            {
              ariaLabelledBy: 'Buscar domicilio',
              templateUrl: 'modal-localizar.html',
              controller: 'focaModalLocalizarController',
              size: 'lg',
              resolve: {
                parametros: {
                  direccion: direccion,
                  latitud: $scope.domicilio.latitud,
                  longitud: $scope.domicilio.longitud
                }
              }
            }
          );
          modalInstance.result.then(function (res) {
            $scope.domicilio.latitud = res.latitud;
            $scope.domicilio.longitud = res.longitud;
          }, function () {
            //TODO: función llamada cuando cancela el modal
          });
        };

        $scope.next = function (key) {
          if (key === 13) $scope.focused++;
        };

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

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

        function siguiente() {
          if ($scope.selectedDomicilio < $scope.currentPageDomicilios.length) {
            $scope.selectedDomicilio++;
          } else {
            avanzarPagina();
          }
        }

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

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