237 lines
8.6 KiB
Plaintext
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);
|
|
}
|
|
} |