Beispiel #1
0
        public void UpdateTemporaryReceipt(InStockReceipt receipt, IEnumerable <InStockReceiptDetail> 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.InStockReceipts.All.Where(r => r.ID == receipt.ID && !r.IsAudited).SingleOrDefault();

            if (receiptToUpdate == null)
            {
                throw new Exception("不存在该单据");
            }

            // 单据头
            receiptToUpdate.PressNo     = receipt.PressNo;
            receiptToUpdate.Remark      = receipt.Remark;
            receiptToUpdate.PressID     = receipt.PressID;
            receiptToUpdate.SubmittedBy = receipt.SubmittedBy;
            receiptToUpdate.SubmitDate  = DateTime.Now;
            //receiptToUpdate.Press = DbSession.Presss.GetSingle(p => p.ID == receiptToUpdate.PressID);
            // 单据明细
            var td = DbSession.InStockReceiptDetails.Get(d => d.HeaderID == receiptToUpdate.ID);

            foreach (var d in td)
            {
                DbSession.InStockReceiptDetails.Delete(d, false);
            }
            var receiptDetails = useDetails ? details : receipt.Details;
            int sort           = 1;

            foreach (var d in receiptDetails)
            {
                d.ID   = Guid.NewGuid();
                d.Sort = sort++;

                receiptToUpdate.Details.Add(d);
            }

            DbSession.SaveChanges();
        }
Beispiel #2
0
        public void SubmitTemporaryReceipt(InStockReceipt receipt, IEnumerable <InStockReceiptDetail> 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.AuditedBy         = null;
            receipt.BeforeVoidReceipt = null;
            receipt.InvalidReceipt    = null;
            receipt.IsAudited         = false;
            //receipt.Press = DbSession.Presss.GetSingle(p => p.ID == receipt.PressID);

            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.InStockReceipts.Add(receipt);
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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.InStockReceipts.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 InStockReceipt
            {
                ID         = Guid.NewGuid(),
                NO         = GetNO(DateTime.Now.ToString("yyMMdd")),
                PressNo    = theBeforeReceipt.PressNo,
                Remark     = "作废入库单(" + theBeforeReceipt.NO + ")产生的红字单据",
                SubmitDate = DateTime.Now,
                AuditDate  = DateTime.Now,
                IsAudited  = true,
                PressID    = theBeforeReceipt.PressID,

                //Press = DbSession.Presss.GetSingle(p => p.ID == theBeforeReceipt.PressID),
                SubmittedBy       = operatorUser,
                AuditedBy         = operatorUser,
                BeforeVoidReceipt = theBeforeReceipt,
            };

            invalidReceipt.Details =
                (from d in theBeforeReceipt.Details
                 select new InStockReceiptDetail
            {
                ID = Guid.NewGuid(),
                Sort = d.Sort,
                EntryQuantity = -d.EntryQuantity,
                EntryUnitPrice = d.EntryUnitPrice,
                AccountPrice = d.AccountPrice,
                BookID = d.BookID,
                ReceiptHeader = invalidReceipt,
                Book = d.Book
            }).ToList();
            theBeforeReceipt.InvalidReceipt = invalidReceipt;
            DbSession.InStockReceipts.Add(invalidReceipt, false);

            var istj = false;

            foreach (var d in theBeforeReceipt.Details)
            {
                var entryQuantity = -d.EntryQuantity;
                var entryMoney    = -(d.EntryQuantity * (decimal)d.Book.AccountPrice);
                var stock         = d.Book.Stock;
                if (stock == null)
                {
                    stock = new BookStock
                    {
                        ID                  = Guid.NewGuid(),
                        StockOf             = d.Book,
                        PriorPeriodQuantity = 0,
                        PriorPeriodMoney    = 0,
                        EntryQuantity       = entryQuantity,
                        EntryMoney          = entryMoney,
                        OutQuantity         = 0,
                        OutMoney            = 0,
                        StocktakeQuantity   = 0,
                        StocktakeMoney      = 0,
                        DamagedQuantity     = 0,
                        DamagedMoney        = 0,
                        AdjustMoney         = 0,
                        ThisPeriodQuantity  = entryQuantity,
                        ThisPeriodMoney     = entryMoney
                    };
                    DbSession.BookStocks.Add(stock, false);
                }
                else
                {
                    stock.EntryQuantity      += entryQuantity;
                    stock.EntryMoney         += entryMoney;
                    stock.ThisPeriodQuantity += entryQuantity;
                    stock.ThisPeriodMoney    += entryMoney;
                }
                if (!istj)
                {
                    istj = (d.AccountPrice != d.Book.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)
                {
                    if (d.AccountPrice == d.Book.AccountPrice)
                    {
                        continue;
                    }

                    priceAdjustReceipt.Details.Add(new PriceAdjustReceiptDetail
                    {
                        ID              = Guid.NewGuid(),
                        Sort            = sort++,
                        AdjustQuantity  = d.EntryQuantity,
                        NewAccountPrice = d.Book.AccountPrice.GetValueOrDefault(),
                        OldAccountPrice = d.AccountPrice,
                        BookID          = d.BookID,
                        ReceiptHeader   = priceAdjustReceipt,
                        Book            = d.Book
                    });
                }

                DbSession.PriceAdjustReceipts.Add(priceAdjustReceipt, false);
            }

            DbSession.SaveChanges();
        }