controllerDetalle.js 6.56 KB
angular.module('focaOrdenCarga')
    .controller('focaModalDetalleController', [
        '$scope', '$timeout', '$uibModalInstance', 'focaModalService',
        'focaCrearHojaRutaService', 'parametrosModal',
        function ($scope, $timeout, $uibModalInstance, focaModalService,
            focaCrearHojaRutaService, parametrosModal) {

            init();

            function init() {
                $scope.mostrar = false;
                $scope.orden = parametrosModal.orden;
                $scope.articulos = [];
                $scope.cisternaMovimientos = [];
                $scope.hojasRutas = parametrosModal.hojasRutas;
                $scope.hojasRutas.vehiculo.cisternas = $scope.hojasRutas.vehiculo.cisternas.filter(
                    function (cisterna) {
                        return !cisterna.desactivado;
                    }
                );
                focaCrearHojaRutaService.getArticulos()
                    .then(function (articulos) {
                        $scope.articulos = articulos.data;
                    });
            }

            $scope.validarCisternaDisponible = function (cisterna) {
                if (parseInt(cisterna.disponible) > cisterna.capacidad) {
                    focaModalService.alert('No se puede ingresar una capacidad disponible ' +
                        'superior a la ' + 'capacidad del vehiculo ');
                    cisterna.disponible = cisterna.capacidad;
                    return;
                }
            };

            $scope.seleccionarProductos = function (key, cisterna) {
                focaModalService.modal({
                    titulo: 'Productos',
                    data: $scope.articulos,
                    size: 'md',
                    columnas: [
                        {
                            propiedad: 'CodRub',
                            nombre: 'Codigo'
                        },
                        {
                            propiedad: 'descripcion',
                            nombre: 'Nombre'
                        },
                    ],
                }).then(function (res) {
                    cisterna.disponible = cisterna.capacidad;
                    var newArt =
                    {
                        id: 0,
                        idRemito: 0,
                        codigo: res.codigo,
                        sector: res.sector,
                        sectorCodigo: res.sector + '-' + res.codigo,
                        descripcion: res.descripcion,
                        item: key + 1,
                        nombre: res.descripcion,
                        precio: parseFloat(res.precio).toFixed(4),
                        costoUnitario: res.costo,
                        editCantidad: false,
                        editPrecio: false,
                        rubro: res.CodRub,
                        ivaUnitario: res.IMPIVA,
                        impuestoInternoUnitario: res.ImpInt,
                        impuestoInterno1Unitario: res.ImpInt2,
                        impuestoInterno2Unitario: res.ImpInt3,
                        precioLista: res.precio,
                        combustible: 1,
                        facturado: 0,
                        idArticulo: res.id,
                        tasaIva: res.tasaIVA
                    };

                    newArt.exentoUnitario = newArt.ivaUnitario ? 0 : res.neto;
                    newArt.netoUnitario = newArt.ivaUnitario ? res.neto : 0;

                    cisterna.articuloSeleccionado = newArt;
                    cisterna.nombreArticulo = res.descripcion;
                }).catch(function (e) {
                    console.error(e);
                });
            };

            $scope.guardar = function () {

                var cisternasFilter = validarArticulos();

                var articulos = [];
                if (cisternasFilter === undefined) {
                    return;
                }
                cisternasFilter.forEach(function (cisterna) {

                    var fechaReparto = $scope.hojasRutas.fechaReparto;
                    cisterna.cisternaCarga = {
                        confirmado: null,
                        fechaReparto: fechaReparto,
                        idCisterna: cisterna.id,
                        orden: $scope.orden
                    };

                    //cargar
                    if (cisterna.cisternaCarga.cantidad) {
                        cisterna.cisternaCarga.cantidad += cisterna.disponible;
                    } else {
                        cisterna.cisternaCarga.cantidad = cisterna.disponible;
                        cisterna.cisternaCarga.idProducto =
                            cisterna.articuloSeleccionado.idArticulo;
                    }

                    //Guardar
                    var now = new Date();
                    var cisternaMovimiento = {
                        fecha: now.toISOString().slice(0, 19).replace('T', ' '),
                        cantidad: cisterna.disponible,
                        metodo: 'carga',
                        idCisternaCarga: cisterna.cisternaCarga.id,
                    };

                    cisterna.cisternaCarga.fechaReparto = fechaReparto;
                    cisterna.articuloSeleccionado.cantidad = cisterna.disponible;
                    articulos.push(cisterna.articuloSeleccionado);
                    $scope.cisternaMovimientos.push(cisternaMovimiento);
                });

                $uibModalInstance.close({
                    cisternas: cisternasFilter,
                    movimientos: $scope.cisternaMovimientos,
                    articulos: articulos
                });
            };

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

            function validarArticulos() {
                var cisternasFilter = $scope.hojasRutas.vehiculo.cisternas
                    .filter(function (cisterna) {
                        return parseInt(cisterna.disponible) > 0 || cisterna.articuloSeleccionado;
                    });

                var cisternasIncompletas = cisternasFilter.filter(function (cisterna) {
                    return (cisterna.articuloSeleccionado && !cisterna.disponible) ||
                        (!cisterna.articuloSeleccionado && cisterna.disponible);
                });

                if (cisternasIncompletas.length > 0 && cisternasFilter.length > 0) {
                    focaModalService.alert('Ingrese todos los campos para completar el remito');
                    cisternasFilter = undefined;
                }
                return cisternasFilter;
            }
        }
    ]);