public DataTable GetRoleApplications(UsersApplicationsRoles userApplicationRole, int tipo)
        {
            CreateColumns();

            var           lstRole       = GetRoleforApplication(userApplicationRole, tipo);
            ApplicationDA applicationDa = new ApplicationDA(_configuration);

            if (lstRole.Count > 0)
            {
                foreach (var role in lstRole)
                {
                    _drFixed = _dtFixed.NewRow();

                    _drFixed["RoleId"]                  = role.RoleId;
                    _drFixed["RoleName"]                = role.RoleName;
                    _drFixed["RoleDescription"]         = role.RoleDescription;
                    _drFixed["ApplicationId"]           = role.ApplicationId;
                    _drFixed["ApplicationName"]         = applicationDa.FindApplication(role.ApplicationId).ApplicationName;
                    _drFixed["CreationDateTime"]        = role.CreationDateTime;
                    _drFixed["CreationUserId"]          = role.CreationUserId;
                    _drFixed["ModificationDateTime"]    = role.ModificationDateTime;
                    _drFixed["ModificationUserId"]      = role.ModificationUserId;
                    _drFixed["DeclineDate"]             = role.DeclineDate;
                    _drFixed["RoleAuthorizationUserId"] = role.RoleAuthorizationUserId;
                    _drFixed["RoleAuthorizationOwner"]  = role.RoleAuthorizationOwner;

                    _dtFixed.Rows.Add(_drFixed);
                }
            }
            applicationDa.Dispose();

            return(_dtFixed);
        }
        public DataTable GetRoleApplication(UsersApplicationsRoles userApplicationRole, int tipo)
        {
            var roleDa    = new RoleDA(_configuration);
            var datatable = roleDa.GetRoleApplications(userApplicationRole, tipo);

            roleDa.Dispose();
            return(datatable);
        }
        public List <Role> GetRoleforApplications(UsersApplicationsRoles userApplicationRole, int tipo)
        {
            var roleda   = new RoleDA(_configuration);
            var listRole = roleda.GetRoleforApplication(userApplicationRole, tipo);

            roleda.Dispose();
            return(listRole);
        }
        public List <UsersApplicationsRoles> GetApplicationRoleList(User user, User loggedUser)
        {
            var conn          = StrConexion;
            var lstAppUserRol = new List <UsersApplicationsRoles>();

            using (var sqlCon = new SqlConnection(conn))
            {
                sqlCon.Open();
                var cmd = new SqlCommand
                {
                    Connection  = sqlCon,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "usp_UsersGetApplicationRolesConAmbito"
                };
                cmd.Parameters.AddWithValue("@UserId", user.UserId);
                cmd.Parameters.AddWithValue("@LoggedUserId", loggedUser.UserId);

                var da = new SqlDataAdapter();
                var ds = new DataSet();

                da.SelectCommand = cmd;
                da.Fill(ds);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var objAppUserRole = new UsersApplicationsRoles();

                        objAppUserRole.ApplicationId          = Convert.ToInt32(dr["ApplicationId"]);
                        objAppUserRole.ApplicationName        = dr["ApplicationName"].ToString();
                        objAppUserRole.RoleName               = dr["RoleName"].ToString();
                        objAppUserRole.ApplicationDescription = dr["ApplicationDescription"].ToString();
                        if (!dr["ValidityStartDate"].ToString().Equals(string.Empty))
                        {
                            objAppUserRole.ValidityStartDate = string.Format("{0:dd/MM/yyyy}", Convert.ToDateTime(dr["ValidityStartDate"]));
                        }
                        if (!dr["DeclineDate"].ToString().Equals(string.Empty))
                        {
                            objAppUserRole.DeclineDate = string.Format("{0:dd/MM/yyyy}", Convert.ToDateTime(dr["DeclineDate"]));
                        }

                        lstAppUserRol.Add(objAppUserRole);
                    }
                }
            }
            return(lstAppUserRol);
        }
        /// <summary>
        /// Obtiene lista de roles por aplicacion
        /// </summary>
        /// <param name="userApplicationRole">Objeto tipo Aplicacion</param>
        /// /// <param name="iTipo">Tipo de Aplicacion</param>
        /// <returns>Lista de roles</returns>
        public List <Role> GetRoleforApplication(UsersApplicationsRoles userApplicationRole, int iTipo)
        {
            var conn    = StrConexion;
            var rolelst = new List <Role>();

            using (var sqlCon = new SqlConnection(conn))
            {
                sqlCon.Open();
                var cmd = new SqlCommand
                {
                    Connection  = sqlCon,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "usp_FindRolesforApplication"
                };
                cmd.Parameters.AddWithValue("@IdApplication", userApplicationRole.ApplicationId);
                cmd.Parameters.AddWithValue("@UserId", userApplicationRole.UserId);
                cmd.Parameters.AddWithValue("@Tipo", iTipo);

                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    var objRole = new Role
                    {
                        RoleId                  = (int)reader["RoleId"],
                        RoleName                = (string)reader["RoleName"],
                        RoleDescription         = string.IsNullOrEmpty(reader["RoleDescription"].ToString()) ? string.Empty : reader["RoleDescription"].ToString(),
                        ApplicationId           = (int)reader["ApplicationId"],
                        CreationDateTime        = (DateTime)reader["CreationDateTime"],
                        CreationUserId          = string.IsNullOrEmpty(reader["CreationUserId"].ToString()) ? string.Empty : reader["CreationUserId"].ToString(),
                        ModificationDateTime    = (DateTime)reader["ModificationDateTime"],
                        ModificationUserId      = string.IsNullOrEmpty(reader["ModificationUserId"].ToString()) ? string.Empty : reader["ModificationUserId"].ToString(),
                        DeclineDate             = string.IsNullOrEmpty(reader["DeclineDate"].ToString()) ? string.Empty : string.Format("{0:dd/MM/yyy}", reader["DeclineDate"]),
                        RoleAuthorizationUserId = (string)reader["RoleAuthorizationUserId"],
                        RoleAuthorizationOwner  = (string)reader["RoleAuthorizationOwner"]
                    };
                    rolelst.Add(objRole);
                }
            }

            return(rolelst);
        }
        public void DeleteUsersApplicationsRoles(UsersApplicationsRoles usersApplicationsRoles, User registerUser)
        {
            var conn = StrConexion;

            using (var sqlCon = new SqlConnection(conn))
            {
                sqlCon.Open();
                var cmd = new SqlCommand
                {
                    Connection  = sqlCon,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "usp_UsersApplicationsRolesDelete"
                };
                cmd.Parameters.AddWithValue("@UserId", usersApplicationsRoles.UserId);
                cmd.Parameters.AddWithValue("@ApplicationName", usersApplicationsRoles.ApplicationName);
                cmd.Parameters.AddWithValue("@RoleName", usersApplicationsRoles.RoleName);
                cmd.Parameters.AddWithValue("@DeclineDate", Convert.ToDateTime(usersApplicationsRoles.DeclineDate));
                cmd.Parameters.AddWithValue("@ModificationUserId", registerUser.UserId);

                cmd.ExecuteNonQuery();
            }
        }
        public void AddNewUsersApplicationsRoles(UsersApplicationsRoles usersApplicationsRoles, User registerUser)
        {
            var conn = StrConexion;

            using (var sqlCon = new SqlConnection(conn))
            {
                sqlCon.Open();
                var cmd = new SqlCommand
                {
                    Connection  = sqlCon,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "usp_UsersApplicationsRolesInsert"
                };
                cmd.Parameters.AddWithValue("@UserId", usersApplicationsRoles.UserId);
                cmd.Parameters.AddWithValue("@ApplicationId", usersApplicationsRoles.ApplicationId);
                cmd.Parameters.AddWithValue("@RoleId", usersApplicationsRoles.RoleId);
                cmd.Parameters.AddWithValue("@CreationUserId", registerUser.UserId);
                //cmd.Parameters.AddWithValue("@DeclineDate", Convert.ToDateTime(usersApplicationsRoles.DeclineDate));
                cmd.Parameters.AddWithValue("@DeclineDate", Convert.ToDateTime(string.Format("{0:yyyy/MM/dd}", Convert.ToDateTime(usersApplicationsRoles.DeclineDate))));

                cmd.ExecuteNonQuery();
            }
        }
        public List <UsersApplicationsRoles> GetApplicationUsersList(ApplicationPMX applicationPMX)
        {
            var conn          = StrConexion;
            var lstAppUserRol = new List <UsersApplicationsRoles>();

            using (var sqlCon = new SqlConnection(conn))
            {
                sqlCon.Open();
                var cmd = new SqlCommand
                {
                    Connection  = sqlCon,
                    CommandType = CommandType.StoredProcedure,
                    CommandText = "usp_ApplicationUsersByApplicationId"
                };
                cmd.Parameters.AddWithValue("@ApplicationId", applicationPMX.ApplicationId);

                var da = new SqlDataAdapter();
                var ds = new DataSet();

                da.SelectCommand = cmd;
                da.Fill(ds);

                if (ds.Tables[0].Rows.Count > 0)
                {
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        var objAppUserRole = new UsersApplicationsRoles();
                        objAppUserRole.UserId          = dr["UserId"].ToString();
                        objAppUserRole.ApplicationId   = Convert.ToInt32(dr["ApplicationId"]);
                        objAppUserRole.ApplicationName = dr["ApplicationName"].ToString();
                        lstAppUserRol.Add(objAppUserRole);
                    }
                }
            }
            return(lstAppUserRol);
        }
        public List <UsersApplicationsRoles> FindApplicationforUser(string strUser)
        {
            var daApplication = new ApplicationDA(_configuration);
            var lstAppUserRol = new List <UsersApplicationsRoles>();

            var ds = daApplication.FindApplicationforUser(strUser);

            if (ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow item in ds.Tables[0].Rows)
                {
                    var objAppUserRole = new UsersApplicationsRoles
                    {
                        ApplicationId          = Convert.ToInt32(item[0]),
                        ApplicationName        = item[1].ToString(),
                        ApplicationDescription = item[2].ToString()
                    };

                    if (!item[3].ToString().Equals(string.Empty))
                    {
                        objAppUserRole.ValidityStartDate = string.Format("{0:dd/MM/yyyy}", Convert.ToDateTime(item[3]));
                    }

                    if (!item[4].ToString().Equals(string.Empty))
                    {
                        objAppUserRole.DeclineDate = string.Format("{0:dd/MM/yyyy}", Convert.ToDateTime(item[4]));
                    }
                    objAppUserRole.Observations  = item[5].ToString();
                    objAppUserRole.EmployeeNames = item[6].ToString();

                    lstAppUserRol.Add(objAppUserRole);
                }
            }

            return(lstAppUserRol);
        }
        public Response AddNewUsersApplicationsRoles(UsersApplicationsRoles usersApplicationsRoles, User registerUser)
        {
            var response = new Response {
                Message = "Sin inicializar", Result = false
            };

            try
            {
                #region AddUserDataValidation
                if (string.IsNullOrEmpty(usersApplicationsRoles.UserId))
                {
                    response.Message = "El usuario no puede estar vacío";
                    return(response);
                }

                //Se valida que no exista previamente el rol asignado al usuario
                var usersApplicationsRoleLogic = new UsersApplicationsRolesLogic(_configuration);
                var lstprofileFull             = usersApplicationsRoleLogic.GetApplicationsRoleList(new User()
                {
                    UserId = usersApplicationsRoles.UserId
                }, registerUser);
                usersApplicationsRoleLogic.Dispose();

                var roleFinded = lstprofileFull.Find(a => a.ApplicationName == usersApplicationsRoles.ApplicationName && a.RoleName == usersApplicationsRoles.RoleName);
                if (roleFinded != null)
                {
                    response.Message = "El rol ya ha sido asignado previamente al usuario.";
                    return(response);
                }



                //Se valida que no exista la prohibición de combinacion de roles
                EntityLibrary.ApplicationPMX application = new ApplicationPMX()
                {
                    ApplicationId = usersApplicationsRoles.ApplicationId
                };
                User usertoAdd = new User()
                {
                    UserId = usersApplicationsRoles.UserId
                };
                var roleLogic = new RoleLogic(_configuration);
                List <EntityLibrary.Role> roles = roleLogic.GetRoleList(application, usertoAdd);


                Role roleB = new Role()
                {
                    RoleId = usersApplicationsRoles.RoleId
                };

                foreach (var roleA in roles)
                {
                    var resultExist = roleLogic.RoleNotAllowedCombinationExistAndDate(application, roleA, roleB);
                    if (resultExist.Result)
                    {
                        response.Message =
                            "No se puede agregar el rol al usuario, ya que no está permitida en la combinación de roles";
                        return(response);
                    }
                }
                roleLogic.Dispose();

                if (string.IsNullOrEmpty(usersApplicationsRoles.ApplicationId.ToString()))
                {
                    response.Message = "El campo IdAplicacion no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(usersApplicationsRoles.RoleId.ToString()))
                {
                    response.Message = "El campo IdRole no puede estar vacío";
                    return(response);
                }

                var dateRole = Convert.ToDateTime(usersApplicationsRoles.DeclineDate);
                if (Convert.ToDateTime(string.Format("{0:yyyy/MM/dd}", dateRole)) < Convert.ToDateTime(string.Format("{0:yyyy/MM/dd}", DateTime.Now)))
                {
                    response.Message = "La fecha ingresada no puede ser menor a la fecha actual, favor de verificar.";
                    return(response);
                }

                if (registerUser == null)
                {
                    response.Message = "No se ha especificado el usuario con permisos para registrar";
                    return(response);
                }
                #endregion

                var usersApplicationsRoleDa = new UsersApplicationsRoleDA(_configuration);
                usersApplicationsRoleDa.AddNewUsersApplicationsRoles(usersApplicationsRoles, registerUser);
                usersApplicationsRoleDa.Dispose();
                #region logRegister

                var log = new Log
                {
                    Application = new ApplicationPMX
                    {
                        ApplicationName = _applicationName
                    },
                    EventUser      = registerUser,
                    EventTypeId    = LogTypeEnum.Notification,
                    LogDescription = string.Format("Agregó el rol {0}-{1} de la aplicación {2}-{3} al usuario {4}  Vigente hasta: {5}.",
                                                   usersApplicationsRoles.RoleId, usersApplicationsRoles.RoleName, usersApplicationsRoles.ApplicationId, usersApplicationsRoles.ApplicationName, usersApplicationsRoles.UserId, usersApplicationsRoles.DeclineDate)
                };
                #endregion
                var loglogic = new LogLogic(_configuration);
                loglogic.InsertLogEvent(log);
                loglogic.Dispose();


                response.Message = "Se registró correctamente el rol {0} de la aplicación {1} al userId {2} - {3}.";
                response.Result  = true;
            }
            catch (Exception err)
            {
                if (err.Message.Substring(0, 35) == "Violation of PRIMARY KEY constraint")
                {
                    var log = new Log
                    {
                        EventUser      = registerUser,
                        EventTypeId    = LogTypeEnum.Notification,
                        LogDescription = string.Format("Se intentó agregar al usuario {0} al esquema de seguridad, pero ya existe previamente", registerUser.UserId),
                        Application    = new ApplicationPMX
                        {
                            ApplicationName =
                                _applicationName
                        }
                    };
                    var loglogic = new LogLogic(_configuration);
                    loglogic.InsertLogEvent(log);
                    loglogic.Dispose();
                    response.Message = "El usuario ya cuenta con el role seleccionado.";
                    return(response);
                }
                response.Message = string.Format("Ocurrio un error al intentar agregar el usuario. {0} {1}", err.Message, DateTime.Now.ToString(CultureInfo.InvariantCulture));
                return(response);
            }
            return(response);
        }
        public Response DelUsersApplicationsRoles(UsersApplicationsRoles usersApplicationsRoles, User registerUser)
        {
            var response = new Response {
                Message = "Sin inicializar", Result = false
            };

            try
            {
                #region AddUserDataValidation
                if (string.IsNullOrEmpty(usersApplicationsRoles.UserId))
                {
                    response.Message = "El usuario no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(usersApplicationsRoles.ApplicationId.ToString()))
                {
                    response.Message = "El campo IdAplicacion no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(usersApplicationsRoles.RoleId.ToString()))
                {
                    response.Message = "El campo IdRole no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(usersApplicationsRoles.DeclineDate.ToString()))
                {
                    response.Message = "El campo declinedate no puede estar vacío";
                    return(response);
                }

                if (registerUser == null)
                {
                    response.Message = "No se ha especificado el usuario con permisos para registrar";
                    return(response);
                }
                #endregion


                var usersApplicationsRoleDa = new  UsersApplicationsRoleDA(_configuration);
                usersApplicationsRoleDa.DeleteUsersApplicationsRoles(usersApplicationsRoles, registerUser);
                usersApplicationsRoleDa.Dispose();
                #region logRegister

                var log = new Log
                {
                    Application = new ApplicationPMX
                    {
                        ApplicationName = _applicationName
                    },
                    EventUser      = registerUser,
                    EventTypeId    = LogTypeEnum.Notification,
                    LogDescription = string.Format("Declinó el rol {0} de la aplicación {1} al usuario {2}. Fecha declinación {3} ",
                                                   usersApplicationsRoles.RoleName, usersApplicationsRoles.ApplicationName, usersApplicationsRoles.UserId, usersApplicationsRoles.DeclineDate)
                };
                #endregion
                var loglogic = new LogLogic(_configuration);
                loglogic.InsertLogEvent(log);
                loglogic.Dispose();


                response.Message = "Se declinó correctamente el usuario para uso de aplicaciones.";
                response.Result  = true;
            }
            catch (Exception err)
            {
                if (err.Message.Substring(0, 35) == "Violation of PRIMARY KEY constraint")
                {
                    var log = new Log
                    {
                        EventUser      = registerUser,
                        EventTypeId    = LogTypeEnum.Notification,
                        LogDescription = string.Format("Se intentó declinar al usuario {0} al esquema de seguridad, pero ya existe previamente", usersApplicationsRoles.UserId),
                        Application    = new ApplicationPMX
                        {
                            ApplicationName =
                                _applicationName
                        }
                    };
                    var loglogic = new LogLogic(_configuration);
                    loglogic.InsertLogEvent(log);
                    loglogic.Dispose();
                    response.Message = "El usuario ha sido declinado previamente";
                    return(response);
                }
                response.Message = string.Format("Ocurrio un error al intentar agregar el usuario. {0} {1}", err.Message, DateTime.Now.ToString(CultureInfo.InvariantCulture));
                return(response);
            }
            return(response);
        }
        public Response UpdateRoleOperations(ApplicationPMX application, Role role, List <Operation> operationList, User registerUser, int tipoApp)
        {
            var response = new Response {
                Message = "Sin inicializar", Result = false
            };

            try
            {
                //aplicationValidation
                var applicationLogic = new ApplicationLogic(_configuration);
                var applicationList  = applicationLogic.GetApplicationList();
                applicationLogic.Dispose();
                var applicationFinded = applicationList.Find(app => app.ApplicationName == application.ApplicationName);
                if (applicationFinded == null)
                {
                    response.Message = string.Format("La aplicación {0} especificada no existe en el esquema de seguridad", application.ApplicationName);
                    return(response);
                }


                //User validation
                var userLogic  = new UserLogic(_configuration);
                var userFinded = userLogic.FindUser(registerUser.UserId);
                userLogic.Dispose();
                if (userFinded == null)
                {
                    response.Message = string.Format(
                        "El usuario {0} de registro no se encontró en el esquema de seguridad", registerUser.UserId);
                    return(response);
                }

                //Validate Role for application
                var userApplicationRole = new UsersApplicationsRoles
                {
                    ApplicationId = applicationFinded.ApplicationId
                };
                var roleDa   = new RoleDA(_configuration);
                var roleList = roleDa.GetRoleforApplication(userApplicationRole, tipoApp);
                roleDa.Dispose();

                var roleFinded = roleList.Find(rol => rol.RoleName == role.RoleName);
                if (roleFinded == null)
                {
                    response.Message =
                        string.Format("El rol  {0} especificado no existe en el esquema de seguridad para la aplicación {1}.", role.RoleName, application.ApplicationName);
                    return(response);
                }

                //Validate existing operations in applications and add operationProperties
                var operationDa         = new OperationDA(_configuration);
                var appOperations       = operationDa.GetOperationsList(applicationFinded);
                var operationsToAddList = new List <Operation>();
                foreach (var operation in operationList)
                {
                    var opfinded = appOperations.Find(op => op.OperationName == operation.OperationName);
                    if (opfinded == null)
                    {
                        response.Message = string.Format("La operación {0} especificada no existe en el esquema de seguridad para la aplicación {1}.", operation.OperationName, application.ApplicationName);
                        return(response);
                    }
                    operationsToAddList.Add(opfinded);
                }
                //Delete all operations for role
                var currentOperations = operationDa.GetRoleOperations(roleFinded);
                operationDa.Dispose();

                foreach (var operationToDelete in from operationToDelete in currentOperations
                         let deleteResponse = DeleteOperationToRole(applicationFinded, operationToDelete, roleFinded, userFinded)
                                              where !deleteResponse.Result select operationToDelete)
                {
                    response.Message =
                        string.Format("No se pudo actualizar la operación {0} en el esquema de seguridad.",
                                      operationToDelete.OperationName);
                    return(response);
                }
                //Add all operations for role

                foreach (var operationToAdd in from operationToAdd in operationsToAddList
                         let addResponse = AddOperationToRole(applicationFinded, operationToAdd, roleFinded, userFinded)
                                           where !addResponse.Result select operationToAdd)
                {
                    response.Message =
                        string.Format("No se pudo actualizar la operación {0} en el esquema de seguridad.",
                                      operationToAdd.OperationName);
                    return(response);
                }

                //LogActivity
                var log = new Log
                {
                    Application = applicationFinded
                    ,
                    EventTypeId = LogTypeEnum.Notification
                    ,
                    EventUser = registerUser
                    ,
                    LogDescription =
                        string.Format("Se actualizaron las operaciones del rol {0} de la aplicación {1}.", roleFinded.RoleName,
                                      applicationFinded.ApplicationName)
                };
                var loglogic  = new LogLogic(_configuration);
                var resultLog = loglogic.InsertLogEvent(log);
                loglogic.Dispose();
                response.Message = string.Format(resultLog.Result ? "Se actualizaron las operaciones del rol {0} de la aplicación {1}." : "Se actualizaron las operaciones del rol {0} de la aplicación {1}. Pero no se pudo registrar el movimiento en bitácora.", roleFinded.RoleName, applicationFinded.ApplicationName);

                response.Result = true;
            }
            catch (Exception)
            {
                response.Message =
                    string.Format("Ocurrio un error al actualizar las operaciones del rol {0} de la aplicación {1}.",
                                  application.ApplicationName, registerUser);
            }
            return(response);
        }
        public Response AddRoleToApplication(ApplicationPMX application, Role role, User registerUser, int tipo)
        {
            var response = new Response {
                Message = "Sin inicializar", Result = false
            };
            var roleDa = new RoleDA(_configuration);

            try
            {
                //aplicationValidation
                var applicationLogic = new ApplicationLogic(_configuration);
                var applicationList  = applicationLogic.GetApplicationList();
                applicationLogic.Dispose();

                var applicationFinded = applicationList.Find(app => app.ApplicationName == application.ApplicationName);
                if (applicationFinded == null)
                {
                    response.Message = string.Format("La aplicación {0} especificada no existe en el esquema de seguridad", application.ApplicationName);
                    return(response);
                }


                //User validation
                var userLogic  = new UserLogic(_configuration);
                var userFinded = userLogic.FindUser(registerUser.UserId);
                userLogic.Dispose();
                if (userFinded == null)
                {
                    response.Message = string.Format(
                        "El usuario {0} de registro no se encontró en el esquema de seguridad", registerUser.UserId);
                    return(response);
                }

                //Role validation
                var userApplicationRole = new UsersApplicationsRoles()
                {
                    ApplicationId = applicationFinded.ApplicationId
                };

                var roleList          = roleDa.GetRoleforApplication(userApplicationRole, tipo);
                var roleAlreadyFinded = roleList.Find(rolesearched => rolesearched.RoleName == role.RoleName);
                if (roleAlreadyFinded != null)
                {
                    response.Message = string.Format("El nombre {0} del rol no puede ser repetido.", role.RoleName);
                    return(response);
                }
                //TODO:Validar nombre con caracteres distintos
                //Roleregister
                roleDa.AddRole(role, userFinded);

                //LogActivity
                var log = new Log
                {
                    Application = applicationFinded
                    ,
                    EventTypeId = LogTypeEnum.Notification
                    ,
                    EventUser = registerUser
                    ,
                    LogDescription =
                        string.Format("Se agregó el rol {0} a la aplicación {1}.", role.RoleName,
                                      applicationFinded.ApplicationName)
                };
                var loglogic  = new LogLogic(_configuration);
                var resultLog = loglogic.InsertLogEvent(log);
                loglogic.Dispose();
                if (resultLog.Result)
                {
                    response.Message = string.Format("Se agregó el rol {0} a la aplicación {1}.", role.RoleName,
                                                     applicationFinded.ApplicationName);
                    response.Result = true;
                }
                else
                {
                    response.Message = string.Format("Se agregó el rol {0} a la aplicación {1}. Pero no se pudo registrar el movimiento en bitácora.", role.RoleName, applicationFinded.ApplicationName);
                    response.Result  = true;
                }
            }
            catch (Exception err)
            {
                response.Message = string.Format("Ocurrio un error. {0}", err.Message);
            }
            roleDa.Dispose();
            return(response);
        }
        public Response AddNewRole(Role role, User registerUser, int tipo)
        {
            var response = new Response {
                Message = "Sin inicializar", Result = false
            };
            var userDa = new UserDA(_configuration);
            var roleDa = new RoleDA(_configuration);

            try
            {
                #region AddUserDataValidation
                if (role.ApplicationId < 0)
                {
                    response.Message = "El IdAplicación no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(role.RoleName))
                {
                    response.Message = "El campo Nombre no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(role.RoleDescription))
                {
                    response.Message = "El campo descripción no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(role.RoleAuthorizationUserId))
                {
                    response.Message = "El campo autorizador no puede estar vacío";
                    return(response);
                }

                if (string.IsNullOrEmpty(role.RoleAuthorizationOwner))
                {
                    response.Message = "El campo cargo no puede estar vacío";
                    return(response);
                }

                if (registerUser == null)
                {
                    response.Message = "No se ha especificado el usuario con permisos para registrar";
                    return(response);
                }

                var objUser = userDa.FindUser(role.RoleAuthorizationUserId);
                if (objUser == null)
                {
                    response.Message = "La clave del autorizador no es válida o no existe, favor de validar.";
                    return(response);
                }
                #endregion



                //Valida Existencia Role
                var application = new UsersApplicationsRoles
                {
                    ApplicationId = role.ApplicationId,
                    UserId        = registerUser.UserId
                };

                var lstrole = roleDa.GetRoleforApplication(application, tipo);
                var iRes    = 0;

                if (lstrole.Any(roles => roles.RoleName.Equals(role.RoleName)))
                {
                    iRes = 1;
                }

                if (iRes <= 0)
                {
                    roleDa.AddRole(role, registerUser);
                    #region logRegister
                    var log = new Log
                    {
                        Application = new ApplicationPMX
                        {
                            ApplicationName = _applicationName
                        },
                        EventUser      = registerUser,
                        EventTypeId    = LogTypeEnum.Notification,
                        LogDescription = string.Format("Agregó el rol {0}-{1}  a la aplicación id {2}. Vigencia: {3} Autorizador rol: {4} Cargo autorizador:{5} Descripción: {6}",
                                                       role.RoleId, role.RoleName, role.ApplicationId, role.DeclineDate, role.RoleAuthorizationUserId, role.RoleAuthorizationOwner, role.RoleDescription)
                    };



                    #endregion
                    var loglogic = new LogLogic(_configuration);
                    loglogic.InsertLogEvent(log);
                    loglogic.Dispose();
                    response.Message = "Se registró correctamente el rol {0} para la Aplicación {1}";
                    response.Result  = true;
                }
                else
                {
                    response.Message = "Ya esta asignado el rol a la aplicación, favor de verificar.";
                    response.Result  = false;
                }
            }
            catch (Exception err)
            {
                if (err.Message.Substring(0, 35) == "Violation of PRIMARY KEY constraint")
                {
                    var log = new Log
                    {
                        EventUser      = registerUser,
                        EventTypeId    = LogTypeEnum.Notification,
                        LogDescription = string.Format("Se intentó agregar el rol {0} al esquema de seguridad, pero ya existe previamente", role.RoleId),
                        Application    = new ApplicationPMX
                        {
                            ApplicationName = _applicationName
                        }
                    };
                    var loglogic = new LogLogic(_configuration);
                    loglogic.InsertLogEvent(log);
                    loglogic.Dispose();

                    response.Message = "El rol ha sido registrado previamente";
                    return(response);
                }
                response.Message = string.Format("Ocurrio un error al intentar agregar el rol. {0} {1}", err.Message, DateTime.Now.ToString(CultureInfo.InvariantCulture));
                return(response);
            }
            userDa.Dispose();
            roleDa.Dispose();

            return(response);
        }