public static RMAManager GetInstance() { if(_instance==null) { _instance = new RMAManager(); } return _instance; }
public static RMAManager GetInstance() { if (_instance == null) { _instance = new RMAManager(); } return(_instance); }
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(); } }
public ROInfo BuildROFromRMA(RMAInfo rmaInfo) { ROInfo roInfo = new ROInfo(); SOInfo soInfo = SaleManager.GetInstance().LoadSO(rmaInfo.SOSysNo); roInfo.RMASysNo = rmaInfo.SysNo; roInfo.CreateTime = DateTime.Now; roInfo.CreateUserSysNo = rmaInfo.RMAUserSysNo; roInfo.StockSysNo = soInfo.StockSysNo; roInfo.Status = (int)AppEnum.ROStatus.Origin; roInfo.ReceiveName = soInfo.ReceiveName; roInfo.ReceivePhone = soInfo.ReceivePhone; roInfo.ReceiveAddress = soInfo.ReceiveAddress; roInfo.PointAmt = 0; roInfo.CashAmt = 0m; roInfo.RedeemAmt = 0m; Hashtable leftHash = RMAManager.GetInstance().GetLeftRMAQty(rmaInfo.SOSysNo); decimal originCashAmt = 0m; int originPointAmt = 0; foreach (RMAItemInfo rmaItem in rmaInfo.ItemHash.Values) { if (rmaItem.RMAType == (int)AppEnum.RMAType.Return) { ROItemInfo roItem = new ROItemInfo(); roItem.ProductSysNo = rmaItem.ProductSysNo; roItem.Quantity = rmaItem.RMAQty; if (roItem.Quantity > (int)leftHash[(int)roItem.ProductSysNo]) { throw new BizException("Too many item(" + roItem.ProductSysNo + ") to return"); } foreach (SOItemInfo soItem in soInfo.ItemHash.Values) { if (soItem.ProductSysNo == rmaItem.ProductSysNo) { roItem.Price = soItem.Price; roItem.Point = soItem.Point; roItem.Cost = soItem.Cost; roItem.Weight = soItem.Weight; roItem.RefundPoint = soItem.Point; roItem.RefundCash = soItem.Price; roItem.ReturnPriceType = (int)AppEnum.ReturnPriceType.InputPrice; roItem.ReturnType = (int)AppEnum.ReturnType.SecondHand; originCashAmt += roItem.Price * roItem.Quantity; originPointAmt += roItem.Point * roItem.Quantity; break; } } roInfo.ItemHash.Add(roItem.ProductSysNo, roItem); } } roInfo.OriginPointAmt = originPointAmt; roInfo.OriginCashAmt = originCashAmt; return(roInfo); }
private void CalcRO(ROInfo roInfo) { TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { RMAInfo rmaInfo = RMAManager.GetInstance().LoadMaster(roInfo.RMASysNo); if (rmaInfo == null || (rmaInfo.Status != (int)AppEnum.RMAStatus.Handled && rmaInfo.Status != (int)AppEnum.RMAStatus.Closed)) { throw new BizException("Related RMA Sheet load error"); } SOInfo soInfo = SaleManager.GetInstance().LoadSO(rmaInfo.SOSysNo); if (soInfo == null || soInfo.Status != (int)AppEnum.SOStatus.OutStock) { throw new BizException("Related SO load error"); } decimal cashPayRate = soInfo.CashPay / soInfo.SOAmt;//获取销售单商品金额的现金支付比例 decimal refundCash = 0m; int refundPoint = 0; foreach (ROItemInfo roItem in roInfo.ItemHash.Values) { roItem.RefundCash = roItem.Price * cashPayRate * roItem.Quantity; roItem.RefundPoint = (roItem.Point - Convert.ToInt32(decimal.Round(roItem.Price * (1 - cashPayRate), 1) * AppConst.ExchangeRate)) * roItem.Quantity; refundCash += roItem.RefundCash; refundPoint += roItem.RefundPoint; } roInfo.CashAmt = Util.ToMoney(refundCash); roInfo.PointAmt = refundPoint; CustomerInfo cmInfo = CustomerManager.GetInstance().Load(soInfo.CustomerSysNo); if ((cmInfo.ValidScore - refundPoint) < 0) { roInfo.RedeemAmt = Convert.ToDecimal(cmInfo.ValidScore + refundPoint) / AppConst.ExchangeRate; } else { roInfo.RedeemAmt = 0m; } scope.Complete(); } }
/// <summary> /// 获取ro发票 /// </summary> /// <param name="roSysNo"></param> /// <returns></returns> public ROInvoiceInfo GetROInvoice(int roSysNo) { ROInvoiceInfo invoice = new ROInvoiceInfo(); ROInfo ro = this.LoadRO(roSysNo); RMAInfo rma = RMAManager.GetInstance().Load(ro.RMASysNo); SOInfo so = SaleManager.GetInstance().LoadSO(rma.SOSysNo); IcsonInfo son = new IcsonInfo(); invoice.AuditUserSysNo = ro.AuditUserSysNo; invoice.CompanyAddress = son.CompanyAddress; invoice.InvoiceNote = so.InvoiceNote; invoice.SOID = so.SOID; PayTypeInfo ptInfo = ASPManager.GetInstance().LoadPayType(so.PayTypeSysNo); invoice.PayTypeName = ptInfo.PayTypeName; invoice.ReceiveAddress = ro.ReceiveAddress; CustomerInfo customer = CustomerManager.GetInstance().Load(so.CustomerSysNo); invoice.CustomerName = customer.CustomerName; invoice.CustomerSysNo = customer.SysNo; invoice.ReceiveName = ro.ReceiveName; invoice.ReceivePhone = ro.ReceivePhone; invoice.ROID = ro.ROID; invoice.ROSysNo = ro.SysNo; ShipTypeInfo stInfo = ASPManager.GetInstance().LoadShipType(so.ShipTypeSysNo); invoice.ShipTypeName = stInfo.ShipTypeName; UserInfo employee = SysManager.GetInstance().LoadUser(so.OutUserSysNo); if (employee != null) { invoice.WarehouseUserCode = employee.UserID; } else { invoice.WarehouseUserCode = ""; } this.InitPageList(ro, invoice); invoice.TotalPage = invoice.ItemHash.Count; invoice.TotalWeight = ro.GetTotalWeight(); return(invoice); }
public void AbandonRMA(RMAInfo oRMA) { TransactionOptions options = new TransactionOptions(); options.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; options.Timeout = TransactionManager.DefaultTimeout; using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, options)) { int currentStatus = this.GetRMACurrentStatus(oRMA.SysNo); if (currentStatus != (int)AppEnum.RMAStatus.Origin && currentStatus != (int)AppEnum.RMAStatus.Received) { throw new BizException("此单已经过处理,不能作废"); } Hashtable paramHash = new Hashtable(2); paramHash.Add("LastUserSysNo", oRMA.LastUserSysNo); paramHash.Add("Status", oRMA.Status); paramHash.Add("SysNo", oRMA.SysNo); RMAManager.GetInstance().UpdateRMAMaster(paramHash); scope.Complete(); } }
public void CancelReturnRO(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.Returned) { throw new BizException("This RO is not returned now ,can't cancel return"); } roInfo.Status = (int)AppEnum.ROStatus.Audited; //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*(-1), roItem.Cost); UnitCostManager.GetInstance().SetCost(roItem.ReturnSysNo, roItem.Quantity * (-1), roItem.Cost); InventoryManager.GetInstance().SetInStockQty(roInfo.StockSysNo, roItem.ReturnSysNo, roItem.Quantity * (-1)); } //update customer score if (roInfo.PointAmt != 0) { RMAInfo oRMA = RMAManager.GetInstance().LoadMaster(roInfo.RMASysNo); PointManager.GetInstance().SetScore(oRMA.CustomerSysNo, roInfo.PointAmt, (int)AppEnum.PointLogType.CancelReturn, roInfo.SysNo.ToString()); } //abandon soincome SOIncomeManager.GetInstance().ROCancelReturn(roInfo.SysNo); scope.Complete(); } }