public void Doc_Flow() { //На складе есть Папаверин в количестве 5шт. Assert.AreEqual(stock.Quantity, 5); Assert.AreEqual(stock.ReservedQuantity, 0); //Мы создаем документ списание на 3 упаковки, после того как строка папаверина //добавлена и документ сохранен, на складе у нас будет - Папаверин 2шт, 3шт в резерве var line = new ReturnLine(stock, 3); doc.Lines.Add(line); Assert.AreEqual(stock.Quantity, 2); Assert.AreEqual(stock.ReservedQuantity, 3); Assert.AreEqual(line.Quantity, 3); //Если мы закроем документ то получим - Папаверен 2шт, 0шт в резерве doc.Post(session); Assert.AreEqual(stock.Quantity, 2); Assert.AreEqual(stock.ReservedQuantity, 0); Assert.AreEqual(line.Quantity, 3); //Если мы снова откроем документ, то получим что было до закрытия - Папаверин 2шт, 3шт в резерве doc.UnPost(session); Assert.AreEqual(stock.Quantity, 2); Assert.AreEqual(stock.ReservedQuantity, 3); Assert.AreEqual(line.Quantity, 3); //Если документ будет удален то на складе получим - Папаверин 5шт, 0шт в резерве doc.BeforeDelete(); Assert.AreEqual(stock.Quantity, 5); Assert.AreEqual(stock.ReservedQuantity, 0); }
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); }