private IList <PlannedBill> ConvertTransformerToPlannedBill(List <Transformer> transformerList) { if (transformerList == null || transformerList.Count == 0) { return(null); } IList <PlannedBill> plannedBillList = new List <PlannedBill>(); foreach (Transformer transformer in transformerList) { PlannedBill plannedBill = ThePlannedBillMgr.LoadPlannedBill(transformer.Id); plannedBill.CurrentActingQty = transformer.CurrentQty; plannedBillList.Add(plannedBill); } return(plannedBillList); }
public ActingBill ManualCreateActingBill(PlannedBill plannedBill, LocationLotDetail locationLotDetail, User user) { IList <LocationLotDetail> locationLotDetailList = this.locationLotDetailMgr.GetLocationLotDetail(plannedBill); if (locationLotDetailList != null && locationLotDetailList.Count > 0) { decimal actingQty = Math.Round(plannedBill.CurrentActingQty * plannedBill.UnitQty, 8); foreach (LocationLotDetail currentLocationLotDetail in locationLotDetailList) { if (actingQty > 0) { #region 更新库存寄售标记 if (actingQty - currentLocationLotDetail.Qty >= 0) { actingQty -= currentLocationLotDetail.Qty; currentLocationLotDetail.IsConsignment = false; currentLocationLotDetail.PlannedBill = null; } else { //不支持同一库存记录进行部分结算 throw new BusinessErrorException("Location.Error.PlannedBill.CantSplitInventory"); } this.locationLotDetailMgr.UpdateLocationLotDetail(currentLocationLotDetail); #endregion } else { break; } } } #region 创建ActBill ActingBill actingBill = this.CreateActingBill(plannedBill, locationLotDetail, user); #endregion return(actingBill); }
public void RecordBillTransaction(PlannedBill plannedBill, ActingBill actingBill, LocationLotDetail locationLotDetail, User user) { #region 记BillTransaction DateTime dateTimeNow = DateTime.Now; BillTransaction billTransaction = new BillTransaction(); billTransaction.OrderNo = plannedBill.OrderNo; billTransaction.ExternalReceiptNo = plannedBill.ExternalReceiptNo; billTransaction.ReceiptNo = plannedBill.ReceiptNo; billTransaction.Item = plannedBill.Item.Code; billTransaction.ItemDescription = plannedBill.Item.Description; billTransaction.Uom = plannedBill.Uom.Code; billTransaction.BillAddress = plannedBill.BillAddress.Code; billTransaction.BillAddressDescription = plannedBill.BillAddress.Address; billTransaction.Party = plannedBill.BillAddress.Party.Code; billTransaction.PartyName = plannedBill.BillAddress.Party.Name; billTransaction.Qty = plannedBill.CurrentActingQty; billTransaction.EffectiveDate = DateTime.Parse(dateTimeNow.ToShortDateString()); //仅保留年月日; billTransaction.TransactionType = plannedBill.TransactionType; billTransaction.PlannedBill = plannedBill.Id; billTransaction.CreateUser = user.Code; billTransaction.CreateDate = dateTimeNow; billTransaction.ActingBill = actingBill.Id; billTransaction.LocationFrom = plannedBill.LocationFrom; billTransaction.PartyFrom = plannedBill.PartyFrom; billTransaction.IpNo = plannedBill.IpNo; billTransaction.ReferenceItemCode = plannedBill.ReferenceItemCode; if (locationLotDetail != null) { billTransaction.Location = locationLotDetail.Location.Code; billTransaction.LocationName = locationLotDetail.Location.Name; billTransaction.HuId = locationLotDetail.Hu != null ? locationLotDetail.Hu.HuId : string.Empty; billTransaction.LotNo = locationLotDetail.LotNo; billTransaction.BatchNo = locationLotDetail.Id; } this.CreateBillTransaction(billTransaction); #endregion }
public IList <PlannedBill> PopulateSelectedData() { if (this.GV_List.Rows != null && this.GV_List.Rows.Count > 0) { IList <PlannedBill> plannedBillList = new List <PlannedBill>(); foreach (GridViewRow row in this.GV_List.Rows) { CheckBox checkBoxGroup = row.FindControl("CheckBoxGroup") as CheckBox; if (checkBoxGroup.Checked) { HiddenField hfId = row.FindControl("hfId") as HiddenField; TextBox tbCurrentActingQty = row.FindControl("tbCurrentActingQty") as TextBox; PlannedBill plannedBill = ThePlannedBillMgr.LoadPlannedBill(int.Parse(hfId.Value)); plannedBill.CurrentActingQty = tbCurrentActingQty.Text.Trim() == string.Empty ? 0 : decimal.Parse(tbCurrentActingQty.Text.Trim()); plannedBillList.Add(plannedBill); } } return(plannedBillList); } return(null); }
private ActingBill RetriveActingBill(PlannedBill plannedBill, DateTime dateTimeNow, User user) { DateTime effectiveDate = DateTime.Parse(plannedBill.EffectiveDate.ToShortDateString()); //仅保留年月日 DetachedCriteria criteria = DetachedCriteria.For <ActingBill>(); criteria.Add(Expression.Eq("OrderNo", plannedBill.OrderNo)); if (plannedBill.ExternalReceiptNo != null) { criteria.Add(Expression.Eq("ExternalReceiptNo", plannedBill.ExternalReceiptNo)); } else { criteria.Add(Expression.IsNull("ExternalReceiptNo")); } criteria.Add(Expression.Eq("ReceiptNo", plannedBill.ReceiptNo)); criteria.Add(Expression.Eq("TransactionType", plannedBill.TransactionType)); criteria.Add(Expression.Eq("Item", plannedBill.Item)); criteria.Add(Expression.Eq("BillAddress", plannedBill.BillAddress)); criteria.Add(Expression.Eq("Uom", plannedBill.Uom)); criteria.Add(Expression.Eq("UnitCount", plannedBill.UnitCount)); criteria.Add(Expression.Eq("PriceList", plannedBill.PriceList)); criteria.Add(Expression.Eq("UnitPrice", plannedBill.UnitPrice)); criteria.Add(Expression.Eq("Currency", plannedBill.Currency)); criteria.Add(Expression.Eq("IsIncludeTax", plannedBill.IsIncludeTax)); if (plannedBill.TaxCode != null) { criteria.Add(Expression.Eq("TaxCode", plannedBill.TaxCode)); } else { criteria.Add(Expression.IsNull("TaxCode")); } if (plannedBill.LocationFrom != null) { criteria.Add(Expression.Eq("LocationFrom", plannedBill.LocationFrom)); } else { criteria.Add(Expression.IsNull("LocationFrom")); } criteria.Add(Expression.Eq("IsProvisionalEstimate", plannedBill.IsProvisionalEstimate)); criteria.Add(Expression.Eq("EffectiveDate", effectiveDate)); IList <ActingBill> actingBillList = this.criteriaMgr.FindAll <ActingBill>(criteria); ActingBill actingBill = null; if (actingBillList.Count == 0) { actingBill = new ActingBill(); CloneHelper.CopyProperty(plannedBill, actingBill, PlannedBill2ActingBillCloneField); actingBill.EffectiveDate = effectiveDate; actingBill.CreateUser = user; actingBill.CreateDate = dateTimeNow; } else if (actingBillList.Count == 1) { actingBill = actingBillList[0]; } else { throw new TechnicalException("Acting bill record consolidate error, find target acting bill number great than 1."); } actingBill.BillQty += plannedBill.CurrentActingQty; if (actingBill.BillQty != actingBill.BilledQty) { actingBill.Status = BusinessConstants.CODE_MASTER_STATUS_VALUE_CREATE; } else { actingBill.Status = BusinessConstants.CODE_MASTER_STATUS_VALUE_CLOSE; } actingBill.LastModifyUser = user; actingBill.LastModifyDate = dateTimeNow; return(actingBill); }
public ActingBill CreateActingBill(PlannedBill plannedBill, LocationLotDetail locationLotDetail, User user) { PlannedBill oldPlannedBill = plannedBillMgr.LoadPlannedBill(plannedBill.Id); oldPlannedBill.CurrentActingQty = plannedBill.CurrentActingQty; //检验,已结算数+本次结算数不能大于总结算数量,可能有负数结算,所以要用绝对值比较 if (!oldPlannedBill.ActingQty.HasValue) { oldPlannedBill.ActingQty = 0; } if (Math.Abs(oldPlannedBill.ActingQty.Value + oldPlannedBill.CurrentActingQty) > Math.Abs(oldPlannedBill.PlannedQty)) { throw new BusinessErrorException("PlannedBill.Error.ActingQtyExceed"); } DateTime dateTimeNow = DateTime.Now; ActingBill actingBill = this.RetriveActingBill(oldPlannedBill, dateTimeNow, user); #region 计算结算金额 decimal currentBillAmount = 0; if (Math.Abs(oldPlannedBill.ActingQty.Value + oldPlannedBill.CurrentActingQty) < Math.Abs(oldPlannedBill.PlannedQty)) { //总结算数小于计划数,用实际单价计算待开票金额 #region 计算实际单价 EntityPreference entityPreference = entityPreferenceMgr.LoadEntityPreference(BusinessConstants.ENTITY_PREFERENCE_CODE_AMOUNT_DECIMAL_LENGTH); int decimalLength = int.Parse(entityPreference.Value); decimal actualUnitPrice = Math.Round((oldPlannedBill.PlannedAmount / oldPlannedBill.PlannedQty), decimalLength, MidpointRounding.AwayFromZero); #endregion currentBillAmount = actualUnitPrice * oldPlannedBill.CurrentActingQty; } else { //总结算数等于计划数,先用剩余金额作为待开票金额 if (!oldPlannedBill.ActingAmount.HasValue) { oldPlannedBill.ActingAmount = 0; } currentBillAmount = oldPlannedBill.PlannedAmount - oldPlannedBill.ActingAmount.Value; } actingBill.BillAmount += currentBillAmount; #endregion #region 更新Planed Bill的已结算数量和金额 if (!oldPlannedBill.ActingQty.HasValue) { oldPlannedBill.ActingQty = 0; } oldPlannedBill.ActingQty += oldPlannedBill.CurrentActingQty; if (!oldPlannedBill.ActingAmount.HasValue) { oldPlannedBill.ActingAmount = 0; } oldPlannedBill.ActingAmount += currentBillAmount; oldPlannedBill.LastModifyDate = dateTimeNow; oldPlannedBill.LastModifyUser = user; this.plannedBillMgr.UpdatePlannedBill(oldPlannedBill); #endregion if (actingBill.Id == 0) { actingBillMgr.CreateActingBill(actingBill); } else { actingBillMgr.UpdateActingBill(actingBill); } #region 记BillTransaction billTransactionMgr.RecordBillTransaction(plannedBill, actingBill, locationLotDetail, user); #endregion return(actingBill); }
public ActingBill CreateActingBill(PlannedBill plannedBill, User user) { return(CreateActingBill(plannedBill, null, user)); }
public virtual void DeletePlannedBill(PlannedBill entity) { entityDao.DeletePlannedBill(entity); }
public virtual void UpdatePlannedBill(PlannedBill entity) { entityDao.UpdatePlannedBill(entity); }
public virtual void CreatePlannedBill(PlannedBill entity) { entityDao.CreatePlannedBill(entity); }
public IList <LocationLotDetail> GetLocationLotDetail(PlannedBill plannedBill) { return(GetLocationLotDetail(plannedBill.Id)); }
public virtual void DeletePlannedBill(PlannedBill entity) { Delete(entity); }
public virtual void UpdatePlannedBill(PlannedBill entity) { Update(entity); }
public virtual void CreatePlannedBill(PlannedBill entity) { Create(entity); }
public PlannedBill CreatePlannedBill(ReceiptDetail receiptDetail, User user) { Receipt receipt = receiptDetail.Receipt; OrderLocationTransaction orderLocationTransaction = receiptDetail.OrderLocationTransaction; OrderDetail orderDetail = orderLocationTransaction.OrderDetail; OrderHead orderHead = orderDetail.OrderHead; //DateTime dateTimeNow = DateTime.Now; //decimal plannedAmount = 0; PlannedBill plannedBill = new PlannedBill(); plannedBill.OrderNo = orderHead.OrderNo; plannedBill.ExternalReceiptNo = receipt.ExternalReceiptNo; //记录客户回单号 plannedBill.ReceiptNo = receipt.ReceiptNo; plannedBill.Item = orderDetail.Item; plannedBill.SettleTerm = orderDetail.DefaultBillSettleTerm; plannedBill.PlannedQty = receiptDetail.ReceivedQty.HasValue ? receiptDetail.ReceivedQty.Value : 0; //设置待结算数量默认值 plannedBill.Uom = orderDetail.Uom; //单位为订单单位 plannedBill.UnitCount = orderDetail.UnitCount; plannedBill.UnitQty = orderLocationTransaction.UnitQty; //UnitQty沿用OrderLocationTransaction plannedBill.CreateDate = receipt.CreateDate; plannedBill.CreateUser = user; plannedBill.LastModifyDate = receipt.CreateDate; plannedBill.LastModifyUser = user; plannedBill.EffectiveDate = receipt.CreateDate; plannedBill.PlannedAmount = receiptDetail.PlannedAmount; plannedBill.IsAutoBill = orderHead.IsAutoBill; plannedBill.HuId = receiptDetail.HuId; plannedBill.LotNo = receiptDetail.LotNo; if (orderLocationTransaction.Location != null) { plannedBill.LocationFrom = orderLocationTransaction.Location.Code; //为了支持多site //如果是不合格品库位,需要在记录PartyFrom,从而通过PartyFrom在QAD中找到相应的QC库位 if (plannedBill.LocationFrom == BusinessConstants.SYSTEM_LOCATION_REJECT) { plannedBill.PartyFrom = orderHead.PartyTo.Code; } } plannedBill.IpNo = receipt.ReferenceIpNo; plannedBill.ReferenceItemCode = orderDetail.ReferenceItemCode; if (orderDetail.OrderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_PROCUREMENT || orderDetail.OrderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_SUBCONCTRACTING) { plannedBill.TransactionType = BusinessConstants.BILL_TRANS_TYPE_PO; plannedBill.BillAddress = orderDetail.DefaultBillFrom; plannedBill.PriceList = orderDetail.DefaultPriceListFrom; plannedBill.IsProvisionalEstimate = //暂估价格处理,没有找到价格也认为是暂估价格 orderDetail.PriceListDetailFrom != null ? orderDetail.PriceListDetailFrom.IsProvisionalEstimate : true; //plannedAmount = orderDetail.TotalAmountFrom.HasValue ? orderDetail.TotalAmountFrom.Value : 0; if (orderDetail.PriceListDetailFrom != null) { //找到价格 plannedBill.UnitPrice = orderDetail.PriceListDetailFrom.UnitPrice; plannedBill.Currency = orderDetail.PriceListDetailFrom.Currency; plannedBill.IsIncludeTax = orderDetail.PriceListDetailFrom.IsIncludeTax; plannedBill.TaxCode = orderDetail.PriceListDetailFrom.TaxCode; } else { //没有找到价格 plannedBill.UnitPrice = 0; plannedBill.Currency = orderDetail.OrderHead.Currency; } } else if (orderDetail.OrderHead.Type == BusinessConstants.CODE_MASTER_ORDER_TYPE_VALUE_DISTRIBUTION) { plannedBill.TransactionType = BusinessConstants.BILL_TRANS_TYPE_SO; plannedBill.BillAddress = orderDetail.DefaultBillTo; plannedBill.PriceList = orderDetail.DefaultPriceListTo; plannedBill.IsProvisionalEstimate = //暂估价格处理,没有找到价格也认为是暂估价格 orderDetail.PriceListDetailTo != null ? orderDetail.PriceListDetailTo.IsProvisionalEstimate : true; #region 生效日期取asn创建的日期 if (receipt.InProcessLocations != null && receipt.InProcessLocations.Count > 0) { plannedBill.EffectiveDate = DateTime.Parse(receipt.InProcessLocations[0].CreateDate.ToShortDateString()); } #endregion //plannedAmount = orderDetail.TotalAmountTo.HasValue ? orderDetail.TotalAmountTo.Value : 0; if (orderDetail.PriceListDetailTo != null) { //找到价格 plannedBill.UnitPrice = orderDetail.PriceListDetailTo.UnitPrice; plannedBill.Currency = orderDetail.PriceListDetailTo.Currency; plannedBill.IsIncludeTax = orderDetail.PriceListDetailTo.IsIncludeTax; plannedBill.TaxCode = orderDetail.PriceListDetailTo.TaxCode; } else { //没有找到价格 plannedBill.UnitPrice = 0; plannedBill.Currency = orderDetail.OrderHead.Currency; } } else { throw new TechnicalException("Only SO and PO/SubContract can create planned bill."); } //if (orderDetail.Uom.Code != plannedBill.Uom.Code) //{ // //订单单位和采购单位不一致,需要更改UnitQty和PlannedQty值 // plannedBill.UnitQty = this.uomConversionMgr.ConvertUomQty(orderDetail.Item, orderDetail.Uom, plannedBill.UnitQty, plannedBill.Uom); // plannedBill.PlannedQty = plannedBill.PlannedQty * plannedBill.UnitQty; //} this.CreatePlannedBill(plannedBill); return(plannedBill); }