Пример #1
0
        /// <summary>
        /// 根据订单获取退货商品列表
        /// </summary>
        /// <param name="orderSysNo">订单编号</param>
        /// <param name="returyType">退换货乐讯</param>
        /// <param name="productSysNo">商品系统编号</param>
        /// <returns></returns>
        /// <remarks>2013-08-27 邵斌 创建</remarks>
        public CBWebRMA GetReturnProductListByOrder(int orderSysNo, RmaStatus.RMA类型 returyType, int?productSysNo = null)
        {
            var result = new CBWebRMA();

            result.Items = new List <CBWebRMAItem>(); //页面出库单显示列表

            //判断订单是否存在
            var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo);

            if (order != null)
            {
                result.CustomerSysNo = order.CustomerSysNo;
                result.ShipType      = order.DeliveryTypeSysNo;                                                   //原订单配送方式

                var rmaItemList  = RmaBo.Instance.GetItemListByOrder(orderSysNo);                                 //退换货明细 (2013-08-07 朱成果)
                var stockOutList = Warehouse.WhWarehouseBo.Instance.GetWhStockOutListByOrderID(orderSysNo, true); //获取该订单的出库单列表(包含出库单明细)

                CBSimplePdProduct      product = null;
                CBWebRMAItem           stockOutItemEx;
                IList <WhStockOutItem> productItems;

                //遍历出库单,用出库单设置显示列表
                foreach (var stockOut in stockOutList)
                {
                    //过滤商品,只处理指定商品
                    if (productSysNo.HasValue)
                    {
                        productItems = stockOut.Items.Where(p => p.ProductSysNo == productSysNo.Value).ToList();
                    }
                    else
                    {
                        productItems = stockOut.Items;
                    }

                    //遍历每个出库单组合商品
                    foreach (var item in productItems)
                    {
                        stockOutItemEx = result.Items.FirstOrDefault(i => i.ProductSysNo == item.ProductSysNo);

                        //判断商品是否已经存在列表,如果不存在就读取数据
                        if (stockOutItemEx == null)
                        {
                            product = BLL.Web.PdProductBo.Instance.GetProduct(item.ProductSysNo);

                            //读取基本数据
                            stockOutItemEx = new CBWebRMAItem();
                            stockOutItemEx.StockOutItemSysNo = item.SysNo;
                            stockOutItemEx.ProductSysNo      = item.ProductSysNo;
                            stockOutItemEx.ProductName       = item.ProductName;
                            stockOutItemEx.OriginalPrice     = item.OriginalPrice;
                            stockOutItemEx.PackageDesc       = product.PackageDesc; //商品基础信息
                            stockOutItemEx.Image             = product.ProductImage;
                            stockOutItemEx.RealSalesAmount   = item.RealSalesAmount;
                            stockOutItemEx.OrderItemSysNo    = item.OrderItemSysNo;

                            //添加到退换货明细
                            result.Items.Add(stockOutItemEx);
                        }

                        //TODO 价格优惠暂时没有实现或确切的计算方式,等待确定业务逻辑和算法
                        stockOutItemEx.Preferential = 0;

                        //计算实际销售金额和消失数量
                        stockOutItemEx.RealSalesAmount += item.RealSalesAmount;
                        stockOutItemEx.ProductQuantity += item.ProductQuantity;

                        //判断商品是否可进行退换货操作
                        if (RmaBo.Instance.OrderRMARequest(stockOut.OrderSysNO, stockOutItemEx.ProductSysNo, (int)returyType))
                        {
                            //标记能否退换货
                            stockOutItemEx.EnableRMA = true;

                            //计算可退换货数量
                            stockOutItemEx.ProductQuantityAble += item.ProductQuantity -
                                                                  RmaBo.Instance.GetAllRmaQuantity(
                                rmaItemList, item.SysNo, 0);
                        }
                    }
                }

                //获取取件地址
                result.PickUpAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);

                //获取发票信息
                var invoice = BLL.Order.SoOrderBo.Instance.GetFnInvoice(order.InvoiceSysNo);

                //是否有发票
                if (invoice != null)
                {
                    //如果有发票,并取得发票的状态用于前台判断是否需要退票
                    result.InvoiceSysNo  = invoice.SysNo;
                    result.HasInvoice    = true;
                    result.InvoiceStatus = (Hyt.Model.WorkflowStatus.FinanceStatus.发票状态)invoice.Status;
                }
            }

            //安能否退货排序
            result.Items = result.Items.OrderByDescending(i => i.EnableRMA).ToList();

            result.OrderSysNo = orderSysNo;

            return(result);
        }
Пример #2
0
        /// <summary>
        /// 封装退换货单实体
        /// </summary>
        /// <param name="exchange">客户提交退换货信息</param>
        /// <param name="rmaType">RMA类型</param>
        /// <returns>换货单实体</returns>
        /// <remarks>2013-09-12 周唐炬 创建</remarks>
        private CBRcReturn GetExchangesModel(ExchangeOrders exchange, RmaStatus.RMA类型 rmaType)
        {
            //换货单实体
            var model = new CBRcReturn()
            {
                RMAItems            = new List <RcReturnItem>(),
                CustomerSysNo       = exchange.CustomerSysNo,
                OrderSysNo          = exchange.OrderSysNo,
                RMARemark           = exchange.RmaReason,
                PickupTypeSysNo     = exchange.PickupTypeSysNo,
                WarehouseSysNo      = exchange.WarehouseSysNo,
                PickUpAddressSysNo  = exchange.PickUpAddressSysNo,
                ReceiveAddressSysNo = exchange.ReceiveAddressSysNo,
                Status           = (int)WarehouseStatus.退换货单状态.待审核,
                Source           = (int)RmaStatus.退换货申请单来源.会员,
                RmaType          = rmaType.GetHashCode(),
                HandleDepartment = (int)RmaStatus.退换货处理部门.客服中心
            };

            model.CreateBy   = model.LastUpdateBy = User.SystemUser;
            model.CreateDate = model.LastUpdateDate = DateTime.Now;
            //出库单编号
            var stockOutSysNo = 0;

            if (exchange.ProductReturns != null && exchange.ProductReturns.Any())
            {
                #region 退换货商品明细

                foreach (var item in exchange.ProductReturns)
                {
                    var whStockOutItem = WhWarehouseBo.Instance.GetWhStockOutItem(item.StockOutItemSysNo);
                    if (whStockOutItem == null)
                    {
                        throw new HytException("商品出库信息有误,请联系客服!");
                    }
                    stockOutSysNo = whStockOutItem.StockOutSysNo;
                    model.RMAItems.Add(new RcReturnItem
                    {
                        StockOutItemSysNo = item.StockOutItemSysNo,
                        ProductSysNo      = item.ProductSysNo,
                        ProductName       = whStockOutItem.ProductName,
                        OriginPrice       = whStockOutItem.OriginalPrice,
                        RmaQuantity       = item.RmaQuantity,
                        RmaReason         = exchange.RmaReason
                    });
                    #region 重新计算明细退款金额

                    if (rmaType != RmaStatus.RMA类型.售后退货)
                    {
                        continue;
                    }
                    var     rmaItem    = RmaBo.Instance.CalculateRmaAmountByStockOutItem(model.OrderSysNo, model.RMAItems.ToDictionary(x => x.StockOutItemSysNo, x => x.RmaQuantity));
                    decimal fundAmount = 0;
                    foreach (var returnItem in model.RMAItems)
                    {
                        //如果是自定义价格就不重新赋值
                        if (rmaItem != null && rmaItem.StockOutItemAmount != null && returnItem.ReturnPriceType != (int)RmaStatus.商品退款价格类型.自定义价格)
                        {
                            var soi = rmaItem.StockOutItemAmount.FirstOrDefault(x => x.Key == returnItem.StockOutItemSysNo);
                            returnItem.RefundProductAmount = soi.Value;
                        }
                        fundAmount += returnItem.RefundProductAmount;
                    }
                    var rmaItemList = RmaBo.Instance.CalculateRefundRmaAmount(model.OrderSysNo, fundAmount, false);
                    if (rmaItem == null || rmaItemList == null)
                    {
                        continue;
                    }
                    model.OrginPoint            = rmaItem.OrginPoint;
                    model.OrginAmount           = rmaItem.OrginAmount;
                    model.OrginCoin             = rmaItem.OrginCoin;
                    model.CouponAmount          = rmaItem.CouponAmount;
                    model.DeductedInvoiceAmount = model.DeductedInvoiceAmount;
                    model.RefundProductAmount   = rmaItemList.RefundProductAmount;
                    model.RedeemAmount          = rmaItemList.RedeemAmount;
                    model.RefundCoin            = rmaItemList.RefundCoin;
                    model.RefundPoint           = rmaItemList.RefundPoint;
                    //实退总金额(实退商品金额-发票扣款金额-现金补偿金额-实退惠源币)
                    model.RefundTotalAmount = fundAmount - rmaItemList.RedeemAmount - model.DeductedInvoiceAmount - rmaItemList.RefundCoin;

                    #endregion
                }

                #endregion
                //默认退换货仓库
                if (model.WarehouseSysNo == 0)
                {
                    model.WarehouseSysNo = WhWarehouseBo.Instance.Get(stockOutSysNo).WarehouseSysNo;
                }
            }
            else
            {
                throw new HytException("换货商品明细数量应该大于0!");
            }
            return(model);
        }