angular.module('focaCrearRemito') .controller('remitoController', [ '$scope', '$uibModal', '$location', '$filter', 'crearRemitoService', 'focaModalService', 'remitoBusinessService', function( $scope, $uibModal, $location, $filter, crearRemitoService, focaModalService, remitoBusinessService ) { $scope.botonera = [ {texto: 'Nota Pedido', accion: function() {$scope.seleccionarNotaPedido();}}, {texto: 'Vendedor', accion: function() {$scope.seleccionarVendedor();}}, {texto: 'Cliente', accion: function() {$scope.seleccionarCliente();}}, {texto: 'Proveedor', accion: function() {$scope.seleccionarProveedor();}}, {texto: 'Moneda', accion: function() {$scope.abrirModalMoneda();}}, { texto: 'Precios y condiciones', accion: function() {$scope.abrirModalListaPrecio();}}, {texto: 'Flete', accion: function() {$scope.abrirModalFlete();}}, {texto: '', accion: function() {}} ]; $scope.datepickerAbierto = false; $scope.show = false; $scope.cargando = true; $scope.dateOptions = { maxDate: new Date(), minDate: new Date(2010, 0, 1) }; $scope.remito = { vendedor: {}, cliente: {}, proveedor: {}, domicilio: {dom: ''}, moneda: {}, cotizacion: {} }; var monedaPorDefecto; //Trabajo con la cotización más reciente, por eso uso siempre la primera '[0]' crearRemitoService.getCotizacionByIdMoneda(1).then(function(res) { monedaPorDefecto = { id: res.data[0].ID, detalle: res.data[0].DETALLE, simbolo: res.data[0].SIMBOLO, cotizaciones: res.data[0].cotizaciones }; addCabecera('Moneda:', monedaPorDefecto.detalle); addCabecera('Fecha cotizacion:', new Date(monedaPorDefecto.cotizaciones[0].FECHA).toLocaleDateString()); addCabecera('Cotizacion:', monedaPorDefecto.cotizaciones[0].COTIZACION); $scope.remito.moneda = monedaPorDefecto; $scope.remito.cotizacion = monedaPorDefecto.cotizaciones[0]; }); $scope.cabecera = []; $scope.showCabecera = true; $scope.now = new Date(); $scope.puntoVenta = rellenar(0, 4); $scope.comprobante = rellenar(0, 8); $scope.articulosTabla = []; $scope.idLista = undefined; //La pantalla solo se usa para cargar remitos //var remitoTemp = crearRemitoService.getRemito(); crearRemitoService.getPrecioCondicion().then( function(res) { $scope.precioCondiciones = res.data; } ); crearRemitoService.getNumeroRemito().then( function(res) { $scope.puntoVenta = rellenar(res.data.sucursal, 4); $scope.comprobante = rellenar(res.data.numeroRemito, 8); }, function(err) { focaModalService.alert('La terminal no esta configurada correctamente'); console.info(err); } ); $scope.seleccionarNotaPedido = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Nota de Pedido', templateUrl: 'foca-modal-nota-pedido.html', controller: 'focaModalNotaPedidoController', size: 'lg' } ); modalInstance.result.then( function(notaPedido) { //añado cabeceras removeCabecera('Moneda:'); removeCabecera('Fecha cotizacion:'); removeCabecera('Cotizacion:'); var cabeceras = [ { label: 'Moneda', valor: notaPedido.cotizacion[0].moneda[0].DETALLE }, { label: 'Fecha cotizacion', valor: $filter('date')(notaPedido.cotizacion[0].FECHA, 'dd/MM/yyyy') }, { label: 'Cotizacion', valor: notaPedido.cotizacion[0].VENDEDOR }, { label: 'Cliente:', valor: notaPedido.cliente[0].NOM }, { label: 'Vendedor:', valor: notaPedido.vendedor[0].NomVen }, { label: 'Proveedor:', valor: notaPedido.proveedor[0].NOM }, { label: 'Flete:', valor: notaPedido.flete === 1 ? 'Si' : 'No' }, { label: 'FOB:', valor: notaPedido.fob === 1 ? 'Si' : 'No' }, { label: 'Precio condicion:', valor: valorPrecioCondicion() } ]; //TO DO CUANDO MOSTRAR PLAZOS function valorPrecioCondicion() { if(notaPedido.idPrecioCondicion > 0) { return notaPedido.precioCondicion[0].nombre; } else { return 'Ingreso Manual'; } } if(notaPedido.flete === 1) { var cabeceraBomba = { label: 'Bomba', valor: notaPedido.bomba === 1 ? 'Si' : 'No' }; if(notaPedido.kilometros) { var cabeceraKilometros = { label: 'Kilometros', valor: notaPedido.kilometros }; cabeceras.push(cabeceraKilometros); } cabeceras.push(cabeceraBomba); } $scope.articulosTabla = notaPedido.articulosNotaPedido; $scope.idLista = notaPedido.precioCondicion[0].idListaPrecio; $scope.remito = notaPedido; $scope.remito.vendedor = notaPedido.vendedor[0]; $scope.remito.cliente = notaPedido.cliente[0]; $scope.remito.proveedor = notaPedido.proveedor[0]; $scope.remito.moneda = notaPedido.cotizacion[0].moneda[0]; $scope.remito.cotizacion = notaPedido.cotizacion[0]; addArrayCabecera(cabeceras); }, function() { // funcion ejecutada cuando se cancela el modal } ); }; $scope.seleccionarRemito = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Remito', templateUrl: 'foca-modal-remito.html', controller: 'focaModalRemitoController', size: 'lg' } ); modalInstance.result.then( function() { // TODO: Implementar carga remito }, function() { // funcion ejecutada cuando se cancela el modal } ); }; //La pantalla solo se usa para cargar remitos // if (remitoTemp !== undefined) { // remitoTemp.fechaCarga = new Date(remitoTemp.fechaCarga); // $scope.remito = remitoTemp; // $scope.remito.flete = ($scope.remito.flete).toString(); // $scope.remito.bomba = ($scope.remito.bomba).toString(); // $scope.idLista = $scope.remito.precioCondicion; // crearRemitoService // .getArticulosByIdRemito($scope.remito.id).then( // function(res) { // $scope.articulosTabla = res.data; // } // ); //TODO DOMICILIOS QUE SE CARGAN AL EDITAR REMITO //(NO REQUERIDO EN ESTA VERSION) // crearRemitoService.getDomiciliosByIdRemito($scope.remito.id).then( // function(res) { // $scope.remito.domicilio = res.data; // } // ); // } else { // $scope.remito.fechaCarga = new Date(); // $scope.remito.bomba = '0'; // $scope.remito.flete = '0'; // $scope.idLista = undefined; // } //TO DO - FUNCIONES PARA MULTIPLES DOMICILIOS NO IMPLEMENTADAS EN ESTA DEMO // $scope.addNewDom = function() { // $scope.remito.domicilio.push({ 'id': 0 }); // }; // $scope.removeNewChoice = function(choice) { // if ($scope.remito.domicilio.length > 1) { // $scope.remito.domicilio.splice($scope.remito.domicilio.findIndex( // function(c) { // return c.$$hashKey === choice.$$hashKey; // } // ), 1); // } // }; //validacion por domicilio y por plazo pago $scope.crearRemito = function() { if(!$scope.remito.vendedor) { focaModalService.alert('Ingrese Vendedor'); return; } else if(!$scope.remito.cliente) { focaModalService.alert('Ingrese Cliente'); return; } else if(!$scope.remito.proveedor) { focaModalService.alert('Ingrese Proveedor'); return; } else if(!$scope.remito.moneda.ID) { focaModalService.alert('Ingrese Moneda'); return; } else if(!$scope.remito.cotizacion.ID) { focaModalService.alert('Ingrese Cotización'); return; } else if( $scope.remito.flete === undefined || $scope.remito.flete === null) { focaModalService.alert('Ingrese Flete'); return; } else if($scope.articulosTabla.length === 0) { focaModalService.alert('Debe cargar al menos un articulo'); return; } var date = new Date(); var remito = { id: 0, fechaRemito: new Date(date.getTime() - (date.getTimezoneOffset() * 60000)) .toISOString().slice(0, 19).replace('T', ' '),//TODO$filter idCliente: $scope.remito.idCliente, nombreCliente: $scope.remito.nombreCliente, cuitCliente: $scope.remito.cuitCliente, responsabilidadIvaCliente: 0,//TODO, descuento: 0,//TODO, importeNeto: 0,//TODO importeExento: 0,//TODO importeIva: 0,//TODO importeIvaServicios: 0,//TODO importeImpuestoInterno: 0,//TODO importeImpuestoInterno1: 0,//TODO importeImpuestoInterno2: 0,//TODO percepcion: 0,//TODO percepcionIva: 0,//TODO redondeo: 0,//TODO total: $scope.getTotal(), numeroNotaPedido: $scope.remito.numeroNotaPedido, anulado: false, planilla: 0,//TODO lugar: 0,//TODO cuentaMadre: 0,// cuentaContable: 0,//TODO asiento: 0,//TODO e_hd: '',//TODO c_hd: '', numeroLiquidoProducto: 0,//TODO idVendedor: $scope.remito.idVendedor, idProveedor: $scope.remito.idProveedor, idDomicilio: 0,//TODO idCotizacion: $scope.remito.idCotizacion, flete: $scope.remito.flete, fob: $scope.remito.fob, bomba: $scope.remito.bomba, kilometros: $scope.remito.kilometros, estado: 0,//TODO destinoVenta: 0,//TODO operacionTipo: 0//TODO }; crearRemitoService.crearRemito(remito).then( function(data) { remitoBusinessService.addArticulos($scope.articulosTabla, data.data.id, $scope.remito.cotizacion.COTIZACION); focaModalService.alert('Nota remito creada'); $scope.cabecera = []; addCabecera('Moneda:', $scope.remito.moneda.detalle); addCabecera( 'Fecha cotizacion:', $filter('date')($scope.remito.cotizacion.FECHA, 'dd/MM/yyyy') ); addCabecera('Cotizacion:', $scope.remito.cotizacion.COTIZACION); $scope.remito.vendedor = {}; $scope.remito.cliente = {}; $scope.remito.proveedor = {}; $scope.remito.domicilio = {}; $scope.remito.flete = null; $scope.remito.fob = null; $scope.remito.bomba = null; $scope.remito.kilometros = null; $scope.articulosTabla = []; } ); }; $scope.seleccionarArticulo = function() { if ($scope.idLista === undefined) { focaModalService.alert( 'Primero seleccione una lista de precio y condicion'); return; } var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Productos', templateUrl: 'modal-busqueda-productos.html', controller: 'modalBusquedaProductosCtrl', resolve: { parametroProducto: { idLista: $scope.idLista, cotizacion: $scope.remito.cotizacion.COTIZACION, simbolo: $scope.remito.moneda.simbolo } }, size: 'lg' } ); modalInstance.result.then( function(producto) { var newArt = { id: 0, codigo: producto.codigo, sector: producto.sector, sectorCodigo: producto.sector + '-' + producto.codigo, descripcion: producto.descripcion, item: $scope.articulosTabla.length + 1, nombre: producto.descripcion, precio: parseFloat(producto.precio.toFixed(4)), costoUnitario: producto.costo, editCantidad: false, editPrecio: false }; $scope.articuloACargar = newArt; $scope.cargando = false; }, function() { // funcion ejecutada cuando se cancela el modal } ); }; $scope.seleccionarVendedor = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Vendedores', templateUrl: 'modal-vendedores.html', controller: 'modalVendedoresCtrl', size: 'lg' } ); modalInstance.result.then( function(vendedor) { addCabecera('Vendedor:', vendedor.NomVen); $scope.remito.vendedor.codigo = vendedor.CodVen; }, function() { } ); }; $scope.seleccionarProveedor = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Proveedor', templateUrl: 'modal-proveedor.html', controller: 'focaModalProveedorCtrl', size: 'lg', resolve: { transportista: function() { return false; } } } ); modalInstance.result.then( function(proveedor) { $scope.remito.proveedor.codigo = proveedor.COD; addCabecera('Proveedor:', proveedor.NOM); }, function() { } ); }; $scope.seleccionarCliente = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cliente', templateUrl: 'foca-busqueda-cliente-modal.html', controller: 'focaBusquedaClienteModalController', size: 'lg' } ); modalInstance.result.then( function(cliente) { $scope.abrirModalDomicilios(cliente); }, function() { } ); }; $scope.abrirModalDomicilios = function(cliente) { var modalInstanceDomicilio = $uibModal.open( { ariaLabelledBy: 'Busqueda de Domicilios', templateUrl: 'modal-domicilio.html', controller: 'focaModalDomicilioController', resolve: { idCliente: function() { return cliente.cod; }}, size: 'lg', } ); modalInstanceDomicilio.result.then( function(domicilio) { $scope.remito.domicilio.id = domicilio.nivel2; $scope.remito.cliente = cliente; addCabecera('Cliente:', cliente.nom); addCabecera('Domicilio:', domicilio.dom); }, function() { $scope.seleccionarCliente(); return; } ); }; $scope.mostrarFichaCliente = function() { $uibModal.open( { ariaLabelledBy: 'Datos del Cliente', templateUrl: 'foca-crear-remito-ficha-cliente.html', controller: 'focaCrearRemitoFichaClienteController', size: 'lg' } ); }; $scope.getTotal = function() { var total = 0; var arrayTempArticulos = $scope.articulosTabla; for (var i = 0; i < arrayTempArticulos.length; i++) { total += arrayTempArticulos[i].precio * arrayTempArticulos[i].cantidad; } return parseFloat(total.toFixed(2)); }; $scope.getSubTotal = function() { if($scope.articuloACargar) { return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad; } }; $scope.abrirModalListaPrecio = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Precio Condición', templateUrl: 'modal-precio-condicion.html', controller: 'focaModalPrecioCondicionController', size: 'lg' } ); modalInstance.result.then( function(precioCondicion) { var cabecera = ''; var plazosConcat = ''; if(!Array.isArray(precioCondicion)) { $scope.plazosPagos = precioCondicion.plazoPago; $scope.idLista = precioCondicion.idListaPrecio; for(var i = 0; i < precioCondicion.plazoPago.length; i++) { plazosConcat += precioCondicion.plazoPago[i].dias + ' '; } cabecera = precioCondicion.nombre + ' ' + plazosConcat.trim(); } else { //Cuando se ingresan los plazos manualmente $scope.idLista = -1; //-1, el modal productos busca todos los productos $scope.plazosPagos = precioCondicion; for(var j = 0; j < precioCondicion.length; j++) { plazosConcat += precioCondicion[j].dias + ' '; } cabecera = 'Ingreso manual ' + plazosConcat.trim(); } $scope.articulosTabla = []; addCabecera('Precios y condiciones:', cabecera); }, function() { } ); }; $scope.abrirModalFlete = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Flete', templateUrl: 'modal-flete.html', controller: 'focaModalFleteController', size: 'lg', resolve: { parametrosFlete: function() { return { flete: $scope.remito.flete ? '1' : ($scope.remito.fob ? 'FOB' : ($scope.remito.flete === undefined ? null : '0')), bomba: $scope.remito.bomba ? '1' : ($scope.remito.bomba === undefined ? null : '0'), kilometros: $scope.remito.kilometros }; } } } ); modalInstance.result.then( function(datos) { $scope.remito.flete = datos.flete; $scope.remito.fob = datos.FOB; $scope.remito.bomba = datos.bomba; $scope.remito.kilometros = datos.kilometros; addCabecera('Flete:', datos.flete ? 'Si' : ($scope.remito.fob ? 'FOB' : 'No')); if(datos.flete) { addCabecera('Bomba:', datos.bomba ? 'Si' : 'No'); addCabecera('Kilometros:', datos.kilometros); } else { removeCabecera('Bomba:'); removeCabecera('Kilometros:'); $scope.remito.fob = false; $scope.remito.bomba = false; $scope.remito.kilometros = null; } }, function() { } ); }; $scope.abrirModalMoneda = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Moneda', templateUrl: 'modal-moneda.html', controller: 'focaModalMonedaController', size: 'lg' } ); modalInstance.result.then( function(moneda) { $scope.abrirModalCotizacion(moneda); }, function() { } ); }; $scope.abrirModalCotizacion = function(moneda) { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Cotización', templateUrl: 'modal-cotizacion.html', controller: 'focaModalCotizacionController', size: 'lg', resolve: {idMoneda: function() {return moneda.ID;}} } ); modalInstance.result.then( function(cotizacion) { var articulosTablaTemp = $scope.articulosTabla; for(var i = 0; i < articulosTablaTemp.length; i++) { articulosTablaTemp[i].precio = articulosTablaTemp[i].precio * $scope.remito.cotizacion.COTIZACION; articulosTablaTemp[i].precio = articulosTablaTemp[i].precio / cotizacion.COTIZACION; } $scope.articulosTabla = articulosTablaTemp; $scope.remito.moneda = { id: moneda.ID, detalle: moneda.DETALLE, simbolo: moneda.SIMBOLO }; $scope.remito.cotizacion = { ID: cotizacion.ID, COTIZACION: cotizacion.COTIZACION, FECHA: cotizacion.FECHA }; addCabecera('Moneda:', moneda.DETALLE); addCabecera( 'Fecha cotizacion:', $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy') ); addCabecera('Cotizacion:', cotizacion.COTIZACION); }, function() { } ); }; $scope.agregarATabla = function(key) { if(key === 13) { if($scope.articuloACargar.cantidad === undefined || $scope.articuloACargar.cantidad === 0 || $scope.articuloACargar.cantidad === null ) { focaModalService.alert('El valor debe ser al menos 1'); return; } delete $scope.articuloACargar.sectorCodigo; $scope.articulosTabla.push($scope.articuloACargar); $scope.cargando = true; } }; $scope.quitarArticulo = function(key) { $scope.articulosTabla.splice(key, 1); }; $scope.editarArticulo = function(key, articulo) { if(key === 13) { if(articulo.cantidad === null || articulo.cantidad === 0 || articulo.cantidad === undefined) { focaModalService.alert('El valor debe ser al menos 1'); return; } articulo.editCantidad = false; articulo.editPrecio = false; } }; $scope.cambioEdit = function(articulo, propiedad) { if(propiedad === 'cantidad') { articulo.editCantidad = true; } else if(propiedad === 'precio') { articulo.editPrecio = true; } }; $scope.limpiarFlete = function() { $scope.remito.fleteNombre = ''; $scope.remito.chofer = ''; $scope.remito.vehiculo = ''; $scope.remito.kilometros = ''; $scope.remito.costoUnitarioKmFlete = ''; $scope.choferes = ''; $scope.vehiculos = ''; }; $scope.limpiarPantalla = function() { $scope.limpiarFlete(); $scope.remito.flete = '0'; $scope.remito.bomba = '0'; $scope.remito.precioCondicion = ''; $scope.articulosTabla = []; $scope.remito.vendedor.nombre = ''; $scope.remito.cliente = {nombre: ''}; $scope.remito.domicilio = {dom: ''}; $scope.domiciliosCliente = []; }; $scope.resetFilter = function() { $scope.articuloACargar = {}; $scope.cargando = true; }; $scope.selectFocus = function($event) { $event.target.select(); }; $scope.salir = function() { $location.path('/'); }; function addArrayCabecera(array) { for(var i = 0; i < array.length; i++) { addCabecera(array[i].label, array[i].valor); } } function addCabecera(label, valor) { var propiedad = $filter('filter')($scope.cabecera, {label: label}, true); if(propiedad.length === 1) { propiedad[0].valor = valor; } else { $scope.cabecera.push({label: label, valor: valor}); } } function removeCabecera(label) { var propiedad = $filter('filter')($scope.cabecera, {label: label}, true); if(propiedad.length === 1) { $scope.cabecera.splice($scope.cabecera.indexOf(propiedad[0]), 1); } } function rellenar(relleno, longitud) { relleno = '' + relleno; while (relleno.length < longitud) { relleno = '0' + relleno; } return relleno; } } ] ) .controller('remitoListaCtrl', [ '$scope', 'crearRemitoService', '$location', function($scope, crearRemitoService, $location) { crearRemitoService.obtenerRemito().then(function(datos) { $scope.remitos = datos.data; }); $scope.editar = function(remito) { crearRemitoService.setRemito(remito); $location.path('/venta-nota-remito/abm/'); }; $scope.crearRemito = function() { crearRemitoService.clearRemito(); $location.path('/venta-nota-remito/abm/'); }; } ]) .controller('focaCrearRemitoFichaClienteController', [ '$scope', 'crearRemitoService', '$location', function($scope, crearRemitoService, $location) { crearRemitoService.obtenerRemito().then(function(datos) { $scope.remitos = datos.data; }); $scope.editar = function(remito) { crearRemitoService.setRemito(remito); $location.path('/venta-nota-remito/abm/'); }; $scope.crearRemito = function() { crearRemitoService.clearRemito(); $location.path('/venta-nota-remito/abm/'); }; } ]);