/// <summary>
        /// Save all batch to database (direct)
        /// </summary>
        /// <param name="companyId">companyId</param>        
        public void Save(int companyId)
        {
            MrBatchVerificationTDS flBatchValidationChanges = (MrBatchVerificationTDS)Data.GetChanges();

            if (flBatchValidationChanges != null)
            {
                if (flBatchValidationChanges.BatchValidation.Rows.Count > 0)
                {
                    MrBatchVerificationGateway mrBatchVerificationGateway = new MrBatchVerificationGateway(flBatchValidationChanges);

                    foreach (MrBatchVerificationTDS.BatchValidationRow row in (MrBatchVerificationTDS.BatchValidationDataTable)flBatchValidationChanges.BatchValidation)
                    {
                        // Insert new catalysts
                        if ((!row.Deleted) && (!row.InDatabase))
                        {
                            WorkManholeRehabilitationBatch workManholeRehabilitationBatch = new WorkManholeRehabilitationBatch(null);
                            workManholeRehabilitationBatch.InsertDirect(row.BatchID, row.Description, row.Date, row.Deleted, row.COMPANY_ID);
                        }

                        //Update catalysts
                        if ((!row.Deleted) && (row.InDatabase))
                        {
                            int batchId = row.BatchID;
                            bool originalDeleted = false;
                            int originalCompanyId = companyId;

                            //original values
                            string originalDescription = mrBatchVerificationGateway.GetDescriptionOriginal(batchId);
                            DateTime originalDate = mrBatchVerificationGateway.GetDateOriginal(batchId);

                            // new values
                            string newDescription = mrBatchVerificationGateway.GetDescription(batchId);
                            DateTime newDate = mrBatchVerificationGateway.GetDate(batchId);

                            WorkManholeRehabilitationBatch workManholeRehabilitationBatch = new WorkManholeRehabilitationBatch(null);
                            workManholeRehabilitationBatch.UpdateDirect(batchId, originalDescription, originalDate, originalDeleted, originalCompanyId, batchId, newDescription, newDate, originalDeleted, originalCompanyId);
                        }

                        // Deleted catalysts
                        if ((row.Deleted) && (row.InDatabase))
                        {
                            WorkManholeRehabilitationBatch workManholeRehabilitationBatch = new WorkManholeRehabilitationBatch(null);
                            workManholeRehabilitationBatch.DeleteDirect(row.BatchID, row.COMPANY_ID);
                        }
                    }
                }
            }
        }
        // ////////////////////////////////////////////////////////////////////////
        // EVENTS
        //
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // Security check
                if (!(Convert.ToBoolean(Session["sgLFS_CWP_MANHOLEREHABILITATION_ADMIN"])))
                {
                    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 mr_batch_add.aspx");
                }

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

                Session.Remove("mrBatchVerification");
                Session.Remove("mrBatchVerificationDummy");

                // Load information
                mrBatchVerificationTDS = new MrBatchVerificationTDS();

                int companyId = Int32.Parse(hdfCompanyId.Value);
                MrBatchVerification mrBatchVerificationForLastRow = new MrBatchVerification();
                mrBatchVerificationForLastRow.LoadLastBatch(companyId);

                if (mrBatchVerificationForLastRow.Table.Rows.Count > 0)
                {
                    MrBatchVerificationGateway mrBatchVerificationGatewayForLastRow = new MrBatchVerificationGateway(mrBatchVerificationForLastRow.Data);
                    WorkManholeRehabilitationBatchGateway workManholeRehabilitationBatchGateway = new WorkManholeRehabilitationBatchGateway();
                    hdfBatchId.Value = workManholeRehabilitationBatchGateway.GetLastId(companyId).ToString();

                    int batchId = Int32.Parse(hdfBatchId.Value);
                    DateTime date = mrBatchVerificationGatewayForLastRow.GetDate(batchId);
                    hdfBatchDate.Value = date.Month.ToString() + "/" + date.Day.ToString() + "/" + date.Year.ToString();

                    hdfBatchDescription.Value = mrBatchVerificationGatewayForLastRow.GetDescription(batchId);
                }

                // ... Store datasets
                Session["mrBatchVerificationTDS"] = mrBatchVerificationTDS;
                Session["mrBatchVerification"] = mrBatchVerificationTDS.BatchValidation;

                // StepIn
                wizardBatch.ActiveStepIndex = 0;
                StepNewBatchIn();
            }
            else
            {
                // Restore datasets
                mrBatchVerificationTDS = (MrBatchVerificationTDS)Session["mrBatchVerificationTDS"];

                // Store
                Session["mrBatchVerification"] = mrBatchVerificationTDS.BatchValidation;
            }
        }
        // /////////////////////////////////////////////////////////////////////////////////////////////////////
        //
        // STEP1 - BEGIN
        //            
        // ////////////////////////////////////////////////////////////////////////
        // STEP - BEGIN - AUXILIAR EVENTS
        //
        protected void StartBatch_OnCheckedChanged(object sender, EventArgs e)
        {
            if (rbtnUseLastBatch.Checked)
            {
                int companyId = Int32.Parse(hdfCompanyId.Value);
                MrBatchVerification mrBatchVerificationForLastRow = new MrBatchVerification(mrBatchVerificationTDS);
                mrBatchVerificationForLastRow.LoadLastBatch(companyId);

                if (mrBatchVerificationForLastRow.Table.Rows.Count > 0)
                {
                    MrBatchVerificationGateway mrBatchVerificationGatewayForLastRow = new MrBatchVerificationGateway(mrBatchVerificationForLastRow.Data);
                    WorkManholeRehabilitationBatchGateway workManholeRehabilitationBatchGateway = new WorkManholeRehabilitationBatchGateway();
                    hdfBatchId.Value = workManholeRehabilitationBatchGateway.GetLastId(companyId).ToString();

                    int batchId = Int32.Parse(hdfBatchId.Value);
                    DateTime date = mrBatchVerificationGatewayForLastRow.GetDate(batchId);
                    hdfBatchDate.Value = date.Month.ToString() + "/" + date.Day.ToString() + "/" + date.Year.ToString();

                    hdfBatchDescription.Value = mrBatchVerificationGatewayForLastRow.GetDescription(batchId);

                    // Show messages at wizard
                    lblBatchIdWarning.Visible = false;
                    lblBatchLast.Visible = true;
                    lblBatchLast.Text = "Last Batch used: " + hdfBatchDate.Value + "   " + hdfBatchDescription.Value;
                }
                else
                {
                    lblBatchIdWarning.Visible = true;
                    lblBatchLast.Visible = false;
                }
            }

            if (rbtnUseNewBatch.Checked)
            {
                lblBatchIdWarning.Visible = false;
                lblBatchLast.Visible = false;
            }
        }