angular.module('focaAbmVehiculo') .controller('focaAbmVehiculosController', [ '$scope', 'focaAbmVehiculoService', '$location', 'focaModalService', '$uibModal', 'focaBotoneraLateralService', '$timeout', '$localStorage', function ($scope, focaAbmVehiculoService, $location, focaModalService, $uibModal, focaBotoneraLateralService, $timeout, $localStorage) { $scope.now = new Date(); $scope.tipo = ''; $scope.botonera = [{ label: 'Transportista', image: 'cliente.png' }]; focaAbmVehiculoService.cleanCisternas(); //SETEO BOTONERA LATERAL focaBotoneraLateralService.showSalir(false); focaBotoneraLateralService.showPausar(false); focaBotoneraLateralService.showCancelar(false); focaBotoneraLateralService.showGuardar(false); focaBotoneraLateralService.addCustomButton('Salir', salir); if (focaAbmVehiculoService.transportistaSeleccionado.COD) { elegirTransportista(focaAbmVehiculoService.transportistaSeleccionado); } $scope.editar = function (id) { $location.path('/vehiculo/' + id + '/' + $scope.idTransportista); }; $scope.solicitarConfirmacion = function (vehiculo) { focaModalService.confirm('¿Está seguro que desea borrar el vehiculo ' + vehiculo.id + ' ' + vehiculo.tractor + ' ?').then( function (data) { if (data) { focaAbmVehiculoService.deleteVehiculo(vehiculo.id); $scope.vehiculos.splice($scope.vehiculos.indexOf(vehiculo), 1); } } ); }; $scope.seleccionarTransportista = function () { var parametrosModal = { titulo: 'Búsqueda de Transportista', query: '/transportista', columnas: [ { nombre: 'Código', propiedad: 'COD' }, { nombre: 'Nombre', propiedad: 'NOM' }, { nombre: 'CUIT', propiedad: 'CUIT' } ] }; focaModalService.modal(parametrosModal).then( function (transportista) { elegirTransportista(transportista); focaAbmVehiculoService.transportistaSeleccionado = transportista; }, function () { } ); }; function elegirTransportista(transportista) { var codigo = ('00000' + transportista.COD).slice(-5); $scope.idTransportista = transportista.COD; $scope.filtros = transportista.NOM.trim(); $timeout(function () { $scope.$broadcast('addCabecera', { label: 'Transportista:', valor: codigo + ' - ' + transportista.NOM }); }); buscar(transportista.COD); } function buscar(idTransportista) { focaAbmVehiculoService .getVehiculosPorTransportista(idTransportista) .then(function (datos) { $scope.vehiculos = datos.data; }); } function salir() { focaAbmVehiculoService.transportistaSeleccionado = {}; $location.path('/'); } } ]) .controller('focaAbmVehiculoController', [ '$scope', 'focaAbmVehiculoService', '$routeParams', '$location', '$uibModal', 'focaModalService', '$timeout', 'focaBotoneraLateralService', '$localStorage', '$filter', function ($scope, focaAbmVehiculoService, $routeParams, $location, $uibModal, focaModalService, $timeout, focaBotoneraLateralService, $localStorage, $filter) { $scope.nuevo = $routeParams.idVehiculo === '0' ? true : false; $scope.nuevoCisterna = ($routeParams.idx > -1) ? false : true; $scope.now = new Date(); $scope.focused = 1; $scope.tipo = ''; $scope.creando = false; $scope.crear = false; $scope.transportistaStamp = ''; $scope.cisternas = []; $timeout(function () { focaBotoneraLateralService.showSalir(false); focaBotoneraLateralService.showPausar(true); focaBotoneraLateralService.showCancelar(false); focaBotoneraLateralService.showGuardar(true, $scope.guardar); focaBotoneraLateralService.addCustomButton('Salir', $scope.salir); }); if ($scope.nuevo) { $scope.tipo = 'Crear Vehiculo'; focaAbmVehiculoService .getTransportistaPorId($routeParams.idTransportista) .then(function (res) { var codigo = ('00000' + res.data[0].COD).slice(-5); $scope.vehiculo.idTransportista = res.data[0].COD; $scope.vehiculo.transportista = res.data; $scope.$broadcast('addCabecera', { label: 'Transportista:', valor: codigo + ' - ' + res.data[0].ALI }); $scope.$broadcast('addCabecera', { label: 'Unidad:', valor: 'NUEVO' }); }); } else { $scope.tipo = 'Editar Vehiculo'; } $scope.vehiculo = {}; focaAbmVehiculoService.getVehiculo($routeParams.idVehiculo).then(function (res) { if (res.data) { var vehiculoSeteado = getLSVehiculo(); if (vehiculoSeteado === false) { $scope.transportistaStamp = ('00000' + res.data.transportista.COD).slice(-5); $scope.transportistaStamp += ' - ' + res.data.transportista.NOM; $scope.vehiculo = res.data; $scope.$broadcast('addCabecera', { label: 'Transportista:', valor: $scope.transportistaStamp }); $scope.$broadcast('addCabecera', { label: 'Unidad:', valor: res.data.codigo }); } focaAbmVehiculoService .getCisternas($routeParams.idVehiculo) .then(function (res) { $scope.cisternas = res; $scope.$apply(); }); } }); $scope.next = function (key) { if (key === 13) $scope.focused++; }; $scope.salir = function () { if (!$scope.formVehiculo.$pristine && focaAbmVehiculoService.cisternasPristine) { focaModalService.confirm( '¿Está seguro de que desea salir? Se perderán todos los datos cargados.' ).then(function (data) { if (data) { $location.path('/vehiculo'); } }); } else { $location.path('/vehiculo'); } }; $scope.editar = function (cisterna) { $scope.cisternas.forEach(function (cisterna) { cisterna.editando = false; $scope.crear = true; }); cisterna.editando = true; $scope.inicial = angular.copy(cisterna); }; $scope.volver = function (cisterna, key) { if (cisterna.id === undefined || !$scope.crear) { $scope.cisternas.shift(cisterna); $scope.crear = false; return; } if (cisterna.id !== undefined) { $scope.cisternas[key] = $scope.inicial; $scope.cisternas[key].editando = false; } $scope.crear = false; }; $scope.crearCisterna = function () { var cisterna = { codigo: '', capacidad: '', idUnidadMedida: 0, unidadMedida: {}, editando: true, }; $scope.cisternas.unshift(cisterna); $scope.crear = true; }; $scope.seleccionarUnidadMedida = function (cisterna) { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Unidades de medida', templateUrl: 'modal-unidad-medida.html', controller: 'focaModalUnidadMedidaCtrl', size: 'lg' } ); modalInstance.result.then(function (unidaMedida) { cisterna.idUnidadMedida = unidaMedida.ID; cisterna.unidadMedida = unidaMedida; }); }; $scope.guardar = function (key) { key = (typeof key === 'undefined') ? 13 : key; if (key === 13) { if ($scope.formVehiculo.$pristine && focaAbmVehiculoService.cisternasPristine) { $scope.salir(); return; } $scope.cisternas.forEach(function (cisterna) { if (cisterna.id === 0) cisterna.id = undefined; }); if (!$scope.vehiculo.codigo) { focaModalService.alert('Ingrese unidad'); return; } else if (!$scope.vehiculo.tractor) { focaModalService.alert('Ingrese dominio tractor'); return; } else if (!$scope.vehiculo.semi) { focaModalService.alert('Ingrese dominio semi'); return; } else if (!$scope.vehiculo.capacidad) { focaModalService.alert('Ingrese capacidad total'); return; } //Valida si existe numero de unidad if (!validaTotalCargas() && !$scope.nuevo) { focaModalService.alert('La suma de las capacidades de las cisternas' + ' debe ser igual a la capacidad total del vehículo'); return; } if ($scope.nuevo) { validaCodigoUnidad().then(function () { delete $scope.vehiculo.transportista; focaAbmVehiculoService.guardarVehiculo($scope.vehiculo) .then(function (res) { $routeParams.idVehiculo = res.data.id; guardarCisternas($scope.cisternas).then(function () { angular.element('#guardar').addClass('guardado'); $timeout(function () {$location.path('/vehiculo');},300); }); }); }, function () { focaModalService.alert('Código de unidad existente'); }); } else { guardarCisternas($scope.cisternas).then(function () { angular.element('#guardar').addClass('guardado'); $timeout(function () {$location.path('/vehiculo');},500); }); } } }; //Agregar propiedades de cisterna $scope.$watch('vehiculo', function (newValue) { focaBotoneraLateralService.setPausarData({ label: 'vehiculo', val: { codigo: newValue.codigo, tractor: newValue.tractor, semi: newValue.semi, capacidad: newValue.capacidad, idVehiculo: newValue.idVehiculo, idTransportista: newValue.idTransportista } }); }, true); function getLSVehiculo() { var vehiculo = JSON.parse($localStorage.vehiculo || null); if (vehiculo) { setearVehiculo(vehiculo); delete $localStorage.vehiculo; return true; } return false; } function setearVehiculo(vehiculo) { $scope.vehiculo = vehiculo; $scope.$broadcast('addCabecera', { label: 'Vehiculo:', valor: $filter('rellenarDigitos')(vehiculo.codigo) + ' - ' }); } $scope.solicitarConfirmacionTabla = function (cisterna) { focaModalService.confirm('¿Está seguro que desea borrar la cisterna ' + cisterna.id + ' ' + cisterna.codigo + ' ?') .then(function (data) { if (data) { cisterna.desactivado = true; } }); return; }; function validaCodigoUnidad() { return new Promise(function (resolve, reject) { focaAbmVehiculoService .getVehiculosPorTransportista(parseInt($routeParams.idTransportista)) .then(function (res) { //Valida si existe numero de unidad var existe = res.data.filter(function (vehiculo) { return vehiculo.codigo === $scope.vehiculo.codigo && vehiculo.id !== $scope.vehiculo.id; }); if (existe.length) { reject(existe); } else { resolve(); } }); }); } function validaTotalCargas() { var total = 0; $scope.cisternas.forEach(function (cisterna) { if (!cisterna.desactivado) { total += parseInt(cisterna.capacidad); } }); return $scope.vehiculo.capacidad >= total; } function guardarCisternas() { var cisternas = $scope.cisternas.map(function (cisterna) { return { id: cisterna.id, capacidad: parseFloat(cisterna.capacidad), codigo: cisterna.codigo, idUnidadMedida: cisterna.idUnidadMedida, idVehiculo: $routeParams.idVehiculo, desactivado: cisterna.desactivado }; }); return focaAbmVehiculoService.guardarCisternas(cisternas); } $scope.agregarCisterna = function (cisterna) { if (!cisterna) { focaModalService.alert('Ingrese valores'); return; } else if (!cisterna.codigo) { focaModalService.alert('Ingrese codigo de cisterna'); return; } else if (!cisterna.capacidad) { focaModalService.alert('Ingrese capacidad'); return; } else if (!cisterna.idUnidadMedida) { focaModalService.alert('Ingrese unidad de medida'); return; } else if (cisterna.id === undefined) { cisterna.id = 0; } validaCodigo(cisterna); }; if ($routeParams.idx !== -1) { $scope.cisterna = [$routeParams.idx]; focaAbmVehiculoService .getCisternas($routeParams.idVehiculo) .then(function (res) { $scope.cisterna = res[$routeParams.idx]; }); } function validaCodigo(cisterna) { focaAbmVehiculoService .getCisternas($routeParams.idVehiculo) .then(function (res) { var cisternas = res; var totalCargado = 0; for (var i = 0; i < cisternas.length; i++) { //SI EL CODIGO YA EXISTE if (cisternas[i].codigo === cisterna.codigo && i !== $routeParams.idx && cisternas[i].desactivado === false && cisternas[i].id !== cisterna.id ) { focaModalService.alert('Código de cisterna existente'); cisterna.editando = true; return; } if (i !== $routeParams.idx && !cisternas[i].desactivado) { totalCargado += cisternas[i].capacidad; } } $timeout(function () { cisterna.editando = false; $scope.crear = false; }); }); } } ]);