protected override void InitializeObject(IGenericEntity ent)
        {
            if (ent is IFollowUpRevisedBudget)
            {
                IFollowUpRevisedBudget followUpRevisedBudget      = (IFollowUpRevisedBudget)ent;
                DBStoredProcedure      spGetFollowUpRevisedBudget = new DBStoredProcedure();
                spGetFollowUpRevisedBudget.ProcedureName = "bgtGetRevisedBudgetStates";
                spGetFollowUpRevisedBudget.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spGetFollowUpRevisedBudget.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                this.AddStoredProcedure("SelectObject", spGetFollowUpRevisedBudget);

                DBStoredProcedure spUpdate = new DBStoredProcedure();
                spUpdate.ProcedureName = "bgtUpdateRevisedBudgetStates";
                spUpdate.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spUpdate.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                spUpdate.AddParameter(new DBParameter("@IdAssociate", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdAssociate));
                spUpdate.AddParameter(new DBParameter("@State", DbType.String, ParameterDirection.Input, followUpRevisedBudget.StateCode));
                this.AddStoredProcedure("UpdateObject", spUpdate);

                DBStoredProcedure spDelete = new DBStoredProcedure();
                spDelete.ProcedureName = "bgtDeleteRevisedBudgetStates";
                spDelete.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spDelete.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                spDelete.AddParameter(new DBParameter("@IdAssociate", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdAssociate));
                this.AddStoredProcedure("DeleteObject", spDelete);


                DBStoredProcedure spGetRevisedBudgetStateForEvidence = new DBStoredProcedure();
                spGetRevisedBudgetStateForEvidence.ProcedureName = "bgtGetRevisedBudgetStateForEvidence";
                spGetRevisedBudgetStateForEvidence.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spGetRevisedBudgetStateForEvidence.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                spGetRevisedBudgetStateForEvidence.AddParameter(new DBParameter("@IdAssociate", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdAssociate));
                this.AddStoredProcedure("GetRevisedBudgetStateForEvidence", spGetRevisedBudgetStateForEvidence);

                DBStoredProcedure spGetRevisedScalarValidState = new DBStoredProcedure();
                spGetRevisedScalarValidState.ProcedureName = "bgtGetRevisedScalarValidState";
                spGetRevisedScalarValidState.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spGetRevisedScalarValidState.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                this.AddStoredProcedure("GetRevisedScalarValidState", spGetRevisedScalarValidState);

                DBStoredProcedure spValidateRevisedBudget = new DBStoredProcedure();
                spValidateRevisedBudget.ProcedureName = "bgtValidateRevisedBudget";
                spValidateRevisedBudget.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spValidateRevisedBudget.AddParameter(new DBParameter("@BudVersion", DbType.String, ParameterDirection.Input, followUpRevisedBudget.BudVersion));
                this.AddStoredProcedure("ValidateRevisedBudget", spValidateRevisedBudget);

                DBStoredProcedure spCopyRevisedBudget = new DBStoredProcedure();
                spCopyRevisedBudget.ProcedureName = "bgtCopyRevisedBudget";
                spCopyRevisedBudget.AddParameter(new DBParameter("@IdProject", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdProject));
                spCopyRevisedBudget.AddParameter(new DBParameter("@IdAssociateLM", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdAssociate));
                spCopyRevisedBudget.AddParameter(new DBParameter("@IdAssociateNM", DbType.Int32, ParameterDirection.Input, followUpRevisedBudget.IdAssociateNM));
                this.AddStoredProcedure("CopyRevisedBudget", spCopyRevisedBudget);
            }
        }
        public void VerifyRevisedBudget()
        {
            IRevisedBudget         revisedBudget   = BusinessObjectInitializer.CreateRevisedBudget();
            ICostCenter            costCenter      = BusinessObjectInitializer.CreateCostCenter();
            IWorkPackage           workPackage     = BusinessObjectInitializer.CreateWorkPackage();
            IProject               project         = BusinessObjectInitializer.CreateProject();
            IInitialBudget         initialBudget   = BusinessObjectInitializer.CreateInitialBudget();
            IProjectCoreTeamMember coreTeamMembers = BusinessObjectInitializer.CreateProjectCoreTeamMember();
            IFollowUpInitialBudget followUpBudegt  = BusinessObjectInitializer.CreateValidateBudget();


            DBRevisedBudget         dbRevisedBudget     = new DBRevisedBudget(connManager);
            DBGenericEntity         dbCostCenterEntity  = new DBCostCenter(connManager);
            DBGenericEntity         dbWorkPackageEntity = new DBWorkPackage(connManager);
            DBGenericEntity         dbProjectEntity     = new DBProject(connManager);
            DBInitialBudget         dbInitialBudget     = new DBInitialBudget(connManager);
            DBProjectCoreTeamMember dbCoreteamMember    = new DBProjectCoreTeamMember(connManager);

            DBFollowUpInitialBudget dbFollowUpBudget = new DBFollowUpInitialBudget(connManager);

            IFollowUpRevisedBudget  followUpRevisedBudget   = BusinessObjectInitializer.ValidateFollowUpRevisedBudget();
            DBFollowUpRevisedBudget dbFollowUpRevisedBudget = new DBFollowUpRevisedBudget(connManager);

            Random random = new Random();

            revisedBudget.IdAssociate    = DATestUtils.DEFAULT_ASSOCIATE;
            revisedBudget.IdPhase        = random.Next(1, 9);
            costCenter.Id                = random.Next(1000, 2000);
            costCenter.Name              = DATestUtils.GenerateString(50, true, false);
            costCenter.Code              = DATestUtils.GenerateString(10, true, true);
            costCenter.IdDepartment      = random.Next(1, 1);
            costCenter.IdInergyLocation  = random.Next(1, 2);
            costCenter.IsActive          = true;
            workPackage.IdPhase          = revisedBudget.IdPhase;
            workPackage.Code             = DATestUtils.GenerateString(3, true, true);
            workPackage.Name             = DATestUtils.GenerateString(30, true, false);
            workPackage.Rank             = random.Next(1, 100);
            workPackage.IsActive         = true;
            workPackage.StartYearMonth   = random.Next(2000, 2079) * 100 + random.Next(1, 12);
            workPackage.EndYearMonth     = random.Next(2000, 2079) * 100 + random.Next(1, 12);
            workPackage.LastUpdate       = DateTime.Today;
            workPackage.IdLastUserUpdate = DATestUtils.DEFAULT_ASSOCIATE;
            project.Name              = DATestUtils.GenerateString(50, true, false);
            project.Code              = DATestUtils.GenerateString(10, true, true);
            project.IdProgram         = random.Next(1, 2);
            project.IdProjectType     = random.Next(1, 2);
            project.IsActive          = true;
            revisedBudget.NewCosts    = random.Next(50000, 1000000);
            revisedBudget.NewHours    = random.Next(1, 100);
            revisedBudget.NewSales    = random.Next(50000, 1000000);
            revisedBudget.NewVal      = random.Next(1, 100);
            revisedBudget.UpdateCosts = random.Next(50000, 1000000);
            revisedBudget.UpdateHours = random.Next(1, 100);
            revisedBudget.UpdateSales = random.Next(50000, 1000000);
            revisedBudget.UpdateVal   = random.Next(1, 100);
            revisedBudget.YearMonth   = DATestUtils.DEFAULT_YEAR_MONTH;

            int newId = InsertCostCenterTest(costCenter, dbCostCenterEntity);

            //Verifies that the id returned by the insert method is greater than 0
            Assert.Greater(newId, 0);
            initialBudget.IdCostCenter = newId;
            revisedBudget.IdCostCenter = initialBudget.IdCostCenter;

            newId = InsertProjectTest(project, dbProjectEntity);
            //Verifies that the id returned by the insert method is greater than 0
            Assert.Greater(newId, 0);
            revisedBudget.IdProject         = newId;
            workPackage.IdProject           = revisedBudget.IdProject;
            initialBudget.IdProject         = newId;
            coreTeamMembers.IdProject       = newId;
            followUpBudegt.IdProject        = newId;
            followUpRevisedBudget.IdProject = revisedBudget.IdProject;

            newId = InsertWorkPackageTest(workPackage, dbWorkPackageEntity);
            //Verifies that the id returned by the insert method is greater than 0
            Assert.Greater(newId, 0);
            revisedBudget.IdWP = newId;
            initialBudget.IdWP = newId;



            initialBudget.IdAssociate = DATestUtils.DEFAULT_ASSOCIATE;
            initialBudget.IdPhase     = revisedBudget.IdPhase;
            initialBudget.Sales       = random.Next(50000, 1000000);
            initialBudget.TotalHours  = random.Next(1, 100);
            initialBudget.ValuedHours = random.Next(1, 100);
            initialBudget.YearMonth   = DATestUtils.DEFAULT_YEAR_MONTH;
            //initialBudget.IdCostCenter = random.Next(1000, 2000);

            InsertInitialBudgetMasterTest(initialBudget, dbInitialBudget);

            coreTeamMembers.IdAssociate = DATestUtils.DEFAULT_ASSOCIATE;
            coreTeamMembers.IdFunction  = DATestUtils.DEFAULT_PROJECT_FUNCTION;

            //verify if have core team member
            DataTable dsCoreMember = SelectProjectCoreTeamMemberTest(coreTeamMembers, dbCoreteamMember).Tables[0];

            if (dsCoreMember.Rows.Count == 0)
            {
                int IdCoreteammember = InsertProjectCoreTeamMemberTest(coreTeamMembers, dbCoreteamMember);
            }
            InsertInitialBudgetTest(initialBudget, dbInitialBudget);
            ValidateBudget(followUpBudegt, dbFollowUpBudget);
            //revisedBudget.IdCostCenter = random.Next(1000, 2000);

            followUpRevisedBudget.BudVersion = "N";
            ValidateRevisedbudget(followUpRevisedBudget, dbFollowUpRevisedBudget);

            InsertRevisedBudgetMasterTest(revisedBudget, dbRevisedBudget);
            // InsertRevisedBudgetTest(revisedBudget, dbRevisedBudget);


            UpdateRevisedBudgetTest(revisedBudget, dbRevisedBudget);

            DBWPPreselection tempTable = new DBWPPreselection(connManager);

            tempTable.BulkInsert("CREATE TABLE #BUDGET_PRESELECTION_TEMP (IdProject INT NOT NULL, IdPhase INT NOT NULL, IdWP INT NOT NULL)");
            tempTable.BulkInsert("INSERT  INTO #BUDGET_PRESELECTION_TEMP (IdProject,IdPhase,IdWP) VALUES (" + revisedBudget.IdProject.ToString() + "," + revisedBudget.IdPhase.ToString() + "," + revisedBudget.IdWP.ToString() + ")");

            DataSet RevisedBudgetHoursDS = SelectRevisedBudgetHoursTest(revisedBudget, dbRevisedBudget);
            //Verifies that the table is not null
            DataTable tableVerifyPhases       = RevisedBudgetHoursDS.Tables[0];
            DataTable tableVerifyWorkPackages = RevisedBudgetHoursDS.Tables[1];
            DataTable tableVerifyCostCenters  = RevisedBudgetHoursDS.Tables[2];

            Assert.IsNotNull(tableVerifyPhases, "The table returned should not be null");
            Assert.IsNotNull(tableVerifyWorkPackages, "The table returned should not be null");
            Assert.IsNotNull(tableVerifyCostCenters, "The table returned should not be null");
            //Verifies that the first table is not null
            Assert.IsNotNull(tableVerifyPhases, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyPhases, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyPhases, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyPhases, 2, "PhaseName");
            DATestUtils.CheckColumn(tableVerifyPhases, 3, "CurrentHours");
            DATestUtils.CheckColumn(tableVerifyPhases, 4, "UpdateHours");
            DATestUtils.CheckColumn(tableVerifyPhases, 5, "NewHours");
            DATestUtils.CheckColumn(tableVerifyPhases, 6, "CurrentVal");
            DATestUtils.CheckColumn(tableVerifyPhases, 7, "UpdateVal");
            DATestUtils.CheckColumn(tableVerifyPhases, 8, "NewVal");
            //Verifies that the second table is not null
            Assert.IsNotNull(tableVerifyWorkPackages, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 2, "IdWP");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 3, "WPName");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 4, "StartYearMonth");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 5, "EndYearMonth");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 6, "CurrentHours");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 7, "UpdateHours");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 8, "NewHours");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 9, "CurrentVal");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 10, "UpdateVal");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 11, "NewVal");
            //Verifies that the third table is not null
            Assert.IsNotNull(tableVerifyWorkPackages, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyCostCenters, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 2, "IdWP");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 3, "IdCostCenter");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 4, "CostCenterName");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 5, "CurrentHours");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 6, "UpdateHours");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 7, "NewHours");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 8, "CurrentVal");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 9, "UpdateVal");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 10, "NewVal");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 11, "IdCurrency");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 12, "CurrencyCode");

            DataSet RevisedBudgetCostsDS = SelectRevisedBudgetCostsTest(revisedBudget, dbRevisedBudget);

            //Verifies that the table is not null
            tableVerifyPhases       = RevisedBudgetCostsDS.Tables[0];
            tableVerifyWorkPackages = RevisedBudgetCostsDS.Tables[1];
            tableVerifyCostCenters  = RevisedBudgetCostsDS.Tables[2];
            //Verifies that the first table is not null
            Assert.IsNotNull(tableVerifyPhases, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyPhases, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyPhases, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyPhases, 2, "PhaseName");
            DATestUtils.CheckColumn(tableVerifyPhases, 3, "CurrentCost");
            DATestUtils.CheckColumn(tableVerifyPhases, 4, "UpdateCost");
            DATestUtils.CheckColumn(tableVerifyPhases, 5, "NewCost");
            DATestUtils.CheckColumn(tableVerifyPhases, 6, "CurrentSales");
            DATestUtils.CheckColumn(tableVerifyPhases, 7, "UpdateSales");
            DATestUtils.CheckColumn(tableVerifyPhases, 8, "NewSales");
            //Verifies that the second table is not null
            Assert.IsNotNull(tableVerifyWorkPackages, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 2, "IdWP");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 3, "WPName");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 4, "StartYearMonth");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 5, "EndYearMonth");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 6, "CurrentCost");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 7, "UpdateCost");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 8, "NewCost");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 9, "CurrentSales");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 10, "UpdateSales");
            DATestUtils.CheckColumn(tableVerifyWorkPackages, 11, "NewSales");
            //Verifies that the third table is not null
            Assert.IsNotNull(tableVerifyWorkPackages, "The table returned should not be null");
            //Verifies that the table returns the correcty columns
            DATestUtils.CheckColumn(tableVerifyCostCenters, 0, "IdProject");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 1, "IdPhase");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 2, "IdWP");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 3, "IdCostCenter");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 4, "CostCenterName");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 5, "CurrentCost");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 6, "UpdateCost");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 7, "NewCost");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 8, "CurrentSales");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 9, "UpdateSales");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 10, "NewSales");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 11, "IdCurrency");
            DATestUtils.CheckColumn(tableVerifyCostCenters, 12, "CurrencyCode");

            DeleteRevisedBudgetTest(revisedBudget, dbRevisedBudget);
            DeleteInitialBudgetTest(initialBudget, dbInitialBudget);
            //int rowCount = DeleteCostCenterTest(costCenter, dbCostCenterEntity);
            ////Verifies that one and only one row is affected by the delete
            //Assert.AreEqual(1, rowCount);


            //int rowCount = DeleteWorkPackageTest(workPackage, dbWorkPackageEntity);
            // //Verifies that one and only one row is affected by the delete
            // Assert.AreEqual(1, rowCount);

            // rowCount = DeleteProjectTest(project, dbProjectEntity);
            // //Verifies that one and only one row is affected by the delete
            // Assert.AreEqual(1, rowCount);
        }
        public int ValidateRevisedbudget(IFollowUpRevisedBudget followUpRevisedBudget, DBFollowUpRevisedBudget dbFollowUpRevisedBudget)
        {
            int rowCount = dbFollowUpRevisedBudget.ExecuteCustomProcedure("ValidateRevisedBudget", followUpRevisedBudget);

            return(rowCount);
        }