using System.Data; using System.Security.Claims; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using MySql.Data.MySqlClient; namespace HelpDesk.Pages { [Authorize] public class RespuestasModel : PageModel { private readonly IConfiguration _configuration; private readonly IWebHostEnvironment _environment; public RespuestasModel(IConfiguration configuration, IWebHostEnvironment environment) { _configuration = configuration; _environment = environment; } [BindProperty(SupportsGet = true)] public int Id { get; set; } public string ConsultaOriginal { get; set; } = string.Empty; public string DniCreador { get; set; } = string.Empty; public bool EstaCerrado { get; set; } public int EsDite { get; set; } public string DniUsuarioLogueado { get; set; } = string.Empty; public DataTable TablaRespuestas { get; set; } = new DataTable(); [BindProperty] public string TextoRespuesta { get; set; } = string.Empty; [BindProperty] public IFormFile? ArchivoRespuesta { get; set; } public string? MensajeRespuesta { get; set; } public bool EsErrorRespuesta { get; set; } public async Task OnGetAsync() { if (Id <= 0) { return RedirectToPage("/Listado"); } ObtenerDatosUsuarioClaims(); await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } public async Task OnPostGuardarRespuestaAsync() { ObtenerDatosUsuarioClaims(); if (string.IsNullOrWhiteSpace(TextoRespuesta)) { MensajeRespuesta = "Por favor ingrese el texto de su respuesta."; EsErrorRespuesta = true; await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } string nombreArchivo = string.Empty; if (ArchivoRespuesta != null && ArchivoRespuesta.Length > 0) { try { string extension = Path.GetExtension(ArchivoRespuesta.FileName); nombreArchivo = "RSP_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + extension; string uploadsFolder = Path.Combine(_environment.WebRootPath, "uploads"); if (!Directory.Exists(uploadsFolder)) { Directory.CreateDirectory(uploadsFolder); } string filePath = Path.Combine(uploadsFolder, nombreArchivo); using (var stream = new FileStream(filePath, FileMode.Create)) { await ArchivoRespuesta.CopyToAsync(stream); } } catch (Exception ex) { MensajeRespuesta = "Error al subir archivo: " + ex.Message; EsErrorRespuesta = true; await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } } string connectionString = _configuration.GetConnectionString("MySqlHelpDesk") ?? string.Empty; try { using (var con = new MySqlConnection(connectionString)) { await con.OpenAsync(); // Guardar la respuesta string queryInsert = "INSERT INTO tb_respuestas (id, dni, fecha, hora, respuestas, archivo) VALUES (@ID, @DNI, @Fecha, @Hora, @Respuestas, @Archivo)"; using (var cmd = new MySqlCommand(queryInsert, con)) { cmd.Parameters.AddWithValue("@ID", Id); cmd.Parameters.AddWithValue("@DNI", DniUsuarioLogueado); cmd.Parameters.AddWithValue("@Fecha", DateTime.Now.ToString("yyyy-MM-dd")); cmd.Parameters.AddWithValue("@Hora", DateTime.Now.ToString("HH:mm:ss")); cmd.Parameters.AddWithValue("@Respuestas", TextoRespuesta.Trim()); cmd.Parameters.AddWithValue("@Archivo", nombreArchivo); await cmd.ExecuteNonQueryAsync(); } // Cambiar estado a 1 (Debate) string queryUpdate = "UPDATE tb_registros SET estado = 1 WHERE id = @ID"; using (var cmdUpdate = new MySqlCommand(queryUpdate, con)) { cmdUpdate.Parameters.AddWithValue("@ID", Id); await cmdUpdate.ExecuteNonQueryAsync(); } } TextoRespuesta = string.Empty; MensajeRespuesta = "Respuesta enviada con éxito."; EsErrorRespuesta = false; await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } catch (Exception ex) { MensajeRespuesta = "Error BD: " + ex.Message; EsErrorRespuesta = true; await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } } public async Task OnPostCerrarPreguntaAsync() { ObtenerDatosUsuarioClaims(); string connectionString = _configuration.GetConnectionString("MySqlHelpDesk") ?? string.Empty; try { using (var con = new MySqlConnection(connectionString)) { await con.OpenAsync(); string queryUpdate = "UPDATE tb_registros SET estado = 3 WHERE id = @ID"; using (var cmd = new MySqlCommand(queryUpdate, con)) { cmd.Parameters.AddWithValue("@ID", Id); await cmd.ExecuteNonQueryAsync(); } } MensajeRespuesta = "La consulta ha sido marcada como ATENDIDA (Estado 3)."; EsErrorRespuesta = false; } catch (Exception ex) { MensajeRespuesta = "Error al actualizar estado: " + ex.Message; EsErrorRespuesta = true; } await CargarConsultaOriginalAsync(); await CargarHistorialRespuestasAsync(); return Page(); } private void ObtenerDatosUsuarioClaims() { DniUsuarioLogueado = User.FindFirstValue(ClaimTypes.NameIdentifier) ?? string.Empty; var diteClaim = User.FindFirstValue("UsuarioDite"); EsDite = !string.IsNullOrEmpty(diteClaim) ? Convert.ToInt32(diteClaim) : 0; } private async Task CargarConsultaOriginalAsync() { string connectionString = _configuration.GetConnectionString("MySqlHelpDesk") ?? string.Empty; using (var con = new MySqlConnection(connectionString)) { await con.OpenAsync(); string query = "SELECT observacion, dni, estado FROM tb_registros WHERE id = @ID"; using (var cmd = new MySqlCommand(query, con)) { cmd.Parameters.AddWithValue("@ID", Id); using (var dr = await cmd.ExecuteReaderAsync()) { if (await dr.ReadAsync()) { ConsultaOriginal = dr["observacion"] != DBNull.Value ? dr["observacion"].ToString() ?? string.Empty : string.Empty; DniCreador = dr["dni"] != DBNull.Value ? dr["dni"].ToString() ?? string.Empty : string.Empty; string estado = dr["estado"] != DBNull.Value ? dr["estado"].ToString() ?? "0" : "0"; EstaCerrado = (estado == "3"); } } } } } private async Task CargarHistorialRespuestasAsync() { string connectionString = _configuration.GetConnectionString("MySqlHelpDesk") ?? string.Empty; using (var con = new MySqlConnection(connectionString)) { await con.OpenAsync(); string query = "SELECT dni, fecha, hora, respuestas, archivo FROM tb_respuestas WHERE id = @ID ORDER BY fecha ASC, hora ASC"; using (var cmd = new MySqlCommand(query, con)) { cmd.Parameters.AddWithValue("@ID", Id); using (var da = new MySqlDataAdapter(cmd)) { TablaRespuestas = new DataTable(); da.Fill(TablaRespuestas); } } } } } }