Files
gpw_next/GPW.CORE.SMART/Components/CompTimbra.razor.cs
T
2023-01-13 18:47:41 +01:00

140 lines
4.0 KiB
C#

using GPW.CORE.Data.DbModels;
using GPW.CORE.Data.DTO;
using GPW.CORE.Smart.Data;
using Microsoft.AspNetCore.Components;
namespace GPW.CORE.Smart.Components
{
public partial class CompTimbra
{
#region Public Properties
[Parameter]
public int IdxDipCurr { get; set; } = 0;
#endregion Public Properties
#region Protected Properties
[Inject]
protected MessageService MService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
//private int idxDipCurr { get; set; } = 0;
protected override void OnInitialized()
{
MService.EA_TimbUpd += MService_EA_TimbUpd;
MService.EA_DateChanged += MService_EA_DateChanged;
nextIsEntrata = MService.NextIsEntrata;
lastAction = MService.LastAction;
}
protected override async Task OnParametersSetAsync()
{
await reloadData();
await updateNextTimb();
}
#endregion Protected Methods
#region Private Fields
/// <summary>
/// elenco principale record utente
/// </summary>
private List<DailyDataDTO>? listRecords = null;
#endregion Private Fields
#region Private Properties
[Inject]
private CoreSmartDataService CDataServ { get; set; } = null!;
[Inject]
private CoreSmartDataService CSDataService { get; set; } = null!;
private DateTime dtCurr { get; set; } = DateTime.Today;
/// <summary>
/// Indica se mostrare prossima azione
/// </summary>
private string lastAction { get; set; } = "-";
/// <summary>
/// Indica quale deve essere prossima timbratura
/// </summary>
private bool nextIsEntrata { get; set; } = true;
/// <summary>
/// Indica se mostrare prossima azione
/// </summary>
private bool showAction { get; set; } = false;
private DailyDataDTO? todayDTO { get; set; } = null;
#endregion Private Properties
#region Private Methods
private async void MService_EA_DateChanged()
{
dtCurr = MService.targetDate;
await Task.Delay(1);
await reloadData();
await InvokeAsync(StateHasChanged);
}
private async void MService_EA_TimbUpd()
{
nextIsEntrata = MService.NextIsEntrata;
lastAction = MService.LastAction;
showAction = true;
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
}
private async Task reloadData()
{
// calcolo mese corrente e recupero dati
DateTime MeseStart = new DateTime(dtCurr.Year, dtCurr.Month, 1);
DateTime MeseEnd = MeseStart.AddMonths(1);
listRecords = await CSDataService.DailyDetails(IdxDipCurr, MeseStart, MeseEnd);
// recupero dati che mi servono...
await updateNextTimb();
}
private async Task updateNextTimb()
{
// verifico valore entrata/uscita x timbrature dipendente...
DateTime oggi = DateTime.Today.Date;
// recupero da dati correnti...
if (listRecords != null)
{
todayDTO = listRecords.FirstOrDefault(x => x.DtRif == oggi);
if (todayDTO != null)
{
nextIsEntrata = todayDTO.ListTimbr.Count % 2 == 0;
}
}
else
{
List<TimbratureModel> ListTimbOggi = await CDataServ.TimbratureDay(oggi, IdxDipCurr);
if (ListTimbOggi != null)
{
nextIsEntrata = ListTimbOggi.Count % 2 == 0;
}
else
{
nextIsEntrata = true;
}
}
MService.NextIsEntrata = nextIsEntrata;
}
#endregion Private Methods
}
}