From 167db670277592df0bf87fd1c1078e8e7eec17a4 Mon Sep 17 00:00:00 2001 From: Chase Tucker Date: Mon, 18 Sep 2023 09:21:41 -0700 Subject: [PATCH] Creating OOOTrainingReport scheduled job --- .../Controllers/TrainingController.cs | 64 +-------------- .../Controllers/WebAPIController.cs | 9 --- Fab2ApprovalSystem/Fab2ApprovalSystem.csproj | 5 ++ Fab2ApprovalSystem/Global.asax.cs | 3 +- .../OOOTrainingReportJobSchedule.cs | 33 ++++++++ .../Jobs/OOOTrainingReportJob.cs | 77 +++++++++++++++++++ Fab2ApprovalSystem/Startup.cs | 19 +++++ 7 files changed, 137 insertions(+), 73 deletions(-) create mode 100644 Fab2ApprovalSystem/JobSchedules/OOOTrainingReportJobSchedule.cs create mode 100644 Fab2ApprovalSystem/Jobs/OOOTrainingReportJob.cs diff --git a/Fab2ApprovalSystem/Controllers/TrainingController.cs b/Fab2ApprovalSystem/Controllers/TrainingController.cs index 459cce6..891aafa 100644 --- a/Fab2ApprovalSystem/Controllers/TrainingController.cs +++ b/Fab2ApprovalSystem/Controllers/TrainingController.cs @@ -11,7 +11,7 @@ using System.Web.Mvc; using Kendo.Mvc.Extensions; using Fab2ApprovalSystem.Misc; using System.Configuration; - +using System.Threading.Tasks; namespace Fab2ApprovalSystem.Controllers { @@ -762,68 +762,6 @@ namespace Fab2ApprovalSystem.Controllers } return isSuccess; } - - public bool RunOOOTrainingReport() - { - bool isSuccess = false; - try - { - string emailBody = "

Mesa Approval Open Training Assignments Report - OOO


"; - emailBody += "

The following contains open training assignments in the Mesa Approval system for out of office users."; - emailBody += " Please ensure they complete their training assignments promptly upon their return.


"; - emailBody += ""; - //Get all users set up to receive the training report email. - List trainingReportUsers = adminDMO.GetTrainingReportUsers(); - List emailList = new List(); - //foreach (var user in trainingReportUsers) - //{ - // string userEmail = userDMO.GetUserByID(user.UserId).Email; - // emailList.Add(userEmail); - //} - emailList.Add("Chase.Tucker@infineon.com"); - //Get a list of open trainings - List openTrainings = trainingDMO.GetAllOpenTrainings(); - - foreach (Training training in openTrainings) - { - string trainingSection = ""; - int trainingSectionUserCount = 0; - string ecnTitle = ecnDMO.GetECN(training.ECN).Title; - trainingSection += "

" + training.ECN + " - " + ecnTitle + "

"; - - trainingSection += ""; - trainingSection += ""; - List openAssignments = trainingDMO.GetOpenAssignmentsByTrainingID(training.TrainingID); - foreach (TrainingAssignment assignment in openAssignments) - { - - if (userDMO.GetUserByID(assignment.UserID).OOO) - { - trainingSectionUserCount++; - - DateTime? assignmentDate = assignment.DateAssigned; - - string DateAssigned = assignmentDate.HasValue ? assignmentDate.Value.ToString("MM/dd/yyyy") : ""; - - trainingSection += ""; - - trainingSection += ""; - } - } - trainingSection += "
NameDate Assigned
" + assignment.FullName + "" + DateAssigned + "
"; - if (trainingSectionUserCount > 0) emailBody += trainingSection; - } - string recipientEmail = ""; - List ccRecipients = emailList; - emailer.SendNotification("MesaFabApproval@infineon.com", ccRecipients, "Mesa Approval Open Training Report - OOO", emailBody, "Open Training Report - OOO"); - isSuccess = true; - } - catch - { - isSuccess = false; - } - return isSuccess; - } } } diff --git a/Fab2ApprovalSystem/Controllers/WebAPIController.cs b/Fab2ApprovalSystem/Controllers/WebAPIController.cs index 37dac3b..dec2786 100644 --- a/Fab2ApprovalSystem/Controllers/WebAPIController.cs +++ b/Fab2ApprovalSystem/Controllers/WebAPIController.cs @@ -45,15 +45,6 @@ namespace Fab2ApprovalSystem.Controllers { return request.CreateResponse(HttpStatusCode.InternalServerError); } - case "TrainingReportOOO": - if (trainingFunctions.RunOOOTrainingReport()) - { - return request.CreateResponse(HttpStatusCode.OK); - } - else - { - return request.CreateResponse(HttpStatusCode.InternalServerError); - } case "CARDueDates": if (carFunctions.ProcessCARDueDates()) { diff --git a/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj b/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj index 71d89b2..cd6df68 100644 --- a/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj +++ b/Fab2ApprovalSystem/Fab2ApprovalSystem.csproj @@ -130,6 +130,7 @@ Global.asax + @@ -248,6 +249,7 @@ + @@ -1966,6 +1968,9 @@ 1.0.0 + + 3.7.0 + 1.2.0 diff --git a/Fab2ApprovalSystem/Global.asax.cs b/Fab2ApprovalSystem/Global.asax.cs index e6285b6..52a9a82 100644 --- a/Fab2ApprovalSystem/Global.asax.cs +++ b/Fab2ApprovalSystem/Global.asax.cs @@ -11,6 +11,7 @@ using System.Web.Security; using System.Configuration; using Fab2ApprovalSystem.DMO; using System.Web.Http; +using Fab2ApprovalSystem.JobSchedules; namespace Fab2ApprovalSystem { @@ -45,8 +46,8 @@ namespace Fab2ApprovalSystem //GlobalVars.AttachmentUrl = connectionstring.ToUpper().Contains("TEST") ? @"http://" + DevAttachmentUrl + "/" : @"http://" + ProdAttachmentUrl + "/"; ; GlobalVars.hostURL = connectionstring.ToUpper().Contains("TEST") ? @"http://" + DevWebSiteUrl : @"http://" + ProdWebSiteUrl ; - + OOOTrainingReportJobSchedule.Start(); } diff --git a/Fab2ApprovalSystem/JobSchedules/OOOTrainingReportJobSchedule.cs b/Fab2ApprovalSystem/JobSchedules/OOOTrainingReportJobSchedule.cs new file mode 100644 index 0000000..9040207 --- /dev/null +++ b/Fab2ApprovalSystem/JobSchedules/OOOTrainingReportJobSchedule.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Fab2ApprovalSystem.Workers; +using Quartz.Impl; +using Quartz; + +namespace Fab2ApprovalSystem.JobSchedules +{ + public class OOOTrainingReportJobSchedule + { + public static void Start() + { + ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); + + IScheduler scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + scheduler.Start(); + + IJobDetail oooTrainingReportJob = JobBuilder.Create() + .WithIdentity("oooTrainingReportJob", "trainingReportGroup") + .Build(); + + ITrigger oooTrainingReportTrigger = TriggerBuilder.Create() + .WithIdentity("oooTrainingReportTrigger", "trainingReportGroup") + .WithCronSchedule("0 0 12 ? * 2 *") + .ForJob(oooTrainingReportJob) + .Build(); + + scheduler.ScheduleJob(oooTrainingReportJob, oooTrainingReportTrigger); + } + } +} diff --git a/Fab2ApprovalSystem/Jobs/OOOTrainingReportJob.cs b/Fab2ApprovalSystem/Jobs/OOOTrainingReportJob.cs new file mode 100644 index 0000000..5c6f584 --- /dev/null +++ b/Fab2ApprovalSystem/Jobs/OOOTrainingReportJob.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Web; +using Fab2ApprovalSystem.Controllers; +using Fab2ApprovalSystem.DMO; +using Fab2ApprovalSystem.Models; +using Fab2ApprovalSystem.Utilities; +using Quartz; + +namespace Fab2ApprovalSystem.Workers +{ + public class OOOTrainingReportJob:IJob + { + UserAccountDMO userDMO = new UserAccountDMO(); + AdminDMO adminDMO = new AdminDMO(); + TrainingDMO trainingDMO = new TrainingDMO(); + ECN_DMO ecnDMO = new ECN_DMO(); + public EmailUtilities emailer = new EmailUtilities(); + + async Task IJob.Execute(IJobExecutionContext context) + { + await Task.Run(() => { + + string emailBody = "

Mesa Approval Open Training Assignments Report - OOO


"; + emailBody += "

The following contains open training assignments in the Mesa Approval system for out of office users."; + emailBody += " Please ensure they complete their training assignments promptly upon their return.


"; + emailBody += ""; + //Get all users set up to receive the training report email. + List trainingReportUsers = adminDMO.GetTrainingReportUsers(); + List emailList = new List(); + foreach (var user in trainingReportUsers) + { + string userEmail = userDMO.GetUserByID(user.UserId).Email; + emailList.Add(userEmail); + } + //emailList.Add("Chase.Tucker@infineon.com"); + //Get a list of open trainings + List openTrainings = trainingDMO.GetAllOpenTrainings(); + + foreach (Training training in openTrainings) + { + string trainingSection = ""; + int trainingSectionUserCount = 0; + string ecnTitle = ecnDMO.GetECN(training.ECN).Title; + trainingSection += "

" + training.ECN + " - " + ecnTitle + "

"; + + trainingSection += ""; + trainingSection += ""; + List openAssignments = trainingDMO.GetOpenAssignmentsByTrainingID(training.TrainingID); + foreach (TrainingAssignment assignment in openAssignments) + { + + if (userDMO.GetUserByID(assignment.UserID).OOO) + { + trainingSectionUserCount++; + + DateTime? assignmentDate = assignment.DateAssigned; + + string DateAssigned = assignmentDate.HasValue ? assignmentDate.Value.ToString("MM/dd/yyyy") : ""; + + trainingSection += ""; + + trainingSection += ""; + } + } + trainingSection += "
NameDate Assigned
" + assignment.FullName + "" + DateAssigned + "
"; + if (trainingSectionUserCount > 0) emailBody += trainingSection; + } + string recipientEmail = ""; + List ccRecipients = emailList; + emailer.SendNotification("MesaFabApproval@infineon.com", ccRecipients, "Mesa Approval Open Training Report - OOO", emailBody, "Open Training Report - OOO"); + }); + } + } +} diff --git a/Fab2ApprovalSystem/Startup.cs b/Fab2ApprovalSystem/Startup.cs index c56738f..65ba6aa 100644 --- a/Fab2ApprovalSystem/Startup.cs +++ b/Fab2ApprovalSystem/Startup.cs @@ -1,6 +1,9 @@ using System.Web.Http; +using Fab2ApprovalSystem.Workers; using Microsoft.Owin; using Owin; +using Quartz; +using Quartz.Impl; [assembly: OwinStartupAttribute(typeof(Fab2ApprovalSystem.Startup))] namespace Fab2ApprovalSystem @@ -10,6 +13,22 @@ namespace Fab2ApprovalSystem protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); + + ISchedulerFactory schedulerFactory = new StdSchedulerFactory(); + + IScheduler scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult(); + + IJobDetail oooTrainingReportJob = JobBuilder.Create() + .WithIdentity("oooTrainingReportJob", "trainingReportGroup") + .Build(); + + ITrigger oooTrainingReportTrigger = TriggerBuilder.Create() + .WithIdentity("oooTrainingReportTrigger", "trainingReportGroup") + .WithCronSchedule("15 13 * * MON") + .ForJob(oooTrainingReportJob) + .Build(); + + scheduler.ScheduleJob(oooTrainingReportJob, oooTrainingReportTrigger); } public void Configuration(IAppBuilder app) {