派纳发送邮件功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

596 lines
23 KiB

11 months ago
2 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
2 months ago
8 months ago
2 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
2 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
2 months ago
8 months ago
2 months ago
8 months ago
2 months ago
11 months ago
2 months ago
11 months ago
8 months ago
11 months ago
8 months ago
2 months ago
11 months ago
8 months ago
2 months ago
8 months ago
2 months ago
8 months ago
8 months ago
2 months ago
11 months ago
7 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
11 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
2 months ago
8 months ago
11 months ago
8 months ago
11 months ago
2 months ago
8 months ago
2 months ago
8 months ago
11 months ago
2 months ago
8 months ago
8 months ago
8 months ago
2 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
8 months ago
11 months ago
  1. using System;
  2. using System.Text;
  3. using System.Collections;
  4. using System.Xml;
  5. using System.Data;
  6. using System.Web.UI;
  7. using System.Web.UI.WebControls;
  8. using System.Web.UI.WebControls.WebParts;
  9. using System.Resources;
  10. using System.Reflection;
  11. using System.Globalization;
  12. using System.Threading;
  13. using Telerik.WebControls;
  14. using UFSoft.UBF.UI.WebControls;
  15. using UFSoft.UBF.UI.Controls;
  16. using UFSoft.UBF.Util.Log;
  17. using UFSoft.UBF.Util.Globalization;
  18. using UFSoft.UBF.UI.IView;
  19. using UFSoft.UBF.UI.Engine;
  20. using UFSoft.UBF.UI.MD.Runtime;
  21. using UFSoft.UBF.UI.ActionProcess;
  22. using UFSoft.UBF.UI.WebControls.ClientCallBack;
  23. using UFSoft.UBF.Analysis.MD.Report.Service;
  24. using UFSoft.UBF.Analysis.Interface.MD.Report.Service;
  25. using UFSoft.UBF.Analysis.Interface.MD.Report.Model;
  26. using System.IO;
  27. using System.Net.Mail;
  28. using UFSoft.UBF.PRN.Control;
  29. using UFSoft.UBF.Report.Tools;
  30. using CusSupplierContactBP;
  31. using System.Collections.Generic;
  32. using System.Linq;
  33. /***********************************************************************************************
  34. * Form ID:
  35. * UIFactory Auto Generator
  36. ***********************************************************************************************/
  37. namespace UFIDA.U9.Cust.WC.CustPOSendMailUI
  38. {
  39. public partial class CustPOSendMailUIFormWebPart
  40. {
  41. #region Custome eventBind
  42. string filePath = " C:\\U8NetPrintResult\\Guest";
  43. string filePathD = " E:\\U8NetPrintResult\\Guest";
  44. string PurMail = "";
  45. //DropDownList_Notices_TextChanged...
  46. private void DropDownList_Notices_TextChanged_Extend(object sender, EventArgs e)
  47. {
  48. //调用模版提供的默认实现.--默认实现可能会调用相应的Action.
  49. Action.OnSend(sender, new UIActionEventArgs());
  50. if (this.DropDownList_Notices.Text == "英文模板")
  51. {
  52. this.MailText53.Text = "Dear Supplier:" + "\r\n" + "Please refer to the New PO, Confirm it within today and feedback the delivery date within 2 Days,Thanks."
  53. + "\r\n" + "Best Regards" + "\r\n" + "The information contained in this message is confidential and may be " +
  54. "legally privileged. The message is intended solely for the addressee(s). " +
  55. "If you are not the intended recipient, you are hereby notified that any use,dissemination " +
  56. "or reproduction is strictly prohibited and may be unlawful. If you are not the intended recipient, " +
  57. "please contact the sender by return e-mail and destroy all copies of the original message.";
  58. }
  59. else
  60. {
  61. string SelSQL = @"SELECT PrintTemplateText FROM Cust_PrintTemplateText WHERE PrintTemplateTypeName='" + this.DropDownList_Notices.Text + "'";
  62. DataSet SelSQLDs = new DataSet();
  63. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), SelSQL.ToString(), null, out SelSQLDs);
  64. DataTable dt = new DataTable();
  65. dt = SelSQLDs.Tables[0];
  66. if (dt.Rows.Count < 1)
  67. {
  68. throw new Exception("配置表Cust_PrintTemplateText中不存在对应模板正文信息,请先维护");
  69. }
  70. this.MailText53.Text = dt.Rows[0]["PrintTemplateText"].ToString();
  71. }
  72. this.DataCollect();
  73. this.DataBind();
  74. DropDownList_Notices_TextChanged_DefaultImpl(sender, e);
  75. }
  76. //OnSend273_Click...
  77. private void OnSend273_Click_Extend(object sender, EventArgs e)
  78. {
  79. //调用模版提供的默认实现.--默认实现可能会调用相应的Action.
  80. IUIRecordCollection records = this.Model.CustPOSendMailPerson.SelectRecords;
  81. if (records == null || records.Count == 0)
  82. {
  83. throw new Exception("请先勾选发件人");
  84. }
  85. string MailAddress = string.Empty;
  86. if (records.Count > 0)
  87. {
  88. foreach (var item in records)
  89. {
  90. string RcvPerson = string.Empty;
  91. string Telephone = string.Empty;
  92. RcvPerson = item["RcvPerson"].ToString();
  93. Telephone = item["Telephone"].ToString();
  94. if (string.IsNullOrWhiteSpace(item["MailAddress"].ToString()))
  95. {
  96. throw new Exception("邮箱地址为空");
  97. }
  98. MailAddress += item["MailAddress"].ToString() + ";";
  99. if (string.IsNullOrWhiteSpace(MailAddress))
  100. {
  101. throw new Exception("邮箱地址为空");
  102. }
  103. }
  104. }
  105. SendMail(MailAddress);
  106. OnSend273_Click_DefaultImpl(sender, e);
  107. }
  108. private void SendMail(string TOAddress)
  109. {
  110. string printTemplateID = this.PrintTemplates278.Value.ToString();
  111. this.DataCollect();
  112. this.DataBind();
  113. if (string.IsNullOrWhiteSpace(this.PrintTemplates278.Value.ToString()))
  114. {
  115. throw new Exception("请选择模板");
  116. }
  117. string connectionString = UFSoft.UAP.Report.Base.DBConnectionHelper.GetConnectionString();
  118. string cultrueName = UFSoft.UBF.Util.Context.PlatformContext.Current.Culture;
  119. ReportMDService service = ReportMDService.GetInstance(connectionString, cultrueName);
  120. IReportMDReader reader = service.GetReader();
  121. IReportTemplate reportTemplate = reader.GetReportTemplateByID(printTemplateID);
  122. UFSoft.UBF.Report.Entity.Report report = (UFSoft.UBF.Report.Entity.Report)reportTemplate.Content;
  123. reader.Dispose();
  124. DataSet ds = new DataSet();
  125. string fileName = OutPutFile(report, ds, printTemplateID);
  126. string _NewFile = string.Empty;
  127. string __NewFile = string.Empty;
  128. ArrayList list = new ArrayList();
  129. //读取指定目录的文件
  130. if (!Directory.Exists(filePath))
  131. {
  132. Directory.CreateDirectory(filePath);
  133. }
  134. else
  135. {
  136. DirectoryInfo dirIfo = new DirectoryInfo(filePath);
  137. FileInfo[] files = dirIfo.GetFiles();
  138. for (int k = files.Length - 1; k >= 0; k--)
  139. {
  140. if (fileName == files[k].FullName)
  141. {
  142. list.Add(files[k].FullName);
  143. _NewFile = filePath + "\\" + "采购订单" + CurrentState["POCode"].ToString() + " "+ CurrentState["SupplierName"].ToString() + ".pdf";
  144. __NewFile = filePathD + "\\" + "采购订单" + CurrentState["POCode"].ToString() + " "+ CurrentState["SupplierName"].ToString() + ".pdf";
  145. File.Delete(_NewFile);
  146. File.Move(files[k].FullName, _NewFile);
  147. File.Move(_NewFile, __NewFile);
  148. }
  149. }
  150. }
  151. string MailBoxConfigurationSQL = @"SELECT SendHost,SendPort,SendDisplayName,SendAddress,SendPassword,TOAddress,
  152. CCAddress,Subject,IsBodyHtml FROM [Cust_MailBoxConfiguration ]";
  153. DataSet MailBoxConfigurationDs = new DataSet();
  154. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), MailBoxConfigurationSQL.ToString(), null, out MailBoxConfigurationDs);
  155. DataTable MailBoxConfigurationDT = new DataTable();
  156. if (MailBoxConfigurationDs != null && MailBoxConfigurationDs.Tables.Count > 0 && MailBoxConfigurationDs.Tables[0].Rows.Count > 0)
  157. {
  158. MailBoxConfigurationDT = MailBoxConfigurationDs.Tables[0];
  159. }
  160. string SendHost = string.Empty;
  161. int SendPort = 0;
  162. string SendAddress = string.Empty; ;
  163. string SendPassword = string.Empty; ;
  164. string CCAddress = string.Empty; ;
  165. foreach (DataRow item in MailBoxConfigurationDT.Rows)
  166. {
  167. SendHost = item["SendHost"].ToString();
  168. if (!string.IsNullOrWhiteSpace(item["SendPort"].ToString()))
  169. {
  170. SendPort = Int32.Parse(item["SendPort"].ToString());
  171. }
  172. SendAddress = item["SendAddress"].ToString();
  173. SendPassword = item["SendPassword"].ToString();
  174. CCAddress = item["CCAddress"].ToString();
  175. }
  176. string[] mailNames = TOAddress.Split(';');
  177. for (int i = 0; i < list.Count; i++)
  178. {
  179. SmtpClient client = new SmtpClient();
  180. client.Host = SendHost;//SMTP服务器地址
  181. client.EnableSsl = true;
  182. client.UseDefaultCredentials = false;
  183. //发件人邮箱账号
  184. client.Credentials = new System.Net.NetworkCredential(SendAddress, SendPassword);
  185. MailAddress from = new MailAddress(SendAddress, SendPassword); //邮件的发件人
  186. MailMessage message = new MailMessage();
  187. try
  188. {
  189. foreach (var MailItem in mailNames)
  190. {
  191. if (!string.IsNullOrWhiteSpace(MailItem))
  192. {
  193. message.To.Add(MailItem);//收件人地址
  194. }
  195. }
  196. if (!string.IsNullOrWhiteSpace(CCAddress))
  197. {
  198. message.CC.Add(CCAddress);//抄送人邮箱
  199. }
  200. message.From = new MailAddress(SendAddress);//发件人邮箱
  201. message.Subject = this.MailTitle86.Text;//邮件标题
  202. message.SubjectEncoding = Encoding.UTF8;//标题格式为UTF8
  203. string mailMessage = "";
  204. if (this.DropDownList_Notices.Text == "英文模板")
  205. {
  206. mailMessage = @"<html>
  207. <body>
  208. <table style='width: 100%; table-layout: fixed; font-size: 16px;' border: 0px cellspacing='4' >
  209. <tbody> ";
  210. int k = 0;
  211. mailMessage += string.Format(@"
  212. <tr>
  213. <td >{0}</td>
  214. </tr>
  215. ", "Dear Supplier:");
  216. mailMessage += string.Format(@"
  217. <tr>
  218. <td >{0}</td>
  219. </tr>
  220. ", "Please refer to the New PO, Confirm it within today and feedback the delivery date within 2 Days,Thanks.");
  221. mailMessage += string.Format(@"
  222. <tr>
  223. <td >{0}</td>
  224. </tr>
  225. ", "Best Regards");
  226. mailMessage += string.Format(@"
  227. <tr>
  228. <td >{0}</td>
  229. </tr>
  230. ", "The information contained in this message is confidential and may be legally privileged. " +
  231. "The message is intended solely for the addressee(s). If you are not the intended recipient," +
  232. " you are hereby notified that any use, dissemination or reproduction is strictly prohibited" +
  233. " and may be unlawful. If you are not the intended recipient, please contact the sender " +
  234. "by return e-mail and destroy all copies of the original message.");
  235. mailMessage += @" </table></body></html>";
  236. }
  237. else
  238. {
  239. string SelSQL = @"SELECT PrintTemplateText FROM Cust_PrintTemplateText WHERE PrintTemplateTypeName='" + this.DropDownList_Notices.Text + "'";
  240. DataSet SelSQLDs = new DataSet();
  241. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), SelSQL.ToString(), null, out SelSQLDs);
  242. DataTable dt = SelSQLDs.Tables[0];
  243. if (dt.Rows.Count < 1)
  244. {
  245. throw new Exception("配置表Cust_PrintTemplateText中不存在对应模板正文信息,请先维护");
  246. }
  247. string body = dt.Rows[0]["PrintTemplateText"].ToString();//正文信息
  248. List<string> bodylist = body.Split(' ').ToList();
  249. mailMessage = @"<html>
  250. <body>
  251. <table style='width: 100%; table-layout: fixed; font-size: 16px;' border: 0px cellspacing='4' >
  252. <tbody> ";
  253. foreach (var item in bodylist)
  254. {
  255. mailMessage += string.Format(@"
  256. <tr>
  257. <td >{0}</td>
  258. </tr>
  259. ", item);
  260. }
  261. mailMessage += @" </table></body></html>";
  262. }
  263. //string _Body = dt.Rows[0][0].ToString();
  264. //string[] strArray = _Body.Split(new char[1] { ' ' });
  265. string _SelSQL = @"select c.DefaultEmail from PM_PurchaseOrder a
  266. left join CBO_Operators b on a.PurOper = b.ID
  267. left join Base_Contact c on b.Contact = c.ID
  268. where a.DocNo ='" + CurrentState["POCode"].ToString() + "' and a.Org='" + CurrentState["OrgID"].ToString() + "'";
  269. DataSet _SelSQLDs = new DataSet();
  270. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), _SelSQL.ToString(), null, out _SelSQLDs);
  271. DataTable dtPur = new DataTable();
  272. dtPur = _SelSQLDs.Tables[0];
  273. if (dtPur.Rows.Count == 0)
  274. {
  275. throw new Exception("采购员未维护邮箱");
  276. }
  277. string PurMail = dtPur.Rows[0]["DefaultEmail"].ToString();//采购员收件邮箱
  278. if (!string.IsNullOrEmpty(PurMail))
  279. {
  280. message.CC.Add(PurMail);//采购员抄送人邮箱
  281. }
  282. message.CC.Add("yu.zhou@panawincn.com");//采购经理抄送人邮箱
  283. message.Body = mailMessage;// mailContent;//邮件内容
  284. message.BodyEncoding = Encoding.UTF8;//内容格式为UTF8
  285. message.IsBodyHtml = true;//是否是HTML邮件
  286. message.Priority = MailPriority.Normal;//邮件优先级
  287. if (SendPort > 0)
  288. {
  289. client.Port = Convert.ToInt32(SendPort);// 25;
  290. }
  291. message.Attachments.Add(new Attachment(__NewFile)); // 发送附件
  292. client.Send(message);//发送邮件
  293. message.Dispose();
  294. File.Delete(fileName);
  295. File.Delete(_NewFile);
  296. File.Delete(__NewFile);
  297. this.CloseDialog();
  298. }
  299. catch (Exception ex)
  300. {
  301. message.Dispose();
  302. File.Delete(fileName);
  303. File.Delete(_NewFile);
  304. File.Delete(__NewFile);
  305. throw new Exception(ex.ToString());
  306. }
  307. }
  308. }
  309. private string OutPutFile(UFSoft.UBF.Report.Entity.Report template, DataSet data, string printTemplateID)
  310. {
  311. string sql = string.Empty;
  312. string SelSQL = @"SELECT a.PrintTemplateSQL FROM Cust_PrintTemplate a WHERE a.PrintTemplateID='" + printTemplateID + "'";
  313. DataSet SelSQLDs = new DataSet();
  314. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), SelSQL.ToString(), null, out SelSQLDs);
  315. DataTable dt = new DataTable();
  316. if (SelSQLDs != null && SelSQLDs.Tables.Count > 0 && SelSQLDs.Tables[0].Rows.Count > 0)
  317. {
  318. dt = SelSQLDs.Tables[0];
  319. }
  320. sql = dt.Rows[0][0].ToString();
  321. sql = string.Format(sql, CurrentState["POCode"].ToString(), CurrentState["OrgID"].ToString());
  322. DataSet SelDs = new DataSet();
  323. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), sql.ToString(), null, out SelDs);
  324. data = SelDs;
  325. PrintService printService = new PrintService();
  326. PrintCreater printCreater = new PrintCreater();
  327. printService.LoadXmlFormatFromString(printCreater.CreateReport(template).InnerXml);
  328. printService.LoadPrintData(data);
  329. printService.ConvertStart();
  330. string[] resultFilesName = printService.GetResultFilesName();
  331. return printService.PhysicalFilePrefix + resultFilesName[0];
  332. }
  333. //OnClose141_Click...
  334. private void OnClose141_Click_Extend(object sender, EventArgs e)
  335. {
  336. //调用模版提供的默认实现.--默认实现可能会调用相应的Action.
  337. OnClose141_Click_DefaultImpl(sender, e);
  338. }
  339. string OrgID = string.Empty;
  340. string SupplierName = string.Empty;
  341. string SupplierCode = string.Empty;
  342. string POCode = string.Empty;
  343. List<OperationResultContent> list = new List<OperationResultContent>();
  344. #region 自定义数据初始化加载和数据收集
  345. private void OnLoadData_Extend(object sender)
  346. {
  347. DropDownList_Notices.Items.Clear();
  348. string _SelSQL = @"SELECT PrintTemplateTypeName FROM Cust_PrintTemplateText";
  349. DataSet _SelSQLDs = new DataSet();
  350. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), _SelSQL.ToString(), null, out _SelSQLDs);
  351. DataTable _dt = new DataTable();
  352. _dt = _SelSQLDs.Tables[0];
  353. if (_dt.Rows.Count > 0)
  354. {
  355. foreach (DataRow item in _dt.Rows)
  356. {
  357. this.DropDownList_Notices.Items.Add("" + item["PrintTemplateTypeName"].ToString() + "");
  358. }
  359. }
  360. this.DropDownList_Notices.Items.Add("英文模板");
  361. DropDownList_Notices.SelectedIndex = 0;
  362. OrgID = CurrentState["OrgID"].ToString();
  363. SupplierName = CurrentState["SupplierName"].ToString();
  364. SupplierCode = CurrentState["SupplierCode"].ToString();
  365. POCode = CurrentState["POCode"].ToString();
  366. this.Model.CustPOSendMailPerson.Clear();
  367. CusSupplierContactBP.CusSelSupplierContactBP pro = new CusSupplierContactBP.CusSelSupplierContactBP();
  368. pro.OrgID = OrgID;
  369. pro.SupplierNo = SupplierCode;
  370. pro.PODocNo = POCode;
  371. list = new List<OperationResultContent>();
  372. list = pro.Do();
  373. if (list != null && list.Count > 0)
  374. {
  375. foreach (var item in list)
  376. {
  377. //IUIRecordCollection records = this.Model.CustPOSendMailPerson.SelectRecords;
  378. CustPOSendMailPersonRecord dataRwcord = this.Model.CustPOSendMailPerson.AddNewUIRecord();
  379. if (!string.IsNullOrWhiteSpace(item.SupplierContentName))
  380. {
  381. dataRwcord.RcvPerson = item.SupplierContentName;
  382. dataRwcord.Telephone = item.Telephoto;
  383. dataRwcord.MailAddress = item.Mail;
  384. dataRwcord.IsSelected = true;
  385. }
  386. }
  387. }
  388. OnLoadData_DefaultImpl(sender);
  389. string MaileTile = string.Empty;
  390. MaileTile = "采购订单 " + POCode + "," + "供应商:" + SupplierName;
  391. _SelSQL = @"select c.DefaultEmail from PM_PurchaseOrder a
  392. left join CBO_Operators b on a.PurOper = b.ID
  393. left join Base_Contact c on b.Contact = c.ID
  394. where a.DocNo ='" + CurrentState["POCode"].ToString() + "' and a.Org='" + CurrentState["OrgID"].ToString() + "'";
  395. _SelSQLDs = new DataSet();
  396. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), _SelSQL.ToString(), null, out _SelSQLDs);
  397. DataTable dtPur = new DataTable();
  398. dtPur = _SelSQLDs.Tables[0];
  399. if (dtPur.Rows.Count == 0)
  400. {
  401. throw new Exception("采购员未维护邮箱");
  402. }
  403. string PurMail = dtPur.Rows[0]["DefaultEmail"].ToString();//采购员收件邮箱
  404. this.MailTitle86.Text = MaileTile;
  405. if (this.DropDownList_Notices.Text == "英文模板")
  406. {
  407. this.MailText53.Text = "Dear Supplier:" + "\r\n" + "Please refer to the New PO, Confirm it within today and feedback the delivery date within 2 Days,Thanks."
  408. + "\r\n" + "Best Regards" + "\r\n" + "The information contained in this message is confidential and may be " +
  409. "legally privileged. The message is intended solely for the addressee(s). " +
  410. "If you are not the intended recipient, you are hereby notified that any use,dissemination " +
  411. "or reproduction is strictly prohibited and may be unlawful. If you are not the intended recipient, " +
  412. "please contact the sender by return e-mail and destroy all copies of the original message.";
  413. }
  414. else
  415. {
  416. string SelSQL = @"SELECT PrintTemplateText FROM Cust_PrintTemplateText WHERE PrintTemplateTypeName='" + this.DropDownList_Notices.Text + "'";
  417. DataSet SelSQLDs = new DataSet();
  418. UFSoft.UBF.Util.DataAccess.DataAccessor.RunSQL(UFSoft.UBF.Util.DataAccess.DataAccessor.GetConn(), SelSQL.ToString(), null, out SelSQLDs);
  419. DataTable dt = new DataTable();
  420. dt = SelSQLDs.Tables[0];
  421. if (dt.Rows.Count < 1)
  422. {
  423. throw new Exception("配置表Cust_PrintTemplateText中不存在对应模板正文信息,请先维护");
  424. }
  425. this.MailText53.Text = dt.Rows[0]["PrintTemplateText"].ToString();
  426. }
  427. this.DataCollect();
  428. this.DataBind();
  429. }
  430. private void OnDataCollect_Extend(object sender)
  431. {
  432. OnDataCollect_DefaultImpl(sender);
  433. }
  434. #endregion
  435. #region 自己扩展 Extended Event handler
  436. public void AfterOnLoad()
  437. {
  438. }
  439. public void AfterCreateChildControls()
  440. {
  441. }
  442. public void AfterEventBind()
  443. {
  444. }
  445. public void BeforeUIModelBinding()
  446. {
  447. }
  448. public void AfterUIModelBinding()
  449. {
  450. }
  451. #endregion
  452. #endregion
  453. }
  454. }