-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDayOfWeekDiscountRequirementRule.cs
108 lines (90 loc) · 4.09 KB
/
DayOfWeekDiscountRequirementRule.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//Copyright 2020 Alexey Prokhorov
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.Routing;
using Nop.Core;
using Nop.Plugin.DiscountRules.DaysOfWeek.Extentions;
using Nop.Services.Configuration;
using Nop.Services.Discounts;
using System;
using System.Threading.Tasks;
namespace Nop.Plugin.DiscountRules.DaysOfWeek
{
/// <summary>
/// Represents days of week discout requirement rule
/// </summary>
public partial class DaysOfWeekDiscountRequirementRule : BaseBaroquePlugin, IDiscountRequirementRule
{
private readonly IActionContextAccessor _actionContextAccessor;
private readonly IUrlHelperFactory _urlHelperFactory;
private readonly ISettingService _settingService;
private readonly IWebHelper _webHelper;
public DaysOfWeekDiscountRequirementRule(IActionContextAccessor actionContextAccessor,
IUrlHelperFactory urlHelperFactory,
ISettingService settingService,
IWebHelper webHelper)
{
this._actionContextAccessor = actionContextAccessor;
this._urlHelperFactory = urlHelperFactory;
this._settingService = settingService;
this._webHelper = webHelper;
}
/// <summary>
/// Check discount requirement
/// </summary>
/// <param name="request">Object that contains all information required to check the requirement (Current customer, discount, etc)</param>
/// <returns>Result</returns>
public async Task<DiscountRequirementValidationResult> CheckRequirementAsync(DiscountRequirementValidationRequest request)
{
if (request == null)
throw new ArgumentNullException("request");
//invalid by default
var result = new DiscountRequirementValidationResult();
if (request.Customer == null)
return result;
var setting = await _settingService.GetSettingByKeyAsync<string>(string.Format(DaysOfWeekSystemNames.PluginSettingName, request.DiscountRequirementId));
var selectedDayIds = setting.ParseSeparatedNumbers();
if (selectedDayIds.Contains((int)DateTime.UtcNow.DayOfWeek))
result.IsValid = true;
return result;
}
/// <summary>
/// Get URL for rule configuration
/// </summary>
/// <param name="discountId">Discount identifier</param>
/// <param name="discountRequirementId">Discount requirement identifier (if editing)</param>
/// <returns>URL</returns>
public string GetConfigurationUrl(int discountId, int? discountRequirementId)
{
//configured in RouteProvider.cs
var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext);
return urlHelper.Action("Configure", "DiscountRulesDaysOfWeek",
new { discountId = discountId, discountRequirementId = discountRequirementId }, _webHelper.GetCurrentRequestProtocol());
}
/// <summary>
/// Install plugin
/// </summary>
/// <returns></returns>
public override async Task InstallAsync()
{
await base.InstallAsync();
}
/// <summary>
/// Uninstall plugin
/// </summary>
/// <returns></returns>
public override async Task UninstallAsync()
{
await base.UninstallAsync();
}
}
}