public void AddBillDetail(string billNo, IList <ActingBill> actingBillList, User user) { Bill oldBill = this.CheckAndLoadBill(billNo, true); #region 检查状态 if (oldBill.Status != BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE) { throw new BusinessErrorException("Bill.Error.StatusErrorWhenAddDetail", oldBill.Status, oldBill.BillNo); } #endregion if (actingBillList != null && actingBillList.Count > 0) { foreach (ActingBill actingBill in actingBillList) { ActingBill oldActingBill = this.actingBillMgr.LoadActingBill(actingBill.Id); oldActingBill.CurrentBillQty = actingBill.CurrentBillQty; oldActingBill.CurrentDiscount = actingBill.CurrentDiscount; BillDetail billDetail = this.billDetailMgr.TransferAtingBill2BillDetail(oldActingBill); billDetail.Bill = oldBill; oldBill.AddBillDetail(billDetail); if (billDetail.IsProvEst && !oldBill.HasProvEst) { oldBill.HasProvEst = true; } this.billDetailMgr.CreateBillDetail(billDetail); //扣减ActingBill数量和金额 this.actingBillMgr.ReverseUpdateActingBill(null, billDetail, user); } oldBill.LastModifyDate = DateTime.Now; oldBill.LastModifyUser = user; this.UpdateBill(oldBill); } }
public Bill VoidBill(string billNo, User user) { Bill oldBill = this.CheckAndLoadBill(billNo, true); DateTime dateTimeNow = DateTime.Now; #region 检查状态 if (oldBill.Status != BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE) { throw new BusinessErrorException("Bill.Error.StatusErrorWhenVoid", oldBill.Status, oldBill.BillNo); } #endregion #region 创建作废账单 Bill voidBill = new Bill(); CloneHelper.CopyProperty(oldBill, voidBill, this.BillCloneField); voidBill.BillNo = this.numberControlMgr.GenerateNumber(BusinessConstants.CODE_PREFIX_BILL_RED); voidBill.Status = BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE; if (oldBill.Discount.HasValue) { voidBill.Discount = 0 - oldBill.Discount.Value; } voidBill.ReferenceBillNo = oldBill.BillNo; voidBill.BillType = BusinessConstants.CODE_MASTER_BILL_TYPE_VALUE_CANCEL; voidBill.CreateDate = dateTimeNow; voidBill.CreateUser = user; voidBill.LastModifyDate = dateTimeNow; voidBill.LastModifyUser = user; this.CreateBill(voidBill); #endregion #region 创建作废账单明细 foreach (BillDetail oldBillDetail in oldBill.BillDetails) { BillDetail voidBillDetail = new BillDetail(); CloneHelper.CopyProperty(oldBillDetail, voidBillDetail, this.BillDetailCloneField); voidBillDetail.BilledQty = 0 - oldBillDetail.BilledQty; voidBillDetail.Discount = 0 - oldBillDetail.Discount; voidBillDetail.OrderAmount = 0 - oldBillDetail.OrderAmount; voidBillDetail.Bill = voidBill; this.billDetailMgr.CreateBillDetail(voidBillDetail); voidBill.AddBillDetail(voidBillDetail); //反向更新ActingBill this.actingBillMgr.ReverseUpdateActingBill(null, voidBillDetail, user); } #endregion #region 记录开票事务 foreach (BillDetail billDetail in oldBill.BillDetails) { this.billTransactionMgr.RecordBillTransaction(billDetail, user, true); } #endregion #region 更新原账单 oldBill.ReferenceBillNo = voidBill.BillNo; oldBill.Status = BusinessConstants.CODE_MASTER_STATUS_VALUE_VOID; oldBill.LastModifyDate = dateTimeNow; oldBill.LastModifyUser = user; //原账单暂估标记去掉 oldBill.HasProvEst = false; this.UpdateBill(oldBill); #endregion return(voidBill); }