private async void PagoViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (this.SkipPropertyChanged) { return; } switch (e.PropertyName) { case nameof(this.ClientId): this.RaisePropertyChanged(nameof(this.NoClient)); break; case nameof(this.Total): this.RaisePropertyChanged(nameof(this.Pendiente)); break; case "SelectedPromocion": if (!_skip && this.Caja != null) { this.PagoIem.HasPromocion = this.HasSelectedPromocion; this.Caja.UpdatePagos(); //update pagos if (this.Caja is ICaja) { await((ICaja)this.Caja).UpdatePromociones(); this.Caja.UpdatePagos(); } this.Total = this.PagoIem.Importe.Value + this.Caja.Remaining; this.RaisePropertyChanged(nameof(this.Total)); } this.AcceptCommand.RaiseCanExecuteChanged(); break; case nameof(this.Pagar): this.RaisePropertyChanged(nameof(this.Pendiente)); if (!_skip && this.Caja != null) { this.PagoIem.Importe = this.Pagar; this.Caja.UpdatePagos(); //update pagos if (this.Caja is ICaja) { await((ICaja)this.Caja).UpdatePromociones(); this.Caja.UpdatePagos(); } this.Total = this.PagoIem.Importe.Value + this.Caja.Remaining; this.RaisePropertyChanged(nameof(this.Total)); } this.AcceptCommand.RaiseCanExecuteChanged(); break; case nameof(Caja): if (this.Caja != null && !(this.Caja is ICaja)) { var pago = new Models.Pagos.Pago { Id = Guid.NewGuid(), FormaPago = this.FormaPago, Importe = this.Caja.Remaining }; if (pago.FormaPago == Common.Constants.FormaPago.VA || pago.FormaPago == Common.Constants.FormaPago.VE) { var tmp = pago; pago = new Models.Pagos.PagoVale { Id = tmp.Id, FormaPago = tmp.FormaPago, Importe = tmp.Importe, Info = new Models.Pagos.PagoValeInfo { Electronica = true } }; } this.PagoIem = pago; this.Caja.Pagos.Add(pago); this.Caja.UpdatePagos(); this.Total = pago.Importe ?? 0; this.Pagar = pago.Importe ?? 0; //this.Caja.UpdatePagos(); this.Init(); } if (this.Caja != null && this.Caja is ICaja) { var caja = (ICaja)this.Caja; _skip = true; var pago = new Models.Pagos.Pago { Id = Guid.NewGuid(), FormaPago = this.FormaPago, Importe = this.Caja.Remaining }; if (pago.FormaPago == Common.Constants.FormaPago.VA || pago.FormaPago == Common.Constants.FormaPago.VE) { var tmp = pago; pago = new Models.Pagos.PagoVale { Id = tmp.Id, FormaPago = tmp.FormaPago, Importe = tmp.Importe, Info = new Models.Pagos.PagoValeInfo { Electronica = true } }; } this.PagoIem = pago; var tc = this.Caja.RemainingCalzado; var te = this.Caja.RemainingElectronica; caja.SkipPromociones = true; this.Caja.Pagos.Add(pago); caja.SkipPromociones = false; //await this.Caja.UpdatePromociones(save: true, force: true); await caja.UpdatePromociones(); this.Caja.UpdatePagos(); caja.SkipPromociones = true; this.Caja.Pagos.Remove(pago); caja.SkipPromociones = false; this.Pagar = this.Caja.Remaining; pago.Importe = this.Caja.Remaining; tc = this.Caja.RemainingCalzado; te = this.Caja.RemainingElectronica; caja.SkipPromociones = true; this.Caja.Pagos.Add(pago); caja.SkipPromociones = false; this.Total = pago.Importe ?? 0; this.Pagar = pago.Importe; this.TotalCalzado = tc; this.TotalElectronica = te; await caja.UpdatePromociones(); this.Caja.UpdatePagos(); this.Init(); _skip = false; } break; } }
protected async Task <Models.Pagos.Pago> ParsePago(Utilities.Messages.Pago o, Guid?id = null) { Models.Pagos.Pago p = null; switch (o.FormaPago) { case FormaPago.EF: p = new Models.Pagos.Pago { FormaPago = o.FormaPago, Importe = o.Importe }; break; case FormaPago.MD: p = new Models.Pagos.Pago { FormaPago = o.FormaPago, Importe = o.Importe, ClientId = o.Cliente }; break; case FormaPago.DV: p = new Models.Pagos.PagoDevolucion { FormaPago = o.FormaPago, Importe = o.Importe, Sucursal = o.Sucursal, Folio = o.Folio }; break; case FormaPago.TC: case FormaPago.TD: p = new Models.Pagos.PagoTarjeta { FormaPago = o.FormaPago, Importe = o.Importe, Terminacion = o.Terminacion, Referencia = o.Referencia }; break; case FormaPago.VA: { var pv = new Models.Pagos.PagoVale { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ContraVale = o.ContraVale, Limite = o.Limite, ClientId = o.Cliente, ProductosPlazos = o.PlazosProductos }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; pv.Promociones = promos.Promociones; var vale = await _proxy.FindValeAsync(o.Vale); pv.Info = new Models.Pagos.PagoValeInfo { Distribuidor = vale.Distribuidor.Nombre, Promocion = vale.Distribuidor.Promocion, Electronica = vale.Distribuidor.Electronica }; if (o.Cliente.HasValue) { var cli = _proxy.FindCliente(o.Cliente.Value); Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); } } p = pv; } break; case FormaPago.VD: { var pv = new Models.Pagos.PagoVale { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ClientId = o.Cliente }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; pv.Promociones = promos.Promociones; var vale = await _proxy.FindValeDigitalAsync(o.Vale); pv.Info = new Models.Pagos.PagoValeInfo { Distribuidor = vale.Distribuidor.Nombre, Promocion = vale.Distribuidor.Promocion, Electronica = vale.Distribuidor.Electronica }; if (o.Cliente.HasValue) { var cli = _proxy.FindCliente(o.Cliente.Value); Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); } } p = pv; } break; case FormaPago.VE: { var pv = new Models.Pagos.PagoVale { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Negocio = o.Negocio, NoCuenta = o.NoCuenta, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ClientId = o.Cliente }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; pv.Promociones = promos.Promociones; //var vale = await _proxy.FindValeDigitalAsync(o.Vale); //pv.Info = new Models.Pagos.PagoValeInfo //{ // Distribuidor = vale.Distribuidor.Nombre, // Promocion = vale.Distribuidor.Promocion, // SoloCalzado = vale.Distribuidor.SoloCalzado //}; //if (o.Cliente.HasValue) //{ // var cli = _proxy.FindCliente(o.Cliente.Value); // Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); //} } p = pv; } break; case FormaPago.CP: { var cp = new Models.Pagos.PagoCredito { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ContraVale = o.ContraVale, Limite = o.Limite, ClientId = o.Cliente }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; cp.Promociones = promos.Promociones; var vale = await _proxy.FindTarjetahabienteAsync(o.Vale); cp.Info = new Models.Pagos.PagoValeInfo { Distribuidor = vale.Distribuidor.Nombre, Promocion = vale.Distribuidor.Promocion, Electronica = vale.Distribuidor.Electronica }; if (o.Cliente.HasValue) { var cli = _proxy.FindCliente(o.Cliente.Value); Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); } else { this.Cliente = new Cliente { DistribuidorId = o.DistribuidorId }; } } p = cp; } break; case FormaPago.CD: { var cp = new Models.Pagos.PagoCredito { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ContraVale = o.ContraVale, Limite = o.Limite, ClientId = o.Cliente }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; cp.Promociones = promos.Promociones; var vale = await _proxy.FindDistribuidorAsync(o.Vale); cp.Info = new Models.Pagos.PagoValeInfo { Distribuidor = vale.Distribuidor.Nombre, Promocion = vale.Distribuidor.Promocion, Electronica = vale.Distribuidor.Electronica }; if (o.Cliente.HasValue) { var cli = _proxy.FindCliente(o.Cliente.Value); Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); } else { this.Cliente = new Cliente { DistribuidorId = o.DistribuidorId }; } } p = cp; } break; case FormaPago.CV: var cv = new Models.Pagos.PagoContraVale { FormaPago = o.FormaPago, Importe = o.Importe, Vale = o.Vale, Plazos = o.Plazos, Promociones = o.Promociones, SelectedPlazo = o.SelectedPlazo, SelectedPromocion = o.SelectedPromocion, ContraVale = o.ContraVale, Limite = o.Limite, Sucursal = o.Sucursal, ClientId = o.Cliente }; if (!this.IsInDesignMode) { var promos = await _proxy.FindPromocionesValeAsync(this.Sucursal.Clave); //pv.Plazos = promos.Plazos; cv.Promociones = promos.Promociones; var vale = await _proxy.FindContraValeAsync(o.Sucursal, o.Vale); cv.Info = new Models.Pagos.PagoValeInfo { Distribuidor = vale.Distribuidor.Nombre, Promocion = vale.Distribuidor.Promocion, Electronica = vale.Distribuidor.Electronica }; if (o.Cliente.HasValue) { var cli = _proxy.FindCliente(o.Cliente.Value); Messenger.Default.Send(new Messages.ClienteMessage { Cliente = cli }, this.GID); } } p = cv; break; default: throw new NotSupportedException(); } p.Id = id ?? Guid.NewGuid(); return(p); }