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; } } } }
public static Boolean routeIndividual(TNF tnf) { User currentUser = tnf.getUser(); UserDAO userDAO = new UserDAO(); Workflow currentWorkflow = wfDAO.getCurrentActiveWorkflow("individual"); //int numOfCriteria = wfDAO.getNumberOfCriteriaByWorkflow(currentWorkflow.getWorkflowID()); string currentStatusOfTNF = tnf.getStatus(); int probationPeriod = currentWorkflow.getProbationPeriod(); TimeSpan ts = DateTime.Now.Subtract(currentUser.getStartDate()); Course currentCourse = tnfDAO.getCourseFromTNF(tnf.getTNFID()); List <WorkflowSub> workflowSubs; if (ts.TotalDays < probationPeriod) { workflowSubs = wfsDAO.getSortedWorflowSubByWorkflowIDandType(currentWorkflow.getWorkflowID(), "ceo"); } else if (currentCourse.getOverseas().Equals("y")) { workflowSubs = wfsDAO.getSortedWorflowSubByWorkflowIDandType(currentWorkflow.getWorkflowID(), "ceo"); } else { workflowSubs = wfsDAO.getSortedWorflowSubByWorkflowIDandType(currentWorkflow.getWorkflowID(), "normal"); } double tnfTotalCost = tnfDAO.getCourseFromTNF(tnf.getTNFID()).getPrice(); //to get from tnfDAO and to confirm if gst is included in the fee of consideration if (currentStatusOfTNF.Equals("pending")) { //check bond criteria double bondCriteria = currentWorkflow.getBondCriteria(); if (tnfTotalCost >= bondCriteria) { //create new bond object BondDAO bondDAO = new BondDAO(); Bonds newBond = new Bonds(currentUser.getUserID(), tnf.getTNFID(), "pending"); int bondID = bondDAO.createBond(newBond); DateTime bondStartDate = currentCourse.getEndDate(); bondStartDate = bondStartDate.AddDays(1); bondDAO.updateBondStartDate(bondID, bondStartDate); } for (int i = 0; i < workflowSubs.Count; i++) { if (wfsDAO.getWorkflowSubType(workflowSubs[i].getWorkflowSubID()).Equals("superior")) { i = 0; } WorkflowSub currentWFS = workflowSubs[i]; double low_limit = currentWFS.getAmount_low(); double high_limit = currentWFS.getAmount_high(); List <WorkflowApprover> approvers = wfaDAO.getSortedWorkflowApprovers(currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); if (tnfTotalCost >= low_limit && tnfTotalCost <= high_limit) { WorkflowApprover currentWFApprover = approvers[tnf.getWFStatus()]; string currentUser_job_category = currentUser.getJobCategory(); WorkflowApprover checkApprover = wfaDAO.getWorkflowApproverByJobCategory(currentUser_job_category, currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); Boolean checkIfLevelHigher = checkJobLevelHigher(currentUser_job_category, currentWFApprover.getJobCategory()); //to check if applicant's level is higher than approver's level (need to write another function to check) WorkflowApprover lastWFApprover = wfaDAO.getLastApproverInChain(currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); int levelOfUser = wfaDAO.getLevelByJobCategory(currentUser.getJobCategory(), currentWorkflow.getWorkflowID(), currentWFS.getWorkflowSubID()); if (checkApprover.getJobCategory() == null) { if (!checkIfLevelHigher) { tnfDAO.updateTNFWFSub(tnf.getTNFID(), currentWFS.getWorkflowSubID()); sendApprovalNotification(tnf, currentWFApprover); return(true); } else { Boolean checkIfLevelHigherThanLastApprover = checkJobLevelHigher(currentUser_job_category, lastWFApprover.getJobCategory()); if (!checkIfLevelHigherThanLastApprover) { for (int j = 0; i < approvers.Count; j++) { Boolean checkLevelWithCurrentApprover = checkJobLevelHigher(currentUser_job_category, approvers[j].getJobCategory()); if (checkLevelWithCurrentApprover) { continue; } else { WorkflowApprover nextWFApprover = approvers[j]; tnfDAO.updateTNFWFStatus(tnf.getTNFID(), j); tnfDAO.updateTNFWFSub(tnf.getTNFID(), currentWFS.getWorkflowSubID()); sendApprovalNotification(tnf, nextWFApprover); return(true); } } } else { workflowSubs = wfsDAO.getSortedWorflowSubByWorkflowIDandType(currentWorkflow.getWorkflowID(), "superior"); } } } else { if (!currentUser.getJobCategory().Equals("ceo")) { if (levelOfUser < lastWFApprover.getLevel()) { WorkflowApprover nextWFApprover = approvers[levelOfUser + 1]; tnfDAO.updateTNFWFSub(tnf.getTNFID(), currentWFS.getWorkflowSubID()); tnfDAO.updateTNFWFStatus(tnf.getTNFID(), levelOfUser + 1); sendApprovalNotification(tnf, nextWFApprover); return(true); } else { //handle last person in chain workflowSubs = wfsDAO.getSortedWorflowSubByWorkflowIDandType(currentWorkflow.getWorkflowID(), "superior"); } } else { //no need handle CEO } } } } } return(false); }