public void Doc_Flow() { //На складе есть Папаверин в количестве 5 шт. Assert.AreEqual(stock.Quantity, 5); // кратность 10 var line = new UnpackingLine(stock, 10); doc.Lines.Add(line); session.Save(line); session.Save(doc); session.Flush(); // после создания распаковки - распакованная упаковка в резерве Assert.AreEqual(stock.Quantity, 4); Assert.AreEqual(stock.ReservedQuantity, 1); Assert.AreEqual(line.SrcQuantity, 1); Assert.AreEqual(line.Quantity, 10); var dstStock = line.DstStock; Assert.AreEqual(dstStock.ReservedQuantity, 10); Assert.AreEqual(dstStock.Quantity, 10); Assert.AreEqual(line.RetailCost, 1.26m); Assert.AreEqual(dstStock.RetailCost, 1.26m); Assert.AreEqual(line.Delta, -0.07m); Assert.AreEqual(dstStock.Multiplicity, 10); Assert.IsTrue(dstStock.Unpacked); // распакованный Assert.IsFalse(stock.Unpacked); // нераспакованный // проводка: склад -1 целая, +10 распакованная doc.Post(); session.Save(doc); session.Flush(); Assert.AreEqual(stock.Quantity, 4); Assert.AreEqual(stock.ReservedQuantity, 0); Assert.AreEqual(dstStock.Quantity, 10); Assert.AreEqual(dstStock.ReservedQuantity, 0); Assert.IsFalse(line.Moved); // не было движения //Если снова откроем документ, то получим что было до закрытия doc.UnPost(); session.Save(doc); session.Flush(); Assert.AreEqual(stock.Quantity, 4); Assert.AreEqual(stock.ReservedQuantity, 1); Assert.AreEqual(dstStock.Quantity, 0); Assert.AreEqual(dstStock.ReservedQuantity, 10); //Если документ будет удален то на складе получим -Папаверин 5 шт doc.BeforeDelete(); session.Delete(doc); session.Flush(); Assert.AreEqual(stock.Quantity, 5); Assert.AreEqual(stock.ReservedQuantity, 0); Assert.AreEqual(dstStock.Quantity, 0); Assert.AreEqual(dstStock.ReservedQuantity, 0); }
// Закрыть чек Enter public IEnumerable <IResult> Close() { if (Lines.Count == 0) { Manager.Error("Чек не открыт"); yield break; } var checkout = new Checkout(Lines.Sum(x => x.RetailSum)); yield return(new DialogResult(checkout)); var check = new Check(User, Address, Lines, (CheckType)checkType); check.Charge = checkout.Change.Value.GetValueOrDefault(); check.Payment = checkout.Amount.Value.GetValueOrDefault(); check.PaymentByCard = checkout.CardAmount.Value.GetValueOrDefault(); var waybillSettings = Settings.Value.Waybills.First(x => x.BelongsToAddress.Id == Address.Id); UnpackingDoc UnPackDoc = null; if (Lines.Where(x => x.SourceStock != null).Count() > 0) { UnPackDoc = new UnpackingDoc(Address, User); foreach (var line in check.Lines) { if (line.SourceStock != null) { var uline = new UnpackingLine(line.SourceStock, line.Stock); UnPackDoc.Lines.Add(uline); } } UnPackDoc.UpdateStat(); UnPackDoc.Post(); } Env.Query(s => { using (var trx = s.BeginTransaction()) { if (Lines.Where(x => x.SourceStock != null).Count() > 0) { s.Insert(UnPackDoc); UnPackDoc.Lines.Each(x => x.UnpackingDocId = UnPackDoc.Id); foreach (var uline in UnPackDoc.Lines) { s.Insert("AnalitF.Net.Client.Models.Inventory.Stock", uline.DstStock); s.Update("AnalitF.Net.Client.Models.Inventory.Stock", uline.SrcStock); s.Insert(uline); UnPackDoc.PostStockActions(); s.Insert(uline.SrcStockAction); s.Insert(uline.DstStockAction); } } s.Insert(check); Lines.Each(x => x.CheckId = check.Id); Lines.Each(x => x.Doc = check); foreach (var line in check.Lines) { if (line.Stock != null) { var stock = s.Get <Stock>(line.Stock.Id); s.Insert(line.UpdateStock(stock, (CheckType)checkType)); s.Update(stock); } s.Insert(line); } trx.Commit(); } if (!String.IsNullOrEmpty(Settings.Value.CheckPrinter)) { check.Print(Settings.Value.CheckPrinter, waybillSettings); } }).Wait(); Bus.SendMessage(nameof(Stock), "db"); Bus.SendMessage(nameof(Check), "db"); Bus.SendMessage(nameof(UnpackingDoc), "db"); Reset(); }
public void Exchange() { localSession.Connection.Execute(@"delete from Stocks; delete from StockActions;"); session.Connection.Execute(@"delete from inventory.Stocks;"); session.Connection.Execute(@"delete from inventory.StockActions;"); session.Connection.Execute(@"delete from Documents.DocumentHeaders;"); var stockCount = session.Connection.Query <object>("select * from inventory.Stocks").ToArray(); var actions = session.Connection.Query <object>("select * from inventory.StockActions").ToArray(); stockCount = localSession.Connection.Query <object>("select * from Stocks").ToArray(); actions = localSession.Connection.Query <object>("select * from StockActions").ToArray(); Run(new SyncCommand()); var fixture = new CreateWaybill(); Fixture(fixture); Run(new UpdateCommand("Waybills")); var waybill = localSession.Load <Waybill>(fixture.Waybill.Log.Id); var stockids = waybill.Lines.Where(x => x.StockId != null).Select(x => x.StockId).ToArray(); var map = localSession.Query <Stock>().Where(x => stockids.Contains(x.ServerId)).ToDictionary(x => x.ServerId); waybill.Lines.Each(y => { y.Stock = map.GetValueOrDefault(y.StockId); }); waybill.Stock(localSession); // чек +0 сток = 33 +1 стокакшин = 34 var check = new Check(localSession.Query <User>().First(), address, new[] { new CheckLine(waybill.Lines[0].Stock, 1), }, CheckType.SaleBuyer); check.Lines.Each(x => x.Doc = check); localSession.Save(check); localSession.SaveEach(check.Lines); localSession.SaveEach(check.Lines.Select(x => x.UpdateStock(x.Stock, CheckType.SaleBuyer))); // распаковка +1 сток = 34 +2 стокакшин = 36 var unpackingDoc = new UnpackingDoc(address, localSession.Query <User>().First()); var unpackingLine = new UnpackingLine(waybill.Lines[1].Stock, 10); unpackingDoc.Lines.Add(unpackingLine); unpackingDoc.Post(); unpackingDoc.PostStockActions(); localSession.Save(unpackingDoc); foreach (var line in unpackingDoc.Lines) { localSession.Save(line); } unpackingDoc.PostStockActions(); foreach (var line in unpackingDoc.Lines) { localSession.Save(line.SrcStockAction); localSession.Save(line.DstStockAction); } // Списание +0 сток = 34 +1 стокакшин = 37 var writeoffDoc = new WriteoffDoc(address, localSession.Query <User>().First()); var writeoffLine = new WriteoffLine(waybill.Lines[2].Stock, 1); writeoffDoc.Lines.Add(writeoffLine); writeoffDoc.Post(localSession); localSession.Save(writeoffDoc); //Возврат +0 сток = 34 +1 стокакшин = 38 var ReturnDoc = new ReturnDoc(address, localSession.Query <User>().First()); ReturnDoc.Supplier = waybill.Supplier; var ReturnLine = new ReturnLine(waybill.Lines[3].Stock, 1); ReturnDoc.Lines.Add(ReturnLine); ReturnDoc.Post(localSession); localSession.Save(ReturnDoc); //переоценка +1 сток = 35 +2 стокакшин = 40 var ReassessmentDoc = new ReassessmentDoc(address, localSession.Query <User>().First()); var stock = waybill.Lines[4].Stock.Copy(); stock.RetailCost += 10; var ReassessmentLine = new ReassessmentLine(waybill.Lines[4].Stock, stock); ReassessmentDoc.Lines.Add(ReassessmentLine); ReassessmentDoc.Post(localSession); localSession.Save(ReassessmentDoc); //переоценка +0 сток = 35 +1 стокакшин = 41 var InventoryDoc = new InventoryDoc(address, localSession.Query <User>().First()); var InventoryLine = new InventoryLine(InventoryDoc, waybill.Lines[5].Stock, 5, localSession); InventoryDoc.Lines.Add(InventoryLine); InventoryDoc.Post(); localSession.Save(InventoryDoc); //Перемещение +1 сток = 36 +2 стокакшин = 43 var DisplacementDoc = new DisplacementDoc(address, localSession.Query <User>().First()); var DisplacementLine = new DisplacementLine(waybill.Lines[6].Stock, waybill.Lines[6].Stock.Copy(), 1); DisplacementDoc.Lines.Add(DisplacementLine); DisplacementDoc.Post(localSession); localSession.Save(DisplacementDoc); Run(new SyncCommand()); stockCount = session.Connection.Query <object>("select * from inventory.Stocks").ToArray(); actions = session.Connection.Query <object>("select * from inventory.StockActions").ToArray(); Assert.AreEqual(36, stockCount.Length); Assert.AreEqual(43, actions.Length); Run(new SyncCommand()); stockCount = session.Connection.Query <object>("select * from inventory.Stocks").ToArray(); actions = session.Connection.Query <object>("select * from inventory.StockActions").ToArray(); Assert.AreEqual(36, stockCount.Length); Assert.AreEqual(43, actions.Length); }