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; } } } ] );