controller.js 9.26 KB
angular.module('focaModalFactura')
    .controller('focaModalFacturaController', 
        [
            '$filter',
            '$scope',
            '$uibModalInstance',
            'focaModalFacturaService',
            'parametrosFactura',
            '$uibModal',
            'focaModalService',
            function($filter, $scope, $uibModalInstance,
                focaModalFacturaService, parametrosFactura, $uibModal, focaModalService
            ) {
                var fecha = new Date();
                $scope.fechaHasta = new Date();
                $scope.fechaDesde = new Date(fecha.setMonth(fecha.getMonth() - 1));
                $scope.filters = '';
                $scope.facturas = [];
                $scope.primerBusqueda = false;
                $scope.searchLoading = false;
                $scope.parametrosFactura = parametrosFactura;
                // pagination
                $scope.numPerPage = 10;
                $scope.currentPage = 1;
                $scope.filteredFacturas = [];
                $scope.currentPageFacturas = [];
                $scope.selectedFactura = -1;

                //METODOS
                $scope.busquedaPress = function(key) {
                    if (key === 13) {
                        //TODO Validaciones con alertas
                        if(!$scope.fechaDesde) {
                            alert('INGRESE FECHA DESDE');
                            return;
                        }
                        if(!$scope.fechaHasta) {
                            alert('INGRESE FECHA HASTA');
                            return;
                        }
                        if($scope.fechaDesde > $scope.fechaHasta) {
                            alert('La fecha desde no puede ser mayor a la fecha hasta');
                            return;
                        }
                        $scope.searchLoading = true;
                        //TODO hacer filtro de fecha
                        focaModalFacturaService
                            .getFacturasByIdCliente(
                                parametrosFactura.cliente.COD,
                                parametrosFactura.moneda,
                                '2001-01-01', 
                                '2100-12-31'
                            )
                            .then(llenarDatos);
                    }
                };

                $scope.aceptar = function() {
                    var result = $scope.facturas.filter(function(a) {return a.checked === true;});
                    $uibModalInstance.close(result);
                };

                $scope.tieneAlMenosUno = function() {
                    var result = $scope.facturas.filter(function(a) {return a.checked === true;});
                    return !result.length;
                };

                function llenarDatos(res) {
                    $scope.facturas = [];
                    $scope.filteredFacturas = [];
                    $scope.currentPageFacturas = [];
                    $scope.selectedFactura = -1;
                    $scope.searchLoading = false;
                    $scope.primerBusqueda = true;
                    $scope.facturas = calcularSaldos(res.data);
                    $scope.search();
                    primera();
                }

                $scope.verFactura = function(factura) {
                    var modalInstance = $uibModal.open(
                        {
                            ariaLabelledBy: 'Detalle de factura',
                            templateUrl: 'foca-modal-factura-detalle.html',
                            controller: 'focaModalFacturaDetalleController',
                            size: 'md',
                            resolve: {
                                factura: factura
                            }
                        }
                    );
                    modalInstance.result.then();
                };

                $scope.search = function() {
                    if($scope.facturas.length > 0) {
                        $scope.filteredFacturas = $filter('filter')(
                            $scope.facturas,
                            {$: $scope.filters}
                        );

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

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

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

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

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

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

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

                $scope.enviarMail = function(factura) {
                    focaModalService
                        .prompt('Ingrese email para enviar comprobante', factura.MAIL_COBRANZA)
                        .then(function(res) {
                            return focaModalFacturaService.enviarFacturaPorMail(res, factura);
                        })
                        .then(function() {
                            focaModalService.alert('Mensaje enviado correctamente');
                        });
                };

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

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

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

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

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

                function calcularSaldos(facturas) {
                    var saldo = 0;

                    facturas.forEach(function(factura) {
                        if (factura.TCO === 'CI' ||
                            factura.TCO === 'FT' ||
                            factura.TCO === 'ND'){
                            factura.IPA = factura.IPA * -1;
                        }else{
                            factura.IPA = factura.IPA;
                        }
                        saldo += factura.IPA;
                        factura.saldo = saldo;
                        factura.saldo_show = Math.abs(saldo);
                        factura.IPA_SHOW = Math.abs(factura.IPA);
                    });

                    return facturas;
                }

                $scope.busquedaPress(13);
            }
        ]
    );