// ////////////////////////////////////////////////////////////////////////
        // PUBLIC METHODS
        //
        /// <summary>
        /// Load
        /// </summary>
        /// <param name="works">works</param>
        /// <param name="projectId">projectId</param>
        /// <param name="startDate">startDate</param>
        /// <param name="endDate">endDate</param>
        /// <param name="companyId">companyId</param>
        public void Load(ArrayList works, int projectId, DateTime startDate, DateTime endDate, int companyId, string month)
        {
            ProjectGateway projectGateway = new ProjectGateway();
            projectGateway.LoadByProjectId(projectId);

            string projectName = projectGateway.GetName(projectId);

            int clientId = projectGateway.GetClientID(projectId);
            CompaniesGateway companiesGateway = new CompaniesGateway();
            companiesGateway.LoadAllByCompaniesId(clientId, companyId);
            string clientName = companiesGateway.GetName(clientId);

            // General vars
            int overtimeByCountry = 40; //Default for USA Projects
            int refId = GetNewRefId();

            // Foreach of Works (FLL, RA, JL, PR, MH Rehab, MOB, Other)
            foreach (string work_ in works)
            {
                // Load Functions by Work
                ProjectCostingSheetAddFunctionListGateway projectCostingSheetAddFunctionListGateway = new ProjectCostingSheetAddFunctionListGateway();
                projectCostingSheetAddFunctionListGateway.LoadByWork_(work_);

                // Foreach of Functions
                foreach (ProjectCostingSheetAddTDS.FunctionListRow functionListRow in (ProjectCostingSheetAddTDS.FunctionListDataTable)projectCostingSheetAddFunctionListGateway.Table)
                {
                    // Load Employees by ProjectId, StartDate, EndDate, Work
                    ProjectCostingSheetAddEmployeeListGateway projectCostingSheetAddEmployeeListGateway = new ProjectCostingSheetAddEmployeeListGateway(Data);
                    projectCostingSheetAddEmployeeListGateway.LoadByProjectIdStartDateEndDateWorkFunction(projectId, startDate, endDate, work_, functionListRow.Function_, companyId);

                    foreach (ProjectCostingSheetAddTDS.EmployeeListRow employeeListRow in (ProjectCostingSheetAddTDS.EmployeeListDataTable)projectCostingSheetAddEmployeeListGateway.Table)
                    {
                        DateTime newStartDate = new DateTime();
                        newStartDate = startDate;
                        DateTime newEndDate = new DateTime();
                        newEndDate = endDate;

                        //If Project is from Canada we get overtime
                        if (projectGateway.GetCountryID(projectId) == 1)
                        {
                            //Get Category of Employee
                            EmployeeGateway employeeGateway = new EmployeeGateway();
                            employeeGateway.LoadByEmployeeId(employeeListRow.EmployeeID);

                            switch (employeeGateway.GetCategory(employeeListRow.EmployeeID))
                            {
                                case "Special Forces":
                                    overtimeByCountry = 50;
                                    break;

                                case "Field":
                                    overtimeByCountry = 50;
                                    break;

                                case "Field 44":
                                    overtimeByCountry = 44;
                                    break;

                                case "Office/Admin":
                                    overtimeByCountry = 44;
                                    break;

                                case "Mechanic/Manufactoring":
                                    overtimeByCountry = 44;
                                    break;
                            }
                        }

                        ProjectCostingSheetAddEmployeePayPeriodGateway projectCostingSheetAddEmployeePayPeriodGateway = new ProjectCostingSheetAddEmployeePayPeriodGateway(Data);
                        projectCostingSheetAddEmployeePayPeriodGateway.LoadByStartDateEndDateEmployeeId(startDate, endDate, employeeListRow.EmployeeID);

                        if (projectCostingSheetAddEmployeePayPeriodGateway.Table.Rows.Count > 0)
                        {
                            foreach (ProjectCostingSheetAddTDS.EmployeePayPeriodRow employeePayPeriodRow in (ProjectCostingSheetAddTDS.EmployeePayPeriodDataTable)projectCostingSheetAddEmployeePayPeriodGateway.Table)
                            {
                                newEndDate = employeePayPeriodRow.Date_.AddDays(-1);

                                ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                                projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionEmployeeId(projectId, newStartDate, newEndDate, work_, functionListRow.Function_, employeeListRow.EmployeeID);

                                if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                                {
                                    double lhQuantity = 0;
                                    double overtime = 0;
                                    decimal mealsQuantity = 0;
                                    decimal motelQuantity = 0;
                                    string employeeName = "";
                                    refId++;

                                    foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                    {
                                        employeeName = originalRow.EmployeeName;

                                        // Meal hours quantity
                                        if (!originalRow.IsMealsCountryNull())
                                        {
                                            if (originalRow.MealsAllowance > 0)
                                            {
                                                mealsQuantity++;
                                            }
                                        }

                                        double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                        if (acumPeriod > overtimeByCountry)
                                        {
                                            overtime = overtime + originalRow.ProjectTime;
                                        }
                                        else
                                        {
                                            double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                            if (newAcumPeriod > overtimeByCountry)
                                            {
                                                overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                                lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                            }
                                            else
                                            {
                                                lhQuantity = lhQuantity + originalRow.ProjectTime;
                                            }
                                        }
                                    }

                                    if (lhQuantity > 0)
                                    {
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        GetEmployeeData(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRow);// ... Get Costs
                                        newRow.CostingSheetID = 0;
                                        newRow.Work_ = work_;
                                        newRow.EmployeeID = employeeListRow.EmployeeID;
                                        newRow.RefID = refId;
                                        newRow.LHQuantity = lhQuantity;
                                        newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                        if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                        if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                        newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRow.MotelCostCad = 0;
                                        newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad, 2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                        newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRow.MotelCostUsd = 0;
                                        newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd, 2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                        newRow.Deleted = false;
                                        newRow.InDatabase = false;
                                        newRow.COMPANY_ID = companyId;
                                        newRow.Name = employeeName;
                                        newRow.StartDate = newStartDate;
                                        newRow.EndDate = newEndDate;
                                        newRow.FromDatabase = true;
                                        newRow.Function_ = functionListRow.Function_;
                                        newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRow.Month = month;
                                        newRow.ClientName = clientName;
                                        newRow.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                    }

                                    if (overtime > 0)
                                    {
                                        refId++;
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt);// ... Get Costs for Overtime
                                        newRowOt.CostingSheetID = projectId;
                                        newRowOt.Work_ = work_;
                                        newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                        newRowOt.RefID = refId;
                                        newRowOt.LHQuantity = overtime;
                                        newRowOt.MealsQuantity = 0;//This is 0 because this row is only for overtime data
                                        mealsQuantity = 0;
                                        motelQuantity = 0;
                                        newRowOt.MealsUnitOfMeasurement = "";
                                        newRowOt.MotelUnitOfMeasurement = "";
                                        newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRowOt.MotelCostCad = 0;
                                        newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad, 2));
                                        newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRowOt.MotelCostUsd = 0;
                                        newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd, 2));
                                        newRowOt.Deleted = false;
                                        newRowOt.InDatabase = false;
                                        newRowOt.COMPANY_ID = companyId;
                                        newRowOt.Name = employeeName + " - Overtime";
                                        newRowOt.StartDate = newStartDate;
                                        newRowOt.EndDate = newEndDate;
                                        newRowOt.FromDatabase = true;
                                        newRowOt.Function_ = functionListRow.Function_;
                                        newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRowOt.Month = month;
                                        newRowOt.ClientName = clientName;
                                        newRowOt.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                    }
                                }

                                newStartDate = newEndDate.AddDays(1);
                            }

                            if (newEndDate <= endDate)
                            {
                                ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                                projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionEmployeeId(projectId, newStartDate, endDate, work_, functionListRow.Function_, employeeListRow.EmployeeID);

                                if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                                {
                                    double lhQuantity = 0;
                                    double overtime = 0;
                                    decimal mealsQuantity = 0;
                                    decimal motelQuantity = 0;
                                    string employeeName = "";
                                    refId++;

                                    foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                    {
                                        employeeName = originalRow.EmployeeName;

                                        // Meal hours quantity
                                        if (!originalRow.IsMealsCountryNull())
                                        {
                                            if (originalRow.MealsAllowance > 0)
                                            {
                                                mealsQuantity++;
                                            }
                                        }

                                        double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                        if (acumPeriod > overtimeByCountry)
                                        {
                                            overtime = overtime + originalRow.ProjectTime;
                                        }
                                        else
                                        {
                                            double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                            if (newAcumPeriod > overtimeByCountry)
                                            {
                                                overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                                lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                            }
                                            else
                                            {
                                                lhQuantity = lhQuantity + originalRow.ProjectTime;
                                            }
                                        }
                                    }

                                    if (lhQuantity > 0)
                                    {
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        GetEmployeeData(newStartDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                        newRow.CostingSheetID = 0;
                                        newRow.Work_ = work_;
                                        newRow.EmployeeID = employeeListRow.EmployeeID;
                                        newRow.RefID = refId;
                                        newRow.LHQuantity = lhQuantity;
                                        newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                        if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                        if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                        newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRow.MotelCostCad = 0;
                                        newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad, 2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                        newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRow.MotelCostUsd = 0;
                                        newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd, 2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                        newRow.Deleted = false;
                                        newRow.InDatabase = false;
                                        newRow.COMPANY_ID = companyId;
                                        newRow.Name = employeeName;
                                        newRow.StartDate = newStartDate;
                                        newRow.EndDate = endDate;
                                        newRow.FromDatabase = true;
                                        newRow.Function_ = functionListRow.Function_;
                                        newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRow.Month = month;
                                        newRow.ClientName = clientName;
                                        newRow.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                    }

                                    if (overtime > 0)
                                    {
                                        refId++;
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt);// ... Get Costs for Overtime
                                        newRowOt.CostingSheetID = 0;
                                        newRowOt.Work_ = work_;
                                        newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                        newRowOt.RefID = refId;
                                        newRowOt.LHQuantity = overtime;
                                        newRowOt.MealsQuantity = 0;//This is 0 because this row is only for overtime data
                                        mealsQuantity = 0;
                                        motelQuantity = 0;
                                        newRowOt.MealsUnitOfMeasurement = "";
                                        newRowOt.MotelUnitOfMeasurement = "";
                                        newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRowOt.MotelCostCad = 0;
                                        newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad, 2));
                                        newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRowOt.MotelCostUsd = 0;
                                        newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd, 2));
                                        newRowOt.Deleted = false;
                                        newRowOt.InDatabase = false;
                                        newRowOt.COMPANY_ID = companyId;
                                        newRowOt.Name = employeeName + " - Overtime";
                                        newRowOt.StartDate = newStartDate;
                                        newRowOt.EndDate = endDate;
                                        newRowOt.FromDatabase = true;
                                        newRowOt.Function_ = functionListRow.Function_;
                                        newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRowOt.Month = month;
                                        newRowOt.ClientName = clientName;
                                        newRowOt.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                    }
                                }
                            }
                        }
                        else
                        {
                            ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                            projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionEmployeeId(projectId, startDate, endDate, work_, functionListRow.Function_, employeeListRow.EmployeeID);

                            if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                            {
                                double lhQuantity = 0;
                                double overtime = 0;
                                decimal mealsQuantity = 0;
                                decimal motelQuantity = 0;
                                string employeeName = "";
                                refId++;

                                foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                {
                                    employeeName = originalRow.EmployeeName;

                                    // Meal hours quantity
                                    if (!originalRow.IsMealsCountryNull())
                                    {
                                        if (originalRow.MealsAllowance > 0)
                                        {
                                            mealsQuantity++;
                                        }
                                    }

                                    double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                    if (acumPeriod > overtimeByCountry)
                                    {
                                        overtime = overtime + originalRow.ProjectTime;
                                    }
                                    else
                                    {
                                        double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                        if (newAcumPeriod > overtimeByCountry)
                                        {
                                            overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                            lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                        }
                                        else
                                        {
                                            lhQuantity = lhQuantity + originalRow.ProjectTime;
                                        }
                                    }
                                }

                                if (lhQuantity > 0)
                                {
                                    ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                    GetEmployeeData(startDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                    newRow.CostingSheetID = 0;
                                    newRow.Work_ = work_;
                                    newRow.EmployeeID = employeeListRow.EmployeeID;
                                    newRow.RefID = refId;
                                    newRow.LHQuantity = lhQuantity;
                                    newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                    if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                    if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                    newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                    newRow.MotelCostCad = 0;
                                    newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad, 2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                    newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                    newRow.MotelCostUsd = 0;
                                    newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd, 2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                    newRow.Deleted = false;
                                    newRow.InDatabase = false;
                                    newRow.COMPANY_ID = companyId;
                                    newRow.Name = employeeName;
                                    newRow.StartDate = startDate;
                                    newRow.EndDate = endDate;
                                    newRow.FromDatabase = true;
                                    newRow.Function_ = functionListRow.Function_;
                                    newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                    newRow.Month = month;
                                    newRow.ClientName = clientName;
                                    newRow.ProjectName = projectName;
                                    ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                }

                                if (overtime > 0)
                                {
                                    refId++;
                                    ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                    GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt);// ... Get Costs for Overtime
                                    newRowOt.CostingSheetID = 0;
                                    newRowOt.Work_ = work_;
                                    newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                    newRowOt.RefID = refId;
                                    newRowOt.LHQuantity = overtime;
                                    newRowOt.MealsQuantity = 0;//This is 0 because this row is only for overtime data
                                    mealsQuantity = 0;
                                    motelQuantity = 0;
                                    newRowOt.MealsUnitOfMeasurement = "";
                                    newRowOt.MotelUnitOfMeasurement = "";
                                    newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                    newRowOt.MotelCostCad = 0;
                                    newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad, 2));
                                    newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                    newRowOt.MotelCostUsd = 0;
                                    newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd, 2));
                                    newRowOt.Deleted = false;
                                    newRowOt.InDatabase = false;
                                    newRowOt.COMPANY_ID = companyId;
                                    newRowOt.Name = employeeName + " - Overtime";
                                    newRowOt.StartDate = startDate;
                                    newRowOt.EndDate = endDate;
                                    newRowOt.FromDatabase = true;
                                    newRowOt.Function_ = functionListRow.Function_;
                                    newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                    newRowOt.Month = month;
                                    newRowOt.ClientName = clientName;
                                    newRowOt.ProjectName = projectName;
                                    ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                }
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// LoadFairWageProject
        /// </summary>
        /// <param name="works">works</param>
        /// <param name="jobClassType">jobClassType</param>
        /// <param name="projectId">projectId</param>
        /// <param name="startDate">startDate</param>
        /// <param name="endDate">endDate</param>
        /// <param name="companyId">companyId</param>
        public void LoadFairWageProject(ArrayList works, ArrayList jobClassType, int projectId, DateTime startDate, DateTime endDate, int companyId, string month)
        {
            ProjectGateway projectGateway = new ProjectGateway();
            projectGateway.LoadByProjectId(projectId);

            string projectName = projectGateway.GetName(projectId);

            int clientId = projectGateway.GetClientID(projectId);
            CompaniesGateway companiesGateway = new CompaniesGateway();
            companiesGateway.LoadAllByCompaniesId(clientId, companyId);
            string clientName = companiesGateway.GetName(clientId);

            // General vars
            int overtimeByCountry = 40; //Default for USA Projects
            int refId = GetNewRefId();

            int countryId = 1; //Default Canada
            if (projectGateway.GetCountryID(projectId) == 2)
            {
                countryId = 2;//USA
            }

            // Foreach of Works (FLL, RA, JL, PR, MH Rehab, MOB, Other)
            foreach (string work_ in works)
            {
                // Load Functions by Work
                ProjectCostingSheetAddFunctionListGateway projectCostingSheetAddFunctionListGateway = new ProjectCostingSheetAddFunctionListGateway();
                projectCostingSheetAddFunctionListGateway.LoadByWork_(work_);

                // Foreach of Functions
                foreach (ProjectCostingSheetAddTDS.FunctionListRow functionListRow in (ProjectCostingSheetAddTDS.FunctionListDataTable)projectCostingSheetAddFunctionListGateway.Table)
                {
                    // Foreach of Job Class (Laborer Group 2, Laborer Group 6, Operator Group 1, Operator Group 2, Regular Rate)
                    foreach (string jobClassType_ in jobClassType)
                    {
                        // Get Fringe Rate by Job Class
                        decimal fringeRate = projectGateway.GetOperatorGroupFringeRate(projectId, jobClassType_);

                        // Load Employees with Timesheet by ProjectId, StartDate, EndDate, Work, Function and Job Class
                        ProjectCostingSheetAddEmployeeListGateway projectCostingSheetAddEmployeeListGateway = new ProjectCostingSheetAddEmployeeListGateway(Data);
                        projectCostingSheetAddEmployeeListGateway.LoadByProjectIdStartDateEndDateWorkFunctionJobClass(projectId, startDate, endDate, work_, functionListRow.Function_, jobClassType_, companyId);

                        // Foreach of Employees with Timesheet
                        foreach (ProjectCostingSheetAddTDS.EmployeeListRow employeeListRow in (ProjectCostingSheetAddTDS.EmployeeListDataTable)projectCostingSheetAddEmployeeListGateway.Table)
                        {
                            DateTime newStartDate = new DateTime();
                            newStartDate = startDate;

                            DateTime newEndDate = new DateTime();
                            newEndDate = endDate;

                            // If Project is from Canada we get overtime
                            if (projectGateway.GetCountryID(projectId) == 1)
                            {
                                // Get Category of Employee
                                EmployeeGateway employeeGateway = new EmployeeGateway();
                                employeeGateway.LoadByEmployeeId(employeeListRow.EmployeeID);

                                switch (employeeGateway.GetCategory(employeeListRow.EmployeeID))
                                {
                                    case "Special Forces":
                                        overtimeByCountry = 50;
                                        break;

                                    case "Field":
                                        overtimeByCountry = 50;
                                        break;

                                    case "Field 44":
                                        overtimeByCountry = 44;
                                        break;

                                    case "Office/Admin":
                                        overtimeByCountry = 44;
                                        break;

                                    case "Mechanic/Manufactoring":
                                        overtimeByCountry = 44;
                                        break;
                                }
                            }

                            // Load Cost Pay Periods of Employee by StartDate and EndDate
                            ProjectCostingSheetAddEmployeePayPeriodGateway projectCostingSheetAddEmployeePayPeriodGateway = new ProjectCostingSheetAddEmployeePayPeriodGateway(Data);
                            projectCostingSheetAddEmployeePayPeriodGateway.LoadByStartDateEndDateEmployeeId(startDate, endDate, employeeListRow.EmployeeID);

                            // If Employee has Cost Pay Periods between StartDate and EndDate
                            if (projectCostingSheetAddEmployeePayPeriodGateway.Table.Rows.Count > 0)
                            {
                                // Foreach of Cost Pay Periods
                                foreach (ProjectCostingSheetAddTDS.EmployeePayPeriodRow employeePayPeriodRow in (ProjectCostingSheetAddTDS.EmployeePayPeriodDataTable)projectCostingSheetAddEmployeePayPeriodGateway.Table)
                                {
                                    // Update newEndDate with Date of Cost Pay Period
                                    newEndDate = employeePayPeriodRow.Date_.AddDays(-1);

                                    // Load Project Times of Employee by ProjectId, StartDate, EndDate, Work, Function, Job Class
                                    ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                                    projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionJobClassTypeEmployeeId(projectId, newStartDate, newEndDate, work_, functionListRow.Function_, jobClassType_, employeeListRow.EmployeeID);

                                    // If Employee has ProjectTime
                                    if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                                    {
                                        double lhQuantity = 0;
                                        double overtime = 0;
                                        decimal mealsQuantity = 0;
                                        decimal motelQuantity = 0;
                                        string employeeName = "";
                                        refId++;

                                        // Foreach original ProjectTime
                                        foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                        {
                                            employeeName = originalRow.EmployeeName;

                                            // Meal hours quantity
                                            if (!originalRow.IsMealsCountryNull())
                                            {
                                                if (originalRow.MealsAllowance > 0)
                                                {
                                                    mealsQuantity++;
                                                }
                                            }

                                            double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                            if (acumPeriod > overtimeByCountry)
                                            {
                                                overtime = overtime + originalRow.ProjectTime;
                                            }
                                            else
                                            {
                                                double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                                if (newAcumPeriod > overtimeByCountry)
                                                {
                                                    overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                                    lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                                }
                                                else
                                                {
                                                    lhQuantity = lhQuantity + originalRow.ProjectTime;
                                                }
                                            }
                                        }

                                        if (lhQuantity > 0)
                                        {
                                            ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                            if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                            {
                                                if (jobClassType_ != "Regular Rate")
                                                {
                                                    decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                    GetEmployeeDataFairWage(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRow, countryId, fringeRate, fairWageRate);
                                                }
                                                else
                                                {
                                                    GetEmployeeData(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRow); // Is same to non fair wage project
                                                }
                                            }
                                            else
                                            {
                                                GetEmployeeData(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRow); // Is same to non fair wage project
                                            }

                                            newRow.CostingSheetID = 0;
                                            newRow.Work_ = work_;
                                            newRow.EmployeeID = employeeListRow.EmployeeID;
                                            newRow.RefID = refId;
                                            newRow.LHQuantity = lhQuantity;
                                            newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                            if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                            if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                            newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                            newRow.MotelCostCad = 0;
                                            newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad,2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                            newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                            newRow.MotelCostUsd = 0;
                                            newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd,2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                            newRow.Deleted = false;
                                            newRow.InDatabase = false;
                                            newRow.COMPANY_ID = companyId;
                                            newRow.Name = employeeName;
                                            newRow.StartDate = newStartDate;
                                            newRow.EndDate = newEndDate;
                                            newRow.FromDatabase = true;
                                            newRow.Function_ = functionListRow.Function_;
                                            newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                            newRow.Month = month;
                                            newRow.ClientName = clientName;
                                            newRow.ProjectName = projectName;
                                            ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                        }

                                        if (overtime > 0)
                                        {
                                            refId++;
                                            ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                            if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                            {
                                                if (jobClassType_ != "Regular Rate")
                                                {
                                                    decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                    GetEmployeeDataFairWageOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt, countryId, fringeRate, fairWageRate);
                                                }
                                                else
                                                {
                                                    GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                                }
                                            }
                                            else
                                            {
                                                GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                            }

                                            newRowOt.CostingSheetID = 0;
                                            newRowOt.Work_ = work_;
                                            newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                            newRowOt.RefID = refId;
                                            newRowOt.LHQuantity = overtime;
                                            newRowOt.MealsQuantity = 0;
                                            newRowOt.MealsUnitOfMeasurement = "";
                                            newRowOt.MotelUnitOfMeasurement = "";
                                            newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                            newRowOt.MotelCostCad = 0;
                                            newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad,2));
                                            newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                            newRowOt.MotelCostUsd = 0;
                                            newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd,2));
                                            newRowOt.Deleted = false;
                                            newRowOt.InDatabase = false;
                                            newRowOt.COMPANY_ID = companyId;
                                            newRowOt.Name = employeeName + " - Overtime";
                                            newRowOt.StartDate = newStartDate;
                                            newRowOt.EndDate = newEndDate;
                                            newRowOt.FromDatabase = true;
                                            newRowOt.Function_ = functionListRow.Function_;
                                            newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                            newRowOt.Month = month;
                                            newRowOt.ClientName = clientName;
                                            newRowOt.ProjectName = projectName;
                                            ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                        }
                                    }

                                    newStartDate = newEndDate.AddDays(1);
                                }

                                if (newEndDate <= endDate)
                                {
                                    ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                                    projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionJobClassTypeEmployeeId(projectId, newStartDate, endDate, work_, functionListRow.Function_, jobClassType_, employeeListRow.EmployeeID);

                                    if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                                    {
                                        double lhQuantity = 0;
                                        double overtime = 0;
                                        decimal mealsQuantity = 0;
                                        decimal motelQuantity = 0;
                                        string employeeName = "";
                                        refId++;

                                        foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                        {
                                            employeeName = originalRow.EmployeeName;

                                            // Meal hours quantity
                                            if (!originalRow.IsMealsCountryNull())
                                            {
                                                if (originalRow.MealsAllowance > 0)
                                                {
                                                    mealsQuantity++;
                                                }
                                            }

                                            double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                            if (acumPeriod > overtimeByCountry)
                                            {
                                                overtime = overtime + originalRow.ProjectTime;
                                            }
                                            else
                                            {
                                                double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                                if (newAcumPeriod > overtimeByCountry)
                                                {
                                                    overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                                    lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                                }
                                                else
                                                {
                                                    lhQuantity = lhQuantity + originalRow.ProjectTime;
                                                }
                                            }
                                        }

                                        if (lhQuantity > 0)
                                        {
                                            ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                            if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                            {
                                                if (jobClassType_ != "Regular Rate")
                                                {
                                                    decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                    GetEmployeeDataFairWage(newStartDate, endDate, employeeListRow.EmployeeID, work_, newRow, countryId, fringeRate, fairWageRate);
                                                }
                                                else
                                                {
                                                    GetEmployeeData(newStartDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                                }
                                            }
                                            else
                                            {
                                                GetEmployeeData(newStartDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                            }
                                            newRow.CostingSheetID = 0;
                                            newRow.Work_ = work_;
                                            newRow.EmployeeID = employeeListRow.EmployeeID;
                                            newRow.RefID = refId;
                                            newRow.LHQuantity = lhQuantity;
                                            newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                            if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                            if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                            newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                            newRow.MotelCostCad = 0;
                                            newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad,2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                            newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                            newRow.MotelCostUsd = 0;
                                            newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd,2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                            newRow.Deleted = false;
                                            newRow.InDatabase = false;
                                            newRow.COMPANY_ID = companyId;
                                            newRow.Name = employeeName;
                                            newRow.StartDate = newStartDate;
                                            newRow.EndDate = endDate;
                                            newRow.FromDatabase = true;
                                            newRow.Function_ = functionListRow.Function_;
                                            newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                            newRow.Month = month;
                                            newRow.ClientName = clientName;
                                            newRow.ProjectName = projectName;
                                            ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                        }

                                        if (overtime > 0)
                                        {
                                            refId++;
                                            ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                            if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                            {
                                                if (jobClassType_ != "Regular Rate")
                                                {
                                                    decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                    GetEmployeeDataFairWageOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt, countryId, fringeRate, fairWageRate);
                                                }
                                                else
                                                {
                                                    GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                                }
                                            }
                                            else
                                            {
                                                GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                            }

                                            newRowOt.CostingSheetID = 0;
                                            newRowOt.Work_ = work_;
                                            newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                            newRowOt.RefID = refId;
                                            newRowOt.LHQuantity = overtime;
                                            newRowOt.MealsQuantity = 0;
                                            newRowOt.MealsUnitOfMeasurement = "";
                                            newRowOt.MotelUnitOfMeasurement = "";
                                            newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                            newRowOt.MotelCostCad = 0;
                                            newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad,2));
                                            newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                            newRowOt.MotelCostUsd = 0;
                                            newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd,2));
                                            newRowOt.Deleted = false;
                                            newRowOt.InDatabase = false;
                                            newRowOt.COMPANY_ID = companyId;
                                            newRowOt.Name = employeeName + " - Overtime";
                                            newRowOt.StartDate = newStartDate;
                                            newRowOt.EndDate = endDate;
                                            newRowOt.FromDatabase = true;
                                            newRowOt.Function_ = functionListRow.Function_;
                                            newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                            newRowOt.Month = month;
                                            newRowOt.ClientName = clientName;
                                            newRowOt.ProjectName = projectName;
                                            ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ProjectCostingSheetAddOriginalLabourHourGateway projectCostingSheetAddOriginalLabourHourGateway = new ProjectCostingSheetAddOriginalLabourHourGateway(Data);
                                projectCostingSheetAddOriginalLabourHourGateway.LoadByProjectStartDateEndDateWorkFunctionJobClassTypeEmployeeId(projectId, startDate, endDate, work_, functionListRow.Function_, jobClassType_, employeeListRow.EmployeeID);

                                if (projectCostingSheetAddOriginalLabourHourGateway.Table.Rows.Count > 0)
                                {
                                    double lhQuantity = 0;
                                    double overtime = 0;
                                    decimal mealsQuantity = 0;
                                    decimal motelQuantity = 0;
                                    string employeeName = "";
                                    refId++;

                                    foreach (ProjectCostingSheetAddTDS.OriginalLabourHourRow originalRow in (ProjectCostingSheetAddTDS.OriginalLabourHourDataTable)projectCostingSheetAddOriginalLabourHourGateway.Table)
                                    {
                                        employeeName = originalRow.EmployeeName;

                                        // Meal hours quantity
                                        if (!originalRow.IsMealsCountryNull())
                                        {
                                            if (originalRow.MealsAllowance > 0)
                                            {
                                                mealsQuantity++;
                                            }
                                        }

                                        double acumPeriod = GetTotalHoursByEmployeeIdPeriodId(originalRow.EmployeeID, originalRow.Date_, originalRow.ProjectTimeID);

                                        if (acumPeriod > overtimeByCountry)
                                        {
                                            overtime = overtime + originalRow.ProjectTime;
                                        }
                                        else
                                        {
                                            double newAcumPeriod = acumPeriod + originalRow.ProjectTime;

                                            if (newAcumPeriod > overtimeByCountry)
                                            {
                                                overtime = overtime + (newAcumPeriod - overtimeByCountry);
                                                lhQuantity = lhQuantity + (originalRow.ProjectTime - (newAcumPeriod - overtimeByCountry));
                                            }
                                            else
                                            {
                                                lhQuantity = lhQuantity + originalRow.ProjectTime;
                                            }
                                        }
                                    }

                                    if (lhQuantity > 0)
                                    {
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRow = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                        {
                                            if (jobClassType_ != "Regular Rate")
                                            {
                                                decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                GetEmployeeDataFairWage(startDate, endDate, employeeListRow.EmployeeID, work_, newRow, countryId, fringeRate, fairWageRate);
                                            }
                                            else
                                            {
                                                GetEmployeeData(startDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                            }
                                        }
                                        else
                                        {
                                            GetEmployeeData(startDate, endDate, employeeListRow.EmployeeID, work_, newRow);
                                        }
                                        newRow.CostingSheetID = 0;
                                        newRow.Work_ = work_;
                                        newRow.EmployeeID = employeeListRow.EmployeeID;
                                        newRow.RefID = refId;
                                        newRow.LHQuantity = lhQuantity;
                                        newRow.MealsQuantity = Convert.ToInt32(mealsQuantity);
                                        if (mealsQuantity > 0) newRow.MealsUnitOfMeasurement = "Day"; else newRow.MealsUnitOfMeasurement = "";
                                        if (motelQuantity > 0) newRow.MotelUnitOfMeasurement = "Day"; else newRow.MotelUnitOfMeasurement = "";
                                        newRow.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRow.MotelCostCad = 0;
                                        newRow.TotalCostCad = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostCad,2)) + (mealsQuantity * newRow.MealsCostCad) + (motelQuantity * newRow.MotelCostCad);
                                        newRow.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRow.MotelCostUsd = 0;
                                        newRow.TotalCostUsd = (Convert.ToDecimal(lhQuantity) * decimal.Round(newRow.LHCostUsd,2)) + (mealsQuantity * newRow.MealsCostUsd) + (motelQuantity * newRow.MotelCostUsd);
                                        newRow.Deleted = false;
                                        newRow.InDatabase = false;
                                        newRow.COMPANY_ID = companyId;
                                        newRow.Name = employeeName;
                                        newRow.StartDate = startDate;
                                        newRow.EndDate = endDate;
                                        newRow.FromDatabase = true;
                                        newRow.Function_ = functionListRow.Function_;
                                        newRow.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRow.Month = month;
                                        newRow.ClientName = clientName;
                                        newRow.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRow);
                                    }

                                    if (overtime > 0)
                                    {
                                        refId++;
                                        ProjectCostingSheetAddTDS.LabourHoursInformationRow newRowOt = ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).NewLabourHoursInformationRow();
                                        if (projectGateway.IsFairWageProjectWorkFunction(projectId, work_, functionListRow.Function_))
                                        {
                                            if (jobClassType_ != "Regular Rate")
                                            {
                                                decimal fairWageRate = projectGateway.GetOperatorGroupRate(projectId, jobClassType_);

                                                GetEmployeeDataFairWageOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt, countryId, fringeRate, fairWageRate);
                                            }
                                            else
                                            {
                                                GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                            }
                                        }
                                        else
                                        {
                                            GetEmployeeDataOvertime(newStartDate, newEndDate, employeeListRow.EmployeeID, work_, newRowOt); // Is same to non fair wage project
                                        }

                                        newRowOt.CostingSheetID = 0;
                                        newRowOt.Work_ = work_;
                                        newRowOt.EmployeeID = employeeListRow.EmployeeID;
                                        newRowOt.RefID = refId;
                                        newRowOt.LHQuantity = overtime;
                                        newRowOt.MealsQuantity = 0;
                                        newRowOt.MealsUnitOfMeasurement = "";
                                        newRowOt.MotelUnitOfMeasurement = "";
                                        newRowOt.MealsCostCad = MealsAllowance.GetMealsAllowance(1, true, "Full Day");
                                        newRowOt.MotelCostCad = 0;
                                        newRowOt.TotalCostCad = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostCad,2));
                                        newRowOt.MealsCostUsd = MealsAllowance.GetMealsAllowance(2, true, "Full Day");
                                        newRowOt.MotelCostUsd = 0;
                                        newRowOt.TotalCostUsd = (Convert.ToDecimal(overtime) * decimal.Round(newRowOt.LHCostUsd,2));
                                        newRowOt.Deleted = false;
                                        newRowOt.InDatabase = false;
                                        newRowOt.COMPANY_ID = companyId;
                                        newRowOt.Name = employeeName + " - Overtime";
                                        newRowOt.StartDate = startDate;
                                        newRowOt.EndDate = endDate;
                                        newRowOt.FromDatabase = true;
                                        newRowOt.Function_ = functionListRow.Function_;
                                        newRowOt.WorkFunction = work_ + " . " + functionListRow.Function_;
                                        newRowOt.Month = month;
                                        newRowOt.ClientName = clientName;
                                        newRowOt.ProjectName = projectName;
                                        ((ProjectCostingSheetAddTDS.LabourHoursInformationDataTable)Table).AddLabourHoursInformationRow(newRowOt);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// IsValidApproveTimesheetsManager
        /// </summary>
        /// <param name="employeeIdToApprove">employeeIdToApprove</param>
        /// <param name="employeeIdApproveManager">employeeIdApproveManager</param>
        /// <returns>TRUE OR FALSE</returns>
        public bool IsValidApproveTimesheetsManager(int employeeIdToApprove, int employeeIdApproveManager)
        {
            EmployeeGateway employeeGatewayForEmployeeApproveManager = new EmployeeGateway(new DataSet());
            employeeGatewayForEmployeeApproveManager.LoadByEmployeeId(employeeIdApproveManager);

            EmployeeGateway employeeGatewayForEmployeeToApprove = new EmployeeGateway(new DataSet());
            employeeGatewayForEmployeeToApprove.LoadByEmployeeId(employeeIdToApprove);

            if (!employeeGatewayForEmployeeApproveManager.GetApproveTimesheets(employeeIdApproveManager))
            {
                return false;
            }
            else
            {
                if (employeeIdToApprove == employeeIdApproveManager)
                {
                    return true;
                }
                else
                {
                    string employeeToApproveType = employeeGatewayForEmployeeToApprove.GetType(employeeIdToApprove);
                    string employeeApproveManagerType = employeeGatewayForEmployeeApproveManager.GetType(employeeIdApproveManager);

                    string employeeToApproveCategory = employeeGatewayForEmployeeToApprove.GetCategory(employeeIdToApprove);

                    if (ContainsType(employeeToApproveType, employeeApproveManagerType))
                    {
                        EmployeeGateway employeeGateway = new EmployeeGateway();
                        if (employeeGateway.IsEmployeeWithApproveTimesheetInCategory(employeeIdApproveManager, employeeToApproveCategory))
                        {
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }