Skip to content

Commit d9fdbe7

Browse files
committed
nopSolutions#7340 Move WorkflowMessageService utilities to public methods
1 parent 9e7047e commit d9fdbe7

2 files changed

Lines changed: 206 additions & 132 deletions

File tree

src/Libraries/Nop.Services/Messages/IWorkflowMessageService.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,71 @@ Task<IList<int>> SendNewForumPostMessageAsync(Customer customer, ForumPost forum
711711

712712
#region Common
713713

714+
/// <summary>
715+
/// Get active message templates by the name
716+
/// </summary>
717+
/// <param name="messageTemplateName">Message template name</param>
718+
/// <param name="storeId">Store identifier</param>
719+
/// <returns>
720+
/// A task that represents the asynchronous operation
721+
/// The task result contains the list of message templates
722+
/// </returns>
723+
Task<IList<MessageTemplate>> GetActiveMessageTemplatesAsync(string messageTemplateName, int storeId);
724+
725+
/// <summary>
726+
/// Get email account to use with a message templates
727+
/// </summary>
728+
/// <param name="messageTemplate">Message template</param>
729+
/// <param name="languageId">Language identifier</param>
730+
/// <returns>
731+
/// A task that represents the asynchronous operation
732+
/// The task result contains the email account
733+
/// </returns>
734+
Task<EmailAccount> GetEmailAccountOfMessageTemplateAsync(MessageTemplate messageTemplate, int languageId);
735+
736+
/// <summary>
737+
/// Ensure language is active
738+
/// </summary>
739+
/// <param name="languageId">Language identifier</param>
740+
/// <param name="storeId">Store identifier</param>
741+
/// <returns>
742+
/// A task that represents the asynchronous operation
743+
/// The task result contains the active language identifier
744+
/// </returns>
745+
Task<int> EnsureLanguageIsActiveAsync(int languageId, int storeId);
746+
747+
/// <summary>
748+
/// Get email and name to send email for store owner
749+
/// </summary>
750+
/// <param name="messageTemplateEmailAccount">Message template email account</param>
751+
/// <returns>
752+
/// A task that represents the asynchronous operation
753+
/// The task result contains the email address and name to send email for store owner
754+
/// </returns>
755+
Task<(string email, string name)> GetStoreOwnerNameAndEmailAsync(EmailAccount messageTemplateEmailAccount);
756+
757+
/// <summary>
758+
/// Get email and name to set ReplyTo property of email from customer
759+
/// </summary>
760+
/// <param name="messageTemplate">Message template</param>
761+
/// <param name="customer">Customer</param>
762+
/// <returns>
763+
/// A task that represents the asynchronous operation
764+
/// The task result contains the email address and name to reply
765+
/// </returns>
766+
Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Customer customer);
767+
768+
/// <summary>
769+
/// Get email and name to set ReplyTo property of email from order
770+
/// </summary>
771+
/// <param name="messageTemplate">Message template</param>
772+
/// <param name="order">Order</param>
773+
/// <returns>
774+
/// A task that represents the asynchronous operation
775+
/// The task result contains the email address and name to reply
776+
/// </returns>
777+
Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Order order);
778+
714779
/// <summary>
715780
/// Send notification
716781
/// </summary>

src/Libraries/Nop.Services/Messages/WorkflowMessageService.cs

Lines changed: 141 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -92,138 +92,6 @@ public WorkflowMessageService(CommonSettings commonSettings,
9292

9393
#endregion
9494

95-
#region Utilities
96-
97-
/// <summary>
98-
/// Get active message templates by the name
99-
/// </summary>
100-
/// <param name="messageTemplateName">Message template name</param>
101-
/// <param name="storeId">Store identifier</param>
102-
/// <returns>
103-
/// A task that represents the asynchronous operation
104-
/// The task result contains the list of message templates
105-
/// </returns>
106-
protected virtual async Task<IList<MessageTemplate>> GetActiveMessageTemplatesAsync(string messageTemplateName, int storeId)
107-
{
108-
//get message templates by the name
109-
var messageTemplates = await _messageTemplateService.GetMessageTemplatesByNameAsync(messageTemplateName, storeId);
110-
111-
//no template found
112-
if (!messageTemplates?.Any() ?? true)
113-
return new List<MessageTemplate>();
114-
115-
//filter active templates
116-
messageTemplates = messageTemplates.Where(messageTemplate => messageTemplate.IsActive).ToList();
117-
118-
return messageTemplates;
119-
}
120-
121-
/// <summary>
122-
/// Get EmailAccount to use with a message templates
123-
/// </summary>
124-
/// <param name="messageTemplate">Message template</param>
125-
/// <param name="languageId">Language identifier</param>
126-
/// <returns>
127-
/// A task that represents the asynchronous operation
128-
/// The task result contains the emailAccount
129-
/// </returns>
130-
protected virtual async Task<EmailAccount> GetEmailAccountOfMessageTemplateAsync(MessageTemplate messageTemplate, int languageId)
131-
{
132-
var emailAccountId = await _localizationService.GetLocalizedAsync(messageTemplate, mt => mt.EmailAccountId, languageId);
133-
//some 0 validation (for localizable "Email account" dropdownlist which saves 0 if "Standard" value is chosen)
134-
if (emailAccountId == 0)
135-
emailAccountId = messageTemplate.EmailAccountId;
136-
137-
var emailAccount = (await _emailAccountService.GetEmailAccountByIdAsync(emailAccountId) ?? await _emailAccountService.GetEmailAccountByIdAsync(_emailAccountSettings.DefaultEmailAccountId)) ??
138-
(await _emailAccountService.GetAllEmailAccountsAsync()).FirstOrDefault();
139-
return emailAccount;
140-
}
141-
142-
/// <summary>
143-
/// Ensure language is active
144-
/// </summary>
145-
/// <param name="languageId">Language identifier</param>
146-
/// <param name="storeId">Store identifier</param>
147-
/// <returns>
148-
/// A task that represents the asynchronous operation
149-
/// The task result contains the return a value language identifier
150-
/// </returns>
151-
protected virtual async Task<int> EnsureLanguageIsActiveAsync(int languageId, int storeId)
152-
{
153-
//load language by specified ID
154-
var language = await _languageService.GetLanguageByIdAsync(languageId);
155-
156-
if (language == null || !language.Published)
157-
{
158-
//load any language from the specified store
159-
language = (await _languageService.GetAllLanguagesAsync(storeId: storeId)).FirstOrDefault();
160-
}
161-
162-
if (language == null || !language.Published)
163-
{
164-
//load any language
165-
language = (await _languageService.GetAllLanguagesAsync()).FirstOrDefault();
166-
}
167-
168-
if (language == null)
169-
throw new Exception("No active language could be loaded");
170-
171-
return language.Id;
172-
}
173-
174-
/// <summary>
175-
/// Get email and name to send email for store owner
176-
/// </summary>
177-
/// <param name="messageTemplateEmailAccount">Message template email account</param>
178-
/// <returns>Email address and name to send email fore store owner</returns>
179-
protected virtual async Task<(string email, string name)> GetStoreOwnerNameAndEmailAsync(EmailAccount messageTemplateEmailAccount)
180-
{
181-
var storeOwnerEmailAccount = _messagesSettings.UseDefaultEmailAccountForSendStoreOwnerEmails ? await _emailAccountService.GetEmailAccountByIdAsync(_emailAccountSettings.DefaultEmailAccountId) : null;
182-
storeOwnerEmailAccount ??= messageTemplateEmailAccount;
183-
184-
return (storeOwnerEmailAccount.Email, storeOwnerEmailAccount.DisplayName);
185-
}
186-
187-
/// <summary>
188-
/// Get email and name to set ReplyTo property of email from customer
189-
/// </summary>
190-
/// <param name="messageTemplate">Message template</param>
191-
/// <param name="customer">Customer</param>
192-
/// <returns>Email address and name when reply to email</returns>
193-
protected virtual async Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Customer customer)
194-
{
195-
if (!messageTemplate.AllowDirectReply)
196-
return (null, null);
197-
198-
var replyToEmail = await _customerService.IsGuestAsync(customer)
199-
? string.Empty
200-
: customer.Email;
201-
202-
var replyToName = await _customerService.IsGuestAsync(customer)
203-
? string.Empty
204-
: await _customerService.GetCustomerFullNameAsync(customer);
205-
206-
return (replyToEmail, replyToName);
207-
}
208-
209-
/// <summary>
210-
/// Get email and name to set ReplyTo property of email from order
211-
/// </summary>
212-
/// <param name="messageTemplate">Message template</param>
213-
/// <param name="order">Order</param>
214-
/// <returns>Email address and name when reply to email</returns>
215-
protected virtual async Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Order order)
216-
{
217-
if (!messageTemplate.AllowDirectReply)
218-
return (null, null);
219-
220-
var billingAddress = await _addressService.GetAddressByIdAsync(order.BillingAddressId);
221-
222-
return (billingAddress.Email, $"{billingAddress.FirstName} {billingAddress.LastName}");
223-
}
224-
225-
#endregion
226-
22795
#region Methods
22896

22997
#region Customer workflow
@@ -2867,6 +2735,147 @@ public virtual async Task<int> SendTestEmailAsync(int messageTemplateId, string
28672735

28682736
#region Common
28692737

2738+
/// <summary>
2739+
/// Get active message templates by the name
2740+
/// </summary>
2741+
/// <param name="messageTemplateName">Message template name</param>
2742+
/// <param name="storeId">Store identifier</param>
2743+
/// <returns>
2744+
/// A task that represents the asynchronous operation
2745+
/// The task result contains the list of message templates
2746+
/// </returns>
2747+
public virtual async Task<IList<MessageTemplate>> GetActiveMessageTemplatesAsync(string messageTemplateName, int storeId)
2748+
{
2749+
//get message templates by the name
2750+
var messageTemplates = await _messageTemplateService.GetMessageTemplatesByNameAsync(messageTemplateName, storeId);
2751+
2752+
//no template found
2753+
if (!messageTemplates?.Any() ?? true)
2754+
return new List<MessageTemplate>();
2755+
2756+
//filter active templates
2757+
messageTemplates = messageTemplates.Where(messageTemplate => messageTemplate.IsActive).ToList();
2758+
2759+
return messageTemplates;
2760+
}
2761+
2762+
/// <summary>
2763+
/// Get email account to use with a message templates
2764+
/// </summary>
2765+
/// <param name="messageTemplate">Message template</param>
2766+
/// <param name="languageId">Language identifier</param>
2767+
/// <returns>
2768+
/// A task that represents the asynchronous operation
2769+
/// The task result contains the email account
2770+
/// </returns>
2771+
public virtual async Task<EmailAccount> GetEmailAccountOfMessageTemplateAsync(MessageTemplate messageTemplate, int languageId)
2772+
{
2773+
var emailAccountId = await _localizationService.GetLocalizedAsync(messageTemplate, mt => mt.EmailAccountId, languageId);
2774+
//some 0 validation (for localizable "Email account" dropdownlist which saves 0 if "Standard" value is chosen)
2775+
if (emailAccountId == 0)
2776+
emailAccountId = messageTemplate.EmailAccountId;
2777+
2778+
var emailAccount = (await _emailAccountService.GetEmailAccountByIdAsync(emailAccountId)
2779+
?? await _emailAccountService.GetEmailAccountByIdAsync(_emailAccountSettings.DefaultEmailAccountId))
2780+
?? (await _emailAccountService.GetAllEmailAccountsAsync()).FirstOrDefault();
2781+
2782+
return emailAccount;
2783+
}
2784+
2785+
/// <summary>
2786+
/// Ensure language is active
2787+
/// </summary>
2788+
/// <param name="languageId">Language identifier</param>
2789+
/// <param name="storeId">Store identifier</param>
2790+
/// <returns>
2791+
/// A task that represents the asynchronous operation
2792+
/// The task result contains the active language identifier
2793+
/// </returns>
2794+
public virtual async Task<int> EnsureLanguageIsActiveAsync(int languageId, int storeId)
2795+
{
2796+
//load language by specified ID
2797+
var language = await _languageService.GetLanguageByIdAsync(languageId);
2798+
2799+
if (language == null || !language.Published)
2800+
{
2801+
//load any language from the specified store
2802+
language = (await _languageService.GetAllLanguagesAsync(storeId: storeId)).FirstOrDefault();
2803+
}
2804+
2805+
if (language == null || !language.Published)
2806+
{
2807+
//load any language
2808+
language = (await _languageService.GetAllLanguagesAsync()).FirstOrDefault();
2809+
}
2810+
2811+
if (language == null)
2812+
throw new Exception("No active language could be loaded");
2813+
2814+
return language.Id;
2815+
}
2816+
2817+
/// <summary>
2818+
/// Get email and name to send email for store owner
2819+
/// </summary>
2820+
/// <param name="messageTemplateEmailAccount">Message template email account</param>
2821+
/// <returns>
2822+
/// A task that represents the asynchronous operation
2823+
/// The task result contains the email address and name to send email for store owner
2824+
/// </returns>
2825+
public virtual async Task<(string email, string name)> GetStoreOwnerNameAndEmailAsync(EmailAccount messageTemplateEmailAccount)
2826+
{
2827+
var storeOwnerEmailAccount = (_messagesSettings.UseDefaultEmailAccountForSendStoreOwnerEmails
2828+
? await _emailAccountService.GetEmailAccountByIdAsync(_emailAccountSettings.DefaultEmailAccountId)
2829+
: null)
2830+
?? messageTemplateEmailAccount;
2831+
2832+
return (storeOwnerEmailAccount.Email, storeOwnerEmailAccount.DisplayName);
2833+
}
2834+
2835+
/// <summary>
2836+
/// Get email and name to set ReplyTo property of email from customer
2837+
/// </summary>
2838+
/// <param name="messageTemplate">Message template</param>
2839+
/// <param name="customer">Customer</param>
2840+
/// <returns>
2841+
/// A task that represents the asynchronous operation
2842+
/// The task result contains the email address and name to reply
2843+
/// </returns>
2844+
public virtual async Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Customer customer)
2845+
{
2846+
if (!messageTemplate.AllowDirectReply)
2847+
return (null, null);
2848+
2849+
var replyToEmail = await _customerService.IsGuestAsync(customer)
2850+
? string.Empty
2851+
: customer.Email;
2852+
2853+
var replyToName = await _customerService.IsGuestAsync(customer)
2854+
? string.Empty
2855+
: await _customerService.GetCustomerFullNameAsync(customer);
2856+
2857+
return (replyToEmail, replyToName);
2858+
}
2859+
2860+
/// <summary>
2861+
/// Get email and name to set ReplyTo property of email from order
2862+
/// </summary>
2863+
/// <param name="messageTemplate">Message template</param>
2864+
/// <param name="order">Order</param>
2865+
/// <returns>
2866+
/// A task that represents the asynchronous operation
2867+
/// The task result contains the email address and name to reply
2868+
/// </returns>
2869+
public virtual async Task<(string email, string name)> GetCustomerReplyToNameAndEmailAsync(MessageTemplate messageTemplate, Order order)
2870+
{
2871+
if (!messageTemplate.AllowDirectReply)
2872+
return (null, null);
2873+
2874+
var billingAddress = await _addressService.GetAddressByIdAsync(order.BillingAddressId);
2875+
2876+
return (billingAddress.Email, $"{billingAddress.FirstName} {billingAddress.LastName}");
2877+
}
2878+
28702879
/// <summary>
28712880
/// Send notification
28722881
/// </summary>

0 commit comments

Comments
 (0)