// ////////////////////////////////////////////////////////////////////////
        // STEP4 - LABOUR HOUR INFORMATION - METHODS
        //
        private void StepLabourHourInformationIn()
        {
            // Set instruction
            Label instruction = (Label)this.Master.FindControl("lblInstruction");
            instruction.Text = "Please verify Labour Hour information";

            // Load
            ProjectCostingSheetAddLabourHoursInformation model = new ProjectCostingSheetAddLabourHoursInformation(projectCostingSheetAddTDS);
            int projectId = Int32.Parse(hdfProjectId.Value);
            ProjectGateway projectGateway = new ProjectGateway();
            projectGateway.LoadByProjectId(projectId);

            if (projectCostingSheetAddTDS.LabourHoursInformation.Rows.Count <= 0)
            {
                ArrayList works = new ArrayList();
                if (cbxRehabAssessmentData.Checked) works.Add("Rehab Assessment");
                if (cbxFullLengthLiningData.Checked) works.Add("Full Length");
                if (cbxPointRepairData.Checked) { works.Add("Point Lining"); works.Add("Grouting"); }
                if (cbxJunctionLiningData.Checked) works.Add("Junction Lining");
                if (cbxManholeRehabData.Checked) works.Add("MH Rehab");
                if (cbxMobilizationData.Checked) works.Add("Mobilization");
                if (cbxOtherData.Checked)
                {
                    works.Add("Other");
                    works.Add("Downtime");
                    works.Add("Office");
                    works.Add("Office / Shop");
                    works.Add("R & D");
                    works.Add("Special Projects");
                    works.Add("Subcontractor");
                    works.Add("Watermain Relining");
                    works.Add("SOTA");
                }

                if (!projectGateway.GetFairWageApplies(projectId))
                {
                    model.Load(works, projectId, tkrdpFrom.SelectedDate.Value, tkrdpTo.SelectedDate.Value, int.Parse(hdfCompanyId.Value), "");
                }
                else
                {
                    ArrayList jobClassType = new ArrayList();
                    jobClassType.Add("Laborer Group 2");
                    jobClassType.Add("Laborer Group 6");
                    jobClassType.Add("Operator Group 1");
                    jobClassType.Add("Operator Group 2");
                    jobClassType.Add("Regular Rate");

                    model.LoadFairWageProject(works, jobClassType, projectId, tkrdpFrom.SelectedDate.Value, tkrdpTo.SelectedDate.Value, int.Parse(hdfCompanyId.Value), "");
                }
            }

            // Store tables
            Session.Remove("labourHoursInformationDummy");
            labourHoursInformation = (ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)model.Table;
            Session["labourHoursInformation"] = labourHoursInformation;
            Session["projectCostingSheetAddTDS"] = projectCostingSheetAddTDS;

            grdTeamMembers.Columns[10].Visible = false;
            grdTeamMembers.Columns[11].Visible = false;
            grdTeamMembers.Columns[12].Visible = false;
            grdTeamMembers.Columns[13].Visible = false;
            grdTeamMembers.Columns[15].Visible = false;
            grdTeamMembers.Columns[16].Visible = false;
            grdTeamMembers.Columns[19].Visible = false;
            grdTeamMembers.Columns[20].Visible = false;

            // Validate grid columns
            if (projectGateway.GetCountryID(projectId) == 1) //Canada
            {
                // Team Members Grid
                grdTeamMembers.Columns[14].Visible = true;
                grdTeamMembers.Columns[17].Visible = true;
                grdTeamMembers.Columns[18].Visible = false;
                grdTeamMembers.Columns[21].Visible = false;

                // Totals
                lblTeamMembersTotalCost.Text = "Total Cost (CAD) : ";
                tbxTeamMembersTotalCostCAD.Visible = true;
                tbxTeamMembersTotalCostUSD.Visible = false;
            }
            else
            {
                if (projectGateway.GetCountryID(projectId) == 2) //USA
                {
                    // Team Members Grid
                    grdTeamMembers.Columns[14].Visible = false;
                    grdTeamMembers.Columns[17].Visible = false;
                    grdTeamMembers.Columns[18].Visible = true;
                    grdTeamMembers.Columns[21].Visible = true;

                    // Totals
                    lblTeamMembersTotalCost.Text = "Total Cost (USD) : ";
                    tbxTeamMembersTotalCostCAD.Visible = false;
                    tbxTeamMembersTotalCostUSD.Visible = true;
                }
            }

            grdTeamMembers.DataBind();
            StepLabourHoursInformationProcessGrid();
        }
        // ////////////////////////////////////////////////////////////////////////
        // PUBLIC METHODS
        //
        public int LoadAll(DateTime startDate, DateTime endDate, int companyId, string month)
        {
            int rows = 0;

            PrintSummaryCostingSheetByMonthDummyInformationGateway printSummaryCostingSheetByMonthDummyInformationGateway = new PrintSummaryCostingSheetByMonthDummyInformationGateway(Data);
            printSummaryCostingSheetByMonthDummyInformationGateway.LoadProjectsWithTimesheets(startDate, endDate);

            // Load
            ProjectCostingSheetAddLabourHoursInformationGateway projectCostingSheetAddLabourHoursInformationGateway = new ProjectCostingSheetAddLabourHoursInformationGateway(Data);
            projectCostingSheetAddLabourHoursInformationGateway.ClearBeforeFill = false;
            ProjectCostingSheetAddLabourHoursInformation model = new ProjectCostingSheetAddLabourHoursInformation(Data);

            foreach (ProjectCostingSheetAddTDS.DummyInformationRow projectListRow in (ProjectCostingSheetAddTDS.DummyInformationDataTable)printSummaryCostingSheetByMonthDummyInformationGateway.Table)
            {
                int projectId = projectListRow.ProjectID;

                ProjectGateway projectGateway = new ProjectGateway();
                projectGateway.LoadByProjectId(projectId);

                ArrayList works = new ArrayList();
                works.Add("Rehab Assessment");
                works.Add("Full Length");
                works.Add("Point Lining"); works.Add("Grouting");
                works.Add("Junction Lining");
                works.Add("MH Rehab");
                works.Add("Mobilization");
                works.Add("Other");
                works.Add("Downtime");
                works.Add("Office");
                works.Add("Office / Shop");
                works.Add("R & D");
                works.Add("Special Projects");
                works.Add("Subcontractor");
                works.Add("Watermain Relining");
                works.Add("SOTA");

                if (!projectGateway.GetFairWageApplies(projectId))
                {
                    model.Load(works, projectId, startDate, endDate, companyId, month);
                }
                else
                {
                    ArrayList jobClassType = new ArrayList();
                    jobClassType.Add("Laborer Group 2");
                    jobClassType.Add("Laborer Group 6");
                    jobClassType.Add("Operator Group 1");
                    jobClassType.Add("Operator Group 2");
                    jobClassType.Add("Regular Rate");

                    model.LoadFairWageProject(works, jobClassType, projectId, startDate, endDate, companyId, month);
                }

                decimal totalCostLH = StepLabourHoursInformationProcessGrid();

                ProjectCostingSheetAddBasicInformation projectCostingSheetAddBasicInformation = new ProjectCostingSheetAddBasicInformation(Data);
                projectCostingSheetAddBasicInformation.Insert2(projectId, projectId, "", startDate, endDate, totalCostLH, totalCostLH, 0, 0, 0, 0, 0, 0, 0, 0, "", false, companyId, 0, 0, 0, 0, 0, 0, 0, 0, 0, month);

                rows = rows + projectCostingSheetAddLabourHoursInformationGateway.Table.Rows.Count;
            }

            projectCostingSheetAddLabourHoursInformationGateway.ClearBeforeFill = true;

            return rows;
        }