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

                $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 = {};

                //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) {
                        primera(key);
                    }
                };

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

                $scope.itemDomicilio = function(key) {
                    if (key === 38) {
                        anterior(key);
                    }

                    if (key === 40) {
                        siguiente(key);
                    }

                    if (key === 37) {
                        retrocederPagina();
                    }

                    if (key === 39) {
                        avanzarPagina();
                    }
                };

                $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) {
                        $scope.domicilio.valores.push({
                            ID_ADAC_1: 3,
                            dato: $scope.domicilio.localidad
                        });
                    }
                    if ($scope.domicilio.provincia) {
                        $scope.domicilio.valores.push({
                            ID_ADAC_1: 4,
                            dato: $scope.domicilio.provincia
                        });
                    }
                    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) {
                        focaModalService.alert('Ingrese localidad');
                        return; 
                    } else if (!$scope.domicilio.provincia) {
                        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,
                            provincia: $scope.domicilio.provincia
                        };
                    }
                    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;
                    }
                }
            }
        ]
    );