237 lines
8.6 KiB
Plaintext

@page "/tickets/ticketform/{TicketId}"
@page "/tickets/ticketform"
@inject HttpClient _httpClient
@inject NavigationManager Navigation
@inject IToastService toastService
@inject AuthenticationStateProvider authenticationStateProvider
<EditForm Model="@ticket" OnValidSubmit="@HandleValidSubmit">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label for="Titulo">Título:</label>
<InputText id="Titulo" @bind-Value="ticket.Titulo" class="form-control" />
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label for="AsignadoAUsuarioId">Asignado a:</label>
<InputText id="AsignadoAUsuarioId" @bind-Value="ticket.AsignadoAUsuarioId" class="form-control" />
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label for="Categoria">Categoría:</label>
<InputText id="Categoria" @bind-Value="ticket.Categoria" class="form-control" />
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label for="Departamento">Departamento:</label>
<InputText id="Departamento" @bind-Value="ticket.Departamento" class="form-control" />
</div>
</div>
</div>
<div class="row">
<div class="col-sm-2">
<div class="form-group">
<label for="Prioridad">Prioridad:</label>
<InputSelect id="Prioridad" @bind-Value="ticket.Prioridad" class="form-control">
@foreach (var option in prioridadOptions)
{
<option value="@option">@option</option>
}
</InputSelect>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label for="Estado">Estado:</label>
<InputSelect id="Estado" @bind-Value="ticket.Estado" class="form-control">
@foreach (var option in estadoOptions)
{
<option value="@option">@option</option>
}
</InputSelect>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label for="FechaEjecucion">Fecha Ejecución:</label>
<InputDate id="FechaEjecucion" @bind-Value="ticket.FechaEjecucion" class="form-control" />
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label for="Impacto">Impacto:</label>
<InputSelect id="Impacto" @bind-Value="ticket.Impacto" class="form-control">
@foreach (var option in impactoOptions)
{
<option value="@option">@option</option>
}
</InputSelect>
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label for="Urgencia">Urgencia:</label>
<InputSelect id="Urgencia" @bind-Value="ticket.Urgencia" class="form-control">
@foreach (var option in urgenciaOptions)
{
<option value="@option">@option</option>
}
</InputSelect>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label for="Descripcion">Descripción:</label>
<InputTextArea id="Descripcion" @bind-Value="ticket.Descripcion" class="form-control" />
</div>
</div>
<div class="col-sm-5">
<div class="form-group">
<label for="Comentarios">Comentarios:</label>
<InputTextArea id="Comentarios" @bind-Value="ticket.Comentarios" class="form-control" />
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<br />
<div class="form-check">
<InputCheckbox id="EsSolicitudCliente" @bind-Value="ticket.EsSolicitudCliente" />
<label class="form-check-label" for="EsSolicitudCliente">¿Es solicitud de cliente?:</label>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label for="AdjuntoArchivo">Adjunto Archivo:</label>
<InputFile id="AdjuntoArchivo" OnChange="FileUploaded" @bind-Value="ticket.AdjuntoArchivo" class="form-control" />
</div>
</div>
</div>
<br />
<div class="row">
<div class="col">
<button type="submit" class="btn btn-primary">Guardar</button>
<button type="button" class="btn btn-secondary" @onclick="Cancel">Volver</button>
</div>
</div>
</EditForm>
<br/>
@code {
private ETicket ticket { get; set; } = new ETicket();
// private string? userName;
public string Title { get; set; } = string.Empty;
private string urlReturn = "/dashboardpanel";
[Parameter]
public Guid? TicketId { get; set; }
private List<string> prioridadOptions = new List<string> { "Alta", "Media", "Baja" };
private List<string> estadoOptions = new List<string> { "En Proceso", "Completado", "Pendiente", "Cancelado" };
private List<string> impactoOptions = new List<string> { "Alto", "Medio", "Bajo" };
private List<string> urgenciaOptions = new List<string> { "Alta", "Media", "Baja" };
//const int MAX_FILESIZE = 5000 * 1024; // 2 MB
public Task FileUploaded(InputFileChangeEventArgs e)
{
var browserFile = e.File;
if (browserFile != null)
{
ticket.AdjuntoArchivo= browserFile.Name;
}
return Task.CompletedTask;
}
protected override void OnInitialized()
{
if (TicketId.HasValue)
{
// Cargar datos del ticket existente si estás en modo edición
// (puedes implementar esta lógica según tu estructura)
ticket = GetTicketById(TicketId.Value);
// }
// else
// {
// // Crear un nuevo ticket si estás en modo nuevo
// ticket = new ETicket();
}
}
private async Task HandleValidSubmit()
{
try
{
// Lógica para registro de ticket
if (ticket.TicketId == Guid.Empty)
{
var authState = await authenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
if (user?.Identity?.IsAuthenticated == true)
{
ticket.CreadorUsuarioId = user.Identity.Name ?? string.Empty; // Si Name es null, asignar cadena vacía
}
// var user = authState.User;
// if (user.Identity.IsAuthenticated)
// {
// ticket.CreadorUsuarioId = user.Identity.Name;
// }
// Lógica para guardar un nuevo ticket
var response = await _httpClient.PostAsJsonAsync("/api/Ticket/InsertTicket", ticket);
if (response.IsSuccessStatusCode)
{
toastService.ShowSuccess("Ticket guardado exitosamente");
Navigation.NavigateTo(urlReturn);
}
else
{
var jsonResponse = await response.Content.ReadAsStringAsync();
toastService.ShowError(jsonResponse);
}
}
else
{
// Lógica para actualizar un ticket existente
}
}
catch (HttpRequestException ex)
{
// Manejo de errores de la solicitud HTTP
toastService.ShowError($"Error al realizar la solicitud HTTP: {ex.Message}");
}
catch (Exception ex)
{
// Manejo de errores generales
toastService.ShowError($"Error: {ex.Message}");
}
}
// Método para obtener un ticket por su ID (puedes implementarlo según tu estructura)
private ETicket GetTicketById(Guid ticketId)
{
// Lógica para obtener datos del ticket por su ID
// (esto podría ser una llamada a tu API o una consulta a la base de datos)
return new ETicket(); // Reemplaza esto con la lógica real
}
public void Cancel()
{
Navigation.NavigateTo(urlReturn);
}
}