Exemple #1
0
        public void BarcodeScanned()
        {
            BarcodeProducts BarcodeProduct = new BarcodeProducts()
            {
                Product  = session.Query <Product>().First(),
                Producer = session.Query <Producer>().First(),
                Barcode  = "30"
            };

            model.User.IsStockEnabled     = true;
            model.Waybill.IsCreatedByUser = true;
            session.Save(BarcodeProduct);
            var result = model.BarcodeScanned("30").GetEnumerator();

            result.MoveNext();
            var dialog = ((AddWaybillLineFromCatalog)((DialogResult)result.Current).Model);

            dialog.SupplierCost.Value = 10;
            dialog.Quantity.Value     = 3;
            dialog.OK();
            result.MoveNext();

            Assert.AreEqual(BarcodeProduct.Producer.Id, model.CurrentWaybillLine.Value.ProducerId);
            Assert.AreEqual(BarcodeProduct.Product.Id, model.CurrentWaybillLine.Value.ProductId);
        }
Exemple #2
0
        public IEnumerable <IResult> BarcodeScanned(string barcode)
        {
            if (checkType == CheckType.CheckReturn)
            {
                Warning.Show(Common.Tools.Message.Warning($"При открытом документе возврат, сканирование не возможено"));
                yield break;
            }
            var line = Lines.FirstOrDefault(x => x.Barcode == barcode && !x.Confirmed);

            if (line != null)
            {
                line.ConfirmedQuantity++;
                yield break;
            }
            var stocks = Env.Query(s => Stock.AvailableStocks(s, Address).Where(x => x.Barcode == barcode).ToArray()).Result;

            if (stocks.Length == 0)
            {
                if (Settings.Value.FreeSale)
                {
                    BarcodeProducts BarcodeProduct = Session.Query <BarcodeProducts>()
                                                     .Where(x => x.Barcode == barcode).FirstOrDefault();
                    if (BarcodeProduct != null)
                    {
                        var inputQuantity = new InputQuantityRetailCost(BarcodeProduct);
                        yield return(new DialogResult(inputQuantity, resizable: false));

                        if (!inputQuantity.WasCancelled)
                        {
                            AddBarcodeProduct(inputQuantity.BarcodeProduct.Value,
                                              (uint)inputQuantity.Quantity.Value, (decimal)inputQuantity.RetailCost.Value);
                            yield break;
                        }
                    }
                }
                else
                {
                    Manager.Warning($"Товар с кодом {barcode} не найден");
                    yield break;
                }
            }
            if (stocks.Length == 1)
            {
                AddStock(stocks[0]);
                yield break;
            }

            var model = new ExpSelector(stocks.Select(x => x.Exp.GetValueOrDefault()).Distinct().OrderBy(x => x).ToArray());

            model.Name = $"Укажите срок годности - {stocks[0].Product}";
            yield return(new DialogResult(model));

            var first = stocks.First(x => x.Exp == model.CurrentExp);

            AddStock(first);
        }
 public CheckLine(BarcodeProducts barcodeProduct, uint quantity, decimal retailCost)
 {
     BarcodeProduct = barcodeProduct;
     Barcode        = barcodeProduct.Barcode;
     Product        = barcodeProduct.Product.Name;
     ProductId      = barcodeProduct.Product.Id;
     CatalogId      = barcodeProduct.Product.CatalogId;
     Producer       = barcodeProduct.Producer.Name;
     ProducerId     = barcodeProduct.Producer.Id;
     Quantity       = quantity;
     RetailCost     = retailCost;
 }
Exemple #4
0
        private void AddBarcodeProduct(BarcodeProducts item, uint quantity, decimal retailCost)
        {
            if (checkType == null)
            {
                checkType = CheckType.SaleBuyer;
            }
            var exists = Lines.FirstOrDefault(x => x.BarcodeProduct.Id == item.Id && x.RetailCost == retailCost);

            if (exists != null)
            {
                exists.Quantity += quantity;
            }
            else
            {
                var line = new CheckLine(item, quantity, retailCost);
                Lines.Add(line);
                CurrentLine.Value = line;
            }
        }
Exemple #5
0
 public AddWaybillLineFromCatalog(BarcodeProducts barcodeProducts)
 {
     InitFields();
     DisplayName           = "Добавление из каталога";
     CurrentCatalog        = new NotifyValue <Catalog>();
     CatalogTerm           = new NotifyValue <string>();
     ProducerTerm          = new NotifyValue <string>();
     CurrentProducer       = new NotifyValue <Producer>();
     WasCancelled          = true;
     IsOkEnabled.Value     = false;
     CurrentCatalog.Value  = Session.Get <Catalog>(barcodeProducts.Product.CatalogId);
     CatalogTerm.Value     = Session.Get <Catalog>(barcodeProducts.Product.CatalogId).FullName;
     CurrentProducer.Value = Session.Get <Producer>(barcodeProducts.Producer.Id);
     ProducerTerm.Value    = Session.Get <Producer>(barcodeProducts.Producer.Id).Name;
     CurrentCatalog.Changed()
     .Merge(CurrentProducer.Changed())
     .Merge(SupplierCost.Changed())
     .Merge(Quantity.Changed())
     .Subscribe(_ => IsOkEnabled.Value = CurrentCatalog.Value != null && CurrentProducer.Value != null && SupplierCost.Value > 0 && Quantity.Value > 0);
 }
        public IEnumerable <IResult> BarcodeScanned(string barcode)
        {
            if (!User.IsStockEnabled || !CanAddFromCatalog)
            {
                yield break;
            }

            BarcodeProducts BarcodeProduct = Session.Query <BarcodeProducts>()
                                             .Where(x => x.Barcode == barcode).FirstOrDefault();

            if (BarcodeProduct != null)
            {
                var dlg = new AddWaybillLineFromCatalog(BarcodeProduct);
                yield return(new DialogResult(dlg));

                if (dlg.WasCancelled)
                {
                    yield break;
                }
                var line = new WaybillLine(Waybill)
                {
                    CatalogId    = dlg.CurrentCatalog.Value.Id,
                    ProductId    = Session.Query <Product>().FirstOrDefault(r => r.CatalogId == dlg.CurrentCatalog.Value.Id)?.Id,
                    Product      = dlg.CurrentCatalog.Value.FullName,
                    ProducerId   = dlg.CurrentProducer.Value.Id,
                    Producer     = dlg.CurrentProducer.Value.Name,
                    SupplierCost = dlg.SupplierCost.Value,
                    Quantity     = dlg.Quantity.Value
                };
                CurrentLine.Value  = Lines.Value.AddNewItem(line);
                CurrentWaybillLine = CurrentLine.OfType <WaybillLine>().ToValue();
            }
            else
            {
                Manager.Notify("Товар по штрихкоду не найден");
            }
        }
        public void Setup()
        {
            settings.Waybills.Add(new WaybillSettings(user, address));
            session.DeleteEach <Stock>();
            session.DeleteEach <BarcodeProducts>();
            model   = Open(new Frontend2());
            catalog = session.Query <Catalog>().First();
            stock   = new Stock()
            {
                Product          = catalog.FullName,
                CatalogId        = catalog.Id,
                Status           = StockStatus.Available,
                RejectStatus     = RejectStatus.NotDefective,
                Address          = address,
                RetailCost       = 1,
                Quantity         = 5,
                ReservedQuantity = 0,
                Barcode          = "10",
                ProductId        = 1,
                Exp = SystemTime.Now()
            };
            stateless.Insert(stock);

            var product1     = GetProduct("АЦЕТИЛСАЛИЦИЛОВАЯ КИСЛОТА табл. 0.5 г N10");
            var stockForList = new Stock(session, product1, address, StockStatus.Available, 133)
            {
                Quantity = 5,
                Barcode  = "4605635002748",
                Exp      = SystemTime.Now()
            };

            stateless.Insert(stockForList);

            var product2 = GetProduct("АЦЕТИЛСАЛИЦИЛОВАЯ КИСЛОТА табл. 0.5г N20");

            stockForList = new Stock(session, product2, address, StockStatus.Available, 132)
            {
                Quantity = 5,
                Barcode  = "4605635002748",
                Exp      = SystemTime.Now()
            };
            stateless.Insert(stockForList);

            var products = new[] {
                GetProduct("АСПИРИН БАЙЕР табл. 100мг N20"),
                GetProduct("АСПИРИН БАЙЕР табл. 500 мг N10"),
                GetProduct("АСПИРИН БАЙЕР табл. 500 мг N10"),
            };

            for (int i = 0; i < 3; i++)
            {
                stockForList = new Stock(session, products[i], address, StockStatus.Available, 132)
                {
                    Address  = address,
                    Quantity = 2 + i,
                };
                stateless.Insert(stockForList);
            }

            BarcodeProduct = new BarcodeProducts()
            {
                Product  = product1,
                Producer = session.Query <Producer>().First(),
                Barcode  = "30"
            };
            stateless.Insert(BarcodeProduct);

            session.DeleteEach <Check>();
            session.Flush();
        }
Exemple #8
0
 public InputQuantityRetailCost(BarcodeProducts barcodeProduct)
 {
     InitFields();
     BarcodeProduct.Value = barcodeProduct;
     WasCancelled         = true;
 }