1212 lines
49 KiB
Plaintext
1212 lines
49 KiB
Plaintext
@page "/InfoPuestosDeTrabajo"
|
|
@using System.Net.Http.Headers
|
|
@using System.Linq.Expressions
|
|
@using Layout
|
|
@using Microsoft.AspNetCore.WebUtilities
|
|
@using Newtonsoft.Json
|
|
@using System.Text
|
|
@using RegistroPersonalAN.Components.ViewsModels
|
|
@using Serialize.Linq.Serializers
|
|
@using RegistroPersonalAN.Models
|
|
@using BlazorBootstrap
|
|
@using bdAntifraude.db
|
|
@using System.Globalization
|
|
@using Microsoft.JSInterop
|
|
@inject IJSRuntime JSRuntime
|
|
@rendermode InteractiveServer
|
|
@layout MainLayout
|
|
@inject IHttpClientFactory HttpClientFactory
|
|
@inject IHttpContextAccessor HttpContextAccessor
|
|
@inject UserState UserState
|
|
@inject NavigationManager Navigation
|
|
|
|
|
|
<Toasts class="p-3 font-weight-bold" Style="color:white;" AutoHide="true" Delay="4000" Messages="messages" Placement="ToastsPlacement.BottomCenter" />
|
|
|
|
<Modal @ref="popupNewPuesto" Class="modal-lg" title="@tituloPopup" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="true">
|
|
<BodyTemplate>
|
|
|
|
<div class="popupRPCard row">
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Código:</p>
|
|
<InputText @bind-Value="puestoSelect.CODIGO" class="inputRP"></InputText>
|
|
</div>
|
|
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Estado:</p>
|
|
<InputText required @bind-Value="puestoSelect.ESTADO" class="inputRP"></InputText>
|
|
</div>
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Dotación:</p>
|
|
<InputSelect style="width:100%" @bind-Value="puestoSelect.IDDOTACION" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(puestoSelect.IDDOTACION))">
|
|
<option value="">-- Seleccione una dotación -- </option>
|
|
@foreach (var dotacion in listadoDotacion)
|
|
{
|
|
<option value="@dotacion.IDDOTACION">@dotacion.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(puestoSelect.IDDOTACION))</div>
|
|
</div>
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Ocupación:</p>
|
|
<InputSelect style="width:100%" @bind-Value="puestoSelect.IDOCUPACION" class="inputForm">
|
|
<option value=""> </option>
|
|
|
|
@foreach (var ocupa in listadoOcupacion)
|
|
{
|
|
<option value="@ocupa.IDOCUPACION">@ocupa.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Persona:</p>
|
|
@* <InputSelect style="width:100%" @bind-Value="puestoSelect.IDPERSONAL" class="inputForm">
|
|
<option value=""> </option> *@
|
|
<div class="row col-12">
|
|
<div class="col-11">
|
|
<input @bind="filterText" @bind:event="oninput" @onfocus="() =>ShowDropdown(0)" @onblur="() =>HideDropdownAfterDelay(1)"
|
|
placeholder="Seleccione una persona" class="inputForm col-12" style="height:41px;" />
|
|
|
|
@if (showDropdown)
|
|
{
|
|
<div class="dropdown-list" style="z-index: 10; border: solid; max-height: 400px; display: block; background: white; position: absolute; width: auto; overflow-x: hidden; margin-top:10px;">
|
|
@foreach (PERSONAS per in FiltrarPersonas(listadoPersonas, filterText))
|
|
{
|
|
<div class="dropdown-item" style="cursor:default" @onclick="() => SelectPersona(per)">
|
|
@per.APELLIDOS , @per.NOMBRE
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
<div class="col-1 p-0"><Button Class="btnOAAFAzul" @onclick="vaciarPersona">X</Button></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Titular:</p>
|
|
<div class="row col-12">
|
|
<div class="col-11">
|
|
<input @bind="filterTextTit" @bind:event="oninput" @onfocus="() =>ShowDropdown(1)" @onblur="() =>HideDropdownAfterDelay(1)"
|
|
placeholder="Seleccione un titular" class="inputForm col-12" style="height:41px;" />
|
|
|
|
@if (showDropdowntit)
|
|
{
|
|
<div class="dropdown-list" style="z-index: 10; border: solid; max-height: 400px; display: block; background: white; position: absolute; width: auto; overflow-x: hidden; margin-top:10px;">
|
|
@foreach (PERSONAS per in FiltrarTitular(listadoPersonas, filterTextTit))
|
|
{
|
|
<div class="dropdown-item" style="cursor:default" @onclick="() => SelectTitular(per)">
|
|
@per.APELLIDOS , @per.NOMBRE
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
<div class="col-1 p-0"><Button Class="btnOAAFAzul" @onclick="vaciarTitular">X</Button></div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
@* <div class="col-md-6" style="flex-direction:column">
|
|
<p class="lblinputRP">Adscripción:</p>
|
|
<InputSelect style="width:100%" @bind-Value="puestoSelect.IDSERVICIOADSCRITO" class="inputForm">
|
|
<option value=""> </option>
|
|
|
|
@foreach (var servicio in listadoServicios)
|
|
{
|
|
<option value="@servicio.IDSERVICIO">@servicio.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
</div> *@
|
|
</div>
|
|
</BodyTemplate>
|
|
<FooterTemplate>
|
|
<Button Color="ButtonColor.Secondary" @onclick="cerrarPopupPuesto">Cerrar</Button>
|
|
@if (puestoSelect.IDPUESTO != 0)
|
|
{
|
|
<Button @onclick="@(() => manejarPuestos("update"))" Color="ButtonColor.Primary">Modificar</Button>
|
|
}
|
|
else
|
|
{
|
|
<Button @onclick="@(() => manejarPuestos("create"))" Color="ButtonColor.Primary">Añadir</Button>
|
|
}
|
|
</FooterTemplate>
|
|
</Modal>
|
|
|
|
<Modal @ref="popupConfirmacion" title="" IsVerticallyCentered="true" UseStaticBackdrop="true" CloseOnEscape="false">
|
|
<BodyTemplate>
|
|
<div class="col-12 formatoCampos">
|
|
¿Estás seguro que desea eliminarlo?
|
|
</div>
|
|
|
|
</BodyTemplate>
|
|
<FooterTemplate>
|
|
<Button Class="btnOAAFBlack" @onclick="cerrarPopupConfirmacion">Cerrar</Button>
|
|
|
|
@if (borrarPuesto)
|
|
{
|
|
<Button @onclick="@(() => manejarPuestos("delete"))" Color="ButtonColor.Danger">Eliminar</Button>
|
|
}
|
|
else
|
|
{
|
|
<Button @onclick="@(() => borrarRPTDes())" Color="ButtonColor.Danger">Eliminar</Button>
|
|
}
|
|
</FooterTemplate>
|
|
</Modal>
|
|
|
|
|
|
@if (cl != null && idRPT == "")
|
|
{
|
|
<p>Cargando datos...</p>
|
|
}
|
|
else
|
|
{
|
|
<div class="pagina">
|
|
<div class="Cabecera">
|
|
<h6><small><i class="fas fa-briefcase"></i><b>Puestos de Trabajo (<a href="@HashRed()" id="lblNombre"> @lblNombre</a> )</b></small></h6>
|
|
</div>
|
|
|
|
<EditForm FormName="FormDesgloseRPT" EditContext="@editContext" OnValidSubmit="guardarFormulario" OnInvalidSubmit="@MostrarErrores" class="formDtosAdmin">
|
|
<DataAnnotationsValidator />
|
|
|
|
<div class="botonera col-12" style="display:flex; gap:5px">
|
|
<Button Class="btnOAAFAzul" @onclick="volver"><Icon CustomIconName="fas fa-long-arrow-alt-left"></Icon> </Button>
|
|
<Button Class="btnOAAFAzul" Type="ButtonType.Submit"> <Icon CustomIconName="fas fa-save"></Icon> </Button>
|
|
<Button Class="btnOAAFAzul" hidden=@ocultarBtnBrr @onclick="abrirPopupConfirmacionRPTDesc"> <Icon CustomIconName="fas fa-trash"></Icon> </Button>
|
|
|
|
</div>
|
|
<Tabs Style="padding-top:50px; width:100%;" EnableFadeEffect="true">
|
|
<Tab Title="DATOS RPT" Active="true">
|
|
<Content>
|
|
|
|
|
|
<div class="camposficha row">
|
|
<div class="col-1 formatoCampos">
|
|
<label class="tituloLbl">Código:</label>
|
|
<InputText disabled contenteditable="false" @bind-Value="Model!.CODIGO" class="inputForm"></InputText>
|
|
</div>
|
|
|
|
|
|
<div class="col-1 formatoCampos">
|
|
<label class="tituloLbl">Plazas: *</label>
|
|
<input class="form-control @GetCssClass(nameof(Model.PLAZAS))"
|
|
type="number"
|
|
disabled="@desactivarPlaza"
|
|
value="@Model.PLAZAS"
|
|
placeholder="@GetPlaceholder(nameof(Model.PLAZAS))"
|
|
@oninput="e => ValidarYActualizar(e, nameof(Model.PLAZAS))" />
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.PLAZAS))</div>
|
|
</div>
|
|
|
|
<div class="col-4 formatoCampos">
|
|
<label class="tituloLbl">Denominación: *</label>
|
|
<input class="form-control @GetCssClass(nameof(Model.DENOMINACION))"
|
|
value="@Model!.DENOMINACION"
|
|
placeholder="@GetPlaceholder(nameof(Model.DENOMINACION))"
|
|
maxlength="190"
|
|
@oninput="e => ValidarYActualizar(e, nameof(Model.DENOMINACION))" />
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.DENOMINACION))</div>
|
|
</div>
|
|
|
|
<div class="col-3 formatoCampos">
|
|
<label class="tituloLbl">Características Esenciales: </label>
|
|
<InputText @bind-Value="Model!.CARACTERISTICAS" class="inputForm"></InputText>
|
|
</div>
|
|
|
|
<div class="col-3 formatoCampos">
|
|
<label class="tituloLbl">Requisitos para el desempeño:</label>
|
|
<InputText @bind-Value="Model!.REQUISITOS" class="inputForm"></InputText>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="camposficha row">
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Departamentos: *</label>
|
|
|
|
<InputSelect @bind-Value="Model!.IDDEPARTAMENTO" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.IDDEPARTAMENTO))">
|
|
<option value="0">-- Seleccione un departamento -- </option>
|
|
|
|
@foreach (var depart in listadoDepartamento)
|
|
{
|
|
<option value="@depart.IDENUMERACION">@depart.VALORALFABETICOLARGO</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.IDDEPARTAMENTO))</div>
|
|
</div>
|
|
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Adscripción: *</label>
|
|
|
|
<InputSelect @bind-Value="Model!.ADSCRIPCION" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.ADSCRIPCION))">
|
|
<option value="0">-- Seleccione una adscripción -- </option>
|
|
|
|
@foreach (var adscrip in listadoAdscri)
|
|
{
|
|
<option value="@adscrip.IDADSCRIPCION">@adscrip.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.ADSCRIPCION))</div>
|
|
</div>
|
|
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Grupo 1: *</label>
|
|
|
|
@if (np == null)
|
|
{
|
|
if (Model!.GRUPO1Navigation != null)
|
|
{
|
|
<InputText disabled @bind-Value="Model!.GRUPO1Navigation!.GRUPO1" class="inputForm"></InputText>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
<InputSelect @bind-Value="Model!.GRUPO1" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.GRUPO1))">
|
|
<option value="0">-- Seleccione un grupo -- </option>
|
|
|
|
|
|
@foreach (var grupo in listadoGrupo)
|
|
{
|
|
<option value="@grupo.IDGRUPO">@grupo.GRUPO1</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.GRUPO1))</div>
|
|
|
|
}
|
|
|
|
|
|
</div>
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Grupo 2: </label>
|
|
<InputSelect @bind-Value="Model!.GRUPO2" class="inputForm">
|
|
<option value=""></option>
|
|
|
|
@foreach (var grupo in listadoGrupo)
|
|
{
|
|
<option value="@grupo.IDGRUPO">@grupo.GRUPO1</option>
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Específico: *</label>
|
|
<div class="d-flex" style="border:solid 1px black;"><input type="number" step="0.01" class="inputForm" @bind-value="Model!.ESPECIFICO" style="text-align:right;border:none; width:100%" /><span style="margin-right:10px;line-height:44px">€</span></div>
|
|
@* <CurrencyInput TValue="decimal?" Locale="es-ES" @bind-Value="Model!.ESPECIFICO" Style="text-align:right;" class="inputForm"></CurrencyInput> *@ <div class="validation-message">@GetExternalValidationMessage(nameof(Model.ESPECIFICO))</div>
|
|
</div>
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Nivel: *</label>
|
|
<InputSelect @bind-Value="Model!.IDNIVEL_RPT" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.IDNIVEL_RPT))">
|
|
<option value="0">-- Seleccione un nivel -- </option>
|
|
|
|
@foreach (var nivel in listadoNvl)
|
|
{
|
|
<option value="@nivel.IDNIVEL">@nivel.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.IDNIVEL_RPT))</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="camposficha row">
|
|
|
|
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Provisión: *</label>
|
|
<InputSelect @bind-Value="Model!.PROVISION" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.PROVISION))">
|
|
<option value="0">-- Seleccione una provisión -- </option>
|
|
@foreach (var provisi in listadoProvisi)
|
|
{
|
|
<option value="@provisi.IDPROVISION">@provisi.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.PROVISION))</div>
|
|
</div>
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Cuerpo 1: *</label>
|
|
<InputSelect @bind-Value="Model!.CUERPO1" class="inputForm" @oninput="e => ValidarYActualizar(e, nameof(Model.CUERPO1))">
|
|
<option value="0">-- Seleccione un cuerpo -- </option>
|
|
|
|
@foreach (var cuerpo in listadoCuerpo)
|
|
{
|
|
<option value="@cuerpo.IDCUERPO">@cuerpo.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
|
|
<div class="validation-message">@GetExternalValidationMessage(nameof(Model.CUERPO1))</div>
|
|
</div>
|
|
|
|
<div class="col-2 formatoCampos">
|
|
<label class="tituloLbl">Cuerpo 2:</label>
|
|
<InputSelect @bind-Value="Model!.CUERPO2" class="inputForm">
|
|
<option value=""></option>
|
|
@foreach (var cuerpo in listadoCuerpo)
|
|
{
|
|
<option value="@cuerpo.IDCUERPO">@cuerpo.DESCRIPCION</option>
|
|
}
|
|
</InputSelect>
|
|
</div>
|
|
|
|
<div class="col-auto formatoCampos">
|
|
<label class="tituloLbl">Art.66.2 DTO 2/2002</label>
|
|
<InputCheckbox @bind-Value="Model!.VIRTUAL" class="inputRP"></InputCheckbox>
|
|
</div>
|
|
|
|
<div class="col-auto formatoCampos">
|
|
<label class="tituloLbl">Art. 7.1.A RD.365/1995</label>
|
|
<InputCheckbox @bind-Value="Model.VIRTUALAC" class="inputForm"></InputCheckbox>
|
|
</div>
|
|
|
|
<div class="col-auto formatoCampos">
|
|
<label class="tituloLbl">Art. 7.1.b)RD 365/1995</label>
|
|
<InputCheckbox @bind-Value="Model!.VIRTUALAC2" class="inputForm"></InputCheckbox>
|
|
</div>
|
|
</div>
|
|
|
|
</Content>
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
</EditForm>
|
|
|
|
@if (!string.IsNullOrEmpty(idRPTDes))
|
|
{
|
|
<Tabs Style="padding-top:50px; width:100%;" EnableFadeEffect="true">
|
|
<Tab Title="Descripción RPT" Active="true">
|
|
<Content>
|
|
<div style="display:block;gap:10px; margin-bottom:20px;" class="mt-4">
|
|
<Button class="btnOAAFAzul" @onclick="@(() => abrirPopupPuestos(new PUESTOS()))"> Nuevo puesto </Button>
|
|
<Grid TItem="bdAntifraude.db.PUESTOS"
|
|
Class="table tablaRegPers"
|
|
Data="listadoPuestos"
|
|
AllowFiltering="false"
|
|
PageSize="10"
|
|
AllowPaging="true"
|
|
AllowSorting="true"
|
|
EmptyText="No se han encontrado datos"
|
|
Height="100"
|
|
PageSizeSelectorVisible="false"
|
|
PageSizeSelectorItems="@(new int[] { 5,10,20,50 })"
|
|
Responsive="true"
|
|
PaginationItemsTextFormat="{0} - {1} de {2} elementos">
|
|
|
|
<GridColumns>
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Código" Class="col-1" PropertyName="CODIGO" SortKeySelector="item => item.CODIGO">
|
|
@context.CODIGO
|
|
</GridColumn>
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Estado" Class="col-1" PropertyName="ESTADO" SortKeySelector="item => item.ESTADO">
|
|
@context.ESTADO
|
|
</GridColumn>
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Dotación" PropertyName="IDDOTACIONNavigation">
|
|
@context.IDDOTACIONNavigation?.DESCRIPCION
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Persona" PropertyName="IDPERSONALNavigation">
|
|
@context.IDPERSONALNavigation?.NOMBRE @context.IDPERSONALNavigation?.APELLIDOS
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Ocupación" PropertyName="IDOCUPACIONNavigation">
|
|
@context.IDOCUPACIONNavigation?.DESCRIPCION
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Titular" PropertyName="TITULARNavigation">
|
|
@context.TITULARNavigation?.NOMBRE @context.TITULARNavigation?.APELLIDOS
|
|
</GridColumn>
|
|
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" HeaderText="Adscripción al servicio" PropertyName="IDRPTNavigation?.IDSITUACIONNavigation">
|
|
@context.IDSERVICIOADSCRITONavigation?.DESCRIPCION
|
|
</GridColumn>
|
|
|
|
|
|
<GridColumn TItem="bdAntifraude.db.PUESTOS" Class="col-1" HeaderText="">
|
|
<span @onclick="@(() => abrirPopupPuestos(@context))" style="cursor: pointer;">
|
|
<Icon CustomIconName="fas fa-edit"></Icon>
|
|
</span>
|
|
<span @onclick="@(() => abrirPopupConfirmacion(@context))" style="cursor: pointer;">
|
|
<Icon CustomIconName="fas fa-trash"></Icon>
|
|
</span>
|
|
</GridColumn>
|
|
|
|
</GridColumns>
|
|
</Grid>
|
|
|
|
</div>
|
|
|
|
</Content>
|
|
</Tab>
|
|
</Tabs>
|
|
}
|
|
|
|
</div>
|
|
|
|
}
|
|
|
|
|
|
|
|
@code {
|
|
/// ATRIBUTOS
|
|
|
|
[Parameter]
|
|
public string? cl { get; set; } = "";
|
|
[Parameter]
|
|
public string? np { get; set; } = "";
|
|
public bool ocultarBtnBrr { get; set; }
|
|
private bool desactivarPlaza { get; set; }
|
|
public string idRPTDes { get; set; } = "";
|
|
public string idRPT { get; set; } = "";
|
|
List<ToastMessage> messages = new List<ToastMessage>();
|
|
[SupplyParameterFromForm]
|
|
private RPT_DESCRIP Model { get; set; } = new RPT_DESCRIP();
|
|
private PUESTOS puestoSelect = new PUESTOS();
|
|
private PUESTOS puestoOriginal = new PUESTOS();
|
|
private string tituloPopup = "";
|
|
private Modal popupNewPuesto = default!;
|
|
private Modal popupConfirmacion = default!;
|
|
private string lblNombre = "";
|
|
public bool borrarPuesto { get; set; }
|
|
|
|
// LISTADOS PARA COMBOBOX
|
|
private List<ENUMERACIONES> listadoDepartamento = new List<ENUMERACIONES>();
|
|
private List<ADSCRIPCION> listadoAdscri = new List<ADSCRIPCION>();
|
|
private List<GRUPO> listadoGrupo = new List<GRUPO>();
|
|
private List<NIVEL> listadoNvl = new List<NIVEL>();
|
|
private List<PROVISION> listadoProvisi = new List<PROVISION>();
|
|
private List<CUERPO> listadoCuerpo = new List<CUERPO>();
|
|
private List<OCUPACION> listadoOcupacion = new List<OCUPACION>();
|
|
private List<SERVICIOS> listadoServicios = new List<SERVICIOS>();
|
|
private List<DOTACION> listadoDotacion = new List<DOTACION>();
|
|
private List<PERSONAS> listadoPersonas = new List<PERSONAS>();
|
|
private List<string> listadoGruposRPT = new List<string>();
|
|
private bool showDropdown { get; set; }
|
|
private bool showDropdowntit { get; set; }
|
|
private string filterText { get; set; } = "";
|
|
private string filterTextTit { get; set; } = "";
|
|
private string linkVolver { get; set; } = "";
|
|
|
|
//LIST GRID PUESTOS
|
|
private List<PUESTOS> listadoPuestos = new List<PUESTOS>();
|
|
private HttpClient cliente = new HttpClient();
|
|
private EditContext? editContext;
|
|
private ValidationMessageStore? messageStore;
|
|
private void ShowDropdown(int dropdown)
|
|
{
|
|
if (dropdown == 0)
|
|
{
|
|
showDropdown = true;
|
|
}
|
|
if (dropdown == 1)
|
|
{
|
|
showDropdowntit = true;
|
|
}
|
|
}
|
|
private async void HideDropdownAfterDelay(int dropdown)
|
|
{
|
|
// Pequeño delay para no cerrar el dropdown antes de poder hacer clic
|
|
// (opcional, puedes eliminarlo si no es necesario)
|
|
if (dropdown == 0)
|
|
{
|
|
await Task.Delay(200);
|
|
showDropdown = false;
|
|
StateHasChanged();
|
|
}
|
|
if (dropdown == 1)
|
|
{
|
|
await Task.Delay(200);
|
|
showDropdowntit = false;
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
private IEnumerable<PERSONAS> FiltrarPersonas(IEnumerable<PERSONAS> pers, string text)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(text))
|
|
{
|
|
// Sin texto: muestra todos
|
|
return pers.OrderBy(p => p.APELLIDOS);
|
|
}
|
|
else
|
|
{
|
|
// Con texto: filtramos
|
|
return pers
|
|
.Where(p => p.NOMBRE.Contains(text, StringComparison.OrdinalIgnoreCase) || p.APELLIDOS.Contains(text, StringComparison.OrdinalIgnoreCase))
|
|
.OrderBy(p => p.APELLIDOS);
|
|
}
|
|
}
|
|
private void SelectPersona(PERSONAS pers)
|
|
{
|
|
filterText = pers.NOMBRE + " " + pers.APELLIDOS;
|
|
puestoSelect.IDPERSONAL = pers.IDPERSONA;
|
|
showDropdown = false;
|
|
}
|
|
private void vaciarPersona()
|
|
{
|
|
filterText = "";
|
|
puestoSelect.IDPERSONAL = null;
|
|
showDropdown = false;
|
|
}
|
|
private IEnumerable<PERSONAS> FiltrarTitular(IEnumerable<PERSONAS> pers, string text)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(text))
|
|
{
|
|
// Sin texto: muestra todos
|
|
return pers.OrderBy(p => p.APELLIDOS);
|
|
}
|
|
else
|
|
{
|
|
// Con texto: filtramos
|
|
return pers
|
|
.Where(p => p.NOMBRE.Contains(text, StringComparison.OrdinalIgnoreCase) || p.APELLIDOS.Contains(text, StringComparison.OrdinalIgnoreCase))
|
|
.OrderBy(p => p.APELLIDOS);
|
|
}
|
|
}
|
|
private void SelectTitular(PERSONAS pers)
|
|
{
|
|
filterTextTit = pers.NOMBRE + " " + pers.APELLIDOS;
|
|
puestoSelect.TITULAR = pers.IDPERSONA;
|
|
showDropdowntit = false;
|
|
}
|
|
private void vaciarTitular()
|
|
{
|
|
filterTextTit = "";
|
|
puestoSelect.TITULAR = null;
|
|
showDropdown = false;
|
|
}
|
|
protected void volver() { Navigation.NavigateTo(linkVolver, forceLoad: true); }
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
try
|
|
{
|
|
editContext = new EditContext(Model);
|
|
messageStore = new ValidationMessageStore(editContext);
|
|
|
|
var uri = Navigation.ToAbsoluteUri(Navigation.Uri);
|
|
|
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("cl", out var clValue))
|
|
{
|
|
cl = clValue;
|
|
}
|
|
|
|
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("np", out var clValueNp))
|
|
{
|
|
np = clValueNp;
|
|
idRPT = tsUtilidades.crypt.FEncS(np, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", -875421649);
|
|
}
|
|
|
|
idRPTDes = tsUtilidades.crypt.FEncS(cl, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", -875421649);
|
|
|
|
cliente = Utilidades.ObtenerCliente(UserState.Token, HttpClientFactory);
|
|
|
|
|
|
if (string.IsNullOrEmpty(idRPTDes))
|
|
{
|
|
ocultarBtnBrr = true;
|
|
await rellenarListados();
|
|
await rellenarLitadoDepartamentos();
|
|
await rellenarLitadoServicios();
|
|
await rellanarListPersonas();
|
|
desactivarPlaza = false;
|
|
}
|
|
else
|
|
{
|
|
ocultarBtnBrr = false;
|
|
desactivarPlaza = true;
|
|
|
|
Model = await Utilidades.ObtenerObjeto<bdAntifraude.db.RPT_DESCRIP>(cliente, "/api/RPT_DESCRIP/" + idRPTDes);
|
|
lblNombre = Model?.IDRPTNavigation?.DESCRIPCION ?? "";
|
|
idRPT = Model?.IDRPT.ToString()!;
|
|
|
|
|
|
await rellenarListados();
|
|
await rellenarLitadoDepartamentos();
|
|
await rellenarLitadoServicios();
|
|
await rellanarListPersonas();
|
|
await gridPuestos();
|
|
|
|
var culture = new CultureInfo("es-ES");
|
|
CultureInfo.DefaultThreadCurrentCulture = culture;
|
|
CultureInfo.DefaultThreadCurrentUICulture = culture;
|
|
}
|
|
|
|
linkVolver = "/DesgloseRPT?cl=" + tsUtilidades.crypt.FEncS(idRPT, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
private void ValidarYActualizar(ChangeEventArgs e, string fieldName)
|
|
{
|
|
var value = e.Value?.ToString();
|
|
var field = new FieldIdentifier(Model, fieldName);
|
|
|
|
switch (fieldName)
|
|
{
|
|
case nameof(Model.GRUPO1):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.GRUPO1 = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.GRUPO1 = 0;
|
|
}
|
|
break;
|
|
case nameof(Model.PLAZAS):
|
|
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.PLAZAS = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.PLAZAS = 0;
|
|
}
|
|
|
|
break;
|
|
case nameof(Model.DENOMINACION): Model.DENOMINACION = value; break;
|
|
case nameof(Model.IDDEPARTAMENTO):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.IDDEPARTAMENTO = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.IDDEPARTAMENTO = 0;
|
|
}
|
|
break;
|
|
case nameof(Model.ADSCRIPCION):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.ADSCRIPCION = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.ADSCRIPCION = 0;
|
|
}
|
|
break;
|
|
case nameof(Model.IDNIVEL_RPT):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.IDNIVEL_RPT = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.IDNIVEL_RPT = 0;
|
|
}
|
|
break;
|
|
case nameof(Model.PROVISION):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.PROVISION = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.PROVISION = 0;
|
|
}
|
|
break;
|
|
case nameof(Model.ESPECIFICO):
|
|
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
string valueString = value.Replace("€", "").Replace(" ", "").Replace(".", "");
|
|
Model.ESPECIFICO = decimal.Parse(valueString);
|
|
}
|
|
else
|
|
{
|
|
Model.ESPECIFICO = 0;
|
|
}
|
|
|
|
break;
|
|
case nameof(Model.CUERPO1):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
Model.CUERPO1 = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
Model.CUERPO1 = 0;
|
|
}
|
|
break;
|
|
case nameof(puestoSelect.IDDOTACION):
|
|
if (!string.IsNullOrEmpty(value))
|
|
{
|
|
|
|
puestoSelect.IDDOTACION = int.Parse(value);
|
|
}
|
|
else
|
|
{
|
|
puestoSelect.IDDOTACION = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
messageStore?.Clear(field);
|
|
if (fieldName == nameof(puestoSelect.IDDOTACION) && puestoSelect.IDDOTACION == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione una dotación.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.GRUPO1) && Model.GRUPO1 == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione un grupo.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.IDDEPARTAMENTO) && Model.IDDEPARTAMENTO == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione un departamento.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.ADSCRIPCION) && Model.ADSCRIPCION == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione una adscripción.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.IDNIVEL_RPT) && Model.IDNIVEL_RPT == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione un nivel.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.PROVISION) && Model.PROVISION == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione una provisión.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.CUERPO1) && Model.CUERPO1 == 0)
|
|
{
|
|
messageStore?.Add(field, "Seleccione un cuerpo.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.PLAZAS) && Model.PLAZAS <= 0)
|
|
{
|
|
messageStore?.Add(field, "El número de plazas debe ser mayor que 0.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.ESPECIFICO) && Model.ESPECIFICO <= 0)
|
|
{
|
|
messageStore?.Add(field, "El número específico debe ser mayor que 0.");
|
|
}
|
|
|
|
if (fieldName == nameof(Model.DENOMINACION) && string.IsNullOrEmpty(Model.DENOMINACION))
|
|
{
|
|
messageStore?.Add(field, "La denominación es obligatoria.");
|
|
}
|
|
else if (fieldName == nameof(Model.DENOMINACION) && Model!.DENOMINACION!.Length > 100)
|
|
{
|
|
|
|
messageStore?.Add(field, "La denominación no puede tener más de 100 caracteres.");
|
|
}
|
|
|
|
editContext?.NotifyValidationStateChanged();
|
|
}
|
|
private void ValidarTodo()
|
|
{
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.GRUPO1 }, nameof(Model.GRUPO1));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.PLAZAS }, nameof(Model.PLAZAS));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.DENOMINACION }, nameof(Model.DENOMINACION));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.IDDEPARTAMENTO }, nameof(Model.IDDEPARTAMENTO));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.ADSCRIPCION }, nameof(Model.ADSCRIPCION));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.IDNIVEL_RPT }, nameof(Model.IDNIVEL_RPT));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.PROVISION }, nameof(Model.PROVISION));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.CUERPO1 }, nameof(Model.CUERPO1));
|
|
ValidarYActualizar(new ChangeEventArgs { Value = Model.ESPECIFICO }, nameof(Model.ESPECIFICO));
|
|
}
|
|
private void ValidarPuesto()
|
|
{
|
|
ValidarYActualizar(new ChangeEventArgs { Value = puestoSelect.IDDOTACION }, nameof(puestoSelect.IDDOTACION));
|
|
}
|
|
private string GetPlaceholder(string fieldName)
|
|
{
|
|
var field = new FieldIdentifier(Model, fieldName);
|
|
return messageStore?[field].FirstOrDefault() ?? string.Empty;
|
|
}
|
|
private string GetExternalValidationMessage(string fieldName)
|
|
{
|
|
var field = new FieldIdentifier(Model, fieldName);
|
|
return messageStore?[field].FirstOrDefault() ?? string.Empty;
|
|
}
|
|
private string GetCssClass(string fieldName)
|
|
{
|
|
var field = new FieldIdentifier(Model, fieldName);
|
|
return messageStore![field].Any() ? "is-invalid" : string.Empty;
|
|
}
|
|
private void MostrarErrores()
|
|
{
|
|
messageStore?.Clear();
|
|
foreach (var field in new[] { nameof(Model.GRUPO1), nameof(Model.PLAZAS) })
|
|
{
|
|
ValidarYActualizar(new ChangeEventArgs { Value = typeof(DesgloseRPTVM).GetProperty(field)?.GetValue(Model) }, field);
|
|
}
|
|
}
|
|
private async Task ObtenerDotacionPorId(int idDotacion)
|
|
{
|
|
|
|
try
|
|
{
|
|
|
|
Expression<Func<DOTACION, bool>> filtro = x => x.IDDOTACION == idDotacion;
|
|
|
|
puestoSelect.IDDOTACIONNavigation = await Utilidades.ObtenerObjeto<DOTACION>(cliente, "/api/DOTACION/filtrar-entidad", filtro);
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
throw new Exception("Mensaje.", e);
|
|
}
|
|
|
|
}
|
|
|
|
// RELLENAR GRID PUESTOS
|
|
private async Task gridPuestos()
|
|
{
|
|
try
|
|
{
|
|
Expression<Func<PUESTOS, bool>> filtro = x => x.IDRPTDES == int.Parse(idRPTDes);
|
|
|
|
listadoPuestos = await Utilidades.ObtenerObjeto<List<PUESTOS>>(cliente, "/api/PUESTOS/GetWithIncludes/" + idRPTDes);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
private async Task rellanarListPersonas()
|
|
{
|
|
try
|
|
{
|
|
Expression<Func<PERSONAS, bool>> filtro = x => x.FECHABAJA.HasValue == false;
|
|
|
|
listadoPersonas = await Utilidades.ObtenerObjeto<List<PERSONAS>>(cliente, "/api/PERSONAS/filtrar", filtro);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
throw new Exception("Mensaje.", e);
|
|
}
|
|
}
|
|
|
|
// RELLENAR LISTAS
|
|
private async Task rellenarListados()
|
|
{
|
|
try
|
|
{
|
|
List<string> listadosAEncontrar = new List<string>()
|
|
{
|
|
"UNIDADADMINISTRATIVA", "ADSCRIPCION", "GRUPO", "NIVEL", "PROVISION", "CUERPO", "OCUPACION","DOTACION"
|
|
};
|
|
|
|
foreach (string listado in listadosAEncontrar)
|
|
{
|
|
var response = await cliente.GetAsync("/api/" + listado + "/");
|
|
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
var resultContent = await response.Content.ReadAsStringAsync();
|
|
|
|
switch (listado)
|
|
{
|
|
case "ADSCRIPCION":
|
|
listadoAdscri = JsonConvert.DeserializeObject<List<ADSCRIPCION>>(resultContent) ?? new List<ADSCRIPCION>();
|
|
break;
|
|
|
|
case "GRUPO":
|
|
listadoGrupo = JsonConvert.DeserializeObject<List<GRUPO>>(resultContent) ?? new List<GRUPO>();
|
|
break;
|
|
|
|
case "NIVEL":
|
|
listadoNvl = JsonConvert.DeserializeObject<List<NIVEL>>(resultContent) ?? new List<NIVEL>();
|
|
break;
|
|
case "PROVISION":
|
|
listadoProvisi = JsonConvert.DeserializeObject<List<PROVISION>>(resultContent) ?? new List<PROVISION>();
|
|
break;
|
|
|
|
case "CUERPO":
|
|
listadoCuerpo = JsonConvert.DeserializeObject<List<CUERPO>>(resultContent) ?? new List<CUERPO>();
|
|
break;
|
|
case "OCUPACION":
|
|
listadoOcupacion = JsonConvert.DeserializeObject<List<OCUPACION>>(resultContent) ?? new List<OCUPACION>();
|
|
break;
|
|
case "DOTACION":
|
|
listadoDotacion = JsonConvert.DeserializeObject<List<DOTACION>>(resultContent) ?? new List<DOTACION>();
|
|
break;
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {response.StatusCode}");
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
private async Task rellenarLitadoServicios()
|
|
{
|
|
try
|
|
{
|
|
|
|
listadoServicios = await Utilidades.ObtenerObjeto<List<SERVICIOS>>(cliente, "/api/SERVICIOS");
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
private async Task rellenarLitadoDepartamentos()
|
|
{
|
|
try
|
|
{
|
|
Expression<Func<ENUMERACIONES, bool>> filtro = x => x.IDGRUPOENUMERACIONNavigation!.GRUPO! == "DEP";
|
|
|
|
List<ENUMERACIONES> enumsEncontrado = await Utilidades.ObtenerObjeto<List<ENUMERACIONES>>(cliente, "/api/ENUMERACIONES/filtrar", filtro);
|
|
|
|
listadoDepartamento = enumsEncontrado;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
|
|
// MANEJAR GRIDS
|
|
private async Task manejarPuestos(string accion)
|
|
{
|
|
try
|
|
{
|
|
|
|
switch (accion)
|
|
{
|
|
case "update":
|
|
ValidarPuesto();
|
|
|
|
if (!editContext.GetValidationMessages().Any())
|
|
{
|
|
// if (puestoSelect.PERSONAQUEOCUPA == "" || puestoSelect.PERSONAQUEOCUPA == "N/A") { puestoSelect.IDPERSONAL = null; }
|
|
// if (puestoSelect.PERSONAQUETITULAR== "" || puestoSelect.PERSONAQUETITULAR== "N/A") { puestoSelect.TITULAR= null; }
|
|
|
|
await Utilidades.ActualizarObjeto<PUESTOS>(cliente, "/api/PUESTOS/" + puestoSelect.IDPUESTO, puestoSelect);
|
|
await gridPuestos();
|
|
await cerrarPopupPuesto();
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
case "create":
|
|
|
|
ValidarPuesto();
|
|
|
|
if (!editContext.GetValidationMessages().Any())
|
|
{
|
|
puestoSelect.IDRPTDES = int.Parse(idRPTDes);
|
|
puestoSelect.IDRPT = Model!.IDRPT;
|
|
|
|
await Utilidades.NuevoObjeto<PUESTOS>(cliente, "/api/PUESTOS", puestoSelect);
|
|
await gridPuestos();
|
|
await cerrarPopupPuesto();
|
|
}
|
|
break;
|
|
|
|
case "delete":
|
|
var responsed = await cliente.DeleteAsync("/api/PUESTOS/" + puestoSelect.IDPUESTO);
|
|
await gridPuestos();
|
|
await cerrarPopupConfirmacion();
|
|
break;
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
|
|
//POPUPS
|
|
private async Task abrirPopupPuestos(PUESTOS puesto)
|
|
{
|
|
puestoSelect = puesto;
|
|
|
|
if (puesto.IDPUESTO != 0)
|
|
{
|
|
// puestoOriginal = puesto;
|
|
filterText = puestoSelect.PERSONAQUEOCUPA;
|
|
filterTextTit = puestoSelect.PERSONAQUETITULAR;
|
|
tituloPopup = "Modificar puesto";
|
|
}
|
|
else
|
|
{
|
|
filterText = null;
|
|
filterTextTit = null;
|
|
tituloPopup = "Nuevo puesto";
|
|
}
|
|
|
|
await popupNewPuesto.ShowAsync();
|
|
}
|
|
private async Task cerrarPopupPuesto()
|
|
{
|
|
await popupNewPuesto.HideAsync();
|
|
}
|
|
private async Task cerrarPopupConfirmacion()
|
|
{
|
|
await popupConfirmacion.HideAsync();
|
|
}
|
|
|
|
// GUARDAR
|
|
private async Task guardarFormulario()
|
|
{
|
|
try
|
|
{
|
|
|
|
ValidarTodo();
|
|
if (!editContext!.GetValidationMessages().Any())
|
|
{
|
|
await guardarRPTForm();
|
|
|
|
messages.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Primary,
|
|
Message = $"Guardado correctamente.",
|
|
});
|
|
}
|
|
else
|
|
{
|
|
messages.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Warning,
|
|
Message = $"Debe rellenar los campos obligatorios.",
|
|
});
|
|
}
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
messages.Add(new ToastMessage
|
|
{
|
|
Type = ToastType.Danger,
|
|
Message = $"Error al guardar.",
|
|
});
|
|
}
|
|
|
|
}
|
|
private async Task guardarRPTForm()
|
|
{
|
|
try
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(idRPTDes))
|
|
{
|
|
var a = await Utilidades.ActualizarObjeto<bdAntifraude.db.RPT_DESCRIP>(cliente, "/api/RPT_DESCRIP/" + Model!.IDRPTDES, Model);
|
|
Navigation.NavigateTo(Navigation.Uri, true);
|
|
}
|
|
else
|
|
{
|
|
Model!.IDRPT = int.Parse(idRPT);
|
|
|
|
await ObtenerCodigo();
|
|
|
|
var rptDesAgregado = await Utilidades.NuevoObjeto<bdAntifraude.db.RPT_DESCRIP>(cliente, "/api/RPT_DESCRIP", Model);
|
|
|
|
await GenerarPlazas(rptDesAgregado);
|
|
|
|
string link = "/InfoPuestosDeTrabajo?cl=" + tsUtilidades.crypt.FEncS(rptDesAgregado.IDRPTDES.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
|
|
|
|
Navigation.NavigateTo(link, forceLoad: true);
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Error al obtener los datos: {e.Message}");
|
|
}
|
|
}
|
|
private async Task ObtenerCodigo()
|
|
{
|
|
GRUPO grupoSeleccionado = await Utilidades.ObtenerObjeto<GRUPO>(cliente, "/api/GRUPO/" + Model!.GRUPO1.ToString());
|
|
listadoGruposRPT = await Utilidades.ObtenerObjeto<List<string>>(cliente, "/api/RPT_DESCRIP/GetAtributo/" + idRPT + "/" + Model!.GRUPO1.ToString());
|
|
|
|
int ultimoPues = 0;
|
|
|
|
if (listadoGruposRPT.Count() > 0)
|
|
{
|
|
ultimoPues = int.Parse(listadoGruposRPT.Last().Split('.')[1]);
|
|
}
|
|
|
|
Model!.CODIGO = grupoSeleccionado?.GRUPO1?.Trim() + "." + (ultimoPues + 1).ToString();
|
|
|
|
}
|
|
private async Task GenerarPlazas(RPT_DESCRIP rptDes)
|
|
{
|
|
Expression<Func<DOTACION, bool>> filtro = x => x.DOTACION1 == "ND";
|
|
|
|
DOTACION dotaci = await Utilidades.ObtenerObjeto<DOTACION>(cliente, "/api/DOTACION/filtrar-entidad", filtro);
|
|
|
|
for (int i = 0; i < rptDes.PLAZAS; i++)
|
|
{
|
|
|
|
PUESTOS pues = new PUESTOS();
|
|
pues.CODIGO = rptDes.CODIGO + "." + (i + 1).ToString();
|
|
pues.ESTADO = "L";
|
|
pues.IDDOTACION = dotaci.IDDOTACION;
|
|
pues.ORDEN = i + 1;
|
|
pues.IDRPT = rptDes.IDRPT;
|
|
pues.IDRPTDES = rptDes.IDRPTDES;
|
|
|
|
await Utilidades.NuevoObjeto<PUESTOS>(cliente, "/api/PUESTOS", pues);
|
|
}
|
|
|
|
}
|
|
|
|
// ELIMINAR
|
|
private async Task borrarRPTDes()
|
|
{
|
|
|
|
var responsed = await cliente.DeleteAsync("/api/RPT_DESCRIP/" + idRPTDes);
|
|
|
|
await cerrarPopupConfirmacion();
|
|
|
|
string idRPTEncriptado = tsUtilidades.crypt.FEncS(idRPT.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
|
|
|
|
Navigation.NavigateTo("/DesgloseRPT?cl=" + idRPTEncriptado, forceLoad: true);
|
|
}
|
|
private async Task abrirPopupConfirmacion(PUESTOS puestoBorrar)
|
|
{
|
|
borrarPuesto = true;
|
|
puestoSelect = puestoBorrar;
|
|
|
|
await popupConfirmacion.ShowAsync();
|
|
}
|
|
private async Task abrirPopupConfirmacionRPTDesc()
|
|
{
|
|
borrarPuesto = false;
|
|
await popupConfirmacion.ShowAsync();
|
|
}
|
|
private string HashRed()
|
|
{
|
|
string link = "/DesgloseRPT?cl=" + tsUtilidades.crypt.FEncS(idRPT.ToString(), "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.:/-*", 875421649);
|
|
return link;
|
|
}
|
|
}
|