protected override void AddPago(Models.Pagos.Pago p) { //_skipPromociones = true; base.AddPago(p); //_skipPromociones = false; //_ls.AddPago(o, p.Id); //await this.UpdatePromociones(); //this.UpdatePagos(); //await this.RefreshPromociones(); //this.SaleCommand.RaiseCanExecuteChanged(); }
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); }
public PuntoDeVentaViewModel() { if (!IsInDesignMode) { _proxy = CommonServiceLocator.ServiceLocator.Current.GetInstance <Common.ServiceContracts.IDataServiceAsync>(); _pproxy = CommonServiceLocator.ServiceLocator.Current.GetInstance <Common.ServiceContracts.ICommonServiceAsync>(); } this.Productos = new ObservableCollection <Producto>(); this.Pagos = new ObservableCollection <Models.Pagos.Pago>(); _formas = new Dictionary <FormaPago, bool> { { FormaPago.EF, true }, { FormaPago.TC, true }, { FormaPago.TD, true } }; this.FormasPago = CollectionViewSource.GetDefaultView(_formas); this.FormasPago.Filter = i => ((KeyValuePair <FormaPago, bool>)i).Value; this.ShowSerie = true; _common = new Helpers.CommonHelper(); this.SaleCommand = new GalaSoft.MvvmLight.Command.RelayCommand(() => { var sale = new SaleRequest { VendedorId = 0, Productos = this.Productos.Select(i => new SerieFormasPago { Serie = i.Serie }), Sucursal = "01", Pagos = this.Pagos.Where(i => (i.Importe ?? 0) > 0).Select(i => new Common.Entities.Pago { FormaPago = i.FormaPago, Importe = i.Importe.Value }) }; //var res = await _proxy.SaleAsync(sale); //MessageBox.Show($"ID: {res}"); }, () => { var sum = this.Pagos.Sum(i => i.Importe) ?? 0; var rem = this.Total - sum; return(this.Total > 0 && rem == 0); }); this.AddFormaCommand = new GalaSoft.MvvmLight.Command.RelayCommand(() => { var p = new Models.Pagos.Pago { FormaPago = this.SelectedFormaPago }; this.Pagos.Add(p); p.PropertyChanged += (s, e) => RaisePropertyChanged(nameof(this.TotalPayment)); if (this.SelectedFormaPago == FormaPago.EF) { _formas[FormaPago.EF] = false; this.FormasPago.Refresh(); } }); this.FindVendedorCommand = new GalaSoft.MvvmLight.Command.RelayCommand(async() => { this.Vendedor = await _pproxy.FindVendedorAsync(this.VendedorSearch.Value); if (this.Vendedor != null) { this.VendedorSearch = null; } }); this.FindCajeroCommand = new GalaSoft.MvvmLight.Command.RelayCommand(async() => { this.Cajero = await _pproxy.FindCajeroAsync(this.CajeroSearch); if (this.Cajero != null) { this.CajeroSearch = null; } }); this.AddCommand = new GalaSoft.MvvmLight.Command.RelayCommand(async() => { this.IsBusy = true; var ser = _common.PrepareSerie(this.Serie); var q = this.Productos.Where(i => i.Serie == ser).SingleOrDefault(); if (q != null) { MessageBox.Show($"Already Added: {ser}"); return; } var item = await _proxy.ScanProductoAsync(ser, "01"); if (item != null) { if (item.Status == Status.AC || item.Status == Status.IF || item.Status == Status.CA) { //if(await _proxy.RequestProductoAsync(item.Producto.Serie)) // this.Productos.Add(item.Producto); } else { MessageBox.Show($"{item.Producto.Serie} - {item.Status}"); } this.Serie = null; } else { MessageBox.Show($"Not Found: {ser}"); } this.IsBusy = false; }, () => { return(!string.IsNullOrWhiteSpace(this.Serie)); }); this.RemoveCommand = new GalaSoft.MvvmLight.Command.RelayCommand(() => { //await _proxy.ReleaseProductoAsync(this.SelectedItem.Serie); //this.Productos.Remove(this.SelectedItem); }, () => { return(this.SelectedItem != null); }); this.PropertyChanged += PuntoDeVenta_PropertyChanged; this.Productos.CollectionChanged += Productos_CollectionChanged; this.Pagos.CollectionChanged += Pagos_CollectionChanged; if (this.IsInDesignMode) { this.Serie = "123"; this.Productos.Add(new Producto { Id = 1, Serie = "001", Marca = "a", Modelo = "b", Talla = "c", Precio = 100, Total = 100, HasImage = true }); this.Productos.Add(new Producto { Id = 2, Serie = "002", Marca = "a", Modelo = "b", Talla = "c", Precio = 100, Total = 1000, HasImage = true }); this.Productos.Add(new Producto { Id = 3, Serie = "003", Marca = "a", Modelo = "b", Talla = "c", Precio = 100, Total = 1234.25m }); this.Productos.Add(new Producto { Id = 4, Serie = "004", Marca = "a", Modelo = "b", Talla = "c", Precio = 100, Total = 12456 }); this.Productos.Add(new Producto { Id = 5, Serie = "005", Marca = "a", Modelo = "b", Talla = "c", Precio = 100, Total = 9.99m }); this.Pagos.Add(new Models.Pagos.Pago { FormaPago = FormaPago.EF, Importe = 100 }); this.Pagos.Add(new Models.Pagos.Pago { FormaPago = FormaPago.TD, Importe = 30 }); this.Pagos.Add(new Models.Pagos.Pago { FormaPago = FormaPago.TD, Importe = 20 }); } }
protected virtual void AddPago(Models.Pagos.Pago p) { this.Pagos.Add(p); }