public async Task <IActionResult> GetUserRights(string Type, string UserOrDesignation)
        {
            UserRightsFunctionsDTO = new UserRightsFunctionsDTO();
            try
            {
                UserRightsFunctionsDTO = await UserRightsDAL.GetallUserModules(Type, UserOrDesignation, Con);

                return(UserRightsFunctionsDTO != null?Ok(UserRightsFunctionsDTO) : (IActionResult)StatusCode(StatusCodes.Status204NoContent));
            }
            catch (Exception)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError));

                throw;
            }
        }
        public async Task <UserRightsFunctionsDTO> GetallUserModules(string Type, string UserOrDesignation, string connectionString)
        {
            UserRightsFunctionsDTO UserRightsFunctionsDTO = new UserRightsFunctionsDTO();

            UserRightsFunctionsDTO.FunctionsDTOList = new List <FunctionsDTO>();
            List <FunctionsDTO> FunctionsDTOList = new List <FunctionsDTO>();
            List <ModuleDTO>    ModuleDTOlist    = new List <ModuleDTO>();
            List <SubModuleDTO> SubModuleDTOList = new List <SubModuleDTO>();
            string Query              = string.Empty;
            long   Userid             = 0;
            int    RoleFunctionsCount = 0;
            int    RoleID             = 0;

            ds = new DataSet();
            await Task.Run(() =>
            {
                UserRightsDTO = new UserRightsDTO();
                UserRightsDTO.ModuleDTOList = new List <ModuleDTO>();
                try
                {
                    if (string.IsNullOrEmpty(Type) && string.IsNullOrEmpty(UserOrDesignation))
                    {
                        Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where statusid=" + Convert.ToInt32(Status.Active) + ";";
                    }
                    else
                    {
                        if (Type.ToUpper().Trim() == "USER")
                        {
                            RoleFunctionsCount               = Convert.ToInt32(NPGSqlHelper.ExecuteScalar(connectionString, CommandType.Text, "select count(*) from   tblmstrolefunctions where upper(username)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';"));
                            Userid                           = Convert.ToInt64(NPGSqlHelper.ExecuteScalar(connectionString, CommandType.Text, "select coalesce(userid,0) as userid from tblmstusers where upper(username)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';").ToString());
                            UserRightsDTO.pUserID            = Userid;
                            UserRightsDTO.pUserName          = UserOrDesignation;
                            UserRightsFunctionsDTO.pUserID   = Userid;
                            UserRightsFunctionsDTO.pUserName = UserOrDesignation;
                            if (RoleFunctionsCount > 0)
                            {
                                // Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where functionid not in (select functionid from tblmstrolefunctions where userid=" + Userid + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.userid=" + Userid + ";";
                                Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where statusid=" + Convert.ToInt32(Status.Active) + " and functionid not in (select functionid from tblmstrolefunctions where userid=" + Userid + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.userid=" + Userid + " and t2.statusid=" + Convert.ToInt32(Status.Active) + ";";
                            }
                            else
                            {
                                RoleID = Convert.ToInt32(NPGSqlHelper.ExecuteScalar(connectionString, CommandType.Text, "select coalesce(roleid,0) as roleid from tblmstusers  where upper(username)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';"));
                                if (RoleID > 0)
                                {
                                    Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where statusid=" + Convert.ToInt32(Status.Active) + " and functionid not in (select functionid from tblmstrolefunctions where roleid=" + RoleID + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.roleid=" + RoleID + " and t2.statusid=" + Convert.ToInt32(Status.Active) + ";";
                                }
                                else
                                {
                                    Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where statusid=" + Convert.ToInt32(Status.Active) + " and functionid not in (select functionid from tblmstrolefunctions where userid=" + Userid + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.userid=" + Userid + " and t2.statusid=" + Convert.ToInt32(Status.Active) + ";";
                                }
                            }
                        }
                        else
                        {
                            Userid = Convert.ToInt64(NPGSqlHelper.ExecuteScalar(connectionString, CommandType.Text, "select coalesce(roleid,0) as roleid from tblmstemployeerole where statusid=" + Convert.ToInt32(Status.Active) + " and  upper(rolename)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';").ToString());
                            UserRightsDTO.pUserID            = Userid;
                            UserRightsDTO.pUserName          = UserOrDesignation;
                            UserRightsFunctionsDTO.pUserID   = Userid;
                            UserRightsFunctionsDTO.pUserName = UserOrDesignation;
                            //Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where functionid not in (select functionid from tblmstrolefunctions where roleid=" + Userid + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.roleid=" + Userid + ";";
                            Query = "select functionid,parentmoduleid,submoduleid,functionname,functionurl,false as viewpermission,false as createpermission,false as updatepermission,false as deletepermission from tblmstfunctions where statusid=" + Convert.ToInt32(Status.Active) + " and functionid not in (select functionid from tblmstrolefunctions where roleid=" + Userid + ") union select t2.functionid,t2.parentmoduleid,t2.submoduleid,t2.functionname,t2.functionurl,coalesce(t1.viewpermission,false) as viewpermission,coalesce(t1.createpermission,false)as createpermission,coalesce(t1.updatepermission,false)as updatepermission,coalesce(t1.deletepermission,false) as deletepermission from tblmstrolefunctions t1 left join  tblmstfunctions t2 on t1.functionid=t2.functionid where t1.roleid=" + Userid + " and t2.statusid=" + Convert.ToInt32(Status.Active) + ";";
                        }
                    }
                    using (NpgsqlDataReader dr = NPGSqlHelper.ExecuteReader(connectionString, CommandType.Text, "select moduleid,modulename from tblmstmodules where statusid=" + Convert.ToInt32(Status.Active) + " and parentmoduleid is null  order by modulesortorder asc;"))
                    {
                        while (dr.Read())
                        {
                            ModuleDTO ModuleDTO       = new ModuleDTO();
                            ModuleDTO.pmoduleid       = Convert.ToInt64(dr["moduleid"]);
                            ModuleDTO.pmodulename     = dr["modulename"].ToString();
                            ModuleDTO.lstSubModuleDTO = new List <SubModuleDTO>();

                            using (NpgsqlDataReader dr1 = NPGSqlHelper.ExecuteReader(connectionString, CommandType.Text, "select  f1.moduleid,f1.modulename,f2.moduleid as submoduleid,f2.modulename as submodulename from tblmstmodules f1 INNER JOIN tblmstmodules f2 ON f1.moduleid = f2.parentmoduleid where f1.statusid=" + Convert.ToInt32(Status.Active) + " order by f2.modulesortorder asc;"))
                            {
                                while (dr1.Read())
                                {
                                    if (Convert.ToInt64(dr["moduleid"]) == Convert.ToInt64(dr1["moduleid"]))
                                    {
                                        SubModuleDTO SubModuleDTO     = new SubModuleDTO();
                                        SubModuleDTO.psubmoduleid     = Convert.ToInt64(dr1["submoduleid"]);
                                        SubModuleDTO.psubmodulename   = dr1["submodulename"].ToString();
                                        SubModuleDTO.FunctionsDTOList = new List <FunctionsDTO>();

                                        using (NpgsqlDataReader dr2 = NPGSqlHelper.ExecuteReader(connectionString, CommandType.Text, Query))
                                        {
                                            while (dr2.Read())
                                            {
                                                if (Convert.ToInt64(dr2["submoduleid"]) == Convert.ToInt64(dr1["submoduleid"]))
                                                {
                                                    FunctionsDTO FunctionsDTO        = new FunctionsDTO();
                                                    FunctionsDTO.pmoduleid           = Convert.ToInt64(dr["moduleid"]);
                                                    FunctionsDTO.pmodulename         = dr["modulename"].ToString();
                                                    FunctionsDTO.psubmoduleid        = Convert.ToInt64(dr1["submoduleid"]);
                                                    FunctionsDTO.psubmodulename      = dr1["submodulename"].ToString();
                                                    FunctionsDTO.pFunctionID         = Convert.ToInt64(dr2["functionid"]);
                                                    FunctionsDTO.pFunctionName       = dr2["functionname"].ToString();
                                                    FunctionsDTO.pFunctionUrl        = dr2["functionurl"].ToString();
                                                    FunctionsDTO.pIsviewpermission   = Convert.ToBoolean(dr2["viewpermission"].ToString());
                                                    FunctionsDTO.pIscreatepermission = Convert.ToBoolean(dr2["createpermission"].ToString());
                                                    FunctionsDTO.pIsupdatepermission = Convert.ToBoolean(dr2["updatepermission"].ToString());
                                                    FunctionsDTO.pIsdeletepermission = Convert.ToBoolean(dr2["deletepermission"].ToString());
                                                    SubModuleDTO.FunctionsDTOList.Add(FunctionsDTO);
                                                    UserRightsFunctionsDTO.FunctionsDTOList.Add(FunctionsDTO);
                                                }
                                            }
                                        }

                                        ModuleDTO.lstSubModuleDTO.Add(SubModuleDTO);
                                    }
                                }
                            }

                            UserRightsDTO.ModuleDTOList.Add(ModuleDTO);
                        }
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            });

            return(UserRightsFunctionsDTO);
        }
        public async Task <bool> SaveUserRight(string Type, string UserOrDesignation, UserRightsFunctionsDTO UserRightsFunctionsDTO, string connectionString)
        {
            SubModuleDTO  SubModuleDTO = new SubModuleDTO();
            StringBuilder sbinsert     = new StringBuilder();
            bool          IsSaved      = false;
            long          Userid       = 0;
            await Task.Run(() =>
            {
                try
                {
                    con = new NpgsqlConnection(connectionString);
                    if (con.State != ConnectionState.Open)
                    {
                        con.Open();
                    }
                    trans = con.BeginTransaction();
                    if (Type.ToUpper().Trim() == "USER")
                    {
                        Userid = Convert.ToInt64(NPGSqlHelper.ExecuteScalar(trans, CommandType.Text, "select userid from tblmstusers where upper(username)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';").ToString());
                        sbinsert.Append("delete from tblmstrolefunctions where userid=" + Userid + " and upper(username)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';");
                    }
                    else
                    {
                        Userid = Convert.ToInt64(NPGSqlHelper.ExecuteScalar(connectionString, CommandType.Text, "select roleid from tblmstemployeerole where statusid=" + Convert.ToInt32(Status.Active) + " and  upper(rolename)='" + ManageQuote(UserOrDesignation.ToUpper().Trim()) + "';").ToString());
                        sbinsert.Append("delete from tblmstrolefunctions where roleid=" + Userid + ";");
                    }
                    if (UserRightsFunctionsDTO.FunctionsDTOList.Count > 0)
                    {
                        for (int i = 0; i < UserRightsFunctionsDTO.FunctionsDTOList.Count; i++)
                        {
                            if (UserRightsFunctionsDTO.FunctionsDTOList[i].pIsviewpermission == true || UserRightsFunctionsDTO.FunctionsDTOList[i].pIscreatepermission == true || UserRightsFunctionsDTO.FunctionsDTOList[i].pIsupdatepermission == true || UserRightsFunctionsDTO.FunctionsDTOList[i].pIsdeletepermission == true)
                            {
                                if (Type.ToUpper().Trim() == "USER")
                                {
                                    sbinsert.Append("INSERT INTO tblmstrolefunctions(functionid,moduleid,userid,username,viewpermission,createpermission,updatepermission,deletepermission,statusid,createdby,createddate)VALUES (" + UserRightsFunctionsDTO.FunctionsDTOList[i].pFunctionID + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].psubmoduleid + "," + Userid + ",'" + ManageQuote(UserOrDesignation) + "'," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsviewpermission + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIscreatepermission + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsupdatepermission + ", " + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsdeletepermission + "," + Convert.ToInt32(Status.Active) + "," + UserRightsFunctionsDTO.pCreateby + ",current_timestamp);");
                                }
                                else
                                {
                                    sbinsert.Append("INSERT INTO tblmstrolefunctions(functionid,roleid,moduleid,viewpermission,createpermission,updatepermission,deletepermission,statusid,createdby,createddate)VALUES (" + UserRightsFunctionsDTO.FunctionsDTOList[i].pFunctionID + "," + Userid + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].psubmoduleid + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsviewpermission + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIscreatepermission + "," + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsupdatepermission + ", " + UserRightsFunctionsDTO.FunctionsDTOList[i].pIsdeletepermission + "," + Convert.ToInt32(Status.Active) + "," + UserRightsFunctionsDTO.pCreateby + ",current_timestamp);");
                                }
                            }
                        }
                    }
                    if (Convert.ToString(sbinsert) != string.Empty)
                    {
                        NPGSqlHelper.ExecuteNonQuery(trans, CommandType.Text, sbinsert.ToString());
                    }
                    trans.Commit();
                    IsSaved = true;
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }
                finally
                {
                    if (con.State == ConnectionState.Open)
                    {
                        con.Dispose();
                        con.Close();
                        con.ClearPool();
                        trans.Dispose();
                    }
                }
            });

            return(IsSaved);
        }
        public async Task <IActionResult> SaveUserRight(string Type, string UserOrDesignation, UserRightsFunctionsDTO UserRightsFunctionsDTO)
        {
            bool isSaved = false;

            try
            {
                isSaved = await UserRightsDAL.SaveUserRight(Type, UserOrDesignation, UserRightsFunctionsDTO, Con);
            }
            catch (Exception ex)
            {
                throw new FinstaAppException(ex.ToString());
            }
            return(Ok(isSaved));
        }