321 lines
9.3 KiB
C#
321 lines
9.3 KiB
C#
using GPW.CORE.Data.DbModels;
|
|
using GPW.CORE.Data.Services;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.JSInterop;
|
|
|
|
namespace GPW.CORE.WRKLOG.Components.Compo
|
|
{
|
|
public partial class RegRichieste
|
|
{
|
|
#region Public Properties
|
|
|
|
[Parameter]
|
|
public int IdxDipendente { get; set; }
|
|
|
|
[Parameter]
|
|
public bool isLoading
|
|
{
|
|
get => loading;
|
|
set => loading = value;
|
|
}
|
|
|
|
[Parameter]
|
|
public int months { get; set; }
|
|
|
|
[Parameter]
|
|
public EventCallback<bool> ReportUpdate { get; set; }
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Protected Properties
|
|
|
|
[Inject]
|
|
protected MessageService AppMServ { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected GpwDataService GDataServ { get; set; } = null!;
|
|
|
|
[Inject]
|
|
protected IJSRuntime JSRuntime { get; set; } = null!;
|
|
|
|
protected bool loading { get; set; } = false;
|
|
|
|
#endregion Protected Properties
|
|
|
|
#region Protected Methods
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
dtInizio = new DateTime(DateTime.Today.Year, 1, 1);
|
|
dtFine = dtInizio.AddYears(2);
|
|
currRecord.IdxDipendente = AppMServ.IdxDipendente;
|
|
CodGiust = "";
|
|
var rawGiust = await GDataServ.AnagGiust();
|
|
if (rawGiust != null)
|
|
{
|
|
ListGiust = rawGiust.Where(x => x.showReq).ToList();
|
|
}
|
|
await ReloadData();
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
|
|
#region Private Fields
|
|
|
|
private bool isSendingData = false;
|
|
private List<AnagGiustModel>? ListGiust = null;
|
|
private List<RegRichiesteModel>? ListRecords = null;
|
|
|
|
/// <summary>
|
|
/// Numero giorni minimo per richiesta ferie
|
|
/// </summary>
|
|
private int NumDayFerieRichAntic = 14;
|
|
|
|
/// <summary>
|
|
/// NUmero giorni massimo per richiesta permessi
|
|
/// </summary>
|
|
private int NumDayPermMax = 21;
|
|
|
|
private int sendDataMaxVal = 100;
|
|
private int sendDataNextVal = 0;
|
|
private int sendDataVal = 0;
|
|
private bool showAdd = false;
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Private Properties
|
|
|
|
private string CodGiust
|
|
{
|
|
get => currRecord.CodGiust;
|
|
set
|
|
{
|
|
if (currRecord.CodGiust != value)
|
|
{
|
|
currRecord.CodGiust = value;
|
|
// calcolo limite date
|
|
DateTime mDtStart = minDate(value);
|
|
DateTime mDtEnd = maxDate(value);
|
|
// imposto dataOra min/max da tipo cod Giust
|
|
if (value != "FER")
|
|
{
|
|
int ora = DateTime.Now.Hour;
|
|
mDtStart = minDate(value).AddHours(ora);
|
|
mDtEnd = minDate(value).AddHours(ora + 4);
|
|
}
|
|
// modifico SE fossero extra periodo
|
|
if (mDtStart > dtStart)
|
|
{
|
|
dtStart = mDtStart;
|
|
}
|
|
if (mDtEnd < dtEnd)
|
|
{
|
|
dtStart = mDtStart;
|
|
dtEnd = mDtEnd;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private RegRichiesteModel currRecord { get; set; } = new RegRichiesteModel();
|
|
|
|
private DateTime dtEnd
|
|
{
|
|
get => currRecord.DtEnd;
|
|
set
|
|
{
|
|
currRecord.DtEnd = value;
|
|
// verifico coerenza date...
|
|
if (dtStart >= dtEnd && dtEnd.Hour > 2)
|
|
{
|
|
dtStart = dtEnd.AddHours(-1);
|
|
}
|
|
}
|
|
}
|
|
|
|
private DateTime dtFine { get; set; } = DateTime.Today;
|
|
|
|
private DateTime dtInizio { get; set; } = DateTime.Today;
|
|
|
|
private DateTime dtStart
|
|
{
|
|
get => currRecord.DtStart;
|
|
set
|
|
{
|
|
currRecord.DtStart = value;
|
|
// verifico coerenza date...
|
|
if (dtEnd <= dtStart)
|
|
{
|
|
dtEnd = dtStart.AddHours(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
private string NomeDip
|
|
{
|
|
get
|
|
{
|
|
string answ = "per cortesia";
|
|
if (AppMServ != null && AppMServ.RigaDip != null)
|
|
{
|
|
answ = $"{AppMServ.RigaDip.Nome}";
|
|
}
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
#endregion Private Properties
|
|
|
|
#region Private Methods
|
|
|
|
private async Task DoDelete(RegRichiesteModel selItem)
|
|
{
|
|
// chiedo verifica
|
|
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler eliminare il record selezionato??"))
|
|
return;
|
|
|
|
await Task.Delay(1);
|
|
isSendingData = true;
|
|
sendDataVal = 0;
|
|
sendDataNextVal = 90;
|
|
await Task.Delay(1);
|
|
await InvokeAsync(StateHasChanged);
|
|
await GDataServ.RegRichiesteDelete(selItem);
|
|
sendDataVal = 100;
|
|
sendDataNextVal = 100;
|
|
await Task.Delay(1);
|
|
await ReloadData();
|
|
await ReportUpdate.InvokeAsync(true);
|
|
isSendingData = false;
|
|
}
|
|
|
|
private void editRec(RegRichiesteModel selItem)
|
|
{
|
|
currRecord = selItem;
|
|
showAdd = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// init valori da config
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private async Task initConf()
|
|
{
|
|
// leggo conf standard giorni permessi/ferie
|
|
var sNumDayFerieRichAntic = GDataServ.ConfigGetKey("NumDayFerieRichAntic");
|
|
if (sNumDayFerieRichAntic != null)
|
|
{
|
|
int.TryParse(sNumDayFerieRichAntic.valore, out NumDayFerieRichAntic);
|
|
}
|
|
var sNumDayPermMax = GDataServ.ConfigGetKey("NumDayPermMax");
|
|
if (sNumDayPermMax != null)
|
|
{
|
|
int.TryParse(sNumDayPermMax.valore, out NumDayPermMax);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Registra il record
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private async Task insertRecord()
|
|
{
|
|
isSendingData = true;
|
|
sendDataVal = 0;
|
|
sendDataNextVal = 5;
|
|
await Task.Delay(1);
|
|
// verifica preliminare delle date compatibili...
|
|
var dtCheckMin = minDate(currRecord.CodGiust);
|
|
var dtCheckMax = maxDate(currRecord.CodGiust);
|
|
if (currRecord.DtStart < dtCheckMin)
|
|
{
|
|
currRecord.DtStart = dtCheckMin;
|
|
}
|
|
else if (currRecord.DtStart > dtCheckMax)
|
|
{
|
|
currRecord.DtStart = dtCheckMax;
|
|
currRecord.DtEnd = dtCheckMax;
|
|
}
|
|
if (currRecord.DtEnd > dtCheckMax)
|
|
{
|
|
currRecord.DtEnd = dtCheckMax;
|
|
}
|
|
else if (currRecord.DtEnd < dtCheckMin)
|
|
{
|
|
currRecord.DtStart = dtCheckMin;
|
|
currRecord.DtEnd = dtCheckMin;
|
|
}
|
|
// effettuo insert...
|
|
sendDataVal = 5;
|
|
sendDataNextVal = 90;
|
|
await Task.Delay(1);
|
|
var updTask = Task.Run(async () =>
|
|
await GDataServ.RegRichiesteUpsert(currRecord)
|
|
);
|
|
await updTask;
|
|
// effettuo insert...
|
|
sendDataVal = 100;
|
|
sendDataNextVal = 100;
|
|
await Task.Delay(1);
|
|
showAdd = false;
|
|
await ReloadData();
|
|
await ReportUpdate.InvokeAsync(true);
|
|
isSendingData = false;
|
|
}
|
|
|
|
private DateTime maxDate(string codGiust)
|
|
{
|
|
DateTime answ = DateTime.Today.AddDays(NumDayPermMax);
|
|
switch (codGiust)
|
|
{
|
|
case "FER":
|
|
answ = new DateTime(answ.Year, answ.Month, 1).AddMonths(months);
|
|
break;
|
|
|
|
case "104":
|
|
case "PERM":
|
|
default:
|
|
DateTime.Today.AddDays(NumDayPermMax);
|
|
break;
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
private DateTime minDate(string codGiust)
|
|
{
|
|
DateTime answ = DateTime.Today;
|
|
switch (codGiust)
|
|
{
|
|
case "FER":
|
|
answ = DateTime.Today.AddDays(NumDayFerieRichAntic);
|
|
break;
|
|
|
|
case "104":
|
|
case "PERM":
|
|
default:
|
|
answ = DateTime.Today;
|
|
break;
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
private async Task ReloadData()
|
|
{
|
|
ListRecords = null;
|
|
await initConf();
|
|
ListRecords = GDataServ.RegRichiesteGetByDip(AppMServ.IdxDipendente, dtInizio, dtFine);
|
|
}
|
|
|
|
private async Task toggleAddNew()
|
|
{
|
|
showAdd = !showAdd;
|
|
await Task.Delay(1);
|
|
if (showAdd)
|
|
{
|
|
currRecord = new RegRichiesteModel() { IdxDipendente = AppMServ.IdxDipendente };
|
|
}
|
|
}
|
|
|
|
#endregion Private Methods
|
|
}
|
|
} |