public bool AssignDelegate(Employee emp, string deptid) { List <Employee> emplist = erepo.FindEmpByDept(deptid); foreach (Employee e in emplist) { if (emp.DelegateFromDate >= e.DelegateFromDate && emp.DelegateFromDate <= e.DelegateToDate) { if (emp.Id != e.Id) { throw new Exception("Conflict of delegate dates with " + e.Name + ". Please try again"); } } if (emp.DelegateToDate >= e.DelegateFromDate && emp.DelegateToDate <= e.DelegateToDate) { if (emp.Id != e.Id) { throw new Exception("Conflict of delegate dates with " + e.Name + ". Please try again"); } } } try { Employee delegateemp = erepo.AssignDelegateDate(emp); Employee depthead = erepo.FindSupervisorByEmpId(delegateemp.Id); EmailModel email = new EmailModel(); Task.Run(async() => { EmailTemplates.AssignDelTemplate adt = new EmailTemplates.AssignDelTemplate(delegateemp, depthead); email.emailTo = delegateemp.Email; email.emailSubject = adt.subject; email.emailBody = adt.body; await mailservice.SendEmailwithccallAsync(email, emplist); }); return(true); } catch (Exception e) { throw e; } }
public bool ApprovRejAdjustmentVoucher(AdjustmentVoucher av, int approvalId) { Employee emp = erepo.FindEmpById(approvalId); DateTime dateTime = DateTime.UtcNow.Date; DateTimeOffset dt = new DateTimeOffset(dateTime, TimeSpan.Zero).ToUniversalTime(); long date = dt.ToUnixTimeMilliseconds(); try { if (emp.Role == "sm") //persist to correct column based on supervisor or manager role { av.ApprovedMgrId = emp.Id; av.ApprovedMgrDate = date; //For all approvals by manager, it will jump to final state of "approved" if (av.Status != Status.AdjVoucherStatus.rejected) { av.Status = Status.AdjVoucherStatus.approved; } avrepo.ManagerUpdateAdjustmentVoucherApprovals(av); } if (emp.Role == "ss") { av.ApprovedSupId = emp.Id; av.ApprovedSupDate = date; avrepo.SupervisorUpdateAdjustmentVoucherApprovals(av); } if (av.Status == Status.AdjVoucherStatus.pendmanapprov) { AdjustmentVoucher av1 = avrepo.FindAdjustmentVoucherById(av.Id); Employee manager = erepo.FindSupervisorByEmpId(emp.Id); Employee sup = erepo.FindEmpById(emp.Id); EmailModel email = new EmailModel(); Task.Run(async() => { EmailTemplates.PendingManagerApprovalAVTemplate apt = new EmailTemplates.PendingManagerApprovalAVTemplate(av1, manager, sup); email.emailTo = manager.Email; email.emailSubject = apt.subject; email.emailBody = apt.body; await mailservice.SendEmailAsync(email); }); } else //approved or rejected { AdjustmentVoucher av1 = avrepo.FindAdjustmentVoucherById(av.Id); if (av1.Status == Status.AdjVoucherStatus.approved) //new method for auto update of stock card upon approved adjustment vouchers { UpdateStockCardForApprovedAdjustmentVoucher(av1); } Employee clerk = erepo.FindEmpById(av1.InitiatedClerkId); Employee sup = erepo.FindEmpById((int)clerk.ManagerId); Employee manager = erepo.FindEmpById((int)sup.ManagerId); List <Employee> elist = new List <Employee>(); //Regardless of approval hierarchy or who approved, as long as its in final state of approved or rejected, clerk + supervisor + manager will get email elist.Add(sup); elist.Add(manager); EmailModel email = new EmailModel(); Task.Run(async() => { EmailTemplates.ApproveRejectAVTemplate apt = new EmailTemplates.ApproveRejectAVTemplate(av1, clerk, sup); email.emailTo = clerk.Email; email.emailSubject = apt.subject; email.emailBody = apt.body; await mailservice.SendEmailwithccallAsync(email, elist); }); } return(true); } catch (Exception m) { throw m; } }