Commit e40d9b090658517428d41e5fd48168da32ebca59

Authored by Eric Fernandez
Exists in master

Merge branch 'master' into 'develop'

Master

See merge request !73
src/js/controller.js
1 angular.module('focaCrearNotaPedido') .controller('notaPedidoCtrl', 1 angular.module('focaCrearNotaPedido') .controller('notaPedidoCtrl',
2 [ 2 [
3 '$scope', 3 '$scope',
4 '$uibModal', 4 '$uibModal',
5 '$location', 5 '$location',
6 '$filter', 6 '$filter',
7 '$timeout', 7 '$timeout',
8 'crearNotaPedidoService', 8 'crearNotaPedidoService',
9 'focaBotoneraLateralService', 9 'focaBotoneraLateralService',
10 'focaModalService', 10 'focaModalService',
11 'notaPedidoBusinessService', 11 'notaPedidoBusinessService',
12 '$rootScope', 12 '$rootScope',
13 'focaSeguimientoService', 13 'focaSeguimientoService',
14 'APP', 14 'APP',
15 'focaLoginService', 15 'focaLoginService',
16 '$localStorage', 16 '$localStorage',
17 function( 17 function(
18 $scope, $uibModal, $location, $filter, $timeout, crearNotaPedidoService, 18 $scope, $uibModal, $location, $filter, $timeout, crearNotaPedidoService,
19 focaBotoneraLateralService, focaModalService, notaPedidoBusinessService, 19 focaBotoneraLateralService, focaModalService, notaPedidoBusinessService,
20 $rootScope, focaSeguimientoService, APP, focaLoginService, $localStorage) 20 $rootScope, focaSeguimientoService, APP, focaLoginService, $localStorage)
21 { 21 {
22 config(); 22 config();
23 23
24 function config() { 24 function config() {
25 // PARAMETROS INICIALES PARA FUNCIONAMIENTO DEL PROGRAMA 25 // PARAMETROS INICIALES PARA FUNCIONAMIENTO DEL PROGRAMA
26 $scope.tmpCantidad = Number;
27 $scope.tmpPrecio = Number;
26 $scope.notaPedido = {}; 28 $scope.notaPedido = {};
27 $scope.isNumber = angular.isNumber; 29 $scope.isNumber = angular.isNumber;
28 $scope.datepickerAbierto = false; 30 $scope.datepickerAbierto = false;
29 $scope.show = false; 31 $scope.show = false;
30 $scope.cargando = true; 32 $scope.cargando = true;
31 $scope.botonera = crearNotaPedidoService.getBotonera(); 33 $scope.botonera = crearNotaPedidoService.getBotonera();
32 $scope.puntoVenta = $filter('rellenarDigitos')(0, 4); 34 $scope.puntoVenta = $filter('rellenarDigitos')(0, 4);
33 $scope.comprobante = $filter('rellenarDigitos')(0, 8); 35 $scope.comprobante = $filter('rellenarDigitos')(0, 8);
34 $scope.dateOptions = { 36 $scope.dateOptions = {
35 maxDate: new Date(), 37 maxDate: new Date(),
36 minDate: new Date(2010, 0, 1) 38 minDate: new Date(2010, 0, 1)
37 }; 39 };
38 40
39 //SETEO BOTONERA LATERAL 41 //SETEO BOTONERA LATERAL
40 $timeout(function() { 42 $timeout(function() {
41 focaBotoneraLateralService.showSalir(false); 43 focaBotoneraLateralService.showSalir(false);
42 focaBotoneraLateralService.showPausar(true); 44 focaBotoneraLateralService.showPausar(true);
43 focaBotoneraLateralService.showGuardar(true, $scope.crearNotaPedido); 45 focaBotoneraLateralService.showGuardar(true, $scope.crearNotaPedido);
44 focaBotoneraLateralService.addCustomButton('Salir', salir); 46 focaBotoneraLateralService.addCustomButton('Salir', salir);
45 }); 47 });
46 48
47 // SETEA BOTONERA DE FACTURADOR TENIENDO EN CUENTA SI ESTA SETEADO EL VENDEDOR 49 // SETEA BOTONERA DE FACTURADOR TENIENDO EN CUENTA SI ESTA SETEADO EL VENDEDOR
48 if (APP === 'distribuidor') { 50 if (APP === 'distribuidor') {
49 $scope.idVendedor = focaLoginService.getLoginData().vendedorCobrador; 51 $scope.idVendedor = focaLoginService.getLoginData().vendedorCobrador;
50 } 52 }
51 53
52 //Trabajo con la cotización más reciente, por eso uso siempre la primera '[0]' 54 //Trabajo con la cotización más reciente, por eso uso siempre la primera '[0]'
53 crearNotaPedidoService.getCotizacionByIdMoneda(1).then(function(res) { 55 crearNotaPedidoService.getCotizacionByIdMoneda(1).then(function(res) {
54 var monedaPorDefecto = res.data[0]; 56 var monedaPorDefecto = res.data[0];
55 $scope.notaPedido.cotizacion = Object.assign( 57 $scope.notaPedido.cotizacion = Object.assign(
56 {moneda: monedaPorDefecto}, 58 {moneda: monedaPorDefecto},
57 monedaPorDefecto.cotizaciones[0] 59 monedaPorDefecto.cotizaciones[0]
58 ); 60 );
59 $scope.inicial.cotizacion = $scope.notaPedido.cotizacion; 61 $scope.inicial.cotizacion = $scope.notaPedido.cotizacion;
60 $timeout(function() {getLSNotaPedido();}); 62 $timeout(function() {getLSNotaPedido();});
61 }); 63 });
62 64
63 init(); 65 init();
64 66
65 } 67 }
66 68
67 function init() { 69 function init() {
68 $scope.$broadcast('cleanCabecera'); 70 $scope.$broadcast('cleanCabecera');
69 71
70 $scope.notaPedido = { 72 $scope.notaPedido = {
71 id: 0, 73 id: 0,
72 cliente: {}, 74 cliente: {},
73 proveedor: {}, 75 proveedor: {},
74 domicilio: {dom: ''}, 76 domicilio: {dom: ''},
75 vendedor: {}, 77 vendedor: {},
76 fechaCarga: new Date(), 78 fechaCarga: new Date(),
77 cotizacion: {}, 79 cotizacion: {},
78 articulosNotaPedido: [], 80 articulosNotaPedido: [],
79 notaPedidoPlazo: [] 81 notaPedidoPlazo: [],
82 notaPedidoPuntoDescarga: {
83 puntoDescarga: {}
84 }
80 }; 85 };
81 $scope.idLista = undefined; 86 $scope.idLista = undefined;
82 87
83 crearNotaPedidoService.getNumeroNotaPedido().then( 88 crearNotaPedidoService.getNumeroNotaPedido().then(
84 function(res) { 89 function(res) {
85 $scope.puntoVenta = $filter('rellenarDigitos')( 90 $scope.puntoVenta = $filter('rellenarDigitos')(
86 res.data.sucursal, 4 91 res.data.sucursal, 4
87 ); 92 );
88 93
89 $scope.comprobante = $filter('rellenarDigitos')( 94 $scope.comprobante = $filter('rellenarDigitos')(
90 res.data.numeroNotaPedido, 8 95 res.data.numeroNotaPedido, 8
91 ); 96 );
92 }, 97 },
93 function(err) { 98 function(err) {
94 focaModalService.alert('La terminal no esta configurada correctamente'); 99 focaModalService.alert('La terminal no esta configurada correctamente');
95 console.info(err); 100 console.info(err);
96 } 101 }
97 ); 102 );
98 103
99 if (APP === 'distribuidor') { 104 if (APP === 'distribuidor') {
100 crearNotaPedidoService.getVendedorById($scope.idVendedor).then( 105 crearNotaPedidoService.getVendedorById($scope.idVendedor).then(
101 function(res) { 106 function(res) {
102 var vendedor = res.data; 107 var vendedor = res.data;
103 $scope.$broadcast('addCabecera', { 108 $scope.$broadcast('addCabecera', {
104 label: 'Vendedor:', 109 label: 'Vendedor:',
105 valor: $filter('rellenarDigitos')(vendedor.NUM, 3) + ' - ' + 110 valor: $filter('rellenarDigitos')(vendedor.NUM, 3) + ' - ' +
106 vendedor.NOM 111 vendedor.NOM
107 }); 112 });
108 113
109 $scope.notaPedido.vendedor = vendedor; 114 $scope.notaPedido.vendedor = vendedor;
110 } 115 }
111 ); 116 );
112 } 117 }
113 118
114 $scope.inicial = angular.copy($scope.notaPedido); 119 $scope.inicial = angular.copy($scope.notaPedido);
115 } 120 }
116 121
117 $scope.$watch('notaPedido', function(newValue) { 122 $scope.$watch('notaPedido', function(newValue) {
118 focaBotoneraLateralService.setPausarData({ 123 focaBotoneraLateralService.setPausarData({
119 label: 'notaPedido', 124 label: 'notaPedido',
120 val: newValue 125 val: newValue
121 }); 126 });
122 }, true); 127 }, true);
123 128
124 $scope.crearNotaPedido = function() { 129 $scope.crearNotaPedido = function() {
125 if (!$scope.notaPedido.cliente.COD) { 130 if (!$scope.notaPedido.cliente.COD) {
126 focaModalService.alert('Ingrese Cliente'); 131 focaModalService.alert('Ingrese Cliente');
127 return; 132 return;
128 } else if (!$scope.notaPedido.proveedor.COD) { 133 } else if (!$scope.notaPedido.proveedor.COD) {
129 focaModalService.alert('Ingrese Proveedor'); 134 focaModalService.alert('Ingrese Proveedor');
130 return; 135 return;
131 } else if (!$scope.notaPedido.cotizacion.ID) { 136 } else if (!$scope.notaPedido.cotizacion.ID) {
132 focaModalService.alert('Ingrese Cotización'); 137 focaModalService.alert('Ingrese Cotización');
133 return; 138 return;
134 } else if (!$scope.notaPedido.cotizacion.moneda.ID) { 139 } else if (!$scope.notaPedido.cotizacion.moneda.ID) {
135 focaModalService.alert('Ingrese Moneda'); 140 focaModalService.alert('Ingrese Moneda');
136 return; 141 return;
137 } else if (!$scope.notaPedido.notaPedidoPlazo) { 142 } else if (!$scope.notaPedido.notaPedidoPlazo) {
138 focaModalService.alert('Ingrese Precios y Condiciones'); 143 focaModalService.alert('Ingrese Precios y Condiciones');
139 return; 144 return;
140 } else if ( 145 } else if (
141 $scope.notaPedido.flete === undefined || $scope.notaPedido.flete === null) 146 $scope.notaPedido.flete === undefined || $scope.notaPedido.flete === null)
142 { 147 {
143 focaModalService.alert('Ingrese Flete'); 148 focaModalService.alert('Ingrese Flete');
144 return; 149 return;
145 } else if (!$scope.notaPedido.domicilioStamp) {//TODO validar domicilio correcto 150 } else if (!$scope.notaPedido.domicilioStamp) {//TODO validar domicilio correcto
146 focaModalService.alert('Ingrese Domicilio'); 151 focaModalService.alert('Ingrese Domicilio');
147 return; 152 return;
148 } else if ($scope.notaPedido.articulosNotaPedido.length === 0) { 153 } else if ($scope.notaPedido.articulosNotaPedido.length === 0) {
149 focaModalService.alert('Debe cargar al menos un articulo'); 154 focaModalService.alert('Debe cargar al menos un articulo');
150 return; 155 return;
151 } 156 }
152 focaBotoneraLateralService.startGuardar(); 157 focaBotoneraLateralService.startGuardar();
153 $scope.saveLoading = true; 158 $scope.saveLoading = true;
154 var notaPedido = { 159 var notaPedido = {
155 id: $scope.notaPedido.id, 160 id: $scope.notaPedido.id,
156 fechaCarga: new Date($scope.notaPedido.fechaCarga) 161 fechaCarga: new Date($scope.notaPedido.fechaCarga)
157 .toISOString().slice(0, 19).replace('T', ' '), 162 .toISOString().slice(0, 19).replace('T', ' '),
158 idVendedor: $scope.notaPedido.vendedor.id, 163 idVendedor: $scope.notaPedido.vendedor.id,
159 idCliente: $scope.notaPedido.cliente.COD, 164 idCliente: $scope.notaPedido.cliente.COD,
160 nombreCliente: $scope.notaPedido.cliente.NOM, 165 nombreCliente: $scope.notaPedido.cliente.NOM,
161 cuitCliente: $scope.notaPedido.cliente.CUIT, 166 cuitCliente: $scope.notaPedido.cliente.CUIT,
162 idProveedor: $scope.notaPedido.proveedor.COD, 167 idProveedor: $scope.notaPedido.proveedor.COD,
163 idDomicilio: $scope.notaPedido.domicilio.id, 168 idDomicilio: $scope.notaPedido.domicilio.id,
164 idCotizacion: $scope.notaPedido.cotizacion.ID, 169 idCotizacion: $scope.notaPedido.cotizacion.ID,
165 idPrecioCondicion: $scope.notaPedido.idPrecioCondicion, 170 idPrecioCondicion: $scope.notaPedido.idPrecioCondicion,
166 cotizacion: $scope.notaPedido.cotizacion.VENDEDOR, 171 cotizacion: $scope.notaPedido.cotizacion.VENDEDOR,
167 flete: $scope.notaPedido.flete, 172 flete: $scope.notaPedido.flete,
168 fob: $scope.notaPedido.fob, 173 fob: $scope.notaPedido.fob,
169 bomba: $scope.notaPedido.bomba, 174 bomba: $scope.notaPedido.bomba,
170 kilometros: $scope.notaPedido.kilometros, 175 kilometros: $scope.notaPedido.kilometros,
171 domicilioStamp: $scope.notaPedido.domicilioStamp, 176 domicilioStamp: $scope.notaPedido.domicilioStamp,
172 observaciones: $scope.notaPedido.observaciones, 177 observaciones: $scope.notaPedido.observaciones,
173 estado: 0, 178 estado: 0,
174 total: $scope.getTotal() 179 total: $scope.getTotal()
175 }; 180 };
176 crearNotaPedidoService.crearNotaPedido(notaPedido).then( 181 crearNotaPedidoService.crearNotaPedido(notaPedido).then(
177 function(data) { 182 function(data) {
178 // Al guardar los datos de la nota de pedido logueamos la 183 // Al guardar los datos de la nota de pedido logueamos la
179 // actividad para su seguimiento. 184 // actividad para su seguimiento.
180 //TODO: GUARDAR POSISIONAMIENTO AL EDITAR? 185 //TODO: GUARDAR POSISIONAMIENTO AL EDITAR?
181 focaSeguimientoService.guardarPosicion( 186 focaSeguimientoService.guardarPosicion(
182 'Nota de pedido', 187 'Nota de pedido',
183 data.data.id, 188 data.data.id,
184 '' 189 ''
185 ); 190 );
186 notaPedidoBusinessService.addArticulos( 191 notaPedidoBusinessService.addArticulos(
187 $scope.notaPedido.articulosNotaPedido, 192 $scope.notaPedido.articulosNotaPedido,
188 data.data.id, $scope.notaPedido.cotizacion.VENDEDOR); 193 data.data.id, $scope.notaPedido.cotizacion.VENDEDOR);
189 194
190 if ($scope.notaPedido.notaPedidoPuntoDescarga) { 195 if ($scope.notaPedido.notaPedidoPuntoDescarga) {
191 notaPedidoBusinessService.addPuntosDescarga(data.data.id, 196 notaPedidoBusinessService.addPuntosDescarga(data.data.id,
192 $scope.notaPedido.notaPedidoPuntoDescarga); 197 $scope.notaPedido.notaPedidoPuntoDescarga);
193 } 198 }
194 199
195 var plazos = $scope.notaPedido.notaPedidoPlazo; 200 var plazos = $scope.notaPedido.notaPedidoPlazo;
196 var plazosACrear = []; 201 var plazosACrear = [];
197 plazos.forEach(function(plazo) { 202 plazos.forEach(function(plazo) {
198 plazosACrear.push({ 203 plazosACrear.push({
199 idNotaPedido: data.data.id, 204 idNotaPedido: data.data.id,
200 dias: plazo.dias 205 dias: plazo.dias
201 }); 206 });
202 }); 207 });
203 208
204 if (plazosACrear.length) { 209 if (plazosACrear.length) {
205 crearNotaPedidoService.crearPlazosParaNotaPedido(plazosACrear); 210 crearNotaPedidoService.crearPlazosParaNotaPedido(plazosACrear);
206 } 211 }
207 212
208 notaPedidoBusinessService.addEstado(data.data.id, 213 notaPedidoBusinessService.addEstado(data.data.id,
209 $scope.notaPedido.vendedor.id); 214 $scope.notaPedido.vendedor.id);
210 215
211 focaBotoneraLateralService.endGuardar(true); 216 focaBotoneraLateralService.endGuardar(true);
212 $scope.saveLoading = false; 217 $scope.saveLoading = false;
213 218
214 init(); 219 init();
215 }, function(error) { 220 }, function(error) {
216 focaModalService.alert('Hubo un error al crear la nota de pedido'); 221 focaModalService.alert('Hubo un error al crear la nota de pedido');
217 focaBotoneraLateralService.endGuardar(); 222 focaBotoneraLateralService.endGuardar();
218 $scope.saveLoading = false; 223 $scope.saveLoading = false;
219 console.info(error); 224 console.info(error);
220 } 225 }
221 ); 226 );
222 }; 227 };
223 228
224 $scope.seleccionarNotaPedido = function() { 229 $scope.seleccionarNotaPedido = function() {
225 var modalInstance = $uibModal.open( 230 var modalInstance = $uibModal.open(
226 { 231 {
227 ariaLabelledBy: 'Busqueda de Nota de Pedido', 232 ariaLabelledBy: 'Busqueda de Nota de Pedido',
228 templateUrl: 'foca-modal-nota-pedido.html', 233 templateUrl: 'foca-modal-nota-pedido.html',
229 controller: 'focaModalNotaPedidoController', 234 controller: 'focaModalNotaPedidoController',
230 size: 'lg', 235 size: 'lg',
231 resolve: { 236 resolve: {
232 usadoPor: function() {return 'notaPedido';}, 237 usadoPor: function() {return 'notaPedido';},
233 idVendedor: function() { 238 idVendedor: function() {
234 if (APP === 'distribuidor') 239 if (APP === 'distribuidor')
235 return $scope.notaPedido.vendedor.id; 240 return $scope.notaPedido.vendedor.id;
236 else 241 else
237 return null; 242 return null;
238 } 243 }
239 } 244 }
240 } 245 }
241 ); 246 );
242 modalInstance.result.then(setearNotaPedido); 247 modalInstance.result.then(setearNotaPedido);
243 }; 248 };
244 249
245 $scope.seleccionarProductos = function() { 250 $scope.seleccionarProductos = function() {
246 if ($scope.idLista === undefined) { 251 if ($scope.idLista === undefined) {
247 focaModalService.alert( 252 focaModalService.alert(
248 'Primero seleccione una lista de precio y condicion'); 253 'Primero seleccione una lista de precio y condicion');
249 return; 254 return;
250 } 255 }
251 var modalInstance = $uibModal.open( 256 var modalInstance = $uibModal.open(
252 { 257 {
253 ariaLabelledBy: 'Busqueda de Productos', 258 ariaLabelledBy: 'Busqueda de Productos',
254 templateUrl: 'modal-busqueda-productos.html', 259 templateUrl: 'modal-busqueda-productos.html',
255 controller: 'modalBusquedaProductosCtrl', 260 controller: 'modalBusquedaProductosCtrl',
256 resolve: { 261 resolve: {
257 parametroProducto: { 262 parametroProducto: {
258 idLista: $scope.idLista, 263 idLista: $scope.idLista,
259 cotizacion: $scope.notaPedido.cotizacion.VENDEDOR, 264 cotizacion: $scope.notaPedido.cotizacion.VENDEDOR,
260 simbolo: $scope.notaPedido.cotizacion.moneda.SIMBOLO 265 simbolo: $scope.notaPedido.cotizacion.moneda.SIMBOLO
261 } 266 }
262 }, 267 },
263 size: 'lg' 268 size: 'lg'
264 } 269 }
265 ); 270 );
266 modalInstance.result.then( 271 modalInstance.result.then(
267 function(producto) { 272 function(producto) {
268 var newArt = 273 var newArt =
269 { 274 {
270 id: 0, 275 id: 0,
271 codigo: producto.codigo, 276 codigo: producto.codigo,
272 sector: producto.sector, 277 sector: producto.sector,
273 sectorCodigo: producto.sector + '-' + producto.codigo, 278 sectorCodigo: producto.sector + '-' + producto.codigo,
274 descripcion: producto.descripcion, 279 descripcion: producto.descripcion,
275 item: $scope.notaPedido.articulosNotaPedido.length + 1, 280 item: $scope.notaPedido.articulosNotaPedido.length + 1,
276 nombre: producto.descripcion, 281 nombre: producto.descripcion,
277 precio: parseFloat(producto.precio.toFixed(4)), 282 precio: parseFloat(producto.precio.toFixed(4)),
278 costoUnitario: producto.costo, 283 costoUnitario: producto.costo,
279 editCantidad: false, 284 editCantidad: false,
280 editPrecio: false, 285 editPrecio: false,
281 rubro: producto.CodRub, 286 rubro: producto.CodRub,
282 exentoUnitario: producto.precio, 287 exentoUnitario: producto.precio,
283 ivaUnitario: producto.IMPIVA, 288 ivaUnitario: producto.IMPIVA,
284 impuestoInternoUnitario: producto.ImpInt, 289 impuestoInternoUnitario: producto.ImpInt,
285 impuestoInterno1Unitario: producto.ImpInt2, 290 impuestoInterno1Unitario: producto.ImpInt2,
286 impuestoInterno2Unitario: producto.ImpInt3, 291 impuestoInterno2Unitario: producto.ImpInt3,
287 precioLista: producto.precio, 292 precioLista: producto.precio,
288 combustible: 1, 293 combustible: 1,
289 facturado: 0, 294 facturado: 0,
290 idArticulo: producto.id 295 idArticulo: producto.id
291 }; 296 };
292 $scope.articuloACargar = newArt; 297 $scope.articuloACargar = newArt;
293 $scope.cargando = false; 298 $scope.cargando = false;
294 }, function() { 299 }, function() {
295 // funcion ejecutada cuando se cancela el modal 300 // funcion ejecutada cuando se cancela el modal
296 } 301 }
297 ); 302 );
298 }; 303 };
299 304
300 $scope.seleccionarPuntosDeDescarga = function() { 305 $scope.seleccionarPuntosDeDescarga = function() {
301 if (!$scope.notaPedido.cliente.COD || !$scope.notaPedido.domicilio.id) { 306 if (!$scope.notaPedido.cliente.COD || !$scope.notaPedido.domicilio.id) {
302 focaModalService.alert('Primero seleccione un cliente y un domicilio'); 307 focaModalService.alert('Primero seleccione un cliente y un domicilio');
303 return; 308 return;
304 } else { 309 } else {
305 var modalInstance = $uibModal.open( 310 var modalInstance = $uibModal.open(
306 { 311 {
307 ariaLabelledBy: 'Búsqueda de Puntos de descarga', 312 ariaLabelledBy: 'Búsqueda de Puntos de descarga',
308 templateUrl: 'modal-punto-descarga.html', 313 templateUrl: 'modal-punto-descarga.html',
309 controller: 'focaModalPuntoDescargaController', 314 controller: 'focaModalPuntoDescargaController',
310 size: 'lg', 315 size: 'lg',
311 resolve: { 316 resolve: {
312 filters: { 317 filters: {
313 idDomicilio: $scope.notaPedido.domicilio.id, 318 idDomicilio: $scope.notaPedido.domicilio.id,
314 idCliente: $scope.notaPedido.cliente.COD, 319 idCliente: $scope.notaPedido.cliente.COD,
315 articulos: $scope.notaPedido.articulosNotaPedido, 320 articulos: $scope.notaPedido.articulosNotaPedido,
316 puntosDescarga: $scope.notaPedido.notaPedidoPuntoDescarga, 321 puntoDescarga: $scope.notaPedido.notaPedidoPuntoDescarga,
317 domicilio: $scope.notaPedido.domicilio 322 domicilio: $scope.notaPedido.domicilio
318 } 323 }
319 } 324 }
320 } 325 }
321 ); 326 );
322 modalInstance.result.then( 327 modalInstance.result.then(
323 function(puntosDescarga) { 328 function(puntoDescarga) {
324 $scope.notaPedido.notaPedidoPuntoDescarga = puntosDescarga; 329 $scope.notaPedido.notaPedidoPuntoDescarga = puntoDescarga;
325 330
326 $scope.$broadcast('addCabecera', { 331 $scope.$broadcast('addCabecera', {
327 label: 'Puntos de descarga:', 332 label: 'Puntos de descarga:',
328 valor: getCabeceraPuntoDescarga(puntosDescarga) 333 valor: getCabeceraPuntoDescarga(puntoDescarga)
329 }); 334 });
330 }, function() { 335 }, function() {
331 $scope.abrirModalDomicilios($scope.cliente); 336 $scope.abrirModalDomicilios($scope.cliente);
332 } 337 }
333 ); 338 );
334 } 339 }
335 }; 340 };
336 341
337 $scope.seleccionarProveedor = function() { 342 $scope.seleccionarProveedor = function() {
338 $scope.abrirModalProveedores(function() { 343 $scope.abrirModalProveedores(function() {
339 if (validarNotaRemitada()) { 344 if (validarNotaRemitada()) {
340 var modalInstance = $uibModal.open( 345 var modalInstance = $uibModal.open(
341 { 346 {
342 ariaLabelledBy: 'Busqueda de Flete', 347 ariaLabelledBy: 'Busqueda de Flete',
343 templateUrl: 'modal-flete.html', 348 templateUrl: 'modal-flete.html',
344 controller: 'focaModalFleteController', 349 controller: 'focaModalFleteController',
345 size: 'lg', 350 size: 'lg',
346 resolve: { 351 resolve: {
347 parametrosFlete: 352 parametrosFlete:
348 function() { 353 function() {
349 return { 354 return {
350 flete: $scope.notaPedido.fob ? 'FOB' : 355 flete: $scope.notaPedido.fob ? 'FOB' :
351 ( $scope.notaPedido.flete ? '1' : 356 ( $scope.notaPedido.flete ? '1' :
352 ($scope.notaPedido.flete === undefined ? 357 ($scope.notaPedido.flete === undefined ?
353 null : '0')), 358 null : '0')),
354 bomba: $scope.notaPedido.bomba ? '1' : 359 bomba: $scope.notaPedido.bomba ? '1' :
355 ($scope.notaPedido.bomba === undefined ? 360 ($scope.notaPedido.bomba === undefined ?
356 null : '0'), 361 null : '0'),
357 kilometros: $scope.notaPedido.kilometros 362 kilometros: $scope.notaPedido.kilometros
358 }; 363 };
359 } 364 }
360 } 365 }
361 } 366 }
362 ); 367 );
363 modalInstance.result.then( 368 modalInstance.result.then(
364 function(datos) { 369 function(datos) {
365 $scope.notaPedido.flete = datos.flete; 370 $scope.notaPedido.flete = datos.flete;
366 $scope.notaPedido.fob = datos.FOB; 371 $scope.notaPedido.fob = datos.FOB;
367 $scope.notaPedido.bomba = datos.bomba; 372 $scope.notaPedido.bomba = datos.bomba;
368 $scope.notaPedido.kilometros = datos.kilometros; 373 $scope.notaPedido.kilometros = datos.kilometros;
369 $scope.$broadcast('addCabecera', { 374 $scope.$broadcast('addCabecera', {
370 label: 'Flete:', 375 label: 'Flete:',
371 valor: datos.FOB ? 'FOB' : (datos.flete ? 'Si' : 'No') 376 valor: datos.FOB ? 'FOB' : (datos.flete ? 'Si' : 'No')
372 }); 377 });
373 if (datos.flete) { 378 if (datos.flete) {
374 $scope.$broadcast('addCabecera', { 379 $scope.$broadcast('addCabecera', {
375 label: 'Bomba:', 380 label: 'Bomba:',
376 valor: datos.bomba ? 'Si' : 'No' 381 valor: datos.bomba ? 'Si' : 'No'
377 }); 382 });
378 $scope.$broadcast('addCabecera', { 383 $scope.$broadcast('addCabecera', {
379 label: 'Kilometros:', 384 label: 'Kilometros:',
380 valor: datos.kilometros 385 valor: datos.kilometros
381 }); 386 });
382 } else { 387 } else {
383 $scope.$broadcast('removeCabecera', 'Bomba:'); 388 $scope.$broadcast('removeCabecera', 'Bomba:');
384 $scope.$broadcast('removeCabecera', 'Kilometros:'); 389 $scope.$broadcast('removeCabecera', 'Kilometros:');
385 $scope.notaPedido.bomba = false; 390 $scope.notaPedido.bomba = false;
386 $scope.notaPedido.kilometros = null; 391 $scope.notaPedido.kilometros = null;
387 } 392 }
388 }, function() { 393 }, function() {
389 $scope.seleccionarTransportista(); 394 $scope.seleccionarTransportista();
390 } 395 }
391 ); 396 );
392 } 397 }
393 }); 398 });
394 }; 399 };
395 400
396 $scope.seleccionarVendedor = function(callback, ocultarVendedor) { 401 $scope.seleccionarVendedor = function(callback, ocultarVendedor) {
397 if (APP === 'distribuidor' || ocultarVendedor) { 402 if (APP === 'distribuidor' || ocultarVendedor) {
398 callback(); 403 callback();
399 return; 404 return;
400 } 405 }
401 406
402 if (validarNotaRemitada()) { 407 if (validarNotaRemitada()) {
403 var parametrosModal = { 408 var parametrosModal = {
404 titulo: 'Búsqueda vendedores', 409 titulo: 'Búsqueda vendedores',
405 query: '/vendedor', 410 query: '/vendedor',
406 columnas: [ 411 columnas: [
407 { 412 {
408 propiedad: 'NUM', 413 propiedad: 'NUM',
409 nombre: 'Código', 414 nombre: 'Código',
410 filtro: { 415 filtro: {
411 nombre: 'rellenarDigitos', 416 nombre: 'rellenarDigitos',
412 parametro: 3 417 parametro: 3
413 } 418 }
414 }, 419 },
415 { 420 {
416 propiedad: 'NOM', 421 propiedad: 'NOM',
417 nombre: 'Nombre' 422 nombre: 'Nombre'
418 } 423 }
419 ], 424 ],
420 size: 'md' 425 size: 'md'
421 }; 426 };
422 focaModalService.modal(parametrosModal).then( 427 focaModalService.modal(parametrosModal).then(
423 function(vendedor) { 428 function(vendedor) {
424 $scope.$broadcast('addCabecera', { 429 $scope.$broadcast('addCabecera', {
425 label: 'Vendedor:', 430 label: 'Vendedor:',
426 valor: $filter('rellenarDigitos')(vendedor.NUM, 3) + ' - ' + 431 valor: $filter('rellenarDigitos')(vendedor.NUM, 3) + ' - ' +
427 vendedor.NOM 432 vendedor.NOM
428 }); 433 });
429 $scope.notaPedido.vendedor = vendedor; 434 $scope.notaPedido.vendedor = vendedor;
430 deleteCliente(); 435 deleteCliente();
431 callback(); 436 callback();
432 }, function() {} 437 }, function() {}
433 ); 438 );
434 } 439 }
435 }; 440 };
436 441
437 $scope.seleccionarCliente = function(ocultarVendedor) { 442 $scope.seleccionarCliente = function(ocultarVendedor) {
438 $scope.seleccionarVendedor(function() { 443 $scope.seleccionarVendedor(function() {
439 if (validarNotaRemitada()) { 444 if (validarNotaRemitada()) {
440 var modalInstance = $uibModal.open( 445 var modalInstance = $uibModal.open(
441 { 446 {
442 ariaLabelledBy: 'Busqueda de Cliente', 447 ariaLabelledBy: 'Busqueda de Cliente',
443 templateUrl: 'foca-busqueda-cliente-modal.html', 448 templateUrl: 'foca-busqueda-cliente-modal.html',
444 controller: 'focaBusquedaClienteModalController', 449 controller: 'focaBusquedaClienteModalController',
445 resolve: { 450 resolve: {
446 vendedor: function() { return $scope.notaPedido.vendedor; }, 451 vendedor: function() { return $scope.notaPedido.vendedor; },
447 cobrador: function() { return null; } 452 cobrador: function() { return null; }
448 }, 453 },
449 size: 'lg' 454 size: 'lg'
450 } 455 }
451 ); 456 );
452 modalInstance.result.then( 457 modalInstance.result.then(
453 function(cliente) { 458 function(cliente) {
454 $scope.abrirModalDomicilios(cliente); 459 $scope.abrirModalDomicilios(cliente);
455 $scope.cliente = cliente; 460 $scope.cliente = cliente;
456 }, function() { 461 }, function() {
457 if (APP !== 'distribuidor') $scope.seleccionarCliente(); 462 if (APP !== 'distribuidor') $scope.seleccionarCliente();
458 } 463 }
459 ); 464 );
460 } 465 }
461 }, ocultarVendedor); 466 }, ocultarVendedor);
462 }; 467 };
463 468
464 $scope.abrirModalProveedores = function(callback) { 469 $scope.abrirModalProveedores = function(callback) {
465 if (validarNotaRemitada()) { 470 if (validarNotaRemitada()) {
466 var parametrosModal = { 471 var parametrosModal = {
467 titulo: 'Búsqueda de Proveedor', 472 titulo: 'Búsqueda de Proveedor',
468 query: '/proveedor', 473 query: '/proveedor',
469 columnas: [ 474 columnas: [
470 { 475 {
471 nombre: 'Código', 476 nombre: 'Código',
472 propiedad: 'COD', 477 propiedad: 'COD',
473 filtro: { 478 filtro: {
474 nombre: 'rellenarDigitos', 479 nombre: 'rellenarDigitos',
475 parametro: 5 480 parametro: 5
476 } 481 }
477 }, 482 },
478 { 483 {
479 nombre: 'Nombre', 484 nombre: 'Nombre',
480 propiedad: 'NOM' 485 propiedad: 'NOM'
481 }, 486 },
482 { 487 {
483 nombre: 'CUIT', 488 nombre: 'CUIT',
484 propiedad: 'CUIT' 489 propiedad: 'CUIT'
485 } 490 }
486 ], 491 ],
487 tipo: 'POST', 492 tipo: 'POST',
488 json: {razonCuitCod: ''} 493 json: {razonCuitCod: ''}
489 }; 494 };
490 focaModalService.modal(parametrosModal).then( 495 focaModalService.modal(parametrosModal).then(
491 function(proveedor) { 496 function(proveedor) {
492 $scope.notaPedido.proveedor = proveedor; 497 $scope.notaPedido.proveedor = proveedor;
493 $scope.$broadcast('addCabecera', { 498 $scope.$broadcast('addCabecera', {
494 label: 'Proveedor:', 499 label: 'Proveedor:',
495 valor: $filter('rellenarDigitos')(proveedor.COD, 5) + ' - ' + 500 valor: $filter('rellenarDigitos')(proveedor.COD, 5) + ' - ' +
496 proveedor.NOM 501 proveedor.NOM
497 }); 502 });
498 callback(); 503 callback();
499 }, function() { 504 }, function() {
500 505
501 } 506 }
502 ); 507 );
503 } 508 }
504 }; 509 };
505 510
506 $scope.abrirModalDomicilios = function(cliente) { 511 $scope.abrirModalDomicilios = function(cliente) {
507 var modalInstanceDomicilio = $uibModal.open( 512 var modalInstanceDomicilio = $uibModal.open(
508 { 513 {
509 ariaLabelledBy: 'Busqueda de Domicilios', 514 ariaLabelledBy: 'Busqueda de Domicilios',
510 templateUrl: 'modal-domicilio.html', 515 templateUrl: 'modal-domicilio.html',
511 controller: 'focaModalDomicilioController', 516 controller: 'focaModalDomicilioController',
512 resolve: { 517 resolve: {
513 idCliente: function() { return cliente.cod; }, 518 idCliente: function() { return cliente.cod; },
514 esNuevo: function() { return cliente.esNuevo; } 519 esNuevo: function() { return cliente.esNuevo; }
515 }, 520 },
516 size: 'lg', 521 size: 'lg',
517 } 522 }
518 ); 523 );
519 modalInstanceDomicilio.result.then( 524 modalInstanceDomicilio.result.then(
520 function(domicilio) { 525 function(domicilio) {
521 $scope.notaPedido.domicilio = domicilio; 526 $scope.notaPedido.domicilio = domicilio;
522 $scope.notaPedido.cliente = { 527 $scope.notaPedido.cliente = {
523 COD: cliente.cod, 528 COD: cliente.cod,
524 CUIT: cliente.cuit, 529 CUIT: cliente.cuit,
525 NOM: cliente.nom, 530 NOM: cliente.nom,
526 MOD: cliente.mod 531 MOD: cliente.mod
527 }; 532 };
528 var domicilioStamp = 533 var domicilioStamp =
529 domicilio.Calle + ' ' + domicilio.Numero + ', ' + 534 domicilio.Calle + ' ' + domicilio.Numero + ', ' +
530 domicilio.Localidad + ', ' + domicilio.Provincia; 535 domicilio.Localidad + ', ' + domicilio.Provincia;
531 $scope.notaPedido.domicilioStamp = domicilioStamp; 536 $scope.notaPedido.domicilioStamp = domicilioStamp;
532 537
533 $scope.notaPedido.notaPedidoPuntoDescarga = domicilio.puntosDescarga; 538 $scope.notaPedido.notaPedidoPuntoDescarga = domicilio.puntoDescarga;
534 539
535 $scope.$broadcast('addCabecera', { 540 $scope.$broadcast('addCabecera', {
536 label: 'Cliente:', 541 label: 'Cliente:',
537 valor: $filter('rellenarDigitos')(cliente.cod, 5) + ' - ' + cliente.nom 542 valor: $filter('rellenarDigitos')(cliente.cod, 5) + ' - ' + cliente.nom
538 }); 543 });
539 $scope.$broadcast('addCabecera', { 544 $scope.$broadcast('addCabecera', {
540 label: 'Domicilio:', 545 label: 'Domicilio:',
541 valor: domicilioStamp 546 valor: domicilioStamp
542 }); 547 });
543 if (domicilio.verPuntos) { 548 if (domicilio.verPuntos) {
544 delete $scope.notaPedido.domicilio.verPuntos; 549 delete $scope.notaPedido.domicilio.verPuntos;
545 $scope.seleccionarPuntosDeDescarga(); 550 $scope.seleccionarPuntosDeDescarga();
546 } else { 551 } else {
547 crearNotaPedidoService 552 crearNotaPedidoService
548 .getPuntosDescargaByClienDom(domicilio.id, cliente.cod) 553 .getPuntosDescargaByClienDom(domicilio.id, cliente.cod)
549 .then(function(res) { 554 .then(function(res) {
550 if (res.data.length) $scope.seleccionarPuntosDeDescarga(); 555 if (res.data.length) $scope.seleccionarPuntosDeDescarga();
551 }); 556 });
552 } 557 }
553 }, function() { 558 }, function() {
554 $scope.seleccionarCliente(true); 559 $scope.seleccionarCliente(true);
555 return; 560 return;
556 } 561 }
557 ); 562 );
558 }; 563 };
559 564
560 $scope.getTotal = function() { 565 $scope.getTotal = function() {
561 var total = 0; 566 var total = 0;
562 if ($scope.notaPedido.articulosNotaPedido) { 567 if ($scope.notaPedido.articulosNotaPedido) {
563 var arrayTempArticulos = $scope.notaPedido.articulosNotaPedido; 568 var arrayTempArticulos = $scope.notaPedido.articulosNotaPedido;
564 for (var i = 0; i < arrayTempArticulos.length; i++) { 569 for (var i = 0; i < arrayTempArticulos.length; i++) {
565 total += arrayTempArticulos[i].precio * arrayTempArticulos[i].cantidad; 570 total += arrayTempArticulos[i].precio * arrayTempArticulos[i].cantidad;
566 } 571 }
567 } 572 }
568 return parseFloat(total.toFixed(2)); 573 return parseFloat(total.toFixed(2));
569 }; 574 };
570 575
571 $scope.getSubTotal = function() { 576 $scope.getSubTotal = function() {
572 if ($scope.articuloACargar) { 577 if ($scope.articuloACargar) {
573 return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad; 578 return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad;
574 } 579 }
575 }; 580 };
576 581
577 $scope.seleccionarPreciosYCondiciones = function() { 582 $scope.seleccionarPreciosYCondiciones = function() {
578 if (!$scope.notaPedido.cliente.COD) { 583 if (!$scope.notaPedido.cliente.COD) {
579 focaModalService.alert('Primero seleccione un cliente'); 584 focaModalService.alert('Primero seleccione un cliente');
580 return; 585 return;
581 } 586 }
582 if ($scope.notaPedido.articulosNotaPedido.length !== 0) { 587 if ($scope.notaPedido.articulosNotaPedido.length !== 0) {
583 focaModalService.confirm('Se perderan los productos ingresados').then(function(data) { 588 focaModalService.confirm('Se perderan los productos ingresados').then(function(data) {
584 if (data) { 589 if (data) {
585 abrirModal(); 590 abrirModal();
586 } 591 }
587 }); 592 });
588 } else if (validarNotaRemitada()) { 593 } else if (validarNotaRemitada()) {
589 abrirModal(); 594 abrirModal();
590 } 595 }
591 function abrirModal() { 596 function abrirModal() {
592 var modalInstance = $uibModal.open( 597 var modalInstance = $uibModal.open(
593 { 598 {
594 ariaLabelledBy: 'Busqueda de Precio Condición', 599 ariaLabelledBy: 'Busqueda de Precio Condición',
595 templateUrl: 'modal-precio-condicion.html', 600 templateUrl: 'modal-precio-condicion.html',
596 controller: 'focaModalPrecioCondicionController', 601 controller: 'focaModalPrecioCondicionController',
597 size: 'lg', 602 size: 'lg',
598 resolve: { 603 resolve: {
599 idListaPrecio: function() { 604 idListaPrecio: function() {
600 return $scope.notaPedido.cliente.MOD || null; 605 return $scope.notaPedido.cliente.MOD || null;
601 } 606 }
602 } 607 }
603 } 608 }
604 ); 609 );
605 610
606 modalInstance.result.then( 611 modalInstance.result.then(
607 function(precioCondicion) { 612 function(precioCondicion) {
608 var cabecera = ''; 613 var cabecera = '';
609 var plazosConcat = ''; 614 var plazosConcat = '';
610 if (!Array.isArray(precioCondicion)) { 615 if (!Array.isArray(precioCondicion)) {
611 $scope.notaPedido.notaPedidoPlazo = precioCondicion.plazoPago; 616 $scope.notaPedido.notaPedidoPlazo = precioCondicion.plazoPago;
612 $scope.notaPedido.precioCondicion = precioCondicion; 617 $scope.notaPedido.precioCondicion = precioCondicion;
613 $scope.notaPedido.idPrecioCondicion = precioCondicion.id; 618 $scope.notaPedido.idPrecioCondicion = precioCondicion.id;
614 $scope.idLista = precioCondicion.idListaPrecio; 619 $scope.idLista = precioCondicion.idListaPrecio;
615 for (var i = 0; i < precioCondicion.plazoPago.length; i++) { 620 for (var i = 0; i < precioCondicion.plazoPago.length; i++) {
616 plazosConcat += precioCondicion.plazoPago[i].dias + ' '; 621 plazosConcat += precioCondicion.plazoPago[i].dias + ' ';
617 } 622 }
618 cabecera = $filter('rellenarDigitos')(precioCondicion.id, 4) + 623 cabecera = $filter('rellenarDigitos')(precioCondicion.id, 4) +
619 ' - ' + precioCondicion.nombre + ' ' + plazosConcat.trim(); 624 ' - ' + precioCondicion.nombre + ' ' + plazosConcat.trim();
620 } else { //Cuando se ingresan los plazos manualmente 625 } else { //Cuando se ingresan los plazos manualmente
621 $scope.notaPedido.idPrecioCondicion = 0; 626 $scope.notaPedido.idPrecioCondicion = 0;
622 //-1, el modal productos busca todos los productos 627 //-1, el modal productos busca todos los productos
623 $scope.idLista = -1; 628 $scope.idLista = -1;
624 $scope.notaPedido.notaPedidoPlazo = precioCondicion; 629 $scope.notaPedido.notaPedidoPlazo = precioCondicion;
625 for (var j = 0; j < precioCondicion.length; j++) { 630 for (var j = 0; j < precioCondicion.length; j++) {
626 plazosConcat += precioCondicion[j].dias + ' '; 631 plazosConcat += precioCondicion[j].dias + ' ';
627 } 632 }
628 cabecera = 'Ingreso manual ' + plazosConcat.trim(); 633 cabecera = 'Ingreso manual ' + plazosConcat.trim();
629 } 634 }
630 $scope.notaPedido.articulosNotaPedido = []; 635 $scope.notaPedido.articulosNotaPedido = [];
631 $scope.$broadcast('addCabecera', { 636 $scope.$broadcast('addCabecera', {
632 label: 'Precios y condiciones:', 637 label: 'Precios y condiciones:',
633 valor: cabecera 638 valor: cabecera
634 }); 639 });
635 }, function() { 640 }, function() {
636 641
637 } 642 }
638 ); 643 );
639 } 644 }
640 }; 645 };
641 646
642 $scope.seleccionarMoneda = function() { 647 $scope.seleccionarMoneda = function() {
643 if (validarNotaRemitada()) { 648 if (validarNotaRemitada()) {
644 var parametrosModal = { 649 var parametrosModal = {
645 titulo: 'Búsqueda de monedas', 650 titulo: 'Búsqueda de monedas',
646 query: '/moneda', 651 query: '/moneda',
647 columnas: [ 652 columnas: [
648 { 653 {
649 propiedad: 'DETALLE', 654 propiedad: 'DETALLE',
650 nombre: 'Nombre' 655 nombre: 'Nombre'
651 }, 656 },
652 { 657 {
653 propiedad: 'SIMBOLO', 658 propiedad: 'SIMBOLO',
654 nombre: 'Símbolo' 659 nombre: 'Símbolo'
655 } 660 }
656 ], 661 ],
657 size: 'md' 662 size: 'md'
658 }; 663 };
659 focaModalService.modal(parametrosModal).then( 664 focaModalService.modal(parametrosModal).then(
660 function(moneda) { 665 function(moneda) {
661 $scope.abrirModalCotizacion(moneda); 666 $scope.abrirModalCotizacion(moneda);
662 }, function() { 667 }, function() {
663 668
664 } 669 }
665 ); 670 );
666 } 671 }
667 }; 672 };
668 673
669 $scope.seleccionarObservaciones = function() { 674 $scope.seleccionarObservaciones = function() {
670 var observacion = { 675 var observacion = {
671 titulo: 'Ingrese Observaciones', 676 titulo: 'Ingrese Observaciones',
672 value: $scope.notaPedido.observaciones, 677 value: $scope.notaPedido.observaciones,
673 maxlength: 155, 678 maxlength: 155,
674 textarea: true 679 textarea: true
675 }; 680 };
676 681
677 focaModalService 682 focaModalService
678 .prompt(observacion) 683 .prompt(observacion)
679 .then(function(observaciones) { 684 .then(function(observaciones) {
680 $scope.notaPedido.observaciones = observaciones; 685 $scope.notaPedido.observaciones = observaciones;
681 }); 686 });
682 }; 687 };
683 688
684 $scope.abrirModalCotizacion = function(moneda) { 689 $scope.abrirModalCotizacion = function(moneda) {
685 var modalInstance = $uibModal.open( 690 var modalInstance = $uibModal.open(
686 { 691 {
687 ariaLabelledBy: 'Busqueda de Cotización', 692 ariaLabelledBy: 'Busqueda de Cotización',
688 templateUrl: 'modal-cotizacion.html', 693 templateUrl: 'modal-cotizacion.html',
689 controller: 'focaModalCotizacionController', 694 controller: 'focaModalCotizacionController',
690 size: 'lg', 695 size: 'lg',
691 resolve: { 696 resolve: {
692 idMoneda: function() { 697 idMoneda: function() {
693 return moneda.ID; 698 return moneda.ID;
694 } 699 }
695 } 700 }
696 } 701 }
697 ); 702 );
698 modalInstance.result.then( 703 modalInstance.result.then(
699 function(cotizacion) { 704 function(cotizacion) {
700 var articulosTablaTemp = $scope.notaPedido.articulosNotaPedido || []; 705 var articulosTablaTemp = $scope.notaPedido.articulosNotaPedido || [];
701 for (var i = 0; i < articulosTablaTemp.length; i++) { 706 for (var i = 0; i < articulosTablaTemp.length; i++) {
702 articulosTablaTemp[i].precio = articulosTablaTemp[i].precio * 707 articulosTablaTemp[i].precio = articulosTablaTemp[i].precio *
703 $scope.notaPedido.cotizacion.VENDEDOR; 708 $scope.notaPedido.cotizacion.VENDEDOR;
704 articulosTablaTemp[i].precio = articulosTablaTemp[i].precio / 709 articulosTablaTemp[i].precio = articulosTablaTemp[i].precio /
705 cotizacion.VENDEDOR; 710 cotizacion.VENDEDOR;
706 } 711 }
707 $scope.notaPedido.articulosNotaPedido = articulosTablaTemp; 712 $scope.notaPedido.articulosNotaPedido = articulosTablaTemp;
708 $scope.notaPedido.cotizacion = cotizacion; 713 $scope.notaPedido.cotizacion = cotizacion;
709 $scope.notaPedido.cotizacion.moneda = moneda; 714 $scope.notaPedido.cotizacion.moneda = moneda;
710 if (moneda.DETALLE === 'PESOS ARGENTINOS') { 715 if (moneda.DETALLE === 'PESOS ARGENTINOS') {
711 $scope.$broadcast('removeCabecera', 'Moneda:'); 716 $scope.$broadcast('removeCabecera', 'Moneda:');
712 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:'); 717 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:');
713 $scope.$broadcast('removeCabecera', 'Cotizacion:'); 718 $scope.$broadcast('removeCabecera', 'Cotizacion:');
714 } else { 719 } else {
715 $scope.$broadcast('addCabecera', { 720 $scope.$broadcast('addCabecera', {
716 label: 'Moneda:', 721 label: 'Moneda:',
717 valor: moneda.DETALLE 722 valor: moneda.DETALLE
718 }); 723 });
719 $scope.$broadcast('addCabecera', { 724 $scope.$broadcast('addCabecera', {
720 label: 'Fecha cotizacion:', 725 label: 'Fecha cotizacion:',
721 valor: $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy') 726 valor: $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy')
722 }); 727 });
723 $scope.$broadcast('addCabecera', { 728 $scope.$broadcast('addCabecera', {
724 label: 'Cotizacion:', 729 label: 'Cotizacion:',
725 valor: $filter('number')(cotizacion.VENDEDOR, '2') 730 valor: $filter('number')(cotizacion.VENDEDOR, '2')
726 }); 731 });
727 } 732 }
728 }, function() { 733 }, function() {
729 734
730 } 735 }
731 ); 736 );
732 }; 737 };
733 738
734 $scope.agregarATabla = function(key) { 739 $scope.agregarATabla = function(key) {
735 if (key === 13) { 740 if (key === 13) {
736 if ($scope.articuloACargar.cantidad === undefined || 741 if ($scope.articuloACargar.cantidad === undefined ||
737 $scope.articuloACargar.cantidad === 0 || 742 $scope.articuloACargar.cantidad === 0 ||
738 $scope.articuloACargar.cantidad === null ) { 743 $scope.articuloACargar.cantidad === null ) {
739 focaModalService.alert('El valor debe ser al menos 1'); 744 focaModalService.alert('El valor debe ser al menos 1');
740 return; 745 return;
741 } 746 }
742 delete $scope.articuloACargar.sectorCodigo; 747 delete $scope.articuloACargar.sectorCodigo;
743 $scope.notaPedido.articulosNotaPedido.push($scope.articuloACargar); 748 $scope.notaPedido.articulosNotaPedido.push($scope.articuloACargar);
744 $scope.cargando = true; 749 $scope.cargando = true;
745 } 750 }
746 }; 751 };
747 752
748 $scope.quitarArticulo = function(key) { 753 $scope.quitarArticulo = function(key) {
749 $scope.notaPedido.articulosNotaPedido.splice(key, 1); 754 $scope.notaPedido.articulosNotaPedido.splice(key, 1);
750 }; 755 };
751 756
752 $scope.editarArticulo = function(key, articulo) { 757 $scope.editarArticulo = function(key, articulo, tmpCantidad, tmpPrecio) {
753 if (key === 13) { 758 if (key === 13) {
754 if (articulo.cantidad === null || articulo.cantidad === 0 || 759 if (!articulo.cantidad || !articulo.precio) {
755 articulo.cantidad === undefined) { 760 focaModalService.alert('Los valores deben ser al menos 1');
756 focaModalService.alert('El valor debe ser al menos 1'); 761 return;
762 } else if (articulo.cantidad < 0 || articulo.precio < 0) {
763 focaModalService.alert('Los valores no pueden ser negativos');
757 return; 764 return;
758 } 765 }
759 articulo.editCantidad = false; 766 articulo.cantidad = tmpCantidad;
760 articulo.editPrecio = false; 767 articulo.precio = tmpPrecio;
768 $scope.getTotal();
769 articulo.editCantidad = articulo.editPrecio = false;
761 } 770 }
762 }; 771 };
772
773 $scope.cancelarEditar = function(articulo) {
774 $scope.tmpCantidad = articulo.cantidad;
775 $scope.tmpPrecio = articulo.precio;
776 articulo.editCantidad = articulo.editPrecio = false;
777 };
763 778
764 $scope.cambioEdit = function(articulo, propiedad) { 779 $scope.cambioEdit = function(articulo, propiedad) {
765 if (propiedad === 'cantidad') { 780 if (propiedad === 'cantidad') {
766 articulo.editCantidad = true; 781 articulo.editCantidad = true;
767 } else if (propiedad === 'precio') { 782 } else if (propiedad === 'precio') {
768 articulo.editPrecio = true; 783 articulo.editPrecio = true;
769 } 784 }
770 }; 785 };
771 786
772 $scope.resetFilter = function() { 787 $scope.resetFilter = function() {
773 $scope.articuloACargar = {}; 788 $scope.articuloACargar = {};
774 $scope.cargando = true; 789 $scope.cargando = true;
775 }; 790 };
776 //Recibe aviso si el teclado está en uso 791 //Recibe aviso si el teclado está en uso
777 $rootScope.$on('usarTeclado', function(event, data) { 792 $rootScope.$on('usarTeclado', function(event, data) {
778 if (data) { 793 if (data) {
779 $scope.mostrarTeclado = true; 794 $scope.mostrarTeclado = true;
780 return; 795 return;
781 } 796 }
782 $scope.mostrarTeclado = false; 797 $scope.mostrarTeclado = false;
783 }); 798 });
784 799
785 $scope.selectFocus = function($event) { 800 $scope.selectFocus = function($event) {
786 // Si el teclado esta en uso no selecciona el valor 801 // Si el teclado esta en uso no selecciona el valor
787 if ($scope.mostrarTeclado) { 802 if ($scope.mostrarTeclado) {
788 return; 803 return;
789 } 804 }
790 $event.target.select(); 805 $event.target.select();
791 }; 806 };
792 807
793 $scope.salir = function() { 808 $scope.salir = function() {
794 $location.path('/'); 809 $location.path('/');
795 }; 810 };
796 811
797 $scope.parsearATexto = function(articulo) { 812 $scope.parsearATexto = function(articulo) {
798 articulo.cantidad = parseFloat(articulo.cantidad); 813 articulo.cantidad = parseFloat(articulo.cantidad);
799 articulo.precio = parseFloat(articulo.precio); 814 articulo.precio = parseFloat(articulo.precio);
800 }; 815 };
801 816
802 function setearNotaPedido(notaPedido) { 817 function setearNotaPedido(notaPedido) {
803 //añado cabeceras 818 //añado cabeceras
804 $scope.notaPedido = notaPedido; 819 $scope.notaPedido = notaPedido;
805 if (!$scope.notaPedido.domicilio) { 820 if (!$scope.notaPedido.domicilio) {
806 $scope.notaPedido.domicilio = { 821 $scope.notaPedido.domicilio = {
807 id: $scope.notaPedido.idDomicilio 822 id: $scope.notaPedido.idDomicilio
808 }; 823 };
809 } 824 }
810 $scope.$broadcast('removeCabecera', 'Bomba:'); 825 $scope.$broadcast('removeCabecera', 'Bomba:');
811 $scope.$broadcast('removeCabecera', 'Kilometros:'); 826 $scope.$broadcast('removeCabecera', 'Kilometros:');
812 $scope.$broadcast('cleanCabecera'); 827 $scope.$broadcast('cleanCabecera');
813 828
814 var cabeceras = []; 829 var cabeceras = [];
815 830
816 if (notaPedido.cotizacion.moneda.CODIGO_AFIP !== 'PES') { 831 if (notaPedido.cotizacion.moneda.CODIGO_AFIP !== 'PES') {
817 cabeceras.push({ 832 cabeceras.push({
818 label: 'Moneda:', 833 label: 'Moneda:',
819 valor: notaPedido.cotizacion.moneda.DETALLE 834 valor: notaPedido.cotizacion.moneda.DETALLE
820 }); 835 });
821 cabeceras.push({ 836 cabeceras.push({
822 label: 'Fecha cotizacion:', 837 label: 'Fecha cotizacion:',
823 valor: $filter('date')(notaPedido.cotizacion.FECHA, 838 valor: $filter('date')(notaPedido.cotizacion.FECHA,
824 'dd/MM/yyyy') 839 'dd/MM/yyyy')
825 }); 840 });
826 cabeceras.push({ 841 cabeceras.push({
827 label: 'Cotizacion:', 842 label: 'Cotizacion:',
828 valor: $filter('number')(notaPedido.cotizacion.VENDEDOR, 843 valor: $filter('number')(notaPedido.cotizacion.VENDEDOR,
829 '2') 844 '2')
830 }); 845 });
831 } 846 }
832 847
833 if (notaPedido.vendedor.NUM) { 848 if (notaPedido.vendedor.NUM) {
834 cabeceras.push({ 849 cabeceras.push({
835 label: 'Vendedor:', 850 label: 'Vendedor:',
836 valor: $filter('rellenarDigitos')(notaPedido.vendedor.NUM, 3) + 851 valor: $filter('rellenarDigitos')(notaPedido.vendedor.NUM, 3) +
837 ' - ' + notaPedido.vendedor.NOM 852 ' - ' + notaPedido.vendedor.NOM
838 }); 853 });
839 } 854 }
840 855
841 if (notaPedido.cliente.COD) { 856 if (notaPedido.cliente.COD) {
842 cabeceras.push({ 857 cabeceras.push({
843 label: 'Cliente:', 858 label: 'Cliente:',
844 valor: notaPedido.cliente.NOM 859 valor: notaPedido.cliente.NOM
845 }); 860 });
846 cabeceras.push({ 861 cabeceras.push({
847 label: 'Domicilio:', 862 label: 'Domicilio:',
848 valor: notaPedido.domicilioStamp 863 valor: notaPedido.domicilioStamp
849 }); 864 });
850 } 865 }
851 866
852 if (notaPedido.proveedor.COD) { 867 if (notaPedido.proveedor.COD) {
853 cabeceras.push({ 868 cabeceras.push({
854 label: 'Proveedor:', 869 label: 'Proveedor:',
855 valor: $filter('rellenarDigitos')(notaPedido.proveedor.COD, 5) + 870 valor: $filter('rellenarDigitos')(notaPedido.proveedor.COD, 5) +
856 ' - ' + notaPedido.proveedor.NOM 871 ' - ' + notaPedido.proveedor.NOM
857 }); 872 });
858 } 873 }
859 874
860 if (notaPedido.notaPedidoPlazo.length) { 875 if (notaPedido.notaPedidoPlazo.length) {
861 cabeceras.push({ 876 cabeceras.push({
862 label: 'Precios y condiciones:', 877 label: 'Precios y condiciones:',
863 valor: valorPrecioCondicion() + ' ' + 878 valor: valorPrecioCondicion() + ' ' +
864 notaPedidoBusinessService 879 notaPedidoBusinessService
865 .plazoToString(notaPedido.notaPedidoPlazo) 880 .plazoToString(notaPedido.notaPedidoPlazo)
866 }); 881 });
867 } 882 }
868 883
869 if (notaPedido.flete !== undefined) { 884 if (notaPedido.flete !== undefined) {
870 cabeceras.push({ 885 cabeceras.push({
871 label: 'Flete:', 886 label: 'Flete:',
872 valor: notaPedido.fob === 1 ? 'FOB' : ( 887 valor: notaPedido.fob === 1 ? 'FOB' : (
873 notaPedido.flete === 1 ? 'Si' : 'No') 888 notaPedido.flete === 1 ? 'Si' : 'No')
874 }); 889 });
875 } 890 }
876 891
877 function valorPrecioCondicion() { 892 function valorPrecioCondicion() {
878 if (notaPedido.idPrecioCondicion > 0) { 893 if (notaPedido.idPrecioCondicion > 0) {
879 return notaPedido.precioCondicion.nombre; 894 return notaPedido.precioCondicion.nombre;
880 } else { 895 } else {
881 return 'Ingreso Manual'; 896 return 'Ingreso Manual';
882 } 897 }
883 } 898 }
884 899
885 if (notaPedido.flete === 1) { 900 if (notaPedido.flete === 1) {
886 var cabeceraBomba = { 901 var cabeceraBomba = {
887 label: 'Bomba:', 902 label: 'Bomba:',
888 valor: notaPedido.bomba === 1 ? 'Si' : 'No' 903 valor: notaPedido.bomba === 1 ? 'Si' : 'No'
889 }; 904 };
890 if (notaPedido.kilometros) { 905 if (notaPedido.kilometros) {
891 var cabeceraKilometros = { 906 var cabeceraKilometros = {
892 label: 'Kilometros:', 907 label: 'Kilometros:',
893 valor: notaPedido.kilometros 908 valor: notaPedido.kilometros
894 }; 909 };
895 cabeceras.push(cabeceraKilometros); 910 cabeceras.push(cabeceraKilometros);
896 } 911 }
897 cabeceras.push(cabeceraBomba); 912 cabeceras.push(cabeceraBomba);
898 } 913 }
899 914
900 if (notaPedido.idPrecioCondicion > 0) { 915 if (notaPedido.idPrecioCondicion > 0) {
901 $scope.idLista = notaPedido.precioCondicion.idListaPrecio; 916 $scope.idLista = notaPedido.precioCondicion.idListaPrecio;
902 } else { 917 } else {
903 $scope.idLista = -1; 918 $scope.idLista = -1;
904 } 919 }
905 920
906 $scope.puntoVenta = $filter('rellenarDigitos')( 921 $scope.puntoVenta = $filter('rellenarDigitos')(
907 notaPedido.sucursal, 4 922 notaPedido.sucursal, 4
908 ); 923 );
909 924
910 $scope.comprobante = $filter('rellenarDigitos')( 925 $scope.comprobante = $filter('rellenarDigitos')(
911 notaPedido.numeroNotaPedido, 8 926 notaPedido.numeroNotaPedido, 8
912 ); 927 );
913 928
914 if (notaPedido.notaPedidoPuntoDescarga) { 929 if (notaPedido.notaPedidoPuntoDescarga) {
915 var puntosDescarga = notaPedido.notaPedidoPuntoDescarga; 930 var puntos = [];
931 notaPedido.notaPedidoPuntoDescarga.forEach(function(notaPedidoPuntoDescarga, idx, arr) {
932 puntos.push(notaPedidoPuntoDescarga.puntoDescarga);
933 });
916 cabeceras.push({ 934 cabeceras.push({
917 label: 'Puntos de descarga: ', 935 label: 'Puntos de descarga: ',
918 valor: $filter('rellenarDigitos')(getCabeceraPuntoDescarga(puntosDescarga)) 936 valor: $filter('rellenarDigitos')(getCabeceraPuntoDescarga(puntos))
919 }); 937 });
920 } 938 }
921 939
922 addArrayCabecera(cabeceras); 940 addArrayCabecera(cabeceras);
923 } 941 }
924 942
925 function getCabeceraPuntoDescarga(puntosDescarga){ 943 function getCabeceraPuntoDescarga(puntoDescarga){
926 var puntosStamp = ''; 944 var puntosStamp = '';
927 puntosDescarga.forEach(function(punto, idx, arr) { 945 puntoDescarga.forEach(function(punto, idx, arr) {
928 puntosStamp += punto.descripcion; 946 puntosStamp += punto.descripcion;
929 if ((idx + 1) !== arr.length) puntosStamp += ', '; 947 if ((idx + 1) !== arr.length) puntosStamp += ', ';
930 }); 948 });
931 return puntosStamp; 949 return puntosStamp;
932 } 950 }
933 951
934 function addArrayCabecera(array) { 952 function addArrayCabecera(array) {
935 for (var i = 0; i < array.length; i++) { 953 for (var i = 0; i < array.length; i++) {
936 $scope.$broadcast('addCabecera', { 954 $scope.$broadcast('addCabecera', {
937 label: array[i].label, 955 label: array[i].label,
938 valor: array[i].valor 956 valor: array[i].valor
939 }); 957 });
940 } 958 }
941 } 959 }
942 960
943 function validarNotaRemitada() { 961 function validarNotaRemitada() {
944 if (!$scope.notaPedido.idRemito) { 962 if (!$scope.notaPedido.idRemito) {
945 return true; 963 return true;
946 } else { 964 } else {
947 focaModalService.alert('No se puede editar una nota de pedido remitada'); 965 focaModalService.alert('No se puede editar una nota de pedido remitada');
948 return false; 966 return false;
949 } 967 }
950 } 968 }
951 969
952 function salir() { 970 function salir() {
953 var confirmacion = false; 971 var confirmacion = false;
954 972
955 if (!angular.equals($scope.notaPedido, $scope.inicial)) { 973 if (!angular.equals($scope.notaPedido, $scope.inicial)) {
956 confirmacion = true; 974 confirmacion = true;
957 } 975 }
958 976
959 if (confirmacion) { 977 if (confirmacion) {
960 focaModalService.confirm( 978 focaModalService.confirm(
961 '¿Está seguro de que desea salir? Se perderán todos los datos cargados.' 979 '¿Está seguro de que desea salir? Se perderán todos los datos cargados.'
962 ).then(function(data) { 980 ).then(function(data) {
963 if (data) { 981 if (data) {
964 $location.path('/'); 982 $location.path('/');
965 } 983 }
966 }); 984 });
967 } else { 985 } else {
968 $location.path('/'); 986 $location.path('/');
969 } 987 }
970 } 988 }
971 989
972 function getLSNotaPedido() { 990 function getLSNotaPedido() {
973 var notaPedido = JSON.parse($localStorage.notaPedido || null); 991 var notaPedido = JSON.parse($localStorage.notaPedido || null);
974 if (notaPedido) { 992 if (notaPedido) {
975 delete $localStorage.notaPedido; 993 delete $localStorage.notaPedido;
976 setearNotaPedido(notaPedido); 994 setearNotaPedido(notaPedido);
977 } 995 }
978 } 996 }
979 997
980 function deleteCliente() { 998 function deleteCliente() {
981 delete $scope.notaPedido.domicilioStamp; 999 delete $scope.notaPedido.domicilioStamp;
982 delete $scope.notaPedido.notaPedidoPuntoDescarga; 1000 delete $scope.notaPedido.notaPedidoPuntoDescarga;
983 $scope.notaPedido.domicilio = {dom: ''}; 1001 $scope.notaPedido.domicilio = {dom: ''};
984 $scope.notaPedido.cliente = {}; 1002 $scope.notaPedido.cliente = {};
985 $scope.$broadcast('removeCabecera', 'Cliente:'); 1003 $scope.$broadcast('removeCabecera', 'Cliente:');
986 $scope.$broadcast('removeCabecera', 'Domicilio:'); 1004 $scope.$broadcast('removeCabecera', 'Domicilio:');
987 $scope.$broadcast('removeCabecera', 'Puntos de descarga:'); 1005 $scope.$broadcast('removeCabecera', 'Puntos de descarga:');
988 } 1006 }
989 } 1007 }
990 ]); 1008 ]);
991 1009
src/views/nota-pedido.html
1 <div class="crear-nota-pedido foca-crear row"> 1 <div class="crear-nota-pedido foca-crear row">
2 <foca-cabecera-facturador 2 <foca-cabecera-facturador
3 titulo="'Nota de pedido'" 3 titulo="'Nota de pedido'"
4 numero="puntoVenta + '-' + comprobante" 4 numero="puntoVenta + '-' + comprobante"
5 fecha="notaPedido.fechaCarga" 5 fecha="notaPedido.fechaCarga"
6 class="mb-0 col-lg-12" 6 class="mb-0 col-lg-12"
7 busqueda="seleccionarNotaPedido" 7 busqueda="seleccionarNotaPedido"
8 ></foca-cabecera-facturador> 8 ></foca-cabecera-facturador>
9 <marquee 9 <marquee
10 bgcolor="#FF9900" 10 bgcolor="#FF9900"
11 behavior="scroll" 11 behavior="scroll"
12 direction="left" 12 direction="left"
13 ng-bind="notaPedido.observaciones" 13 ng-bind="notaPedido.observaciones"
14 ></marquee> 14 ></marquee>
15 <div class="col-lg-12"> 15 <div class="col-lg-12">
16 <div class="row"> 16 <div class="row">
17 <div class="col-12 col-md-10 col-lg-10 border border-light rounded"> 17 <div class="col-12 col-md-10 col-lg-10 border border-light rounded">
18 <div class="row py-2 botonera-secundaria"> 18 <div class="row py-2 botonera-secundaria">
19 <div class="col-12 foca-facturador-px"> 19 <div class="col-12 foca-facturador-px">
20 <foca-botonera-facturador botones="botonera" extra="5" class="row"></foca-botonera-facturador> 20 <foca-botonera-facturador botones="botonera" extra="5" class="row"></foca-botonera-facturador>
21 </div> 21 </div>
22 </div> 22 </div>
23 <!-- PC --> 23 <!-- PC -->
24 <div class="row grilla-articulo align-items-end d-none d-sm-flex"> 24 <div class="row grilla-articulo align-items-end d-none d-sm-flex">
25 <table class="table tabla-articulo table-striped table-sm mb-0 rounded-bottom"> 25 <table class="table tabla-articulo table-striped table-sm mb-0 rounded-bottom">
26 <thead> 26 <thead>
27 <tr class="d-flex"> 27 <tr class="d-flex">
28 <th valign="middle" class="">#</th> 28 <th valign="middle" class="">#</th>
29 <th valign="middle" class="col">Código</th> 29 <th valign="middle" class="col">Código</th>
30 <th valign="middle" class="col-4">Descripción</th> 30 <th valign="middle" class="col-4">Descripción</th>
31 <th valign="middle" class="col text-right">Cantidad</th> 31 <th valign="middle" class="col text-right">Cantidad</th>
32 <th valign="middle" class="col text-right">Precio Unitario</th> 32 <th valign="middle" class="col text-right">Precio Unitario</th>
33 <th valign="middle" class="col text-right">SubTotal</th> 33 <th valign="middle" class="col text-right">SubTotal</th>
34 <th valign="middle" class="text-right"> 34 <th valign="middle" class="text-right">
35 <button 35 <button
36 class="btn btn-outline-light selectable" 36 class="btn btn-outline-light selectable"
37 ng-click="show = !show; masMenos()" 37 ng-click="show = !show; masMenos()"
38 > 38 >
39 <i 39 <i
40 class="fa fa-chevron-down" 40 class="fa fa-chevron-down"
41 ng-show="show" 41 ng-show="show"
42 aria-hidden="true" 42 aria-hidden="true"
43 > 43 >
44 </i> 44 </i>
45 <i 45 <i
46 class="fa fa-chevron-up" 46 class="fa fa-chevron-up"
47 ng-hide="show" 47 ng-hide="show"
48 aria-hidden="true"> 48 aria-hidden="true">
49 </i> 49 </i>
50 </button> 50 </button>
51 </th> 51 </th>
52 </tr> 52 </tr>
53 </thead> 53 </thead>
54 <tbody class="tabla-articulo-body"> 54 <tbody class="tabla-articulo-body">
55 <tr 55 <tr
56 ng-repeat="(key, articulo) in notaPedido.articulosNotaPedido" 56 ng-repeat="(key, articulo) in notaPedido.articulosNotaPedido"
57 ng-show="show || key == (notaPedido.articulosNotaPedido.length - 1)" 57 ng-show="show || key == (notaPedido.articulosNotaPedido.length - 1)"
58 class="d-flex" 58 class="d-flex"
59 > 59 >
60 <td ng-bind="key + 1"></td> 60 <td ng-bind="key + 1"></td>
61 <td 61 <td
62 class="col" 62 class="col"
63 ng-bind="articulo.sector + '-' + articulo.codigo" 63 ng-bind="articulo.sector + '-' + articulo.codigo"
64 ></td> 64 ></td>
65 <td 65 <td
66 class="col-4" 66 class="col-4"
67 ng-bind="articulo.descripcion" 67 ng-bind="articulo.descripcion"
68 ></td> 68 ></td>
69 <td class="col text-right"> 69 <td class="col text-right">
70 <input 70 <input
71 ng-show="articulo.editCantidad" 71 ng-show="articulo.editCantidad"
72 ng-model="articulo.cantidad" 72 ng-model="tmpCantidad"
73 class="form-control" 73 class="form-control"
74 foca-tipo-input 74 foca-tipo-input
75 min="1" 75 min="1"
76 step="0.001"
77 foca-focus="articulo.editCantidad" 76 foca-focus="articulo.editCantidad"
78 ng-keypress="editarArticulo($event.keyCode, articulo)" 77 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
79 ng-focus="selectFocus($event)" 78 esc-key="cancelarEditar(articulo)"
79 ng-focus="selectFocus($event);
80 tmpCantidad = articulo.cantidad;
81 tmpPrecio = articulo.precio"
80 teclado-virtual 82 teclado-virtual
81 > 83 >
82 <i 84 <i
83 class="selectable" 85 class="selectable"
84 ng-click="cambioEdit(articulo, 'cantidad')" 86 ng-click="cambioEdit(articulo, 'cantidad')"
85 ng-hide="articulo.editCantidad" 87 ng-hide="articulo.editCantidad"
86 ng-bind="articulo.cantidad"> 88 ng-bind="articulo.cantidad">
87 </i> 89 </i>
88 </td> 90 </td>
89 <td class="col text-right"> 91 <td class="col text-right">
90 <input 92 <input
91 ng-show="articulo.editPrecio" 93 ng-show="articulo.editPrecio"
92 ng-model="articulo.precio" 94 ng-model="tmpPrecio"
93 class="form-control" 95 class="form-control"
94 foca-tipo-input 96 foca-tipo-input
95 min="0" 97 min="1"
96 step="0.0001" 98 step="0.0001"
97 foca-focus="articulo.editPrecio" 99 foca-focus="articulo.editPrecio"
98 ng-keypress="editarArticulo($event.keyCode, articulo)" 100 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
99 ng-focus="selectFocus($event)" 101 esc-key="cancelarEditar(articulo)"
102 ng-focus="selectFocus($event);
103 tmpCantidad = articulo.cantidad;
104 tmpPrecio = articulo.precio"
100 teclado-virtual 105 teclado-virtual
101 > 106 >
102 <i 107 <i
103 class="selectable" 108 class="selectable"
104 ng-click="idLista == -1 && cambioEdit(articulo, 'precio')" 109 ng-click="cambioEdit(articulo, 'precio')"
105 ng-hide="articulo.editPrecio" 110 ng-hide="articulo.editPrecio"
106 ng-bind="articulo.precio | 111 ng-bind="articulo.precio | number: 4">
107 number: 4">
108 </i> 112 </i>
109 </td> 113 </td>
110 <td 114 <td
111 class="col text-right" 115 class="col text-right"
112 ng-bind="(articulo.precio * articulo.cantidad) | 116 ng-bind="(articulo.precio * articulo.cantidad) |
113 number: 2"> 117 number: 2">
114 </td> 118 </td>
115 <td class="text-center"> 119 <td class="text-center">
116 <button 120 <button
117 ng-show="articulo.editCantidad || articulo.editPrecio" 121 ng-show="articulo.editCantidad || articulo.editPrecio"
118 class="btn btn-outline-light" 122 class="btn btn-outline-light"
119 ng-click="editarArticulo(13, articulo)" 123 ng-click="editarArticulo(13, articulo)"
120 > 124 >
121 <i class="fa fa-save"></i> 125 <i class="fa fa-save"></i>
122 </button> 126 </button>
123 <button 127 <button
124 class="btn btn-outline-light" 128 class="btn btn-outline-light"
125 ng-click="quitarArticulo(key)" 129 ng-click="quitarArticulo(key)"
126 > 130 >
127 <i class="fa fa-trash"></i> 131 <i class="fa fa-trash"></i>
128 </button> 132 </button>
129 </td> 133 </td>
130 </tr> 134 </tr>
131 </tbody> 135 </tbody>
132 <tfoot> 136 <tfoot>
133 <tr ng-show="!cargando" class="d-flex"> 137 <tr ng-show="!cargando" class="d-flex">
134 <td 138 <td
135 class="align-middle" 139 class="align-middle"
136 ng-bind="notaPedido.articulosNotaPedido.length + 1" 140 ng-bind="notaPedido.articulosNotaPedido.length + 1"
137 ></td> 141 ></td>
138 <td class="col"> 142 <td class="col">
139 <input 143 <input
140 class="form-control" 144 class="form-control"
141 ng-model="articuloACargar.sectorCodigo" 145 ng-model="articuloACargar.sectorCodigo"
142 readonly 146 readonly
143 > 147 >
144 </td> 148 </td>
145 <td class="col-4 tabla-articulo-descripcion"> 149 <td class="col-4 tabla-articulo-descripcion">
146 <input 150 <input
147 class="form-control" 151 class="form-control"
148 ng-model="articuloACargar.descripcion" 152 ng-model="articuloACargar.descripcion"
149 readonly 153 readonly
150 > 154 >
151 </td> 155 </td>
152 <td class="col text-right"> 156 <td class="col text-right">
153 <input 157 <input
154 class="form-control" 158 class="form-control"
155 foca-tipo-input 159 foca-tipo-input
156 min="1" 160 min="1"
157 step="0.001" 161 step="0.001"
158 ng-model="articuloACargar.cantidad" 162 ng-model="articuloACargar.cantidad"
159 foca-focus="!cargando" 163 foca-focus="!cargando"
160 esc-key="resetFilter()" 164 esc-key="resetFilter()"
161 ng-keypress="agregarATabla($event.keyCode)" 165 ng-keypress="agregarATabla($event.keyCode)"
162 teclado-virtual 166 teclado-virtual
163 > 167 >
164 </td> 168 </td>
165 <td class="col text-right"> 169 <td class="col text-right">
166 <input 170 <input
167 class="form-control" 171 class="form-control"
168 ng-value="articuloACargar.precio | number: 2" 172 ng-value="articuloACargar.precio | number: 2"
169 ng-show="idLista != -1" 173 ng-show="idLista != -1"
170 readonly 174 readonly
171 > 175 >
172 <input 176 <input
173 class="form-control" 177 class="form-control"
174 foca-tipo-input 178 foca-tipo-input
175 min="0" 179 min="0"
176 step="0.0001" 180 step="0.0001"
177 ng-model="articuloACargar.precio" 181 ng-model="articuloACargar.precio"
178 esc-key="resetFilter()" 182 esc-key="resetFilter()"
179 ng-keypress="agregarATabla($event.keyCode)" 183 ng-keypress="agregarATabla($event.keyCode)"
180 ng-show="idLista == -1" 184 ng-show="idLista == -1"
181 teclado-virtual 185 teclado-virtual
182 > 186 >
183 </td> 187 </td>
184 <td class="col text-right"> 188 <td class="col text-right">
185 <input 189 <input
186 class="form-control" 190 class="form-control"
187 ng-value="getSubTotal() | number: 2" 191 ng-value="getSubTotal() | number: 2"
188 readonly 192 readonly
189 ></td> 193 ></td>
190 <td class="text-center align-middle"> 194 <td class="text-center align-middle">
191 <button 195 <button
192 class="btn btn-outline-light" 196 class="btn btn-outline-light"
193 ng-click="agregarATabla(13)" 197 ng-click="agregarATabla(13)"
194 > 198 >
195 <i class="fa fa-save"></i> 199 <i class="fa fa-save"></i>
196 </button> 200 </button>
197 </td> 201 </td>
198 </tr> 202 </tr>
199 <tr class="d-flex"> 203 <tr class="d-flex">
200 <td colspan="4" class="no-border-top"> 204 <td colspan="4" class="no-border-top">
201 <strong>Items:</strong> 205 <strong>Items:</strong>
202 <a ng-bind="notaPedido.articulosNotaPedido.length"></a> 206 <a ng-bind="notaPedido.articulosNotaPedido.length"></a>
203 </td> 207 </td>
204 <td class="text-right ml-auto table-celda-total no-border-top"> 208 <td class="text-right ml-auto table-celda-total no-border-top">
205 <h3>Total:</h3> 209 <h3>Total:</h3>
206 </td> 210 </td>
207 <td class="table-celda-total text-right no-border-top" colspan="1"> 211 <td class="table-celda-total text-right no-border-top" colspan="1">
208 <h3>{{getTotal() | currency: notaPedido.cotizacion.moneda.SIMBOLO}}</h3> 212 <h3>{{getTotal() | currency: notaPedido.cotizacion.moneda.SIMBOLO}}</h3>
209 </td> 213 </td>
210 <td class="text-right no-border-top"> 214 <td class="text-right no-border-top">
211 <button 215 <button
212 type="button" 216 type="button"
213 class="btn btn-default btn-sm" 217 class="btn btn-default btn-sm"
214 > 218 >
215 Totales 219 Totales
216 </button> 220 </button>
217 </td> 221 </td>
218 </tr> 222 </tr>
219 </tfoot> 223 </tfoot>
220 </table> 224 </table>
221 </div> 225 </div>
222 <!-- MOBILE --> 226 <!-- MOBILE -->
223 <div class="row d-sm-none"> 227 <div class="row d-sm-none">
224 <table class="table table-sm table-striped tabla-articulo margin-bottom-mobile"> 228 <table class="table table-sm table-striped tabla-articulo margin-bottom-mobile">
225 <thead> 229 <thead>
226 <tr class="d-flex"> 230 <tr class="d-flex">
227 <th class="">#</th> 231 <th class="">#</th>
228 <th class="col px-0"> 232 <th class="col px-0">
229 <div class="d-flex"> 233 <div class="d-flex">
230 <div class="col-4 px-1">Código</div> 234 <div class="col-4 px-1">Código</div>
231 <div class="col-8 px-1">Descripción</div> 235 <div class="col-8 px-1">Descripción</div>
232 </div> 236 </div>
233 <div class="d-flex"> 237 <div class="d-flex">
234 <div class="col-3 px-1">Cantidad</div> 238 <div class="col-3 px-1">Cantidad</div>
235 <div class="col px-1 text-right">P. Uni.</div> 239 <div class="col px-1 text-right">P. Uni.</div>
236 <div class="col px-1 text-right">Subtotal</div> 240 <div class="col px-1 text-right">Subtotal</div>
237 </div> 241 </div>
238 </th> 242 </th>
239 <th class="text-center tamaño-boton"> 243 <th class="text-center tamaño-boton">
240 &nbsp; 244 &nbsp;
241 </th> 245 </th>
242 </tr> 246 </tr>
243 </thead> 247 </thead>
244 <tbody> 248 <tbody>
245 <tr 249 <tr
246 ng-repeat="(key, articulo) in notaPedido.articulosNotaPedido" 250 ng-repeat="(key, articulo) in notaPedido.articulosNotaPedido"
247 ng-show="show || key == notaPedido.articulosNotaPedido.length - 1" 251 ng-show="show || key == notaPedido.articulosNotaPedido.length - 1"
248 > 252 >
249 <td class="w-100 align-middle d-flex p-0"> 253 <td class="w-100 align-middle d-flex p-0">
250 <div class="align-middle p-1"> 254 <div class="align-middle p-1">
251 <span ng-bind="key+1" class="align-middle"></span> 255 <span ng-bind="key+1" class="align-middle"></span>
252 </div> 256 </div>
253 <div class="col px-0"> 257 <div class="col px-0">
254 <div class="d-flex"> 258 <div class="d-flex">
255 <div class="col-4 px-1"> 259 <div class="col-4 px-1">
256 <span 260 <span
257 ng-bind="articulo.sector + '-' + articulo.codigo" 261 ng-bind="articulo.sector + '-' + articulo.codigo"
258 ></span> 262 ></span>
259 </div> 263 </div>
260 <div class="col-8 px-1"> 264 <div class="col-8 px-1">
261 <span ng-bind="articulo.descripcion"></span> 265 <span ng-bind="articulo.descripcion"></span>
262 </div> 266 </div>
263 </div> 267 </div>
264 <div class="d-flex"> 268 <div class="d-flex">
265 <div class="col-3 px-1"> 269 <div class="col-3 px-1">
266 <span 270 <span
267 ng-bind="'x' + articulo.cantidad" 271 ng-bind="'x' + articulo.cantidad"
268 ng-hide="articulo.editCantidad" 272 ng-hide="articulo.editCantidad"
269 ></span> 273 ></span>
270 <i 274 <i
271 class="fa fa-pencil text-white-50" 275 class="fa fa-pencil text-white-50"
272 aria-hidden="true" 276 aria-hidden="true"
273 ng-hide="articulo.editCantidad" 277 ng-hide="articulo.editCantidad"
274 ng-click="articulo.editCantidad = true" 278 ng-click="articulo.editCantidad = true"
275 ></i> 279 ></i>
276 <input 280 <input
277 ng-show="articulo.editCantidad" 281 ng-show="articulo.editCantidad"
278 ng-model="articulo.cantidad" 282 ng-model="articulo.cantidad"
279 class="form-control" 283 class="form-control"
280 foca-tipo-input 284 foca-tipo-input
281 min="1" 285 min="1"
282 step="0.001" 286 step="0.001"
283 foca-focus="articulo.editCantidad" 287 foca-focus="articulo.editCantidad"
284 ng-keypress="editarArticulo($event.keyCode, articulo)" 288 ng-keypress="editarArticulo($event.keyCode, articulo)"
285 ng-focus="selectFocus($event)" 289 ng-focus="selectFocus($event)"
286 > 290 >
287 </div> 291 </div>
288 <div class="col px-1 text-right"> 292 <div class="col px-1 text-right">
289 <span ng-bind="articulo.precio | 293 <span ng-bind="articulo.precio |
290 currency: notaPedido.moneda.SIMBOLO : 4"></span> 294 currency: notaPedido.moneda.SIMBOLO : 4"></span>
291 ></span> 295 ></span>
292 </div> 296 </div>
293 <div class="col px-1 text-right"> 297 <div class="col px-1 text-right">
294 <span 298 <span
295 ng-bind="(articulo.precio * articulo.cantidad) | 299 ng-bind="(articulo.precio * articulo.cantidad) |
296 currency: notaPedido.moneda.SIMBOLO" 300 currency: notaPedido.moneda.SIMBOLO"
297 > 301 >
298 </span> 302 </span>
299 </div> 303 </div>
300 </div> 304 </div>
301 </div> 305 </div>
302 <div class="align-middle p-1"> 306 <div class="align-middle p-1">
303 <button 307 <button
304 class="btn btn-outline-light" 308 class="btn btn-outline-light"
305 ng-click="quitarArticulo(key)" 309 ng-click="quitarArticulo(key)"
306 > 310 >
307 <i class="fa fa-trash"></i> 311 <i class="fa fa-trash"></i>
308 </button> 312 </button>
309 </div> 313 </div>
310 </td> 314 </td>
311 </tr> 315 </tr>
312 </tbody> 316 </tbody>
313 <tfoot> 317 <tfoot>
314 <!-- CARGANDO ITEM --> 318 <!-- CARGANDO ITEM -->
315 <tr ng-show="!cargando" class="d-flex"> 319 <tr ng-show="!cargando" class="d-flex">
316 <td 320 <td
317 class="align-middle p-1" 321 class="align-middle p-1"
318 ng-bind="notaPedido.articulosNotaPedido.length + 1" 322 ng-bind="notaPedido.articulosNotaPedido.length + 1"
319 ></td> 323 ></td>
320 <td class="col p-0"> 324 <td class="col p-0">
321 <div class="d-flex"> 325 <div class="d-flex">
322 <div class="col-4 px-1"> 326 <div class="col-4 px-1">
323 <span 327 <span
324 ng-bind="articuloACargar.sectorCodigo" 328 ng-bind="articuloACargar.sectorCodigo"
325 ></span> 329 ></span>
326 </div> 330 </div>
327 <div class="col-8 px-1"> 331 <div class="col-8 px-1">
328 <span ng-bind="articuloACargar.descripcion"></span> 332 <span ng-bind="articuloACargar.descripcion"></span>
329 </div> 333 </div>
330 </div> 334 </div>
331 <div class="d-flex"> 335 <div class="d-flex">
332 <div class="col-3 px-1 m-1"> 336 <div class="col-3 px-1 m-1">
333 <input 337 <input
334 class="form-control p-1" 338 class="form-control p-1"
335 foca-tipo-input 339 foca-tipo-input
336 min="1" 340 min="1"
337 ng-model="articuloACargar.cantidad" 341 ng-model="articuloACargar.cantidad"
338 foca-focus="!cargando" 342 foca-focus="!cargando"
339 ng-keypress="agregarATabla($event.keyCode)" 343 ng-keypress="agregarATabla($event.keyCode)"
340 style="height: auto; line-height: 1.1em" 344 style="height: auto; line-height: 1.1em"
341 > 345 >
342 </div> 346 </div>
343 <div class="col px-1 text-right"> 347 <div class="col px-1 text-right">
344 <span ng-bind="articuloACargar.precio | 348 <span ng-bind="articuloACargar.precio |
345 currency: notaPedido.moneda.SIMBOLO : 4" 349 currency: notaPedido.moneda.SIMBOLO : 4"
346 ></span> 350 ></span>
347 </div> 351 </div>
348 <div class="col px-1 text-right"> 352 <div class="col px-1 text-right">
349 <span 353 <span
350 ng-bind="getSubTotal() | 354 ng-bind="getSubTotal() |
351 currency: notaPedido.moneda.SIMBOLO" 355 currency: notaPedido.moneda.SIMBOLO"
352 > 356 >
353 </span> 357 </span>
354 </div> 358 </div>
355 </div> 359 </div>
356 </td> 360 </td>
357 <td class="text-center align-middle"> 361 <td class="text-center align-middle">
358 <button 362 <button
359 class="btn btn-outline-light" 363 class="btn btn-outline-light"
360 ng-click="agregarATabla(13)" 364 ng-click="agregarATabla(13)"
361 > 365 >
362 <i class="fa fa-save"></i> 366 <i class="fa fa-save"></i>
363 </button> 367 </button>
364 </td> 368 </td>
365 </tr> 369 </tr>
366 <!-- TOOGLE EXPANDIR --> 370 <!-- TOOGLE EXPANDIR -->
367 <tr> 371 <tr>
368 <td class="col"> 372 <td class="col">
369 <button 373 <button
370 class="btn btn-outline-light selectable w-100" 374 class="btn btn-outline-light selectable w-100"
371 ng-click="show = !show; masMenos()" 375 ng-click="show = !show; masMenos()"
372 ng-show="notaPedido.articulosNotaPedido.length > 0" 376 ng-show="notaPedido.articulosNotaPedido.length > 0"
373 > 377 >
374 <i 378 <i
375 class="fa fa-chevron-down" 379 class="fa fa-chevron-down"
376 ng-hide="show" 380 ng-hide="show"
377 aria-hidden="true" 381 aria-hidden="true"
378 > 382 >
379 </i> 383 </i>
380 <i 384 <i
381 class="fa fa-chevron-up" 385 class="fa fa-chevron-up"
382 ng-show="show" 386 ng-show="show"
383 aria-hidden="true"> 387 aria-hidden="true">
384 </i> 388 </i>
385 </button> 389 </button>
386 </td> 390 </td>
387 </tr> 391 </tr>
388 <!-- FOOTER --> 392 <!-- FOOTER -->
389 <tr class="d-flex"> 393 <tr class="d-flex">
390 <td class="align-middle no-border-top" colspan="2"> 394 <td class="align-middle no-border-top" colspan="2">
391 <strong>Cantidad Items:</strong> 395 <strong>Cantidad Items:</strong>
392 <a ng-bind="notaPedido.articulosNotaPedido.length"></a> 396 <a ng-bind="notaPedido.articulosNotaPedido.length"></a>
393 </td> 397 </td>
394 <td class="text-right ml-auto table-celda-total no-border-top"> 398 <td class="text-right ml-auto table-celda-total no-border-top">
395 <h3>Total:</h3> 399 <h3>Total:</h3>
396 </td> 400 </td>
397 <td class="table-celda-total text-right no-border-top"> 401 <td class="table-celda-total text-right no-border-top">
398 <h3>{{getTotal() | currency: notaPedido.cotizacion.moneda.SIMBOLO}}</h3> 402 <h3>{{getTotal() | currency: notaPedido.cotizacion.moneda.SIMBOLO}}</h3>
399 </td> 403 </td>
400 </tr> 404 </tr>
401 </tfoot> 405 </tfoot>
402 </table> 406 </table>
403 </div> 407 </div>
404 </div> 408 </div>
405 </div> 409 </div>
406 </div> 410 </div>
407 <div class="row d-md-none fixed-bottom"> 411 <div class="row d-md-none fixed-bottom">
408 <div class="w-100 bg-dark d-flex px-3 acciones-mobile"> 412 <div class="w-100 bg-dark d-flex px-3 acciones-mobile">
409 <span class="ml-3 text-muted" ng-click="salir()">Salir</span> 413 <span class="ml-3 text-muted" ng-click="salir()">Salir</span>
410 <span 414 <span
411 class="mr-3 ml-auto" 415 class="mr-3 ml-auto"
412 ng-class="saveLoading ? 'text-muted' : ''" 416 ng-class="saveLoading ? 'text-muted' : ''"
413 ng-click="crearNotaPedido()" 417 ng-click="crearNotaPedido()"
414 ladda="saveLoading" 418 ladda="saveLoading"
415 data-style="expand-left" 419 data-style="expand-left"
416 >Guardar</span> 420 >Guardar</span>
417 </div> 421 </div>
418 </div> 422 </div>