private bool UpdateValueInForeignTable(Guid tenantId, string tableName, string entityPrefix, string primaryKey, List <ColumnAndField> matchingColumns, string primaryValue) { var queryBuilder = new InsertQueryBuilder(); var insertColumns = new Dictionary <string, string> (); foreach (var match in matchingColumns) { if (match.TableName.Equals(tableName) && match.EntityPrefix.Equals(entityPrefix)) { if (match.Value != null) { insertColumns.Add(match.ColumnName, match.Value.ToString()); } } } if (!insertColumns.Any()) { return(true); } UpdateQueryBuilder query = new UpdateQueryBuilder(); query.AddTable(tableName, insertColumns); query.AddWhere(primaryKey, Comparison.Equals, primaryValue.ToString(), 1); var updateQuery = query.BuildQuery(); IQueryAdmin admin = new QueryAdmin(); var status = admin.UpdateResult(tenantId, "inverse", updateQuery); return(status); }
private string AddValueFromForeignKeyColumns(Guid tenantId, string tableName, string entityPrefix, string foreignKeyCoumn, Guid foreignKeyColValue, List <ColumnAndField> matchingColumns, List <ColumnAndField> entityColumns) { var queryBuilder = new InsertQueryBuilder(); var insertColumns = new Dictionary <string, string> (); foreach (var match in matchingColumns) { if (match.TableName.Equals(tableName) && match.EntityPrefix.Equals(entityPrefix)) { if (match.Value != null) { insertColumns.Add(match.ColumnName, match.Value.ToString()); } } } var inverseId = Guid.NewGuid(); var inverPrimaryKeyColumns = entityColumns.FirstOrDefault(t => t.ColumnName.Equals(t.PrimaryKey) && t.TableName.Equals(tableName) && t.EntityPrefix.Equals(entityPrefix) ); if (inverPrimaryKeyColumns == null) { throw new FieldAccessException("Primary key not found."); } insertColumns.Add(inverPrimaryKeyColumns.ColumnName, inverseId.ToString()); //tenant id. var primaryTenantId = entityColumns.FirstOrDefault(x => x.ColumnName.Equals(_tenantId) && x.TableName.Equals(tableName)); if (primaryTenantId == null) { throw new FieldAccessException("Tenant id not found."); } insertColumns.Add(primaryTenantId.ColumnName, tenantId.ToString()); //foreignKey var foreignKeyColumns = entityColumns.FirstOrDefault(x => x.ColumnName.Equals(foreignKeyCoumn) && x.TableName.Equals(tableName)); if (foreignKeyColumns == null) { throw new FieldAccessException("Tenant id not found."); } insertColumns.Add(foreignKeyColumns.ColumnName, foreignKeyColValue.ToString()); queryBuilder.InsertIntoTable(tableName, insertColumns, false); var insertQuery = queryBuilder.BuildQuery(); IQueryAdmin admin = new QueryAdmin(); admin.SaveResult(tenantId, "inverse", insertQuery); return(inverseId.ToString()); }
//-------------------------------------------------------------------------------------------------- //FUNCION QUE RETORNARA UNA LISTA DE USUARIOS, LOS CUALES DEBEN CUMPLIR CON EL PARAMETRO DE BUSQUEDA //ENVIADO. EL LLAMADO SE HACE DESDE LA PAGINA "PaginaQueryAdmin" DE LA APLICACION "Mtto App". //EN ESTA FUNCION SE RECIBEN LOS PARAMETROS: // -request: OBJETO DEL TIPO "RequestQueryAdmin" EL CUAL CONTENDRA EL PARAMETRO ENVIADO Y EL NUMERO // DE OPCION DE BUSQUEDA (0 => Consulta por cedula; 1=> Consulta por Ficha; 2=> Consulta por Nombr(s) // 3=> Consulta por Apellido(s); 4=> Consulta por Username) //-------------------------------------------------------------------------------------------------- public async Task <ActionResult <List <QueryAdmin> > > QueryCedula([FromBody] RequestQueryAdmin request) { //CREACION E INICIALIZACION DE VARIABLES List <QueryAdmin> result = new List <QueryAdmin>(); //=> LISTA DE USUARIOS QUE COINCIDEN CON EL PARAMETRO ENVIADO //CREACION E INICIALIZACION DE LA LISTA DE USUARIOS REGISTRADOS EN LA PLATAFORMA List <Personas> registros = await this._context.Personas.ToListAsync(); //SE RECORRE CADA UNO DE LOS REGISTROS ("Personas") foreach (Personas x in registros) { //SE EVALUAN TODOS LOS REGISTROS MENOS EL REGISTRO DEL USUARIO ADMINISTRATOR if (x.Cedula != 0) //=> true => EL REGISTRO EVALUADO NO ES EL USUARIO ADMINISTRATOR { //SE EVALUA QUE EL DATO ENVIADO SE ENCUENTRE DENTRO DE LA LISTA REGISTROS. /*------------------------------------------------------------------------ * NOTA: LA EVALUACION SE HACE TOMANDO EN CUENTA EL TAMAÑO (CANTIDAD DE * CARACTERES) DEL PARAMETRO ENVIADO. PUESTO QUE SE CONSIDERA QUE NO SIEMPRE * SE ENVIARA TODO EL NUMERO DE CEDULA COMPLETO SE HACE UNA BUSQUEDA DE LOS * REGISTROS EXISTENTES ENVIANDO EL NUMERO DE CEDULA COMPLETO O PARCIAL * (TODO DEPENDE DE COMO SEA ENVIADO EL PARAMETRO) Y SE RETORNARAN EL * REGISTRO O LOS REGISTROS QUE COINCIDAN * ------------------------------------------------------------------------*/ if (request.Parametro.ToString() == x.Cedula.ToString().Substring(0, request.Parametro.ToString().Length)) { //SE AGREGA A LA LISTA EL REGISTRO DE DICHA PERSONA result?.Add(QueryAdmin.NewQueryAdmin(x)); } } } //SE EVALUA CUANTOS ELEMENTOS HAY EN LA LISTA "result" if (result.Count == 0) { //CERO ELEMTENTOS: SE RETORNA EL CORIGO DE ESTATUS 404 NOTFOUND (NO HAY REGISTROS QUE CUMPLAN CON EL PARAMETRO ENVIADO) return(NotFound(NotFoundMessage)); } else { //SE INICIA EL CICLO TRY...CATCH try { //DIFERENTE DE CERO: SE RETORNA EL CODIGO DE ESTATUS 200 OK JUNTO CON LA LISTA DE USUARIOS OBTENIDOS using (var transaction = this._context.Database.BeginTransaction()) { //-------------------------------------------------------------------------------------------------------- //SE CREA E INICIALIZA UN OBJETO DEL TIPO "HistorialSolicitudesWeb" CON LA INFORMACION DEL NUEVO REGISTRO //DE LA TABLA "HistorialSolicitudesWeb". Historialsolicitudesweb solicitudesweb = Historialsolicitudesweb.NewHistorialSolocitudesWeb(request.UserId, 6); //-------------------------------------------------------------------------------------------------------- //SE ALMACENA EL REGISTRO DENTRO DE LA BASE DE DATOS this._context.Historialsolicitudesweb.Add(solicitudesweb); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA HistorialSolicitudesWeb. this._context.Entry(solicitudesweb).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA. //-------------------------------------------------------------------------------------------------------- //SE GUARDAN LOS CAMBIOS REALIZADOS SOBRE LA BASE DE DATOS await this._context.SaveChangesAsync(); //SE CULMINA LA TRANSACCION CON LA BASE DE DATOS await transaction.CommitAsync(); } //SE RETORNA EL CODIGO 200 OK JUNTO CON LA LISTA DE USUARIOS QUE COINCIDEN return(Ok(result)); } //SI OCURRE ALGUNA EXCEPCION EN EL PROCESO DE LECTURA Y ESCRITURA DE LA BASE DE DATOS EL CODIGO //SE REDIRIGE A LA SECCION CATCH DEL CICLO TRY...CATCH catch (Exception ex) when(ex is DbUpdateException || ex is DbUpdateConcurrencyException) { Console.WriteLine("\n================================================="); Console.WriteLine("================================================="); Console.WriteLine("\nHa ocurrico un error:\n" + ex.Message.ToString()); Console.WriteLine("================================================="); Console.WriteLine("=================================================\n"); //SE RETONA LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO SOBRE EL ERROR return(BadRequest("\nHa ocurrico un error, intentelo nuevamente")); } } }