Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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
                });
            }
        }
Exemplo n.º 5
0
 protected virtual void AddPago(Models.Pagos.Pago p)
 {
     this.Pagos.Add(p);
 }