controllerCisterna.js 7.12 KB
angular.module('focaAbmVehiculo')
    .controller('focaAbmVehiculoCisternaController', [
        '$scope', 'focaAbmVehiculoService', '$routeParams', '$location', '$uibModal',
        'focaModalService', 'focaBotoneraLateralService', '$timeout', '$window','$localStorage',
        function($scope, focaAbmVehiculoService, $routeParams, $location, $uibModal,
        focaModalService, focaBotoneraLateralService, $timeout, $window, $localStorage) {
            $scope.nuevo = ($routeParams.idx > -1) ? false : true;
            $scope.editar = false;
            $scope.now = new Date();
            $scope.cisterna = {
                codigo: '',
                capacidad: '',
                unidadMedida: {}
             };

            $scope.focused = $scope.nuevo ? 1 : 2;
            $scope.next = function(key) {
                if (key === 13) $scope.focused++;
            };
            $scope.capacidadVechiulo = 0;
            $scope.transportista = '';

            //SETEO BOTONERA LATERAL
            $timeout(function() {
                focaBotoneraLateralService.showSalir(false);
                focaBotoneraLateralService.showPausar(true);
                focaBotoneraLateralService.showCancelar(false);
                focaBotoneraLateralService.showGuardar(true, $scope.guardar);
                focaBotoneraLateralService.addCustomButton('Salir', $scope.salir);
            });

            $timeout(function (){getLSCisterna();});

            if ($routeParams.idx !== -1) {
                $scope.cisterna = [$routeParams.idx];
                focaAbmVehiculoService
                    .getCisternas($routeParams.idVehiculo)
                    .then(function(res) {
                        $scope.cisterna = res[$routeParams.idx];
                    });
            }

            focaAbmVehiculoService.getVehiculo($routeParams.idVehiculo).then(function(res) {
                var codigo = ('00000' + res.data.transportista.COD).slice(-5);
                $scope.transportista = res.data.transportista.COD;
                $scope.capacidadVechiulo = res.data.capacidad;
                $scope.$broadcast('addCabecera', {
                    label: 'Transportista:',
                    valor: codigo + ' - ' + res.data.transportista.NOM
                });
                $scope.$broadcast('addCabecera', {
                    label: 'Unidad:',
                    valor: res.data.codigo
                });
                $scope.$broadcast('addCabecera', {
                    label: 'Capacidad total vehículo:',
                    valor: res.data.capacidad
                });
            });

            $scope.salir = function() {

                if (!$scope.formCisterna.$pristine) {
                    focaModalService.confirm(
                        '¿Está seguro de que desea salir? Se perderán todos los datos cargados.'
                    ).then(function(data) {
                        if (data) {
                            $location.path('/vehiculo/' + $routeParams.idVehiculo + '/' +
                                $scope.transportista);
                        }
                    });
                } else {
                    $location.path('/vehiculo/' + $routeParams.idVehiculo + '/' +
                        $scope.transportista);
                }
            };

            $scope.guardar = function() {

                if ($scope.formCisterna.$pristine) {
                    $scope.salir();
                    return;
                } else if (!$scope.cisterna.codigo) {
                    focaModalService.alert('Ingrese codigo de cisterna');
                    return;
                } else if (!$scope.cisterna.capacidad) {
                    focaModalService.alert('Ingrese capacidad');
                    return;
                } else if (!$scope.cisterna.idUnidadMedida) {
                    focaModalService.alert('Ingrese unidad de medida');
                    return;
                }

                validaCodigo()
                    .then(function() {
                        $scope.cisterna.idVehiculo = parseInt($routeParams.idVehiculo);
                        delete $scope.cisterna.vehiculo;

                        focaAbmVehiculoService
                            .guardarCisterna($scope.cisterna, $routeParams.idx);

                        $timeout(function() {
                            $location.path('/vehiculo/' + $routeParams.idVehiculo +
                                '/' + $scope.transportista);
                        }, 0);
                    }, function(err) {
                        focaModalService.alert(err);
                    });

            };

            $scope.seleccionarUnidadMedida = function() {
                var modalInstance = $uibModal.open(
                    {
                        ariaLabelledBy: 'Busqueda de Unidades de medida',
                        templateUrl: 'modal-unidad-medida.html',
                        controller: 'focaModalUnidadMedidaCtrl',
                        size: 'lg'
                    }
                );
                modalInstance.result.then(function(unidaMedida) {
                    $scope.cisterna.idUnidadMedida = unidaMedida.ID;
                    $scope.cisterna.unidadMedida = unidaMedida;
                });
            };

            $scope.$watch('cisterna', function(newValue) {
                focaBotoneraLateralService.setPausarData({
                    label:'cisterna',
                    val: newValue
                });
            }, true);

            function getLSCisterna() {
                var cisterna = JSON.parse($localStorage.cisterna|| null);
                if (cisterna) {
                    setearVehiculo(cisterna);
                    delete $localStorage.cisterna;
                }
            }

            function setearVehiculo(cisterna) {
                $scope.cisterna = cisterna;
                $scope.$broadcast('addCabecera', {
                    label: 'Codigo de Cisterna:',
                    valor: cisterna.codigo
                });
            }

            function validaCodigo() {
                return new Promise(function(resolve, reject) {
                    focaAbmVehiculoService
                        .getCisternas($routeParams.idVehiculo)
                        .then(function(res) {
                            var cisternas = res;
                            var totalCargado = 0;
                            cisternas.forEach(function(cisterna, idx) {
                                //SI EL CODIGO YA EXISTE
                                if (cisterna.codigo === $scope.cisterna.codigo &&
                                    idx != $routeParams.idx &&
                                    !cisterna.desactivado) {
                                    reject('Código de cisterna existente');
                                }
                                if (idx !== $routeParams.idx &&
                                    !cisterna.desactivado) {
                                    totalCargado += cisterna.capacidad;
                                }
                            });
                            resolve();
                        });
                });
            }
        }
    ]);