using Microsoft.AspNetCore.Identity; using Microsoft.CodeAnalysis; using MimeKit; using ODCWeb.DataAccess.Data; using ODCWeb.DataAccess.Repository.IRepository; using ODCWeb.Models; using Quartz; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ODCWeb.DataAccess.Repository { public class SendReminderEmail : IJob { private readonly IUnitOfWork _unitOfWork; public SendReminderEmail( IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } public Task Execute(IJobExecutionContext context) { ////////////////////////////// //SendEmail(); (Emails Paused) /* Refresh_Calculations();*/ /*DataTemp temp = _unitOfWork.DataTemp.Get(u => u.DataTempId == 1); if (temp != null) { if (temp.date_temp == null) { temp.date_temp = DateOnly.FromDateTime(DateTime.Now); _unitOfWork.DataTemp.update(temp); _unitOfWork.save(); } else { DateOnly todayd = DateOnly.FromDateTime(DateTime.Now); if (todayd != temp.date_temp) { SendEmail(); temp.date_temp = todayd; _unitOfWork.DataTemp.update(temp); _unitOfWork.save(); } } }*/ ////////////////////////////// return Task.CompletedTask; } void SendEmail() { int left = 0; IEnumerable stasks = _unitOfWork.ScheduleTask.Where(u => u.IsEndDate == true); if (stasks != null) { foreach (var item in stasks) { if (item.EDate != null && item.Completion < 100) //add condition of filtering deadlines only not starting dates { try { TimeSpan? difference = null; DateTime today = DateTime.Now; difference = item.EDate - today; string temp = difference.ToString(); int place = temp.IndexOf("."); string temp2 = temp.Substring(0, place); left = Int32.Parse(temp2); if (left < 5) { ////send email/// var email = new MimeMessage(); email.From.Add(new MailboxAddress("Odlan Reminder", "odc@lyoko.studio")); email.To.Add(new MailboxAddress("Manager", "orlandovalentine@yahoo.com")); email.Subject = "Deadline near for " + item.Name; if (left > 1) { email.Body = new TextPart(MimeKit.Text.TextFormat.Html) { Text = "

Deadline due in " + left + " days


Deadline for " + item.Name + " is " + item.EDate + "
Action: " + _unitOfWork.Action.Get(u => u.ActionId == item.ActionId).Name + "
Floor: " + _unitOfWork.Floor.Get(u => u.FloorId == item.FloorId).Name + "
Project: " + _unitOfWork.ODCProject.Get(u => u.Id == item.ODCProjectId).Name + "

" }; } else if (left < -1) { email.Body = new TextPart(MimeKit.Text.TextFormat.Html) { Text = "

Deadline overdue by " + (left * (-1)) + " days


Deadline for " + item.Name + " was " + item.EDate + "
Action: " + _unitOfWork.Action.Get(u => u.ActionId == item.ActionId).Name + "
Floor: " + _unitOfWork.Floor.Get(u => u.FloorId == item.FloorId).Name + "
Project: " + _unitOfWork.ODCProject.Get(u => u.Id == item.ODCProjectId).Name + "

" }; } else { if (left > -1 && left < 2) { email.Body = new TextPart(MimeKit.Text.TextFormat.Html) { Text = "

Deadline due in " + left + " day


Deadline for " + item.Name + " was " + item.EDate + "
Action: " + _unitOfWork.Action.Get(u => u.ActionId == item.ActionId).Name + "
Floor: " + _unitOfWork.Floor.Get(u => u.FloorId == item.FloorId).Name + "
Project: " + _unitOfWork.ODCProject.Get(u => u.Id == item.ODCProjectId).Name + "

" }; } else { email.Body = new TextPart(MimeKit.Text.TextFormat.Html) { Text = "

Deadline overdue by " + (left * (-1)) + " day


Deadline for " + item.Name + " was " + item.EDate + "
Action: " + _unitOfWork.Action.Get(u => u.ActionId == item.ActionId).Name + "
Floor: " + _unitOfWork.Floor.Get(u => u.FloorId == item.FloorId).Name + "
Project: " + _unitOfWork.ODCProject.Get(u => u.Id == item.ODCProjectId).Name + "

" }; } } try { using (var smtp = new MailKit.Net.Smtp.SmtpClient()) { smtp.Connect("mail.lyoko.studio", 465, true); // Note: only needed if the SMTP server requires authentication smtp.Authenticate("odc@lyoko.studio", "amSmit,12,#"); smtp.Send(email); smtp.Disconnect(true); } } catch (Exception ex) { //Do nothing } ///////////////// } } catch (Exception ex) { //Do nothing } } } } } void Refresh_Calculations() { ///////////////////// IEnumerable task = _unitOfWork.Task.GetAll(); if (task != null) { foreach (var tas in task) { tas.Material_Cost = 0; var materials = _unitOfWork.Material.GetAll(); if (materials != null) { foreach (var mat in materials) { if (tas.TaskId == mat.TaskId) { tas.Material_Cost = tas.Material_Cost + (mat.Unit_Cost * mat.Qty); } } } _unitOfWork.Task.update(tas); _unitOfWork.save(); } } ///////////////////// ///////////////////// IEnumerable action = _unitOfWork.Action.GetAll(); if (action != null) { foreach (var act in action) { act.A_Material_Cost = 0; var tasks = _unitOfWork.Task.GetAll(); if (tasks != null) { foreach (var tas in tasks) { if (tas.ActionId == act.ActionId) { act.A_Material_Cost = act.A_Material_Cost + tas.Material_Cost; } } } _unitOfWork.Action.update(act); _unitOfWork.save(); } } ///////////////////// IEnumerable floorr = _unitOfWork.Floor.GetAll(); if (floorr != null) { foreach (var flo in floorr) { flo.F_Material_Cost = 0; var actions = _unitOfWork.Action.GetAll(); if (actions != null) { foreach (var act in actions) { if (act.FloorId == flo.FloorId) { flo.F_Material_Cost = flo.F_Material_Cost + act.A_Material_Cost; } } } _unitOfWork.Floor.update(flo); _unitOfWork.save(); } } var projects = _unitOfWork.ODCProject.GetAll(); ///////////////////// if (projects != null) { foreach (var pro in projects) { pro.P_Material_Cost = 0; var floors = _unitOfWork.Floor.GetAll(); if (floors != null) { foreach (var flo in floors) { if (flo.ODCProjectId == pro.Id) { pro.P_Material_Cost = pro.P_Material_Cost + flo.F_Material_Cost; } } } _unitOfWork.ODCProject.Update(pro); _unitOfWork.save(); } } ///////////////////// IEnumerable etasks = _unitOfWork.ScheduleTask.Where(u => u.IsEndDate == true); if (etasks != null) { foreach (var etask in etasks) { ActionTask taskk = _unitOfWork.Task.Get(u => u.TaskId == etask.TaskId); if (taskk != null) { etask.Completion = taskk.Completion; TimeOnly SEtimeOnly = new TimeOnly(9, 00, 00); DateOnly SEdateOnly = ((DateOnly)taskk.SDate).AddDays((int)taskk.Duration); var SEdateTime = SEdateOnly.ToDateTime(SEtimeOnly); TimeOnly EtimeOnly = new TimeOnly(17, 00, 00); DateOnly EdateOnly = ((DateOnly)taskk.SDate).AddDays((int)taskk.Duration); var EdateTime = EdateOnly.ToDateTime(EtimeOnly); etask.SDate = SEdateTime; etask.EDate = EdateTime; etask.Name = taskk.Name; if (etask.Completion == 100) { _unitOfWork.ScheduleTask.Remove(etask); _unitOfWork.save(); } else { _unitOfWork.ScheduleTask.update(etask); _unitOfWork.save(); } } } } ///////////////////////////// ///////////////////// IEnumerable stasks = _unitOfWork.ScheduleTask.Where(u => u.IsEndDate == false); if (stasks != null) { foreach (var stask in stasks) { ActionTask taskk = _unitOfWork.Task.Get(u => u.TaskId == stask.TaskId); if (taskk != null) { stask.Completion = taskk.Completion; TimeOnly SStimeOnly = new TimeOnly(09, 00, 00); DateOnly SSdateOnly = (DateOnly)taskk.SDate; var SSdateTime = SSdateOnly.ToDateTime(SStimeOnly); TimeOnly EtimeOnly = new TimeOnly(17, 00, 00); DateOnly EdateOnly = (DateOnly)taskk.SDate; var EdateTime = EdateOnly.ToDateTime(EtimeOnly); stask.SDate = SSdateTime; stask.EDate = EdateTime; stask.Name = taskk.Name; if (stask.Completion == 100) { _unitOfWork.ScheduleTask.Remove(stask); _unitOfWork.save(); } else { _unitOfWork.ScheduleTask.update(stask); _unitOfWork.save(); } } } } } } }