private async Task createrole(IApplicationBuilder app) { using (var serviceScope = app.ApplicationServices.CreateScope()) { var services = serviceScope.ServiceProvider; var db = services.GetService <ApplicationDbContext>(); if (db.Database.GetPendingMigrations().Any()) { await db.Database.MigrateAsync(); var _rolemanager = serviceScope.ServiceProvider.GetService <RoleManager <IdentityRole> >(); if (!await _rolemanager.RoleExistsAsync("Admin")) { await _rolemanager.CreateAsync(new IdentityRole("Admin")); } if (!await _rolemanager.RoleExistsAsync("Student")) { await _rolemanager.CreateAsync(new IdentityRole("Student")); } } // await ScheduleEmail(db); // await SendEm(); ScheduleEmail send = new ScheduleEmail(db); send.getEvent(); } }
public void when_email_is_scheduled_is_sent_when_is_due_repeatedly() { var settings = ReminderSettings.Default .WithPersistenceId("email") .WithTickInterval(TimeSpan.FromMilliseconds(500)) .WithSnapshotInterval(5); var taskId = Guid.NewGuid().ToString(); var probe = CreateTestProbe("email-sender"); var scheduler = (TestScheduler)Sys.Scheduler; var emailScheduler = Sys.ActorOf(Props.Create(() => new EmailScheduler(settings)).WithDispatcher(CallingThreadDispatcher.Id), "email"); var when = DateTime.UtcNow.AddDays(1); var job = new ScheduleEmail("me", "you", "hi"); var ack = new Ack(taskId); var schedule = new Reminder.ScheduleRepeatedly(taskId, probe.Ref.Path, job, when, TimeSpan.FromHours(1), ack); emailScheduler.Tell(schedule, probe); probe.ExpectMsg <Ack>(x => x.Id == taskId); scheduler.AdvanceTo(when); probe.ExpectMsg <ScheduleEmail>(x => x.Body == job.Body && x.From == job.From && x.To == job.To); scheduler.Advance(TimeSpan.FromHours(1)); probe.ExpectMsg <ScheduleEmail>(x => x.Body == job.Body && x.From == job.From && x.To == job.To); scheduler.Advance(TimeSpan.FromHours(1)); probe.ExpectMsg <ScheduleEmail>(x => x.Body == job.Body && x.From == job.From && x.To == job.To); scheduler.Advance(TimeSpan.FromHours(1)); probe.ExpectMsg <ScheduleEmail>(x => x.Body == job.Body && x.From == job.From && x.To == job.To); }
public void myTimer_Elapsed(object source, System.Timers.ElapsedEventArgs e) { var listOfLowStockItems = CatalogueBizLogic.ListLowStockItems(); ScheduleEmail objScheduleMail = new ScheduleEmail(); objScheduleMail.SendScheduleMail(listOfLowStockItems); }
// [HttpPost] public async Task <IActionResult> ChooseEventB(EventModel model) { // var Event = from crs in db.Events where crs.EventId == model.EventId select crs; // EventModel crs = Event[0]; var evt = db.Events.SingleOrDefault(e => e.EventId == model.EventId); if (evt.OccupiedSeats >= evt.NumberOfSeats) { TempData["Message"] = "The event is full!"; // return View(); return(RedirectToAction("ChooseEvent", "Event")); } evt.OccupiedSeats += 1; var us = await GetCurrentUserAsync(); var check = db.StudentEvents.SingleOrDefault(l => l.EventId == model.EventId && l.ApplicationUser == us); if (check != null) { TempData["Message"] = "Duplicated Enrollment!"; // return View("ChooseEvent"); return(RedirectToAction("ChooseEvent", "Event")); } StudentEvent scs = new StudentEvent(); scs.EventId = model.EventId; scs.ApplicationUser = us; db.StudentEvents.Add(scs); db.SaveChanges(); ScheduleEmail send = new ScheduleEmail(db); send.getEvent(); // return PartialView("part",_model); return(RedirectToAction("ChooseEvent", "Event")); // return View(db.Events.ToList()); }
public IActionResult GroupEvent(GEvent model, string returnUrl = null) { if (ModelState.IsValid) { var GroupList = (from us in db.Users join sc in db.StudentCourses on us.Id equals sc.ApplicationUser.Id where sc.GroupNumber == model.GroupNumber && sc.CourseId == model.CourseId select us).ToList(); EventModel EM = new EventModel { Date = model.Date, Time = model.Time, Location = model.Location, NumberOfSeats = GroupList.Count, OccupiedSeats = GroupList.Count, Title = model.Title, Description = model.Description }; db.Events.Add(EM); foreach (var item in GroupList) { StudentEvent scs = new StudentEvent(); scs.EventId = EM.EventId; scs.ApplicationUser = item; db.StudentEvents.Add(scs); } db.SaveChanges(); ScheduleEmail send = new ScheduleEmail(db); send.getEvent(); TempData["Message"] = "Group created successfully!"; } else { TempData["Message"] = "Group created failed!"; } return(RedirectToAction("ChooseEvent", "Event")); }
static void AlertProbation(string connection, string database, string debug) { #region Connection, Setting & Filter MongoDBContext.ConnectionString = connection; MongoDBContext.DatabaseName = database; MongoDBContext.IsSSL = true; MongoDBContext dbContext = new MongoDBContext(); var url = Constants.System.domain; var now = DateTime.Now; #endregion var listAlert = dbContext.Employees.Find(m => m.Enable.Equals(true) && m.Leave.Equals(false) && m.Official.Equals(false)).ToEnumerable() .Where(m => m.ProbationAlert == 0).ToList(); #region Tos var tos = new List <EmailAddress>(); var listHrRoles = dbContext.RoleUsers.Find(m => m.Role.Equals(Constants.Rights.HR) && (m.Expired.Equals(null) || m.Expired > DateTime.Now)).ToList(); if (listHrRoles != null && listHrRoles.Count > 0) { foreach (var item in listHrRoles) { if (item.Action == 3) { var fields = Builders <Employee> .Projection.Include(p => p.Email).Include(p => p.FullName); var emailEntity = dbContext.Employees.Find(m => m.Id.Equals(item.User)).Project <Employee>(fields).FirstOrDefault(); if (emailEntity != null) { tos.Add(new EmailAddress { Name = emailEntity.FullName, Address = emailEntity.Email }); } } } } #endregion if (listAlert.Count > 0) { foreach (var item in listAlert) { if (item != null) { var typeEmail = "probation-alert"; var subject = "[THỬ VIỆC] THÔNG BÁO ĐẾN HẠN XÉT LÀM VIỆC CHÍNH THỨC !!!"; var phone = string.Empty; if (item.Mobiles != null && item.Mobiles.Count > 0) { foreach (var mobile in item.Mobiles) { if (!string.IsNullOrEmpty(mobile.Number)) { phone += "<a href='tel:" + mobile.Number + "'>" + mobile.Number + "</a>"; } } } var linkInformation = Constants.LinkHr.Main + "/" + Constants.LinkHr.Human + "/" + Constants.LinkHr.Information + "/" + item.Id; var pathToFile = @"C:\Projects\App.Schedule\Templates\ProbationAlert.html"; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, item.FullName, item.ChucVuName, item.PhongBanName, item.BoPhanName, item.Joinday.ToString("dd/MM/yyyy"), item.ProbationMonth, phone, item.Email, url + "/" + linkInformation, url); var emailMessage = new EmailMessage() { ToAddresses = tos, Subject = subject, BodyContent = messageBody, Type = typeEmail, EmployeeId = item.Id }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); } } } }
static void Main(string[] args) { #region Connection //var connectString = "mongodb://192.168.2.223:27017"; var connection = ConfigurationSettings.AppSettings.Get("connection").ToString(); var database = ConfigurationSettings.AppSettings.Get("database").ToString(); MongoDBContext.ConnectionString = connection; MongoDBContext.DatabaseName = database; MongoDBContext.IsSSL = true; MongoDBContext dbContext = new MongoDBContext(); #endregion var now = DateTime.Now; var url = Constants.System.domain; var froms = new List <EmailAddress> { new EmailAddress { Name = Constants.System.emailHrName, Address = Constants.System.emailHr, Pwd = Constants.System.emailHrPwd } }; #region CCs #endregion var ccs = new List <EmailAddress>(); var listHrRoles = dbContext.RoleUsers.Find(m => m.Role.Equals(Constants.Rights.NhanSu) && (m.Expired.Equals(null) || m.Expired > DateTime.Now)).ToList(); if (listHrRoles != null && listHrRoles.Count > 0) { foreach (var item in listHrRoles) { if (item.Action == 3) { var fields = Builders <Employee> .Projection.Include(p => p.Email).Include(p => p.FullName); var emailEntity = dbContext.Employees.Find(m => m.Id.Equals(item.User)).Project <Employee>(fields).FirstOrDefault(); if (emailEntity != null) { ccs.Add(new EmailAddress { Name = emailEntity.FullName, Address = emailEntity.Email }); } } } } var birthdays = dbContext.Employees.Find(m => m.Enable.Equals(true) && m.Leave.Equals(false) && m.Birthday > Constants.MinDate).ToEnumerable() .Where(m => m.RemainingBirthDays == 0).ToList(); if (birthdays.Count > 0) { foreach (var item in birthdays) { if (item != null && !string.IsNullOrEmpty(item.Email)) { Console.WriteLine(item.Email); var subject = "CHÚC MỪNG SINH NHẬT !!!"; var title = string.Empty; if (!string.IsNullOrEmpty(item.Gender)) { title = item.Gender == "Nam" ? "anh" : "chị"; if (item.AgeBirthday > 50) { title = item.Gender == "Nam" ? "ông" : "bà"; } } var fullName = item.FullName; var tos = new List <EmailAddress> { new EmailAddress { Name = item.FullName, Address = item.Email } }; //C:\Projects\App.Schedule\BirthdaySchedule\Templates var pathToFile = @"C:\Projects\App.Schedule\Templates\HappyBirthday.html"; // Must be fullpath. because task schedule un known path. // var pathToFile = @"C:\Projects\Tribat\sourcecode\xbirthday\bin\Debug\Templates\HappyBirthday.html"; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, title, fullName, url); var emailMessage = new EmailMessage() { FromAddresses = froms, ToAddresses = tos, CCAddresses = ccs, Subject = subject, BodyContent = messageBody, Type = "birthday", EmployeeId = item.EmployeeId }; // For faster update. var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); //new AuthMessageSender().SendEmail(emailMessage); } } } }
public IActionResult TangCaNhanVien(int code, int approve, string secure) { var viewModel = new TimeKeeperViewModel { Approve = approve }; #region Extensions var builderTraining = Builders <Trainning> .Filter; var filterTraining = builderTraining.Eq(m => m.Enable, true); filterTraining = filterTraining & builderTraining.Eq(m => m.Type, "anh-van"); var listTraining = dbContext.Trainnings.Find(filterTraining).Limit(10).SortByDescending(m => m.CreatedOn).ToList(); viewModel.ListTraining = listTraining; #endregion var list = dbContext.OvertimeEmployees.Find(m => m.Code.Equals(code) && m.Secure.Equals(secure)).ToList(); if (list != null && list.Count > 0) { var filter = Builders <OvertimeEmployee> .Filter.Eq(m => m.CodeInt, code) & Builders <OvertimeEmployee> .Filter.Eq(m => m.Secure, secure); var update = Builders <OvertimeEmployee> .Update .Set(m => m.Secure, DateTime.Now.ToString("yyyyMMddHHmmssfff")) .Set(m => m.Status, approve) .Set(m => m.ApprovedOn, DateTime.Now); dbContext.OvertimeEmployees.UpdateMany(filter, update); #region Send mail AN NINH if (approve == (int)EOvertime.Ok) { #region parameters //{0} : Subject //{1} : Gender Nguoi nhan //{2} : Fullname nguoi nhan //{3} : Gender nguoi yeu cau //{4} : Fullname nguoi yeu cau //{5} : Chức vụ //{6} : Email //{7} : Phone //{8} : Noi dung . Example: bang tang ca ngày dd/MM/yyyy //{9}: Link chi tiet //{10}: Website #endregion var overtime = list.First(); var date = overtime.Date; var directorE = dbContext.Employees.Find(m => m.Id.Equals(overtime.ApprovedBy)).FirstOrDefault(); var securityPosition = dbContext.ChucVus.Find(m => m.Code.Equals("CHUCVU86")).FirstOrDefault(); var securityE = dbContext.Employees.Find(m => m.Enable.Equals(true) && m.Leave.Equals(false) && m.ChucVu.Equals(securityPosition.Id)).FirstOrDefault(); var genderDE = directorE.Gender == "Nam" ? "Anh" : "Chị"; var genderDELower = directorE.Gender == "Nam" ? "anh" : "chị"; var genderSE = securityE.Gender == "Nam" ? "anh" : "chị"; var phone = string.Empty; if (directorE.Mobiles != null && directorE.Mobiles.Count > 0) { phone = directorE.Mobiles[0].Number; } var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "OvertimeSecurity.html"; var tos = new List <EmailAddress> { new EmailAddress { Name = securityE.FullName, Address = securityE.Email } }; var subject = "Kiểm tra Bảng tăng ca ngày " + date.ToString("dd/MM/yyyy"); var title = "Bảng tăng ca ngày " + date.ToString("dd/MM/yyyy"); var linkDetail = Constants.System.domain + "/" + Constants.LinkTimeKeeper.Main + "/" + Constants.LinkTimeKeeper.Overtime + "?Tu=" + date.ToString("MM-dd-yyyy") + "&Den=" + date.ToString("MM-dd-yyyy"); var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, genderSE, securityE.FullName, genderDE, directorE.FullName, directorE.ChucVuName, genderDELower, directorE.Email, phone, title, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, Subject = subject, BodyContent = messageBody, Type = "overtime-security", EmployeeId = overtime.Code.ToString() }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); } #endregion ViewData["Status"] = "Cám ơn đã xác nhận, kết quả đang gửi cho người liên quan."; return(View(viewModel)); } ViewData["Status"] = Constants.ErrorParameter; viewModel.Error = true; return(View(viewModel)); }
public IActionResult Phep(string id, int approve, string secure) { var viewModel = new LeaveViewModel { Approve = approve }; var leave = dbContext.Leaves.Find(m => m.Id.Equals(id)).FirstOrDefault(); #region Extensions: Trainning var builderTraining = Builders <Trainning> .Filter; var filterTraining = builderTraining.Eq(m => m.Enable, true); filterTraining &= builderTraining.Eq(m => m.Type, "anh-van"); var listTraining = dbContext.Trainnings.Find(filterTraining).Limit(10).SortByDescending(m => m.CreatedOn).ToList(); viewModel.ListTraining = listTraining; #endregion if (leave == null || (leave.SecureCode != secure && leave.Status != 0)) { ViewData["Status"] = Constants.ErrorParameter; viewModel.Error = true; return(View(viewModel)); } viewModel.Leave = leave; #region Update status var filter = Builders <Leave> .Filter.Eq(m => m.Id, id); var update = Builders <Leave> .Update .Set(m => m.SecureCode, Helper.HashedPassword(Guid.NewGuid().ToString("N").Substring(0, 12))) .Set(m => m.Status, approve) .Set(m => m.ApprovedBy, leave.ApproverId); dbContext.Leaves.UpdateOne(filter, update); #endregion #region update Leave Date if CANCEL if (approve == 2) { #region QUAN LY LOAI PHEP, BU, NGHI KO TINH LUONG,... var typeLeave = dbContext.LeaveTypes.Find(m => m.Id.Equals(leave.TypeId)).FirstOrDefault(); // Nghi phep if (typeLeave.Alias == "phep-nam") { var builderLeaveEmployee = Builders <LeaveEmployee> .Filter; var filterLeaveEmployee = builderLeaveEmployee.Eq(m => m.EmployeeId, leave.EmployeeId) & builderLeaveEmployee.Eq(x => x.LeaveTypeId, leave.TypeId); var updateLeaveEmployee = Builders <LeaveEmployee> .Update.Inc(m => m.Number, leave.Number); dbContext.LeaveEmployees.UpdateOne(filterLeaveEmployee, updateLeaveEmployee); } // Phep khac,... #endregion } #endregion #region Send email to user leave, cc: người duyệt var approvement = dbContext.Employees.Find(m => m.Id.Equals(leave.ApproverId)).FirstOrDefault(); // Tự yêu cầu bool seftFlag = leave.EmployeeId == leave.CreatedBy ? true : false; var employee = dbContext.Employees.Find(m => m.Id.Equals(leave.EmployeeId)).FirstOrDefault(); var userCreate = employee; if (!seftFlag) { userCreate = dbContext.Employees.Find(m => m.Id.Equals(leave.CreatedBy)).FirstOrDefault(); } var requester = employee.FullName; var tos = new List <EmailAddress> { new EmailAddress { Name = employee.FullName, Address = employee.Email } }; if (approve == (int)EStatusLeave.Accept) { var hrs = Utility.EmailGet(Constants.Rights.NhanSu, (int)ERights.Edit); if (hrs != null && hrs.Count > 0) { requester += " , HR"; foreach (var item in hrs) { if (tos.Count(m => m.Address.Equals(item.Address)) == 0) { tos.Add(item); } } } } // cc người tạo dùm var ccs = new List <EmailAddress>(); if (!seftFlag) { ccs.Add(new EmailAddress { Name = userCreate.FullName, Address = userCreate.Email }); } // cc người duyệt ccs.Add(new EmailAddress { Name = approvement.FullName, Address = approvement.Email }); var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "LeaveApprove.html"; var status = approve == 1 ? "Đồng ý" : "Không đồng ý"; var dateRequest = leave.From.ToString("dd/MM/yyyy HH:mm") + " - " + leave.To.ToString("dd/MM/yyyy HH:mm"); var subject = "[Nghỉ phép] Kết quả duyệt: " + status + " - ngày " + dateRequest; var countLeaveDay = " (" + leave.Number + " ngày)"; var linkDetail = Constants.System.domain + "/" + Constants.LinkLeave.Main + "/" + Constants.LinkLeave.Index; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, requester, status, approvement.FullName, approvement.Email, approvement.ChucVuName, dateRequest + countLeaveDay, leave.Reason, leave.TypeName, leave.Phone, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, CCAddresses = ccs, Subject = subject, BodyContent = messageBody, Type = "leave-confirm", EmployeeId = leave.EmployeeId }; // For faster. Add to schedule. // Send later var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, //From = emailMessage.FromAddresses, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); //_emailSender.SendEmail(emailMessage); #endregion ViewData["Status"] = "Cám ơn đã xác nhận, kết quả đang gửi cho người liên quan."; return(View(viewModel)); }
public IActionResult Cong(string id, int approve, string secure) { var viewModel = new TimeKeeperViewModel { Approve = approve }; #region Extensions: Trainning var builderTraining = Builders <Trainning> .Filter; var filterTraining = builderTraining.Eq(m => m.Enable, true); filterTraining &= builderTraining.Eq(m => m.Type, "anh-van"); var listTraining = dbContext.Trainnings.Find(filterTraining).Limit(10).SortByDescending(m => m.CreatedOn).ToList(); viewModel.ListTraining = listTraining; #endregion var timelog = dbContext.EmployeeWorkTimeLogs.Find(m => m.Id.Equals(id)).FirstOrDefault(); if (timelog == null || (timelog.SecureCode != secure && timelog.Status != 2)) { ViewData["Status"] = Constants.ErrorParameter; viewModel.Error = true; return(View(viewModel)); } viewModel.EmployeeWorkTimeLog = timelog; #region Update status var filter = Builders <EmployeeWorkTimeLog> .Filter.Eq(m => m.Id, id); var update = Builders <EmployeeWorkTimeLog> .Update .Set(m => m.SecureCode, Helper.HashedPassword(Guid.NewGuid().ToString("N").Substring(0, 12))) .Set(m => m.WorkDay, 1) .Set(m => m.Status, approve) .Set(m => m.ConfirmDate, DateTime.Now.Date); dbContext.EmployeeWorkTimeLogs.UpdateOne(filter, update); #endregion #region update Summary if (approve == (int)EStatusWork.DongY) { var monthDate = Utility.EndWorkingMonthByDate(timelog.Date); var builderUpdateSum = Builders <EmployeeWorkTimeMonthLog> .Filter; var filterUpdateSum = builderUpdateSum.Eq(m => m.EmployeeId, timelog.EmployeeId); filterUpdateSum &= builderUpdateSum.Eq(m => m.Year, monthDate.Year); filterUpdateSum &= builderUpdateSum.Eq(m => m.Month, monthDate.Month); double dateInc = 0; double worktimeInc = 0; double lateInc = 0; double earlyInc = 0; if (!timelog.In.HasValue && !timelog.Out.HasValue) { dateInc += 1; worktimeInc += new TimeSpan(8, 0, 0).TotalMilliseconds; } else if (!timelog.In.HasValue || !timelog.Out.HasValue) { dateInc += 0.5; worktimeInc += new TimeSpan(4, 0, 0).TotalMilliseconds; } if (timelog.Late.TotalMilliseconds > 0) { worktimeInc += timelog.Late.TotalMilliseconds; lateInc += timelog.Late.TotalMilliseconds; } if (timelog.Early.TotalMilliseconds > 0) { worktimeInc += timelog.Early.TotalMilliseconds; earlyInc += timelog.Early.TotalMilliseconds; } var updateSum = Builders <EmployeeWorkTimeMonthLog> .Update .Inc(m => m.Workday, dateInc) .Inc(m => m.WorkTime, worktimeInc) .Inc(m => m.Late, -(lateInc)) .Inc(m => m.Early, -(earlyInc)) .Set(m => m.LastUpdated, DateTime.Now); dbContext.EmployeeWorkTimeMonthLogs.UpdateOne(filterUpdateSum, updateSum); } #endregion #region Send email to user var approvement = dbContext.Employees.Find(m => m.Id.Equals(timelog.ConfirmId)).FirstOrDefault(); var employee = dbContext.Employees.Find(m => m.Id.Equals(timelog.EmployeeId)).FirstOrDefault(); var requester = employee.FullName; var tos = new List <EmailAddress> { new EmailAddress { Name = employee.FullName, Address = employee.Email } }; if (approve == (int)EStatusWork.DongY) { var hrs = Utility.EmailGet(Constants.Rights.NhanSu, (int)ERights.Edit); if (hrs != null && hrs.Count > 0) { requester += " , HR"; foreach (var item in hrs) { if (tos.Count(m => m.Address.Equals(item.Address)) == 0) { tos.Add(item); } } } } var ccs = new List <EmailAddress>(); var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "TimeKeeperConfirm.html"; var subject = "Xác nhận công."; var status = approve == 3 ? "Đồng ý" : "Không duyệt"; var inTime = timelog.In.HasValue ? timelog.In.Value.ToString(@"hh\:mm") : string.Empty; var outTime = timelog.Out.HasValue ? timelog.Out.Value.ToString(@"hh\:mm") : string.Empty; var lateTime = timelog.Late.TotalMilliseconds > 0 ? Math.Round(timelog.Late.TotalMinutes, 0).ToString() : "0"; var earlyTime = timelog.Early.TotalMilliseconds > 0 ? Math.Round(timelog.Early.TotalMinutes, 0).ToString() : "0"; var sumTime = string.Empty; if (string.IsNullOrEmpty(inTime) && string.IsNullOrEmpty(outTime)) { sumTime = "1 ngày"; } else if (string.IsNullOrEmpty(inTime) || string.IsNullOrEmpty(outTime)) { sumTime = "0.5 ngày"; } var minutesMissing = TimeSpan.FromMilliseconds(timelog.Late.TotalMilliseconds + timelog.Early.TotalMilliseconds).TotalMinutes; if (minutesMissing > 0) { if (!string.IsNullOrEmpty(sumTime)) { sumTime += ", "; } sumTime += Math.Round(minutesMissing, 0) + " phút"; } var detailTimeKeeping = "Ngày: " + timelog.Date.ToString("dd/MM/yyyy") + "; thiếu: " + sumTime; if (!string.IsNullOrEmpty(inTime)) { detailTimeKeeping += " | giờ vào: " + inTime + "; trễ: " + lateTime; } else { detailTimeKeeping += " | giờ vào: --; trễ: --"; } if (!string.IsNullOrEmpty(outTime)) { detailTimeKeeping += "; giờ ra: " + outTime + "; sớm: " + earlyTime; } else { detailTimeKeeping += "; giờ ra: --; sớm: --"; } // Api update, generate code. var linkDetail = Constants.System.domain; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, requester, status, approvement.FullName, approvement.Email, approvement.ChucVuName, detailTimeKeeping, timelog.Reason, timelog.ReasonDetail, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, CCAddresses = ccs, Subject = subject, BodyContent = messageBody, Type = "xac-nhan-cong", EmployeeId = timelog.EmployeeId }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); #endregion ViewData["Status"] = "Cám ơn đã xác nhận, kết quả đang gửi cho người liên quan."; return(View(viewModel)); }
/// <summary> /// Mailkit NOT WORKING ON 08.03.2019 /// </summary> /// <param name="emailMessage"></param> public void SendEmailWithMailKit(EmailMessage emailMessage) { var message = new MimeMessage { Subject = emailMessage.Subject, Body = new TextPart(TextFormat.Html) { Text = emailMessage.BodyContent } }; // Sometime null from, set default if (emailMessage.FromAddresses == null || emailMessage.FromAddresses.Count == 0) { emailMessage.FromAddresses = new List <EmailAddress> { new EmailAddress { Name = Constants.System.emailHrName, Address = Constants.System.emailHr, Pwd = Constants.System.emailHrPwd } }; } message.From.AddRange(emailMessage.FromAddresses.Select(x => new MailboxAddress(x.Name, x.Address))); // Check toemail var newToList = new List <EmailAddress>(); if (emailMessage.ToAddresses != null && emailMessage.ToAddresses.Count > 0) { foreach (var item in emailMessage.ToAddresses) { if (Utility.IsValidEmail(item.Address)) { newToList.Add(item); } else { // Chỉ gửi cho email sai var toError = new List <EmailAddress> { item }; var errorEmail = new ScheduleEmail { From = emailMessage.FromAddresses, To = toError, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, Status = (int)EEmailStatus.Fail, Error = "Sai định dạng mail", ErrorCount = 0 }; _dbContext.ScheduleEmails.InsertOne(errorEmail); SendMailSupport(errorEmail.Id); } } } if (newToList != null && newToList.Count > 0) { message.To.AddRange(newToList.Select(x => new MailboxAddress(x.Name, x.Address))); if (emailMessage.CCAddresses != null && emailMessage.CCAddresses.Count > 0) { message.Cc.AddRange(emailMessage.CCAddresses.Select(x => new MailboxAddress(x.Name, x.Address))); } if (emailMessage.BCCAddresses != null && emailMessage.BCCAddresses.Count > 0) { message.Bcc.AddRange(emailMessage.BCCAddresses.Select(x => new MailboxAddress(x.Name, x.Address))); } #region Add to schedule var scheduleEmail = new ScheduleEmail { From = emailMessage.FromAddresses, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = message.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; _dbContext.ScheduleEmails.InsertOne(scheduleEmail); #endregion var isEmailSent = (int)EEmailStatus.Send; var error = string.Empty; try { using (var emailClient = new MailKit.Net.Smtp.SmtpClient()) { //The last parameter here is to use SSL (Which you should!) emailClient.Connect(emailMessage.FromAddresses.First().Address, 465, true); //Remove any OAuth functionality as we won't be using it. emailClient.AuthenticationMechanisms.Remove("XOAUTH2"); emailClient.Authenticate(emailMessage.FromAddresses.First().Address, emailMessage.FromAddresses.First().Pwd); emailClient.Send(message); isEmailSent = (int)EEmailStatus.Ok; emailClient.Disconnect(true); #region Update status var filter = Builders <ScheduleEmail> .Filter.Eq(m => m.Id, scheduleEmail.Id); var update = Builders <ScheduleEmail> .Update .Set(m => m.Status, isEmailSent) .Set(m => m.UpdatedOn, DateTime.Now); _dbContext.ScheduleEmails.UpdateOne(filter, update); #endregion } } catch (Exception ex) { isEmailSent = (int)EEmailStatus.Fail; error = ex.Message; #region Update status var filter = Builders <ScheduleEmail> .Filter.Eq(m => m.Id, scheduleEmail.Id); var update = Builders <ScheduleEmail> .Update .Set(m => m.Status, isEmailSent) .Set(m => m.Error, error) .Inc(m => m.ErrorCount, 1) .Set(m => m.UpdatedOn, DateTime.Now); _dbContext.ScheduleEmails.UpdateOne(filter, update); #endregion SendMailSupport(scheduleEmail.Id); } } }
public void SendEmail(EmailMessage emailMessage) { MailMessage mail = new MailMessage { From = new MailAddress(_emailApp, _emailAppShow) }; var newToList = new List <EmailAddress>(); if (emailMessage.ToAddresses != null && emailMessage.ToAddresses.Count > 0) { foreach (var item in emailMessage.ToAddresses) { if (Utility.IsValidEmail(item.Address)) { newToList.Add(item); } else { var toError = new List <EmailAddress> { item }; var errorEmail = new ScheduleEmail { From = emailMessage.FromAddresses, To = toError, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, Status = (int)EEmailStatus.Fail, Error = "Sai định dạng mail", ErrorCount = 0, EmployeeId = emailMessage.EmployeeId }; _dbContext.ScheduleEmails.InsertOne(errorEmail); SendMailSupport(errorEmail.Id); } } } if (newToList != null && newToList.Count > 0) { foreach (var to in emailMessage.ToAddresses) { mail.To.Add(new MailAddress(to.Address, to.Name)); } if (emailMessage.CCAddresses != null && emailMessage.CCAddresses.Count > 0) { foreach (var cc in emailMessage.CCAddresses) { mail.CC.Add(new MailAddress(cc.Address, cc.Name)); } } if (emailMessage.BCCAddresses != null && emailMessage.BCCAddresses.Count > 0) { foreach (var bcc in emailMessage.BCCAddresses) { mail.Bcc.Add(new MailAddress(bcc.Address, bcc.Name)); } } #region Add to schedule var scheduleEmail = new ScheduleEmail { From = emailMessage.FromAddresses, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; _dbContext.ScheduleEmails.InsertOne(scheduleEmail); #endregion var isEmailSent = (int)EEmailStatus.Send; var error = string.Empty; try { var client = new System.Net.Mail.SmtpClient(_emailServer) { Port = 587, //465 timeout UseDefaultCredentials = true, Credentials = new NetworkCredential(_emailApp, _emailAppPwd) }; mail.Subject = emailMessage.Subject; mail.IsBodyHtml = true; mail.BodyEncoding = Encoding.UTF8; mail.Body = emailMessage.BodyContent; client.Send(mail); #region Update status var filter = Builders <ScheduleEmail> .Filter.Eq(m => m.Id, scheduleEmail.Id); var update = Builders <ScheduleEmail> .Update .Set(m => m.Status, isEmailSent) .Set(m => m.UpdatedOn, DateTime.Now); _dbContext.ScheduleEmails.UpdateOne(filter, update); #endregion } catch (Exception ex) { isEmailSent = (int)EEmailStatus.Fail; error = ex.Message; #region Update status var filter = Builders <ScheduleEmail> .Filter.Eq(m => m.Id, scheduleEmail.Id); var update = Builders <ScheduleEmail> .Update .Set(m => m.Status, isEmailSent) .Set(m => m.Error, error) .Inc(m => m.ErrorCount, 1) .Set(m => m.UpdatedOn, DateTime.Now); _dbContext.ScheduleEmails.UpdateOne(filter, update); #endregion SendMailSupport(scheduleEmail.Id); } } }
static void SendMailBHXH(string connection, string database, int month) { #region Connection, Setting & Filter MongoDBContext.ConnectionString = connection; MongoDBContext.DatabaseName = database; MongoDBContext.IsSSL = true; MongoDBContext dbContext = new MongoDBContext(); var url = Constants.System.domain; var now = DateTime.Now; #endregion var froms = new List <EmailAddress> { new EmailAddress { Name = Constants.System.emailHrName, Address = Constants.System.emailHr, Pwd = Constants.System.emailHrPwd } }; #region Tos var tos = new List <EmailAddress>(); var listHrRoles = dbContext.RoleUsers.Find(m => m.Role.Equals(Constants.Rights.NhanSu) && (m.Expired.Equals(null) || m.Expired > DateTime.Now)).ToList(); if (listHrRoles != null && listHrRoles.Count > 0) { foreach (var item in listHrRoles) { if (item.Action == 3) { var fields = Builders <Employee> .Projection.Include(p => p.Email).Include(p => p.FullName); var emailEntity = dbContext.Employees.Find(m => m.Id.Equals(item.User)).Project <Employee>(fields).FirstOrDefault(); if (emailEntity != null) { tos.Add(new EmailAddress { Name = emailEntity.FullName, Address = emailEntity.Email }); } } } } #endregion // Notice bhxh base joinday to 6 months. var bhxhs = dbContext.Employees.Find(m => m.Enable.Equals(true) && m.Leave.Equals(false)).ToEnumerable() .Where(m => m.RemainingBhxh == 0).ToList(); if (bhxhs.Count > 0) { foreach (var item in bhxhs) { if (item != null) { var subject = "THÔNG BÁO ĐÓNG BHXH NHÂN VIÊN LÀM VIỆC 6 THÁNG !!!"; var title = string.Empty; if (!string.IsNullOrEmpty(item.Gender)) { title = item.Gender == "Nam" ? "anh" : "chị"; if (item.AgeBirthday > 50) { title = item.Gender == "Nam" ? "ông" : "bà"; } } var fullName = item.FullName; var contractDay = string.Empty; if (item.Contractday > Constants.MinDate) { contractDay = item.Contractday.ToString("dd/MM/yyyy"); } var phone = string.Empty; if (item.Mobiles != null && item.Mobiles.Count > 0) { foreach (var mobile in item.Mobiles) { if (!string.IsNullOrEmpty(mobile.Number)) { phone += "<a href='tel:" + mobile.Number + "'>" + mobile.Number + "</a>"; } } } var email = string.IsNullOrEmpty(item.Email) ? string.Empty : item.Email; var linkInformation = Constants.LinkHr.Main + "/" + Constants.LinkHr.Human + "/" + Constants.LinkHr.Information + "/" + item.Id; //var ccs = new List<EmailAddress>(); //if (!string.IsNullOrEmpty(item.Email) && Utility.IsValidEmail(item.Email)) //{ // ccs.Add(new EmailAddress { Name = item.FullName, Address = item.Email }); //} var pathToFile = @"C:\Projects\App.Schedule\Templates\AlertBhxh.html"; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, title + " " + fullName, item.ChucVuName, item.PhongBanName, item.BoPhanName, item.Joinday.ToString("dd/MM/yyyy"), contractDay, phone, email, url + "/" + linkInformation, url); var emailMessage = new EmailMessage() { FromAddresses = froms, ToAddresses = tos, Subject = subject, BodyContent = messageBody, Type = "alert-bhxh", EmployeeId = item.Id }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); } } } }
public void SendMailRegister(Employee entity) { var password = Guid.NewGuid().ToString("N").Substring(0, 12); var sysPassword = Helper.HashedPassword(password); var filterUpdate = Builders <Employee> .Filter.Eq(m => m.Id, entity.Id); var update = Builders <Employee> .Update .Set(m => m.Password, sysPassword); dbContext.Employees.UpdateOne(filterUpdate, update); var title = string.Empty; if (!string.IsNullOrEmpty(entity.Gender)) { if (entity.AgeBirthday > 50) { title = entity.Gender == "Nam" ? "anh" : "chị"; } } var url = Constants.System.domain; var subject = "Thông tin đăng nhập hệ thống."; var tos = new List <EmailAddress> { new EmailAddress { Name = entity.FullName, Address = entity.Email } }; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "Confirm_Account_Registration.html"; var builder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { builder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(builder.HtmlBody, subject, title + " " + entity.FullName, url, entity.UserName, password, entity.Email); var emailMessage = new EmailMessage() { ToAddresses = tos, Subject = subject, BodyContent = messageBody, Type = "thong-tin-dang-nhap" }; // For faster update. var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); //_emailSender.SendEmail(emailMessage); }
public IActionResult ApprovePost(string id, int approve, string secure) { var viewModel = new LeaveViewModel { Approve = approve }; var leave = dbContext.Leaves.Find(m => m.Id.Equals(id)).FirstOrDefault(); #region Extensions var builderTraining = Builders <Trainning> .Filter; var filterTraining = builderTraining.Eq(m => m.Enable, true); filterTraining = filterTraining & builderTraining.Eq(m => m.Type, "anh-van"); var listTraining = dbContext.Trainnings.Find(filterTraining).Limit(10).SortByDescending(m => m.CreatedOn).ToList(); viewModel.ListTraining = listTraining; #endregion if (leave == null) { ViewData["Status"] = Constants.ErrorParameter; return(View(viewModel)); } if (leave.SecureCode != secure && leave.Status != 0) { return(Json(new { result = true, message = Constants.ErrorParameter })); } viewModel.Leave = leave; #region Update status var filter = Builders <Leave> .Filter.Eq(m => m.Id, id); var update = Builders <Leave> .Update .Set(m => m.SecureCode, Helper.HashedPassword(Guid.NewGuid().ToString("N").Substring(0, 12))) .Set(m => m.Status, approve) .Set(m => m.ApprovedBy, leave.ApproverId); dbContext.Leaves.UpdateOne(filter, update); #endregion #region update Leave Date if CANCEL if (approve == (int)StatusLeave.Cancel) { #region QUAN LY LOAI PHEP, BU, NGHI KO TINH LUONG,... var typeLeave = dbContext.LeaveTypes.Find(m => m.Id.Equals(leave.TypeId)).FirstOrDefault(); // Nghi phep if (typeLeave.Alias == "phep-nam") { var builderLeaveEmployee = Builders <LeaveEmployee> .Filter; var filterLeaveEmployee = builderLeaveEmployee.Eq(m => m.EmployeeId, leave.EmployeeId) & builderLeaveEmployee.Eq(x => x.LeaveTypeId, leave.TypeId); var updateLeaveEmployee = Builders <LeaveEmployee> .Update.Inc(m => m.Number, leave.Number); dbContext.LeaveEmployees.UpdateOne(filterLeaveEmployee, updateLeaveEmployee); } // Phep khac,... #endregion } #endregion var approvement = dbContext.Employees.Find(m => m.Id.Equals(leave.ApproverId)).FirstOrDefault(); // Tự yêu cầu bool seftFlag = leave.EmployeeId == leave.CreatedBy ? true : false; var employee = dbContext.Employees.Find(m => m.Id.Equals(leave.EmployeeId)).FirstOrDefault(); var userCreate = employee; if (!seftFlag) { userCreate = dbContext.Employees.Find(m => m.Id.Equals(leave.CreatedBy)).FirstOrDefault(); } #region Send email to user leave var requester = employee.FullName; var tos = new List <EmailAddress>(); var ccs = new List <EmailAddress>(); tos.Add(new EmailAddress { Name = employee.FullName, Address = employee.Email }); // Send mail to HR: if approve = 1; if (approve == 1) { var listHrRoles = dbContext.RoleUsers.Find(m => m.Role.Equals(Constants.Rights.NhanSu) && (m.Expired.Equals(null) || m.Expired > DateTime.Now)).ToList(); if (listHrRoles != null && listHrRoles.Count > 0) { foreach (var item in listHrRoles) { if (item.Action == 3) { var fields = Builders <Employee> .Projection.Include(p => p.Email).Include(p => p.FullName); var emailEntity = dbContext.Employees.Find(m => m.Id.Equals(item.User) && m.Enable.Equals(true) && m.Leave.Equals(false)).Project <Employee>(fields).FirstOrDefault(); if (emailEntity != null) { tos.Add(new EmailAddress { Name = emailEntity.FullName, Address = emailEntity.Email }); } } } } requester += " , HR"; } // cc người tạo dùm if (!seftFlag) { ccs.Add(new EmailAddress { Name = userCreate.FullName, Address = userCreate.Email }); } // cc người duyệt ccs.Add(new EmailAddress { Name = approvement.FullName, Address = approvement.Email }); var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "LeaveApprove.html"; #region parameters //{0} : Subject //{1} : Nguoi gui yeu cau - Nguoi tao yeu cau (dùm) //{2} : Tình trạng (đồng ý/hủy) //{3} : Nguoi duyet //{4} : Email //{5} : Chức vụ //{6} : Date (từ, đến, số ngày) //{7} : Lý do //{8} : Loại phép //{9} : Số điện thoại liên hệ //{10}: Link chi tiết //{11}: Website #endregion var status = approve == 1 ? "Đồng ý" : "Không đồng ý"; var dateRequest = leave.From.ToString("dd/MM/yyyy HH:mm") + " - " + leave.To.ToString("dd/MM/yyyy HH:mm"); var subject = "[Nghỉ phép] Kết quả duyệt: " + status + " - ngày " + dateRequest; var countLeaveDay = " (" + leave.Number + " ngày)"; var linkDetail = Constants.System.domain + "/" + Constants.LinkLeave.Main + "/" + Constants.LinkLeave.Index; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, requester, status, approvement.FullName, approvement.Email, approvement.ChucVuName, dateRequest + countLeaveDay, leave.Reason, leave.TypeName, leave.Phone, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, CCAddresses = ccs, Subject = subject, BodyContent = messageBody, Type = "leave-confirm", EmployeeId = leave.EmployeeId }; // For faster. Add to schedule. // Send later var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); #endregion return(Json(new { result = true, message = "Cám ơn đã xác nhận, kết quả đang gửi cho người liên quan." })); }
public async Task <IActionResult> Create(LeaveViewModel viewModel) { #region Authorization LoginInit(string.Empty, (int)ERights.View); if (!(bool)ViewData[Constants.ActionViews.IsLogin]) { await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); return(RedirectToAction(Constants.ActionViews.Login, Constants.Controllers.Account)); } var loginId = User.Identity.Name; var loginE = dbContext.Employees.Find(m => m.Id.Equals(loginId)).FirstOrDefault(); #endregion double phepcon = 0; var entity = viewModel.Leave; if (string.IsNullOrEmpty(entity.EmployeeId)) { return(Json(new { result = false, message = "Lỗi: Vui lòng chọn nhân viên." })); } var isMe = entity.EmployeeId == loginId ? true : false; var account = isMe ? loginE : dbContext.Employees.Find(m => m.Id.Equals(entity.EmployeeId)).FirstOrDefault(); var approveE = new Employee(); if (isMe) { approveE = dbContext.Employees.Find(m => m.Id.Equals(entity.ApproverId)).FirstOrDefault(); if (approveE == null) { return(Json(new { result = false, message = "Lỗi: Vui lòng chọn người duyệt phép." })); } else { entity.ApproverName = approveE.FullName + " - " + approveE.ChucVuName; } } #region Fill Data var workdayStartTime = TimeSpan.Parse(entity.WorkingScheduleTime.Split("-")[0]); var workdayEndTime = TimeSpan.Parse(entity.WorkingScheduleTime.Split("-")[1]); entity.From = entity.From.Date.Add(entity.Start); entity.To = entity.To.Date.Add(entity.End); entity.Number = Utility.GetBussinessDaysBetweenTwoDates(entity.From, entity.To, workdayStartTime, workdayEndTime); #region QUAN LY LOAI PHEP, BU, NGHI KO TINH LUONG,... var typeLeave = dbContext.LeaveTypes.Find(m => m.Id.Equals(entity.TypeId)).FirstOrDefault(); if (typeLeave.SalaryPay == true) { double leaveDayAvailable = 0; // Get phép năm, bù còn var leaveEmployeePhep = dbContext.LeaveEmployees.Find(m => m.EmployeeId.Equals(entity.EmployeeId) && m.LeaveTypeId.Equals(entity.TypeId)).FirstOrDefault(); if (leaveEmployeePhep != null) { leaveDayAvailable = leaveEmployeePhep.Number; } // Nghỉ hưởng lương dc phép tạo (thai sản, cưới, sự kiện,...) if (typeLeave.Alias != "nghi-huong-luong") { if (leaveDayAvailable < entity.Number) { return(Json(new { result = false, message = typeLeave.Name + " không đủ ngày." })); } } } #endregion #region Tạo trùng ngày var builderExist = Builders <Leave> .Filter; var filterExist = builderExist.Eq(m => m.Enable, true); filterExist &= builderExist.Eq(m => m.EmployeeId, entity.EmployeeId); filterExist &= builderExist.Gte(m => m.From, entity.From); filterExist &= builderExist.Lte(m => m.To, entity.To); var exists = await dbContext.Leaves.Find(filterExist).ToListAsync(); if (exists != null && exists.Count > 0) { return(Json(new { result = false, message = "Ngày yêu cầu đã được duyệt. Xem danh sách nghỉ bên dưới. Vui lòng yêu cầu ngày khác." })); } #endregion entity.SecureCode = Helper.HashedPassword(Guid.NewGuid().ToString("N").Substring(0, 12)); entity.EmployeeName = account.FullName; entity.EmployeeDepartment = account.PhongBanName; entity.EmployeePart = account.BoPhanName; entity.EmployeeTitle = account.ChucVuName; entity.Status = (int)StatusLeave.New; entity.CreatedBy = loginE.Id; entity.UpdatedBy = loginE.Id; if (!isMe) { entity.Status = (int)StatusLeave.Accept; entity.ApproverId = loginE.Id; entity.ApproverName = loginE.FullName + " - " + loginE.ChucVuName; entity.ApprovedBy = loginE.Id; } #endregion dbContext.Leaves.InsertOne(entity); #region CAP NHAT PHEP, BU, NGHI KO TINH LUONG,... if (typeLeave.SalaryPay == true) { #region update Leave Date // phep nam, bu // Nghỉ hưởng lương dc phép tạo (thai sản, cưới, sự kiện,...) if (typeLeave.Alias != "nghi-huong-luong") { var builderLeaveEmployee = Builders <LeaveEmployee> .Filter; var filterLeaveEmployee = builderLeaveEmployee.Eq(m => m.EmployeeId, entity.EmployeeId) & builderLeaveEmployee.Eq(x => x.LeaveTypeId, entity.TypeId); var updateLeaveEmployee = Builders <LeaveEmployee> .Update.Inc(m => m.Number, -entity.Number) .Inc(m => m.NumberUsed, entity.Number); dbContext.LeaveEmployees.UpdateOne(filterLeaveEmployee, updateLeaveEmployee); } #endregion phepcon = dbContext.LeaveEmployees.AsQueryable().Where(x => x.EmployeeId.Equals(entity.EmployeeId)).Sum(x => x.Number); } #endregion #region Send Mail if (isMe) { var tos = new List <EmailAddress>(); if (!string.IsNullOrEmpty(entity.ApproverId)) { tos.Add(new EmailAddress { Name = approveE.FullName, Address = approveE.Email }); } var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "LeaveRequest.html"; var subject = "Xác nhận nghỉ phép."; var requester = account.FullName; var var3 = account.FullName; var dateRequest = entity.From.ToString("dd/MM/yyyy HH:mm") + " - " + entity.To.ToString("dd/MM/yyyy HH:mm") + " (" + entity.Number + " ngày)"; // Api update, generate code. var linkapprove = Constants.System.domain + "/xacnhan/phep"; var linkAccept = linkapprove + "?id=" + entity.Id + "&approve=1&secure=" + entity.SecureCode; var linkCancel = linkapprove + "?id=" + entity.Id + "&approve=2&secure=" + entity.SecureCode; var linkDetail = Constants.System.domain; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, approveE.FullName, requester, var3, approveE.Email, account.ChucVuName, dateRequest, entity.Reason, entity.TypeName, entity.Phone, linkAccept, linkCancel, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, Subject = subject, BodyContent = messageBody, Type = "yeu-cau-nghi-phep", EmployeeId = account.Id }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); } else { // KO CÓ EMAIL,... // [To] nếu có email, người tạo var tos = new List <EmailAddress>(); if (!string.IsNullOrEmpty(account.Email)) { tos.Add(new EmailAddress { Name = account.FullName, Address = account.Email }); } tos.Add(new EmailAddress { Name = loginE.FullName, Address = loginE.Email }); var ccs = new List <EmailAddress>(); var hrs = Utility.EmailGet(Constants.Rights.NhanSu, (int)ERights.Edit); if (hrs != null && hrs.Count > 0) { foreach (var item in hrs) { if (tos.Count(m => m.Address.Equals(item.Address)) == 0) { ccs.Add(item); } } } var webRoot = Environment.CurrentDirectory; var pathToFile = _env.WebRootPath + Path.DirectorySeparatorChar.ToString() + "Templates" + Path.DirectorySeparatorChar.ToString() + "EmailTemplate" + Path.DirectorySeparatorChar.ToString() + "LeaveHelp.html"; var subject = "Thông tin nghỉ phép."; var dateRequest = entity.From.ToString("dd/MM/yyyy HH:mm") + " - " + entity.To.ToString("dd/MM/yyyy HH:mm") + " (" + entity.Number + " ngày)"; // Api update, generate code. var linkDetail = Constants.System.domain; var bodyBuilder = new BodyBuilder(); using (StreamReader SourceReader = System.IO.File.OpenText(pathToFile)) { bodyBuilder.HtmlBody = SourceReader.ReadToEnd(); } string messageBody = string.Format(bodyBuilder.HtmlBody, subject, account.FullName, loginE.FullName, dateRequest, entity.Reason, entity.TypeName, entity.Phone, linkDetail, Constants.System.domain ); var emailMessage = new EmailMessage() { ToAddresses = tos, CCAddresses = ccs, Subject = subject, BodyContent = messageBody, Type = "nghi-phep-thong-tin", EmployeeId = account.Id }; var scheduleEmail = new ScheduleEmail { Status = (int)EEmailStatus.Schedule, To = emailMessage.ToAddresses, CC = emailMessage.CCAddresses, BCC = emailMessage.BCCAddresses, Type = emailMessage.Type, Title = emailMessage.Subject, Content = emailMessage.BodyContent, EmployeeId = emailMessage.EmployeeId }; dbContext.ScheduleEmails.InsertOne(scheduleEmail); } #endregion return(Json(new { result = true, message = "Thông tin sẽ được gửi các bộ phận liên quan, thời gian tùy theo qui định của công ty và các yếu tố khách quan." })); }