Пример #1
0
    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);
    }
Пример #2
0
        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);
        }
Пример #3
0
        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
        }
Пример #4
0
    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);
    }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 public ActingBill CreateActingBill(PlannedBill plannedBill, User user)
 {
     return(CreateActingBill(plannedBill, null, user));
 }
Пример #8
0
 public virtual void DeletePlannedBill(PlannedBill entity)
 {
     entityDao.DeletePlannedBill(entity);
 }
Пример #9
0
 public virtual void UpdatePlannedBill(PlannedBill entity)
 {
     entityDao.UpdatePlannedBill(entity);
 }
Пример #10
0
 public virtual void CreatePlannedBill(PlannedBill entity)
 {
     entityDao.CreatePlannedBill(entity);
 }
Пример #11
0
 public IList <LocationLotDetail> GetLocationLotDetail(PlannedBill plannedBill)
 {
     return(GetLocationLotDetail(plannedBill.Id));
 }
Пример #12
0
 public virtual void DeletePlannedBill(PlannedBill entity)
 {
     Delete(entity);
 }
Пример #13
0
 public virtual void UpdatePlannedBill(PlannedBill entity)
 {
     Update(entity);
 }
Пример #14
0
 public virtual void CreatePlannedBill(PlannedBill entity)
 {
     Create(entity);
 }
Пример #15
0
        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);
        }