public SubcontractorHoursAddTDS.SubcontractorHoursDataTable GetSubcontractorsDetail()
        {
            projectSubcontractorCost = (SubcontractorHoursAddTDS.SubcontractorHoursDataTable)Session["projectSubcontractorCostDummyByClientProject"];
            if (projectSubcontractorCost == null)
            {
                projectSubcontractorCost = ((SubcontractorHoursAddTDS.SubcontractorHoursDataTable)Session["projectSubcontractorCostByClientProject"]);
            }

            return projectSubcontractorCost;
        }
        protected void AddSubcontractorsNewEmptyFix(GridView grdSubcontractors)
        {
            if (grdSubcontractors.Rows.Count == 0)
            {
                SubcontractorHoursAddTDS.SubcontractorHoursDataTable dt = new SubcontractorHoursAddTDS.SubcontractorHoursDataTable();
                dt.AddSubcontractorHoursRow(-1, -1, -1, DateTime.Now, -1, -1, -1, -1, -1, "", false, -1, false, "", 0, 0, "", "", 1);
                Session["projectSubcontractorCostDummyByClientProject"] = dt;

                grdSubcontractors.DataBind();
            }

            // normally executes at all postbacks
            if (grdSubcontractors.Rows.Count == 1)
            {
                SubcontractorHoursAddTDS.SubcontractorHoursDataTable dt = (SubcontractorHoursAddTDS.SubcontractorHoursDataTable)Session["projectSubcontractorCostDummyByClientProject"];
                if (dt != null)
                {
                    grdSubcontractors.Rows[0].Visible = false;
                    grdSubcontractors.Rows[0].Controls.Clear();
                }
            }
        }
        private void GrdSubcontractorsDetailAdd()
        {
            Page.Validate("generalData");
            if (Page.IsValid)
            {
                if (FooterValidate())
                {
                    Page.Validate("DataNew");
                    if (Page.IsValid)
                    {
                        int companyId = Int32.Parse(hdfCompanyId.Value);
                        DateTime date = (DateTime)((RadDatePicker)grdSubcontractors.FooterRow.FindControl("tkrdpDateFooter")).SelectedDate;

                        int subcontractorId = Int32.Parse(((DropDownList)grdSubcontractors.FooterRow.FindControl("ddlSubcontractorFooter")).SelectedValue);
                        string name = ((DropDownList)grdSubcontractors.FooterRow.FindControl("ddlSubcontractorFooter")).SelectedItem.Text;

                        string quantityString = ((TextBox)grdSubcontractors.FooterRow.FindControl("tbxQuantityFooter")).Text;
                        decimal quantity1 = decimal.Round(decimal.Parse(quantityString), 1);
                        double quantity = double.Parse(quantity1.ToString());
                        decimal rate = decimal.Round(decimal.Parse(((TextBox)grdSubcontractors.FooterRow.FindControl("tbxRateFooter")).Text), 2);
                        decimal total = decimal.Round(decimal.Parse(((TextBox)grdSubcontractors.FooterRow.FindControl("tbxTotalFooter")).Text), 2);
                        string comment = ((TextBox)grdSubcontractors.FooterRow.FindControl("tbxCommentFooter")).Text;
                        bool deleted = false;
                        bool inDatabase = false;
                        int projectId = Int32.Parse(ddlProject.SelectedValue);
                        decimal rateCad = 0;
                        decimal totalCad = 0;
                        decimal rateUsd = 0;
                        decimal totalUsd = 0;
                        ProjectGateway projectGateway = new ProjectGateway();
                        projectGateway.LoadByProjectId(projectId);

                        if (projectGateway.GetCountryID(projectId) == 1) //Canada
                        {
                            rateCad = rate;
                            totalCad = total;
                            rateUsd = rate;
                            totalUsd = total;
                        }
                        else
                        {
                            rateCad = rate;
                            totalCad = total;
                            rateUsd = rate;
                            totalUsd = total;
                        }

                        // Insert Data
                        SubcontractorHoursAddSubcontractorHours subcontractorAddProjectSubcontractorsCosts = new SubcontractorHoursAddSubcontractorHours(subcontractorAddTDS);
                        subcontractorAddProjectSubcontractorsCosts.Insert(projectId, subcontractorId, date, quantity, rateCad, totalCad, rateUsd, totalUsd, comment, deleted, companyId, inDatabase, name, ddlClient.SelectedItem.Text, ddlProject.SelectedItem.Text, Int32.Parse(ddlClient.SelectedValue));

                        // Store dataset
                        Session["subcontractorAddTDSByClientProject"] = subcontractorAddTDS;
                        Session.Remove("projectSubcontractorCostDummyByClientProject");
                        projectSubcontractorCost = subcontractorAddTDS.SubcontractorHours;
                        Session["projectSubcontractorCostByClientProject"] = subcontractorAddTDS.SubcontractorHours;

                        grdSubcontractors.DataBind();
                        grdSubcontractors.PageIndex = grdSubcontractors.PageCount - 1;
                    }
                }
            }
        }
        // ////////////////////////////////////////////////////////////////////////
        // INITIAL EVENTS
        //
        protected void Page_Load(object sender, EventArgs e)
        {
            // Register client scripts
            this.RegisterClientScripts();

            if (!IsPostBack)
            {
                if (!(Convert.ToBoolean(Session["sgLFS_LABOUR_HOURS_SUBCONTRACTOR_HOURS_ADMIN"])))
                {
                    // Security check
                    if (!(Convert.ToBoolean(Session["sgLFS_LABOUR_HOURS_SUBCONTRACTOR_HOURS_ADD"])))
                    {
                        Response.Redirect("./../../error_page.aspx?error=" + "You are not authorized to view this page. Contact your system administrator.");
                    }

                    // Validate query string
                    if ((string)Request.QueryString["source_page"] == null)
                    {
                        Response.Redirect("./../../error_page.aspx?error=" + "Invalid query string in subcontractor_hours_add_by_client_project.aspx");
                    }
                }

                // Tag page
                Session.Remove("projectSubcontractorCostDummyByClientProject");
                hdfCompanyId.Value = Session["companyID"].ToString();

                // Store datasets
                subcontractorAddTDS = new SubcontractorHoursAddTDS();
                Session["subcontractorAddTDSByClientProject"] = subcontractorAddTDS;
                Session["projectSubcontractorCostByClientProject"] = subcontractorAddTDS.SubcontractorHours;

                StoreNavigatorState();
            }
            else
            {
                // Restore datasets
                subcontractorAddTDS = (SubcontractorHoursAddTDS)Session["subcontractorAddTDSByClientProject"];
                projectSubcontractorCost = subcontractorAddTDS.SubcontractorHours;
                Session["projectSubcontractorCostByClientProject"] = subcontractorAddTDS.SubcontractorHours;
            }
        }
        protected void grdSubcontractors_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            Page.Validate("generalData");
            if (Page.IsValid)
            {
                Page.Validate("DataEdit");
                if (Page.IsValid)
                {
                    int companyId = Int32.Parse(hdfCompanyId.Value);
                    int refId = Int32.Parse(((Label)grdSubcontractors.Rows[e.RowIndex].FindControl("lblRefIdEdit")).Text);
                    DateTime date = (DateTime)((RadDatePicker)grdSubcontractors.Rows[e.RowIndex].FindControl("tkrdpDateEdit")).SelectedDate;

                    int subcontractorId = Int32.Parse(((DropDownList)grdSubcontractors.Rows[e.RowIndex].FindControl("ddlSubcontractorEdit")).SelectedValue);
                    string name = ((DropDownList)grdSubcontractors.Rows[e.RowIndex].FindControl("ddlSubcontractorEdit")).SelectedItem.Text;

                    string quantityString = ((TextBox)grdSubcontractors.Rows[e.RowIndex].FindControl("tbxQuantityEdit")).Text;
                    decimal quantity1 = decimal.Round(decimal.Parse(quantityString), 1);
                    double quantity = double.Parse(quantity1.ToString());

                    decimal rate = decimal.Round(decimal.Parse(((TextBox)grdSubcontractors.Rows[e.RowIndex].FindControl("tbxRateEdit")).Text), 2);
                    decimal total = decimal.Round(decimal.Parse(((TextBox)grdSubcontractors.Rows[e.RowIndex].FindControl("tbxTotalEdit")).Text), 2);
                    decimal rateCad = 0;
                    decimal totalCad = 0;
                    decimal rateUsd = 0;
                    decimal totalUsd = 0;
                    int projectId = Int32.Parse(ddlProject.SelectedValue);
                    ProjectGateway projectGateway = new ProjectGateway();
                    projectGateway.LoadByProjectId(projectId);

                    if (projectGateway.GetCountryID(projectId) == 1) //Canada
                    {
                        rateCad = rate;
                        totalCad = total;
                    }
                    else
                    {
                        rateUsd = rate;
                        totalUsd = total;
                    }

                    string comment = ((TextBox)grdSubcontractors.Rows[e.RowIndex].FindControl("tbxCommentEdit")).Text;
                    bool deleted = false;

                    // Update Data
                    SubcontractorHoursAddSubcontractorHours subcontractorAddProjectSubcontractorsCosts = new SubcontractorHoursAddSubcontractorHours(subcontractorAddTDS);
                    subcontractorAddProjectSubcontractorsCosts.Update(projectId, refId, subcontractorId, date, quantity, rateCad, totalCad, rateUsd, totalUsd, comment, deleted, companyId, name, ddlClient.SelectedItem.Text, ddlProject.SelectedItem.Text, Int32.Parse(ddlClient.SelectedValue));

                    // Store dataset
                    Session["subcontractorAddTDSByClientProject"] = subcontractorAddTDS;
                    Session.Remove("projectSubcontractorCostDummyByClientProject");
                    projectSubcontractorCost = subcontractorAddTDS.SubcontractorHours;
                    Session["projectSubcontractorCostByClientProject"] = subcontractorAddTDS.SubcontractorHours;
                }
                else
                {
                    e.Cancel = true;
                }
            }
            else
            {
                e.Cancel = true;
            }
        }
        protected void grdSubcontractors_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            // Project Time Gridview, if the gridview is edition mode
            if (grdSubcontractors.EditIndex >= 0)
            {
                grdSubcontractors.UpdateRow(grdSubcontractors.EditIndex, true);
            }

            // Delete subcontractor
            int projectId = (int)e.Keys["ProjectID"];
            int refId = (int)e.Keys["RefID"];

            // Delete team project time details
            SubcontractorHoursAddSubcontractorHours subcontractorAddProjectSubcontractorsCosts = new SubcontractorHoursAddSubcontractorHours(subcontractorAddTDS);
            subcontractorAddProjectSubcontractorsCosts.Delete(projectId, refId);

            // Store dataset
            Session["subcontractorAddTDSByClientProject"] = subcontractorAddTDS;
            Session.Remove("projectSubcontractorCostDummyByClientProject");
            projectSubcontractorCost = subcontractorAddTDS.SubcontractorHours;
            Session["projectSubcontractorCostByClientProject"] = subcontractorAddTDS.SubcontractorHours;
        }