public static Boolean routeForApproval(TNF tnf) { User currentUser = null; Workflow currentWorkflow = wfDAO.getCurrentActiveWorkflow(tnf.getType()); List <User> users = new List <User>(); string tnfType = ""; Boolean gotBudget = false; //getting the type if it's individual or group if (tnf.getType().Equals("individual")) { currentUser = tnf.getUser(); tnfType = "Individual"; } else { users = tnf.getUsers(); tnfType = "Group"; } //To check budget if (tnfType.Equals("Individual")) { Department currentDept = deptDAO.getDeptByName(tnf.getUser().getDepartment()); Course currentCourse = tnfDAO.getCourseFromTNF(tnf.getTNFID()); double courseCost = currentCourse.getPrice(); gotBudget = deptDAO.checkDeptBudget(currentDept.getDeptName(), currentCourse.getPrice()); } else { //check budget for each member of group } if (gotBudget) { if (tnfType.Equals("Individual")) { return(routeIndividual(tnf)); } else { return(routeGroup(tnf)); } } else { tnfDAO.updateTNFStatus(tnf.getTNFID(), "Rejected. Department no budget."); return(false); } }
public static Boolean makeRejection(TNF tnf, User approver, Notification noti, string reason) { //check TNF status if (!tnf.getStatus().ToLower().Equals("pending")) { return(false); } Workflow currentWorkflow = tnf.getWorkflow(); Department currentDept = deptDAO.getDeptByName(tnf.getUser().getDepartment()); Course currentCourse = tnfDAO.getCourseFromTNF(tnf.getTNFID()); double courseCost = currentCourse.getPrice(); // if bond exist, reject the bond double bondCriteria = currentWorkflow.getBondCriteria(); if (currentCourse.getPrice() >= bondCriteria) { Bonds currentBond = bondDAO.getBondByTNFIDandUserID(tnf.getTNFID(), tnf.getUser().getUserID()); bondDAO.updateBondStatus(currentBond.getBondID(), "rejected"); } //Handle Notification, update status, date and reason //If its HR, reject for all HR List <User> allHR = userDAO.getAllHR(); List <Notification> allHRNotification = new List <Notification>(); foreach (User hr in allHR) { allHRNotification.Add(notificationDAO.getPendingNotificationByTnfIDandUserID(tnf.getTNFID(), hr.getUserID())); } allHRNotification = allHRNotification.Where(x => x != null).ToList(); if (allHRNotification.Count < 2) { notificationDAO.updateNotificationStatus(noti.getNotificationID(), "rejected"); notificationDAO.updateNotificationApprovedDate(noti.getNotificationID()); if (reason != null) { notificationDAO.updateNotificationRemarks(noti.getNotificationID(), reason); } } else { foreach (Notification hrNoti in allHRNotification) { notificationDAO.updateNotificationStatus(hrNoti.getNotificationID(), "rejected"); notificationDAO.updateNotificationApprovedDate(hrNoti.getNotificationID()); if (reason != null) { notificationDAO.updateNotificationRemarks(hrNoti.getNotificationID(), reason); } } } //Update TNF status tnfDAO.updateTNFStatus(tnf.getTNFID(), "rejected"); return(true); }
protected void Page_Load(object sender, EventArgs e) { if (Session["currentUser"] == null) { Response.Redirect("Login.aspx"); } else { if (!IsPostBack) { User currentUser = (User)Session["currentUser"]; TNFDAO tnfDAO = new TNFDAO(); UserDAO userDAO = new UserDAO(); int tnfID = Convert.ToInt32(Request.QueryString["tnfid"]); string applicantUserID = Request.QueryString["applicant"]; NotificationDAO notificationDAO = new NotificationDAO(); List <Notification> nList = notificationDAO.getNotificationsByTnfID(tnfID); TNF currentTNF = tnfDAO.getIndividualTNFByID(applicantUserID, tnfID); Boolean isApprover = false; for (int i = 0; i < nList.Count(); i++) { Notification n = nList[i]; if (n.getUserIDTo().Equals(currentUser.getUserID())) { isApprover = true; } } if (isApprover == false || currentTNF == null) { Response.Redirect("errorPage.aspx"); } User applicant = userDAO.getUserByID(applicantUserID); Course courseApplied = tnfDAO.getCourseFromTNF(tnfID); Lesson lessonApplied = tnfDAO.getLessonFromTNF(tnfID); TNFData tnfData = tnfDAO.getIndividualTNFDataByID(tnfID); Workflow currentWorkflow = currentTNF.getWorkflow(); int probationPeriod = currentWorkflow.getProbationPeriod(); TimeSpan ts = currentTNF.getApplicationDate().Subtract(applicant.getStartDate()); //setting user information nameOfStaffOutput.Text = applicant.getName(); employeeNumberOutput.Text = applicant.getUserID(); emailOutput.Text = applicant.getEmail(); designationOutput.Text = applicant.getJobTitle(); departmentOutput.Text = applicant.getDepartment(); //setting course and lesson information courseOutput.Text = courseApplied.getCourseName(); startDate.Text = lessonApplied.getStartDate().ToString("d MMM yyyy"); endDate.Text = lessonApplied.getEndDate().ToString("d MMM yyyy"); startTime.Text = lessonApplied.getStartTime().ToString(); endTime.Text = lessonApplied.getEndTime().ToString(); venueOutput.Text = lessonApplied.getVenue(); instructorOutput.Text = lessonApplied.getInstructor(); string internalOrExternal = courseApplied.getInternalOrExternal(); if (internalOrExternal.ToLower().Equals("internal")) { inhouse.Checked = true; external.Checked = false; lblExternal.Visible = false; externalCourseProviderOutput.Visible = false; } else { inhouse.Checked = false; external.Checked = true; lblExternal.Visible = true; externalCourseProviderOutput.Visible = true; externalCourseProviderOutput.Text = courseApplied.getCourseProvider(); } courseFeeOutput.Text = "$" + courseApplied.getPrice(); //setting tnf data information string prepareForNewJobRole = tnfData.getPrepareForNewJobRole(); if (prepareForNewJobRole.Equals("y")) { objectiveInput1.Checked = true; objectiveElaborate1.Text = tnfData.getPrepareForNewJobRoleText(); completeDateOutput1.Text = tnfData.getPrepareForNewJobRoleCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput1.Checked = false; objectiveElaborate1.Text = "-"; completeDateOutput1.Text = "-"; } string shareKnowledge = tnfData.getShareKnowledge(); if (shareKnowledge.Equals("y")) { objectiveInput2.Checked = true; objectiveElaborate2.Text = tnfData.getShareKnowledgeText(); completeDateOutput2.Text = tnfData.getShareKnowledgeCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput2.Checked = false; objectiveElaborate2.Text = "-"; completeDateOutput2.Text = "-"; } string otherObjectives = tnfData.getOtherObjectives(); if (otherObjectives.Equals("y")) { objectiveInput3.Checked = true; objectiveElaborate3.Text = tnfData.getOtherObjectivesText(); completionDateOutput3.Text = tnfData.getOtherObjectivesCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput3.Checked = false; objectiveElaborate3.Text = "-"; completionDateOutput3.Text = "-"; } } } }
public static Boolean makeApproval(TNF tnf, User user, Notification noti, string remarks) { //check TNF status if (!tnf.getStatus().ToLower().Equals("pending")) { return(false); } //check budget Department currentDept = deptDAO.getDeptByName(tnf.getUser().getDepartment()); Course currentCourse = tnfDAO.getCourseFromTNF(tnf.getTNFID()); double courseCost = currentCourse.getPrice(); Boolean gotBudget = deptDAO.checkDeptBudget(currentDept.getDeptName(), currentCourse.getPrice()); int nextWFLevel = 0; if (!gotBudget) { return(false); } //check if approver is last in chain Boolean isLastApprover = false; Workflow currentWorkflow = tnf.getWorkflow(); WorkflowSub currentWFS = tnf.getWorkflowSub(); WorkflowApprover nextApprover = new WorkflowApprover(); WorkflowApprover lastApprover = wfaDAO.getLastApproverInChain(currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); List <WorkflowApprover> approvers = wfaDAO.getSortedWorkflowApprovers(currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); if (user.getJobCategory().Contains(lastApprover.getJobCategory())) { isLastApprover = true; } else if (lastApprover.getJobCategory().Equals("superior")) { User currentTNFUser = tnf.getUser(); if (currentTNFUser.getSupervisor().Equals(user.getUserID())) { isLastApprover = true; } } else { int levelOfUser = wfaDAO.getLevelByJobCategory(user.getJobCategory(), currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); if (levelOfUser == -1) { nextApprover = lastApprover; nextWFLevel = lastApprover.getLevel(); } else { nextApprover = approvers[levelOfUser + 1]; nextWFLevel = levelOfUser + 1; } } //If its HR, approve for all HR List <User> allHR = userDAO.getAllHR(); List <Notification> allHRNotification = new List <Notification>(); foreach (User hr in allHR) { allHRNotification.Add(notificationDAO.getPendingNotificationByTnfIDandUserID(tnf.getTNFID(), hr.getUserID())); } allHRNotification = allHRNotification.Where(x => x != null).ToList(); if (allHRNotification.Count < 2) { if (isLastApprover) { notificationDAO.updateNotificationStatus(noti.getNotificationID(), "approved"); notificationDAO.updateNotificationApprovedDate(noti.getNotificationID()); if (remarks != null) { notificationDAO.updateNotificationRemarks(noti.getNotificationID(), remarks); } tnfDAO.updateTNFStatus(tnf.getTNFID(), "approved"); deptDAO.updateDeptBudget(currentDept.getDeptName(), (currentDept.getActualBudget() - currentCourse.getPrice())); double bondCriteria = currentWorkflow.getBondCriteria(); if (currentCourse.getPrice() >= bondCriteria) { Bonds currentBond = bondDAO.getBondByTNFIDandUserID(tnf.getTNFID(), tnf.getUser().getUserID()); bondDAO.updateBondStatus(currentBond.getBondID(), "approved"); } } else { notificationDAO.updateNotificationStatus(noti.getNotificationID(), "approved"); notificationDAO.updateNotificationApprovedDate(noti.getNotificationID()); if (remarks != null) { notificationDAO.updateNotificationRemarks(noti.getNotificationID(), remarks); } tnfDAO.updateTNFWFStatus(tnf.getTNFID(), nextWFLevel); tnf = tnfDAO.getIndividualTNFByID(tnf.getUser().getUserID(), tnf.getTNFID()); Workflow_Route.sendApprovalNotification(tnf, nextApprover); } } else { if (isLastApprover) { foreach (Notification hrNoti in allHRNotification) { notificationDAO.updateNotificationStatus(hrNoti.getNotificationID(), "approved"); notificationDAO.updateNotificationApprovedDate(hrNoti.getNotificationID()); if (remarks != null) { notificationDAO.updateNotificationRemarks(noti.getNotificationID(), remarks); } } tnfDAO.updateTNFStatus(tnf.getTNFID(), "approved"); deptDAO.updateDeptBudget(currentDept.getDeptName(), (currentDept.getActualBudget() - currentCourse.getPrice())); double bondCriteria = currentWorkflow.getBondCriteria(); if (currentCourse.getPrice() >= bondCriteria) { Bonds currentBond = bondDAO.getBondByTNFIDandUserID(tnf.getTNFID(), tnf.getUser().getUserID()); bondDAO.updateBondStatus(currentBond.getBondID(), "approved"); } } else { foreach (Notification hrNoti in allHRNotification) { notificationDAO.updateNotificationStatus(hrNoti.getNotificationID(), "approved"); notificationDAO.updateNotificationApprovedDate(hrNoti.getNotificationID()); if (remarks != null) { notificationDAO.updateNotificationRemarks(noti.getNotificationID(), remarks); } } tnfDAO.updateTNFWFStatus(tnf.getTNFID(), nextWFLevel); tnf = tnfDAO.getIndividualTNFByID(tnf.getUser().getUserID(), tnf.getTNFID()); Workflow_Route.sendApprovalNotification(tnf, nextApprover); } } return(true); }
protected void Page_Load(object sender, EventArgs e) { if (Session["currentUser"] == null) { Response.Redirect("Login.aspx"); } else { if (!IsPostBack) { User currentUser = (User)Session["currentUser"]; TNFDAO tnfDAO = new TNFDAO(); UserDAO userDAO = new UserDAO(); NotificationDAO notificationDAO = new NotificationDAO(); int notificationID = Convert.ToInt32(Request.QueryString["n"]); Notification currentNotification = notificationDAO.getNotificationByID(notificationID); if (currentNotification == null || !currentNotification.getUserIDTo().Equals(currentUser.getUserID())) { Response.Redirect("errorPage.aspx"); } TNF currentTNF = tnfDAO.getIndividualTNFByID(currentNotification.getUserIDFrom(), currentNotification.getTNFID()); User applicant = userDAO.getUserByID(currentNotification.getUserIDFrom()); Course courseApplied = tnfDAO.getCourseFromTNF(currentNotification.getTNFID()); Lesson lessonApplied = tnfDAO.getLessonFromTNF(currentNotification.getTNFID()); TNFData tnfData = tnfDAO.getIndividualTNFDataByID(currentNotification.getTNFID()); Workflow currentWorkflow = currentTNF.getWorkflow(); int probationPeriod = currentWorkflow.getProbationPeriod(); TimeSpan ts = currentTNF.getApplicationDate().Subtract(applicant.getStartDate()); //show warning if overseas, probation, > 10000 if (courseApplied.getPrice() > 10000) { warningPanelPrice.Visible = true; lblWarningPrice.Visible = true; lblWarningPrice.Text = "This course is over $10,000"; } if (courseApplied.getOverseas().ToLower().Equals("y")) { warningPanelOverseas.Visible = true; lblWarningOverseas.Visible = true; lblWarningOverseas.Text = "This course is an overseas course"; } if (ts.TotalDays < probationPeriod) { warningPanelProbation.Visible = true; lblWarningProbation.Visible = true; probationDate.Enabled = true; lblWarningProbation.Text = "Applicant is under probation"; } //setting user information nameOfStaffOutput.Text = applicant.getName(); employeeNumberOutput.Text = applicant.getUserID(); emailOutput.Text = applicant.getEmail(); designationOutput.Text = applicant.getJobTitle(); departmentOutput.Text = applicant.getDepartment(); //setting course and lesson information courseOutput.Text = courseApplied.getCourseName(); startDate.Text = lessonApplied.getStartDate().ToString("d MMM yyyy"); endDate.Text = lessonApplied.getEndDate().ToString("d MMM yyyy"); startTime.Text = lessonApplied.getStartTime().ToString(); endTime.Text = lessonApplied.getEndTime().ToString(); venueOutput.Text = lessonApplied.getVenue(); instructorOutput.Text = lessonApplied.getInstructor(); string internalOrExternal = courseApplied.getInternalOrExternal(); if (internalOrExternal.ToLower().Equals("internal")) { inhouse.Checked = true; external.Checked = false; lblExternal.Visible = false; externalCourseProviderOutput.Visible = false; } else { inhouse.Checked = false; external.Checked = true; lblExternal.Visible = true; externalCourseProviderOutput.Visible = true; externalCourseProviderOutput.Text = courseApplied.getCourseProvider(); } courseFeeOutput.Text = "$" + courseApplied.getPrice(); //setting tnf data information string prepareForNewJobRole = tnfData.getPrepareForNewJobRole(); if (prepareForNewJobRole.Equals("y")) { objectiveInput1.Checked = true; objectiveElaborate1.Text = tnfData.getPrepareForNewJobRoleText(); completeDateOutput1.Text = tnfData.getPrepareForNewJobRoleCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput1.Checked = false; objectiveElaborate1.Text = "-"; completeDateOutput1.Text = "-"; } string shareKnowledge = tnfData.getShareKnowledge(); if (shareKnowledge.Equals("y")) { objectiveInput2.Checked = true; objectiveElaborate2.Text = tnfData.getShareKnowledgeText(); completeDateOutput2.Text = tnfData.getShareKnowledgeCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput2.Checked = false; objectiveElaborate2.Text = "-"; completeDateOutput2.Text = "-"; } string otherObjectives = tnfData.getOtherObjectives(); if (otherObjectives.Equals("y")) { objectiveInput3.Checked = true; objectiveElaborate3.Text = tnfData.getOtherObjectivesText(); completionDateOutput3.Text = tnfData.getOtherObjectivesCompletionDate().Value.ToString("MM-dd-yyyy"); } else { objectiveInput3.Checked = false; objectiveElaborate3.Text = "-"; completionDateOutput3.Text = "-"; } //all HR will view HR approval section if (currentUser.getJobCategory().Equals("hr")) { hrApprovalView.Visible = true; BondDAO bondDAO = new BondDAO(); DeptDAO deptDAO = new DeptDAO(); Bonds checkBond = bondDAO.getBondByTNFIDandUserID(currentTNF.getTNFID(), applicant.getUserID()); Department currentDept = deptDAO.getDeptByName(applicant.getDepartment()); lbl_HR.Text = "Is HR"; rfv_trainingCost.Enabled = true; rfv_mspBondDuration.Enabled = true; if (checkBond != null) { rbtnBond.Checked = true; rbtnMSP.Enabled = false; rbtnNA.Enabled = false; mspBondDuration.Text = string.Empty; mspBondDuration.Enabled = true; } else { rbtnBond.Checked = false; rbtnBond.Enabled = false; } costcentre.Text = currentDept.getCostCentre().ToString(); double balance = currentDept.getActualBudget() - courseApplied.getPrice(); trainingBudgetBal.Text = balance.ToString(); trainingBudgetDate.Text = DateTime.Now.ToString("MM/dd/yyyy"); } else { lbl_HR.Text = "Is not HR"; rfv_trainingCost.Enabled = false; rfv_mspBondDuration.Enabled = false; } } } }