controller.js 15.1 KB
angular.module('focaBusquedaCliente')
    .controller('focaBusquedaClienteModalController', [
        '$uibModalInstance', 'focaBusquedaClienteService', '$scope', '$filter',
        '$uibModal', 'focaModalService',
        function($uibModalInstance, focaBusquedaClienteService, $scope, $filter,
            $uibModal, focaModalService) {

            $scope.filters = '';
            $scope.primerBusqueda = false;
            // pagination
            $scope.numPerPage = 10;
            $scope.currentPage = 1;
            $scope.filteredClientes = [];
            $scope.currentPageClientes = [];
            $scope.selectedClientes = -1;
            $scope.ingreso = false;

            $scope.cliente = {
                COD: 0,
                ES_MAY: true,
                provincia: {
                    NOMBRE: ''
                },
                localidad: {
                    NOMBRE: ''
                },
                iva: {
                    NOMBRE: ''
                },
                actividad: {
                    NOM: ''
                },
                zona: {
                    NOM: ''
                },
                tipoFactura: {
                    NOMBRE: ''
                },
                tipoComprobante: {
                    NOMBRE: ''
                },
                formaPago: {
                    NOMBRE: ''
                }
            };

            $scope.busquedaPress = function(key) {
                if (key === 13) {
                    $scope.searchLoading = true;
                    focaBusquedaClienteService.obtenerClientesPorNombreOCuit($scope.filters).then(
                        function(res) {
                            $scope.primerBusqueda = true;
                            $scope.clientes = res.data;
                            $scope.search();
                            primera();
                            $scope.searchLoading = false;
                        });
                }
            };

            $scope.search = function () {
                if($scope.primerBusqueda) {
                    $scope.filteredClientes = $filter('filter')(
                        $scope.clientes, {$: $scope.filters}
                    );

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

            $scope.select = function(cliente, esNuevo = false) {
                cliente.esNuevo = esNuevo;
                $uibModalInstance.close(cliente);
            };

            $scope.cancel = function() {
                if($scope.ingreso) {
                    $scope.ingreso = false;
                }else {
                    $uibModalInstance.dismiss('cancel');
                }
            };

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

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

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

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

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

            $scope.seleccionarProvincia = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de provincias',
                            templateUrl: 'modal-provincias.html',
                            controller: 'focaModalProvinciaController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.provincia;
                            }}
                        }
                    );
                    modalInstance.result.then(function(provincia) {
                        $scope.cliente.provincia = provincia;
                        $scope.focused = 3;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarLocalidad = function(key) {
                if($scope.cliente.provincia.ID === undefined) {
                    //TODO: Poner modal alert de foca 
                    alert('Seleccione una provincia');
                    return;
                }
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de localidades',
                            templateUrl: 'modal-localidades.html',
                            controller: 'focaModalLocalidadController',
                            size: 'md',
                            resolve: {
                                filters: {
                                    idProvincia: $scope.cliente.provincia.ID,
                                    busqueda: $scope.cliente.localidad.nombre
                                }
                            }
                        }
                    );
                    modalInstance.result.then(function(localidad) {
                        $scope.cliente.localidad = localidad;
                        $scope.focused = 4;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarIva = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de responsabilidad ante el IVA',
                            templateUrl: 'modal-iva.html',
                            controller: 'focaModalIvaController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.iva.NOMBRE;
                            }}
                        }
                    );
                    modalInstance.result.then(function(iva) {
                        $scope.cliente.iva = iva;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarActividad = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de actividades',
                            templateUrl: 'modal-actividad.html',
                            controller: 'focaModalActividadController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.actividad.NOM;
                            }}
                        }
                    );
                    modalInstance.result.then(function(actividad) {
                        $scope.cliente.actividad = actividad;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarZona = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de zonas',
                            templateUrl: 'modal-zona.html',
                            controller: 'focaModalZonaController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.zona.NOM;
                            }}
                        }
                    );
                    modalInstance.result.then(function(zona) {
                        $scope.cliente.zona = zona;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarTipoFactura = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de tipos de factura',
                            templateUrl: 'modal-tipo-factura.html',
                            controller: 'focaModalTipoFacturaController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.tipoFactura.NOMBRE;
                            }}
                        }
                    );
                    modalInstance.result.then(function(tipoFactura) {
                        $scope.cliente.tipoFactura = tipoFactura;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarTipoComprobante = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de tipos de comprobante',
                            templateUrl: 'modal-tipo-comprobante.html',
                            controller: 'focaModalTipoComprobanteController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.tipoComprobante.NOMBRE;
                            }}
                        }
                    );
                    modalInstance.result.then(function(tipoComprobante) {
                        $scope.cliente.tipoComprobante = tipoComprobante;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };
            $scope.seleccionarFormaPago = function(key) {
                if(key === 13) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Búsqueda de formas de pago',
                            templateUrl: 'modal-forma-pago.html',
                            controller: 'focaModalFormaPagoController',
                            size: 'md',
                            resolve: {filters: function() {
                                return $scope.cliente.formaPago.NOMBRE;
                            }}
                        }
                    );
                    modalInstance.result.then(function(formaPago) {
                        $scope.cliente.formaPago = formaPago;
                    }, function() {
                        //TODO: función llamada cuando cancela el modal
                    });
                }
            };

            $scope.guardar = function() {

                if(!validarForm()) return;

                $scope.cliente.PCX = $scope.cliente.provincia.ID;
                $scope.cliente.LOX = $scope.cliente.localidad.ID;
                $scope.cliente.IVA = $scope.cliente.iva.ID;
                $scope.cliente.ACT = $scope.cliente.actividad.ID;
                $scope.cliente.ZON = $scope.cliente.zona.ID;
                $scope.cliente.TIP = $scope.cliente.tipoFactura.ID;
                $scope.cliente.TCO = $scope.cliente.tipoComprobante.ID;
                $scope.cliente.FPA = $scope.cliente.formaPago.ID;

                delete $scope.cliente.provincia;
                delete $scope.cliente.localidad;
                delete $scope.cliente.iva;
                delete $scope.cliente.actividad;
                delete $scope.cliente.zona;
                delete $scope.cliente.tipoFactura;
                delete $scope.cliente.tipoComprobante;
                delete $scope.cliente.formaPago;

                focaBusquedaClienteService.guardarCliente($scope.cliente).then(function(res) {
                    $scope.select(res.data, true);
                });
            };

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

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

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

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

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

            function validarForm() {
                var regexCuit = new RegExp(/\b(20|23|24|27|30|33|34)(\D)?[0-9]{8}(\D)?[0-9]/g);
                if(!regexCuit.test($scope.cliente.CUIT)) {
                    focaModalService.alert('Número de CUIT inválido')
                    return false;
                }
                return true;
            }
        }
    ]);