angular.module('focaCrearNotaPedido') .controller('notaPedidoCtrl', [ '$scope', '$uibModal', '$location', '$filter', 'crearNotaPedidoService', 'focaModalService', function( $scope, $uibModal, $location, $filter, crearNotaPedidoService, focaModalService ) { $scope.botonera = [ {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() {}}, {texto: '', accion: function() {}} ]; $scope.datepickerAbierto = false; $scope.show = false; $scope.cargando = true; $scope.dateOptions = { maxDate: new Date(), minDate: new Date(2010, 0, 1) }; $scope.notaPedido = { vendedor: {}, cliente: {}, domicilio: {dom: ''}, moneda: {detalle: ''} }; $scope.cabecera = []; $scope.showCabecera = true; $scope.now = new Date(); $scope.puntoVenta = Math.round(Math.random() * 10000); $scope.comprobante = Math.round(Math.random() * 1000000); $scope.articulosTabla = []; var idLista; var notaPedidoTemp = crearNotaPedidoService.getNotaPedido(); crearNotaPedidoService.getPrecioCondicion().then( function(res) { $scope.precioCondiciones = res.data; } ); if (notaPedidoTemp !== undefined) { notaPedidoTemp.fechaCarga = new Date(notaPedidoTemp.fechaCarga); $scope.notaPedido = notaPedidoTemp; $scope.notaPedido.flete = ($scope.notaPedido.flete).toString(); $scope.notaPedido.bomba = ($scope.notaPedido.bomba).toString(); idLista = $scope.notaPedido.precioCondicion; crearNotaPedidoService .getArticulosByIdNotaPedido($scope.notaPedido.id).then( function(res) { $scope.articulosTabla = res.data; } ); //TODO DOMICILIOS QUE SE CARGAN AL EDITAR NOTA DE PEDIDO //(NO REQUERIDO EN ESTA VERSION) // crearNotaPedidoService.getDomiciliosByIdNotaPedido($scope.notaPedido.id).then( // function(res) { // $scope.notaPedido.domicilio = res.data; // } // ); } else { $scope.notaPedido.fechaCarga = new Date(); $scope.notaPedido.bomba = '0'; $scope.notaPedido.flete = '0'; idLista = undefined; } //TO DO - FUNCIONES PARA MULTIPLES DOMICILIOS NO IMPLEMENTADAS EN ESTA DEMO // $scope.addNewDom = function() { // $scope.notaPedido.domicilio.push({ 'id': 0 }); // }; // $scope.removeNewChoice = function(choice) { // if ($scope.notaPedido.domicilio.length > 1) { // $scope.notaPedido.domicilio.splice($scope.notaPedido.domicilio.findIndex( // function(c) { // return c.$$hashKey === choice.$$hashKey; // } // ), 1); // } // }; $scope.crearNotaPedido = function() { if($scope.articulosTabla.length === 0) { focaModalService.alert('Debe cargar almenos un articulo'); return; } if($scope.notaPedido.domicilio.id === undefined) { $scope.notaPedido.domicilio.id = 0; } var date = new Date(); var notaPedido = { id: 0, fechaCarga: new Date(date.getTime() - (date.getTimezoneOffset() * 60000)) .toISOString().slice(0, 19).replace('T', ' '), vendedor: $scope.notaPedido.vendedor.nombre, idCliente: $scope.notaPedido.cliente.id, domicilio: $scope.notaPedido.domicilio, bomba: $scope.notaPedido.bomba, flete: $scope.notaPedido.flete, total: $scope.getTotal() }; crearNotaPedidoService.crearNotaPedido(notaPedido).then( function(data) { focaModalService.alert('Nota pedido creada'); if($scope.notaPedido.flete === 1) { var flete = { idNotaPedido: data.data.id, idTransportista: $scope.notaPedido.fleteId, idChofer: $scope.notaPedido.chofer.id, idVehiculo: $scope.notaPedido.vehiculo.id, kilometros: $scope.notaPedido.kilometros, costoKilometro: $scope.notaPedido.costoUnitarioKmFlete }; crearNotaPedidoService.crearFlete(flete); } var articulosNotaPedido = $scope.articulosTabla; for(var i = 0; i < articulosNotaPedido.length; i++) { delete articulosNotaPedido[i].edit; articulosNotaPedido[i].idNotaPedido = data.data.id; crearNotaPedidoService .crearArticulosParaNotaPedido(articulosNotaPedido[i]); } $scope.limpiarPantalla(); } ); }; $scope.seleccionarArticulo = function() { if (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: { idLista: function() { return idLista; } }, 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: producto.precio.toFixed(2), costoUnitario: producto.costo, edit: 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.notaPedido.vendedor.nombre = vendedor.NomVen; }, function() { } ); }; $scope.seleccionarProveedor = function() { var modalInstance = $uibModal.open( { ariaLabelledBy: 'Busqueda de Proveedor', templateUrl: 'modal-proveedor.html', controller: 'focaModalProveedorCtrl', size: 'lg' } ); modalInstance.result.then( function(proveedor) { $scope.notaPedido.proveedor = proveedor.NOM; 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.notaPedido.cliente.nombre = cliente.nom; $scope.notaPedido.cliente.id = cliente.cod; crearNotaPedidoService.getDomiciliosByIdCliente(cliente.cod).then( function(data) { if(data.data.length === 0){ focaModalService .alert('El cliente no tienen domicilios de entrega') .then( function() { $scope.seleccionarCliente(); $scope.notaPedido.cliente = {nombre: ''}; } ); return; } var modalInstanceDomicilio = $uibModal.open( { ariaLabelledBy: 'Busqueda de Domicilios', templateUrl: 'modal-domicilio.html', controller: 'focaModalDomicilioController', resolve: { idCliente: function() { return cliente.cod; }}, size: 'lg', backdrop: 'static', } ); modalInstanceDomicilio.result.then( function(domicilio) { focaModalService.alert('Domicilio elegido' + domicilio.dom); }, function() { $scope.notaPedido.cliente.nombre = ''; $scope.notaPedido.cliente.id = ''; removeCabecera('Cliente:'); $scope.seleccionarCliente(); return; } ); } ); addCabecera('Cliente:', cliente.nom); }, function() { } ); }; $scope.mostrarFichaCliente = function() { $uibModal.open( { ariaLabelledBy: 'Datos del Cliente', templateUrl: 'foca-crear-nota-pedido-ficha-cliente.html', controller: 'focaCrearNotaPedidoFichaClienteController', 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 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; 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 idLista = -1; //-1, el modal productos busca todos los productos $scope.notaPedido.plazoPago = 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.notaPedido.flete, bomba: $scope.notaPedido.bomba, kilometros: $scope.notaPedido.kilometros }; } } } ); modalInstance.result.then( function(datos) { $scope.notaPedido.flete = datos.flete; $scope.notaPedido.bomba = datos.bomba; $scope.notaPedido.kilometros = datos.kilometros; addCabecera('Flete:', datos.flete); if(datos.flete === 'si') { addCabecera('Bomba:', datos.bomba); addCabecera('Kilometros:', datos.kilometros); } else { removeCabecera('Bomba:'); removeCabecera('Kilometros:'); } }, 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.notaPedido.moneda = { id: moneda.ID, detalle: moneda.DETALLE, simbolo: moneda.SIMBOLO }; addCabecera('Moneda:', moneda.DETALLE); }, 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.edit = false; } }; $scope.cambioEdit = function(articulo) { articulo.edit = true; }; $scope.limpiarFlete = function() { $scope.notaPedido.fleteNombre = ''; $scope.notaPedido.chofer = ''; $scope.notaPedido.vehiculo = ''; $scope.notaPedido.kilometros = ''; $scope.notaPedido.costoUnitarioKmFlete = ''; $scope.choferes = ''; $scope.vehiculos = ''; }; $scope.limpiarPantalla = function() { $scope.limpiarFlete(); $scope.notaPedido.flete = '0'; $scope.notaPedido.bomba = '0'; $scope.notaPedido.precioCondicion = ''; $scope.articulosTabla = []; $scope.notaPedido.vendedor.nombre = ''; $scope.notaPedido.cliente = {nombre: ''}; $scope.notaPedido.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 addCabecera(label, valor) { var propiedad = $filter('filter')($scope.cabecera, {label: label}); 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}); if(propiedad.length === 1){ $scope.cabecera.splice($scope.cabecera.indexOf(propiedad[0]), 1); } } } ] ) .controller('notaPedidoListaCtrl', [ '$scope', 'crearNotaPedidoService', '$location', function($scope, crearNotaPedidoService, $location) { crearNotaPedidoService.obtenerNotaPedido().then(function(datos) { $scope.notaPedidos = datos.data; }); $scope.editar = function(notaPedido) { crearNotaPedidoService.setNotaPedido(notaPedido); $location.path('/venta-nota-pedido/abm/'); }; $scope.crearPedido = function() { crearNotaPedidoService.clearNotaPedido(); $location.path('/venta-nota-pedido/abm/'); }; } ]) .controller('focaCrearNotaPedidoFichaClienteController', [ '$scope', 'crearNotaPedidoService', '$location', function($scope, crearNotaPedidoService, $location) { crearNotaPedidoService.obtenerNotaPedido().then(function(datos) { $scope.notaPedidos = datos.data; }); $scope.editar = function(notaPedido) { crearNotaPedidoService.setNotaPedido(notaPedido); $location.path('/venta-nota-pedido/abm/'); }; $scope.crearPedido = function() { crearNotaPedidoService.clearNotaPedido(); $location.path('/venta-nota-pedido/abm/'); }; } ]);