Beispiel #1
0
        protected override void PreCheckForCreate(PayItemInfo entity)
        {
            base.PreCheckForCreate(entity);

            m_POInfo = ExternalDomainBroker.GetPurchaseOrderInfo(entity.OrderSysNo.Value, 0);
            if (m_POInfo == null)
            {
                ThrowBizException("PayItem_OrderNotExisitsFormat", entity.OrderSysNo);
            }
            if (m_POInfo.PurchaseOrderBasicInfo.ConsignFlag == PurchaseOrderConsignFlag.Consign)
            {
                ThrowBizException("PayItem_Create_InvalidPOConsignStatus");
            }
            //填写PO的CompanyCode为付款单的CompanyCode
            entity.CompanyCode = m_POInfo.CompanyCode;
            entity.OrderStatus = (int?)m_POInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus;

            if (entity.PayStyle == PayItemStyle.Advanced)
            {
                decimal usingReturnPoint = 0M;
                if (m_POInfo.EIMSInfo != null && m_POInfo.EIMSInfo.EIMSInfoList != null)
                {
                    usingReturnPoint = m_POInfo.EIMSInfo.EIMSInfoList.Sum(s => s.EIMSAmt ?? 0M);
                }
                decimal poTotalAmt = m_POInfo.PurchaseOrderBasicInfo.TotalAmt ?? 0M;
                if (entity.PayAmt != poTotalAmt - usingReturnPoint)
                {
                    ThrowBizException("PayItem_Create_AdvancedPayPayedAmtNeedEqualUnPayedAmtFormat", entity.PayAmt.Value.ToString("0.00"), poTotalAmt.ToString("0.00"), usingReturnPoint.ToString("0.00"));
                }
            }
            if (m_POInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus == PurchaseOrderStatus.WaitingInStock)
            {
                if (entity.PayStyle != PayItemStyle.Advanced)
                {
                    ThrowBizException("PayItem_Create_CanOnlyAddAdvancePayItemForPO");
                }
            }
            else if (m_POInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus == PurchaseOrderStatus.InStocked || m_POInfo.PurchaseOrderBasicInfo.PurchaseOrderStatus == PurchaseOrderStatus.PartlyInStocked)
            {
                if (entity.PayStyle != PayItemStyle.Normal)
                {
                    ThrowBizException("PayItem_Create_CanOnlytAddNormalPayItemForPO");
                }
            }
            else
            {
                ThrowBizException("PayItem_Create_CannotAddPayItemForOtherPOStatus");
            }

            List <PayableInfo> payList = PayableBizProcessor.GetListByCriteria(new PayableInfo
            {
                OrderSysNo  = entity.OrderSysNo,
                OrderType   = entity.OrderType,
                BatchNumber = entity.BatchNumber
            });

            #region 如果该单据已经有应付了,对该应付作检查

            if (payList != null && payList.Count > 0)
            {
                //是否有已作废的应付款
                List <PayableInfo> adandonPayList = payList.Where(w => w.PayStatus == PayableStatus.Abandon).ToList();

                if (adandonPayList.Count > 0)
                {
                    ReferencePayableInfo = adandonPayList[0];
                }
                else
                {
                    ReferencePayableInfo = payList[0];

                    var payItems = PayItemBizProcessor.GetListByCriteria(new PayItemInfo
                    {
                        PaySysNo = ReferencePayableInfo.SysNo
                    });
                    payItems.Add(entity);

                    if (payItems.Where(x => x.Status != PayItemStatus.Abandon).Sum(x => x.PayAmt) > ReferencePayableInfo.OrderAmt)
                    {
                        ThrowBizException("PayItem_Create_TotalPayAmtCanNotMoreThanOrderAmt");
                    }

                    //该检查现阶段只针对PO,因为其他类型单据没有预付款
                    if (entity.PayStyle == PayItemStyle.Normal)
                    {
                        var list = PayItemBizProcessor.GetListByCriteria(new PayItemInfo
                        {
                            Status   = PayItemStatus.Origin,
                            PayStyle = PayItemStyle.Advanced,
                            PaySysNo = ReferencePayableInfo.SysNo
                        });
                        if (list != null && list.Count > 0)
                        {
                            ThrowBizException("PayItem_Create_AdvancedPayItemExists");
                        }
                    }
                    if (ReferencePayableInfo.PayStatus == PayableStatus.FullPay)
                    {
                        ThrowBizException("PayItem_Create_FullPay");
                    }
                }
            }

            #endregion 如果该单据已经有应付了,对该应付作检查
        }