3 using System.Collections.Generic;
8 using System.Text.RegularExpressions;
9 using System.Reflection;
10 using CPE.App.Api.Models;
11 using CPE.App.Api.Helpers;
12 using CPE.App.Web.Code;
13 using CPE.App.Web.Controllers;
14 using CPE.App.Web.Models;
16 using Spire.Doc.Fields;
17 using Spire.Doc.Documents;
18 using LicenseProvider = Spire.License.LicenseProvider;
20 namespace CPE.App.Api.Controllers
22 public class CertificateController : Controller
26 public FileResult Index(string a, string b, string c)
28 //Utilities.LogWrapper.Info("[CertificateController][Index] a={0} b={1} c={2}", a, b, c);
30 //LicenseProvider.SetLicenseFileName("license.elic.xml");
31 //Spire.License.LicenseProvider.SetLicenseKey("X9zoH5wBACEkbxZBCckEWQN59jBmfbv1DANzUFP9L1QeYw1g3vaSx7rFIdgJgwYVNADZby8Wz5sqiRAqqlQ9JOoIp7VkMynAuujR6NjAR4jokDEQisMYeDIYKSAz0rC6d/tLi1u5ljU70MH+JNMWjUTkWrVU1rO4CBJ0NeF8HcUX13LcYI9Nh7nrdKa5nGjnowPhRKB0kk94B5iAFY3am8EdPiisLKYFSmYffAiLdy4cWfxXTnBushMV+1edF/NCDXzq+LQ4aeMytyPN4H9CsJJarQlcgje/yquDt6HMwA0zwUlsb2x4wKZzG00pjXB4B4QIX2icUMsTrnpY9orSWQQK7F8NmibBAJ/DQPz+ZQghMs/vfd/iBDPSh0XHGFieZeH9QwuLFS54wmCfFe1fImJMAsI29C3iNo5XJAere0AeVuF1f8kn4RFN5q378kQfKmp0uVO5IPpNEY5S0vpVXiLpI2cT3b7SaFq8cvcicc9NBpXllZBCzUDfKazzbnzsbZAh+ifwPeNmsLYiqYDytfcYSCjSIl9QbbcDGjJma8yMS9TfwYq7GZhU0jiXOc/iOzrZc2Crvk+okrFEjUXmCuaI3QsHBXfltVq4Xj/whAjE16M+Ze5o5QUZFFJjOqc3Di9TSyHH0uZsbkSNFj8zZmF+9EUAjKPyMg1qTAcfuFs3AjGm8heuZBp9mnCz04c/ZTtGIdTMEKuIPraRnlhTvv2dQk9Xg4tBdZr0fCjvN9hD9C6CMvP5VPuCb1LpdF/YVya/oNk5pm1sUBymcDVres8MJAA5L73cocRAjDy2rpUdmFSt0kIIVFJDq7vO5bsbRdQzOj+f0MUyQNK6FvQitsTsQXygnY1TVLv+McBBkbS8c5UGHbzTvmlVj+LnmzOFNnOTZR9lhZGLFc9hBqDnZ9qGZpja+JVTbJ4l0EycgGSKPHGb2FoqCzQHlGKwfowAnHYxzMkxDqtDeXVDxcqrlbWvGVNLssSY1xJnftXouWnSfXXSusBKBZdxslMjzZY5TOK9XRJ+drPOdc1xdpWPUViHPkML3Nx+arQv6QTOgyYeAIEssBUuksqlZvothDj7YLnHWqlFvyXe3iCzNG0PpQmkx2LnCInBHA6rGwympD/75EMxK2QizZMznwwqtk3PEavwW23kMz0Pq61UkZzVNfFS44Qb/UY7eq1ZGVNFg3joL2nIRtq1B/iZUwF2nJa2bhhoem6yuenjj5kxolswA3fYqYIDab6y1WgoIG5la1hDPs4y98gOAfaGJwWlwCepEMhZx8OxxHNKy9Chrrf0GH2b68477tU2tafrA5xwCWrDSHFym2AIM3mbohzlwsOPFF/vKVdBjJ48bmFQMBrV7pWxrnJwnyBeoydZr2AqfKuKBOmmYIoPgbMZlJwYue+24Q5aZd8HSgSNv8NDoY83H4kw98yYTfUc09HJVlHDbcBqjBcHwvFnZ85HjKp4dp+ePY3LpCSo/Wm26kaXIhUZ2eR8uA72qO/j");
32 //Spire.License.LicenseProvider.LoadLicense();
33 LicenseProvider.ClearLicense();
35 var fileInfo = new FileInfo(Server.MapPath("~/static/doc/license.elic.xml"));
36 LicenseProvider.SetLicenseFile(fileInfo);
37 LicenseProvider.LoadLicense();
39 var test = LicenseProvider.GetLicenseFileName();
41 string formattedPdate = b.Substring(0, 4) + '-' + b.Substring(4, 2) + '-' + b.Substring(6, 2);
42 DateTime cDate = Convert.ToDateTime(formattedPdate);
43 Document cert = new Document();
46 PurchasedCourse purchasedCourse =
47 BaseController.Database.PurchasedCourses.FirstOrDefault(
48 pc => pc.ContentUrl == a && pc.CertificateDate.Value.Date == cDate.Date && pc.Ticket == c);
50 cert.LoadFromFile(Server.MapPath("~/static/doc/selfstudycert.docx"));
52 foreach (var p in purchasedCourse.GetType().GetProperties())
54 if (p.ToString().IndexOf("FailedAttempts") < 0)
56 var token = p.GetValue(purchasedCourse, null).ToString();
58 if ((DateTime.TryParse(token, out dateToken)) && (p.Name.IndexOf("Credits") < 0))
60 token = dateToken.ToShortDateString();
64 //Utilities.LogWrapper.Info("[CertificateController][Index] PurchasedCourse.Properties cert.Replace value={0} token={1}", value, token);
65 cert.Replace(value, token, true, true);
71 ParticipantPurchase purchase = BaseController.Database.ParticipantPurchases.FirstOrDefault(
72 pc => pc.MeetingSco.ToString() == a && pc.PurchaseDate == cDate.Date && pc.Ticket == c);
74 MeetingDetail detail =
75 BaseController.Database.MeetingDetails.FirstOrDefault(md => md.MeetingKey.ToString() == a);
76 cert.LoadFromFile(Server.MapPath("~/static/doc/webcastcert.docx"));
78 foreach (var p in purchase.GetType().GetProperties())
81 var token = p.GetValue(purchase, null)?.ToString() ?? "";
83 if ((DateTime.TryParse(token, out dateToken)) && (p.Name.IndexOf("Credits") < 0))
85 token = dateToken.ToShortDateString();
87 //Certificate Credits are only awarded in whole or half credits. Always rounded down.
88 if (p.ToString().IndexOf("Credits") > -1)
90 float fToken = float.Parse(token);
91 double roundedRating = (Math.Floor(2 * fToken)) / 2;
92 token = roundedRating.ToString(".0");
96 //Utilities.LogWrapper.Info("[CertificateController][Index] ParticipantPurchase.Properties cert.Replace value={0} token={1}", value, token);
97 cert.Replace(value, token, true, true);
100 foreach (var d in detail.GetType().GetProperties())
102 if (d.ToString().IndexOf("Location") < 0)
104 var token = d.GetValue(detail, null).ToString();
106 //Utilities.LogWrapper.Info("[CertificateController][Index] MeetingDetail.Properties cert.Replace value={0} token={1}", value, token);
107 cert.Replace(value, token, true, true);
113 //Utilities.LogWrapper.Info("[CertificateController][Index] cert.Replace value=IssueDate token=DateTime.Now");
114 cert.Replace("IssueDate", DateTime.Now.ToShortDateString(), false, false);
116 MemoryStream stream = new MemoryStream();
118 cert.SaveToStream(stream, FileFormat.PDF);
124 Response.AppendHeader("Content-Disposition", "inline; filename=Certificate.pdf");
125 return File(stream, "application/pdf");
129 //GET: /Certificate/Resend
130 public ActionResult Resend(PurchasedCourse course)
132 //return a mailto dialog with the cert pdf attached