Commit 1e044fad53a1521e6f48ebc586abdd47647db005

Authored by Marcelo Puebla
Exists in develop

Merge branch 'develop' into 'develop'

Develop

See merge request !149
src/js/controller.js
1 angular.module('focaCrearRemito').controller('remitoController', 1 angular.module('focaCrearRemito').controller('remitoController',
2 [ 2 [
3 '$scope', '$uibModal', '$location', '$filter', 'crearRemitoService', '$timeout', 3 '$scope', '$uibModal', '$location', '$filter', 'crearRemitoService', '$timeout',
4 'focaModalService', 'remitoBusinessService', '$rootScope', 'focaBotoneraLateralService', 4 'focaModalService', 'remitoBusinessService', '$rootScope', 'focaBotoneraLateralService',
5 '$localStorage', 5 '$localStorage',
6 function ( 6 function (
7 $scope, $uibModal, $location, $filter, crearRemitoService, $timeout, focaModalService, 7 $scope, $uibModal, $location, $filter, crearRemitoService, $timeout, focaModalService,
8 remitoBusinessService, $rootScope, focaBotoneraLateralService, $localStorage) { 8 remitoBusinessService, $rootScope, focaBotoneraLateralService, $localStorage) {
9 config(); 9 config();
10 10
11 var cotizacionPArgentino = {}; 11 var cotizacionPArgentino = {};
12 12
13 function config() { 13 function config() {
14 $scope.tmpCantidad = Number; 14 $scope.tmpCantidad = Number;
15 $scope.tmpPrecio = Number; 15 $scope.tmpPrecio = Number;
16 $scope.botonera = crearRemitoService.getBotonera(); 16 $scope.botonera = crearRemitoService.getBotonera();
17 $scope.isNumber = angular.isNumber; 17 $scope.isNumber = angular.isNumber;
18 $scope.datepickerAbierto = false; 18 $scope.datepickerAbierto = false;
19 $scope.show = false; 19 $scope.show = false;
20 $scope.cargando = true; 20 $scope.cargando = true;
21 $scope.now = new Date(); 21 $scope.now = new Date();
22 $scope.puntoVenta = rellenar(0, 4); 22 $scope.puntoVenta = rellenar(0, 4);
23 $scope.comprobante = rellenar(0, 8); 23 $scope.comprobante = rellenar(0, 8);
24 $scope.dateOptions = { 24 $scope.dateOptions = {
25 maxDate: new Date(), 25 maxDate: new Date(),
26 minDate: new Date(2010, 0, 1) 26 minDate: new Date(2010, 0, 1)
27 }; 27 };
28 $scope.cabeceras = []; 28 $scope.cabeceras = [];
29 crearRemitoService.getParametros().then(function (res) { 29 crearRemitoService.getParametros().then(function (res) {
30 var parametros = JSON.parse(res.data[0].jsonText); 30 var parametros = JSON.parse(res.data[0].jsonText);
31 if ($localStorage.remito) { 31 if ($localStorage.remito) {
32 $timeout(function () { getLSRemito(); }); 32 $timeout(function () { getLSRemito(); });
33 } else { 33 } else {
34 for (var property in parametros) { 34 for (var property in parametros) {
35 $scope.remito[property] = parametros[property]; 35 $scope.remito[property] = parametros[property];
36 $scope.inicial[property] = parametros[property]; 36 $scope.inicial[property] = parametros[property];
37 } 37 }
38 setearRemito($scope.remito); 38 setearRemito($scope.remito);
39 } 39 }
40 }); 40 });
41 41
42 //SETEO BOTONERA LATERAL 42 //SETEO BOTONERA LATERAL
43 $timeout(function () { 43 $timeout(function () {
44 focaBotoneraLateralService.showSalir(false); 44 focaBotoneraLateralService.showSalir(false);
45 focaBotoneraLateralService.showPausar(true); 45 focaBotoneraLateralService.showPausar(true);
46 focaBotoneraLateralService.showGuardar(true, $scope.crearRemito); 46 focaBotoneraLateralService.showGuardar(true, $scope.crearRemito);
47 focaBotoneraLateralService.addCustomButton('Salir', salir); 47 focaBotoneraLateralService.addCustomButton('Salir', salir);
48 }); 48 });
49 49
50 init(); 50 init();
51 } 51 }
52 52
53 function init() { 53 function init() {
54 $scope.$broadcast('cleanCabecera'); 54 $scope.$broadcast('cleanCabecera');
55 $scope.remito = { 55 $scope.remito = {
56 id: 0, 56 id: 0,
57 estado: 0, 57 estado: 0,
58 // vendedor: {}, 58 // vendedor: {},
59 cliente: {}, 59 cliente: {},
60 proveedor: {}, 60 proveedor: {},
61 domicilio: { dom: '' }, 61 domicilio: { dom: '' },
62 moneda: {}, 62 moneda: {},
63 cotizacion: $scope.cotizacionPorDefecto || {}, 63 cotizacion: $scope.cotizacionPorDefecto || {},
64 articulosRemito: [], 64 articulosRemito: [],
65 remitoPuntoDescarga: [] 65 remitoPuntoDescarga: []
66 }; 66 };
67 $scope.notaPedido = { 67 $scope.notaPedido = {
68 id: 0 68 id: 0
69 }; 69 };
70 70
71 $scope.remito.articulosRemito = []; 71 $scope.remito.articulosRemito = [];
72 $scope.idLista = undefined; 72 $scope.idLista = undefined;
73 73
74 crearRemitoService.getNumeroRemito().then( 74 crearRemitoService.getNumeroRemito().then(
75 function (res) { 75 function (res) {
76 $scope.puntoVenta = rellenar(res.data.sucursal, 4); 76 $scope.puntoVenta = rellenar(res.data.sucursal, 4);
77 $scope.comprobante = rellenar(res.data.numeroRemito, 8); 77 $scope.comprobante = rellenar(res.data.numeroRemito, 8);
78 }, 78 },
79 function (err) { 79 function (err) {
80 focaModalService.alert('La terminal no esta configurada correctamente'); 80 focaModalService.alert('La terminal no esta configurada correctamente');
81 console.info(err); 81 console.info(err);
82 } 82 }
83 ); 83 );
84 84
85 $scope.inicial = angular.copy($scope.remito); 85 $scope.inicial = angular.copy($scope.remito);
86 } 86 }
87 87
88 $scope.$watch('remito', function (newValue) { 88 $scope.$watch('remito', function (newValue) {
89 focaBotoneraLateralService.setPausarData({ 89 focaBotoneraLateralService.setPausarData({
90 label: 'remito', 90 label: 'remito',
91 val: newValue 91 val: newValue
92 }); 92 });
93 focaBotoneraLateralService.setRutasPausadas({ 93 focaBotoneraLateralService.setRutasPausadas({
94 label: 'rutas', 94 label: 'rutas',
95 val: 'venta-remito/crear' 95 val: 'venta-remito/crear'
96 }); 96 });
97 }, true); 97 }, true);
98 98
99 $scope.seleccionarNotaPedido = function () { 99 $scope.seleccionarNotaPedido = function () {
100 if ($scope.remitoIsDirty) { 100 if ($scope.remitoIsDirty) {
101 focaModalService.confirm('¿Desea continuar? Se perderan los cambios') 101 focaModalService.confirm('¿Desea continuar? Se perderan los cambios')
102 .then(function () { 102 .then(function () {
103 $scope.getNotaPedidoModal(); 103 $scope.getNotaPedidoModal();
104 }); 104 });
105 } else { 105 } else {
106 $scope.getNotaPedidoModal(); 106 $scope.getNotaPedidoModal();
107 } 107 }
108 }; 108 };
109 109
110 $scope.getNotaPedidoModal = function () { 110 $scope.getNotaPedidoModal = function () {
111 if (!varlidarRemitoFacturado()) return; 111 if (!varlidarRemitoFacturado()) return;
112 if (!varlidarRemitoAbierto()) return; 112 if (!varlidarRemitoAbierto()) return;
113 var modalInstance = $uibModal.open( 113 var modalInstance = $uibModal.open(
114 { 114 {
115 ariaLabelledBy: 'Busqueda de Nota de Pedido', 115 ariaLabelledBy: 'Busqueda de Nota de Pedido',
116 templateUrl: 'foca-modal-nota-pedido.html', 116 templateUrl: 'foca-modal-nota-pedido.html',
117 controller: 'focaModalNotaPedidoController', 117 controller: 'focaModalNotaPedidoController',
118 size: 'lg', 118 size: 'lg',
119 resolve: { 119 resolve: {
120 usadoPor: function () { return 'remito'; }, 120 usadoPor: function () { return 'remito'; },
121 idVendedor: function () { return null; } 121 idVendedor: function () { return null; }
122 } 122 }
123 } 123 }
124 ); 124 );
125 modalInstance.result.then( 125 modalInstance.result.then(
126 function (notaPedido) { 126 function (notaPedido) {
127 //añado cabeceras 127 //añado cabeceras
128 $scope.remitoIsDirty = true; 128 $scope.remitoIsDirty = true;
129 $scope.notaPedido = notaPedido; 129 $scope.notaPedido = notaPedido;
130 $scope.remito.cliente = notaPedido.cliente; 130 $scope.remito.cliente = notaPedido.cliente;
131 $scope.$broadcast('removeCabecera', 'Bomba:'); 131 $scope.$broadcast('removeCabecera', 'Bomba:');
132 $scope.$broadcast('removeCabecera', 'Kilometros:'); 132 $scope.$broadcast('removeCabecera', 'Kilometros:');
133 var puntosDescarga = []; 133 var puntosDescarga = [];
134 notaPedido.notaPedidoPuntoDescarga.forEach(function (notaPedido) { 134 notaPedido.notaPedidoPuntoDescarga.forEach(function (notaPedido) {
135 puntosDescarga.push(notaPedido.puntoDescarga); 135 puntosDescarga.push(notaPedido.puntoDescarga);
136 }); 136 });
137 $scope.cabeceras = [ 137 $scope.cabeceras = [
138 { 138 {
139 label: 'Cliente:', 139 label: 'Cliente:',
140 valor: $filter('rellenarDigitos')(notaPedido.cliente.COD, 3) + 140 valor: $filter('rellenarDigitos')(notaPedido.cliente.COD, 3) +
141 ' - ' + notaPedido.cliente.NOM 141 ' - ' + notaPedido.cliente.NOM
142 }, 142 },
143 { 143 {
144 label: 'Domicilio:', 144 label: 'Domicilio:',
145 valor: notaPedido.domicilioStamp 145 valor: notaPedido.domicilioStamp
146 }, 146 },
147 // { 147 // {
148 // label: 'Vendedor:', 148 // label: 'Vendedor:',
149 // valor: $filter('rellenarDigitos')( 149 // valor: $filter('rellenarDigitos')(
150 // notaPedido.vendedor.NUM, 3 150 // notaPedido.vendedor.NUM, 3
151 // ) + ' - ' + notaPedido.vendedor.NOM 151 // ) + ' - ' + notaPedido.vendedor.NOM
152 // }, 152 // },
153 153
154 { 154 {
155 label: 'Proveedor:', 155 label: 'Proveedor:',
156 valor: $filter('rellenarDigitos') 156 valor: $filter('rellenarDigitos')
157 (notaPedido.proveedor.COD, 5) + ' - ' + 157 (notaPedido.proveedor.COD, 5) + ' - ' +
158 notaPedido.proveedor.NOM 158 notaPedido.proveedor.NOM
159 }, 159 },
160 160
161 { 161 {
162 label: 'Flete:', 162 label: 'Flete:',
163 valor: notaPedido.fob === 1 ? 'FOB' : ( 163 valor: notaPedido.fob === 1 ? 'FOB' : (
164 notaPedido.flete === 1 ? 'Si' : 'No') 164 notaPedido.flete === 1 ? 'Si' : 'No')
165 }, 165 },
166 { 166 {
167 label: 'Puntos de descarga: ', 167 label: 'Puntos de descarga: ',
168 valor: $filter('rellenarDigitos')( 168 valor: $filter('rellenarDigitos')(
169 getCabeceraPuntoDescarga(puntosDescarga)) 169 getCabeceraPuntoDescarga(puntosDescarga))
170 } 170 }
171 ]; 171 ];
172 actualizarCabeceraMoneda(notaPedido.cotizacion); 172 actualizarCabeceraMoneda(notaPedido.cotizacion);
173 valorPrecioCondicion(); 173 valorPrecioCondicion();
174 // Seteo checked en cabeceras 174 // Seteo checked en cabeceras
175 $filter('filter')($scope.botonera, 175 $filter('filter')($scope.botonera,
176 { label: 'Cliente' })[0].checked = true; 176 { label: 'Cliente' })[0].checked = true;
177 $filter('filter')($scope.botonera, 177 $filter('filter')($scope.botonera,
178 { label: 'Proveedor' })[0].checked = true; 178 { label: 'Proveedor' })[0].checked = true;
179 $filter('filter')($scope.botonera, 179 $filter('filter')($scope.botonera,
180 { label: 'Moneda' })[0].checked = true; 180 { label: 'Moneda' })[0].checked = true;
181 $filter('filter')($scope.botonera, 181 $filter('filter')($scope.botonera,
182 { label: 'Nota pedido' })[0].checked = true; 182 { label: 'Nota pedido' })[0].checked = true;
183 $filter('filter')($scope.botonera, 183 $filter('filter')($scope.botonera,
184 { label: 'Precios y condiciones' })[0].checked = true; 184 { label: 'Precios y condiciones' })[0].checked = true;
185 $filter('filter')($scope.botonera, 185 $filter('filter')($scope.botonera,
186 { label: 'Domicilio de Entrega' })[0].checked = true; 186 { label: 'Domicilio de Entrega' })[0].checked = true;
187 187
188 if (notaPedido.observaciones) { 188 if (notaPedido.observaciones) {
189 $filter('filter')($scope.botonera, 189 $filter('filter')($scope.botonera,
190 { label: 'Observaciones' })[0].checked = true; 190 { label: 'Observaciones' })[0].checked = true;
191 } 191 }
192 192
193 function valorPrecioCondicion() { 193 function valorPrecioCondicion() {
194 if (parseInt(notaPedido.idListaPrecio) > 0) { 194 if (parseInt(notaPedido.idListaPrecio) > 0) {
195 crearRemitoService 195 crearRemitoService
196 .getListaPrecioById(parseInt(notaPedido.idListaPrecio)) 196 .getListaPrecioById(parseInt(notaPedido.idListaPrecio))
197 .then(function (res) { 197 .then(function (res) {
198 $scope.cabeceras.push({ 198 $scope.cabeceras.push({
199 label: 'Precios y Condiciones:', 199 label: 'Precios y Condiciones:',
200 valor: 200 valor:
201 parseInt(res.data[0].ID) + ' - ' + 201 parseInt(res.data[0].ID) + ' - ' +
202 res.data[0].DES + ' ' + 202 res.data[0].DES + ' ' +
203 remitoBusinessService 203 remitoBusinessService
204 .plazoToString(notaPedido.notaPedidoPlazo) 204 .plazoToString(notaPedido.notaPedidoPlazo)
205 }); 205 });
206 addArrayCabecera($scope.cabeceras); 206 addArrayCabecera($scope.cabeceras);
207 }); 207 });
208 } 208 }
209 } 209 }
210 210
211 if (notaPedido.flete === 1) { 211 if (notaPedido.flete === 1) {
212 var cabeceraBomba = { 212 var cabeceraBomba = {
213 label: 'Bomba:', 213 label: 'Bomba:',
214 valor: notaPedido.bomba === 1 ? 'Si' : 'No' 214 valor: notaPedido.bomba === 1 ? 'Si' : 'No'
215 }; 215 };
216 if (notaPedido.kilometros) { 216 if (notaPedido.kilometros) {
217 var cabeceraKilometros = { 217 var cabeceraKilometros = {
218 label: 'Kilometros:', 218 label: 'Kilometros:',
219 valor: notaPedido.kilometros 219 valor: notaPedido.kilometros
220 }; 220 };
221 $scope.cabeceras.push(cabeceraKilometros); 221 $scope.cabeceras.push(cabeceraKilometros);
222 } 222 }
223 $scope.cabeceras.push(cabeceraBomba); 223 $scope.cabeceras.push(cabeceraBomba);
224 } 224 }
225 225
226 $scope.remito = angular.copy(notaPedido); 226 $scope.remito = angular.copy(notaPedido);
227 $scope.remito.id = 0; 227 $scope.remito.id = 0;
228 $scope.remito.remitoPlazo = notaPedido.notaPedidoPlazo; 228 $scope.remito.remitoPlazo = notaPedido.notaPedidoPlazo;
229 $scope.remito.remitoPuntoDescarga = notaPedido.notaPedidoPuntoDescarga; 229 $scope.remito.remitoPuntoDescarga = notaPedido.notaPedidoPuntoDescarga;
230 230
231 notaPedido.articulosNotaPedido.forEach(function (articulo) { 231 notaPedido.articulosNotaPedido.forEach(function (articulo) {
232 articulo.id = 0; 232 articulo.id = 0;
233 articulo.idRemito = 0; 233 articulo.idRemito = 0;
234 articulo.precio = 234 articulo.precio =
235 (articulo.precio / notaPedido.cotizacion.VENDEDOR).toFixed(4); 235 (articulo.precio / notaPedido.cotizacion.VENDEDOR).toFixed(4);
236 }); 236 });
237 237
238 $scope.remito.articulosRemito = notaPedido.articulosNotaPedido; 238 $scope.remito.articulosRemito = notaPedido.articulosNotaPedido;
239 239
240 if (notaPedido.idPrecioCondicion > 0) { 240 if (notaPedido.idPrecioCondicion > 0) {
241 $scope.idLista = notaPedido.precioCondicion.idListaPrecio; 241 $scope.idLista = notaPedido.precioCondicion.idListaPrecio;
242 } else { 242 } else {
243 $scope.idLista = -1; 243 $scope.idLista = -1;
244 } 244 }
245 245
246 enableObservaciones(notaPedido.observaciones ? true : false); 246 enableObservaciones(notaPedido.observaciones ? true : false);
247 addArrayCabecera($scope.cabeceras); 247 addArrayCabecera($scope.cabeceras);
248 248
249 }, function () { 249 }, function () {
250 // funcion ejecutada cuando se cancela el modal 250 // funcion ejecutada cuando se cancela el modal
251 } 251 }
252 ); 252 );
253 }; 253 };
254 254
255 $scope.seleccionarRemito = function () { 255 $scope.seleccionarRemito = function () {
256 if ($scope.remitoIsDirty) { 256 if ($scope.remitoIsDirty) {
257 focaModalService.confirm('¿Desea continuar? Se perderan los cambios') 257 focaModalService.confirm('¿Desea continuar? Se perderan los cambios')
258 .then(function () { 258 .then(function () {
259 $scope.getRemitoModal(); 259 $scope.getRemitoModal();
260 }); 260 });
261 } else { 261 } else {
262 $scope.getRemitoModal(); 262 $scope.getRemitoModal();
263 } 263 }
264 }; 264 };
265 $scope.getRemitoModal = function () { 265 $scope.getRemitoModal = function () {
266 var modalInstance = $uibModal.open( 266 var modalInstance = $uibModal.open(
267 { 267 {
268 ariaLabelledBy: 'Busqueda de Remito', 268 ariaLabelledBy: 'Busqueda de Remito',
269 templateUrl: 'foca-modal-remito.html', 269 templateUrl: 'foca-modal-remito.html',
270 controller: 'focaModalRemitoController', 270 controller: 'focaModalRemitoController',
271 size: 'lg', 271 size: 'lg',
272 resolve: { usadoPor: function () { return 'remito'; } } 272 resolve: { usadoPor: function () { return 'remito'; } }
273 } 273 }
274 ); 274 );
275 modalInstance.result.then(function (remito) { 275 modalInstance.result.then(function (remito) {
276 276
277 remito.articulosRemito.forEach(function (articulo) { 277 remito.articulosRemito.forEach(function (articulo) {
278 articulo.precio = 278 articulo.precio =
279 (articulo.precio / remito.cotizacion.VENDEDOR).toFixed(4); 279 (articulo.precio / remito.cotizacion.VENDEDOR).toFixed(4);
280 }); 280 });
281 281
282 setearRemito(remito); 282 setearRemito(remito);
283 283
284 }, function () { 284 }, function () {
285 // funcion ejecutada cuando se cancela el modal 285 // funcion ejecutada cuando se cancela el modal
286 } 286 }
287 ); 287 );
288 }; 288 };
289 //validacion por domicilio y por plazo pago 289 //validacion por domicilio y por plazo pago
290 $scope.crearRemito = function () { 290 $scope.crearRemito = function () {
291 291
292 if (!remitoBusinessService.validarRemito($scope.remito, $scope.articulosFiltro())) { 292 if (!remitoBusinessService.validarRemito($scope.remito, $scope.articulosFiltro())) {
293 return; 293 return;
294 } 294 }
295 295
296 focaBotoneraLateralService.startGuardar(); 296 focaBotoneraLateralService.startGuardar();
297 $scope.saveLoading = true; 297 $scope.saveLoading = true;
298 if ($localStorage.rutas) { 298 if ($localStorage.rutas) {
299 var rutaJson = JSON.parse($localStorage.rutas); 299 var rutaJson = JSON.parse($localStorage.rutas);
300 removeItemFromArr(rutaJson, 'venta-remito/crear'); 300 removeItemFromArr(rutaJson, 'venta-remito/crear');
301 $localStorage.rutas = JSON.stringify(rutaJson); 301 $localStorage.rutas = JSON.stringify(rutaJson);
302 } 302 }
303 303
304 var save = { 304 var save = {
305 remito: { 305 remito: {
306 id: $scope.remito.id, 306 id: $scope.remito.id,
307 fechaRemito: $scope.now.toISOString().slice(0, 19).replace('T', ' '), 307 fechaRemito: $scope.now.toISOString().slice(0, 19).replace('T', ' '),
308 idCliente: $scope.remito.cliente.COD, 308 idCliente: $scope.remito.cliente.COD,
309 nombreCliente: $scope.remito.cliente.NOM, 309 nombreCliente: $scope.remito.cliente.NOM,
310 cuitCliente: $scope.remito.cliente.CUIT, 310 cuitCliente: $scope.remito.cliente.CUIT,
311 total: $scope.getTotal() * $scope.remito.cotizacion.VENDEDOR, 311 total: $scope.getTotal() * $scope.remito.cotizacion.VENDEDOR,
312 numeroNotaPedido: $scope.remito.numeroNotaPedido, 312 numeroNotaPedido: $scope.remito.numeroNotaPedido,
313 idVendedor: parseInt($scope.remito.cliente.VEN), 313 idVendedor: parseInt($scope.remito.cliente.VEN),
314 idProveedor: $scope.remito.proveedor.COD, 314 idProveedor: $scope.remito.proveedor.COD,
315 idDomicilio: $scope.remito.idDomicilio || $scope.remito.domicilio.id, 315 idDomicilio: $scope.remito.idDomicilio || $scope.remito.domicilio.id,
316 idCotizacion: $scope.remito.cotizacion.ID, 316 idCotizacion: $scope.remito.cotizacion.ID,
317 idListaPrecio: $scope.idLista, 317 idListaPrecio: $scope.idLista,
318 flete: $scope.remito.flete, 318 flete: $scope.remito.flete,
319 fob: $scope.remito.fob, 319 fob: $scope.remito.fob,
320 bomba: $scope.remito.bomba, 320 bomba: $scope.remito.bomba,
321 kilometros: $scope.remito.kilometros, 321 kilometros: $scope.remito.kilometros,
322 domicilioStamp: $scope.remito.domicilioStamp, 322 domicilioStamp: $scope.remito.domicilioStamp,
323 observaciones: $scope.remito.observaciones, 323 observaciones: $scope.remito.observaciones,
324 numeroRemito: parseInt($scope.comprobante), 324 numeroRemito: parseInt($scope.comprobante),
325 sucursal: parseInt($scope.puntoVenta), 325 sucursal: parseInt($scope.puntoVenta),
326 responsabilidadIvaCliente: $scope.remito.cliente.IVA, 326 responsabilidadIvaCliente: $scope.remito.cliente.IVA,
327 descuento: 0,//TODO, 327 descuento: 0,//TODO,
328 importeNeto: getImporte('netoUnitario'), 328 importeNeto: getImporte('netoUnitario'),
329 importeExento: getImporte('exentoUnitario'), 329 importeExento: getImporte('exentoUnitario'),
330 importeIva: getImporte('ivaUnitario'), 330 importeIva: getImporte('ivaUnitario'),
331 importeIvaServicios: 0,//TODO 331 importeIvaServicios: 0,//TODO
332 importeImpuestoInterno: getImporte('impuestoInternoUnitario'), 332 importeImpuestoInterno: getImporte('impuestoInternoUnitario'),
333 importeImpuestoInterno1: getImporte('impuestoInterno1Unitario'), 333 importeImpuestoInterno1: getImporte('impuestoInterno1Unitario'),
334 importeImpuestoInterno2: getImporte('impuestoInterno2Unitario'), 334 importeImpuestoInterno2: getImporte('impuestoInterno2Unitario'),
335 percepcion: 0,//TODO 335 percepcion: 0,//TODO
336 percepcionIva: 0,//TODO 336 percepcionIva: 0,//TODO
337 redondeo: 0,//TODO 337 redondeo: 0,//TODO
338 anulado: false, 338 anulado: false,
339 planilla: $filter('date')($scope.now, 'ddMMyyyy'), 339 planilla: $filter('date')($scope.now, 'ddMMyyyy'),
340 lugar: parseInt($scope.puntoVenta), 340 lugar: parseInt($scope.puntoVenta),
341 cuentaMadre: 0,//TODO 341 cuentaMadre: 0,//TODO
342 cuentaContable: 0,//TODO 342 cuentaContable: 0,//TODO
343 asiento: 0,//TODO 343 asiento: 0,//TODO
344 e_hd: '',//TODO 344 e_hd: '',//TODO
345 c_hd: '', 345 c_hd: '',
346 numeroLiquidoProducto: 0,//TODO 346 numeroLiquidoProducto: 0,//TODO
347 estado: $scope.remito.estado, 347 estado: $scope.remito.estado,
348 destinoVenta: 0,//TODO 348 destinoVenta: 0,//TODO
349 operacionTipo: 0, //TODO 349 operacionTipo: 0, //TODO
350 }, 350 },
351 notaPedido: $scope.notaPedido, 351 notaPedido: $scope.notaPedido,
352 articulos: remitoBusinessService.quitarCotizacion($scope.articulosFiltro(), 352 articulos: remitoBusinessService.quitarCotizacion($scope.articulosFiltro(),
353 $scope.remito.cotizacion.VENDEDOR), 353 $scope.remito.cotizacion.VENDEDOR),
354 puntosDescarga: remitoBusinessService.addPuntosDescarga( 354 puntosDescarga: remitoBusinessService.addPuntosDescarga(
355 $scope.remito.remitoPuntoDescarga), 355 $scope.remito.remitoPuntoDescarga),
356 plazos: $scope.remito.remitoPlazo 356 plazos: $scope.remito.remitoPlazo
357 }; 357 };
358 crearRemitoService.crearRemito(save).then( 358 crearRemitoService.crearRemito(save).then(
359 function (data) { 359 function (data) {
360 360
361 focaBotoneraLateralService.endGuardar(true); 361 focaBotoneraLateralService.endGuardar(true);
362 $scope.saveLoading = false; 362 $scope.saveLoading = false;
363 363
364 if (data.status === 500) { 364 if (data.status === 500) {
365 focaModalService.alert(data.data); 365 focaModalService.alert(data.data);
366 return; 366 return;
367 } 367 }
368 368
369 abrirModalMail(data.data.id, 369 abrirModalMail(data.data.id,
370 $scope.remito.cliente, 370 $scope.remito.cliente,
371 $filter('comprobante')([ 371 $filter('comprobante')([
372 $scope.puntoVenta, 372 $scope.puntoVenta,
373 data.data.numero 373 data.data.numero
374 ]) 374 ])
375 ); 375 );
376 376
377 config(); 377 config();
378 378
379 }, function (error) { 379 }, function (error) {
380 focaModalService.alert(error.data || 'Hubo un error al crear el remito'); 380 focaModalService.alert(error.data || 'Hubo un error al crear el remito');
381 focaBotoneraLateralService.endGuardar(); 381 focaBotoneraLateralService.endGuardar();
382 $scope.saveLoading = false; 382 $scope.saveLoading = false;
383 console.info(error); 383 console.info(error);
384 } 384 }
385 ); 385 );
386 }; 386 };
387 387
388 $scope.seleccionarProductos = function () { 388 $scope.seleccionarProductos = function () {
389 if (!varlidarRemitoFacturado()) return; 389 if (!varlidarRemitoFacturado()) return;
390 if (!varlidarRemitoAbierto()) return; 390 if (!varlidarRemitoAbierto()) return;
391 if ($scope.notaPedido.id !== 0) { 391 if ($scope.notaPedido.id !== 0) {
392 $scope.idLista = parseInt($scope.notaPedido.idListaPrecio); 392 $scope.idLista = parseInt($scope.notaPedido.idListaPrecio);
393 } 393 }
394 if ($scope.idLista === undefined) { 394 if ($scope.idLista === undefined) {
395 focaModalService.alert( 395 focaModalService.alert(
396 'Primero seleccione una lista de precio y condicion'); 396 'Primero seleccione una lista de precio y condicion');
397 return; 397 return;
398 } 398 }
399 var modalInstance = $uibModal.open( 399 var modalInstance = $uibModal.open(
400 { 400 {
401 ariaLabelledBy: 'Busqueda de Productos', 401 ariaLabelledBy: 'Busqueda de Productos',
402 templateUrl: 'modal-busqueda-productos.html', 402 templateUrl: 'modal-busqueda-productos.html',
403 controller: 'modalBusquedaProductosCtrl', 403 controller: 'modalBusquedaProductosCtrl',
404 resolve: { 404 resolve: {
405 parametroProducto: { 405 parametroProducto: {
406 idLista: $scope.idLista, 406 idLista: $scope.idLista,
407 cotizacion: $scope.remito.cotizacion.VENDEDOR, 407 cotizacion: $scope.remito.cotizacion.VENDEDOR,
408 simbolo: $scope.remito.cotizacion.moneda.SIMBOLO 408 simbolo: $scope.remito.cotizacion.moneda.SIMBOLO
409 } 409 }
410 }, 410 },
411 size: 'lg' 411 size: 'lg'
412 } 412 }
413 ); 413 );
414 modalInstance.result.then( 414 modalInstance.result.then(
415 function (producto) { 415 function (producto) {
416 var newArt = 416 var newArt =
417 { 417 {
418 id: 0, 418 id: 0,
419 idRemito: 0, 419 idRemito: 0,
420 codigo: producto.codigo, 420 codigo: producto.codigo,
421 sector: producto.sector, 421 sector: producto.sector,
422 sectorCodigo: producto.sector + '-' + producto.codigo, 422 sectorCodigo: producto.sector + '-' + producto.codigo,
423 descripcion: producto.descripcionLarga, 423 descripcion: producto.descripcionLarga,
424 item: $scope.remito.articulosRemito.length + 1, 424 item: $scope.remito.articulosRemito.length + 1,
425 nombre: producto.descripcion, 425 nombre: producto.descripcion,
426 precio: parseFloat(producto.precio.toFixed(4)), 426 precio: parseFloat(producto.precio.toFixed(4)),
427 costoUnitario: producto.costo, 427 costoUnitario: producto.costo,
428 editCantidad: false, 428 editCantidad: false,
429 editPrecio: false, 429 editPrecio: false,
430 rubro: producto.CodRub, 430 rubro: producto.CodRub,
431 ivaUnitario: producto.IMPIVA, 431 ivaUnitario: producto.IMPIVA,
432 impuestoInternoUnitario: producto.ImpInt, 432 impuestoInternoUnitario: producto.ImpInt,
433 impuestoInterno1Unitario: producto.ImpInt2, 433 impuestoInterno1Unitario: producto.ImpInt2,
434 impuestoInterno2Unitario: producto.ImpInt3, 434 impuestoInterno2Unitario: producto.ImpInt3,
435 precioLista: producto.precio, 435 precioLista: producto.precio,
436 combustible: 1, 436 combustible: 1,
437 facturado: 0, 437 facturado: 0,
438 idArticulo: producto.id, 438 idArticulo: producto.id,
439 tasaIva: producto.tasaIVA 439 tasaIva: producto.tasaIVA
440 }; 440 };
441 441
442 newArt.exentoUnitario = newArt.ivaUnitario ? 0 : producto.neto; 442 newArt.exentoUnitario = newArt.ivaUnitario ? 0 : producto.neto;
443 newArt.netoUnitario = newArt.ivaUnitario ? producto.neto : 0; 443 newArt.netoUnitario = newArt.ivaUnitario ? producto.neto : 0;
444 444
445 $scope.articuloACargar = newArt; 445 $scope.articuloACargar = newArt;
446 $scope.cargando = false; 446 $scope.cargando = false;
447 }, function () { 447 }, function () {
448 // funcion ejecutada cuando se cancela el modal 448 // funcion ejecutada cuando se cancela el modal
449 } 449 }
450 ); 450 );
451 }; 451 };
452 452
453 $scope.seleccionarPuntosDeDescarga = function () { 453 $scope.seleccionarPuntosDeDescarga = function () {
454 if (!$scope.remito.cliente.COD || !$scope.remito.domicilio.id) { 454 if (!$scope.remito.cliente.COD || !$scope.remito.domicilio.id) {
455 focaModalService.alert('Primero seleccione un cliente y un domicilio'); 455 focaModalService.alert('Primero seleccione un cliente y un domicilio');
456 return; 456 return;
457 } else { 457 } else {
458 var modalInstance = $uibModal.open( 458 var modalInstance = $uibModal.open(
459 { 459 {
460 ariaLabelledBy: 'Búsqueda de Puntos de descarga', 460 ariaLabelledBy: 'Búsqueda de Puntos de descarga',
461 templateUrl: 'modal-punto-descarga.html', 461 templateUrl: 'modal-punto-descarga.html',
462 controller: 'focaModalPuntoDescargaController', 462 controller: 'focaModalPuntoDescargaController',
463 size: 'lg', 463 size: 'lg',
464 resolve: { 464 resolve: {
465 filters: { 465 filters: {
466 idDomicilio: $scope.remito.domicilio.id, 466 idDomicilio: $scope.remito.domicilio.id,
467 idCliente: $scope.remito.cliente.COD, 467 idCliente: $scope.remito.cliente.COD,
468 articulos: $scope.remito.articulosRemito, 468 articulos: $scope.remito.articulosRemito,
469 puntosDescarga: $scope.remito.remitoPuntoDescarga, 469 puntosDescarga: $scope.remito.remitoPuntoDescarga,
470 domicilio: $scope.remito.domicilio 470 domicilio: $scope.remito.domicilio
471 } 471 }
472 } 472 }
473 } 473 }
474 ); 474 );
475 modalInstance.result.then( 475 modalInstance.result.then(
476 function (puntosDescarga) { 476 function (puntosDescarga) {
477 477
478 puntosDescarga.forEach(function (punto) { 478 puntosDescarga.forEach(function (punto) {
479 $scope.remito.remitoPuntoDescarga.push( 479 $scope.remito.remitoPuntoDescarga.push(
480 { 480 {
481 puntoDescarga: punto 481 puntoDescarga: punto
482 } 482 }
483 ); 483 );
484 }); 484 });
485 485
486 $scope.$broadcast('addCabecera', { 486 $scope.$broadcast('addCabecera', {
487 label: 'Puntos de descarga:', 487 label: 'Puntos de descarga:',
488 valor: getCabeceraPuntoDescarga(puntosDescarga) 488 valor: getCabeceraPuntoDescarga(puntosDescarga)
489 }); 489 });
490 }, function () { 490 }, function () {
491 $scope.abrirModalDomicilios($scope.cliente); 491 $scope.abrirModalDomicilios($scope.cliente);
492 } 492 }
493 ); 493 );
494 } 494 }
495 }; 495 };
496 496
497 $scope.seleccionarCliente = function () { 497 $scope.seleccionarCliente = function () {
498 if (!varlidarRemitoFacturado()) return; 498 if (!varlidarRemitoFacturado()) return;
499 if (!varlidarRemitoAbierto()) return; 499 if (!varlidarRemitoAbierto()) return;
500 var modalInstance = $uibModal.open( 500 var modalInstance = $uibModal.open(
501 { 501 {
502 ariaLabelledBy: 'Busqueda de Cliente', 502 ariaLabelledBy: 'Busqueda de Cliente',
503 templateUrl: 'foca-busqueda-cliente-modal.html', 503 templateUrl: 'foca-busqueda-cliente-modal.html',
504 controller: 'focaBusquedaClienteModalController', 504 controller: 'focaBusquedaClienteModalController',
505 resolve: { 505 resolve: {
506 parametros: function () { 506 parametros: function () {
507 return { 507 return {
508 // vendedor: $scope.idVendedor, 508 // vendedor: $scope.idVendedor,
509 cobrador: null, 509 cobrador: null,
510 searchText: $scope.cliente ? $scope.cliente.nom : '' 510 searchText: $scope.cliente ? $scope.cliente.nom : ''
511 }; 511 };
512 }, 512 },
513 }, 513 },
514 backdrop: false, 514 backdrop: false,
515 size: 'lg' 515 size: 'lg'
516 } 516 }
517 ); 517 );
518 modalInstance.result.then( 518 modalInstance.result.then(
519 function (cliente) { 519 function (cliente) {
520 520
521 if ($scope.remito.precioCondicion !== undefined) { 521 if ($scope.remito.precioCondicion !== undefined) {
522 focaModalService 522 focaModalService
523 .alert('Debe agregar lista de precio de cliente actual') 523 .alert('Debe agregar lista de precio de cliente actual')
524 .then(function () { 524 .then(function () {
525 $scope.remito.precioCondicion = undefined; 525 $scope.remito.precioCondicion = undefined;
526 $scope.$broadcast('removeCabecera', 'Precios y Condiciones:'); 526 $scope.$broadcast('removeCabecera', 'Precios y Condiciones:');
527 $filter('filter')($scope.botonera, 527 $filter('filter')($scope.botonera,
528 { label: 'Precios y Condiciones' })[0].checked = false; 528 { label: 'Precios y Condiciones' })[0].checked = false;
529 }) 529 })
530 .catch(function () { 530 .catch(function () {
531 }) 531 })
532 } 532 }
533 533
534 // if (angular.equals({}, cliente.vendedor)) { 534 // if (angular.equals({}, cliente.vendedor)) {
535 535
536 // focaModalService 536 // focaModalService
537 // .alert('El cliente seleccionado no tiene tiene ' + 537 // .alert('El cliente seleccionado no tiene tiene ' +
538 // 'vendedor asignado.') 538 // 'vendedor asignado.')
539 // .then($scope.seleccionarCliente); 539 // .then($scope.seleccionarCliente);
540 540
541 // return; 541 // return;
542 // } 542 // }
543 543
544 $scope.cliente = cliente; 544 $scope.cliente = cliente;
545 $scope.abrirModalDomicilios(cliente); 545 $scope.abrirModalDomicilios(cliente);
546 }, function () { 546 }, function () {
547 } 547 }
548 ); 548 );
549 }; 549 };
550 550
551 $scope.seleccionarEliminarRemito = function () { 551 $scope.seleccionarEliminarRemito = function () {
552 focaModalService.confirm('¿Desea eliminar este remito?').then(function (data) { 552 focaModalService.confirm('¿Desea eliminar este remito?').then(function (data) {
553 if (data) { 553 if (data) {
554 $scope.remito.anulado = true; 554 $scope.remito.anulado = true;
555 delete $scope.remito.remitoPlazo; 555 delete $scope.remito.remitoPlazo;
556 // delete $scope.remito.vendedor; 556 // delete $scope.remito.vendedor;
557 delete $scope.remito.proveedor; 557 delete $scope.remito.proveedor;
558 delete $scope.remito.cliente; 558 delete $scope.remito.cliente;
559 delete $scope.remito.cotizacion; 559 delete $scope.remito.cotizacion;
560 delete $scope.remito.remitoPuntoDescarga; 560 delete $scope.remito.remitoPuntoDescarga;
561 delete $scope.remito.articulosRemito; 561 delete $scope.remito.articulosRemito;
562 delete $scope.remito.fechaRemito; 562 delete $scope.remito.fechaRemito;
563 crearRemitoService.eliminarRemito($scope.remito); 563 crearRemitoService.eliminarRemito($scope.remito);
564 } 564 }
565 config(); 565 config();
566 }); 566 });
567 }; 567 };
568 568
569 $scope.seleccionarProveedor = function () { 569 $scope.seleccionarProveedor = function () {
570 if (!varlidarRemitoFacturado()) return; 570 if (!varlidarRemitoFacturado()) return;
571 if (!varlidarRemitoAbierto()) return; 571 if (!varlidarRemitoAbierto()) return;
572 var parametrosModal = { 572 var parametrosModal = {
573 titulo: 'Búsqueda de Proveedor', 573 titulo: 'Búsqueda de Proveedor',
574 query: '/proveedor', 574 query: '/proveedor',
575 columnas: [ 575 columnas: [
576 { 576 {
577 nombre: 'Código', 577 nombre: 'Código',
578 propiedad: 'COD', 578 propiedad: 'COD',
579 filtro: { 579 filtro: {
580 nombre: 'rellenarDigitos', 580 nombre: 'rellenarDigitos',
581 parametro: 5 581 parametro: 5
582 } 582 }
583 }, 583 },
584 { 584 {
585 nombre: 'Nombre', 585 nombre: 'Nombre',
586 propiedad: 'NOM' 586 propiedad: 'NOM'
587 }, 587 },
588 { 588 {
589 nombre: 'CUIT', 589 nombre: 'CUIT',
590 propiedad: 'CUIT' 590 propiedad: 'CUIT'
591 } 591 }
592 ], 592 ],
593 tipo: 'POST', 593 tipo: 'POST',
594 json: { razonCuitCod: '' } 594 json: { razonCuitCod: '' }
595 }; 595 };
596 focaModalService.modal(parametrosModal).then( 596 focaModalService.modal(parametrosModal).then(
597 function (proveedor) { 597 function (proveedor) {
598 $scope.seleccionarFlete(proveedor); 598 $scope.seleccionarFlete(proveedor);
599 }, function () { } 599 }, function () { }
600 ); 600 );
601 }; 601 };
602 602
603 $scope.seleccionarDomicilioDeEntrega = function () { 603 $scope.seleccionarDomicilioDeEntrega = function () {
604 if (!varlidarRemitoFacturado()) return; 604 if (!varlidarRemitoFacturado()) return;
605 if (!varlidarRemitoAbierto()) return; 605 if (!varlidarRemitoAbierto()) return;
606 if (!$scope.remito.cliente.COD && !$scope.cliente) { 606 if (!$scope.remito.cliente.COD && !$scope.cliente) {
607 focaModalService.alert('Seleccione un Cliente'); 607 focaModalService.alert('Seleccione un Cliente');
608 return; 608 return;
609 } else { 609 } else {
610 $scope.abrirModalDomicilios($scope.remito.cliente.COD ? 610 $scope.abrirModalDomicilios($scope.remito.cliente.COD ?
611 $scope.remito.cliente.COD : $scope.cliente); 611 $scope.remito.cliente.COD : $scope.cliente);
612 } 612 }
613 }; 613 };
614 614
615 $scope.abrirModalDomicilios = function (cliente) { 615 $scope.abrirModalDomicilios = function (cliente) {
616 var modalInstanceDomicilio = $uibModal.open( 616 var modalInstanceDomicilio = $uibModal.open(
617 { 617 {
618 ariaLabelledBy: 'Busqueda de Domicilios', 618 ariaLabelledBy: 'Busqueda de Domicilios',
619 templateUrl: 'modal-domicilio.html', 619 templateUrl: 'modal-domicilio.html',
620 controller: 'focaModalDomicilioController', 620 controller: 'focaModalDomicilioController',
621 backdrop: false, 621 backdrop: false,
622 size: 'lg', 622 size: 'lg',
623 resolve: { 623 resolve: {
624 idCliente: function () { 624 idCliente: function () {
625 return $scope.remito.cliente.COD ? $scope.remito.cliente.COD : 625 return $scope.remito.cliente.COD ? $scope.remito.cliente.COD :
626 cliente.COD; 626 cliente.COD;
627 }, 627 },
628 esNuevo: function () { 628 esNuevo: function () {
629 return ($scope.remito.cliente.COD ? false : cliente.esNuevo); 629 return ($scope.remito.cliente.COD ? false : cliente.esNuevo);
630 } 630 }
631 } 631 }
632 } 632 }
633 ); 633 );
634 modalInstanceDomicilio.result 634 modalInstanceDomicilio.result
635 .then(function (domicilio) { 635 .then(function (domicilio) {
636 $scope.remito.domicilio = domicilio; 636 $scope.remito.domicilio = domicilio;
637 $scope.remito.cliente = cliente; 637 $scope.remito.cliente = cliente;
638 // $scope.remito.vendedor = cliente.vendedor; 638 // $scope.remito.vendedor = cliente.vendedor;
639 639
640 var domicilioStamp = 640 var domicilioStamp =
641 domicilio.Calle + ' ' + domicilio.Numero + ', ' + 641 domicilio.Calle + ' ' + domicilio.Numero + ', ' +
642 domicilio.Localidad + ', ' + domicilio.Provincia; 642 domicilio.Localidad + ', ' + domicilio.Provincia;
643 643
644 $scope.remito.domicilioStamp = domicilioStamp; 644 $scope.remito.domicilioStamp = domicilioStamp;
645 645
646 // $scope.$broadcast('addCabecera', { 646 // $scope.$broadcast('addCabecera', {
647 // label: 'Vendedor:', 647 // label: 'Vendedor:',
648 // valor: $filter('rellenarDigitos')($scope.remito.vendedor 648 // valor: $filter('rellenarDigitos')($scope.remito.vendedor
649 // .NUM, 3) + ' - ' + $scope.remito.vendedor.NOM 649 // .NUM, 3) + ' - ' + $scope.remito.vendedor.NOM
650 // }); 650 // });
651 $scope.$broadcast('addCabecera', { 651 $scope.$broadcast('addCabecera', {
652 label: 'Cliente:', 652 label: 'Cliente:',
653 valor: $filter('rellenarDigitos') 653 valor: $filter('rellenarDigitos')
654 ($scope.remito.cliente.COD, 3) + 654 ($scope.remito.cliente.COD, 3) +
655 ' - ' + $scope.remito.cliente.NOM 655 ' - ' + $scope.remito.cliente.NOM
656 }); 656 });
657 $scope.$broadcast('addCabecera', { 657 $scope.$broadcast('addCabecera', {
658 label: 'Domicilio:', 658 label: 'Domicilio:',
659 valor: domicilioStamp 659 valor: domicilioStamp
660 }); 660 });
661 661
662 if (domicilio.verPuntos) { 662 if (domicilio.verPuntos) {
663 delete $scope.remito.domicilio.verPuntos; 663 delete $scope.remito.domicilio.verPuntos;
664 $scope.seleccionarPuntosDeDescarga(); 664 $scope.seleccionarPuntosDeDescarga();
665 } 665 }
666 666
667 $filter('filter')($scope.botonera, 667 $filter('filter')($scope.botonera,
668 { label: 'Cliente' })[0].checked = true; 668 { label: 'Cliente' })[0].checked = true;
669 $filter('filter')($scope.botonera, 669 $filter('filter')($scope.botonera,
670 { label: 'Domicilio de Entrega' })[0].checked = true; 670 { label: 'Domicilio de Entrega' })[0].checked = true;
671 671
672 }) 672 })
673 .catch(function (e) { 673 .catch(function (e) {
674 if (!cliente) { 674 if (!cliente) {
675 $scope.seleccionarCliente(true); 675 $scope.seleccionarCliente(true);
676 return; 676 return;
677 } 677 }
678 $scope.remito.cliente = cliente; 678 $scope.remito.cliente = cliente;
679 $scope.$broadcast('addCabecera', { 679 $scope.$broadcast('addCabecera', {
680 label: 'Cliente:', 680 label: 'Cliente:',
681 valor: $filter('rellenarDigitos')(cliente.COD, 5) + 681 valor: $filter('rellenarDigitos')(cliente.COD, 5) +
682 ' - ' + cliente.NOM 682 ' - ' + cliente.NOM
683 }); 683 });
684 $filter('filter')($scope.botonera, 684 $filter('filter')($scope.botonera,
685 { label: 'Cliente' })[0].checked = true; 685 { label: 'Cliente' })[0].checked = true;
686 }); 686 });
687 }; 687 };
688 688
689 $scope.getTotal = function () { 689 $scope.getTotal = function () {
690 var total = 0; 690 var total = 0;
691 var arrayTempArticulos = $scope.articulosFiltro(); 691 var arrayTempArticulos = $scope.articulosFiltro();
692 for (var i = 0; i < arrayTempArticulos.length; i++) { 692 for (var i = 0; i < arrayTempArticulos.length; i++) {
693 total += arrayTempArticulos[i].precio * arrayTempArticulos[i].cantidad; 693 total += arrayTempArticulos[i].precio * arrayTempArticulos[i].cantidad;
694 } 694 }
695 $scope.comprobarTotal(parseFloat(total.toFixed(2))); 695 $scope.comprobarTotal(parseFloat(total.toFixed(2)));
696 return parseFloat(total.toFixed(2)); 696 return parseFloat(total.toFixed(2));
697 }; 697 };
698 698
699 $scope.getSubTotal = function () { 699 $scope.getSubTotal = function () {
700 if ($scope.articuloACargar) { 700 if ($scope.articuloACargar) {
701 return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad; 701 return $scope.articuloACargar.precio * $scope.articuloACargar.cantidad;
702 } 702 }
703 }; 703 };
704 704
705 $scope.seleccionarPreciosYCondiciones = function () { 705 $scope.seleccionarPreciosYCondiciones = function () {
706 if (!$scope.remito.cliente.COD) { 706 if (!$scope.remito.cliente.COD) {
707 focaModalService.alert('Primero seleccione un cliente'); 707 focaModalService.alert('Primero seleccione un cliente');
708 return; 708 return;
709 } 709 }
710 if ($scope.remito.articulosRemito.length !== 0) { 710 if ($scope.remito.articulosRemito.length !== 0) {
711 if (varlidarRemitoFacturado() && varlidarRemitoAbierto()) { 711 if (varlidarRemitoFacturado() && varlidarRemitoAbierto()) {
712 abrirModal(); 712 abrirModal();
713 } 713 }
714 } else { 714 } else {
715 abrirModal(); 715 abrirModal();
716 } 716 }
717 717
718 function abrirModal() { 718 function abrirModal() {
719 var parametros = { 719 var parametros = {
720 idCliente: $scope.remito.cliente.COD, 720 idCliente: $scope.remito.cliente.COD,
721 idListaPrecio: $scope.remito.cliente.MOD 721 idListaPrecio: $scope.remito.cliente.MOD
722 }; 722 };
723 var modalInstance = $uibModal.open( 723 var modalInstance = $uibModal.open(
724 { 724 {
725 ariaLabelledBy: 'Busqueda de Precio Condición', 725 ariaLabelledBy: 'Busqueda de Precio Condición',
726 templateUrl: 'modal-precio-condicion.html', 726 templateUrl: 'modal-precio-condicion.html',
727 controller: 'focaModalPrecioCondicionController', 727 controller: 'focaModalPrecioCondicionController',
728 size: 'lg', 728 size: 'lg',
729 resolve: { 729 resolve: {
730 parametros: function () { return parametros; } 730 parametros: function () { return parametros; }
731 } 731 }
732 } 732 }
733 ); 733 );
734 modalInstance.result.then( 734 modalInstance.result.then(
735 function (precioCondicion) { 735 function (precioCondicion) {
736 var cabecera = ''; 736 var cabecera = '';
737 var plazosConcat = ''; 737 var plazosConcat = '';
738 if (!Array.isArray(precioCondicion)) { 738 if (!Array.isArray(precioCondicion)) {
739 $scope.remito.idPrecioCondicion = precioCondicion.listaPrecio.ID; 739 $scope.remito.idPrecioCondicion = precioCondicion.listaPrecio.ID;
740 $scope.remito.remitoPlazo = precioCondicion.plazoPago; 740 $scope.remito.remitoPlazo = precioCondicion.plazoPago;
741 $scope.idLista = parseInt(precioCondicion.listaPrecio.ID) ? 741 $scope.idLista = parseInt(precioCondicion.listaPrecio.ID) ?
742 parseInt(precioCondicion.listaPrecio.ID) : -1; 742 parseInt(precioCondicion.listaPrecio.ID) : -1;
743 $scope.remito.cliente.MOD = precioCondicion.listaPrecio.ID; 743 $scope.remito.cliente.MOD = precioCondicion.listaPrecio.ID;
744 for (var i = 0; i < precioCondicion.plazoPago.length; i++) { 744 for (var i = 0; i < precioCondicion.plazoPago.length; i++) {
745 plazosConcat += precioCondicion.plazoPago[i].dias + ', '; 745 plazosConcat += precioCondicion.plazoPago[i].dias + ', ';
746 } 746 }
747 plazosConcat = plazosConcat.substring(0, plazosConcat.length - 2); 747 plazosConcat = plazosConcat.substring(0, plazosConcat.length - 2);
748 cabecera = $filter('rellenarDigitos') 748 cabecera = $filter('rellenarDigitos')
749 (parseInt(precioCondicion.listaPrecio.ID), 4) + 749 (parseInt(precioCondicion.listaPrecio.ID), 4) +
750 ' - ' + precioCondicion.listaPrecio.DES + ' ' + 750 ' - ' + precioCondicion.listaPrecio.DES + ' ' +
751 plazosConcat.trim(); 751 plazosConcat.trim();
752 } else { //Cuando se ingresan los plazos manualmente 752 } else { //Cuando se ingresan los plazos manualmente
753 $scope.remito.idPrecioCondicion = 0; 753 $scope.remito.idPrecioCondicion = 0;
754 //-1, el modal productos busca todos los productos 754 //-1, el modal productos busca todos los productos
755 $scope.idLista = -1; 755 $scope.idLista = -1;
756 $scope.remito.remitoPlazo = precioCondicion; 756 $scope.remito.remitoPlazo = precioCondicion;
757 for (var j = 0; j < precioCondicion.length; j++) { 757 for (var j = 0; j < precioCondicion.length; j++) {
758 plazosConcat += precioCondicion[j].dias + ' '; 758 plazosConcat += precioCondicion[j].dias + ' ';
759 } 759 }
760 cabecera = plazosConcat.trim(); 760 cabecera = plazosConcat.trim();
761 } 761 }
762 var cabecerasFilter = !$filter('filter')($scope.cabeceras, 762 var cabecerasFilter = !$filter('filter')($scope.cabeceras,
763 { label: 'Precios y Condiciones' }); 763 { label: 'Precios y Condiciones' });
764 if (!cabecerasFilter) { 764 if (!cabecerasFilter) {
765 $scope.cabeceras.push({ 765 $scope.cabeceras.push({
766 label: 'Precios y Condiciones:', 766 label: 'Precios y Condiciones:',
767 valor: parseInt(precioCondicion.listaPrecio.ID) + ' - ' + 767 valor: parseInt(precioCondicion.listaPrecio.ID) + ' - ' +
768 precioCondicion.listaPrecio.DES + ' ' + 768 precioCondicion.listaPrecio.DES + ' ' +
769 remitoBusinessService 769 remitoBusinessService
770 .plazoToString(precioCondicion.plazoPago) 770 .plazoToString(precioCondicion.plazoPago)
771 }); 771 });
772 772
773 $scope.remito.idListaPrecio = parseInt( 773 $scope.remito.idListaPrecio = parseInt(
774 precioCondicion.listaPrecio.ID); 774 precioCondicion.listaPrecio.ID);
775 } 775 }
776 $filter('filter')($scope.cabeceras, 776 $filter('filter')($scope.cabeceras,
777 { label: 'Precios y Condiciones' })[0].valor = cabecera; 777 { label: 'Precios y Condiciones' })[0].valor = cabecera;
778 778
779 $scope.remito.precioCondicion = precioCondicion; 779 $scope.remito.precioCondicion = precioCondicion;
780 $filter('filter')($scope.botonera, 780 $filter('filter')($scope.botonera,
781 { label: 'Precios y Condiciones' })[0].checked = true; 781 { label: 'Precios y Condiciones' })[0].checked = true;
782 addArrayCabecera($scope.cabeceras); 782 addArrayCabecera($scope.cabeceras);
783 }, function () { 783 }, function () {
784 784
785 } 785 }
786 ); 786 );
787 } 787 }
788 }; 788 };
789 789
790 $scope.seleccionarFlete = function (proveedor) { 790 $scope.seleccionarFlete = function (proveedor) {
791 if (!varlidarRemitoFacturado()) return; 791 if (!varlidarRemitoFacturado()) return;
792 if (!varlidarRemitoAbierto()) return; 792 if (!varlidarRemitoAbierto()) return;
793 var modalInstance = $uibModal.open( 793 var modalInstance = $uibModal.open(
794 { 794 {
795 ariaLabelledBy: 'Busqueda de Flete', 795 ariaLabelledBy: 'Busqueda de Flete',
796 templateUrl: 'modal-flete.html', 796 templateUrl: 'modal-flete.html',
797 controller: 'focaModalFleteController', 797 controller: 'focaModalFleteController',
798 size: 'lg', 798 size: 'lg',
799 resolve: { 799 resolve: {
800 parametrosFlete: 800 parametrosFlete:
801 function () { 801 function () {
802 return { 802 return {
803 flete: $scope.remito.flete ? '1' : 803 flete: $scope.remito.flete ? '1' :
804 ($scope.remito.fob ? 'FOB' : 804 ($scope.remito.fob ? 'FOB' :
805 ($scope.remito.flete === undefined ? 805 ($scope.remito.flete === undefined ?
806 null : '0')), 806 null : '0')),
807 bomba: $scope.remito.bomba ? '1' : 807 bomba: $scope.remito.bomba ? '1' :
808 ($scope.remito.bomba === undefined ? 808 ($scope.remito.bomba === undefined ?
809 null : '0'), 809 null : '0'),
810 kilometros: $scope.remito.kilometros 810 kilometros: $scope.remito.kilometros
811 }; 811 };
812 } 812 }
813 } 813 }
814 } 814 }
815 ); 815 );
816 modalInstance.result.then( 816 modalInstance.result.then(
817 function (datos) { 817 function (datos) {
818 $scope.remitoIsDirty = true; 818 $scope.remitoIsDirty = true;
819 $scope.remito.proveedor = proveedor; 819 $scope.remito.proveedor = proveedor;
820 $scope.remito.idProveedor = proveedor.COD; 820 $scope.remito.idProveedor = proveedor.COD;
821 $scope.$broadcast('addCabecera', { 821 $scope.$broadcast('addCabecera', {
822 label: 'Proveedor:', 822 label: 'Proveedor:',
823 valor: $filter('rellenarDigitos')(proveedor.COD, 5) + ' - ' + 823 valor: $filter('rellenarDigitos')(proveedor.COD, 5) + ' - ' +
824 proveedor.NOM 824 proveedor.NOM
825 }); 825 });
826 826
827 $scope.remito.flete = datos.flete; 827 $scope.remito.flete = datos.flete;
828 $scope.remito.fob = datos.FOB; 828 $scope.remito.fob = datos.FOB;
829 $scope.remito.bomba = datos.bomba; 829 $scope.remito.bomba = datos.bomba;
830 $scope.remito.kilometros = datos.kilometros; 830 $scope.remito.kilometros = datos.kilometros;
831 831
832 $scope.$broadcast('addCabecera', { 832 $scope.$broadcast('addCabecera', {
833 label: 'Flete:', 833 label: 'Flete:',
834 valor: datos.flete ? 'Si' : ($scope.remito.fob ? 'FOB' : 'No') 834 valor: datos.flete ? 'Si' : ($scope.remito.fob ? 'FOB' : 'No')
835 }); 835 });
836 if (datos.flete) { 836 if (datos.flete) {
837 $scope.$broadcast('addCabecera', { 837 $scope.$broadcast('addCabecera', {
838 label: 'Bomba:', 838 label: 'Bomba:',
839 valor: datos.bomba ? 'Si' : 'No' 839 valor: datos.bomba ? 'Si' : 'No'
840 }); 840 });
841 $scope.$broadcast('addCabecera', { 841 $scope.$broadcast('addCabecera', {
842 label: 'Kilometros:', 842 label: 'Kilometros:',
843 valor: datos.kilometros 843 valor: datos.kilometros
844 }); 844 });
845 } else { 845 } else {
846 $scope.$broadcast('removeCabecera', 'Bomba:'); 846 $scope.$broadcast('removeCabecera', 'Bomba:');
847 $scope.$broadcast('removeCabecera', 'Kilometros:'); 847 $scope.$broadcast('removeCabecera', 'Kilometros:');
848 $scope.remito.bomba = false; 848 $scope.remito.bomba = false;
849 $scope.remito.kilometros = null; 849 $scope.remito.kilometros = null;
850 } 850 }
851 851
852 $filter('filter')($scope.botonera, 852 $filter('filter')($scope.botonera,
853 { label: 'Proveedor' })[0].checked = true; 853 { label: 'Proveedor' })[0].checked = true;
854 }, function () { 854 }, function () {
855 $scope.seleccionarTransportista(); 855 $scope.seleccionarTransportista();
856 } 856 }
857 ); 857 );
858 }; 858 };
859 859
860 $scope.seleccionarMoneda = function () { 860 $scope.seleccionarMoneda = function () {
861 if (!varlidarRemitoFacturado()) return; 861 if (!varlidarRemitoFacturado()) return;
862 if (!varlidarRemitoAbierto()) return; 862 if (!varlidarRemitoAbierto()) return;
863 var parametrosModal = { 863 var parametrosModal = {
864 titulo: 'Búsqueda de monedas', 864 titulo: 'Búsqueda de monedas',
865 query: '/moneda', 865 query: '/moneda',
866 columnas: [ 866 columnas: [
867 { 867 {
868 propiedad: 'DETALLE', 868 propiedad: 'DETALLE',
869 nombre: 'Nombre' 869 nombre: 'Nombre'
870 }, 870 },
871 { 871 {
872 propiedad: 'SIMBOLO', 872 propiedad: 'SIMBOLO',
873 nombre: 'Símbolo' 873 nombre: 'Símbolo'
874 } 874 }
875 ], 875 ],
876 size: 'md' 876 size: 'md'
877 }; 877 };
878 focaModalService.modal(parametrosModal).then( 878 focaModalService.modal(parametrosModal).then(
879 function (moneda) { 879 function (moneda) {
880 880
881 if (moneda.ID !== 1) { 881 if (moneda.ID !== 1) {
882 $scope.abrirModalCotizacion(moneda); 882 $scope.abrirModalCotizacion(moneda);
883 return; 883 return;
884 } 884 }
885 885
886 crearRemitoService.getCotizacionByIdMoneda(1) 886 crearRemitoService.getCotizacionByIdMoneda(1)
887 .then(function (res) { 887 .then(function (res) {
888 888
889 cotizacionPArgentino = res.data[0].cotizaciones[0]; 889 cotizacionPArgentino = res.data[0].cotizaciones[0];
890 cotizacionPArgentino.moneda = moneda; 890 cotizacionPArgentino.moneda = moneda;
891 891
892 actualizarCabeceraMoneda(cotizacionPArgentino); 892 actualizarCabeceraMoneda(cotizacionPArgentino);
893 $filter('filter')($scope.botonera, 893 $filter('filter')($scope.botonera,
894 { label: 'Moneda' })[0].checked = true; 894 { label: 'Moneda' })[0].checked = true;
895 $scope.remito.cotizacion = cotizacionPArgentino; 895 $scope.remito.cotizacion = cotizacionPArgentino;
896 }); 896 });
897 }, function () { 897 }, function () {
898 898
899 } 899 }
900 ); 900 );
901 }; 901 };
902 902
903 $scope.seleccionarObservaciones = function () { 903 $scope.seleccionarObservaciones = function () {
904 focaModalService 904 focaModalService
905 .prompt({ 905 .prompt({
906 titulo: 'Observaciones', 906 titulo: 'Observaciones',
907 value: $scope.remito.observaciones, 907 value: $scope.remito.observaciones,
908 textarea: true, 908 textarea: true,
909 readonly: false 909 readonly: false
910 }) 910 })
911 .then(function (observaciones) { 911 .then(function (observaciones) {
912 $scope.remito.observaciones = observaciones; 912 $scope.remito.observaciones = observaciones;
913 }); 913 });
914 }; 914 };
915 915
916 $scope.abrirModalCotizacion = function (moneda) { 916 $scope.abrirModalCotizacion = function (moneda) {
917 var modalInstance = $uibModal.open( 917 var modalInstance = $uibModal.open(
918 { 918 {
919 ariaLabelledBy: 'Busqueda de Cotización', 919 ariaLabelledBy: 'Busqueda de Cotización',
920 templateUrl: 'modal-cotizacion.html', 920 templateUrl: 'modal-cotizacion.html',
921 controller: 'focaModalCotizacionController', 921 controller: 'focaModalCotizacionController',
922 size: 'lg', 922 size: 'lg',
923 resolve: { idMoneda: function () { return moneda.ID; } } 923 resolve: { idMoneda: function () { return moneda.ID; } }
924 } 924 }
925 ); 925 );
926 modalInstance.result.then( 926 modalInstance.result.then(
927 function (cotizacion) { 927 function (cotizacion) {
928 cotizacion.moneda = moneda; 928 cotizacion.moneda = moneda;
929 $scope.remitoIsDirty = true; 929 $scope.remitoIsDirty = true;
930 actualizarCabeceraMoneda(cotizacion); 930 actualizarCabeceraMoneda(cotizacion);
931 $filter('filter')($scope.botonera, 931 $filter('filter')($scope.botonera,
932 { label: 'Moneda' })[0].checked = true; 932 { label: 'Moneda' })[0].checked = true;
933 $scope.remito.cotizacion = cotizacion; 933 $scope.remito.cotizacion = cotizacion;
934 }, function () { 934 }, function () {
935 935
936 } 936 }
937 ); 937 );
938 }; 938 };
939 939
940 function actualizarCabeceraMoneda(cotizacion) { 940 function actualizarCabeceraMoneda(cotizacion) {
941 941
942 $scope.remito.articulosRemito.forEach(function (art) { 942 $scope.remito.articulosRemito.forEach(function (art) {
943 art.precio = (art.precio * $scope.remito.cotizacion.VENDEDOR).toFixed(4); 943 art.precio = (art.precio * $scope.remito.cotizacion.VENDEDOR).toFixed(4);
944 art.precio = (art.precio / cotizacion.VENDEDOR).toFixed(4); 944 art.precio = (art.precio / cotizacion.VENDEDOR).toFixed(4);
945 }); 945 });
946 946
947 if (cotizacion.moneda.DETALLE === 'PESOS ARGENTINOS') { 947 if (cotizacion.moneda.DETALLE === 'PESOS ARGENTINOS') {
948 $scope.$broadcast('removeCabecera', 'Moneda:'); 948 $scope.$broadcast('removeCabecera', 'Moneda:');
949 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:'); 949 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:');
950 $scope.$broadcast('removeCabecera', 'Cotizacion:'); 950 $scope.$broadcast('removeCabecera', 'Cotizacion:');
951 } else { 951 } else {
952 $scope.$broadcast('addCabecera', { 952 $scope.$broadcast('addCabecera', {
953 label: 'Moneda:', 953 label: 'Moneda:',
954 valor: cotizacion.moneda.DETALLE 954 valor: cotizacion.moneda.DETALLE
955 }); 955 });
956 $scope.$broadcast('addCabecera', { 956 $scope.$broadcast('addCabecera', {
957 label: 'Fecha cotizacion:', 957 label: 'Fecha cotizacion:',
958 valor: $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy') 958 valor: $filter('date')(cotizacion.FECHA, 'dd/MM/yyyy')
959 }); 959 });
960 $scope.$broadcast('addCabecera', { 960 $scope.$broadcast('addCabecera', {
961 label: 'Cotizacion:', 961 label: 'Cotizacion:',
962 valor: $filter('number')(cotizacion.VENDEDOR, '2') 962 valor: $filter('number')(cotizacion.VENDEDOR, '2')
963 }); 963 });
964 } 964 }
965 } 965 }
966 966
967 $scope.agregarATabla = function (key) { 967 $scope.agregarATabla = function (key) {
968 if (key === 13) { 968 if (key === 13) {
969 if (!$scope.articuloACargar.cantidad || !$scope.articuloACargar.precio) { 969 if (!$scope.articuloACargar.cantidad || !$scope.articuloACargar.precio) {
970 focaModalService.alert('Debes introducir algún valor'); 970 focaModalService.alert('Debes introducir algún valor');
971 return; 971 return;
972 } else if ($scope.articuloACargar.cantidad === '0' || $scope.articuloACargar.precio === '0') { 972 } else if ($scope.articuloACargar.cantidad === '0' || $scope.articuloACargar.precio === '0') {
973 focaModalService.alert('Esta ingresando un producto con valor 0'); 973 focaModalService.alert('Esta ingresando un producto con valor 0');
974 return; 974 return;
975 } else if ($scope.articuloACargar.cantidad < 0 || $scope.articuloACargar.precio < 0) { 975 } else if ($scope.articuloACargar.cantidad < 0 || $scope.articuloACargar.precio < 0) {
976 focaModalService.alert('Los valores no pueden ser negativos'); 976 focaModalService.alert('Los valores no pueden ser negativos');
977 return; 977 return;
978 } else if (!Number.isInteger(+$scope.articuloACargar.cantidad)) { 978 } else if (!Number.isInteger(+$scope.articuloACargar.cantidad)) {
979 focaModalService.alert('La cantidad debe ser un número entero'); 979 focaModalService.alert('La cantidad debe ser un número entero');
980 return; 980 return;
981 } else if ($scope.articuloACargar.cantidad > 100000) { 981 } else if ($scope.articuloACargar.cantidad > 100000) {
982 focaModalService.alert('La cantidad máxima permitida es 100.000'); 982 focaModalService.alert('La cantidad máxima permitida es 100.000');
983 return 983 return
984 } else { 984 } else {
985 delete $scope.articuloACargar.sectorCodigo; 985 delete $scope.articuloACargar.sectorCodigo;
986 $scope.remito.articulosRemito.push($scope.articuloACargar); 986 $scope.remito.articulosRemito.push($scope.articuloACargar);
987 $scope.cargando = true; 987 $scope.cargando = true;
988 } 988 }
989 } 989 }
990 }; 990 };
991 991
992 $scope.quitarArticulo = function (articulo) { 992 $scope.quitarArticulo = function (articulo) {
993 articulo.idRemito = -1; 993 articulo.idRemito = -1;
994 }; 994 };
995 995
996 $scope.articulosFiltro = function () { 996 $scope.articulosFiltro = function () {
997 997
998 var result = $scope.remito.articulosRemito.filter(function (articulo) { 998 var result = $scope.remito.articulosRemito.filter(function (articulo) {
999 return articulo.idRemito >= 0; 999 return articulo.idRemito >= 0;
1000 }); 1000 });
1001 1001
1002 // Agrego checked en cabecera si hay datos 1002 // Agrego checked en cabecera si hay datos
1003 if (result.length) { 1003 if (result.length) {
1004 $filter('filter')($scope.botonera, { label: 'Productos' })[0].checked = true; 1004 $filter('filter')($scope.botonera, { label: 'Productos' })[0].checked = true;
1005 } else { 1005 } else {
1006 $filter('filter')($scope.botonera, { label: 'Productos' })[0].checked = false; 1006 $filter('filter')($scope.botonera, { label: 'Productos' })[0].checked = false;
1007 } 1007 }
1008 return result; 1008 return result;
1009 }; 1009 };
1010 1010
1011 $scope.editarArticulo = function (key, articulo, tmpCantidad, tmpPrecio) { 1011 $scope.editarArticulo = function (key, articulo, tmpCantidad, tmpPrecio) {
1012 if (key === 13) { 1012 if (key === 13) {
1013 if (!articulo.cantidad || !articulo.precio || !tmpCantidad || !tmpPrecio) { 1013 if (!articulo.cantidad || !articulo.precio || !tmpCantidad || !tmpPrecio) {
1014 focaModalService.alert('Debes introducir algún valor'); 1014 focaModalService.alert('Debes introducir algún valor');
1015 return; 1015 return;
1016 } else if (tmpCantidad === '0' || tmpPrecio === '0') { 1016 } else if (tmpCantidad === '0' || tmpPrecio === '0') {
1017 focaModalService.alert('Esta ingresando un producto con valor 0'); 1017 focaModalService.alert('Esta ingresando un producto con valor 0');
1018 return; 1018 return;
1019 } else if (tmpCantidad < 0 || tmpPrecio < 0) { 1019 } else if (tmpCantidad < 0 || tmpPrecio < 0) {
1020 focaModalService.alert('Los valores no pueden ser negativos'); 1020 focaModalService.alert('Los valores no pueden ser negativos');
1021 return; 1021 return;
1022 } else if (!Number.isInteger(+tmpCantidad)) { 1022 } else if (!Number.isInteger(+tmpCantidad)) {
1023 focaModalService.alert('Debes introducir un número entero'); 1023 focaModalService.alert('Debes introducir un número entero');
1024 return; 1024 return;
1025 } else if (tmpCantidad > 100000) { 1025 } else if (tmpCantidad > 100000) {
1026 focaModalService.alert('La cantidad máxima permitida es 100.000'); 1026 focaModalService.alert('La cantidad máxima permitida es 100.000');
1027 return 1027 return
1028 } else { 1028 } else {
1029 articulo.cantidad = tmpCantidad; 1029 articulo.cantidad = tmpCantidad;
1030 articulo.precio = tmpPrecio; 1030 articulo.precio = tmpPrecio;
1031 $scope.getTotal(); 1031 $scope.getTotal();
1032 articulo.editCantidad = articulo.editPrecio = false; 1032 articulo.editCantidad = articulo.editPrecio = false;
1033 }
1033 } 1034 }
1034 } 1035 };
1035 }; 1036 //Si el monto Total es superior a $10.000.000.000,00 desactivo el botón Guardar
1036 //Si el monto Total es superior a $10.000.000.000,00 desactivo el botón Guardar 1037 $scope.comprobarTotal = function(total) {
1037 $scope.comprobarTotal = function(total) { 1038 if (total >= 10000000000) {
1038 if (total >= 10000000000) { 1039 $scope.auxComprobar = true;
1039 focaModalService.alert('El monto total debe ser menor a $10.000.000.000,00, elimina un artículo o reduce las cantidades'); 1040 $( "#guardar" ).prop( "disabled", true );
1040 $( "#guardar" ).prop( "disabled", true ); 1041 } else {
1041 } else { 1042 $scope.auxComprobar = false;
1042 $( "#guardar" ).prop( "disabled", false ); 1043 $( "#guardar" ).prop( "disabled", false );
1043 } 1044 }
1044 }; 1045 };
1045 1046
1046 $scope.cancelarEditar = function (articulo) { 1047 $scope.cancelarEditar = function (articulo) {
1047 $scope.tmpCantidad = articulo.cantidad; 1048 $scope.tmpCantidad = articulo.cantidad;
1048 $scope.tmpPrecio = articulo.precio; 1049 $scope.tmpPrecio = articulo.precio;
1049 articulo.editCantidad = articulo.editPrecio = false; 1050 articulo.editCantidad = articulo.editPrecio = false;
1050 }; 1051 };
1051 1052
1052 $scope.cambioEdit = function (articulo, propiedad) { 1053 $scope.cambioEdit = function (articulo, propiedad) {
1053 if (propiedad === 'cantidad') { 1054 if (propiedad === 'cantidad') {
1054 articulo.editCantidad = true; 1055 articulo.editCantidad = true;
1055 } else if (propiedad === 'precio') { 1056 } else if (propiedad === 'precio') {
1056 articulo.editPrecio = true; 1057 articulo.editPrecio = true;
1057 } 1058 }
1058 }; 1059 };
1059 1060
1060 $scope.resetFilter = function () { 1061 $scope.resetFilter = function () {
1061 $scope.articuloACargar = {}; 1062 $scope.articuloACargar = {};
1062 $scope.cargando = true; 1063 $scope.cargando = true;
1063 }; 1064 };
1064 //Recibe aviso si el teclado está en uso 1065 //Recibe aviso si el teclado está en uso
1065 $rootScope.$on('usarTeclado', function (event, data) { 1066 $rootScope.$on('usarTeclado', function (event, data) {
1066 if (data) { 1067 if (data) {
1067 $scope.mostrarTeclado = true; 1068 $scope.mostrarTeclado = true;
1068 return; 1069 return;
1069 } 1070 }
1070 $scope.mostrarTeclado = false; 1071 $scope.mostrarTeclado = false;
1071 }); 1072 });
1072 1073
1073 $scope.selectFocus = function ($event) { 1074 $scope.selectFocus = function ($event) {
1074 // Si el teclado esta en uso no selecciona el valor 1075 // Si el teclado esta en uso no selecciona el valor
1075 if ($scope.mostrarTeclado) { 1076 if ($scope.mostrarTeclado) {
1076 return; 1077 return;
1077 } 1078 }
1078 $event.target.select(); 1079 $event.target.select();
1079 }; 1080 };
1080 1081
1081 function addArrayCabecera(array) { 1082 function addArrayCabecera(array) {
1082 for (var i = 0; i < array.length; i++) { 1083 for (var i = 0; i < array.length; i++) {
1083 $scope.$broadcast('addCabecera', { 1084 $scope.$broadcast('addCabecera', {
1084 label: array[i].label, 1085 label: array[i].label,
1085 valor: array[i].valor 1086 valor: array[i].valor
1086 }); 1087 });
1087 } 1088 }
1088 } 1089 }
1089 1090
1090 function rellenar(relleno, longitud) { 1091 function rellenar(relleno, longitud) {
1091 relleno = '' + relleno; 1092 relleno = '' + relleno;
1092 while (relleno.length < longitud) { 1093 while (relleno.length < longitud) {
1093 relleno = '0' + relleno; 1094 relleno = '0' + relleno;
1094 } 1095 }
1095 return relleno; 1096 return relleno;
1096 } 1097 }
1097 1098
1098 function varlidarRemitoFacturado() { 1099 function varlidarRemitoFacturado() {
1099 if ($scope.remito.estado !== 5) { 1100 if ($scope.remito.estado !== 5) {
1100 return true; 1101 return true;
1101 } else { 1102 } else {
1102 focaModalService.alert('No se puede editar un remito facturado'); 1103 focaModalService.alert('No se puede editar un remito facturado');
1103 return false; 1104 return false;
1104 } 1105 }
1105 } 1106 }
1106 1107
1107 function varlidarRemitoAbierto() { 1108 function varlidarRemitoAbierto() {
1108 if (!$scope.remito.hojaRuta) return true; 1109 if (!$scope.remito.hojaRuta) return true;
1109 if ($scope.remito.hojaRuta.abierta !== '1') { 1110 if ($scope.remito.hojaRuta.abierta !== '1') {
1110 return true; 1111 return true;
1111 } else { 1112 } else {
1112 focaModalService.alert('No se puede editar un remito abierto'); 1113 focaModalService.alert('No se puede editar un remito abierto');
1113 return false; 1114 return false;
1114 } 1115 }
1115 } 1116 }
1116 1117
1117 function removeItemFromArr(arr, item) { 1118 function removeItemFromArr(arr, item) {
1118 var i = arr.indexOf(item); 1119 var i = arr.indexOf(item);
1119 1120
1120 if (i !== -1) { 1121 if (i !== -1) {
1121 arr.splice(i, 1); 1122 arr.splice(i, 1);
1122 } 1123 }
1123 } 1124 }
1124 1125
1125 function salir() { 1126 function salir() {
1126 var confirmacion = false; 1127 var confirmacion = false;
1127 1128
1128 if (!angular.equals($scope.remito, $scope.inicial)) { 1129 if (!angular.equals($scope.remito, $scope.inicial)) {
1129 confirmacion = true; 1130 confirmacion = true;
1130 } 1131 }
1131 1132
1132 if (confirmacion) { 1133 if (confirmacion) {
1133 focaModalService.confirm( 1134 focaModalService.confirm(
1134 '¿Está seguro de que desea salir? Se perderán todos los datos cargados.' 1135 '¿Está seguro de que desea salir? Se perderán todos los datos cargados.'
1135 ).then(function (data) { 1136 ).then(function (data) {
1136 if (data) { 1137 if (data) {
1137 $location.path('/'); 1138 $location.path('/');
1138 var rutaJson = JSON.parse($localStorage.rutas); 1139 var rutaJson = JSON.parse($localStorage.rutas);
1139 removeItemFromArr(rutaJson, 'venta-remito/crear'); 1140 removeItemFromArr(rutaJson, 'venta-remito/crear');
1140 $localStorage.rutas = JSON.stringify(rutaJson); 1141 $localStorage.rutas = JSON.stringify(rutaJson);
1141 } 1142 }
1142 }); 1143 });
1143 } else { 1144 } else {
1144 $location.path('/'); 1145 $location.path('/');
1145 } 1146 }
1146 } 1147 }
1147 1148
1148 function enableObservaciones(val) { 1149 function enableObservaciones(val) {
1149 var boton = $scope.botonera.filter(function (botonObs) { 1150 var boton = $scope.botonera.filter(function (botonObs) {
1150 return botonObs.label === 'Observaciones'; 1151 return botonObs.label === 'Observaciones';
1151 }); 1152 });
1152 boton[0].disable = !val; 1153 boton[0].disable = !val;
1153 } 1154 }
1154 1155
1155 function setearRemito(remito) { 1156 function setearRemito(remito) {
1156 //añado cabeceras 1157 //añado cabeceras
1157 var esAbierto = remito.hojaRuta ? 1158 var esAbierto = remito.hojaRuta ?
1158 (remito.hojaRuta.abierta === '1') : false; 1159 (remito.hojaRuta.abierta === '1') : false;
1159 if (remito.estado !== 5 && remito.id && !esAbierto) { 1160 if (remito.estado !== 5 && remito.id && !esAbierto) {
1160 1161
1161 $scope.botonera.forEach(function (boton) { 1162 $scope.botonera.forEach(function (boton) {
1162 1163
1163 if (boton.label === 'Eliminar Remito') { 1164 if (boton.label === 'Eliminar Remito') {
1164 boton.disable = false; 1165 boton.disable = false;
1165 } 1166 }
1166 }); 1167 });
1167 } 1168 }
1168 $scope.$broadcast('removeCabecera', 'Moneda:'); 1169 $scope.$broadcast('removeCabecera', 'Moneda:');
1169 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:'); 1170 $scope.$broadcast('removeCabecera', 'Fecha cotizacion:');
1170 $scope.$broadcast('removeCabecera', 'Cotizacion:'); 1171 $scope.$broadcast('removeCabecera', 'Cotizacion:');
1171 // $scope.$broadcast('removeCabecera', 'Vendedor:'); 1172 // $scope.$broadcast('removeCabecera', 'Vendedor:');
1172 1173
1173 $scope.cabeceras = []; 1174 $scope.cabeceras = [];
1174 1175
1175 if (remito.cotizacion && remito.cotizacion.moneda.CODIGO_AFIP !== 'PES') { 1176 if (remito.cotizacion && remito.cotizacion.moneda.CODIGO_AFIP !== 'PES') {
1176 $scope.cabeceras.push({ 1177 $scope.cabeceras.push({
1177 label: 'Moneda:', 1178 label: 'Moneda:',
1178 valor: remito.cotizacion.moneda.DETALLE 1179 valor: remito.cotizacion.moneda.DETALLE
1179 }); 1180 });
1180 $scope.cabeceras.push({ 1181 $scope.cabeceras.push({
1181 label: 'Fecha cotizacion:', 1182 label: 'Fecha cotizacion:',
1182 valor: $filter('date')(remito.cotizacion.FECHA, 1183 valor: $filter('date')(remito.cotizacion.FECHA,
1183 'dd/MM/yyyy') 1184 'dd/MM/yyyy')
1184 }); 1185 });
1185 $scope.cabeceras.push({ 1186 $scope.cabeceras.push({
1186 label: 'Cotizacion:', 1187 label: 'Cotizacion:',
1187 valor: $filter('number')(remito.cotizacion.VENDEDOR, 1188 valor: $filter('number')(remito.cotizacion.VENDEDOR,
1188 '2') 1189 '2')
1189 }); 1190 });
1190 } 1191 }
1191 1192
1192 if (remito.cotizacion && remito.cotizacion.moneda) { 1193 if (remito.cotizacion && remito.cotizacion.moneda) {
1193 $filter('filter')($scope.botonera, { label: 'Moneda' })[0].checked = true; 1194 $filter('filter')($scope.botonera, { label: 'Moneda' })[0].checked = true;
1194 } 1195 }
1195 1196
1196 if (remito.cliente && remito.cliente.COD) { 1197 if (remito.cliente && remito.cliente.COD) {
1197 $scope.cabeceras.push({ 1198 $scope.cabeceras.push({
1198 label: 'Cliente:', 1199 label: 'Cliente:',
1199 valor: $filter('rellenarDigitos')(remito.cliente.COD, 3) + ' - ' + 1200 valor: $filter('rellenarDigitos')(remito.cliente.COD, 3) + ' - ' +
1200 remito.cliente.NOM 1201 remito.cliente.NOM
1201 }); 1202 });
1202 $scope.cabeceras.push({ 1203 $scope.cabeceras.push({
1203 label: 'Domicilio:', 1204 label: 'Domicilio:',
1204 valor: remito.domicilioStamp 1205 valor: remito.domicilioStamp
1205 }); 1206 });
1206 1207
1207 $filter('filter')($scope.botonera, 1208 $filter('filter')($scope.botonera,
1208 { label: 'Domicilio de Entrega' })[0].checked = true; 1209 { label: 'Domicilio de Entrega' })[0].checked = true;
1209 $filter('filter')($scope.botonera, { label: 'Cliente' })[0].checked = true; 1210 $filter('filter')($scope.botonera, { label: 'Cliente' })[0].checked = true;
1210 } 1211 }
1211 // if (remito.vendedor && remito.vendedor.NUM) { 1212 // if (remito.vendedor && remito.vendedor.NUM) {
1212 // $scope.cabeceras.push({ 1213 // $scope.cabeceras.push({
1213 // label: 'Vendedor:', 1214 // label: 'Vendedor:',
1214 // valor: $filter('rellenarDigitos')(remito.vendedor.NUM, 3) + 1215 // valor: $filter('rellenarDigitos')(remito.vendedor.NUM, 3) +
1215 // ' - ' + remito.vendedor.NOM 1216 // ' - ' + remito.vendedor.NOM
1216 // }); 1217 // });
1217 // } 1218 // }
1218 if (remito.proveedor && remito.proveedor.COD) { 1219 if (remito.proveedor && remito.proveedor.COD) {
1219 $scope.cabeceras.push({ 1220 $scope.cabeceras.push({
1220 label: 'Proveedor:', 1221 label: 'Proveedor:',
1221 valor: $filter('rellenarDigitos')(remito.proveedor.COD, 5) + 1222 valor: $filter('rellenarDigitos')(remito.proveedor.COD, 5) +
1222 ' - ' + remito.proveedor.NOM 1223 ' - ' + remito.proveedor.NOM
1223 }); 1224 });
1224 1225
1225 $filter('filter')($scope.botonera, { label: 'Proveedor' })[0].checked = true; 1226 $filter('filter')($scope.botonera, { label: 'Proveedor' })[0].checked = true;
1226 } 1227 }
1227 if (remito.flete !== undefined && remito.fob !== undefined) { 1228 if (remito.flete !== undefined && remito.fob !== undefined) {
1228 $scope.cabeceras.push({ 1229 $scope.cabeceras.push({
1229 label: 'Flete:', 1230 label: 'Flete:',
1230 valor: remito.fob ? 'FOB' : ( 1231 valor: remito.fob ? 'FOB' : (
1231 remito.flete ? 'Si' : 'No') 1232 remito.flete ? 'Si' : 'No')
1232 }); 1233 });
1233 } 1234 }
1234 if (remito.remitoPlazo) { 1235 if (remito.remitoPlazo) {
1235 valorPrecioCondicion(); 1236 valorPrecioCondicion();
1236 $filter('filter')($scope.botonera, 1237 $filter('filter')($scope.botonera,
1237 { label: 'Precios y condiciones' })[0].checked = true; 1238 { label: 'Precios y condiciones' })[0].checked = true;
1238 } 1239 }
1239 1240
1240 function valorPrecioCondicion() { 1241 function valorPrecioCondicion() {
1241 if (parseInt(remito.idListaPrecio)) { 1242 if (parseInt(remito.idListaPrecio)) {
1242 crearRemitoService.getListaPrecioById(parseInt(remito.idListaPrecio)) 1243 crearRemitoService.getListaPrecioById(parseInt(remito.idListaPrecio))
1243 .then(function (res) { 1244 .then(function (res) {
1244 $timeout(function () { 1245 $timeout(function () {
1245 $scope.cabeceras.push({ 1246 $scope.cabeceras.push({
1246 label: 'Precios y Condiciones:', 1247 label: 'Precios y Condiciones:',
1247 valor: parseInt(res.data[0].ID) + ' - ' + 1248 valor: parseInt(res.data[0].ID) + ' - ' +
1248 res.data[0].DES + ' ' + 1249 res.data[0].DES + ' ' +
1249 remitoBusinessService 1250 remitoBusinessService
1250 .plazoToString(remito.remitoPlazo) 1251 .plazoToString(remito.remitoPlazo)
1251 }); 1252 });
1252 addArrayCabecera($scope.cabeceras); 1253 addArrayCabecera($scope.cabeceras);
1253 }, true); 1254 }, true);
1254 1255
1255 }); 1256 });
1256 $scope.idLista = parseInt(remito.idListaPrecio); 1257 $scope.idLista = parseInt(remito.idListaPrecio);
1257 } 1258 }
1258 } 1259 }
1259 1260
1260 if (remito.flete === 1) { 1261 if (remito.flete === 1) {
1261 var cabeceraBomba = { 1262 var cabeceraBomba = {
1262 label: 'Bomba', 1263 label: 'Bomba',
1263 valor: remito.bomba === 1 ? 'Si' : 'No' 1264 valor: remito.bomba === 1 ? 'Si' : 'No'
1264 }; 1265 };
1265 if (remito.kilometros) { 1266 if (remito.kilometros) {
1266 var cabeceraKilometros = { 1267 var cabeceraKilometros = {
1267 label: 'Kilometros', 1268 label: 'Kilometros',
1268 valor: remito.kilometros 1269 valor: remito.kilometros
1269 }; 1270 };
1270 $scope.cabeceras.push(cabeceraKilometros); 1271 $scope.cabeceras.push(cabeceraKilometros);
1271 } 1272 }
1272 $scope.cabeceras.push(cabeceraBomba); 1273 $scope.cabeceras.push(cabeceraBomba);
1273 } 1274 }
1274 1275
1275 if (remito.idPrecioCondicion > 0) { 1276 if (remito.idPrecioCondicion > 0) {
1276 $scope.idLista = remito.precioCondicion.idListaPrecio; 1277 $scope.idLista = remito.precioCondicion.idListaPrecio;
1277 } else if (remito.idPrecioCondicion) { 1278 } else if (remito.idPrecioCondicion) {
1278 $scope.idLista = -1; 1279 $scope.idLista = -1;
1279 } 1280 }
1280 $scope.puntoVenta = rellenar(remito.sucursal, 4); 1281 $scope.puntoVenta = rellenar(remito.sucursal, 4);
1281 $scope.comprobante = rellenar(remito.numeroRemito, 8); 1282 $scope.comprobante = rellenar(remito.numeroRemito, 8);
1282 $scope.remito = remito; 1283 $scope.remito = remito;
1283 if ($scope.remito.remitoPuntoDescarga.length) { 1284 if ($scope.remito.remitoPuntoDescarga.length) {
1284 var puntoDescarga = []; 1285 var puntoDescarga = [];
1285 1286
1286 $scope.remito.remitoPuntoDescarga.forEach(function (remitoPuntoDescarga) { 1287 $scope.remito.remitoPuntoDescarga.forEach(function (remitoPuntoDescarga) {
1287 puntoDescarga.push(remitoPuntoDescarga.puntoDescarga); 1288 puntoDescarga.push(remitoPuntoDescarga.puntoDescarga);
1288 }); 1289 });
1289 1290
1290 $scope.cabeceras.push({ 1291 $scope.cabeceras.push({
1291 label: 'Puntos de descarga: ', 1292 label: 'Puntos de descarga: ',
1292 valor: $filter('rellenarDigitos')(getCabeceraPuntoDescarga(puntoDescarga)) 1293 valor: $filter('rellenarDigitos')(getCabeceraPuntoDescarga(puntoDescarga))
1293 }); 1294 });
1294 } 1295 }
1295 $scope.remitoIsDirty = false; 1296 $scope.remitoIsDirty = false;
1296 1297
1297 1298
1298 addArrayCabecera($scope.cabeceras); 1299 addArrayCabecera($scope.cabeceras);
1299 } 1300 }
1300 1301
1301 function getLSRemito() { 1302 function getLSRemito() {
1302 var remito = JSON.parse($localStorage.remito || null); 1303 var remito = JSON.parse($localStorage.remito || null);
1303 if (remito) { 1304 if (remito) {
1304 setearRemito(remito); 1305 setearRemito(remito);
1305 delete $localStorage.remito; 1306 delete $localStorage.remito;
1306 } 1307 }
1307 } 1308 }
1308 1309
1309 function getCabeceraPuntoDescarga(puntosDescarga) { 1310 function getCabeceraPuntoDescarga(puntosDescarga) {
1310 var puntosStamp = ''; 1311 var puntosStamp = '';
1311 puntosDescarga.forEach(function (punto, idx, arr) { 1312 puntosDescarga.forEach(function (punto, idx, arr) {
1312 puntosStamp += punto.descripcion; 1313 puntosStamp += punto.descripcion;
1313 if ((idx + 1) !== arr.length) puntosStamp += ', '; 1314 if ((idx + 1) !== arr.length) puntosStamp += ', ';
1314 }); 1315 });
1315 return puntosStamp; 1316 return puntosStamp;
1316 } 1317 }
1317 1318
1318 function abrirModalMail(id, cliente, numeroRemito) { 1319 function abrirModalMail(id, cliente, numeroRemito) {
1319 focaModalService.mail( 1320 focaModalService.mail(
1320 { 1321 {
1321 titulo: 'Comprobante de remito Nº ' + numeroRemito, 1322 titulo: 'Comprobante de remito Nº ' + numeroRemito,
1322 descarga: { 1323 descarga: {
1323 nombre: numeroRemito + '.pdf', 1324 nombre: numeroRemito + '.pdf',
1324 url: '/remito/comprobante', 1325 url: '/remito/comprobante',
1325 }, 1326 },
1326 descargaSinValorizar: { 1327 descargaSinValorizar: {
1327 nombre: numeroRemito + '.pdf', 1328 nombre: numeroRemito + '.pdf',
1328 url: '/remito/comprobante-sin-valorizar', 1329 url: '/remito/comprobante-sin-valorizar',
1329 }, 1330 },
1330 envio: { 1331 envio: {
1331 mailCliente: cliente.MAIL, 1332 mailCliente: cliente.MAIL,
1332 url: '/remito/mail', 1333 url: '/remito/mail',
1333 }, 1334 },
1334 envioSinValorizar: { 1335 envioSinValorizar: {
1335 mailCliente: cliente.MAIL, 1336 mailCliente: cliente.MAIL,
1336 url: '/remito/mail-sin-valorizar' 1337 url: '/remito/mail-sin-valorizar'
1337 }, 1338 },
1338 options: { 1339 options: {
1339 idRemito: id 1340 idRemito: id
1340 } 1341 }
1341 } 1342 }
1342 ) 1343 )
1343 .then(function (res) { 1344 .then(function (res) {
1344 if (res === false) { 1345 if (res === false) {
1345 abrirModalMail(id); 1346 abrirModalMail(id);
1346 focaModalService.alert('Descarga o envíe su remito ' + 1347 focaModalService.alert('Descarga o envíe su remito ' +
1347 'antes de cerrar esta ventana'); 1348 'antes de cerrar esta ventana');
1348 } 1349 }
1349 }); 1350 });
1350 } 1351 }
1351 //recibo la propiedad por la cual quiero obtener el valor 1352 //recibo la propiedad por la cual quiero obtener el valor
1352 function getImporte(propiedad) { 1353 function getImporte(propiedad) {
1353 var importe = 0; 1354 var importe = 0;
1354 1355
1355 $scope.articulosFiltro().forEach(function (articulo) { 1356 $scope.articulosFiltro().forEach(function (articulo) {
1356 1357
1357 if (articulo[propiedad]) { 1358 if (articulo[propiedad]) {
1358 importe += articulo[propiedad] * articulo.cantidad; 1359 importe += articulo[propiedad] * articulo.cantidad;
1359 } 1360 }
1360 return; 1361 return;
1361 1362
1362 }); 1363 });
1363 1364
1364 return importe; 1365 return importe;
1365 } 1366 }
1366 } 1367 }
1367 ]); 1368 ]);
1368 1369
src/views/remito.html
1 <div class="crear-nota-remito foca-crear row"> 1 <div class="crear-nota-remito foca-crear row">
2 <foca-cabecera-facturador 2 <foca-cabecera-facturador
3 titulo="'Remito'" 3 titulo="'Remito'"
4 numero="puntoVenta + '-' + comprobante" 4 numero="puntoVenta + '-' + comprobante"
5 fecha="now" 5 fecha="now"
6 class="mb-0 col-lg-12" 6 class="mb-0 col-lg-12"
7 busqueda="seleccionarRemito" 7 busqueda="seleccionarRemito"
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="remito.observaciones" 13 ng-bind="remito.observaciones"
14 ></marquee> 14 ></marquee>
15 <div class="col-lg-12"> 15 <div class="col-lg-12">
16 <div class="row mt-4"> 16 <div class="row mt-4">
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 p-1 botonera-secundaria px-5 py-2"> 18 <div class="row p-1 botonera-secundaria px-5 py-2">
19 <div class="col-12"> 19 <div class="col-12">
20 <foca-botonera-facturador botones="botonera" extra="4" class="row"></foca-botonera-facturador> 20 <foca-botonera-facturador botones="botonera" extra="4" 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 class="">#</th> 28 <th class="">#</th>
29 <th class="col">Código</th> 29 <th class="col">Código</th>
30 <th class="col-4">Descripción</th> 30 <th class="col-4">Descripción</th>
31 <th class="col text-right">Cantidad</th> 31 <th class="col text-right">Cantidad</th>
32 <th class="col text-right">Precio Unitario</th> 32 <th class="col text-right">Precio Unitario</th>
33 <th class="col text-right">SubTotal</th> 33 <th class="col text-right">SubTotal</th>
34 <th class="text-right"> 34 <th 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 articulosFiltro()" 56 ng-repeat="(key, articulo) in articulosFiltro()"
57 ng-show="show || key == (articulosFiltro().length - 1)" 57 ng-show="show || key == (articulosFiltro().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 && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'" 71 ng-show="articulo.editCantidad && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'"
72 ng-model="tmpCantidad" 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 max="100000" 76 max="100000"
77 maxlength="6" 77 maxlength="6"
78 foca-focus="articulo.editCantidad" 78 foca-focus="articulo.editCantidad"
79 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);" 79 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
80 esc-key="cancelarEditar(articulo)" 80 esc-key="cancelarEditar(articulo)"
81 ng-focus="selectFocus($event); tmpCantidad = articulo.cantidad; tmpPrecio = articulo.precio" 81 ng-focus="selectFocus($event); tmpCantidad = articulo.cantidad; tmpPrecio = articulo.precio"
82 teclado-virtual 82 teclado-virtual
83 > 83 >
84 <i 84 <i
85 class="selectable" 85 class="selectable"
86 ng-click="cambioEdit(articulo, 'cantidad')" 86 ng-click="cambioEdit(articulo, 'cantidad')"
87 ng-hide="articulo.editCantidad && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'" 87 ng-hide="articulo.editCantidad && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'"
88 ng-bind="articulo.cantidad"> 88 ng-bind="articulo.cantidad">
89 </i> 89 </i>
90 </td> 90 </td>
91 <td class="col text-right"> 91 <td class="col text-right">
92 <input 92 <input
93 ng-show="articulo.editPrecio && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'" 93 ng-show="articulo.editPrecio && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'"
94 ng-model="tmpPrecio" 94 ng-model="tmpPrecio"
95 class="form-control" 95 class="form-control"
96 foca-tipo-input 96 foca-tipo-input
97 min="1" 97 min="1"
98 step="0.0001" 98 step="0.0001"
99 foca-focus="articulo.editPrecio" 99 foca-focus="articulo.editPrecio"
100 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);" 100 ng-keypress="editarArticulo($event.keyCode, articulo, tmpCantidad, tmpPrecio);"
101 esc-key="cancelarEditar(articulo)" 101 esc-key="cancelarEditar(articulo)"
102 ng-focus="selectFocus($event); 102 ng-focus="selectFocus($event);
103 tmpCantidad = articulo.cantidad; 103 tmpCantidad = articulo.cantidad;
104 tmpPrecio = articulo.precio" 104 tmpPrecio = articulo.precio"
105 teclado-virtual 105 teclado-virtual
106 > 106 >
107 <i 107 <i
108 class="selectable" 108 class="selectable"
109 ng-click="cambioEdit(articulo, 'precio')" 109 ng-click="cambioEdit(articulo, 'precio')"
110 ng-hide="articulo.editPrecio && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'" 110 ng-hide="articulo.editPrecio && remito.estado !== 5 && remito.hojaRuta.abierta !== '1'"
111 ng-bind="articulo.precio | number: 4"> 111 ng-bind="articulo.precio | number: 4">
112 </i> 112 </i>
113 </td> 113 </td>
114 <td 114 <td
115 class="col text-right" 115 class="col text-right"
116 ng-bind="(articulo.precio * articulo.cantidad) | number: 2"> 116 ng-bind="(articulo.precio * articulo.cantidad) | number: 2">
117 </td> 117 </td>
118 <td class="text-center"> 118 <td class="text-center">
119 <button 119 <button
120 ng-show="remito.estado !== 5 && remito.hojaRuta.abierta !== '1'" 120 ng-show="remito.estado !== 5 && remito.hojaRuta.abierta !== '1'"
121 class="btn btn-outline-light" 121 class="btn btn-outline-light"
122 ng-click="quitarArticulo(articulo)" 122 ng-click="quitarArticulo(articulo)"
123 > 123 >
124 <i class="fa fa-trash"></i> 124 <i class="fa fa-trash"></i>
125 </button> 125 </button>
126 <button 126 <button
127 ng-show="(articulo.editCantidad || articulo.editPrecio) && 127 ng-show="(articulo.editCantidad || articulo.editPrecio) &&
128 (remito.estado !== 5 && remito.hojaRuta.abierta !== '1')" 128 (remito.estado !== 5 && remito.hojaRuta.abierta !== '1')"
129 class="btn btn-outline-light" 129 class="btn btn-outline-light"
130 ng-click="editarArticulo(13, articulo, tmpCantidad, tmpPrecio);" 130 ng-click="editarArticulo(13, articulo, tmpCantidad, tmpPrecio);"
131 > 131 >
132 <i class="fa fa-save"></i> 132 <i class="fa fa-save"></i>
133 </button> 133 </button>
134 </td> 134 </td>
135 </tr> 135 </tr>
136 </tbody> 136 </tbody>
137 <tfoot> 137 <tfoot>
138 <tr ng-show="!cargando" class="d-flex"> 138 <tr ng-show="!cargando" class="d-flex">
139 <td 139 <td
140 class="align-middle" 140 class="align-middle"
141 ng-bind="articulosFiltro().length + 1" 141 ng-bind="articulosFiltro().length + 1"
142 ></td> 142 ></td>
143 <td class="col"> 143 <td class="col">
144 <input 144 <input
145 class="form-control" 145 class="form-control"
146 ng-model="articuloACargar.sectorCodigo" 146 ng-model="articuloACargar.sectorCodigo"
147 readonly 147 readonly
148 > 148 >
149 </td> 149 </td>
150 <td class="col-4 tabla-articulo-descripcion"> 150 <td class="col-4 tabla-articulo-descripcion">
151 <input 151 <input
152 class="form-control" 152 class="form-control"
153 ng-model="articuloACargar.descripcion" 153 ng-model="articuloACargar.descripcion"
154 readonly 154 readonly
155 > 155 >
156 </td> 156 </td>
157 <td class="col text-right"> 157 <td class="col text-right">
158 <input 158 <input
159 class="form-control" 159 class="form-control"
160 foca-tipo-input 160 foca-tipo-input
161 min="1" 161 min="1"
162 max="100000" 162 max="100000"
163 maxlength="6" 163 maxlength="6"
164 ng-model="articuloACargar.cantidad" 164 ng-model="articuloACargar.cantidad"
165 foca-focus="!cargando" 165 foca-focus="!cargando"
166 esc-key="resetFilter()" 166 esc-key="resetFilter()"
167 ng-keypress="agregarATabla($event.keyCode)" 167 ng-keypress="agregarATabla($event.keyCode)"
168 teclado-virtual 168 teclado-virtual
169 > 169 >
170 </td> 170 </td>
171 <td class="col text-right"> 171 <td class="col text-right">
172 <input 172 <input
173 class="form-control" 173 class="form-control"
174 ng-model="articuloACargar.precio" 174 ng-model="articuloACargar.precio"
175 ng-show="idLista != -1" 175 ng-show="idLista != -1"
176 ng-keypress="agregarATabla($event.keyCode)" 176 ng-keypress="agregarATabla($event.keyCode)"
177 > 177 >
178 <input 178 <input
179 class="form-control" 179 class="form-control"
180 foca-tipo-input 180 foca-tipo-input
181 step="0.0001" 181 step="0.0001"
182 ng-model="articuloACargar.precio" 182 ng-model="articuloACargar.precio"
183 esc-key="resetFilter()" 183 esc-key="resetFilter()"
184 ng-keypress="agregarATabla($event.keyCode)" 184 ng-keypress="agregarATabla($event.keyCode)"
185 ng-show="idLista == -1" 185 ng-show="idLista == -1"
186 teclado-virtual 186 teclado-virtual
187 > 187 >
188 </td> 188 </td>
189 <td class="col text-right"> 189 <td class="col text-right">
190 <input 190 <input
191 class="form-control" 191 class="form-control"
192 ng-value="getSubTotal() | number: 2" 192 ng-value="getSubTotal() | number: 2"
193 readonly 193 readonly
194 ></td> 194 ></td>
195 <td class="text-center align-middle"> 195 <td class="text-center align-middle">
196 <button 196 <button
197 class="btn btn-outline-light" 197 class="btn btn-outline-light"
198 ng-click="agregarATabla(13)" 198 ng-click="agregarATabla(13)"
199 > 199 >
200 <i class="fa fa-save"></i> 200 <i class="fa fa-save"></i>
201 </button> 201 </button>
202 </td> 202 </td>
203 </tr> 203 </tr>
204 204
205 <tr class="d-flex"> 205 <tr class="d-flex">
206 <td colspan="4" class="no-border-top"> 206 <td colspan="4" class="no-border-top">
207 <strong>Items:</strong> 207 <strong>Items:</strong>
208 <a ng-bind="articulosFiltro().length"></a> 208 <a ng-bind="articulosFiltro().length"></a>
209 </td> 209 </td>
210 <td class="text-right ml-auto table-celda-total no-border-top"> 210 <td class="text-right ml-auto table-celda-total no-border-top">
211 <h3>Total:</h3> 211 <h3>Total:</h3>
212 </td> 212 </td>
213 <td class="table-celda-total text-right no-border-top" colspan="1"> 213 <td class="table-celda-total text-right no-border-top" colspan="1">
214 <h3>{{getTotal() | currency: remito.cotizacion.moneda.SIMBOLO}}</h3> 214 <h3>{{getTotal() | currency: remito.cotizacion.moneda.SIMBOLO}}</h3>
215 </td> 215 </td>
216 <td class="text-right text-dark no-border-top"> 216 <td class="text-right text-dark no-border-top">
217 <span>Totales</span> 217 <span>Totales</span>
218 </td> 218 </td>
219 </tr> 219 </tr>
220 </tfoot> 220 </tfoot>
221 </table> 221 </table>
222 </div> 222 </div>
223 </div> 223 </div>
224 <div
225 class="col-12 col-md-10 col-lg-10 p-0"
226 ng-if="auxComprobar">
227 <div
228 class="alert alert-danger ml-auto mt-2"
229 role="alert"
230 style="width: 60%;">
231 <i class="fa fa-exclamation-triangle fa-lg"></i>
232 El monto total debe ser menor a $10.000.000.000,00, elimina un artículo o reduce las cantidades
233 </div>
234 </div>
224 </div> 235 </div>
225 </div> 236 </div>
226 <div class="row d-md-none fixed-bottom"> 237 <div class="row d-md-none fixed-bottom">
227 <div class="w-100 bg-dark d-flex px-3 acciones-mobile"> 238 <div class="w-100 bg-dark d-flex px-3 acciones-mobile">
228 <span class="ml-3 text-muted" ng-click="salir()">Salir</span> 239 <span class="ml-3 text-muted" ng-click="salir()">Salir</span>
229 <span 240 <span
230 class="mr-3 ml-auto" 241 class="mr-3 ml-auto"
242 ng-disabled="comprobarTotal()"
231 ng-class="saveLoading ? 'text-muted' : ''" 243 ng-class="saveLoading ? 'text-muted' : ''"
232 ng-click="crearRemito()" 244 ng-click="crearRemito()"
233 ladda="saveLoading" 245 ladda="saveLoading"
234 data-style="expand-left" 246 data-style="expand-left"
235 >Guardar</span> 247 >Guardar</span>
236 </div> 248 </div>
237 </div> 249 </div>
238 </div> 250 </div>
239 251