public void AuditOrder(Guid orderId, Guid auditorId) { var order = DbSession.Orders.All.Where(o => !o.IsAudited).FirstOrDefault(o => o.ID == orderId); if (order == null) { throw new Exception("不存在该订单,订单号:" + orderId); } order.IsAudited = true; order.AuditDate = DateTime.Now; order.AuditUserID = auditorId; // 产生临时出库单 OutStockReceipt receipt = new OutStockReceipt(); receipt.ID = Guid.NewGuid(); receipt.NO = GetLSNO(); receipt.OrderID = orderId; receipt.Remark = "由购物订单产生的出库单,订单号:" + order.NO; receipt.SubmitDate = DateTime.Now; receipt.AuditDate = null; receipt.IsAudited = false; receipt.AuditedBy = null; receipt.BeforeVoidReceipt = null; receipt.InvalidReceipt = null; receipt.Freight = order.Freight; receipt.SubmittedBy = DbSession.Users.GetSingle(u => u.ID == auditorId); int sort = 1; foreach (var item in order.OrderItems) { var newDetail = new OutStockReceiptDetail { ID = Guid.NewGuid(), Sort = sort++, AccountPrice = null, ReceiptHeader = receipt, OutQuantity = item.Quantity, BookID = item.BookID, OutUnitPrice = item.UnitPrice }; receipt.Details.Add(newDetail); } DbSession.OutStockReceipts.Add(receipt); }
public void UpdateTemporaryReceipt(OutStockReceipt receipt, IEnumerable <OutStockReceiptDetail> details = null) { if (receipt == null) { throw new NullReferenceException("receipt参数为null"); } var useDetails = (details != null && details.Count() > 0); if (!useDetails && (receipt.Details == null || receipt.Details.Count <= 0)) { throw new ArgumentException("参数不合法", "receipt.Details"); } var receiptToUpdate = DbSession.OutStockReceipts.All.Where(r => r.ID == receipt.ID && !r.IsAudited).SingleOrDefault(); if (receiptToUpdate == null) { throw new Exception("不存在该单据"); } // 单据头数据 receiptToUpdate.Freight = receipt.Freight; receiptToUpdate.Remark = receipt.Remark; receiptToUpdate.OrderID = receipt.OrderID; //receiptToUpdate.Order = DbSession.Orders.GetSingle(o => o.ID == receipt.OrderID); receiptToUpdate.SubmittedBy = receipt.SubmittedBy; receiptToUpdate.SubmitDate = DateTime.Now; // 单据明细 //receiptToUpdate.Details.Clear(); var td = DbSession.OutStockReceiptDetails.Get(d => d.HeaderID == receiptToUpdate.ID); foreach (var d in td) { DbSession.OutStockReceiptDetails.Delete(d, false); } var receiptDetails = useDetails ? details : receipt.Details; int sort = 1; foreach (var d in receiptDetails) { d.ID = Guid.NewGuid(); d.Sort = sort++; //d.Book = DbSession.Books.GetSingle(b => b.ID == d.BookID); receiptToUpdate.Details.Add(d); } DbSession.SaveChanges(); }
public void SubmitTemporaryReceipt(OutStockReceipt receipt, IEnumerable <OutStockReceiptDetail> details = null) { if (receipt == null) { throw new NullReferenceException("receipt参数为null"); } var useDetails = (details != null && details.Count() > 0); if (!useDetails && (receipt.Details == null || receipt.Details.Count <= 0)) { throw new ArgumentException("参数不合法", "receipt.Details"); } receipt.ID = Guid.NewGuid(); receipt.NO = GetLSNO(); receipt.SubmitDate = DateTime.Now; receipt.AuditDate = null; receipt.IsAudited = false; receipt.AuditedBy = null; receipt.BeforeVoidReceipt = null; receipt.InvalidReceipt = null; var receiptDetaols = useDetails ? details : receipt.Details; int sort = 1; if (useDetails) { receipt.Details.Clear(); } foreach (var d in receiptDetaols) { d.ID = Guid.NewGuid(); d.Sort = sort++; d.AccountPrice = null; d.ReceiptHeader = receipt; if (useDetails) { receipt.Details.Add(d); } } DbSession.OutStockReceipts.Add(receipt); }
public ActionResult ReceiptEdit(ReceiptType type, Guid?id) { var viewName = ""; object receipt = null; switch (type) { case ReceiptType.InStock: { var r = ResolveService <IInStockReceiptService>().GetTemporaryReceipt(id.GetValueOrDefault()); if (r != null) { var _r = r.CopyToViewModel(); _r.Details.Add(new ViewModels.InStockReceiptDetail()); ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "edit"; } else { var _r = new InStockReceipt { NO = "", PressName = "", PressNO = "", Remark = "", Details = new List <ViewModels.InStockReceiptDetail>() { new ViewModels.InStockReceiptDetail() } }; ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "add"; } viewName = "InStockEdit"; break; } case ReceiptType.OutStock: { var r = ResolveService <IOutStockReceiptService>().GetTemporaryReceipt(id.GetValueOrDefault()); if (r != null) { var _r = r.CopyToViewModel(); _r.Details.Add(new ViewModels.OutStockReceiptDetail()); ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "edit"; } else { var _r = new OutStockReceipt { NO = "", OrderNO = "", Remark = "", Details = new List <ViewModels.OutStockReceiptDetail>() { new ViewModels.OutStockReceiptDetail() } }; ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "add"; } viewName = "OutStockEdit"; break; } case ReceiptType.Stocktake: { var r = ResolveService <IStocktakeReceiptService>().GetTemporaryReceipt(id.GetValueOrDefault()); if (r != null) { var _r = r.CopyToViewModel(); _r.Details.Add(new ViewModels.StocktakeReceiptDetail()); ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "edit"; } else { var _r = new StocktakeReceipt { NO = "", Remark = "", Details = new List <ViewModels.StocktakeReceiptDetail>() { new ViewModels.StocktakeReceiptDetail() } }; ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "add"; } viewName = "StocktakeEdit"; break; } case ReceiptType.StockDamaged: { var r = ResolveService <IStockDamagedReceiptService>().GetTemporaryReceipt(id.GetValueOrDefault()); if (r != null) { var _r = r.CopyToViewModel(); _r.Details.Add(new ViewModels.StockDamagedReceiptDetail()); ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "edit"; } else { var _r = new StockDamagedReceipt { NO = "", Remark = "", Details = new List <ViewModels.StockDamagedReceiptDetail>() { new ViewModels.StockDamagedReceiptDetail() } }; ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "add"; } viewName = "StockDamagedEdit"; break; } case ReceiptType.PriceAdjust: { var r = ResolveService <IPriceAdjustReceiptService>().GetTemporaryReceipt(id.GetValueOrDefault()); if (r != null) { var _r = r.CopyToViewModel(); _r.Details.Add(new ViewModels.PriceAdjustReceiptDetail()); ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "edit"; } else { var _r = new PriceAdjustReceipt { NO = "", Remark = "", Details = new List <ViewModels.PriceAdjustReceiptDetail>() { new ViewModels.PriceAdjustReceiptDetail() } }; ViewBag.Detail = Util.SerializeToJson(_r.Details); receipt = _r; ViewBag.EditMode = "add"; } viewName = "PriceAdjustEdit"; break; } default: break; } return(View(viewName, receipt)); }
public void InvalidReceipt(Guid receiptId, Guid operatorId) { var period = DbSession.SysVariables.All.SingleOrDefault(v => v.Name.Equals("NY")); if (period == null) { throw new Exception("取不到当前年月"); } if (!period.Value.Equals(DateTime.Now.ToString("yyMM"))) { throw new Exception("系统年月与当前年月不符,审核失败"); } var theBeforeReceipt = DbSession.OutStockReceipts.All.Where(r => r.IsAudited && r.ID == receiptId).SingleOrDefault(); if (theBeforeReceipt == null) { throw new Exception("不存在该单据"); } if (theBeforeReceipt.InvalidReceipt != null) { throw new Exception("该单据已经作废"); } if (theBeforeReceipt.BeforeVoidReceipt != null) { throw new Exception("该单据由作废单据产生,不能作废"); } var operatorUser = DbSession.Users.GetSingle(u => u.ID == operatorId); var invalidReceipt = new OutStockReceipt { ID = Guid.NewGuid(), NO = GetNO(DateTime.Now.ToString("yyMMdd")), Freight = -theBeforeReceipt.Freight, Remark = "作废出库单(" + theBeforeReceipt.NO + ")产生的红字单据", SubmitDate = DateTime.Now, AuditDate = DateTime.Now, IsAudited = true, OrderID = theBeforeReceipt.OrderID, SubmittedBy = operatorUser, AuditedBy = operatorUser, Order = theBeforeReceipt.Order, BeforeVoidReceipt = theBeforeReceipt }; invalidReceipt.Details = (from d in theBeforeReceipt.Details select new OutStockReceiptDetail { ID = Guid.NewGuid(), Sort = d.Sort, OutQuantity = -d.OutQuantity, OutUnitPrice = d.OutUnitPrice, AccountPrice = d.AccountPrice, BookID = d.BookID, ReceiptHeader = invalidReceipt, Book = d.Book }).ToList(); theBeforeReceipt.InvalidReceipt = invalidReceipt; DbSession.OutStockReceipts.Add(invalidReceipt, false); bool istj = false; foreach (var d in theBeforeReceipt.Details) { var stock = d.Book.Stock; var outQuantity = -d.OutQuantity; var outMoney = -(d.OutQuantity * (decimal)d.Book.AccountPrice); if (stock == null) { stock = new BookStock { ID = Guid.NewGuid(), StockOf = d.Book, PriorPeriodQuantity = 0, PriorPeriodMoney = 0, EntryQuantity = 0, EntryMoney = 0, OutQuantity = outQuantity, OutMoney = outMoney, StocktakeQuantity = 0, StocktakeMoney = 0, DamagedQuantity = 0, DamagedMoney = 0, AdjustMoney = 0, ThisPeriodQuantity = -outQuantity, ThisPeriodMoney = -outMoney }; DbSession.BookStocks.Add(stock, false); } else { stock.OutQuantity += outQuantity; stock.OutMoney += outMoney; stock.ThisPeriodQuantity -= outQuantity; stock.ThisPeriodMoney -= outMoney; } if (!istj) { istj = (d.Book.AccountPrice != d.AccountPrice); } } if (istj) { var priceAdjustReceipt = new PriceAdjustReceipt { ID = Guid.NewGuid(), NO = GetTJNO(DateTime.Now.ToString("yyMMdd")), Remark = "作废出库单(" + theBeforeReceipt.NO + ")产生的调价单", SubmitDate = DateTime.Now, AuditDate = DateTime.Now, IsAudited = true, SubmittedBy = operatorUser, AuditedBy = operatorUser }; int sort = 1; foreach (var d in theBeforeReceipt.Details) { priceAdjustReceipt.Details.Add(new PriceAdjustReceiptDetail { ID = Guid.NewGuid(), Sort = sort++, AdjustQuantity = d.OutQuantity, NewAccountPrice = d.AccountPrice.GetValueOrDefault(), OldAccountPrice = d.Book.AccountPrice.GetValueOrDefault(), BookID = d.BookID, ReceiptHeader = priceAdjustReceipt, Book = d.Book }); } DbSession.PriceAdjustReceipts.Add(priceAdjustReceipt, false); } DbSession.SaveChanges(); }