diff --git a/src/app/components/pedido/pedido.component.html b/src/app/components/pedido/pedido.component.html index a33ed2a6..efa1dbd7 100644 --- a/src/app/components/pedido/pedido.component.html +++ b/src/app/components/pedido/pedido.component.html @@ -7,6 +7,12 @@

{{ title }}

+
@@ -142,9 +148,9 @@

- + - +
diff --git a/src/app/components/pedido/pedido.component.ts b/src/app/components/pedido/pedido.component.ts index e175dc35..3f2480b5 100644 --- a/src/app/components/pedido/pedido.component.ts +++ b/src/app/components/pedido/pedido.component.ts @@ -1,5 +1,5 @@ -import { FormasDePagoService } from './../../services/formas-de-pago.service'; -import { FormaDePago } from './../../models/forma-de-pago'; +import {FormasDePagoService} from './../../services/formas-de-pago.service'; +import {FormaDePago} from './../../models/forma-de-pago'; import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; import {AbstractControl, UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, Validators} from '@angular/forms'; import {CuentaCorrienteCliente} from '../../models/cuenta-corriente'; @@ -100,6 +100,8 @@ export class PedidoComponent implements OnInit, OnDestroy { formasDePago: FormaDePago[] = []; formaDePagoPredeterminada: FormaDePago; + retiroEnSucursalDisabled = false; + constructor(private fb: UntypedFormBuilder, modalConfig: NgbModalConfig, private modalService: NgbModal, @@ -143,18 +145,32 @@ export class PedidoComponent implements OnInit, OnDestroy { this.formaDePagoPredeterminada = data[2]; }, error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), - }) - ; + }); this.subscription.add(this.sucursalesService.sucursal$.subscribe(s => { - if (!s.configuracionSucursal.puntoDeRetiro) { - this.form.get('opcionEnvio').setValue(OpcionEnvio.ENVIO_A_DOMICILIO); - } + this.setOpcionEnvio(s.idSucursal); })); this.init(); } + setOpcionEnvio(idSucursal: number, value: OpcionEnvio|null = null) { + value = value || OpcionEnvio.RETIRO_EN_SUCURSAL; + this.form.get('opcionEnvio').setValue(value); + if (!this.esSucursalPuntoDeRetiro(idSucursal)) { + if (value === OpcionEnvio.RETIRO_EN_SUCURSAL) { + this.form.get('opcionEnvio').setValue(null); + } + this.retiroEnSucursalDisabled = true; + } else { + this.retiroEnSucursalDisabled = false; + } + } + + opcionEnvioClick(value: OpcionEnvio) { + this.setOpcionEnvio(this.sucursalesService.getIdSucursal(), value); + } + ngOnDestroy() { this.subscription.unsubscribe(); } @@ -172,8 +188,8 @@ export class PedidoComponent implements OnInit, OnDestroy { this.handleCCCPredeterminado(); }, error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), - }) - ; + }); + this.setOpcionEnvio(this.sucursalesService.getIdSucursal()); } else { if (this.action === Action.EDITAR) { const id = Number(this.route.snapshot.paramMap.get('id')); @@ -221,34 +237,34 @@ export class PedidoComponent implements OnInit, OnDestroy { this.pedidosService.getRenglonesDePedido(p.idPedido, this.action === Action.CLONAR) ]) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - (v: [CuentaCorrienteCliente, RenglonPedido[]]) => { - this.datosParaEditarOClonar.ccc = v[0]; - this.datosParaEditarOClonar.renglones = v[1].map(e => ({ renglonPedido : e })); - if (this.action === Action.EDITAR) { - v[1].forEach(e => this.cantidadesInicialesPedido[e.idProductoItem] = e.cantidad); - } - this.datosParaEditarOClonar.sucursal = null; - if (p.tipoDeEnvio === TipoDeEnvio.RETIRO_EN_SUCURSAL) { - this.datosParaEditarOClonar.opcionEnvio = OpcionEnvio.RETIRO_EN_SUCURSAL; - this.datosParaEditarOClonar.sucursal = p.idSucursal ? { idSucursal: p.idSucursal } : null; - } else { - this.datosParaEditarOClonar.opcionEnvio = OpcionEnvio.ENVIO_A_DOMICILIO; - if (p.tipoDeEnvio) { - this.datosParaEditarOClonar.opcionEnvioUbicacion = p.tipoDeEnvio === TipoDeEnvio.USAR_UBICACION_FACTURACION ? - OpcionEnvioUbicacion.USAR_UBICACION_FACTURACION : OpcionEnvioUbicacion.USAR_UBICACION_ENVIO; + .subscribe({ + next: (v: [CuentaCorrienteCliente, RenglonPedido[]]) => { + this.datosParaEditarOClonar.ccc = v[0]; + this.datosParaEditarOClonar.renglones = v[1].map(e => ({ renglonPedido : e })); + if (this.action === Action.EDITAR) { + v[1].forEach(e => this.cantidadesInicialesPedido[e.idProductoItem] = e.cantidad); } - } - this.inicializarForm(); - } - ); + this.datosParaEditarOClonar.sucursal = null; + if (p.tipoDeEnvio === TipoDeEnvio.RETIRO_EN_SUCURSAL) { + this.datosParaEditarOClonar.opcionEnvio = OpcionEnvio.RETIRO_EN_SUCURSAL; + this.datosParaEditarOClonar.sucursal = p.idSucursal ? { idSucursal: p.idSucursal } : null; + } else { + this.datosParaEditarOClonar.opcionEnvio = OpcionEnvio.ENVIO_A_DOMICILIO; + if (p.tipoDeEnvio) { + this.datosParaEditarOClonar.opcionEnvioUbicacion = p.tipoDeEnvio === TipoDeEnvio.USAR_UBICACION_FACTURACION ? + OpcionEnvioUbicacion.USAR_UBICACION_FACTURACION : OpcionEnvioUbicacion.USAR_UBICACION_ENVIO; + } + } + this.inicializarForm(); + }, + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), + }); }, error: err => { this.mensajeService.msg(err.error, MensajeModalType.ERROR); this.router.navigate(['/pedidos']); } - }) - ; + }); } handleCCCPredeterminado() { @@ -264,13 +280,13 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingOverlayService.activate(); this.cuentasCorrienteService.getCuentaCorrienteClientePredeterminado() .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - ccc => { + .subscribe({ + next: ccc => { this.cccPredeterminado = ccc; this.inicializarForm(); }, - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - ) + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) + }) ; } else { this.inicializarForm(); @@ -310,9 +326,7 @@ export class PedidoComponent implements OnInit, OnDestroy { } inicializarForm() { - this.form.get('ccc').valueChanges - .subscribe(() => this.updateRenglones()) - ; + this.form.get('ccc').valueChanges.subscribe(() => this.updateRenglones()); this.form.get('renglonesPedido').valueChanges .subscribe((renglones) => { @@ -321,8 +335,7 @@ export class PedidoComponent implements OnInit, OnDestroy { this.cantidadesActualesPedido[r.renglonPedido.idProductoItem] = r.renglonPedido.cantidad; }); if (!this.loadingResultados) { this.calcularResultados(); } - }) - ; + }); this.form.get('descuento').valueChanges .pipe(debounceTime(700)) @@ -333,8 +346,7 @@ export class PedidoComponent implements OnInit, OnDestroy { return; } if (!this.loadingResultados) { this.calcularResultados(); } - }) - ; + }); this.form.get('recargo').valueChanges .pipe(debounceTime(700)) @@ -345,8 +357,7 @@ export class PedidoComponent implements OnInit, OnDestroy { return; } if (!this.loadingResultados) { this.calcularResultados(); } - }) - ; + }); this.form.get('opcionEnvio').valueChanges.subscribe(oe => { if (oe === OpcionEnvio.RETIRO_EN_SUCURSAL) { @@ -419,7 +430,7 @@ export class PedidoComponent implements OnInit, OnDestroy { this.form.get('descuento').setValue(data.descuento); this.form.get('recargo').setValue(data.recargo); - this.form.get('opcionEnvio').setValue(data.opcionEnvio ? data.opcionEnvio : null); + this.setOpcionEnvio(this.sucursalesService.getIdSucursal(), data.opcionEnvio ? data.opcionEnvio : null) this.form.get('opcionEnvioUbicacion').setValue(data.opcionEnvioUbicacion ? data.opcionEnvioUbicacion : null); if (data.pagos && Array.isArray(data.pagos) && data.pagos.length) { @@ -452,17 +463,20 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingOverlayService.activate(); this.productosService.getDisponibilidadEnStock(ppvs) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe((pfs: ProductoFaltante[]) => { - if (!pfs.length) { - this.doSubmit(); - } else { - this.agregarErroresDisponibilidad(pfs); - this.accordion.expand('productos'); - this.mensajeService.msg( - 'Uno o mas productos no poseen stock disponible. Por favor, verifique la sección Productos.', - MensajeModalType.ERROR - ); - } + .subscribe({ + next: (pfs: ProductoFaltante[]) => { + if (!pfs.length) { + this.doSubmit(); + } else { + this.agregarErroresDisponibilidad(pfs); + this.accordion.expand('productos'); + this.mensajeService.msg( + 'Uno o mas productos no poseen stock disponible. Por favor, verifique la sección Productos.', + MensajeModalType.ERROR + ); + } + }, + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR), }) ; } @@ -477,31 +491,28 @@ export class PedidoComponent implements OnInit, OnDestroy { this.saving = false; this.loadingOverlayService.deactivate(); })) - .subscribe( - () => { + .subscribe({ + next: () => { this.reset(); const msg = np.idPedido ? 'Pedido actualizado correctamente!' : 'Pedido enviado correctamente!'; this.mensajeService.msg(msg, MensajeModalType.INFO).then(() => { this.router.navigate(['/pedidos']); }); }, - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - ) + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) + }) ; } agregarErroresDisponibilidad(pfs: ProductoFaltante[]) { const productosIds = pfs.map(pf => pf.idProducto); - productosIds.forEach(id => { const aux = pfs.filter(pf => pf.idProducto === id); if (aux.length) { const cantSolicitada = aux[0].cantidadSolicitada; const cantDisponible = aux.reduce((total: number, pf: ProductoFaltante) => total + pf.cantidadDisponible, 0); const errorDisponibilidad = ['Solicitado', ' ', cantSolicitada, ' --UM--', ' - Disponible ', cantDisponible, ' --UM--'].join(''); - const errorDisponibilidadPorSucursal = aux.map(pf => [pf.nombreSucursal, ': ', pf.cantidadDisponible, ' --UM--'].join('')); - const control = this.searchRPInRenglones(id); if (control) { const v: RenglonPedido = control.get('renglonPedido').value; @@ -665,20 +676,22 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingOverlayService.activate(); this.productosService.getDisponibilidadEnStock(ppvs) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe((pfs: ProductoFaltante[]) => { - if (!pfs.length) { - const nrp: NuevoRenglonPedido = { - idProductoItem: p.idProducto, - cantidad: cant, - }; - - this.addRenglonPedido(nrp); - } else { - this.mensajeService.msg( - 'No se puede solicitar mas stock para dicho producto. Por favor, verifique la sección Productos.', - MensajeModalType.ERROR - ); - } + .subscribe({ + next: (pfs: ProductoFaltante[]) => { + if (!pfs.length) { + const nrp: NuevoRenglonPedido = { + idProductoItem: p.idProducto, + cantidad: cant, + }; + this.addRenglonPedido(nrp); + } else { + this.mensajeService.msg( + 'No se puede solicitar mas stock para dicho producto. Por favor, verifique la sección Productos.', + MensajeModalType.ERROR + ); + } + }, + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) }) ; } @@ -688,10 +701,10 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingOverlayService.activate(); this.pedidosService.calcularRenglones([nrp], cliente.idCliente) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - data => this.handleRenglonPedido(data[0]), - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - ) + .subscribe({ + next: data => this.handleRenglonPedido(data[0]), + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) + }) ; } @@ -770,10 +783,10 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingResultados = false; this.loadingOverlayService.deactivate(); })) - .subscribe( - (r: Resultados) => this.form.get('resultados').setValue(r), - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - ) + .subscribe({ + next: (r: Resultados) => this.form.get('resultados').setValue(r), + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) + }) ; } @@ -799,14 +812,14 @@ export class PedidoComponent implements OnInit, OnDestroy { this.loadingOverlayService.activate(); this.pedidosService.calcularRenglones(renglones, cliente.idCliente) .pipe(finalize(() => this.loadingOverlayService.deactivate())) - .subscribe( - rps => { + .subscribe({ + next: rps => { const nuevosRenglones = []; rps.forEach((rp: RenglonPedido) => nuevosRenglones.push({ renglonPedido: rp })); this.renglonesPedido.setValue(nuevosRenglones); }, - err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) - ) + error: err => this.mensajeService.msg(err.error, MensajeModalType.ERROR) + }) ; } } @@ -847,8 +860,8 @@ export class PedidoComponent implements OnInit, OnDestroy { ); } - esSucursalSeleccionadaPuntoDeRetiro() { - return !!this.sucursales.filter(s => s.idSucursal === this.sucursalesService.getIdSucursal()).length; + esSucursalPuntoDeRetiro(idSucursal: number): boolean { + return !!this.sucursales.filter(s => s.idSucursal === idSucursal).length; } toggleDescuento() { @@ -862,5 +875,9 @@ export class PedidoComponent implements OnInit, OnDestroy { this.form.get('descuento').disable(); } } -} + limpiarDatos() { + this.storageService.removeItem(this.localStorageKey); + location.reload(); + } +} diff --git a/src/app/modules/share.module.ts b/src/app/modules/share.module.ts index 843beaa8..1fb87549 100755 --- a/src/app/modules/share.module.ts +++ b/src/app/modules/share.module.ts @@ -23,7 +23,7 @@ import { faUserCheck, faBook, faBalanceScaleRight, faBalanceScaleLeft, faTruck, faFileInvoiceDollar, faHandHoldingUsd, faMoneyBillWave, faTruckMoving, faCog, faUndoAlt, faUsers, faMapMarkedAlt, - faCubes, faRulerCombined, faCheckDouble, faEllipsisV, faToggleOn + faCubes, faRulerCombined, faCheckDouble, faEllipsisV, faToggleOn, faBroom } from '@fortawesome/free-solid-svg-icons'; import {BatchActionsBoxComponent} from '../components/batch-actions-box/batch-actions-box.component'; import { NgBoostrapModule } from './ng-boostrap.module'; @@ -111,7 +111,7 @@ export class ShareModule { faHandHoldingUsd, faMoneyBillWave, faTruckMoving, faCog, faImage, faUndoAlt, faUsers, faMapMarkedAlt, faCubes, faRulerCombined, faSquare, faSquareCheck, faCheckDouble, - faEllipsisV, faToggleOn + faEllipsisV, faToggleOn, faBroom ); } }