Example #1
0
        private void ComputeSampleManifestStringsForApp
            (HttpResponse resp, int IDapplication, string formula)
        {
            // Get a list of active entitlements for the given application
            string sql =
                @"
SELECT TOP 20 c_id FROM t_RBSR_AUFW_u_Entitlement
WHERE c_u_Application = (SELECT c_u_Name FROM t_RBSR_AUFW_u_Application WHERE c_id=" + IDapplication +
                ") AND c_u_Status = 'A';";
            OdbcDataReader reader = HELPERS.RunSqlSelect(sql);

            IEntitlement engine = new IEntitlement(HELPERS.NewOdbcConn_FORCE());

            while (reader.Read())
            {
                int IDentitlement         = reader.GetInt32(0);
                returnGetEntitlement seed = new returnGetEntitlement();
                bool hasBeenSeeded        = false;

                try
                {
                    seed          = engine.GetEntitlement(IDentitlement);
                    hasBeenSeeded = true;
                }
                catch (Exception eeeeignore) { }

                resp.Write(HELPERS.CalcManifestString(seed, formula) + "<BR/>\n");
            }
        }
 public EntitlementAccess Create(IEntitlement entitlement, EntitledAccessLevel accessLevel)
 {
     return(new EntitlementAccess
     {
         AccessLevel = accessLevel,
         Entitlement = entitlement
     });
 }
Example #3
0
        private void BEnts_Recompute_Privstring()
        {
            IEntitlement ENGINE = new IEntitlement(HELPERS.NewOdbcConn());

            returnListEntitlement[] RET = ENGINE.ListEntitlement(null, "", new string[] { }, "");
            foreach (returnListEntitlement x in RET)
            {
                returnGetEntitlement cur = ENGINE.GetEntitlement(x.ID);
                string privstring        = HELPERS.CalcManifestString(cur);
                ENGINE.SetEntitlementPrivstring(x.ID, privstring);
            }
        }
Example #4
0
        public bool IsArchiveLimited(IEntitlement entitlement, IEntitledProduct entitledProduct)
        {
            if (entitlement == null || !entitlement.ArchiveLimited)
            {
                return(false);
            }

            var productPublishedOn = entitledProduct.PublishedOn;
            var archiveLimit       = DateTime.Now.AddDays(entitlement.ArchiveLimitedDays * -1);

            return(archiveLimit >= productPublishedOn);
        }
Example #5
0
        // If arg1 is a string representation of an integer, then that int is an entitlement ID
        // and the fields should come straight from the sql database.
        // Otherwise, arg1 is a JSON dictionary where the field values should be taken from.
        //
        // If arg2 is a non-empty string, it is the formula to be used, instead of the formula
        // being extracted from the database.
        //
        //
        // W A R N I N G ! ! !
        // GENERATES HTML.
        // THIS MUST **NEVER** BE USED FOR DATA PROCESSING, for generating manifests, for reconciliation, for export-to-spreadsheet, etc!!!!
        //
        private void ComputeManifestString(HttpResponse resp, string arg1, string arg2, string arg3, string arg4)
        {
            returnGetEntitlement seed = new returnGetEntitlement();
            bool hasBeenSeeded        = false;

            try
            {
                int          IDentitlement = int.Parse(arg1);
                IEntitlement engine        = new IEntitlement(HELPERS.NewOdbcConn());
                seed          = engine.GetEntitlement(IDentitlement);
                hasBeenSeeded = true;
            }
            catch (Exception eeeeignore) { }


            if (!hasBeenSeeded)
            {
                System.Web.Script.Serialization.JavaScriptSerializer UTIL =
                    new System.Web.Script.Serialization.JavaScriptSerializer();
                Object whatami = UTIL.DeserializeObject(arg1);
                System.Collections.Generic.Dictionary <string, Object> www =
                    whatami as System.Collections.Generic.Dictionary <string, Object>;
                seed                  = new returnGetEntitlement();
                seed.Application      = HELPERS.SafeGenericDictionaryLookup(www, "Application");
                seed.AuthObjName      = HELPERS.SafeGenericDictionaryLookup(www, "AuthObjName");
                seed.AuthObjValue     = HELPERS.SafeGenericDictionaryLookup(www, "AuthObjValue");
                seed.EntitlementName  = HELPERS.SafeGenericDictionaryLookup(www, "EntitlementName");
                seed.EntitlementValue = HELPERS.SafeGenericDictionaryLookup(www, "EntitlementValue");
                seed.FieldSecName     = HELPERS.SafeGenericDictionaryLookup(www, "FieldSecName");
                seed.FieldSecValue    = HELPERS.SafeGenericDictionaryLookup(www, "FieldSecValue");
                seed.Level4SecName    = HELPERS.SafeGenericDictionaryLookup(www, "Level4SecName");
                seed.Level4SecValue   = HELPERS.SafeGenericDictionaryLookup(www, "Level4SecValue");
                seed.Platform         = HELPERS.SafeGenericDictionaryLookup(www, "Platform");
                seed.RoleType         = HELPERS.SafeGenericDictionaryLookup(www, "RoleType");
                seed.StandardActivity = HELPERS.SafeGenericDictionaryLookup(www, "StandardActivity");
                seed.System           = HELPERS.SafeGenericDictionaryLookup(www, "System");
            }

            string THEMANIFEST;

            if (arg2 != null)
            {
                THEMANIFEST = HELPERS.CalcManifestString(seed, arg2);
            }
            else
            {
                THEMANIFEST = HELPERS.CalcManifestString(seed);
            }


            resp.Write(THEMANIFEST.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;"));
        }
Example #6
0
        public void Grid1_DeleteCommand(object sender, ComponentArt.Web.UI.GridItemEventArgs e)
        {
            int idTassToDel = int.Parse(e.Item["c_id"].ToString());

            try
            {
                IEntitlement engine = new IEntitlement(HELPERS.NewOdbcConn());
                engine.DeleteEntitlement(idTassToDel);
            }
            catch (Exception exxx)
            {
                throw new Exception("Deletion failed - this entitlement is in use in an assignment in at least one workspace.");
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            try
            {
                IDentitlement = int.Parse(this.Request.Params["entid"]);
            }
            catch (Exception)
            {
                // Whilst debugging
                IDentitlement = 64622;
            }

            IEntitlement engine = new IEntitlement(HELPERS.NewOdbcConn());

            THEent = engine.GetEntitlement(IDentitlement);

            // There is currently no concept of this page being "read only".
            // It creates workspaces as needed; it is not performed in
            // any particular workspace.
            this.PANELcond_readonly.Visible = false;
        }
Example #8
0
        private Workbook XLSXgenerate
            (HttpContext context, OdbcDataReader dr, IMVFormula ENGINEmanif, IEntitlement ENGINEwsent,
            bool singlesheet, int idWS, string strRoleList)
        {
            Workbook book = new Workbook();

            Worksheet sheet = null;

            Worksheet sheetRoleMetadata = null;

            Worksheet sheetEASetMetadata = null;

            int IDsubprocess = -1;



            int colnumFormula      = -1;
            int colnumStatus       = -1;
            int colnumBusRole      = -1;
            int colnumIdSubprocess = -1;

            string currolename = null;

            WorksheetRow row;

            sheetEASetMetadata = book.Worksheets.Add("Context");

            // Create an annotation row with info about the snapshot context.
            RoleMetadata mdat = this.GenerateRoleMetadata(null, idWS);
            bool         boolMetadataHasBeenEmitted = false;


            sheetRoleMetadata = book.Worksheets.Add("Role Metadata");


            if (singlesheet)
            {
                sheet = book.Worksheets.Add("Technical Framework");



                row = sheet.Table.Rows.Add();

                for (int i = 0; i < dr.VisibleFieldCount; i++)
                {
                    switch (dr.GetName(i) as string)
                    {
                    case "Formula":
                        colnumFormula = i;
                        break;

                    case "Mod":
                        colnumStatus = i;
                        row.Cells.Add(dr.GetName(i));
                        break;

                    /*
                     * case "EntID":
                     * break;
                     */
                    case "BusRole":
                        colnumBusRole = i;
                        row.Cells.Add(dr.GetName(i));
                        break;

                    case "IDSubProcess":
                        colnumIdSubprocess = i;
                        break;

                    default:
                        row.Cells.Add(dr.GetName(i));
                        break;
                    }
                }
                row.Cells.Add("Manifest");
                row.Cells.Add("AutoCorrectedNulls");
            }



            if (colnumBusRole < 0)
            {
                // We haven't even gone through the SQL result's columns to determine
                // key column numbers yet!  Special case donehere.
                for (int i = 0; i < dr.VisibleFieldCount; i++)
                {
                    switch (dr.GetName(i) as string)
                    {
                    case "Formula":
                        colnumFormula = i;
                        break;

                    case "Mod":
                        colnumStatus = i;
                        break;

                    /*
                     * case "EntID":
                     * break;
                     * */
                    case "Business_Role_Name":
                        colnumBusRole = i;
                        break;

                    case "IDSubProcess":
                        colnumIdSubprocess = i;
                        break;

                    default:
                        break;
                    }
                }
            }


            // FOR EACH ROW

            while (dr.Read())
            {
                try
                {
                    if (!boolMetadataHasBeenEmitted)
                    {
                        EmitMetadata(sheetEASetMetadata, ref mdat, dr, colnumFormula);
                        boolMetadataHasBeenEmitted = true;
                    }


                    string newrolename = dr.GetValue(colnumBusRole) as string;

                    IDsubprocess = (int)dr.GetValue(colnumIdSubprocess);

                    if (singlesheet)
                    {
                        bool isBabySheet = false;
                        if (currolename == null)
                        {
                            currolename = newrolename;
                            isBabySheet = true;
                        }
                        else if (currolename != newrolename)
                        {
                            currolename = newrolename;
                            isBabySheet = true;
                        }

                        if (isBabySheet)
                        {
                            WorksheetRow row2 = null;

                            if (sheetRoleMetadata.Table.Rows.Count < 3)
                            {
                                row2 = sheetRoleMetadata.Table.Rows.Add();
                                row2.Cells.Add("ROLE OWNERS/APPROVERS");
                                row2 = sheetRoleMetadata.Table.Rows.Add();
                                row2 = sheetRoleMetadata.Table.Rows.Add();
                                row2.Cells.Add("Role Name");
                                row2.Cells.Add("Type");
                                row2.Cells.Add("EID");
                                row2.Cells.Add("Name");
                                row2.Cells.Add("Geography");
                            }

                            mdat = this.GenerateRoleMetadata(newrolename, idWS);
                            foreach (RoleMetadataOwner x in mdat.ROLEownersident)
                            {
                                row2 = sheetRoleMetadata.Table.Rows.Add();
                                row2.Cells.Add(newrolename);
                                row2.Cells.Add(x.rank);
                                row2.Cells.Add(x.EID);
                                row2.Cells.Add(x.name);
                                row2.Cells.Add(x.geography);
                            }
                        }
                        //                    GenMetadataSpreadsheetRow(sheetRoleMetadata, "--------", "-----------------------");
                    }



                    if (!singlesheet)
                    {
                        bool isBabySheet = false;

                        //Note: Excel cannot handle worksheet names longer than 31 chars
                        string truncsheetname = newrolename;
                        if (truncsheetname.Length > 31)
                        {
                            truncsheetname = truncsheetname.Substring(truncsheetname.Length - 31);
                        }

                        if (currolename == null)
                        {
                            sheet       = book.Worksheets.Add(truncsheetname);
                            currolename = newrolename;
                            isBabySheet = true;
                        }
                        else if (currolename != newrolename)
                        {
                            sheet       = book.Worksheets.Add(truncsheetname);
                            isBabySheet = true;
                        }


                        if (isBabySheet)
                        {
                            // Create an annotation row with info about the snapshot context.
                            mdat = this.GenerateRoleMetadata(newrolename, idWS);

                            GenMetadataSpreadsheetRow(sheet, "Role name:", mdat.rolename);
                            if (mdat.ROLEownersident.Count == 0)
                            {
                                GenMetadataSpreadsheetRow(sheet, "Role owners:", "NOT YET ENTERED");
                            }
                            else
                            {
                                foreach (object x in mdat.ROLEownersident)
                                {
                                    GenMetadataSpreadsheetRow(sheet, "Principal: ", x.ToString());
                                }
                            }
                            GenMetadataSpreadsheetRow(sheet, "----------", "---------------------");


                            /*
                             *
                             * row = sheet.Table.Rows.Add();
                             * row.Cells.Add(annotation);
                             */


                            currolename = newrolename;
                            row         = sheet.Table.Rows.Add();

                            for (int i = 0; i < dr.VisibleFieldCount; i++)
                            {
                                switch (dr.GetName(i) as string)
                                {
                                case "Formula":
                                    colnumFormula = i;
                                    break;

                                case "Mod":
                                    colnumStatus = i;
                                    row.Cells.Add(dr.GetName(i));
                                    break;

                                /*
                                 * case "EntID":
                                 * break;
                                 * */
                                case "BusRole":
                                    colnumBusRole = i;
                                    row.Cells.Add(dr.GetName(i));
                                    break;

                                case "IDSubProcess":
                                    colnumIdSubprocess = i;
                                    break;

                                default:
                                    row.Cells.Add(dr.GetName(i));
                                    break;
                                }
                            }
                            row.Cells.Add("Manifest");
                        }
                    }


                    row = sheet.Table.Rows.Add();

                    int IDwsentrow = (int)(dr.GetValue(0));

                    returnGetEntitlement OBJwsent =
                        ENGINEwsent.GetEntitlement(IDwsentrow);

                    string appname = OBJwsent.Application;

                    returnListMVFormula[] LISTformulas =
                        ENGINEmanif.ListMVFormula(null, "\"KEYapplication\" = ?",
                                                  new string[] { appname }, "");

                    string STRformula = "";

                    try
                    {
                        returnListMVFormula TheFormula = LISTformulas[0];
                        if (TheFormula.Formula == null)
                        {
                            TheFormula.Formula = "";
                        }

                        STRformula = HttpUtility.HtmlDecode(TheFormula.Formula.Trim());
                    }
                    catch (Exception eee) { }

                    if (STRformula == "")
                    {
                        STRformula = "\"TBD - " + appname + "\"";
                        //context.Response.Write("Error: the manifest formula for this application has NOT been specified.");
                        //return;
                    }

                    // We have the formula; now we can evaluate.
                    Evaluator ev = new Evaluator(Eval3.eParserSyntax.cSharp, false);
                    ev.AddEnvironmentFunctions(this);
                    ev.AddEnvironmentFunctions(new ManifestFormulaEvaluatorFunctions(OBJwsent));

                    opCode lCode;

                    bool doMakeNullRepair2ndTry = false;

                    try
                    {
                        lCode = ev.Parse(STRformula);
                    }
                    catch (Exception e)
                    {
                        row.Cells.Add("The formula for " + appname + " has parse errors: " + e.ToString());
                        return(book);
                    }

                    object RESLT = null;
                    try
                    {
                        RESLT = lCode.value;
                    }
                    catch (NullReferenceException enull)
                    {
                        //row.Cells.Add("Interpreting the formula for this application resulted in an error because of references to one or more fields that are NULL in value.");
                        //RESLT = "[ERROR: reference to one or more fields with null values]";
                        //row = sheet.Table.Rows.Add();
                        doMakeNullRepair2ndTry = true;
                    }
                    catch (Exception e)
                    {
                        row.Cells.Add("Interpreting the formula for this application resulted in this exception: " + e.ToString());
                        RESLT = "[ERROR: see line above for details]";
                        row   = sheet.Table.Rows.Add();
                    }



                    if (doMakeNullRepair2ndTry)
                    {
                        int repairCount = 0;
                        // NULLs caused failures in the 1st try.
                        // We will thus now repair all nulls and try again.
                        // If succeeds, we will generate a useable row but the final column
                        //   will alert the users to the fact that autorepair was performed.

                        TurnNullsToEmptyStrings(ref OBJwsent, ref repairCount);
                        if (repairCount == 0)
                        {
                            throw new Exception("ASSERTION FAILURE: null fields expected but not found");
                        }


                        opCode lCode2;

                        ev = new Evaluator(Eval3.eParserSyntax.cSharp, false);
                        ev.AddEnvironmentFunctions(this);
                        ev.AddEnvironmentFunctions(new ManifestFormulaEvaluatorFunctions(OBJwsent));
                        lCode2 = ev.Parse(STRformula);

                        try
                        {
                            RESLT = lCode2.value;
                        }
                        catch (Exception e)
                        {
                            row.Cells.Add("2nd try: Interpreting the formula for this application resulted in this exception: " + e.ToString());
                            RESLT = "[ERROR: see line above for details]";
                            row   = sheet.Table.Rows.Add();
                        }
                    }


                    // NOW READY TO EMIT THE COLUMNS

                    for (int i = 0; i < dr.VisibleFieldCount; i++)
                    {
                        if (i != -342350) /*used to be != 0 */
                        {
                            if ((i != colnumFormula) && (i != colnumIdSubprocess))
                            {
                                if (i == colnumStatus)
                                {
                                    string statSemantics = "ERR";
                                    switch (dr.GetValue(i) as string)
                                    {
                                    case "N":
                                        statSemantics = "New"; break;

                                    case "P":
                                        statSemantics = "New"; break;

                                    case "X":
                                        statSemantics = "Deleted"; break;

                                    case "A":
                                        statSemantics = ""; break;
                                    }
                                    row.Cells.Add(statSemantics);
                                }
                                else
                                {
                                    row.Cells.Add(dr.GetValue(i).ToString());
                                }
                            }
                        }
                    }

                    row.Cells.Add(RESLT as string);
                    row.Cells.Add(doMakeNullRepair2ndTry ? "Y" : "");
                }
                catch (Exception e)
                {
                    row = sheet.Table.Rows.Add();
                    row.Cells.Add(e.ToString() + e.StackTrace.ToString());
                }
            }



            EmitRoleMetadata_AdditionalRoles
                (sheetRoleMetadata, strRoleList, idWS, IDsubprocess);
            EmitRoleMetadata_FuncAppEntsByRole
                (sheetRoleMetadata, strRoleList, idWS, IDsubprocess);
            EmitRoleMetadata_SubProcessActivities
                (sheetRoleMetadata, strRoleList, idWS, IDsubprocess);



            return(book);
        }
        protected void ONCLICK_BulkRemove(object sender, EventArgs e)
        {
            if (this.FileUpload_BulkRemove.HasFile)
            {
                string pathTempFolder = System.IO.Path.GetTempPath();
                string pathTempFile   = System.IO.Path.GetTempFileName();
                FileUpload_BulkRemove.SaveAs(pathTempFile);
                DataTable dt = HELPERS.LoadCsv(pathTempFolder,
                                               System.IO.Path.GetFileName(pathTempFile));
                if (dt != null)
                {
                    if (dt.Columns.Count != 2)
                    {
                        throw new Exception("The uploaded CSV file has more than two columns.");
                    }


                    Queue RETmsgs = new Queue();

                    IEnumerator <System.Data.DataRow> x =
                        (IEnumerator <System.Data.DataRow>)dt.Rows.GetEnumerator();

                    int recordseq = 0;
                    int okCount   = 0;

                    IBusRole       ENGINEbusrole = new IBusRole(HELPERS.NewOdbcConn());
                    IEntitlement   ENGINE        = new IEntitlement(HELPERS.NewOdbcConn());
                    IEntAssignment IEA           = new IEntAssignment(HELPERS.NewOdbcConn());


                    while (x.MoveNext())
                    {
                        recordseq++;

                        string rolename   = x.Current[0].ToString();
                        string privstring = x.Current[1].ToString();

                        try
                        {
                            HELPERS.RemoveEntitlementFromRole(rolename, privstring, ENGINEbusrole, ENGINE, IEA);
                            okCount++;
                        }
                        catch (Exception ee)
                        {
                            RETmsgs.Enqueue("REC#" + recordseq.ToString() + ": " + ee.Message);
                        }
                    }
                    RETmsgs.Enqueue("------------------");
                    RETmsgs.Enqueue("Number of records processed without message: " + okCount.ToString());
                    if (RETmsgs.Count > 0)
                    {
                        string strMsgs = "";
                        foreach (object objMsg in RETmsgs.ToArray())
                        {
                            strMsgs += "\n" + objMsg.ToString();
                        }
                        TXTimportEngineMessages.Text  = strMsgs;
                        DIVimportFeeback.Visible      = true;
                        PANELcond_AbortUpload.Visible = false;
                        PANELcond_AllowUpload.Visible = false;
                    }
                }
            }
        }
Example #10
0
        private void ComputePrivilegeString(HttpContext context, IMVFormula ENGINEmanif, IEntitlement ENGINEwsent, int IDwsentrow, out object RESLT)
        {
            RESLT = "";

            returnGetEntitlement OBJwsent =
                ENGINEwsent.GetEntitlement(IDwsentrow);

            int repaircount = 0;

            TurnNullsToEmptyStrings(ref OBJwsent, ref repaircount);

            string appname = OBJwsent.Application;

            returnListMVFormula[] LISTformulas =
                ENGINEmanif.ListMVFormula(null, "\"KEYapplication\" = ?",
                                          new string[] { appname }, "");

            string STRformula = "";

            try
            {
                returnListMVFormula TheFormula = LISTformulas[0];
                if (TheFormula.Formula == null)
                {
                    TheFormula.Formula = "";
                }

                STRformula = HttpUtility.HtmlDecode(TheFormula.Formula.Trim());
            }
            catch (Exception eee) { }

            if (STRformula == "")
            {
                STRformula = "\"TBD - " + appname + "\"";
                //context.Response.Write("Error: the manifest formula for this application has NOT been specified.");
                //return;
            }

            // We have the formula; now we can evaluate.
            Evaluator ev = new Evaluator(Eval3.eParserSyntax.cSharp, false);

            ev.AddEnvironmentFunctions(this);
            ev.AddEnvironmentFunctions(new ManifestFormulaEvaluatorFunctions(OBJwsent));

            opCode lCode;

            try
            {
                lCode = ev.Parse(STRformula);
            }
            catch (Exception e)
            {
                context.Response.Write("The formula [[" + STRformula + "]] for this app [[" + appname + "]] has parse errors: " + e.ToString());
                return;
            }


            try
            {
                RESLT = lCode.value;
            }
            catch (Exception e)
            {
                RESLT = "NULL";
                //context.Response.Write("Interpreting the formula for this app resulted in errors: " + e.ToString());
                //return;
            }
            return;
        }
Example #11
0
        private void CSVgenerate_FullDetail(HttpContext context, OdbcDataReader dr, IMVFormula ENGINEmanif, IEntitlement ENGINEwsent,
                                            bool BOOLgenerateHeader)
        {
            int colnumFormula = -1;


            if (BOOLgenerateHeader)
            {
                for (int i = 0; i < dr.VisibleFieldCount; i++)
                {
                    switch (dr.GetName(i) as string)
                    {
                    case "Formula":
                        colnumFormula = i;
                        break;

                    /*
                     * case "EntID":
                     * break;
                     */
                    default:
                        context.Response.Write(CSVquoteize(dr.GetName(i).Replace('_', ' ')) + ",");
                        break;
                    }
                }
                context.Response.Write("Privilege String");
                context.Response.Write("\n");
            }


            // FOR EACH ROW

            while (dr.Read())
            {
                try
                {
                    int IDwsentrow = (int)(dr.GetValue(0));

                    object RESLT;
                    ComputePrivilegeString(context, ENGINEmanif, ENGINEwsent, IDwsentrow, out RESLT);

                    for (int i = 0; i < dr.VisibleFieldCount; i++)
                    {
                        if (i != 0)
                        {
                            if (i != colnumFormula)
                            {
                                context.Response.Write(CSVquoteize(dr.GetValue(i) as string) + ",");
                            }
                        }
                    }
                    string resultAsStr = RESLT.ToString().Replace(" ", "");
                    context.Response.Write(CSVquoteize(resultAsStr));
                    context.Response.Write("\n");
                }

                catch (Exception e)
                {
                    context.Response.Write(e.ToString() + e.StackTrace.ToString() + "\n");
                }
            }

            return;
        }
Example #12
0
        private void CSVgenerate_IDMreconciliation_3column
            (HttpContext context, OdbcDataReader dr, IMVFormula ENGINEmanif, IEntitlement ENGINEwsent,
            bool BOOLgenerateHeader)
        {
            int colnumFormula   = -1;
            int colnumRolename  = -1;
            int colnumRoledescr = -1;

            OdbcConnection tempconn    = HELPERS.NewOdbcConn_FORCE();
            IBusRole       engineBR    = new IBusRole(tempconn);
            IBusRoleOwner  engineBRole = new IBusRoleOwner(tempconn);

            Dictionary <string, bool> DICTboolHaveSeenThisRole = new Dictionary <string, bool>();

            for (int i = 0; i < dr.VisibleFieldCount; i++)
            {
                switch (dr.GetName(i) as string)
                {
                case "Formula":
                    colnumFormula = i;
                    break;

                case "Business_Role_Name":
                    colnumRolename = i;
                    break;

                case "Business_Role_Description":
                    colnumRoledescr = i;
                    break;
                }
            }

            if (BOOLgenerateHeader)
            {
                context.Response.Write("RoleName,Entitlement,ComparisonObject\n");
            }


            // FOR EACH ROW

            while (dr.Read())
            {
                try
                {
                    int IDwsentrow = (int)(dr.GetValue(0));

                    object RESLT;
                    ComputePrivilegeString(context, ENGINEmanif, ENGINEwsent, IDwsentrow, out RESLT);
                    string resultAsStr = RESLT.ToString().Replace(" ", "");

                    // If the first time we are seeing this role, emit its description text.
                    if (!DICTboolHaveSeenThisRole.ContainsKey(dr.GetValue(colnumRolename) as string))
                    {
                        string rolename = dr.GetValue(colnumRolename) as string;
                        context.Response.Write(CSVquoteize(rolename) + ",");
                        context.Response.Write(CSVquoteize(dr.GetValue(colnumRoledescr) as string) + ",");
                        context.Response.Write("RoleDescription");
                        context.Response.Write("\n");
                        DICTboolHaveSeenThisRole[rolename] = true;
                        returnListBusRole[] retFindBRole
                            = engineBR.ListBusRole(null, "\"Name\" = ?", new string[] { rolename }, "");
                        int roleID = retFindBRole[0].ID;
                        returnListBusRoleOwnerByBusRole[] roleowners
                            = engineBRole.ListBusRoleOwnerByBusRole(null, roleID);
                        foreach (returnListBusRoleOwnerByBusRole roleowner in roleowners)
                        {
                            context.Response.Write(CSVquoteize(rolename) + ",");
                            context.Response.Write(roleowner.EID + ",");
                            context.Response.Write(roleowner.RankFriendly.Replace(" ", ""));
                            context.Response.Write("\n");
                        }
                    }

                    context.Response.Write(CSVquoteize(dr.GetValue(colnumRolename) as string) + ",");

                    context.Response.Write(CSVquoteize(resultAsStr.Replace(" ", "")) + ",");
                    context.Response.Write("Entitlement");
                    context.Response.Write("\n");
                }

                catch (Exception e)
                {
                    context.Response.Write(e.ToString() + e.StackTrace.ToString() + "\n");
                }
            }

            return;
        }
Example #13
0
        public void ProcessRequest(HttpContext context)
        {
            int idWS = Int32.Parse(context.Request.Params["id"]);

            // Legal formats are:  CSV and XLSX
            string strFormat = "XLSX";

            try
            {
                strFormat = context.Request.Params["fmt"].ToUpper();
            }
            catch (Exception eign) { }


            string annotation = context.Request.Params["name"];

            // Comma-separated list of busrole ID numbers e.g. 34,38,47
            string strRoleList = "";

            try { strRoleList = context.Request.Params["brol"]; }
            catch (Exception eignore) { strRoleList = ""; }


            // Default TRUE
            bool singlesheet = true;

            try { singlesheet = bool.Parse(context.Request.Params["singlesheet"]); }
            catch (Exception eignore) { singlesheet = true; }

            // Default FALSE
            bool showOnlyDeltas = false;

            try { showOnlyDeltas = bool.Parse(context.Request.Params["deltasonly"]); }
            catch (Exception eignore) { showOnlyDeltas = false; }

            // Default TRUE
            bool showStatusColumn = true;

            try { showStatusColumn = bool.Parse(context.Request.Params["showstatus"]); }
            catch (Exception eignore) { showStatusColumn = true; }



            // THE FULL-DETAIL FORMATTING OPTION OVERRIDES ALL OTHER OPTIONS!

            // Default FALSE
            bool BOOLformatFullDetail = false;

            try { BOOLformatFullDetail = bool.Parse(context.Request.Params["FMTfulldetail"]); }
            catch (Exception eignore) { BOOLformatFullDetail = false; }



            bool BOOLformatIdmReconcil = false;

            try { BOOLformatIdmReconcil = bool.Parse(context.Request.Params["FMTidm3col"]); }
            catch (Exception eignore) { BOOLformatIdmReconcil = false; }



            if (BOOLformatFullDetail || BOOLformatIdmReconcil)
            {
                strFormat        = "CSV";
                showOnlyDeltas   = false;
                singlesheet      = true;
                showStatusColumn = false;
            }



            OdbcCommand cmd = new OdbcCommand();

            cmd.Connection = HELPERS.NewOdbcConn();


            if (strFormat == "CSV")
            {
                context.Response.ContentType = "text/csv";
                context.Response.AddHeader("Content-Disposition",
                                           "filename=export.csv;attachment");
            }


            string extraconds = "";

            if (strRoleList != null)
            {
                if (strRoleList != "")
                {
                    extraconds = " AND (TEASS.c_r_BusRole IN (" + strRoleList + ")) ";
                }
            }


            if (showOnlyDeltas)
            {
                extraconds +=
                    " AND (TEASS.c_u_Status NOT IN ('A')) ";
            }
            else
            {
                extraconds +=
                    " AND (TENT.c_u_Status NOT IN ('X')) ";
            }



            cmd.CommandText = @"

SELECT 
TENT.c_id as EntID,";



            if (showStatusColumn)
            {
                cmd.CommandText +=
                    "TEASS.c_u_Status as Mod,";
            }
            else
            {
                // If not showing status column, this should be an active entitlement set, not a workspace.
                // Thus, eliminate rows that are marked as having been deleted when that active EASet was published.
                extraconds +=
                    " AND (TEASS.c_u_Status NOT IN ('X')) ";
            }


            cmd.CommandText += @"
BROL.c_u_Name as Business_Role_Name,
BROL.c_u_Description as Business_Role_Description,
TENT.c_u_StandardActivity as Standard_Activity,
TENT.c_u_RoleType as Role_Type,
TENT.c_u_Application as Application,
TENT.c_u_System as System,
TENT.c_u_Platform as Platform,
TENT.c_u_EntitlementName as Entitlement_Name,
TENT.c_u_EntitlementValue as Entitlement_Value,
TENT.c_u_AuthObjValue as Authorization_Object_Value,
TENT.c_u_FieldSecName as Field_Security_Name,
TENT.c_u_FieldSecValue as Field_Security_Value,
TENT.c_u_Level4SecName as Fourth_Level_Security_Name,
TENT.c_u_Level4SecValue as Fourth_Level_Security_Value,
TENT.c_u_Commentary as Commentary,
MVF.c_u_Formula as Formula,
SUBPR.c_u_Name as NameSubProcess,
SUBPR.c_id as IDSubProcess,
PR.c_u_Name as NameProcess

FROM 
   t_RBSR_AUFW_u_EntAssignment TEASS


LEFT OUTER JOIN 
   t_RBSR_AUFW_u_Entitlement TENT
ON
   TEASS.c_r_Entitlement = TENT.c_id


LEFT OUTER JOIN 
   t_RBSR_AUFW_u_EntAssignmentSet TEASET
ON
   TEASS.c_r_EntAssignmentSet = TEASET.c_id


LEFT OUTER JOIN 
   t_RBSR_AUFW_u_BusRole BROL
ON
   BROL.c_id = TEASS.c_r_BusRole


LEFT OUTER JOIN 
   t_RBSR_AUFW_u_SubProcess SUBPR
ON
   SUBPR.c_id = TEASET.c_r_SubProcess


LEFT OUTER JOIN 
   t_RBSR_AUFW_u_Process PR
ON
   PR.c_id = SUBPR.c_r_Process


LEFT OUTER JOIN
   t_RBSR_AUFW_u_MVFormula MVF
ON
   MVF.c_u_KEYapplication = TENT.c_u_Application


WHERE
   (TEASS.c_r_EntAssignmentSet = ?) 
" + extraconds + " ORDER BY TEASS.c_r_BusRole;";



            cmd.Parameters.Add("c_r_EditingWorkspace", OdbcType.Int);
            cmd.Parameters["c_r_EditingWorkspace"].Value = (object)idWS;
            OdbcDataReader dr = cmd.ExecuteReader();


            OdbcConnection conn2       = HELPERS.NewOdbcConn_FORCE();
            IMVFormula     ENGINEmanif = new IMVFormula(conn2);
            IEntitlement   ENGINEwsent = new IEntitlement(conn2);



            if (strFormat == "CSV")
            {
                if (BOOLformatFullDetail)
                {
                    CSVgenerate_FullDetail(context, dr, ENGINEmanif, ENGINEwsent, true /*generate header row*/);
                }
                if (BOOLformatIdmReconcil)
                {
                    CSVgenerate_IDMreconciliation_3column
                        (context, dr, ENGINEmanif, ENGINEwsent, true /*generate header row*/);
                }
            }

            if (strFormat == "XLSX")
            {
                Workbook book = XLSXgenerate(context, dr, ENGINEmanif, ENGINEwsent, singlesheet, idWS, strRoleList);
                context.Response.ContentType = "application/vnd.xls"; // used to be "text/xml" but never worked in chrome

                // If the suffix is xlsx, it works in OpenOffice but not in MSOffice!
                // Now trying xls !
                context.Response.AddHeader("Content-Disposition",
                                           "filename=export.xls;attachment");

                book.Save(context.Response.OutputStream);
            }


            dr.Close();
        }
Example #14
0
        /*
         * The version 2 coalesces vectors that are identical
         * except for the business role.  Right now it uses a simplistic
         * algorithm that includes the commentary column (not a good thing)
         * and that doesn't look for variations that would be considered
         * not important (whitespaces?).
         */
        public static void ImportDataTableAsNewEntAssignmentSet_v2(
            DataTable dt, int IDuser, int IDsubpr, System.Data.Odbc.OdbcConnection conn)
        {
            IUser             Iuser  = new IUser(conn);
            ISubProcess       Isubpr = new ISubProcess(conn);
            IEntAssignmentSet Ieaset = new IEntAssignmentSet(conn);
            IEntAssignment    Iea    = new IEntAssignment(conn);
            IEntitlement      Ientit = new IEntitlement(conn);
            IBusRole          Ibr    = new IBusRole(conn);

            int IDneweas =
                Ieaset.NewEntAssignmentSet(false, DateTime.Now, "Import from CSV", IDsubpr, IDuser);

            // These Get function are only useful for a read-only view of fields;
            // not for generating subordinate entities.
            returnGetEntAssignmentSet neweas = Ieaset.GetEntAssignmentSet(IDneweas);

            IEnumerator <System.Data.DataRow> x =
                (IEnumerator <System.Data.DataRow>)dt.Rows.GetEnumerator();


            Hashtable signatures = new Hashtable();

            while (x.MoveNext())
            {
                int IDbusrole;

                if (x.Current[0].Equals(System.DBNull.Value))
                {
                    // Ignore any line with no value in the first field.
                    // Often the end of the csv file has just lots of blank rows.
                    continue;
                }

                // Make sure business role object exists; create if not.
                string busrole         = (string)(x.Current["BusRole"]);
                returnListBusRole[] xx = Ibr.ListBusRole(null, "\"Name\" like ?",
                                                         new string[] { busrole }, "");
                if (xx.Length < 1)
                {
                    // MUST ADD NEW ONE
                    IDbusrole =
                        Ibr.NewBusRole(busrole, x.Current["Business Role Description"] as string, IDsubpr);
                }
                else
                {
                    IDbusrole = xx[0].ID;
                }


                /* Create a "signature" for this entitlement vector so we can
                 * register it and also see if it's been seen before.
                 */
                string thisSignature =
                    x.Current["Standard Activity"] as string + "/\\" +
                    x.Current["Type"] as string + "/\\" +
                    x.Current["System"] as string + "/\\" +
                    x.Current["Platform"] as string + "/\\" +
                    x.Current["Entitlement Description"] as string + "/\\" +
                    x.Current["Entitlement Value"] as string + "/\\" +
                    "" + "/\\" +
                    x.Current["Authorization Object"] as string + "/\\" +
                    x.Current["Field-Level Security Name"] as string + "/\\" +
                    x.Current["Field-Level Security Value"] as string + "/\\" +
                    x.Current["4th Level Security Name"] as string + "/\\" +
                    x.Current["4th Level Security Value"] as string;

                if (signatures.ContainsKey(thisSignature))
                {
                    // Already seen before, so just add this bus.role
                    // to the list of busroles tied to this.
                    int IDnewent = (int)signatures[thisSignature];

                    int IDnewentass = Iea.NewEntAssignment
                                          (IDneweas, IDbusrole, IDnewent);
                }
                else
                {
                    int IDnewent = Ientit.NewEntitlement(
                        x.Current["Standard Activity"] as string,
                        x.Current["Type"] as string,
                        x.Current["System"] as string,
                        x.Current["Platform"] as string,
                        x.Current["Entitlement Description"] as string,
                        x.Current["Entitlement Value"] as string);

                    Ientit.SetEntitlement(IDnewent,
                                          x.Current["Standard Activity"] as string,
                                          x.Current["Type"] as string,
                                          x.Current["System"] as string,
                                          x.Current["Platform"] as string,
                                          x.Current["Entitlement Description"] as string,
                                          x.Current["Entitlement Value"] as string,
                                          "",
                                          x.Current["Authorization Object"] as string,
                                          x.Current["Field-Level Security Name"] as string,
                                          x.Current["Field-Level Security Value"] as string,
                                          x.Current["4th Level Security Name"] as string,
                                          x.Current["4th Level Security Value"] as string,
                                          x.Current["Additional Comments"] as string,
                                          x.Current["Manifest Value"] as string);

                    int IDnewentass = Iea.NewEntAssignment
                                          (IDneweas, IDbusrole, IDnewent);

                    signatures.Add(thisSignature, IDnewent);
                }
            }
        }
Example #15
0
        /* Warning: this is still singleton-based */

        /* This just takes whatever is the active EAS for the given subprocess,
         * but probably should receive the EAS ID as input.
         */
        public static void WorkspaceCreate(OdbcConnection conn, int IDsubprocess, string commentary)
        {
            IEditingWorkspace Iws = new IEditingWorkspace(conn);

            // BUG: hardwired user ID!
            int IDnewWS = Iws.NewEditingWorkspace(commentary, DateTime.Now, IDsubprocess, 1);


            // Still singleton!!
            EmptyTable(conn, "t_r_BusRoleWorkspaceEntitlement");
            EmptyTable(conn, "WorkspaceEntitlement");


            IWorkspaceEntitlement Iwserows = new IWorkspaceEntitlement(conn);
            IEntAssignmentSet     Ieas     = new IEntAssignmentSet(conn);
            IEntitlement          Ient     = new IEntitlement(conn);

            /* See above comment: this hardwared active=true logic is not good */
            returnListEntAssignmentSetBySubProcess[] _IDeas =
                Ieas.ListEntAssignmentSetBySubProcess(null, "\"BOOLisActive\" = 1", new string[] { }, "", IDsubprocess);
            int IDeas = _IDeas[0].ID;


            /* Find the list of EAssignments to bring over to the Workspace */
            IEntAssignment Iea = new IEntAssignment(conn);

            returnListEntAssignmentByEntAssignmentSet[] _IDea =
                Iea.ListEntAssignmentByEntAssignmentSet(null, "", new string[] {}, "", IDeas);
            int numToConvert = _IDea.Length;

            Hashtable dictEntVectorClones = new Hashtable();

            foreach (returnListEntAssignmentByEntAssignmentSet i in _IDea)
            {
                int IDentitlementVector = i.EntitlementID;
                int IDbusrole           = i.BusRoleID;
                int IDcloneEntVector    = -88;

                if (dictEntVectorClones.ContainsKey(IDentitlementVector))
                {
                    // The entitlement vector was already cloned in the workspace.
                    IDcloneEntVector =
                        (int)dictEntVectorClones[IDentitlementVector];
                }
                else
                {
                    // MUST CLONE THE VECTOR
                    returnGetEntitlement theE = Ient.GetEntitlement(IDentitlementVector);

                    IDcloneEntVector =
                        Iwserows.NewWorkspaceEntitlement
                            (theE.StandardActivity,
                            theE.RoleType,
                            theE.System,
                            theE.Platform,
                            theE.EntitlementName,
                            theE.EntitlementValue,
                            IDnewWS);

                    dictEntVectorClones.Add(IDentitlementVector, IDcloneEntVector);
                }

                // We have the bus.role ID and we now have the ID of the
                // WorkspaceEntitlement object.
                // We now create the tie that binds them.
                RecordLinkFromBusRoleToWSEntitVector
                    (conn, IDbusrole, IDcloneEntVector, IDnewWS);
            }
        }
Example #16
0
        public void ProcessRequest(HttpContext context)
        {
            OdbcConnection conn = HELPERS.NewOdbcConn();

            int IDwsentrow = int.Parse(context.Request.Params["IDwsent"]);


            context.Response.ContentType = "text/plain";


            IMVFormula   ENGINEmanif = new IMVFormula(conn);
            IEntitlement ENGINEwsent = new IEntitlement(conn);

            OBJwsent =
                ENGINEwsent.GetEntitlement(IDwsentrow);

            string appname = OBJwsent.Application;

            returnListMVFormula[] LISTformulas =
                ENGINEmanif.ListMVFormula(null, "\"KEYapplication\" = ?",
                                          new string[] { appname }, "");

            // Currently, we only allow one formula per manifest.
            // Later we might have richer selection process where other fields
            // get to play a role in which formula is used.
            if (LISTformulas.Length > 1)
            {
                context.Response.Write("Error: more than one manifest formula for this app.");
                return;
            }


            if (LISTformulas.Length < 1)
            {
                context.Response.Write("Error: there is no manifest formula for this app.");
                return;
            }

            returnListMVFormula TheFormula = LISTformulas[0];

            if (TheFormula.Formula == null)
            {
                TheFormula.Formula = "";
            }

            string STRformula = TheFormula.Formula.Trim();

            if (STRformula == "")
            {
                context.Response.Write("Error: the manifest formula for this application has NOT been specified.");
                return;
            }

            // We have the formula; now we can evaluate.
            Evaluator ev = new Evaluator(Eval3.eParserSyntax.cSharp, false);

            ev.AddEnvironmentFunctions(this);
            ev.AddEnvironmentFunctions(new ManifestFormulaEvaluatorFunctions(OBJwsent));

            opCode lCode;

            try
            {
                lCode = ev.Parse(STRformula);
            }
            catch (Exception e)
            {
                context.Response.Write("The formula [[" + STRformula + "]] for this app [[" + appname + "]] has parse errors: " + e.ToString());
                return;
            }

            object RESLT;

            try
            {
                RESLT = lCode.value;
            }
            catch (Exception e)
            {
                context.Response.Write("Interpreting the formula for this app resulted in errors: " + e.ToString());
                return;
            }

            context.Response.Write(RESLT.ToString().Replace(" ", ""));
        }
Example #17
0
        private void AutoRemoveEntitlementStatus
            (int idEntit, int idThisUser, HttpResponse theResponse)
        {
            // Get complete info about this entitlement
            IEntitlement         engine  = new IEntitlement(HELPERS.NewOdbcConn());
            returnGetEntitlement thisEnt = engine.GetEntitlement(idEntit);

            // Find every entAssignment that refers to this entitlement
            // and that is in an ACTIVE entset or a WORKSPACE entset.
            // Requires a JOIN
            string sqlFindEA =
                "SELECT EA.c_id, EAS.c_r_SubProcess as EASsubpr, EAS.c_id as EASid, EAS.c_u_Status as EASstatus, EAS.c_r_User as EASiduser, " +
                " USR.c_u_Name as EASnameuser, PR.c_u_Name + ' / ' + SUBPR.c_u_Name as SUBPRname, EA.c_r_Entitlement as EAentit, " +
                " BROLE.c_u_Name as BRname " +
                " FROM t_RBSR_AUFW_u_EntAssignment EA" +
                " LEFT OUTER JOIN t_RBSR_AUFW_u_EntAssignmentSet EAS ON EAS.c_id = EA.c_r_EntAssignmentSet " +
                " LEFT OUTER JOIN t_RBSR_AUFW_u_Subprocess SUBPR ON SUBPR.c_id = EAS.c_r_SubProcess " +
                " LEFT OUTER JOIN t_RBSR_AUFW_u_Process PR ON PR.c_id = SUBPR.c_r_Process " +
                " LEFT OUTER JOIN t_RBSR_AUFW_u_User USR ON USR.c_id = EAS.c_r_User " +
                " LEFT OUTER JOIN t_RBSR_AUFW_u_BusRole BROLE ON BROLE.c_id = EA.c_r_BusRole " +
                " WHERE EAS.c_u_Status IN ('WORKSPACE','ACTIVE') AND EA.c_r_Entitlement=" + idEntit;
            OdbcDataReader reader = HELPERS.RunSqlSelect(sqlFindEA);

            Dictionary <int, HELPERS.infoEASet> MAPsubprToEASet =
                new Dictionary <int, HELPERS.infoEASet>();



            Queue queueOfEA = new Queue();

            while (reader.Read())
            {
                HELPERS.infoEA baby = new HELPERS.infoEA();
                baby.idEntAss             = reader.GetInt32(0);
                baby.idSubpr              = reader.GetInt32(1);
                baby.idEntAssSet          = reader.GetInt32(2);
                baby.strEntAssSetStatus   = reader.GetString(3);
                baby.idEntAssSetCreator   = reader.GetInt32(4);
                baby.nameEntAssSetCreator = reader.GetString(5);
                baby.nameSubprocess       = reader.GetString(6);
                baby.idEntitlement        = reader.GetInt32(7);
                baby.nameBusRole          = reader.GetString(8);
                queueOfEA.Enqueue(baby);

                // An existing workspace OVERRULES an ACTIVE EASet.
                if (!MAPsubprToEASet.ContainsKey(baby.idSubpr))
                {
                    HELPERS.infoEASet infoeaset = new HELPERS.infoEASet();
                    infoeaset.idEntAssSet          = baby.idEntAssSet;
                    infoeaset.strEntAssSetStatus   = baby.strEntAssSetStatus;
                    infoeaset.idEntAssSetCreator   = baby.idEntAssSetCreator;
                    infoeaset.nameEntAssSetCreator = baby.nameEntAssSetCreator;
                    infoeaset.nameSubprocess       = baby.nameSubprocess;
                    MAPsubprToEASet.Add(baby.idSubpr, infoeaset);
                }
                else
                {
                    if (MAPsubprToEASet[baby.idSubpr].idEntAssSet == baby.idEntAssSet)
                    {
                        // This is another copy of the same registered EASet.
                        // Ignore!
                    }
                    else if (MAPsubprToEASet[baby.idSubpr].strEntAssSetStatus == "WORKSPACE")
                    {
                        // The registered EASet for this subprocess is already a workspace.
                        // This newcomer must be the ACTIVE easet and we are not interested.
                        if (baby.strEntAssSetStatus != "ACTIVE")
                        {
                            throw new Exception("DATABASE ERROR: Multiple workspaces are active for subprocess #" +
                                                baby.idSubpr + "(" + baby.nameSubprocess + ")");
                        }
                    }
                    else
                    {
                        if (baby.strEntAssSetStatus != "WORKSPACE")
                        {
                            throw new Exception("DATABASE ERROR: Multiple EASets are marked as 'ACTIVE' for subprocess #" +
                                                baby.idSubpr + "(" + baby.nameSubprocess + ")");
                        }
                        HELPERS.infoEASet infoeaset = new HELPERS.infoEASet();
                        infoeaset.idEntAssSet          = baby.idEntAssSet;
                        infoeaset.strEntAssSetStatus   = baby.strEntAssSetStatus;
                        infoeaset.idEntAssSetCreator   = baby.idEntAssSetCreator;
                        infoeaset.nameEntAssSetCreator = baby.nameEntAssSetCreator;
                        MAPsubprToEASet[baby.idSubpr]  = infoeaset;
                    }
                }
            }
            reader.Dispose();


            // We now have the list of all subprocesses involved, and info about
            // either the ACTIVE or WORKSPACE EASet to be actually edited.

            // We now want to build any needed workspaces, i.e. if we are looking
            // at an EASet of status "ACTIVE".
            //
            // CAREFUL!!! Before 13 July, there was a BUG here.  It was possible to have
            // the EASet be an ACTIVE one (if the workspace for that subpr simply didn't
            // have any ref to the target entitlement), which would cause construction
            // of an unneeded workspace.
            // BEFORE CONSTRUCTING ANY WORKSPACE, AN EXTRA CHECK MUST BE PERFORMED
            // TO ENSURE THERE IS NOT ALREADY A WS FOR THAT SUBPR!!!!

            Dictionary <int, HELPERS.infoEASet> readyToUseWorkspaces = new Dictionary <int, HELPERS.infoEASet>();
            Dictionary <int, HELPERS.infoEASet> lockedWorkspaces     = new Dictionary <int, HELPERS.infoEASet>();
            String messages = "";

            HELPERS.AutoGenWorkspacesInBulk(idThisUser, ref messages, MAPsubprToEASet, readyToUseWorkspaces, lockedWorkspaces,
                                            "facilitate retirement of an entitlement");
            theResponse.Write(messages);

            // We are now ready to do the processing of the EAssignments.
            // There are two situations.
            // If the EA's own status is "N", the proper thing to do is to delete the EA entirely.
            // If the EA's status is "A", the proper thing to do is turn it to "X".
            // No change should be made of course if it's already "X".
            // Running these updates multiple times is no problem, as it will turn into a no-op
            //   after the first time.
            //
            // ON SECOND THOUGHT: I want to turn even status "N" to "X" because that is self-documenting
            // and better for auditing.  We want it to appear with a verboten sign in the designer view.

            Dictionary <int, int> MAPsubprToNumAffected = new Dictionary <int, int>();

            while (queueOfEA.Count > 0)
            {
                HELPERS.infoEA curEA   = (HELPERS.infoEA)(queueOfEA.Dequeue());
                int            idSubpr = curEA.idSubpr;
                if (MAPsubprToNumAffected.ContainsKey(idSubpr))
                {
                    continue;
                }
                if (readyToUseWorkspaces.ContainsKey(idSubpr))
                {
                    HELPERS.infoEASet curWS = readyToUseWorkspaces[idSubpr];

                    // Handling status="A" and "N"
                    string cmdsql =
                        "UPDATE t_RBSR_AUFW_u_EntAssignment " +
                        " SET c_u_Status='X' WHERE c_u_Status IN ('A','N','P') AND " +
                        " c_r_EntAssignmentSet=" + curWS.idEntAssSet + " AND " +
                        " c_r_Entitlement=" + curEA.idEntitlement;
                    int resultRunSql = HELPERS.RunSql(cmdsql);
                    MAPsubprToNumAffected[idSubpr] = resultRunSql;
                    theResponse.Write(
                        "OK: " + curEA.nameSubprocess + ": " + resultRunSql + " business roles affected.\n");
                }
                else
                {
                    HELPERS.infoEASet lockedWS = lockedWorkspaces[idSubpr];
                    theResponse.Write(
                        "<B>ERROR: </B> Entitlement #" + curEA.idEntitlement + " could not be removed from " + curEA.nameBusRole +
                        " -- workspace locked by " + lockedWS.nameEntAssSetCreator + ".\n");
                }
            }
        }
Example #18
0
        public void ProcessRequest(HttpContext context)
        {
            if (context.Session["AFWACSESSION"] == null)
            {
                throw new Exception("Must be in a legal R-AF session");
            }

            session = context.Session["AFWACSESSION"] as AFWACsession;


            string mode = context.Request.Params["mode"];
            // mode=dumpraf
            // mode=compare


            string requestorUserEID  = context.Request.Params["usereid"];
            string requestorUserName = context.Request.Params["username"];
            string pathIdmInput      = context.Request.Params["pathidminput"];

            bool boolReportInternalIdmRoles =
                bool.Parse(context.Request.Params["showinternal"]);
            bool boolSaveToHistory =
                bool.Parse(context.Request.Params["save"]);

            bool boolDoCompare = (mode == "compare");
            bool boolCaseSens  = false;

            string CSVlistOfInterestingRoles        = "-3";
            string CSVlistOfInterestingSubprocesses = "-3";

            //
            // New format for the CSVlist:
            // Still comma-separated.
            // But now each item is either:
            //    an integer
            //    "SP/###" where ### is the ID number for a subprocess
            // Our goal is to split this into two CSV lists:
            //   list of interesting roles
            //   list of interesting subprocesses (meaning all its roles are interesting)
            // So here we must tokenize the incoming role list.


            StringTok.StringTokenizer TK = new StringTok.StringTokenizer(context.Request.Params["roles"], ",");
            string curnode;

            while (TK.HasMoreTokens())
            {
                curnode = TK.NextToken();
                if (curnode.StartsWith("SP/"))
                {
                    curnode = curnode.Substring(3);
                    CSVlistOfInterestingSubprocesses += ("," + curnode);
                }
                else
                {
                    CSVlistOfInterestingRoles += ("," + curnode);
                }
            }


            int errcountEntitlements = 0;
            int errcountRoleMetadata = 0;

            DataTable dt_idmdump = null;



            if (boolDoCompare)
            {
                string pathTempFolder = Path.GetDirectoryName(pathIdmInput);
                string pathTempFile   = Path.GetFileName(pathIdmInput);


                // Load the IDM-dump CSV file.
                // Load the IDM-dump CSV file.
                // Load the IDM-dump CSV file.
                // Load the IDM-dump CSV file.
                // Load the IDM-dump CSV file.
                dt_idmdump = HELPERS.LoadCsv(pathTempFolder,
                                             System.IO.Path.GetFileName(pathTempFile));
            }



            OdbcCommand cmd = new OdbcCommand();

            cmd.Connection = HELPERS.NewOdbcConn();


            Workbook     book = null;
            WorksheetRow row;
            Worksheet    sheetMetadata = null;
            Worksheet    sheetDeltas   = null;
            Worksheet    sheetErrors   = null;



            if (boolSaveToHistory)
            {
                ENGINEreport = new IReconcReport(HELPERS.NewOdbcConn());
                IDreport     = ENGINEreport.NewReconcReport(DateTime.Now, session.idUser);
                ENGINEreport.SetReconcReport
                    (IDreport, DateTime.Now,
                    "Comparison via upload of file " + pathIdmInput, session.idUser, "IDM");
                ENGINEreportDiffItem = new IReconcDiffItem(HELPERS.NewOdbcConn());
            }

            else

            {
                book = new Workbook();
                context.Response.ContentType = "application/vnd.xls";
                context.Response.AddHeader("Content-Disposition",
                                           "filename=RAFidmReconcile.xls;attachment");

                sheetMetadata = book.Worksheets.Add("Metadata");
                sheetErrors   = book.Worksheets.Add("Errors");

                row = sheetMetadata.Table.Rows.Add();
                row.Cells.Add("Run Date:");
                row.Cells.Add(DateTime.Now.ToUniversalTime().ToLongDateString() + " UTC");
                row = sheetMetadata.Table.Rows.Add();
                row.Cells.Add("Run Time:");
                row.Cells.Add(DateTime.Now.ToUniversalTime().ToLongTimeString() + " UTC");
                // row = sheetMetadata.Table.Rows.Add();
                //      row.Cells.Add("User EID:");
                //      row.Cells.Add(requestorUserEID);
                row = sheetMetadata.Table.Rows.Add();
                row.Cells.Add("User Name:");
                row.Cells.Add(requestorUserName);
                row = sheetMetadata.Table.Rows.Add();
                row.Cells.Add("Include list of IDM ELE_INT_ and INT_ roles");
                row.Cells.Add(boolReportInternalIdmRoles.ToString());
                row = sheetMetadata.Table.Rows.Add();
                row = sheetMetadata.Table.Rows.Add();
                row.Cells.Add("STATISTICS");


                sheetDeltas = book.Worksheets.Add("Reconciliation");
                row         = RecordDelta(sheetDeltas,
                                          "Role Name", "Difference", "Action", "Difference Type", "");
            }



            OdbcConnection conn2       = HELPERS.NewOdbcConn_FORCE();
            IEntitlement   ENGINEwsent = new IEntitlement(conn2);



            string SQLsubpr = @" SELECT c_r_SubProcess, c_u_Name FROM t_RBSR_AUFW_u_BusRole;";

            cmd.CommandText = SQLsubpr;
            OdbcDataReader drSubpr = cmd.ExecuteReader();

            Dictionary <string, string> MAPbrolenamesToSubprids = new Dictionary <string, string>();

            while (drSubpr.Read())
            {
                int    IDsubprid = (int)(drSubpr.GetValue(0));
                string brolename = drSubpr.GetValue(1).ToString();
                if (!MAPbrolenamesToSubprids.ContainsKey(brolename))
                {
                    MAPbrolenamesToSubprids.Add(brolename, IDsubprid.ToString()); // + " = " + STRsubpr);
                }
            }
            drSubpr.Close();



            string extraconds = " AND (TEASS.c_u_Status NOT IN ('X')) ";

            // Perform a massive SQL select to obtain all active entitlements in R-AF
            string SQL =
                @"
SELECT
TENT.c_id as EntID,
BROL.c_u_Name as BusRole,
RTRIM(LTRIM(BROL.c_u_Description)) as BusRoleDescr,
MVF.c_u_Formula as Formula,
MVF.c_u_KEYapplication as Appl,
OWNERS.c_u_EID as EIDprimaryApprover,
SUBPR.c_u_Name as SubprocessName,
BROL.c_r_SubProcess as SubprocessID

FROM 
   t_RBSR_AUFW_u_EntAssignment TEASS

LEFT OUTER JOIN 
   t_RBSR_AUFW_u_Entitlement TENT
ON
   TEASS.c_r_Entitlement = TENT.c_id

LEFT OUTER JOIN 
   t_RBSR_AUFW_u_BusRole BROL
ON
   BROL.c_id = TEASS.c_r_BusRole

LEFT OUTER JOIN
   t_RBSR_AUFW_u_MVFormula MVF
ON
   MVF.c_u_KEYapplication = TENT.c_u_Application

LEFT OUTER JOIN
   t_RBSR_AUFW_u_EntAssignmentSet TEASET
ON
   TEASET.c_id = TEASS.c_r_EntAssignmentSet

LEFT OUTER JOIN 
   t_RBSR_AUFW_u_SubProcess SUBPR
ON
   TEASET.c_r_SubProcess = SUBPR.c_id

LEFT OUTER JOIN
  t_RBSR_AUFW_u_BusRoleOwner OWNERS
ON
 (  (OWNERS.c_r_BusRole = BROL.c_id)  AND (OWNERS.c_u_Rank='appr') )

WHERE

   (TEASET.c_u_Status = 'ACTIVE')
AND
   (SUBPR.c_r_Process NOT IN (7))
AND
  (
   (BROL.c_id IN (" + CSVlistOfInterestingRoles + ")) OR " +
                "(BROL.c_r_SubProcess IN (" + CSVlistOfInterestingSubprocesses + ")) ) "

                + extraconds +
                " ORDER BY TEASS.c_r_BusRole;";


            cmd.CommandText = SQL;
            OdbcDataReader dr = cmd.ExecuteReader();


            Dictionary <string, string> DICTactiveEnts = new Dictionary <string, string>();

            // These map role names to role descriptions
            Dictionary <string, string> DICTactiveBroles = new Dictionary <string, string>();
            Dictionary <string, string> DICTidmBroles    = new Dictionary <string, string>();

            // Key = rolename + EID of primary approver
            // Value = 1
            Dictionary <string, string> DICTroleApprover = new Dictionary <string, string>();



            Queue <string> QUEUEmsgsWarning = new Queue <string>();



            // WE ARE NOW READING THE DATA COMING FROM R-AF VIA SQL QUERY
            // WE ARE NOW READING THE DATA COMING FROM R-AF VIA SQL QUERY
            // WE ARE NOW READING THE DATA COMING FROM R-AF VIA SQL QUERY
            // WE ARE NOW READING THE DATA COMING FROM R-AF VIA SQL QUERY
            // WE ARE NOW READING THE DATA COMING FROM R-AF VIA SQL QUERY

            while (dr.Read())
            {
                int    IDwsentrow     = (int)(dr.GetValue(0));
                string brolename      = dr.GetValue(1).ToString();
                string broledescr     = dr.GetValue(2).ToString();
                string STRformula     = dr.GetValue(3).ToString();
                string STRapp         = dr.GetValue(4).ToString();
                string STRapproverEID = dr.GetValue(5).ToString();
                string STRsubpr       = dr.GetValue(6).ToString();
                int    IDsubpr        = (int)(dr.GetValue(7));


                if (!DICTactiveBroles.ContainsKey(brolename))

                {
                    DICTactiveBroles.Add(brolename, broledescr);
                }

/*
 *        if (!MAPbrolenamesToSubprids.ContainsKey(brolename))
 *        {
 *            MAPbrolenamesToSubprids.Add(brolename, IDsubpr.ToString() + " = " + STRsubpr);
 *        }
 */

                if (STRapproverEID.Length > 1)
                {
                    try
                    {
                        DICTroleApprover.Add(
                            brolename + (char)1 + STRapproverEID, "1");
                    }
                    catch (Exception) { }
                }

                returnGetEntitlement OBJwsent =
                    ENGINEwsent.GetEntitlement(IDwsentrow);

                // SKLAR NOTE: the returnGetEntitlement struct has every column/field already segregated

                int repaircount = 0;
                TurnNullsToEmptyStrings(ref OBJwsent, ref repaircount);

                if (STRformula == "")
                {
                    STRformula = "\"TBD - " + dr.GetValue(4).ToString() + "\"";
                }
                else
                {
                    STRformula = HttpUtility.HtmlDecode(STRformula.Trim());
                }


                // We have the formula; now we can evaluate.
                Evaluator ev = new Evaluator(Eval3.eParserSyntax.cSharp, false);
                ev.AddEnvironmentFunctions(this);
                ev.AddEnvironmentFunctions(new ManifestFormulaEvaluatorFunctions(OBJwsent));

                opCode lCode;
                try
                {
                    lCode = ev.Parse(STRformula);
                }
                catch (Exception e)
                {
                    if (book != null)
                    {
                        sheetMetadata.Table.Rows.Add().Cells.Add("The formula [[" + STRformula + "]] for this app [[" + STRapp + "]] has parse errors: " + e.ToString());
                    }
                    else
                    {
                        context.Response.Write("The formula [[" + STRformula + "]] for this app [[" + STRapp + "]] has parse errors: " + e.ToString());
                    }
                    continue;
                }

                string RESLT;
                try
                {
                    RESLT = lCode.value.ToString();
                }
                catch (Exception e)
                {
                    RESLT = "NULL";
                    //context.Response.Write("Interpreting the formula for this app resulted in errors: " + e.ToString());
                    //return;
                }


                string RESLTforCompare = RESLT;
                if (!boolCaseSens)
                {
                    RESLTforCompare = RESLT.ToLower().Replace(" ", "");
                }


                if (!boolDoCompare)
                {
                    context.Response.Write(CSVquoteize(brolename));
                    context.Response.Write(",");
                    context.Response.Write(CSVquoteize(broledescr));
                    context.Response.Write(",");
                    context.Response.Write(CSVquoteize(RESLTforCompare));
                    context.Response.Write("\n");
                }
                else
                {
                    // Enter the role name and the privilegestring into a dictionary
                    try {
                        DICTactiveEnts.Add(brolename + (char)1 + RESLTforCompare, RESLT);
                    }
                    catch (Exception eduringprivadd) {
                        // This situation occurs when two or more distinct entitlements in RAF
                        // generate the very same priv string (because they differ in a field that
                        // "does not count" towards generation of the priv string.
                        QUEUEmsgsWarning.Enqueue
                            ("Role " + brolename + ": privilege was registered redundantly: " + RESLTforCompare);
                    }
                }
            }



            // Now comes the comparison.
            if (boolDoCompare)
            {
                Queue <string> QUEUE_idmRowsLackingActiveMatch = new Queue <string>();



                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE
                // HERE WE ARE ACTUALLY LOOKING AT THE DATA COMING IN FROM THE IDM DUMP FILE

                foreach (DataRow idmrow in dt_idmdump.Rows)
                {
                    string idmrsrcRolename = idmrow[0].ToString().Trim();
                    string idmrsrcValue    = idmrow[1].ToString().Trim();
                    string idmrsrcObjType  = idmrow[2].ToString().Trim();

                    switch (idmrsrcObjType)
                    {
                    case "PrimaryApprover":
                    case "RoleApprover":
                        string target = idmrsrcRolename + (char)1 + idmrsrcValue;
                        if (DICTroleApprover.ContainsKey(target))
                        {
                            // Was also found in RAF, so nothing to report.
                            DICTroleApprover.Remove(target);
                        }
                        else
                        {
                            // Was not found in RAF, so report a need for removal
                            RecordDelta(sheetDeltas, idmrsrcRolename, idmrsrcValue, "Remove", "PrimaryApprover", null);
                        }
                        break;



                    case "RoleDescription":
                        if (!DICTidmBroles.ContainsKey(idmrsrcRolename))
                        {
                            DICTidmBroles.Add(idmrsrcRolename, idmrsrcValue);
                        }
                        break;

                    case "Entitlement":
                        string idmrsrcPrivForCompare = idmrsrcValue;
                        if (!boolCaseSens)
                        {
                            idmrsrcPrivForCompare = idmrsrcValue.ToLower().Replace(" ", "");
                        }
                        string idmrsrcKey = idmrsrcRolename + (char)1 + idmrsrcPrivForCompare;
                        if (DICTactiveEnts.ContainsKey(idmrsrcKey))
                        {
                            DICTactiveEnts.Remove(idmrsrcKey);
                        }
                        else
                        {
                            QUEUE_idmRowsLackingActiveMatch.Enqueue(idmrsrcKey);

                            /*
                             * int idxSep = idmrsrcKey.IndexOf((char)1);
                             * string reportRolename = idmrsrcKey.Substring(0,idxSep);
                             * string reportPriv = idmrsrcKey.Substring(idxSep+1);
                             * */
                            if (!boolReportInternalIdmRoles)
                            {
                                if (idmrsrcRolename.StartsWith("ELE_INT_")
                                    ||
                                    idmrsrcRolename.StartsWith("INT_"))
                                {
                                    continue;
                                }
                            }
                            try
                            {
                                RecordDelta(sheetDeltas, idmrsrcRolename, idmrsrcValue, "Remove", "Entitlement", MAPbrolenamesToSubprids[idmrsrcRolename]);
                            }
                            catch (Exception) {
                                RecordDelta(sheetDeltas, idmrsrcRolename, idmrsrcValue, "Remove", "Entitlement", "Note: this role is not known to the RAF system at all.");
                            }
                            errcountEntitlements++;
                        }
                        break;
                    }
                }

                foreach (string keytoadd in DICTactiveEnts.Keys)
                {
                    int    idxSep         = keytoadd.IndexOf((char)1);
                    string reportRolename = keytoadd.Substring(0, idxSep);
                    string reportPriv     = DICTactiveEnts[keytoadd];
                    if (!boolReportInternalIdmRoles)
                    {
                        if (reportRolename.StartsWith("ELE_INT_")
                            ||
                            reportRolename.StartsWith("INT_"))
                        {
                            continue;
                        }
                    }
                    RecordDelta(sheetDeltas, reportRolename, reportPriv, "Add", "Entitlement", null);
                    errcountEntitlements++;
                }



                foreach (string keytoadd in DICTroleApprover.Keys)
                {
                    int    idxSep         = keytoadd.IndexOf((char)1);
                    string reportRolename = keytoadd.Substring(0, idxSep);
                    string reportEID      = keytoadd.Substring(idxSep + 1);
                    if (!boolReportInternalIdmRoles)
                    {
                        if (reportRolename.StartsWith("ELE_INT_")
                            ||
                            reportRolename.StartsWith("INT_"))
                        {
                            continue;
                        }
                    }
                    RecordDelta(sheetDeltas, reportRolename, reportEID, "Add", "PrimaryApprover", null);
                }



                // Roles as a whole
                foreach (string rolePresentInRAF in DICTactiveBroles.Keys)
                {
                    if (DICTidmBroles.ContainsKey(rolePresentInRAF))
                    {
                        // This role is present in both RAF and IDM.
                        // But perhaps differs in description?
                        if (DICTactiveBroles[rolePresentInRAF] != DICTidmBroles[rolePresentInRAF])
                        {
                            // 1. Do a remove
                            RecordDelta(sheetDeltas,
                                        rolePresentInRAF,
                                        DICTidmBroles[rolePresentInRAF],
                                        "Remove", "RoleDescription", "");
                            // 2. Do an add
                            RecordDelta(sheetDeltas,
                                        rolePresentInRAF,
                                        DICTactiveBroles[rolePresentInRAF],
                                        "Add", "RoleDescription", "");
                            errcountRoleMetadata++;
                        }

                        //Record having seen this.
                        DICTidmBroles.Remove(rolePresentInRAF);
                    }
                    else
                    {
                        RecordDelta(sheetDeltas, rolePresentInRAF, DICTactiveBroles[rolePresentInRAF], "Add", "Role", null);
                        errcountRoleMetadata++;
                    }
                }


                foreach (string rolePresentInIDM in DICTidmBroles.Keys)
                {
                    if (!boolReportInternalIdmRoles)
                    {
                        if (rolePresentInIDM.StartsWith("ELE_INT_")
                            ||
                            rolePresentInIDM.StartsWith("INT_"))
                        {
                            continue;
                        }
                    }
                    RecordDelta(sheetDeltas, rolePresentInIDM, rolePresentInIDM, "Remove", "Role", null);
                    errcountRoleMetadata++;
                }


                if (book != null)
                {
                    row = sheetMetadata.Table.Rows.Add();
                    row.Cells.Add(" - Entitlement deltas:");
                    row.Cells.Add(errcountEntitlements.ToString());

                    row = sheetMetadata.Table.Rows.Add();
                    row.Cells.Add(" - Role deltas:");
                    row.Cells.Add(errcountRoleMetadata.ToString());


                    if (QUEUEmsgsWarning.Count > 0)
                    {
                        row = sheetMetadata.Table.Rows.Add();
                        row.Cells.Add(" - Warning messages regarding RAF-side data:");

                        while (QUEUEmsgsWarning.Count > 0)
                        {
                            string msg = QUEUEmsgsWarning.Dequeue();
                            row = sheetMetadata.Table.Rows.Add();
                            row.Cells.Add("");
                            row.Cells.Add(msg);
                        }
                    }


                    book.Save(context.Response.OutputStream);
                }
                else
                {
                    context.Response.Redirect("../Page_Reconc_History.aspx");
                }
            }
        }