Skip to content

Commit

Permalink
Return item request should generate RMA #24
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmitry Chmir committed Jun 21, 2016
1 parent d1ab5db commit c90f07e
Show file tree
Hide file tree
Showing 24 changed files with 245 additions and 26 deletions.
5 changes: 5 additions & 0 deletions src/Libraries/Nop.Core/Domain/Orders/OrderSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ public class OrderSettings : ISettings
/// Gets or sets a value indicating whether "Return requests" are allowed
/// </summary>
public bool ReturnRequestsEnabled { get; set; }

/// <summary>
/// Gets or sets a value "Return requests" number mask
/// </summary>
public string ReturnRequestNumberMask { get; set; }

/// <summary>
/// Gets or sets a number of days that the Return Request Link will be available for customers after order placing.
Expand Down
1 change: 1 addition & 0 deletions src/Libraries/Nop.Core/Domain/Orders/ReturnRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace Nop.Core.Domain.Orders
/// </summary>
public partial class ReturnRequest : BaseEntity
{
public string CustomNumber { get; set; }
/// <summary>
/// Gets or sets the store identifier
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4205,7 +4205,7 @@ protected virtual void InstallMessageTemplates()
{
Name = "NewReturnRequest.StoreOwnerNotification",
Subject = "%Store.Name%. New return request.",
Body = "<p><a href=\"%Store.URL%\">%Store.Name%</a> <br /><br />%Customer.FullName% has just submitted a new return request. Details are below:<br />Request ID: %ReturnRequest.ID%<br />Product: %ReturnRequest.Product.Quantity% x Product: %ReturnRequest.Product.Name%<br />Reason for return: %ReturnRequest.Reason%<br />Requested action: %ReturnRequest.RequestedAction%<br />Customer comments:<br />%ReturnRequest.CustomerComment%</p>",
Body = "<p><a href=\"%Store.URL%\">%Store.Name%</a> <br /><br />%Customer.FullName% has just submitted a new return request. Details are below:<br />Request ID: %ReturnRequest.CustomNumber%<br />Product: %ReturnRequest.Product.Quantity% x Product: %ReturnRequest.Product.Name%<br />Reason for return: %ReturnRequest.Reason%<br />Requested action: %ReturnRequest.RequestedAction%<br />Customer comments:<br />%ReturnRequest.CustomerComment%</p>",
IsActive = true,
EmailAccountId = eaGeneral.Id,
},
Expand Down Expand Up @@ -4317,7 +4317,7 @@ protected virtual void InstallMessageTemplates()
{
Name = "ReturnRequestStatusChanged.CustomerNotification",
Subject = "%Store.Name%. Return request status was changed.",
Body = "<p><a href=\"%Store.URL%\">%Store.Name%</a> <br /><br />Hello %Customer.FullName%,<br />Your return request #%ReturnRequest.ID% status has been changed.</p>",
Body = "<p><a href=\"%Store.URL%\">%Store.Name%</a> <br /><br />Hello %Customer.FullName%,<br />Your return request #%ReturnRequest.CustomNumber% status has been changed.</p>",
IsActive = true,
EmailAccountId = eaGeneral.Id,
},
Expand Down Expand Up @@ -4914,6 +4914,7 @@ protected virtual void InstallSettings()

settingService.SaveSetting(new OrderSettings
{
ReturnRequestNumberMask = "{ID}",
IsReOrderAllowed = true,
MinOrderSubtotalAmount = 0,
MinOrderSubtotalAmountIncludingTax = false,
Expand Down
4 changes: 2 additions & 2 deletions src/Libraries/Nop.Services/Messages/MessageTokenProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,7 @@ public virtual void AddRecurringPaymentTokens(IList<Token> tokens, RecurringPaym

public virtual void AddReturnRequestTokens(IList<Token> tokens, ReturnRequest returnRequest, OrderItem orderItem)
{
tokens.Add(new Token("ReturnRequest.ID", returnRequest.Id.ToString()));
tokens.Add(new Token("ReturnRequest.CustomNumber", returnRequest.CustomNumber));
tokens.Add(new Token("ReturnRequest.OrderId", orderItem.OrderId.ToString()));
tokens.Add(new Token("ReturnRequest.Product.Quantity", returnRequest.Quantity.ToString()));
tokens.Add(new Token("ReturnRequest.Product.Name", orderItem.Product.Name));
Expand Down Expand Up @@ -992,7 +992,7 @@ public virtual string[] GetListOfAllowedTokens()
"%Shipment.TrackingNumberURL%",
"%Shipment.Product(s)%",
"%Shipment.URLForCustomer%",
"%ReturnRequest.ID%",
"%ReturnRequest.CustomNumber%",
"%ReturnRequest.OrderId%",
"%ReturnRequest.Product.Quantity%",
"%ReturnRequest.Product.Name%",
Expand Down
2 changes: 2 additions & 0 deletions src/Libraries/Nop.Services/Nop.Services.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,10 @@
<Compile Include="Logging\ClearLogTask.cs" />
<Compile Include="Media\AzurePictureService.cs" />
<Compile Include="Media\ResizeType.cs" />
<Compile Include="Orders\ICustomNumberFormatter.cs" />
<Compile Include="Orders\IReturnRequestService.cs" />
<Compile Include="Orders\IRewardPointService.cs" />
<Compile Include="Orders\CustomNumberFormatter.cs" />
<Compile Include="Orders\RewardPointService.cs" />
<Compile Include="Orders\ReturnRequestService.cs" />
<Compile Include="Shipping\EventPublisherExtensions.cs" />
Expand Down
64 changes: 64 additions & 0 deletions src/Libraries/Nop.Services/Orders/CustomNumberFormatter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
//using System;
//using System.Text.RegularExpressions;
using Nop.Core.Domain.Orders;

namespace Nop.Services.Orders
{
public partial class CustomNumberFormatter : ICustomNumberFormatter
{
#region Fields

private OrderSettings _orderSettings;

#endregion

#region Ctor

public CustomNumberFormatter(OrderSettings orderSettings)
{
_orderSettings = orderSettings;
}

#endregion

#region Methods

public virtual string GenerateReturnRequestCustomNumber(ReturnRequest returnRequest)
{
var customNumber = string.Empty;

if (string.IsNullOrEmpty(_orderSettings.ReturnRequestNumberMask))
{
customNumber = returnRequest.Id.ToString();
}
else
{
customNumber = _orderSettings.ReturnRequestNumberMask
.Replace("{ID}", returnRequest.Id.ToString())
.Replace("{YYYY}", returnRequest.CreatedOnUtc.ToString("yyyy"))
.Replace("{YY}", returnRequest.CreatedOnUtc.ToString("yy"))
.Replace("{MM}", returnRequest.CreatedOnUtc.ToString("MM"))
.Replace("{DD}", returnRequest.CreatedOnUtc.ToString("dd"));

//if you need to use the format for the ID with leading zeros, use the following code instead of the previous one.
////mask for Id example {#:00000000}
//var rgx = new Regex(@"{#:\d+}");
//var match = rgx.Match(customNumber);
//var maskForReplase = match.Value;
//
//rgx = new Regex(@"\d+");
//match = rgx.Match(maskForReplase);
//
//var formatValue = match.Value;
//if(!string.IsNullOrEmpty(formatValue) && !string.IsNullOrEmpty(maskForReplase))
// customNumber = customNumber.Replace(maskForReplase, returnRequest.Id.ToString(formatValue));
//else
// customNumber = customNumber.Insert(0, string.Format("{0}-", returnRequest.Id));
}

return customNumber;
}

#endregion
}
}
9 changes: 9 additions & 0 deletions src/Libraries/Nop.Services/Orders/ICustomNumberFormatter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Nop.Core.Domain.Orders;

namespace Nop.Services.Orders
{
public partial interface ICustomNumberFormatter
{
string GenerateReturnRequestCustomNumber(ReturnRequest returnRequest);
}
}
1 change: 1 addition & 0 deletions src/Presentation/Nop.Web.Framework/DependencyRegistrar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,7 @@ public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder, N
builder.RegisterType<ReturnRequestService>().As<IReturnRequestService>().InstancePerLifetimeScope();
builder.RegisterType<RewardPointService>().As<IRewardPointService>().InstancePerLifetimeScope();
builder.RegisterType<ShoppingCartService>().As<IShoppingCartService>().InstancePerLifetimeScope();
builder.RegisterType<CustomNumberFormatter>().As<ICustomNumberFormatter>().InstancePerLifetimeScope();

builder.RegisterType<PaymentService>().As<IPaymentService>().InstancePerLifetimeScope();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -806,8 +806,14 @@ protected virtual void PrepareOrderDetailsModel(OrderModel model, Order order)
}

//return requests
orderItemModel.ReturnRequestIds = _returnRequestService.SearchReturnRequests(orderItemId: orderItem.Id)
.Select(rr => rr.Id).ToList();
orderItemModel.ReturnRequests = _returnRequestService
.SearchReturnRequests(orderItemId: orderItem.Id)
.Select(item => new OrderModel.OrderItemModel.ReturnRequestBriefModel
{
CustomNumber = item.CustomNumber,
Id = item.Id
}).ToList();

//gift cards
orderItemModel.PurchasedGiftCardIds = _giftCardService.GetGiftCardsByPurchasedWithOrderItemId(orderItem.Id)
.Select(gc => gc.Id).ToList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public partial class ReturnRequestController : BaseAdminController
return false;

model.Id = returnRequest.Id;
model.CustomNumber = returnRequest.CustomNumber;
model.ProductId = orderItem.ProductId;
model.ProductName = orderItem.Product.Name;
model.OrderId = orderItem.OrderId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1053,6 +1053,7 @@ public ActionResult Order()
model.AttachPdfInvoiceToOrderPaidEmail_OverrideForStore = _settingService.SettingExists(orderSettings, x => x.AttachPdfInvoiceToOrderPaidEmail, storeScope);
model.AttachPdfInvoiceToOrderCompletedEmail_OverrideForStore = _settingService.SettingExists(orderSettings, x => x.AttachPdfInvoiceToOrderCompletedEmail, storeScope);
model.ReturnRequestsEnabled_OverrideForStore = _settingService.SettingExists(orderSettings, x => x.ReturnRequestsEnabled, storeScope);
model.ReturnRequestNumberMask_OverrideForStore = _settingService.SettingExists(orderSettings, x => x.ReturnRequestNumberMask, storeScope);
model.NumberOfDaysReturnRequestAvailable_OverrideForStore = _settingService.SettingExists(orderSettings, x => x.NumberOfDaysReturnRequestAvailable, storeScope);
}

Expand Down Expand Up @@ -1105,6 +1106,7 @@ public ActionResult Order(OrderSettingsModel model)
_settingService.SaveSetting(orderSettings, x => x.GiftCards_Activated_OrderStatusId, 0, false);
_settingService.SaveSetting(orderSettings, x => x.GiftCards_Deactivated_OrderStatusId, 0, false);
_settingService.SaveSettingOverridablePerStore(orderSettings, x => x.ReturnRequestsEnabled, model.ReturnRequestsEnabled_OverrideForStore, storeScope, false);
_settingService.SaveSettingOverridablePerStore(orderSettings, x => x.ReturnRequestNumberMask, model.ReturnRequestNumberMask_OverrideForStore, storeScope, false);

//now clear settings cache
_settingService.ClearCache();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,8 @@ public partial class OrderItemModel : BaseNopEntityModel
{
public OrderItemModel()
{
ReturnRequestIds = new List<int>();
PurchasedGiftCardIds = new List<int>();
ReturnRequests = new List<ReturnRequestBriefModel>();
}
public int ProductId { get; set; }
public string ProductName { get; set; }
Expand Down Expand Up @@ -265,14 +265,23 @@ public OrderItemModel()
public string AttributeInfo { get; set; }
public string RecurringInfo { get; set; }
public string RentalInfo { get; set; }
public IList<int> ReturnRequestIds { get; set; }
public IList<ReturnRequestBriefModel> ReturnRequests { get; set; }
public IList<int> PurchasedGiftCardIds { get; set; }

public bool IsDownload { get; set; }
public int DownloadCount { get; set; }
public DownloadActivationType DownloadActivationType { get; set; }
public bool IsDownloadActivated { get; set; }
public Guid LicenseDownloadGuid { get; set; }

#region Nested Classes

public partial class ReturnRequestBriefModel : BaseNopEntityModel
{
public string CustomNumber { get; set; }
}

#endregion
}

public partial class TaxRate : BaseNopModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ namespace Nop.Admin.Models.Orders
[Validator(typeof(ReturnRequestValidator))]
public partial class ReturnRequestModel : BaseNopEntityModel
{
[NopResourceDisplayName("Admin.ReturnRequests.Fields.ID")]
public override int Id { get; set; }
[NopResourceDisplayName("Admin.ReturnRequests.Fields.CustomNumber")]
public string CustomNumber { get; set; }

[NopResourceDisplayName("Admin.ReturnRequests.Fields.Order")]
public int OrderId { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,11 @@ public OrderSettingsModel()
[NopResourceDisplayName("Admin.Configuration.Settings.Order.ReturnRequestsEnabled")]
public bool ReturnRequestsEnabled { get; set; }
public bool ReturnRequestsEnabled_OverrideForStore { get; set; }


[NopResourceDisplayName("Admin.Configuration.Settings.Order.ReturnRequestNumberMask")]
public string ReturnRequestNumberMask { get; set; }
public bool ReturnRequestNumberMask_OverrideForStore { get; set; }

[NopResourceDisplayName("Admin.Configuration.Settings.Order.NumberOfDaysReturnRequestAvailable")]
public int NumberOfDaysReturnRequestAvailable { get; set; }
public bool NumberOfDaysReturnRequestAvailable_OverrideForStore { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,14 +130,14 @@
@item.VendorName
</p>
}
@if (item.ReturnRequestIds.Count > 0)
@if (item.ReturnRequests.Count > 0)
{
<p>
@T("Admin.Orders.Products.ReturnRequests")<text>:</text>
@for (int i = 0; i < item.ReturnRequestIds.Count; i++)
@for (int i = 0; i < item.ReturnRequests.Count; i++)
{
<a href="@Url.Action("Edit", "ReturnRequest", new {id = item.ReturnRequestIds[i]})">@item.ReturnRequestIds[i]</a>
if (i != item.ReturnRequestIds.Count - 1)
<a href="@Url.Action("Edit", "ReturnRequest", new {id = item.ReturnRequests[i].Id})">@item.ReturnRequests[i].CustomNumber</a>
if (i != item.ReturnRequests.Count - 1)
{
<text>,</text>
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@
scrollable: false,
columns: [
{
field: "Id",
title: "@T("Admin.ReturnRequests.Fields.ID")",
field: "CustomNumber",
title: "@T("Admin.ReturnRequests.Fields.CustomNumber")",
width: 50
}, {
field: "ProductName",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
<div class="panel-body">
<div class="form-group">
<div class="col-md-3">
@Html.NopLabelFor(model => model.Id)
@Html.NopLabelFor(model => model.CustomNumber)
</div>
<div class="col-md-9">
@Html.NopDisplayFor(model => model.Id)
@Html.NopDisplayFor(model => model.CustomNumber)
</div>
</div>
<div class="form-group">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestsDescription2")
</li>
</ul>
</ul>
<div class="form-group">
<div class="col-md-3">
@Html.OverrideStoreCheckboxFor(model => model.ReturnRequestsEnabled_OverrideForStore, model => model.ReturnRequestsEnabled, Model.ActiveStoreScopeConfiguration)
Expand All @@ -278,6 +278,33 @@
@Html.ValidationMessageFor(model => model.ReturnRequestsEnabled)
</div>
</div>
<div class="form-group">
<div class="col-md-3">
@Html.OverrideStoreCheckboxFor(model => model.ReturnRequestNumberMask_OverrideForStore, model => model.ReturnRequestNumberMask, Model.ActiveStoreScopeConfiguration)
@Html.NopLabelFor(model => model.ReturnRequestNumberMask)
</div>
<div class="col-md-9">
@Html.NopEditorFor(model => model.ReturnRequestNumberMask)
@Html.ValidationMessageFor(model => model.ReturnRequestNumberMask)
<ul class="common-list">
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestNumberMask.Description.ID")
</li>
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestNumberMask.Description.YYYY")
</li>
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestNumberMask.Description.YY")
</li>
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestNumberMask.Description.MM")
</li>
<li>
@T("Admin.Configuration.Settings.Order.ReturnRequestNumberMask.Description.DD")
</li>
</ul>
</div>
</div>
<div class="form-group">
<div class="col-md-3">
@Html.OverrideStoreCheckboxFor(model => model.NumberOfDaysReturnRequestAvailable_OverrideForStore, model => model.NumberOfDaysReturnRequestAvailable, Model.ActiveStoreScopeConfiguration)
Expand Down

0 comments on commit c90f07e

Please sign in to comment.