예제 #1
0
        protected virtual void ProcessPayedPrepay(PayableInfo entity, PayItemInfo payitem)
        {
            PayableInfo payable = null;

            if (payitem.AvailableAmt < entity.InStockAmt - entity.EIMSAmt)
            {
                ThrowBizException("Payable_ProcessPayedPrepay_InStockAmtMoreThanAvailableAmt");
            }
            //更新付款单可用金额
            payitem.AvailableAmt -= entity.InStockAmt - entity.EIMSAmt;
            ObjectFactory <PayItemProcessor> .Instance.UpdateAvailableAmt(payitem.OrderType.Value, payitem.OrderSysNo.Value, payitem.AvailableAmt.Value);

            var pEntity = m_PayableDA.GetFirstPay(entity.OrderType.Value, entity.OrderSysNo.Value);

            if (entity.BatchNumber == 1)
            {
                if (pEntity == null)
                {
                    ThrowBizException("Payable_ProcessPayedPrepay_NotExistPaidRecord");
                }
                payable             = new PayableInfo();
                payable.OrderAmt    = pEntity.OrderAmt;
                payable.SysNo       = pEntity.SysNo;
                payable.PayStatus   = PayableStatus.FullPay;
                payable.OrderStatus = entity.OrderStatus;
                payable.InStockAmt  = entity.InStockAmt;
                payable.EIMSAmt     = entity.EIMSAmt;
                payable.RawOrderAmt = entity.RawOrderAmt;
                m_PayableDA.UpdateFirstPay(payable);
            }
            else
            {
                payable               = new PayableInfo();
                payable.OrderSysNo    = entity.OrderSysNo;
                payable.OrderType     = entity.OrderType;
                payable.BatchNumber   = entity.BatchNumber;
                payable.PayStatus     = PayableStatus.FullPay;
                payable.AlreadyPayAmt = 0;
                payable.OrderAmt      = payable.AlreadyPayAmt;
                payable.RawOrderAmt   = entity.RawOrderAmt;
                payable.InStockAmt    = entity.InStockAmt;
                payable.EIMSAmt       = entity.EIMSAmt;
                payable.Note          = "auto create during in stock";
                payable.CurrencySysNo = 1;
                payable.OrderStatus   = entity.OrderStatus;
                payable               = Create(payable);
            }

            PayItemInfo pie = new PayItemInfo();

            pie.OrderSysNo  = entity.OrderSysNo;
            pie.OrderType   = (PayableOrderType)entity.OrderType;
            pie.PaySysNo    = payable.SysNo.Value;
            pie.PayAmt      = entity.InStockAmt.Value - entity.EIMSAmt.Value;
            pie.SysNo       = payitem.SysNo;
            pie.OrderStatus = entity.OrderStatus;
            pie.CompanyCode = entity.CompanyCode;

            if (entity.BatchNumber != 1)
            {
                ObjectFactory <PayItemProcessor> .Instance.CreatePayEx(pie);
            }

            if (entity.OrderStatus.Value == (int)PurchaseOrderStatus.PartlyInStocked)
            {
                //调用PO接口中止入库
                ExternalDomainBroker.StopInStock(entity.OrderSysNo.Value);
            }
        }