// GET: Web/OrderRefund /// <summary> /// 退款申请 /// </summary> /// <param name="id"></param> /// <param name="itemId"></param> /// <returns></returns> public ActionResult RefundApply(long orderid, long?itemId, long?refundid) { Himall.Web.Areas.Web.Models.RefundApplyModel model = new Himall.Web.Areas.Web.Models.RefundApplyModel(); model.RefundMode = null; model.OrderItemId = null; var ordser = ServiceHelper.Create <IOrderService>(); var order = ordser.GetOrder(orderid, CurrentUser.Id); string errormsg = ""; string jumpurl = "/" + ViewBag.AreaName + "/Member/Center"; bool isok = true; if (isok) { if (order == null) { isok = false; errormsg = "该预约单已删除或不属于该用户"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("该预约单已删除或不属于该用户"); } } if (isok) { if ((int)order.OrderStatus < 2) { isok = false; errormsg = "错误的售后申请,预约单状态有误"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后申请,预约单状态有误"); } } if (isok) { if (itemId == null && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != OrderInfo.OrderOperateStatus.WaitSelfPickUp) { isok = false; errormsg = "错误的预约单退款申请,预约单状态有误"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的预约单退款申请,预约单状态有误"); } } if (isok) { //售后时间限制 if (_iOrderService.IsRefundTimeOut(orderid)) { isok = false; errormsg = "预约单已超过售后期"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("预约单已超过售后期"); } } if (isok) { //计算可退金额 预留 ordser.CalculateOrderItemRefund(orderid); OrderItemInfo item = new OrderItemInfo(); model.MaxRefundGoodsNumber = 0; model.MaxRefundAmount = order.OrderEnabledRefundAmount; if (itemId == null) { model.OrderItems = order.OrderItemInfo.ToList(); } else { item = order.OrderItemInfo.Where(a => a.Id == itemId).FirstOrDefault(); model.OrderItems.Add(item); model.MaxRefundGoodsNumber = item.Quantity - item.ReturnQuantity; model.MaxRefundAmount = item.EnabledRefundAmount - item.RefundPrice; } if (!model.MaxRefundAmount.HasValue) { model.MaxRefundAmount = 0; } bool isCanApply = false; var refundser = _iRefundService; OrderRefundInfo refunddata; if (order.OrderStatus == OrderInfo.OrderOperateStatus.WaitDelivery) { isCanApply = refundser.CanApplyRefund(orderid, item.Id); } else { isCanApply = refundser.CanApplyRefund(orderid, item.Id, false); } if (!refundid.HasValue) { if (!isCanApply) { isok = false; errormsg = "您已申请过售后,不可重复申请"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("您已申请过售后,不可重复申请"); } model.ContactPerson = CurrentUser.RealName; model.ContactCellPhone = CurrentUser.CellPhone; model.OrderItemId = itemId; if (!model.OrderItemId.HasValue) { model.IsOrderAllRefund = true; model.RefundMode = OrderRefundInfo.OrderRefundMode.OrderRefund; } } else { refunddata = refundser.GetOrderRefund(refundid.Value, CurrentUser.Id); if (refunddata == null) { isok = false; errormsg = "错误的售后数据"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后数据"); } if (isok) { if (refunddata.SellerAuditStatus != OrderRefundInfo.OrderRefundAuditStatus.UnAudit) { isok = false; errormsg = "错误的售后状态,不可激活"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后状态,不可激活"); } } if (isok) { model.ContactPerson = refunddata.ContactPerson; model.ContactCellPhone = refunddata.ContactCellPhone; model.OrderItemId = refunddata.OrderItemId; model.IsOrderAllRefund = (refunddata.RefundMode == OrderRefundInfo.OrderRefundMode.OrderRefund); model.RefundMode = refunddata.RefundMode; model.RefundReasonValue = refunddata.Reason; model.RefundWayValue = refunddata.RefundPayType; model.CertPic1 = refunddata.CertPic1; model.CertPic2 = refunddata.CertPic2; model.CertPic3 = refunddata.CertPic3; } } if (!model.IsOrderAllRefund && item.EnabledRefundAmount.HasValue) { model.RefundGoodsPrice = item.EnabledRefundAmount.Value / item.Quantity; } if (isok) { model.OrderInfo = order; model.OrderId = orderid; model.RefundId = refundid; var reasons = refundser.GetRefundReasons(); foreach (var _ir in reasons) { _ir.AfterSalesText = _ir.AfterSalesText.Trim(); } List <SelectListItem> reasel = new List <SelectListItem>(); SelectListItem _tmpsel; _tmpsel = new SelectListItem { Text = "选择售后原因", Value = "" }; reasel.Add(_tmpsel); foreach (var _i in reasons) { _tmpsel = new SelectListItem { Text = _i.AfterSalesText, Value = _i.AfterSalesText }; if (!string.IsNullOrWhiteSpace(model.RefundReasonValue)) { if (_i.AfterSalesText == model.RefundReasonValue) { _tmpsel.Selected = true; } } reasel.Add(_tmpsel); } model.RefundReasons = reasel; List <SelectListItem> list = new List <SelectListItem> { new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackCapital.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackCapital).ToString() } }; if (order.CanBackOut()) { _tmpsel = new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackOut.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackOut).ToString() }; //if (model.RefundWayValue.HasValue) //{ // if (_tmpsel.Value == model.RefundWayValue.ToString()) // { // _tmpsel.Selected = true; // } //} _tmpsel.Selected = true; //若预约单支付方式为支付宝、微信支付则退款方式默认选中“退款原路返回” list.Add(_tmpsel); model.BackOut = 1; } model.RefundWay = list; } } ViewBag.errormsg = errormsg; return(View(model)); }
// GET: Web/OrderRefund /// <summary> /// 退款申请 /// </summary> /// <param name="id"></param> /// <param name="itemId"></param> /// <returns></returns> public ActionResult RefundApply(long orderid, long?itemId, long?refundid) { Himall.Web.Areas.Web.Models.RefundApplyModel model = new Himall.Web.Areas.Web.Models.RefundApplyModel(); model.RefundMode = null; model.OrderItemId = null; var ordser = ServiceApplication.Create <IOrderService>(); var order = ordser.GetOrder(orderid, CurrentUser.Id); string errormsg = ""; string jumpurl = "/" + ViewBag.AreaName + "/Member/Center"; bool isok = true; VirtualProductInfo vProductInfo = null; if (isok) { if (order == null) { isok = false; errormsg = "该订单已删除或不属于该用户"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("该订单已删除或不属于该用户"); } } if (isok) { if (order.OrderType != OrderInfo.OrderTypes.Virtual && (int)order.OrderStatus < 2) { isok = false; errormsg = "错误的售后申请,订单状态有误"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后申请,订单状态有误"); } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { //如果为虚拟商品,则要判断该商品是否允许退款,且该订单中是否至少有一个待核销的核销码 var orderItemInfo = OrderApplication.GetOrderItemsByOrderId(order.Id).FirstOrDefault(); if (orderItemInfo != null) { itemId = orderItemInfo.Id; var virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderItemInfo.ProductId); if (virtualProductInfo != null) { if (virtualProductInfo.SupportRefundType == 3) { isok = false; errormsg = "该商品不支持退款"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("该商品不支持退款"); } if (virtualProductInfo.SupportRefundType == 1 && DateTime.Now > virtualProductInfo.EndDate.Value) { throw new Himall.Core.HimallException("该商品不支持过期退款"); } var orderVerificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }); long num = orderVerificationCodes.Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).Count(); if (num == 0) { isok = false; errormsg = "该商品没有可退的核销码"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("该商品没有可退的核销码"); } vProductInfo = virtualProductInfo; } } } } if (isok) { if (order.OrderType != OrderInfo.OrderTypes.Virtual) { if (itemId == null && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitDelivery && order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitSelfPickUp) { isok = false; errormsg = "错误的订单退款申请,订单状态有误"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的订单退款申请,订单状态有误"); } } } if (isok) { if (order.OrderType != OrderInfo.OrderTypes.Virtual) { //售后时间限制 if (_iOrderService.IsRefundTimeOut(orderid)) { isok = false; errormsg = "订单已超过售后期"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("订单已超过售后期"); } } } if (isok) { //计算可退金额 预留 ordser.CalculateOrderItemRefund(orderid); var item = new OrderItemInfo(); model.MaxRefundGoodsNumber = 0; model.MaxRefundAmount = order.OrderEnabledRefundAmount; if (itemId == null) { model.OrderItems = _iOrderService.GetOrderItemsByOrderId(order.Id); } else { item = _iOrderService.GetOrderItem(itemId.Value); model.OrderItems.Add(item); model.MaxRefundGoodsNumber = item.Quantity - item.ReturnQuantity; model.MaxRefundAmount = item.EnabledRefundAmount - item.RefundPrice; } if (!model.MaxRefundAmount.HasValue) { model.MaxRefundAmount = 0; } if (order.OrderType == OrderInfo.OrderTypes.Virtual) { var count = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status != OrderInfo.VerificationCodeStatus.WaitVerification).ToList().Count; if (item.EnabledRefundAmount.HasValue) { decimal price = item.EnabledRefundAmount.Value / item.Quantity; model.MaxRefundAmount = item.EnabledRefundAmount.Value - Math.Round(count * price, 2, MidpointRounding.AwayFromZero); } } bool isCanApply = false; var refundser = _iRefundService; Entities.OrderRefundInfo refunddata; if (order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitDelivery) { isCanApply = refundser.CanApplyRefund(orderid, item.Id); } else { isCanApply = refundser.CanApplyRefund(orderid, item.Id, false); } if (!refundid.HasValue) { if (!isCanApply) { isok = false; errormsg = "您已申请过售后,不可重复申请"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("您已申请过售后,不可重复申请"); } //model.ContactPerson = CurrentUser.RealName; //model.ContactCellPhone = CurrentUser.CellPhone; // model.ContactCellPhone = order.CellPhone; model.ContactPerson = string.IsNullOrEmpty(order.ShipTo) ? CurrentUser.RealName : order.ShipTo; model.ContactCellPhone = string.IsNullOrEmpty(order.CellPhone) ? CurrentUser.CellPhone : order.CellPhone; model.OrderItemId = itemId; if (!model.OrderItemId.HasValue) { model.IsOrderAllRefund = true; model.RefundMode = Entities.OrderRefundInfo.OrderRefundMode.OrderRefund; } } else { refunddata = refundser.GetOrderRefund(refundid.Value, CurrentUser.Id); if (refunddata == null) { isok = false; errormsg = "错误的售后数据"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后数据"); } if (isok) { if (order.OrderType != OrderInfo.OrderTypes.Virtual) { if (refunddata.SellerAuditStatus != Entities.OrderRefundInfo.OrderRefundAuditStatus.UnAudit) { isok = false; errormsg = "错误的售后状态,不可激活"; return(Redirect(jumpurl)); throw new Himall.Core.HimallException("错误的售后状态,不可激活"); } } } if (isok) { model.ContactPerson = refunddata.ContactPerson; model.ContactCellPhone = refunddata.ContactCellPhone; model.OrderItemId = refunddata.OrderItemId; model.IsOrderAllRefund = (refunddata.RefundMode == Entities.OrderRefundInfo.OrderRefundMode.OrderRefund); model.RefundMode = refunddata.RefundMode; model.RefundReasonValue = refunddata.Reason; model.RefundWayValue = refunddata.RefundPayType; model.CertPic1 = refunddata.CertPic1; model.CertPic2 = refunddata.CertPic2; model.CertPic3 = refunddata.CertPic3; } } if (!model.IsOrderAllRefund && item.EnabledRefundAmount.HasValue) { model.RefundGoodsPrice = item.EnabledRefundAmount.Value / item.Quantity; } if (isok) { model.OrderInfo = order; model.OrderId = orderid; model.RefundId = refundid; var reasons = refundser.GetRefundReasons(); foreach (var _ir in reasons) { _ir.AfterSalesText = _ir.AfterSalesText.Trim(); } List <SelectListItem> reasel = new List <SelectListItem>(); SelectListItem _tmpsel; _tmpsel = new SelectListItem { Text = "选择售后理由", Value = "" }; //reasel.Add(_tmpsel); foreach (var _i in reasons) { _tmpsel = new SelectListItem { Text = _i.AfterSalesText, Value = _i.AfterSalesText }; if (!string.IsNullOrWhiteSpace(model.RefundReasonValue)) { if (_i.AfterSalesText == model.RefundReasonValue) { _tmpsel.Selected = true; } } reasel.Add(_tmpsel); } model.RefundReasons = reasel; List <SelectListItem> list = new List <SelectListItem> { new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackCapital.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackCapital).ToString() } }; if (order.CanBackOut()) { _tmpsel = new SelectListItem { Text = OrderRefundInfo.OrderRefundPayType.BackOut.ToDescription(), Value = ((int)OrderRefundInfo.OrderRefundPayType.BackOut).ToString() }; //if (model.RefundWayValue.HasValue) //{ // if (_tmpsel.Value == model.RefundWayValue.ToString()) // { // _tmpsel.Selected = true; // } //} _tmpsel.Selected = true; //若订单支付方式为支付宝、微信支付则退款方式默认选中“退款原路返回” list.Add(_tmpsel); model.BackOut = 1; } model.RefundWay = list; } if (order.DeliveryType == DeliveryType.SelfTake) { var shopBranch = ShopBranchApplication.GetShopBranchById(order.ShopBranchId); model.ReturnGoodsAddress = RegionApplication.GetFullName(shopBranch.AddressId); model.ReturnGoodsAddress += " " + shopBranch.AddressDetail; model.ReturnGoodsAddress += " " + shopBranch.ContactPhone; } } ViewBag.errormsg = errormsg; #region 虚拟订单退款 ViewBag.orderVerificationCode = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>() { order.Id }).Where(a => a.Status == OrderInfo.VerificationCodeStatus.WaitVerification).ToList(); #endregion ViewBag.IsVirtual = order.OrderType == OrderInfo.OrderTypes.Virtual ? 1 : 0; ViewBag.VirtualProductInfo = vProductInfo; return(View(model)); }