Exemple #1
0
        public void ManualAbandon(int soIncomeSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                SOIncomeInfo dbInfo = Load(soIncomeSysNo);
                if (dbInfo.Status != (int)AppEnum.SOIncomeStatus.Origin)
                {
                    throw new BizException("soincome: the status is not origin, abandon failed.");
                }

                if (dbInfo.IncomeStyle != (int)AppEnum.SOIncomeStyle.Advanced)
                {
                    throw new BizException("Only advanced income can be manually abandon");
                }

                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", dbInfo.SysNo);
                ht.Add("Status", (int)AppEnum.SOIncomeStatus.Abandon);
                new SOIncomeDac().Update(ht);

                NetPayManager.GetInstance().SOIncomeAbandon(dbInfo.OrderSysNo);

                //如果Manual Abandon
                SaleManager.GetInstance().UnPaySO(dbInfo.OrderSysNo);

                DeleteSOIncomeVoucher(soIncomeSysNo);

                scope.Complete();
            }
        }
Exemple #2
0
        public void Insert(SOIncomeInfo oParam)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                SOIncomeInfo dbInfo = LoadValid(oParam.OrderType, oParam.OrderSysNo);
                if (dbInfo != null)
                {
                    throw new BizException("soincome: record exist already, insert failed");
                }

                new SOIncomeDac().Insert(oParam);

                if (oParam.OrderType == (int)AppEnum.SOIncomeOrderType.SO)
                {
                    SaleManager.GetInstance().PaySO(oParam.OrderSysNo);
                }

                scope.Complete();
            }
        }
Exemple #3
0
        public void SOAbandon(int soSysNo)
        {
            /*
             *  这时候只能存在Advanced收款单,Normal的在取消出库的时候已经处理了
             *  如果soincome(advanced,confirmed) 抛出异常:提示必须先手动取消财务确认
             *  如果soincome(advanced, origin) 抛出异常:必须先手动作废收款单.
             */
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                SOIncomeInfo dbInfo = LoadValid((int)AppEnum.SOIncomeOrderType.SO, soSysNo);
                if (dbInfo != null)
                {
                    if (dbInfo.Status == (int)AppEnum.SOIncomeStatus.Confirmed)
                    {
                        throw new BizException(soSysNo + "收款单财务已经确认,请通知财务取消确认");
                    }
                    if (dbInfo.Status == (int)AppEnum.SOIncomeStatus.Origin)
                    {
                        throw new BizException(soSysNo + "存在有效收款单,请手动作废收款单");
                    }
                }
                scope.Complete();
            }
        }
Exemple #4
0
        public void VoidGroupBuyingTicket(int sysNo)
        {
            if (sysNo <= 0)
            {
                throw new ArgumentException("sysNo");
            }
            var origin = m_GroupBuyingDA.LoadGroupBuyingTicketBySysNo(sysNo);

            if (origin == null)
            {
                //throw new BizException(string.Format("团购活动券[{0}]不存在!", origin.TicketID));
                throw new BizException(string.Format(ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_NotExsistGroupBuyingTicket"), origin.TicketID));
            }
            if (origin.Status == GroupBuyingTicketStatus.Used || origin.Status == GroupBuyingTicketStatus.Abandon)
            {
                //throw new BizException(string.Format("团购活动券[{0}]已经使用或作废,不能作废!", origin.TicketID));
                throw new BizException(string.Format(ResouceManager.GetMessageString("MKT.Promotion.GroupBuying", "GroupBuying_AlreadyUseGroupBuyingTicket"), origin.TicketID));
            }
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                if (origin.Status == GroupBuyingTicketStatus.Created)
                {
                    m_GroupBuyingDA.UpdateGroupBuyingTicketStatus(sysNo, GroupBuyingTicketStatus.Abandon);
                }
                else
                {
                    var soIncomeInfo = new SOIncomeInfo()
                    {
                        OrderSysNo     = origin.SysNo.Value,
                        OrderType      = SOIncomeOrderType.GroupRefund,
                        OrderAmt       = origin.TicketAmt.Value * -1,
                        IncomeAmt      = origin.TicketAmt.Value * -1,
                        GiftCardPayAmt = 0,
                        PointPay       = 0,
                        IncomeStyle    = SOIncomeOrderStyle.Advanced,
                        //ReferenceID = origin.GroupBuyingSysNo.ToString(),
                        Status        = SOIncomeStatus.Origin,
                        Note          = "虚拟团购负收款单",
                        CompanyCode   = origin.CompanyCode,
                        MasterSoSysNo = origin.OrderSysNo,
                    };
                    //生成付款单
                    ExternalDomainBroker.CreateSOIncome(soIncomeInfo);
                    var item = new GroupBuyingTicketInfo
                    {
                        SysNo        = origin.SysNo,
                        RefundDate   = DateTime.Now,
                        RefundStatus = RefundStatus.Origin,
                        RefundMemo   = "退款且作废团购券",
                        Status       = GroupBuyingTicketStatus.Abandon
                    };
                    m_GroupBuyingDA.UpdateGroupBuyingTicketRefundInfo(item);
                }
                scope.Complete();
            }
        }
Exemple #5
0
        private void CreateSOIncome()
        {
            SOIncomeInfo soIncomeInfo = CurrentSOIncomeInfo;

            if (soIncomeInfo == null)
            {
                soIncomeInfo                = new SOIncomeInfo();
                soIncomeInfo.OrderType      = SOIncomeOrderType.SO;
                soIncomeInfo.OrderSysNo     = SOSysNo;
                soIncomeInfo.OrderAmt       = UtilityHelper.TruncMoney(CurrentSO.BaseInfo.SOTotalAmount);
                soIncomeInfo.IncomeAmt      = CurrentSO.BaseInfo.ReceivableAmount;
                soIncomeInfo.PrepayAmt      = Math.Max(CurrentSO.BaseInfo.PrepayAmount.Value, 0);
                soIncomeInfo.IncomeStyle    = (int)SOIncomeOrderStyle.Normal;
                soIncomeInfo.Status         = (int)SOIncomeStatus.Origin;
                soIncomeInfo.GiftCardPayAmt = CurrentSO.BaseInfo.GiftCardPay;
                soIncomeInfo.PointPay       = CurrentSO.BaseInfo.PointPay;
                soIncomeInfo.PayAmount      = CurrentSO.BaseInfo.ReceivableAmount;
                soIncomeInfo.CompanyCode    = CurrentSO.CompanyCode;

                if (CurrentSO.BaseInfo.SOSplitMaster != null)
                {
                    soIncomeInfo.MasterSoSysNo = CurrentSO.BaseInfo.SOSplitMaster.Value;  //获取母单号
                }
                ExternalDomainBroker.CreateSOIncome(soIncomeInfo);
            }
        }
Exemple #6
0
        public void UnConfirm(int soIncomeSysNo, int userSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                SOIncomeInfo dbInfo = Load(soIncomeSysNo);
                if (dbInfo.Status != (int)AppEnum.SOIncomeStatus.Confirmed)
                {
                    throw new BizException("soincome: only confirmed status can be unconfirmed");
                }

                dbInfo.Status = (int)AppEnum.SOIncomeStatus.Origin;

                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", soIncomeSysNo);
                ht.Add("ConfirmTime", DateTime.Now);
                ht.Add("ConfirmUserSysNo", userSysNo);
                ht.Add("Status", dbInfo.Status);

                new SOIncomeDac().Update(ht);

                DeleteSOIncomeVoucher(soIncomeSysNo);

                scope.Complete();
            }
        }
        /// <summary>
        /// 创建财务收款单
        /// </summary>
        /// <param name="refundBalanceInfo"></param>
        private void CreateSOIncome(RefundBalanceInfo refundBalanceInfo)
        {
            SOIncomeInfo soIncomeInfo = new SOIncomeInfo()
            {
                OrderSysNo = refundBalanceInfo.SysNo.Value,
                OrderType  = SOIncomeOrderType.RO_Balance,
                OrderAmt   = refundBalanceInfo.CashAmt.Value * -1,
                IncomeAmt  = (refundBalanceInfo.RefundPayType == RefundPayType.TransferPointRefund)
                ? 0 : refundBalanceInfo.CashAmt.Value * -1,
                GiftCardPayAmt = -refundBalanceInfo.GiftCardAmt.Value,
                PointPay       = -refundBalanceInfo.PointAmt.Value,
                IncomeStyle    = SOIncomeOrderStyle.RO_Balance,
                ReferenceID    = "",
                Status         = SOIncomeStatus.Origin,
                Note           = "",
                CompanyCode    = refundBalanceInfo.CompanyCode
            };

            ExternalDomainBroker.CreateSOIncome(soIncomeInfo);

            if (refundBalanceInfo.RefundPayType == RefundPayType.TransferPointRefund)
            {
                int userSysNo = ExternalDomainBroker.GetUserSysNo(AppSettingManager.GetSetting("RMA", RMAConst.AutoRMAPhysicalUserName),
                                                                  AppSettingManager.GetSetting("RMA", RMAConst.AutoRMALoginUserName), AppSettingManager.GetSetting("RMA", RMAConst.AutoRMASourceDirectoryKey));
                ExternalDomainBroker.AutoConfirmIncomeInfo(soIncomeInfo.SysNo.Value, refundBalanceInfo.SysNo.Value, userSysNo);
            }
        }
Exemple #8
0
        public void UpdateStatusSplitForSO(SOIncomeInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateSOIncomeStatusSplitForSO");

            command.SetParameterValue("@SysNo", entity.SysNo);
            command.SetParameterValue("@Status", entity.Status);
            command.ExecuteNonQuery();
        }
Exemple #9
0
        /// <summary>
        /// 创建销售收款单
        /// </summary>
        /// <param name="entity">收款单信息</param>
        /// <returns>创建好的销售收款单</returns>
        public static int?CreateSOIncome(SOIncomeInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("InsertSOIncome");

            command.SetParameterValue(entity);
            entity.SysNo = Convert.ToInt32(command.ExecuteScalar());
            return(entity.SysNo);
        }
Exemple #10
0
        public void ReturnRO(ROInfo roInfo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                if (this.GetROCurrentStatus(roInfo.SysNo) != (int)AppEnum.ROStatus.Audited)
                {
                    throw new BizException("This RO is not Audited now ,can't be returned");
                }
                roInfo.Status = (int)AppEnum.ROStatus.Returned;
                //update ro status
                Hashtable paramHash = new Hashtable(4);
                paramHash.Add("Status", roInfo.Status);
                paramHash.Add("ReturnTime", roInfo.ReturnTime);
                paramHash.Add("ReturnUserSysNo", roInfo.ReturnUserSysNo);
                paramHash.Add("SysNo", roInfo.SysNo);
                this.UpdateROMaster(paramHash);
                //update inventory
                foreach (ROItemInfo roItem in roInfo.ItemHash.Values)
                {
                    //UnitCostManager.GetInstance().SetCost(roItem.ProductSysNo, roItem.Quantity, roItem.Cost); //Serious bug 2007-07-21
                    //退货时不影响一手商品的成本,只需要修改二手商品的成本
                    UnitCostManager.GetInstance().SetCost(roItem.ReturnSysNo, roItem.Quantity, roItem.Cost);
                    InventoryManager.GetInstance().SetInStockQty(roInfo.StockSysNo, roItem.ReturnSysNo, roItem.Quantity);
                }
                //update customer score
                RMAInfo oRMA = RMAManager.GetInstance().LoadMaster(roInfo.RMASysNo);
                //先将销售单所得积分加上
                PointManager.GetInstance().DoDelayPointSingle(oRMA.SOSysNo);
                //然后减去退货对应积分
                if (roInfo.PointAmt != 0)
                {
                    PointManager.GetInstance().SetScore(oRMA.CustomerSysNo, roInfo.PointAmt * (-1), (int)AppEnum.PointLogType.ReturnProduct, roInfo.SysNo.ToString());
                }
                //生成收款单
                //如果无有效的收款单-->生成soincome(normal, origin)
                SOIncomeInfo soIncome = SOIncomeManager.GetInstance().LoadValid((int)AppEnum.SOIncomeOrderType.RO, roInfo.SysNo);
                if (soIncome == null)//无有效收款单,生成收款单
                {
                    soIncome                 = new SOIncomeInfo();
                    soIncome.OrderType       = (int)AppEnum.SOIncomeOrderType.RO;
                    soIncome.OrderSysNo      = roInfo.SysNo;
                    soIncome.OrderAmt        = soIncome.IncomeAmt = Util.TruncMoney(roInfo.CashAmt + roInfo.RedeemAmt);
                    soIncome.IncomeStyle     = (int)AppEnum.SOIncomeStyle.Normal;
                    soIncome.IncomeUserSysNo = roInfo.ReturnUserSysNo;
                    soIncome.IncomeTime      = DateTime.Now;
                    soIncome.Status          = (int)AppEnum.SOIncomeStatus.Origin;
                    SOIncomeManager.GetInstance().Insert(soIncome);
                }
                scope.Complete();
            }
        }
Exemple #11
0
        /// <summary>
        /// 自动确认收款单
        /// </summary>
        /// <param name="soIncomeSysNo">收款单系统编号</param>
        /// <param name="soSysNo">订单系统编号</param>
        /// <param name="opUserSysNo">操作用户系统编号</param>
        public void AutoConfirmIncome(int soIncomeSysNo, int soSysNo, int opUserSysNo)
        {
            var soIncomeInfo = new SOIncomeInfo();

            soIncomeInfo.SysNo            = soIncomeSysNo;
            soIncomeInfo.ConfirmUserSysNo = opUserSysNo;
            soIncomeInfo.OrderSysNo       = soSysNo;

            ObjectFactory <SOIncomeProcessor> .Instance.Confirm(soIncomeInfo, true);
        }
Exemple #12
0
        /// <summary>
        /// 创建销售收款单
        /// </summary>
        /// <param name="entity">收款单基本信息</param>
        /// <returns></returns>
        public SOIncomeInfo Create(SOIncomeInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("InsertSOIncome");

            command.SetParameterValue(entity);
            entity.SysNo = Convert.ToInt32(command.ExecuteScalar());
            if (entity.SysNo != 0)
            {
                return(LoadBySysNo(entity.SysNo.Value));
            }
            return(entity);
        }
Exemple #13
0
 protected override void CreateAOAndAbandonSO(SOIncomeInfo soIncomeInfo, SOIncomeRefundInfo soIncomeRefundInfo)
 {
     // 下面类型订单不用创建负收款单
     if (!NeedCreateAO(CurrentSO.BaseInfo.SpecialSOType))
     {
         Abandon();
     }
     else
     {
         base.CreateAOAndAbandonSO(soIncomeInfo, soIncomeRefundInfo);
     }
 }
Exemple #14
0
        public static SOIncomeInfo UpdateSOIncomeStatus(SOIncomeInfo soIncomeInfo)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateSOIncomeStatus");

            command.SetParameterValue("@SysNo", soIncomeInfo.SysNo);
            command.SetParameterValue("@Status", soIncomeInfo.Status);
            command.SetParameterValue("@ConfirmTime", soIncomeInfo.ConfirmTime);
            command.SetParameterValue("@ConfirmUserSysNo", soIncomeInfo.ConfirmUserSysNo);
            command.ExecuteNonQuery();

            return(soIncomeInfo);
        }
Exemple #15
0
        /// <summary>
        /// 查询退款
        /// </summary>
        /// <param name="sysNo">退款单号</param>
        public void QueryRefund(int sysNo)
        {
            string queryUrl = AppSettingManager.GetSetting("Invoice", "TenPayQueryRefundUrl");

            var soincomInfo = ObjectFactory <ISOIncomeDA> .Instance.LoadBySysNo(sysNo);

            Dictionary <string, string> reqParams = new Dictionary <string, string>();

            reqParams["input_charset"]   = "UTF-8";
            reqParams["service_version"] = "1.0";
            reqParams["sign_key_index"]  = "1";
            reqParams["partner"]         = AppSettingManager.GetSetting("Invoice", "TenPayParnter");
            reqParams["out_trade_no"]    = soincomInfo.OrderSysNo.ToString();
            reqParams["sign_type"]       = "MD5";

            string reqData = "";

            string[] allKeys = reqParams.Keys.ToArray();
            Array.Sort(allKeys);
            foreach (var item in allKeys)
            {
                reqData += string.Format("{0}={1}&", item, reqParams[item]);
            }
            string sign = GetMD5(reqData + string.Format("key={0}", AppSettingManager.GetSetting("Invoice", "TenPaySecretKey")));

            reqData += string.Format("sign={0}", sign);

            var resultXml = HttpRequestReturnXml(string.Format("{0}?{1}", queryUrl, reqData), "GET", "");

            var result = new TransactionQueryBill();
            var code   = resultXml.SelectSingleNode("root/retcode").InnerText;//请求结果

            if (code == "0")
            {
                SOIncomeInfo updateEntity = new SOIncomeInfo()
                {
                    SysNo       = sysNo,
                    ExternalKey = resultXml.SelectSingleNode("root/refund_id_0").InnerText
                };
                string status = resultXml.SelectSingleNode("root/refund_state_0").InnerText;
                if (status == "4" || status == "10")
                {
                    updateEntity.Status = SOIncomeStatus.Processed;
                    ObjectFactory <ISOIncomeDA> .Instance.UpdateStatus(updateEntity);
                }
                else if (status == "3" || status == "5" || status == "6")
                {
                    updateEntity.Status = SOIncomeStatus.ProcessingFailed;
                    ObjectFactory <ISOIncomeDA> .Instance.UpdateStatus(updateEntity);
                }
            }
        }
Exemple #16
0
        public static void ConfirmRefundSOIncomeNet(RMARefundInfo info, SOIncomeInfo soIncomeInfo)
        {
            DataCommand command = DataCommandManager.GetDataCommand("ConfirmRefundSOIncomeNet");

            command.SetParameterValue("@OrderSysNo", info.SysNo);
            command.SetParameterValue("@OrderType", info.OrderType);
            command.SetParameterValue("@Status", soIncomeInfo.Status);
            command.SetParameterValue("@ExternalKey", soIncomeInfo.ExternalKey);
            command.SetParameterValue("@ConfirmUserSysNo", info.RefundUserSysNo);
            command.SetParameterValue("@ConfirmUserName", info.RefundUserName);
            command.SetParameterValue("@ConfirmTime", info.RefundDate);
            command.ExecuteNonQuery();
        }
Exemple #17
0
        protected virtual void CreateAOAndAbandonSO(SOIncomeInfo soIncomeInfo, SOIncomeRefundInfo soIncomeRefundInfo)
        {
            TransactionOptions options = new TransactionOptions
            {
                IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted
            };

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                AbandonSO();
                ExternalDomainBroker.CreateSOIncome(soIncomeInfo);
                ExternalDomainBroker.CreateSOIncomeRefundInfo(soIncomeRefundInfo);
                scope.Complete();
            }
        }
Exemple #18
0
 private void map(SOIncomeInfo oParam, DataRow tempdr)
 {
     oParam.SysNo            = Util.TrimIntNull(tempdr["SysNo"]);
     oParam.OrderType        = Util.TrimIntNull(tempdr["OrderType"]);
     oParam.OrderSysNo       = Util.TrimIntNull(tempdr["OrderSysNo"]);
     oParam.OrderAmt         = Util.TrimDecimalNull(tempdr["OrderAmt"]);
     oParam.IncomeStyle      = Util.TrimIntNull(tempdr["IncomeStyle"]);
     oParam.IncomeAmt        = Util.TrimDecimalNull(tempdr["IncomeAmt"]);
     oParam.IncomeTime       = Util.TrimDateNull(tempdr["IncomeTime"]);
     oParam.IncomeUserSysNo  = Util.TrimIntNull(tempdr["IncomeUserSysNo"]);
     oParam.ConfirmTime      = Util.TrimDateNull(tempdr["ConfirmTime"]);
     oParam.ConfirmUserSysNo = Util.TrimIntNull(tempdr["ConfirmUserSysNo"]);
     oParam.Note             = Util.TrimNull(tempdr["Note"]);
     oParam.Status           = Util.TrimIntNull(tempdr["Status"]);
 }
Exemple #19
0
        private void CustomsAbandonSO()
        {
            SOIncomeInfo soIncomeInfo = new SOIncomeInfo
            {
                OrderAmt       = -CurrentSOIncome.OrderAmt,
                OrderType      = SOIncomeOrderType.AO,
                Note           = this.Note,//ResourceHelper.Get("Res_SO_Abandon_CreateAO"),
                ReferenceID    = "",
                Status         = SOIncomeStatus.Origin,
                OrderSysNo     = CurrentSO.SysNo,
                IncomeAmt      = -(CurrentSOIncome.OrderAmt - CurrentSOIncome.PrepayAmt - CurrentSOIncome.GiftCardPayAmt),
                PayAmount      = -(CurrentSOIncome.OrderAmt - CurrentSOIncome.PrepayAmt - CurrentSOIncome.GiftCardPayAmt),
                IncomeStyle    = CurrentSOIncome.IncomeStyle,
                PrepayAmt      = -CurrentSOIncome.PrepayAmt,
                GiftCardPayAmt = -CurrentSOIncome.GiftCardPayAmt,
                PointPay       = -CurrentSOIncome.PointPay,
                CompanyCode    = CurrentSO.CompanyCode
            };

            SOIncomeRefundInfo soIncomeRefundInfo = new SOIncomeRefundInfo
            {
                OrderSysNo    = SOSysNo,
                OrderType     = RefundOrderType.AO,
                SOSysNo       = SOSysNo,
                RefundPayType = RefundPayType.NetWorkRefund,
                //BankName = refundInfo.BankName,
                //BranchBankName = refundInfo.BranchBankName,
                //CardNumber = refundInfo.CardNumber,
                //CardOwnerName = refundInfo.CardOwnerName,
                //PostAddress = refundInfo.PostAddress,
                //PostCode = refundInfo.PostCode,
                //ReceiverName = refundInfo.ReceiverName,
                Note         = this.Note,
                HaveAutoRMA  = false,
                RefundPoint  = 0,
                RefundReason = RefundReason,
                CompanyCode  = CurrentSO.CompanyCode
            };

            soIncomeRefundInfo.Status = RefundStatus.Origin;

            soIncomeRefundInfo.RefundCashAmt  = CurrentSOIncome.OrderAmt - CurrentSOIncome.GiftCardPayAmt;
            soIncomeRefundInfo.RefundGiftCard = CurrentSOIncome.GiftCardPayAmt;
            //验证
            ValidateAbandonSO(false);
            //作废订单
            CreateAOAndAbandonSO(soIncomeInfo, soIncomeRefundInfo);
        }
Exemple #20
0
        public static RMARefundInfo Valid(int rmaRefundSysNo, LoginUser operateUser)
        {
            RMARefundInfo info = LoadWithRefundSysNo(rmaRefundSysNo, operateUser.SellerSysNo);

            if (info == null)
            {
                throw new BusinessException(L("未找到编号为【{0}】的退款单", rmaRefundSysNo));
            }
            if (info.Status != RMARefundStatus.WaitingAudit)
            {
                throw new BusinessException(L("退款单不是“待审核”,不能审核通过"));
            }

            //info.Status = RMARefundStatus.WaitingRefund;
            info.Status         = RMARefundStatus.Refunded;
            info.SOIncomeStatus = SOIncomeStatus.Origin;
            info.AuditUserSysNo = operateUser.UserSysNo;
            info.AuditUserName  = operateUser.UserDisplayName;
            info.AuditDate      = DateTime.Now;

            using (ITransaction ts = TransactionManager.Create())
            {
                RMARefundDA.Update(info);
                //更新BankInfoStatus的为审核通过
                RMARefundDA.AuditSOIncomeRefund(info.SysNo.Value, (int)info.OrderType, (int)RefundStatus.Refunded, operateUser.UserSysNo, operateUser.UserDisplayName);
                RMARefundDA.BatchUpdateRegisterRefundStatus(info.SysNo.Value, RMARefundStatus.WaitingRefund);
                //写入退款单
                SOIncomeInfo soIncomeInfo = new SOIncomeInfo()
                {
                    OrderType      = SOIncomeOrderType.RO,
                    OrderSysNo     = info.SysNo,
                    OrderAmt       = -1 * info.CashAmt,
                    IncomeStyle    = SOIncomeOrderStyle.RO,
                    IncomeAmt      = -1 * info.CashAmt,
                    PayAmount      = -1 * info.CashAmt,
                    InUserSysNo    = operateUser.UserSysNo,
                    InUserName     = operateUser.UserDisplayName,
                    Status         = SOIncomeStatus.Origin,
                    PointPay       = info.PointPay,
                    GiftCardPayAmt = info.GiftCardAmt,
                };
                RMARefundDA.CreateRefundSOIncome(soIncomeInfo);

                ts.Complete();
            }

            return(info);
        }
Exemple #21
0
        /// <summary>
        /// 更新收款单状态
        /// </summary>
        /// <param name="entity"></param>
        public void UpdateStatus(SOIncomeInfo entity)
        {
            DataCommand command = DataCommandManager.GetDataCommand("UpdateSOIncomeStatus");

            command.SetParameterValue("@SysNo", entity.SysNo);
            command.SetParameterValue("@Status", entity.Status);
            command.SetParameterValue("@ExternalKey", entity.ExternalKey);
            if (entity.ConfirmUserSysNo.HasValue)
            {
                command.SetParameterValue("@ConfirmUserSysNo", entity.ConfirmUserSysNo);
            }
            else
            {
                command.SetParameterValueAsCurrentUserSysNo("@ConfirmUserSysNo");
            }
            command.ExecuteNonQuery();
        }
Exemple #22
0
        public static SOIncomeInfo CreateSOIncome(SOIncomeInfo entity)
        {
            SOIncomeQueryFilter query = new SOIncomeQueryFilter();

            query.SysNo              = null;
            query.OrderSysNo         = entity.OrderSysNo.HasValue ? entity.OrderSysNo.ToString() : null;
            query.OrderType          = entity.OrderType;
            query.InIncomeStatusList = null;
            List <SOIncomeInfo> result = SOIncomeDA.GetListByCriteria(query);

            if (result.Exists(s => s.Status != SOIncomeStatus.Abandon))
            {
                throw new BusinessException("收款单记录已经存在,插入操作失败。");
            }

            SOIncomeDA.CreateSOIncome(entity);
            return(entity);
        }
Exemple #23
0
        /// <summary>
        /// 创建财务收款信息
        /// </summary>
        /// <param name="postPayInfo"></param>
        /// <param name="soBaseInfo"></param>
        /// <returns></returns>
        private SOIncomeInfo CreateSOIncomeInfo(PostPayInfo postPayInfo, SOBaseInfo soBaseInfo)
        {
            var soIncomeInfo = new SOIncomeInfo()
            {
                OrderType      = SOIncomeOrderType.SO,
                OrderSysNo     = postPayInfo.SOSysNo.Value,
                OrderAmt       = soBaseInfo.SOTotalAmount,
                IncomeStyle    = SOIncomeOrderStyle.Advanced,
                IncomeAmt      = postPayInfo.PayAmount,
                PrepayAmt      = soBaseInfo.PrepayAmount,
                Status         = SOIncomeStatus.Origin,
                PayAmount      = postPayInfo.PayAmount,
                PointPay       = soBaseInfo.PointPay,
                GiftCardPayAmt = soBaseInfo.GiftCardPay,
                CompanyCode    = soBaseInfo.CompanyCode
            };

            return(ObjectFactory <SOIncomeProcessor> .Instance.Create(soIncomeInfo));
        }
Exemple #24
0
        public static void CreateRefundSOIncome(SOIncomeInfo soIncomeInfo)
        {
            DataCommand command = DataCommandManager.GetDataCommand("CreateRefundSOIncome");

            command.SetParameterValue("@OrderType", soIncomeInfo.OrderType);
            command.SetParameterValue("@OrderSysNo", soIncomeInfo.OrderSysNo);
            command.SetParameterValue("@OrderAmt", soIncomeInfo.OrderAmt);
            command.SetParameterValue("@IncomeStyle", soIncomeInfo.OrderType);
            command.SetParameterValue("@IncomeAmt", soIncomeInfo.IncomeAmt);
            command.SetParameterValue("@PayAmount", soIncomeInfo.PayAmount);
            command.SetParameterValue("@IncomeUserSysNo", soIncomeInfo.InUserSysNo);
            command.SetParameterValue("@IncomeUserName", soIncomeInfo.InUserName);
            command.SetParameterValue("@Status", soIncomeInfo.Status);
            command.SetParameterValue("@PointPayAmt", soIncomeInfo.PointPay);
            command.SetParameterValue("@GiftCardPayAmt", soIncomeInfo.GiftCardPayAmt);
            command.SetParameterValue("@CompanyCode", soIncomeInfo.CompanyCode);
            command.SetParameterValue("@LanguageCode", soIncomeInfo.LanguageCode);
            command.SetParameterValue("@StoreCompanyCode", soIncomeInfo.CompanyCode);
            command.ExecuteNonQuery();
        }
Exemple #25
0
        public SOIncomeInfo load(string sql)
        {
            SOIncomeInfo       oInfo   = null;
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                DataSet ds = SqlHelper.ExecuteDataSet(sql);
                if (Util.HasMoreRow(ds))
                {
                    oInfo = new SOIncomeInfo();
                    map(oInfo, ds.Tables[0].Rows[0]);
                }
                scope.Complete();
            }
            return(oInfo);
        }
Exemple #26
0
        public void Verify(int netpaySysNo, int userSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                NetPayInfo dbInfo = Load(netpaySysNo);
                if (dbInfo.Status != (int)AppEnum.NetPayStatus.Origin)
                {
                    throw new BizException("netpay: not origin, can't verify");
                }

                dbInfo.Status = (int)AppEnum.NetPayStatus.Verified;

                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", dbInfo.SysNo);
                ht.Add("ApproveUserSysNo", userSysNo);
                ht.Add("ApproveTime", DateTime.Now);
                ht.Add("Status", dbInfo.Status);

                new NetPayDac().Update(ht);

                //so income 的唯一性那边会判断的
                SOIncomeInfo oIncome = new SOIncomeInfo();
                oIncome.OrderType       = (int)AppEnum.SOIncomeOrderType.SO;
                oIncome.OrderSysNo      = dbInfo.SOSysNo;
                oIncome.OrderAmt        = dbInfo.PayAmount;
                oIncome.IncomeStyle     = (int)AppEnum.SOIncomeStyle.Advanced;
                oIncome.IncomeAmt       = dbInfo.PayAmount;
                oIncome.IncomeUserSysNo = userSysNo;
                oIncome.IncomeTime      = DateTime.Now;
                oIncome.Status          = (int)AppEnum.SOIncomeStatus.Origin;

                SOIncomeManager.GetInstance().Insert(oIncome);

                scope.Complete();
            }
        }
Exemple #27
0
        /// <summary>
        /// 构造销售收款单信息
        /// </summary>
        private SOIncomeInfo CreateSOIncomeInfo(NetPayInfo netpayInfo, SOBaseInfo soBaseInfo)
        {
            var soIncomeInfo = new SOIncomeInfo()
            {
                IncomeStyle    = SOIncomeOrderStyle.Advanced,
                OrderType      = SOIncomeOrderType.SO,
                OrderSysNo     = netpayInfo.SOSysNo,
                OrderAmt       = soBaseInfo.SOTotalAmount,
                IncomeAmt      = netpayInfo.PayAmount,
                PrepayAmt      = soBaseInfo.PrepayAmount,
                Status         = SOIncomeStatus.Origin,
                MasterSoSysNo  = soBaseInfo.SOSplitMaster,
                PointPay       = soBaseInfo.PointPay / decimal.Parse(AppSettingManager.GetSetting("Invoice", "PointExChangeRate")),
                GiftCardPayAmt = soBaseInfo.GiftCardPay,
                PayAmount      = netpayInfo.PayAmount,
                CompanyCode    = soBaseInfo.CompanyCode //取订单上的CompanyCode
            };

            //SOIncomeProcessor检查,如果已经存在收款单记录,则不允许创建
            return(ObjectFactory <SOIncomeProcessor> .Instance.Create(soIncomeInfo));
        }
Exemple #28
0
        private static RefundResult ProcessNetWorkRefund(SOIncomeInfo entity, SOInfo soInfo)
        {
            var           result      = new RefundResult();
            List <string> payTypeList = CodeNamePairManager.GetList("Inventory", "ChinaPayPayTypeList").Select(p => p.Code).ToList();

            if (payTypeList.Contains(soInfo.Payment.PayTypeID.ToString()))
            {
                var biz          = new IPSPayUtils();
                var refundEntity = new RefundEntity
                {
                    SOSysNo     = soInfo.SOSysNo,
                    RefundSysNo = entity.OrderSysNo.Value,
                    RefundAmt   = Math.Abs(entity.IncomeAmt.Value),
                    CompanyCode = entity.CompanyCode,
                    OrderDate   = soInfo.OrderDate.Value
                };
                refundEntity.ProductAmount = Math.Abs(entity.IncomeAmt.Value)
                                             - soInfo.Amount.ShipPrice
                                             - soInfo.TariffAmt;
                refundEntity.TaxFeeAmount      = soInfo.TariffAmt;
                refundEntity.ShippingFeeAmount = soInfo.Amount.ShipPrice;


                if (soInfo.Payment.PayTypeID >= 200 && soInfo.Payment.PayTypeID < 300)
                {
                    result = biz.Refund(refundEntity);
                }
                else
                {
                    throw new BusinessException("未实现此支付方式");
                }
            }
            else
            {
                result.Result = false;

                result.Message = ("支付方式" + soInfo.Payment.PayTypeName + "不支持网关直退。");
            }
            return(result);
        }
Exemple #29
0
        public void InsertSOIncomeVoucherList(Hashtable ht)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                foreach (SOIncomeVoucherInfo oParam in ht.Keys)
                {
                    SOIncomeVoucherInfo newInfo = LoadSOIncomeVoucher(oParam);
                    if (newInfo == null)
                    {
                        InsertSOIncomeVoucher(oParam);
                    }
                    else
                    {
                        newInfo.VoucherID   = oParam.VoucherID;
                        newInfo.VoucherTime = oParam.VoucherTime;
                        UpdateSOIncomeVoucher(newInfo);
                    }

                    SOIncomeInfo oInfo = SOIncomeManager.GetInstance().Load(oParam.FSISysNo);
                    if (oInfo.OrderType == (int)AppEnum.SOIncomeOrderType.RO)
                    {
                        RMARefundInfo oRefundInfo = RMARefundManager.GetInstance().LoadRMARefund(oInfo.OrderSysNo);
                        if (oRefundInfo != null)
                        {
                            Hashtable rmaht = new Hashtable();
                            rmaht.Add("SysNo", oRefundInfo.SysNo);
                            rmaht.Add("VoucherID", oParam.VoucherID);
                            rmaht.Add("VoucherTime", oParam.VoucherTime);
                            RMARefundManager.GetInstance().UpdateMasterMemo(rmaht);
                        }
                    }
                }
                scope.Complete();
            }
        }
Exemple #30
0
        public void ROCancelReturn(int roSysNo)
        {
            TransactionOptions options = new TransactionOptions();

            options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
            options.Timeout        = TransactionManager.DefaultTimeout;

            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options))
            {
                SOIncomeInfo dbInfo = LoadValid((int)AppEnum.SOIncomeOrderType.RO, roSysNo);
                if (dbInfo.Status == (int)AppEnum.SOIncomeStatus.Confirmed)
                {
                    throw new BizException("收款单财务已经确认,请通知财务取消确认");
                }

                Hashtable ht = new Hashtable(5);
                ht.Add("SysNo", dbInfo.SysNo);
                ht.Add("Status", (int)AppEnum.SOIncomeStatus.Abandon);

                new SOIncomeDac().Update(ht);
                scope.Complete();
            }
        }