PageRenderTime 647ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 1ms

/ThinkEmailFomatter/Models/BusinessObjects/ThinkHelper.cs

https://bitbucket.org/nicdao/frg-think-emailformatter
C# | 360 lines | 274 code | 54 blank | 32 comment | 103 complexity | 7ef4e98a64e8bbe136ac25b11ad97384 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using ThinkEmailFormatter.ThinkOdata;
  6. using System.Net;
  7. using ThinkEmailFormatter.Models.Extensions.ThinkObj;
  8. using System.Threading.Tasks;
  9. namespace ThinkEmailFormatter.Models
  10. {
  11. public class ThinkHelper: IThinkHelper
  12. {
  13. private ThinkModel _thinkModel;
  14. public ThinkHelper(ThinkModel thinkModel)
  15. {
  16. _thinkModel = thinkModel;
  17. _thinkModel.UsePostTunneling = true;
  18. }
  19. public Customer GetCustomerInfo(int customerId)
  20. {
  21. var customerLogin = _thinkModel.CustomerLogins
  22. .Where(c => c.customer_id == customerId)
  23. .Select(c => c)
  24. .FirstOrDefault();
  25. Customer customerDetails = new Customer()
  26. {
  27. Username = customerLogin != null ? customerLogin.login : string.Empty
  28. };
  29. return customerDetails;
  30. }
  31. /// <summary>
  32. /// Get all email template settings from the database
  33. /// </summary>
  34. /// <returns></returns>
  35. public List<TemplateSetting> GetAllTemplateSettings()
  36. {
  37. List<TemplateSetting> allTemplateSettings = new List<TemplateSetting>();
  38. var settings = _thinkModel.EmailTemplates.Select(s => s);
  39. foreach (var setting in settings)
  40. {
  41. TemplateSetting tempSetting = new TemplateSetting();
  42. tempSetting.CastFromThinkObj(setting);
  43. allTemplateSettings.Add(tempSetting);
  44. }
  45. return allTemplateSettings;
  46. }
  47. /// <summary>
  48. /// Get the template's settings from the THINK DB using the Think OData Service.
  49. /// Then convert the Dataobject into a "TemplateSetting" Domain Object
  50. /// </summary>
  51. /// <param name="templateName"></param>
  52. /// <returns></returns>
  53. public TemplateSetting GetTemplateSettings(string templateName)
  54. {
  55. TemplateSetting templateSettings = null;
  56. var templateThinkSettings = _thinkModel.EmailTemplates.Expand("TransactionEvent,EmailFilterOptions")
  57. .Where(t => t.name == templateName)
  58. .Select(t => t)
  59. .ToList();
  60. if (templateThinkSettings != null && templateThinkSettings.Any())
  61. {
  62. var templateThinkSetting = templateThinkSettings.First();
  63. templateSettings = new TemplateSetting();
  64. templateSettings.CastFromThinkObj(templateThinkSetting);
  65. }
  66. return templateSettings;
  67. }
  68. public bool CommitSettings(TemplateSetting templateSettings)
  69. {
  70. bool requestStatus = true;
  71. if (templateSettings != null)
  72. {
  73. // If the Guid is not empty, that means that this template has been configured in the past
  74. // The settings just need to be updated
  75. if (templateSettings.Guid != Guid.Empty)
  76. {
  77. EmailTemplate existingSetting = new EmailTemplate()
  78. {
  79. email_template_id = templateSettings.Guid,
  80. name = templateSettings.Name,
  81. description = templateSettings.Description,
  82. from_email = templateSettings.FromEmail,
  83. transaction_event_id = (short)templateSettings.EventType.Id,
  84. oc_id = templateSettings.OrderClass.Id,
  85. enable_default = templateSettings.DefaultEnabled,
  86. enable_tax_invoice_check = templateSettings.TaxInvoiceCheckEnabled,
  87. subject = templateSettings.Subject
  88. };
  89. _thinkModel.AttachTo("EmailTemplates", existingSetting);
  90. _thinkModel.UpdateObject(existingSetting);
  91. if (templateSettings.Filters != null && templateSettings.Filters.Any())
  92. {
  93. foreach (var filter in templateSettings.Filters)
  94. {
  95. bool deleteFilter = string.Compare(filter.Description.Trim(), "delete", true) == 0;
  96. bool skipCondition =
  97. (filter.Guid == Guid.Empty && deleteFilter) ||
  98. ((filter.OrderCode == null || filter.OrderCode.Id == 0) &&
  99. (filter.SourceCode == null || filter.SourceCode.Id == 0) &&
  100. (filter.SubscriptionDefinition == null || filter.SubscriptionDefinition.Id == 0));
  101. // don't skip
  102. if (!skipCondition)
  103. {
  104. EmailFilterOption filterOpt = new EmailFilterOption();
  105. // new filter
  106. if (filter.Guid == Guid.Empty)
  107. {
  108. filterOpt.email_template_id = templateSettings.Guid;
  109. filterOpt.email_filter_id = Guid.NewGuid();
  110. filterOpt.active = filter.Active;
  111. if (filter.OrderCode != null && filter.OrderCode.Id != 0)
  112. filterOpt.order_code_id = filter.OrderCode.Id;
  113. if (filter.SourceCode != null && filter.SourceCode.Id != 0)
  114. filterOpt.source_code_id = filter.SourceCode.Id;
  115. if (filter.SubscriptionDefinition != null && filter.SubscriptionDefinition.Id != 0)
  116. filterOpt.subscription_def_id = filter.SubscriptionDefinition.Id;
  117. _thinkModel.AddToEmailFilterOptions(filterOpt);
  118. }
  119. else if(deleteFilter) // // existing filter. Need to delete it
  120. {
  121. filterOpt.email_filter_id = filter.Guid;
  122. _thinkModel.AttachTo("EmailFilterOptions", filterOpt);
  123. _thinkModel.DeleteObject(filterOpt);
  124. }
  125. else // existing filter. Need to update it
  126. {
  127. filterOpt.email_template_id = templateSettings.Guid;
  128. filterOpt.email_filter_id = filter.Guid;
  129. filterOpt.active = filter.Active;
  130. if (filter.OrderCode != null && filter.OrderCode.Id != 0)
  131. filterOpt.order_code_id = filter.OrderCode.Id;
  132. if (filter.SourceCode != null && filter.SourceCode.Id != 0)
  133. filterOpt.source_code_id = filter.SourceCode.Id;
  134. if (filter.SubscriptionDefinition != null && filter.SubscriptionDefinition.Id != 0)
  135. filterOpt.subscription_def_id = filter.SubscriptionDefinition.Id;
  136. _thinkModel.AttachTo("EmailFilterOptions", filterOpt);
  137. _thinkModel.UpdateObject(filterOpt);
  138. }
  139. }
  140. }
  141. }
  142. _thinkModel.SaveChanges();
  143. }
  144. else // new template settings
  145. {
  146. EmailTemplate newEmailTemplateSettings = new EmailTemplate()
  147. {
  148. email_template_id = Guid.NewGuid(),
  149. name = templateSettings.Name,
  150. description = templateSettings.Description,
  151. from_email = templateSettings.FromEmail,
  152. transaction_event_id = (short)templateSettings.EventType.Id,
  153. oc_id = templateSettings.OrderClass.Id,
  154. enable_default = templateSettings.DefaultEnabled,
  155. enable_tax_invoice_check = templateSettings.TaxInvoiceCheckEnabled,
  156. subject = templateSettings.Subject
  157. };
  158. _thinkModel.AddToEmailTemplates(newEmailTemplateSettings);
  159. if (templateSettings.Filters != null && templateSettings.Filters.Any())
  160. {
  161. foreach (var filter in templateSettings.Filters)
  162. {
  163. bool skipCondition =
  164. (filter.Guid == Guid.Empty && string.Compare(filter.Description.Trim(), "delete", true) == 0) ||
  165. ((filter.OrderCode == null || filter.OrderCode.Id == 0) &&
  166. (filter.SourceCode == null || filter.SourceCode.Id == 0) &&
  167. (filter.SubscriptionDefinition == null || filter.SubscriptionDefinition.Id == 0));
  168. // don't skip
  169. if (!skipCondition)
  170. {
  171. EmailFilterOption filterOpt = new EmailFilterOption();
  172. // new filter
  173. if (filter.Guid == Guid.Empty)
  174. {
  175. filterOpt.email_template_id = templateSettings.Guid;
  176. filterOpt.email_filter_id = Guid.NewGuid();
  177. filterOpt.active = filter.Active;
  178. if (filter.OrderCode != null && filter.OrderCode.Id != 0)
  179. filterOpt.order_code_id = filter.OrderCode.Id;
  180. if (filter.SourceCode != null && filter.SourceCode.Id != 0)
  181. filterOpt.source_code_id = filter.SourceCode.Id;
  182. if (filter.SubscriptionDefinition != null && filter.SubscriptionDefinition.Id != 0)
  183. filterOpt.subscription_def_id = filter.SubscriptionDefinition.Id;
  184. _thinkModel.AddToEmailFilterOptions(filterOpt);
  185. }
  186. }
  187. }
  188. }
  189. _thinkModel.SaveChanges();
  190. }
  191. }
  192. else
  193. {
  194. requestStatus = false;
  195. }
  196. return requestStatus;
  197. }
  198. public bool DeleteTemplateSettings(string templateName)
  199. {
  200. bool operationSuccess = true;
  201. try
  202. {
  203. var templateThinkSettings = _thinkModel.EmailTemplates.Expand("EmailFilterOptions")
  204. .Where(t => t.name == templateName)
  205. .Select(t => t)
  206. .FirstOrDefault();
  207. if (templateThinkSettings != null)
  208. {
  209. // delete all options related to that email template
  210. if (templateThinkSettings.EmailFilterOptions != null && templateThinkSettings.EmailFilterOptions.Any())
  211. {
  212. foreach (var option in templateThinkSettings.EmailFilterOptions)
  213. {
  214. _thinkModel.DeleteObject(option);
  215. }
  216. }
  217. // delete the email template
  218. _thinkModel.DeleteObject(templateThinkSettings);
  219. _thinkModel.SaveChanges();
  220. }
  221. }
  222. catch (Exception ie)
  223. {
  224. operationSuccess = false;
  225. }
  226. return operationSuccess;
  227. }
  228. /// <summary>
  229. /// Get all THINK transaction events
  230. /// </summary>
  231. /// <returns></returns>
  232. public List<Identifier> GetEventTypeList()
  233. {
  234. List<Identifier> eventTypes = null;
  235. var thinkEventTypes = _thinkModel.TransactionEvents.Select(e => e).ToList();
  236. if (thinkEventTypes != null && thinkEventTypes.Any())
  237. {
  238. eventTypes = new List<Identifier>();
  239. foreach(var thinkEventType in thinkEventTypes.OrderBy(e => e.transaction_name))
  240. {
  241. eventTypes.Add(new Identifier()
  242. {
  243. Id = thinkEventType.transaction_event_id,
  244. Name = thinkEventType.transaction_name,
  245. Flag = thinkEventType.display_filter ?? false
  246. });
  247. }
  248. }
  249. return eventTypes;
  250. }
  251. /// <summary>
  252. /// Get all THINK order classes(Table oc)
  253. /// </summary>
  254. /// <returns></returns>
  255. public List<Identifier> GetOrderClassList()
  256. {
  257. List<Identifier> orderClasses = null;
  258. var thinkOrderClasses = _thinkModel.OrderClasses.Select(o => o).ToList();
  259. if (thinkOrderClasses != null && thinkOrderClasses.Any())
  260. {
  261. orderClasses = new List<Identifier>() { new Identifier() { Id = 0, Name = "0: None" } };
  262. foreach (var thinkOrderClass in thinkOrderClasses.OrderBy(o => o.oc_id))
  263. {
  264. orderClasses.Add(new Identifier()
  265. {
  266. Id = thinkOrderClass.oc_id,
  267. Name = string.Format("{1}: {0}", thinkOrderClass.oc1, thinkOrderClass.oc_id)
  268. });
  269. }
  270. }
  271. return orderClasses;
  272. }
  273. /// <summary>
  274. /// Get all email settings that have been configured in the DB and match the
  275. /// think request parameters
  276. /// </summary>
  277. /// <param name="thinkRequest"></param>
  278. /// <returns></returns>
  279. public List<TemplateSetting> GetMatchingEmailSettings(ThinkTransactionData thinkRequest)
  280. {
  281. List<TemplateSetting> emailSettings = null;
  282. int transactionEventId;
  283. Int32.TryParse(thinkRequest.transaction_event, out transactionEventId);
  284. var matchingEmailSettings = _thinkModel.EmailTemplates
  285. .Expand("EmailFilterOptions")
  286. .Where(e => e.transaction_event_id == transactionEventId)
  287. .Select(e => e)
  288. .ToList();
  289. if (matchingEmailSettings != null && matchingEmailSettings.Any())
  290. {
  291. emailSettings = new List<TemplateSetting>();
  292. foreach (var matchingSetting in matchingEmailSettings)
  293. {
  294. TemplateSetting templateSettings = new TemplateSetting();
  295. templateSettings.CastFromThinkObj(matchingSetting);
  296. emailSettings.Add(templateSettings);
  297. }
  298. }
  299. return emailSettings;
  300. }
  301. public int GetMatchingOrderClass(int orderCode)
  302. {
  303. return _thinkModel.OrderCodes.Where(o => o.order_code_id == orderCode).Select(o => o.oc_id).First();
  304. }
  305. }
  306. }