452 lines
17 KiB
Plaintext
452 lines
17 KiB
Plaintext
@using HerramientaCASA.Model
|
|
@using Microsoft.EntityFrameworkCore
|
|
@using System.Globalization
|
|
@using bdHerramientaCACOA.db
|
|
@inject UserState UserState
|
|
|
|
|
|
<Modal @ref="popupConfirmarBorrado" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
|
|
<BodyTemplate>
|
|
<div class="col-12 formatoCampos">
|
|
¿Estás seguro que desea eliminarlo?
|
|
</div>
|
|
</BodyTemplate>
|
|
<FooterTemplate>
|
|
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupConfirmarBorrado">Cerrar</Button>
|
|
<Button @onclick="@(() => BorrarItem())" Color="ButtonColor.Danger">Eliminar</Button>
|
|
</FooterTemplate>
|
|
</Modal>
|
|
<EditForm EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" FormName="tiposForm">
|
|
<DataAnnotationsValidator></DataAnnotationsValidator>
|
|
<Modal @ref="popupGestionDatos" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
|
|
<BodyTemplate>
|
|
<div class="row">
|
|
<div class="col-12 formatoCampos pt-2">
|
|
<label class="tituloLbl">
|
|
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 31).Descripcion))
|
|
{
|
|
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 31).Descripcion)
|
|
}
|
|
Superficie:
|
|
</label>
|
|
<InputNumber TValue="double" @bind-Value="itemSeleccionadoTemporal.superficie"
|
|
step="any"
|
|
@oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.superficie))"
|
|
class="inputForm" />
|
|
</div>
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(itemSeleccionadoTemporal.superficie))</div>
|
|
</div>
|
|
|
|
<div class="col-12 formatoCampos pt-2">
|
|
<label class="tituloLbl">Uso:</label>
|
|
<InputSelect @bind-Value="@itemSeleccionadoTemporal.idGrupoTipologia" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(itemSeleccionadoTemporal.idGrupoTipologia))">
|
|
@foreach (var grupoTipologia in objetoLicitaciones.Enumerados.GruposTipologias)
|
|
{
|
|
<option value="@grupoTipologia.idEnumeracion">@grupoTipologia.ValorAlfabetico1</option>
|
|
}
|
|
</InputSelect>
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(itemSeleccionadoTemporal.idGrupoTipologia))</div>
|
|
</div>
|
|
|
|
<div class="col-12 formatoCampos pt-2">
|
|
<label class="tituloLbl">Tipología:</label>
|
|
<InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipologia" class="inputForm">
|
|
@foreach (var tipologia in tipologiasAux)
|
|
{
|
|
<option value="@tipologia.idTipologia">@tipologia.Descripcion</option>
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
|
|
<div class="col-12 formatoCampos pt2">
|
|
<label class="tituloLbl">
|
|
@if (!string.IsNullOrEmpty(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 32).Descripcion))
|
|
{
|
|
@UtilidadesCASA.CreateTooltip(objetoLicitaciones.Enumerados.PuntosInformacion.First(x => x.idPuntosInformacion == 32).Descripcion)
|
|
}
|
|
Intervención:</label>
|
|
<InputSelect @bind-Value="@itemSeleccionadoTemporal.idTipoIntervencion" class="inputForm">
|
|
@foreach (var intervencion in intervencionesAux)
|
|
{
|
|
<option value="@intervencion.idEnumeracion">@intervencion.ValorAlfabetico1</option>
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
</BodyTemplate>
|
|
<FooterTemplate>
|
|
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupGestionDatos">Cerrar</Button>
|
|
<Button Type="ButtonType.Submit" Color="ButtonColor.Primary">@(nuevoElemento ? "Añadir":"Modificar")</Button>
|
|
</FooterTemplate>
|
|
</Modal>
|
|
</EditForm>
|
|
|
|
|
|
<div class="d-flex justify-content-between mt-3">
|
|
<div><b>Usos/Tipología</b></div>
|
|
@* <button @onclick="@(() => abrirPopupGestionDatos(new CASA.UsosTipologia(),true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i> Nuevo Uso</button> *@
|
|
</div>
|
|
|
|
<div style="position:relative;margin-bottom: 15px;">
|
|
|
|
<Grid TItem="CASA.UsosTipologia"
|
|
Class="tablaCACOA table"
|
|
Data="UsosTipologias"
|
|
AllowFiltering="false"
|
|
AllowRowClick="true"
|
|
OnRowClick="OnRowClick"
|
|
EmptyText="No hay registros."
|
|
Height="100"
|
|
Style="table-layout:fixed !important"
|
|
PageSizeSelectorVisible="false"
|
|
Responsive="true">
|
|
|
|
<GridColumns>
|
|
<GridColumn Class="columna20Ancho text-end" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Superficie">
|
|
<span>
|
|
@context.superficie.MilesYDecimales()
|
|
</span>
|
|
</GridColumn>
|
|
|
|
<GridColumn Class="columna20Ancho" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Uso">
|
|
@objetoLicitaciones.Enumerados.GruposTipologias?.FirstOrDefault(x => x.idEnumeracion == context.idGrupoTipologia)?.ValorAlfabetico1
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="CASA.UsosTipologia" HeaderTextAlignment="Alignment.Center" HeaderText="Tipología">
|
|
@objetoLicitaciones.Enumerados.Tipologias?.FirstOrDefault(x => x.idTipologia == context.idTipologia)?.Descripcion
|
|
</GridColumn>
|
|
|
|
<GridColumn Class="columna20Ancho" HeaderTextAlignment="Alignment.Center" TItem="CASA.UsosTipologia" HeaderText="Intervención">
|
|
@objetoLicitaciones.Enumerados.Intervenciones?.FirstOrDefault(x => x.idEnumeracion == context.idTipoIntervencion)?.ValorAlfabetico1
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="CASA.UsosTipologia" Class="botonesTabla" HeaderText="">
|
|
<div class="btnTablasEspaciado">
|
|
<span @onclick="@(() => abrirPopupGestionDatos(@context,false))" class="btnBorrarGuardar">
|
|
<Icon CustomIconName="fas fa-edit"></Icon>
|
|
</span>
|
|
<span @onclick="@(() => abrirPopupConfirmarBorrado(@context))" class="btnBorrarGuardar">
|
|
<Icon CustomIconName="fas fa-trash"></Icon>
|
|
</span>
|
|
</div>
|
|
|
|
</GridColumn>
|
|
</GridColumns>
|
|
</Grid>
|
|
|
|
<table class="table tablaCACOA mb-0" style="position:absolute;bottom:-33px;">
|
|
<tfoot>
|
|
<tr>
|
|
<td colspan="2" class="text-end fw-bold colorC TotalesTabla TotalesTabla">
|
|
|
|
<div class="d-flex justify-content-between">
|
|
<div class="mt-1">
|
|
<button @onclick="@(() => abrirPopupGestionDatos(new CASA.UsosTipologia(),true))" class="btnBlue d-flex align-items-center"> <i class="fas fa-plus-square pe-1"></i> Añadir nuevo Uso</button>
|
|
</div>
|
|
<div style="align-self: center;">
|
|
Total superficie: <span>
|
|
@UsosTipologias.Sum(x => x.superficie).MilesYDecimales()
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tfoot>
|
|
</table>
|
|
|
|
</div>
|
|
|
|
@code {
|
|
[CascadingParameter]
|
|
public Licitaciones _Parent { get; set; }
|
|
|
|
[Parameter]
|
|
public LICITACIONES objetoLicitaciones { get; set; } = new LICITACIONES();
|
|
|
|
public List<CASA.UsosTipologia> UsosTipologias { get; set; } = new List<CASA.UsosTipologia>();
|
|
private List<CASA.tipologiasCASA> tipologiasAux = new List<CASA.tipologiasCASA>();
|
|
private List<CASA.enumeracionesCASA> intervencionesAux = new List<CASA.enumeracionesCASA>();
|
|
|
|
[SupplyParameterFromForm]
|
|
private CASA.UsosTipologia itemSeleccionado { get; set; } = new CASA.UsosTipologia();
|
|
|
|
private CASA.UsosTipologia itemSeleccionadoTemporal { get; set; } = new CASA.UsosTipologia();
|
|
|
|
|
|
private string tituloPopup = "";
|
|
private Modal popupGestionDatos = default!;
|
|
private Modal popupConfirmarBorrado = default!;
|
|
|
|
private bool nuevoElemento;
|
|
|
|
List<ToastMessage> mensajes = new List<ToastMessage>();
|
|
|
|
private EditContext? editContext;
|
|
private ValidationMessageStore? messageStore;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
editContext = new EditContext(itemSeleccionado);
|
|
messageStore = new ValidationMessageStore(editContext);
|
|
UsosTipologias = objetoLicitaciones.Usos.ToList();
|
|
|
|
}
|
|
|
|
private async Task GestionarDatos(string accion)
|
|
{
|
|
rellenarItem();
|
|
|
|
switch (accion)
|
|
{
|
|
case "update":
|
|
objetoLicitaciones.ActualizarUso(itemSeleccionado);
|
|
await cerrarPopupGestionDatos();
|
|
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Actualizado correctamente.",
|
|
});
|
|
|
|
break;
|
|
|
|
case "create":
|
|
objetoLicitaciones.InsertarUso(itemSeleccionado);
|
|
await cerrarPopupGestionDatos();
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Guardado correctamente.",
|
|
});
|
|
break;
|
|
|
|
case "delete":
|
|
objetoLicitaciones.EliminarUso(itemSeleccionado);
|
|
await cerrarPopupConfirmarBorrado();
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Eliminado correctamente.",
|
|
});
|
|
break;
|
|
}
|
|
UsosTipologias = objetoLicitaciones.Usos.ToList();
|
|
await InvokeAsync(StateHasChanged);
|
|
_Parent.RefreshState();
|
|
}
|
|
private async Task BorrarItem()
|
|
{
|
|
await GestionarDatos("delete");
|
|
}
|
|
|
|
|
|
private async Task abrirPopupGestionDatos(CASA.UsosTipologia objeto,bool esNuevo)
|
|
{
|
|
itemSeleccionado = objeto;
|
|
|
|
if (esNuevo)
|
|
{
|
|
itemSeleccionadoTemporal = new CASA.UsosTipologia();
|
|
nuevoElemento = true;
|
|
}
|
|
else
|
|
{
|
|
itemSeleccionadoTemporal = new CASA.UsosTipologia()
|
|
{
|
|
CoefIntervencion = objeto.CoefIntervencion,
|
|
CoefTipologia = objeto.CoefTipologia,
|
|
idGrupoTipologia = objeto.idGrupoTipologia,
|
|
idTipoIntervencion = objeto.idTipoIntervencion,
|
|
idTipologia = objeto.idTipologia,
|
|
superficie = objeto.superficie,
|
|
SuperficieCoefIntervencion = objeto.SuperficieCoefIntervencion,
|
|
SuperficieCoefTipologia = objeto.SuperficieCoefTipologia
|
|
};
|
|
|
|
await cambiarTipologia();
|
|
nuevoElemento = false;
|
|
}
|
|
|
|
if (!nuevoElemento)
|
|
{
|
|
tituloPopup = "Modificar uso";
|
|
}
|
|
else
|
|
{
|
|
tituloPopup = "Nuevo uso";
|
|
}
|
|
await popupGestionDatos.ShowAsync();
|
|
}
|
|
private async Task cerrarPopupGestionDatos()
|
|
{
|
|
await popupGestionDatos.HideAsync();
|
|
}
|
|
|
|
private async Task cambiarTipologia()
|
|
{
|
|
tipologiasAux = objetoLicitaciones.Enumerados.TipologiasPorGrupo(itemSeleccionadoTemporal.idGrupoTipologia).ToList();
|
|
|
|
|
|
|
|
if (itemSeleccionadoTemporal.idTipologia == 0)
|
|
{
|
|
itemSeleccionadoTemporal.idTipologia = tipologiasAux.First().idTipologia;
|
|
}
|
|
else
|
|
{
|
|
if (tipologiasAux.Any(x => x.idTipologia == itemSeleccionadoTemporal.idTipologia))
|
|
{
|
|
itemSeleccionadoTemporal.idTipologia = itemSeleccionadoTemporal.idTipologia;
|
|
}
|
|
else
|
|
{
|
|
itemSeleccionadoTemporal.idTipologia = tipologiasAux.First().idTipologia;
|
|
}
|
|
}
|
|
|
|
intervencionesAux = objetoLicitaciones.Enumerados.Intervenciones.ToList();
|
|
itemSeleccionadoTemporal.idTipoIntervencion = itemSeleccionadoTemporal.idTipoIntervencion == 0 ? intervencionesAux.First().idEnumeracion : itemSeleccionadoTemporal.idTipoIntervencion;
|
|
|
|
await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
|
|
|
|
//////// PopUp eliminar registro
|
|
private async Task abrirPopupConfirmarBorrado(CASA.UsosTipologia objeto)
|
|
{
|
|
itemSeleccionadoTemporal = objeto;
|
|
await popupConfirmarBorrado.ShowAsync();
|
|
}
|
|
private async Task cerrarPopupConfirmarBorrado()
|
|
{
|
|
await popupConfirmarBorrado.HideAsync();
|
|
}
|
|
|
|
private async Task OnRowClick(GridRowEventArgs<CASA.UsosTipologia> objeto)
|
|
{
|
|
itemSeleccionado = objeto.Item;
|
|
}
|
|
|
|
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
|
|
{
|
|
var value = e.Value?.ToString();
|
|
var field = new FieldIdentifier(itemSeleccionadoTemporal, fieldName);
|
|
|
|
switch (fieldName)
|
|
{
|
|
case nameof(itemSeleccionado.superficie):
|
|
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
string parseado = value.Replace(",", ".");
|
|
itemSeleccionadoTemporal.superficie = double.Parse(parseado, CultureInfo.InvariantCulture);
|
|
}
|
|
|
|
break;
|
|
|
|
case nameof(itemSeleccionadoTemporal.idGrupoTipologia):
|
|
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
itemSeleccionadoTemporal.idGrupoTipologia = int.Parse(value);
|
|
cambiarTipologia();
|
|
}
|
|
else
|
|
{
|
|
itemSeleccionadoTemporal.idGrupoTipologia = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
messageStore?.Clear(field);
|
|
if (fieldName == nameof(itemSeleccionadoTemporal.superficie) && itemSeleccionadoTemporal.superficie <= 0)
|
|
{
|
|
messageStore?.Add(field, "La superficie debe ser mayor que 0.");
|
|
}
|
|
|
|
if (fieldName == nameof(itemSeleccionadoTemporal.idGrupoTipologia) && itemSeleccionadoTemporal.idGrupoTipologia == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione un tipo de uso.");
|
|
}
|
|
|
|
editContext?.NotifyValidationStateChanged();
|
|
}
|
|
|
|
private void ValidarTodo()
|
|
{
|
|
ValidarYActualizar(new ChangeEventArgs { Value = itemSeleccionadoTemporal.superficie }, nameof(itemSeleccionadoTemporal.superficie));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = itemSeleccionadoTemporal.idGrupoTipologia }, nameof(itemSeleccionadoTemporal.idGrupoTipologia));
|
|
}
|
|
|
|
private string GetExternalValidationMessage(string fieldName)
|
|
{
|
|
var field = new FieldIdentifier(itemSeleccionadoTemporal, fieldName);
|
|
return messageStore?[field].FirstOrDefault() ?? string.Empty;
|
|
}
|
|
|
|
|
|
// GUARDAR
|
|
private async Task guardarFormulario()
|
|
{
|
|
try
|
|
{
|
|
ValidarTodo();
|
|
|
|
if (!editContext!.GetValidationMessages().Any())
|
|
{
|
|
string accion = nuevoElemento ? "create" : "update";
|
|
GestionarDatos(accion);
|
|
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Guardado correctamente.",
|
|
});
|
|
}
|
|
else
|
|
{
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Warning,
|
|
Message = $"Debe rellenar los campos obligatorios.",
|
|
});
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
mensajes.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Danger,
|
|
Message = $"Error al guardar.",
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
private void MostrarErrores()
|
|
{
|
|
messageStore?.Clear();
|
|
foreach (var field in new[] { nameof(itemSeleccionado.superficie), nameof(itemSeleccionado.idGrupoTipologia) })
|
|
{
|
|
ValidarYActualizar(new ChangeEventArgs { Value = typeof(CASA.UsosTipologia).GetProperty(field)?.GetValue(itemSeleccionado) }, field);
|
|
}
|
|
}
|
|
|
|
|
|
private void rellenarItem()
|
|
{
|
|
itemSeleccionado.CoefIntervencion = itemSeleccionadoTemporal.CoefIntervencion;
|
|
itemSeleccionado.CoefTipologia = itemSeleccionadoTemporal.CoefTipologia;
|
|
itemSeleccionado.idGrupoTipologia = itemSeleccionadoTemporal.idGrupoTipologia;
|
|
itemSeleccionado.idTipoIntervencion = itemSeleccionadoTemporal.idTipoIntervencion;
|
|
itemSeleccionado.idTipologia = itemSeleccionadoTemporal.idTipologia;
|
|
itemSeleccionado.superficie = itemSeleccionadoTemporal.superficie;
|
|
itemSeleccionado.SuperficieCoefIntervencion = itemSeleccionadoTemporal.SuperficieCoefIntervencion;
|
|
itemSeleccionado.SuperficieCoefTipologia = itemSeleccionadoTemporal.SuperficieCoefTipologia;
|
|
}
|
|
|
|
} |