예제 #1
0
        public void Ignore_restore_order_for_batch()
        {
            localSession.DeleteEach <Order>();

            var price   = session.Load <TestPrice>(localSession.Query <Price>().First().Id.PriceId);
            var ids     = localSession.Query <Offer>().Select(x => x.ProductId).Distinct().ToArray();
            var product = session.Query <TestProduct>().First(x => !x.Hidden && !ids.Contains(x.Id));
            var offer   = price.Supplier.AddCore(product);

            price.Supplier.SaveCore(session, offer);

            offer.RequestRatio = 5;
            price.Supplier.InvalidateCache(session, ServerUser().Id);

            var fixture = new SmartOrder();

            fixture.Rule.CheckOrderCost     = false;
            fixture.Rule.CheckMinOrderCount = false;
            fixture.Rule.CheckRequestRatio  = false;
            fixture.ProductIds = new [] { offer.Product.Id };
            Fixture(fixture);

            MakeBatch("1|1");
            var orders = localSession.Query <Order>().ToArray();

            Assert.AreEqual(1, orders.Length);
            var order = orders[0];

            Assert.IsFalse(order.Frozen, order.Lines.Implode(x => x.SendError));
            Assert.AreEqual(offer.Id, order.Lines[0].OfferId.OfferId);
        }
예제 #2
0
        public void Reprocess_batch()
        {
            var fixture = new SmartOrder {
                ProductIds = new[] {
                    SafeSmartOrderProductId()
                }
            };

            Fixture(fixture);
            localSession.DeleteEach <BatchLine>();
            localSession.DeleteEach <Order>();

            MakeBatch("1|5");

            var items     = localSession.Query <BatchLine>().ToList();
            var batchLine = items[0];

            Assert.IsTrue(batchLine.Status.HasFlag(ItemToOrderStatus.Ordered));

            batchLine.Quantity = 3;
            Run(new UpdateCommand {
                SyncData  = "Batch",
                AddressId = localSession.Query <Address>().First().Id
            });
            items     = localSession.Query <BatchLine>().ToList();
            batchLine = items[0];
            Assert.IsTrue(batchLine.Status.HasFlag(ItemToOrderStatus.Ordered), batchLine.ToString());
            Assert.AreEqual(3, batchLine.Quantity);
            var lines     = localSession.Query <OrderLine>().ToArray();
            var orderLine = lines[0];

            Assert.AreEqual(1, lines.Length);
            Assert.AreEqual(3, orderLine.Count);
        }
예제 #3
0
        public void Process_batch_request()
        {
            var fixture = new SmartOrder {
                ProductIds = new[] {
                    SafeSmartOrderProductId()
                }
            };

            Fixture(fixture);
            localSession.DeleteEach <BatchLine>();
            localSession.DeleteEach <Order>();

            MakeBatch("1|5\r\n1-asdasd|10");

            var items = localSession.Query <BatchLine>().ToList();

            Assert.AreEqual(2, items.Count, items.Implode());
            var orders = localSession.Query <Order>().ToList();

            Assert.AreEqual(1, orders.Count, items.Implode());
            Assert.IsFalse(orders[0].Frozen);
            var batchLine = items.First(b => b.Quantity == 5);

            Assert.IsNotNull(batchLine.ExportId);
            Assert.IsTrue(batchLine.Status.HasFlag(ItemToOrderStatus.Ordered));
            var orderline = orders.SelectMany(o => o.Lines).FirstOrDefault(l => l.ExportBatchLineId == batchLine.ExportId);

            Assert.IsNotNull(orderline);
        }
예제 #4
0
        public void Smart_order()
        {
            var fixture = new SmartOrder {
                ProductIds = new[] {
                    session.Query <Offer>().First().ProductId
                }
            };

            Fixture(fixture);
            var filename = TempFile("batch.txt", "1|10");

            session.DeleteEach <Order>();
            //что бы избежать сообщения о ожидаемых позициях
            session.DeleteEach <AwaitedItem>();

            StartWait();
            Click("ShowBatch");

            manager.OsDialog.OfType <OpenFileDialog>().Take(1)
            .Subscribe(d => d.FileName = Path.GetFullPath(filename));
            AsyncClickNoWait("Upload");

            WaitWindow("Обмен данными");
            WaitMessageBox("Автоматическая обработка дефектуры завершена.");
            WaitIdle();

            dispatcher.Invoke(() => {
                var items = activeWindow.Descendants <DataGrid>().First(g => g.Name == "ReportLines");
                Assert.That(items.Items.Count, Is.GreaterThan(0));
            });
        }
예제 #5
0
        public void Save_orders()
        {
            var ordersPath = settings.MapPath("Orders");

            if (Directory.Exists(ordersPath))
            {
                Directory.GetFiles(ordersPath).Each(File.Delete);
            }

            localSession.DeleteEach <Order>();
            localSession.DeleteEach <SentOrder>();
            var offer = SafeSmartOrderOffer();

            var externalLineId    = Guid.NewGuid().ToString();
            var externalProductId = Guid.NewGuid().ToString();
            var externalAddressId = Guid.NewGuid().ToString();
            var fixture           = new SmartOrder {
                SynonymMap =
                {
                    Tuple.Create(offer.ProductSynonym, offer.ProductId)
                },
                AddressMap =
                {
                    Tuple.Create(externalAddressId, address.Id)
                }
            };

            fixture.Rule.ParseAlgorithm = "HealthyPeopleSource";
            session.CreateSQLQuery("update usersettings.RetClientsSet set SaveOrders = 1 where ClientCode = :clientId")
            .SetParameter("clientId", ServerUser().Client.Id)
            .ExecuteUpdate();

            session.Transaction.Commit();
            Fixture(fixture);

            var batch = $@"Номер;Аптека;Дата;Код;Товар;ЗаводШК;Производитель;Количество;Приоритет;Цена
{externalLineId};{externalAddressId};{DateTime.Now};{externalProductId};{offer.ProductSynonym};;;1;;";

            Assert.AreEqual(UpdateResult.OK, MakeBatch(batch));
            Assert.AreEqual(1, localSession.Query <Order>().Count(), localSession.Query <BatchLine>().Implode());

            Assert.AreEqual(UpdateResult.OK, Run(new SendOrders(address)));
            var files = Directory.GetFiles(ordersPath);

            Assert.AreEqual(1, files.Length);
            var order    = localSession.Query <SentOrder>().First();
            var expected = $@"Номер;Аптека;Дата;Код;Товар;ЗаводШК;Производитель;Количество;Приоритет;Цена;Поставщик
{externalLineId};{externalAddressId};{order.SentOn};{externalProductId};{order.Lines[0].ProductSynonym};;{order.Lines[0].ProducerSynonym};1;;;{order.Price.Name}";
            var lines    = File.ReadAllText(files[0], Encoding.Default).TrimEnd();

            Assert.AreEqual(expected, lines);
        }
예제 #6
0
        public void Freeze_orders()
        {
            var order   = MakeOrderClean();
            var fixture = new SmartOrder {
                ProductIds = new[] {
                    SafeSmartOrderProductId()
                }
            };

            Fixture(fixture);
            MakeBatch("1|10");

            //здесь может возникнуть NHibernate.UnresolvableObjectException : No row with the given identifier exists
            //это значить что данные в backup не соответсвуют данным в data нужно перезалить данные
            localSession.Refresh(order);
            Assert.IsTrue(order.Frozen);
        }
예제 #7
0
        public void Transit_service_fields()
        {
            var fixture = new SmartOrder {
                ProductIds = new[] {
                    SafeSmartOrderProductId()
                }
            };

            fixture.Rule.ServiceFields = "2";
            Fixture(fixture);
            localSession.DeleteEach <Order>();

            MakeBatch("1|10|test-payload");
            var items = localSession.Query <BatchLine>().ToList();

            Assert.AreEqual(1, items.Count, items.Implode());
            Assert.That(items[0].ParsedServiceFields, Is.EquivalentTo(new Dictionary <string, string> {
                { "2", "test-payload" }
            }));
        }