Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
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));
        }
Ejemplo n.º 5
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.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();
        }