示例#1
0
        private async Task Scan()
        {
            var ser = _common.PrepareSerie(this.Search);

            if (this.Productos.Any())
            {
                var item = this.Productos.Where(i => i.Producto.Serie == ser).SingleOrDefault();
                if (item != null)
                {
                    this.Search  = null;
                    item.Scanned = true;
                }
                else
                {
                    this.ErrorMessage = Resources.Resource.Cancelacion_NoEncontrado;
                }
            }
            else
            {
                var item = await _proxy.ScanProductoDevolucionAsync(ser, cancelacion : true);

                if (item != null && item.Success)
                {
                    this.Search = null;
                    var res = await _proxy.FindSaleAsync(item.Producto.Sucursal, item.Producto.Folio);

                    if (res != null)
                    {
                        this.Devolucion = new Models.SucursalFolio
                        {
                            Folio    = res.Folio,
                            Sucursal = res.Sucursal
                        };
                        foreach (var p in res.Productos)
                        {
                            var can = new Models.CancelProducto {
                                Producto = p
                            };
                            if (can.Producto.Serie == ser)
                            {
                                can.Scanned = true;
                            }
                            can.PropertyChanged += (s, e) => { this.CancelCommand.RaiseCanExecuteChanged(); };
                            this.Productos.Add(can);
                        }
                    }
                }
                else
                {
                    if (item == null)
                    {
                        this.ErrorMessage = "Artículo no encontrado";
                    }
                    else
                    {
                        this.ErrorMessage = "Artículo no valido";
                    }
                    //this.ErrorMessage = Resources.Resource.Cancelacion_NoValido;
                }
            }
        }
示例#2
0
        public DevolucionViewModel()
        {
            _common = new Helpers.CommonHelper();
            this.PropertyChanged             += DevolucionViewModel_PropertyChanged;
            this.Productos                    = new ObservableCollection <Models.ProductoDevolucion>();
            this.Productos.CollectionChanged += Productos_CollectionChanged;
            if (!IsInDesignMode)
            {
                _reports = new Helpers.ReportsHelper();
                _client  = new Helpers.ServiceClient();
                _proxy   = CommonServiceLocator.ServiceLocator.Current.GetInstance <Common.ServiceContracts.IDataServiceAsync>();
            }
            this.LoadCommand = new GalaSoft.MvvmLight.Command.RelayCommand(async() => {
                this.IsBusy = true;
                var ser     = _common.PrepareSerie(this.SerieSearch);

                var item = await _proxy.ScanProductoDevolucionAsync(ser, cancelacion: false);
                if (item != null && item.Success)
                {
                    if (!this.Productos.Any())
                    {
                        AddItem(item.Producto);
                        this.SerieSearch = null;
                        this.Venta       = new Models.SucursalFolio {
                            Sucursal = item.Producto.Sucursal, Folio = item.Producto.Folio
                        };

                        //var ven = _proxy.FindVentaView(this.Venta.Sucursal, this.Venta.Folio, 0);

                        var sale          = _proxy.FindSale(this.Venta.Sucursal, this.Venta.Folio);
                        this.CanSetClient = !sale.ClienteId.HasValue;
                        if (sale.ClienteId.HasValue)
                        {
                            this.Cliente = _proxy.FindCliente(sale.ClienteId.Value);
                            if (this.Cliente != null)
                            {
                                this.NuevoCliente = new Models.NuevoCliente
                                {
                                    Id        = this.Cliente.Id,
                                    Nombre    = this.Cliente.Nombre,
                                    ApPaterno = this.Cliente.ApPaterno,
                                    ApMaterno = this.Cliente.ApMaterno
                                };
                            }
                        }
                    }
                    else
                    {
                        if (this.Venta.Sucursal == item.Producto.Sucursal &&
                            this.Venta.Folio == item.Producto.Folio)
                        {
                            var current = this.Productos.Where(i => i.Item.Serie == item.Producto.Serie).SingleOrDefault();
                            if (current == null)
                            {
                                AddItem(item.Producto);
                            }
                            else
                            {
                                this.Productos.Remove(current);
                            }
                            this.SerieSearch = null;
                        }
                        else
                        {
                            MessageBox.Show($"El producto {item.Producto.Serie}, no pertenece a la misma venta.");
                        }
                    }
                }
                else
                {
                    if (item == null)
                    {
                        this.ErrorMessage = "Artículo no encontrado";
                    }
                    else
                    {
                        if (item.Status == Common.Constants.Status.BA)
                        {
                            this.ErrorMessage = "El articulo ha excedido el tiempo valido para su devolución o cambio";
                        }
                        else
                        {
                            this.ErrorMessage = "Artículo no valido";
                        }
                    }
                }
                this.IsBusy = false;
            }, () => !string.IsNullOrWhiteSpace(this.SerieSearch));
            this.ReturnCommand = new GalaSoft.MvvmLight.Command.RelayCommand(async() => {
                //Messenger.Default.Send(new Messages.RequestApproval { GID = this.GID });

                this.IsBusy = true;
                var request = new Common.Entities.ReturnRequest
                {
                    Sucursal = this.Venta.Sucursal,
                    Folio    = this.Venta.Folio,
                    Comments = "",
                    Items    = this.Productos.Select(i => i.Item.Serie),
                    Razones  = this.Productos.ToDictionary(i => i.Item.Serie,
                                                           i => new Common.Entities.RazonItem {
                        TipoRazon = i.RazonId.Value,
                        Notas     = i.Razon
                    })
                };
                request.Cliente = Helpers.Parsers.PaseCliente(this.NuevoCliente, this.Cliente, this.Sucursal);
                this.Folio      = await _client.ReturnAsync(request);
                this.IsBusy     = false;
            }, () => this.Total > 0);

            this.PrintCommand = new RelayCommand(() => {
                _reports.Devolucion(this.Sucursal.Clave, this.Folio);
            }, () => this.IsComplete);

            this.LoadClienteCommand = new RelayCommand(() =>
            {
                Messenger.Default.Send(
                    new Utilities.Messages.OpenModal
                {
                    Name = Utilities.Constants.Modals.cliente,
                    GID  = this.GID
                });
            }, () => this.CanSetClient);
            this.ClearClienteCommand = new RelayCommand(() =>
            {
                this.Cliente      = null;
                this.NuevoCliente = null;
            }, () => this.CanSetClient);
            if (this.IsInDesignMode)
            {
                this.ClienteId   = 90;
                this.Folio       = "123";
                this.SerieSearch = "0000003342601";
                this.Venta       = new Models.SucursalFolio {
                    Folio = "folio", Sucursal = "sucursal"
                };
                this.Productos.Add(new Models.ProductoDevolucion {
                    Item = new ProductoDevolucion {
                        Sucursal = "01", Folio = "123", Serie = "0000003413693", Marca = "FFF", Modelo = "2608", Talla = "27.5", Precio = 799
                    }
                });
                this.Productos.Add(new Models.ProductoDevolucion {
                    Item = new ProductoDevolucion {
                        Sucursal = "01", Folio = "124", Serie = "0000003420542", Marca = "AAA", Modelo = "1234", Talla = "28", Precio = 123.45m
                    }
                });

                this.NuevoCliente = new Client.Models.NuevoCliente {
                    Nombre = "nom", ApPaterno = "ap pa", ApMaterno = "ap ma"
                };
            }
        }
示例#3
0
        private async Task Scan(string ser)
        {
            if (this.Productos.Any())
            {
                var current = this.Productos.Where(i => i.OldItem != null && i.OldItem.Serie == ser).SingleOrDefault();
                if (current != null)
                {
                    if (current.NewItem == null)
                    {
                        var res = MessageBox.Show($"La serie '{ser}' ya está registrada en el cambio\nDesea removerla?", "Confirmar", MessageBoxButton.YesNo, MessageBoxImage.Question);
                        if (res == MessageBoxResult.Yes)
                        {
                            this.Productos.Remove(current);
                        }
                    }
                    else
                    {
                        var res = MessageBox.Show($"La serie '{ser}' ya está registrada en el cambio\nDesea removerla?", "Confirmar", MessageBoxButton.YesNo, MessageBoxImage.Question);
                        if (res == MessageBoxResult.Yes)
                        {
                            current.OldItem = null;
                        }
                    }
                    this.SerieSearch = null;
                    return;
                }

                var curnew = this.Productos.Where(i => i.NewItem != null && i.NewItem.Serie == ser).SingleOrDefault();
                if (curnew != null)
                {
                    this.SerieSearch = null;
                    if (curnew.OldItem == null)
                    {
                        var res = MessageBox.Show($"La serie '{ser}' ya está registrada en el cambio\nDesea removerla?", "Confirmar", MessageBoxButton.YesNo, MessageBoxImage.Question);
                        if (res == MessageBoxResult.Yes)
                        {
                            await _client.ReleaseProductoAsync(curnew.NewItem.Serie);

                            this.Productos.Remove(curnew);
                        }
                    }
                    else
                    {
                        var res = MessageBox.Show($"La serie '{ser}' ya está registrada en el cambio\nDeseas removerla?", "Confirmar", MessageBoxButton.YesNo, MessageBoxImage.Question);
                        if (res == MessageBoxResult.Yes)
                        {
                            await _client.ReleaseProductoAsync(curnew.NewItem.Serie);

                            curnew.NewItem = null;
                        }
                    }
                    return;
                }


                var add = _sale.Productos.Where(i => i.Serie == ser).SingleOrDefault();
                if (add != null)
                {
                    var cur = this.Productos.Where(i => i.OldItem == null &&
                                                   i.NewItem.Corrida == add.Corrida &&
                                                   i.NewItem.Marca == add.Marca &&
                                                   i.NewItem.Modelo == add.Modelo).SingleOrDefault();
                    var old = new Common.Entities.ProductoDevolucion
                    {
                        Id       = add.Id.Value,
                        Sucursal = _sale.Sucursal,
                        Folio    = _sale.Folio,
                        Serie    = add.Serie,
                        Marca    = add.Marca,
                        Modelo   = add.Modelo,
                        Talla    = add.Talla,
                        Corrida  = add.Corrida,
                        Precio   = add.Precio,
                        Pago     = add.precdesc
                    };
                    if (cur != null)
                    {
                        cur.OldItem = old;
                    }
                    else
                    {
                        this.AddItem(old);
                    }

                    this.SerieSearch = null;
                    return;
                }

                var scan = await _proxy.ScanProductoAsync(ser, this.Sucursal.Clave);

                if (scan != null)
                {
                    var svalid = new Common.Constants.Status[] {
                        Common.Constants.Status.AC,
                        Common.Constants.Status.IF,
                        Common.Constants.Status.AB
                    };
                    if (!svalid.Contains(scan.Status) &&
                        !(scan.Status == Status.CA && scan.UsuarioCajaId == this.Cajero.Id))
                    {
                        MessageBox.Show($"{scan.Producto.Serie} - {scan.Status}");
                        return;
                    }

                    var cur = this.Productos.Where(i => i.OldItem != null &&
                                                   i.OldItem.Corrida == scan.Producto.Corrida &&
                                                   i.OldItem.Marca == scan.Producto.Marca &&
                                                   i.OldItem.Modelo == scan.Producto.Modelo &&
                                                   i.NewItem == null).FirstOrDefault();
                    if (cur == null)
                    {
                        cur = this.Productos.Where(i => i.OldItem != null &&
                                                   i.OldItem.Marca == scan.Producto.Marca &&
                                                   i.OldItem.Modelo == scan.Producto.Modelo &&
                                                   i.OldItem.Precio == scan.Producto.Precio &&
                                                   i.NewItem == null).FirstOrDefault();
                    }
                    if (cur == null)
                    {
                        cur = this.Productos.Where(i => i.OldItem != null &&
                                                   i.OldItem.Marca == scan.Producto.Marca &&
                                                   i.OldItem.Modelo == scan.Producto.Modelo &&
                                                   i.NewItem == null).FirstOrDefault();
                    }
                    if (cur == null)
                    {
                        cur = this.Productos.Where(i => i.OldItem != null &&
                                                   i.OldItem.Precio == i.OldItem.Pago &&
                                                   i.OldItem.Precio == scan.Producto.Precio &&
                                                   i.NewItem == null).FirstOrDefault();
                    }

                    if (cur != null)
                    {
                        await _client.RequestProductoAsync(scan.Producto.Serie);

                        cur.NewItem      = _mapper.Map <Models.Producto>(scan.Producto);
                        this.SerieSearch = null;
                    }
                    else
                    {
                        var series = this.Productos.Where(i => i.OldItem != null).Select(i => i.OldItem.Serie).ToArray();
                        //var valid = _sale.Productos.Where(i => //i.Corrida == scan.Producto.Corrida &&
                        //    i.Marca == scan.Producto.Marca
                        //    && i.Modelo == scan.Producto.Modelo
                        //    && !series.Contains(i.Serie)).Any();
                        //if (valid)
                        //{
                        //    await _client.RequestProductoAsync(scan.Producto.Serie);
                        //    this.Productos.Add(new Models.ProductoCambio { NewItem = scan.Producto });
                        //    this.SerieSearch = null;
                        //}
                        //else
                        {
                            var empty = this.Productos.Where(i => i.OldItem != null && i.NewItem == null).FirstOrDefault();
                            if (empty != null)
                            {
                                await _client.RequestProductoAsync(scan.Producto.Serie);

                                empty.NewItem    = _mapper.Map <Models.Producto>(scan.Producto);
                                this.SerieSearch = null;
                            }
                            else
                            {
                                MessageBox.Show($"Producto {ser} no valido");
                            }
                        }
                    }
                    return;
                }

                //var current = _sale.Productos.Where(i => i.Serie == ser).SingleOrDefault();
            }
            else
            {
                var item = await _proxy.ScanProductoDevolucionAsync(ser, cancelacion : false);

                if (item != null && item.Success)
                {
                    this.Venta = new Models.SucursalFolio {
                        Sucursal = item.Producto.Sucursal, Folio = item.Producto.Folio
                    };
                    _sale = _proxy.FindSale(item.Producto.Sucursal, item.Producto.Folio);
                    if (_sale.ClienteId != null)
                    {
                        this.Cliente = _proxy.FindCliente(_sale.ClienteId.Value);
                        if (this.Cliente != null)
                        {
                            this.NuevoCliente = new Models.NuevoCliente
                            {
                                Id        = this.Cliente.Id,
                                Nombre    = this.Cliente.Nombre,
                                ApPaterno = this.Cliente.ApPaterno,
                                ApMaterno = this.Cliente.ApMaterno
                            };
                        }
                    }
                    this.AddItem(item.Producto);
                    this.SerieSearch = null;
                }
                else
                {
                    if (item == null)
                    {
                        MessageBox.Show("Artículo no encontrado", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                    else
                    {
                        MessageBox.Show("Artículo no valido", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            }
            //scans siguientes ya no van al server

            //var ditem = await _proxy.ScanProductoDevolucionAsync(ser);
            //if (ditem != null)
            //{
            //    if (!this.Productos.Any())
            //    {
            //        this.Venta = new Models.SucursalFolio { Sucursal = ditem.Producto.Sucursal, Folio = ditem.Producto.Folio };
            //        var res = _proxy.FindSale(ditem.Producto.Sucursal, ditem.Producto.Folio);
            //        this.Productos.Add(new Models.ProductoCambio { OldItem = ditem.Producto });
            //    }
            //    else
            //    {
            //        var current = this.Productos.Where(i => i.NewItem.Serie == ditem.Producto.Serie).SingleOrDefault();
            //        if (current != null)
            //        {
            //            current.OldItem = ditem.Producto;
            //        }
            //        else
            //        {
            //            //checar en venta existente
            //            this.Productos.Add(new Models.ProductoCambio { OldItem = ditem.Producto });
            //        }
            //    }
            //    this.SerieSearch = null;
            //}
            //else {
            //    var sitem = await _proxy.ScanProductoAsync(serie: ser, sucursal: this.Sucursal.Clave);
            //    if (sitem != null)
            //    {
            //        if (!this.Productos.Any())
            //        {
            //            this.Productos.Add(new Models.ProductoCambio { NewItem = sitem.Producto });
            //        }
            //        else
            //        {
            //            var current = this.Productos.Where(i => i.OldItem.Serie == sitem.Producto.Serie).SingleOrDefault();
            //            if (current != null)
            //            {
            //                current.NewItem = sitem.Producto;
            //            }
            //            else
            //            {
            //                //checar si es corrida de la venta existente
            //                this.Productos.Add(new Models.ProductoCambio { NewItem = sitem.Producto });
            //            }
            //        }
            //        this.SerieSearch = null;
            //    }
            //}
        }