Files
gpw_next/GPW.CORE.WRKLOG/Components/Compo/CalendarioAziendale.razor.cs

390 lines
12 KiB
C#

using GPW.CORE.Data.DTO;
using Microsoft.AspNetCore.Components;
using Microsoft.Identity.Client;
using NLog;
using Radzen;
using Radzen.Blazor;
using Radzen.Blazor.Rendering;
using System;
using System.Diagnostics;
using static EgwCoreLib.Razor.Toggler;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace GPW.CORE.WRKLOG.Components.Compo
{
public partial class CalendarioAziendale
{
#region Public Properties
[Parameter]
public EventCallback<DateTime> DtReq { get; set; }
[Parameter]
public List<EventDTO> EvDtoList { get; set; } = null!;
[Parameter]
public DateTime firstDate { get; set; } = new DateTime(DateTime.Today.Year, 1, 1);
[Parameter]
public DateTime maxDate { get; set; } = new DateTime(DateTime.Today.Year + 1, 1, 1);
[Parameter]
public DateTime minDate { get; set; } = new DateTime(DateTime.Today.Year, 1, 1);
[Parameter]
public int MonthDispl
{
get => cMonth;
set => cMonth = value;
}
[Parameter]
public EventCallback<int> MonthReq { get; set; }
[Parameter]
public bool ShowNeedConf { get; set; } = false;
#endregion Public Properties
#region Protected Fields
protected RadzenScheduler<EventDTO> scheduler = null!;
#endregion Protected Fields
#region Protected Enums
protected enum Viste
{
Day,
Week,
Month,
Planner,
Year
}
#endregion Protected Enums
#region Protected Properties
protected int currMonth
{
get => cMonth;
set
{
if (cMonth != value)
{
cMonth = value;
MonthReq.InvokeAsync(value);
}
}
}
[Inject]
protected DialogService DialogService { get; set; } = null!;
protected Month StartMonth { get; set; } = Month.January;
#endregion Protected Properties
#region Protected Methods
protected async Task addMonth(int numMesi)
{
firstDate = firstDate.AddMonths(numMesi);
// verifico limiti...
if (numMesi > 0)
{
firstDate = firstDate > maxDate ? maxDate : firstDate;
}
else
{
firstDate = firstDate < minDate ? minDate : firstDate;
}
await Task.Delay(1);
}
protected string btnSel(string bName)
{
bool answ = false;
switch (bName)
{
case "CHIU":
answ = showChiu;
break;
case "FER":
answ = showFer;
break;
case "FEST":
answ = showFest;
break;
case "MAL":
answ = showMal;
break;
case "PER":
answ = showPer;
break;
default:
break;
}
return answ ? "btn-primary" : "btn-secondary";
}
#if false
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
// il mese viene preimpostato sul semestre corrente...
StartMonth = (Month)((DateTime.Today.Month / 6) * 6);
}
#endif
protected override async Task OnParametersSetAsync()
{
numEvAll = 0;
numEvFilt = 0;
if (EvDtoList != null && EvDtoList.Count > 0)
{
numEvAll = EvDtoList.Count();
FilterData();
if (scheduler != null)
{
try
{
await scheduler.Reload();
}
catch (Exception exc)
{
Log.Error($"eccezione durante OnParametersSet{Environment.NewLine}{exc}");
}
}
}
}
protected async Task StartMonthChange()
{
await scheduler.Reload();
}
protected void ToggChiu()
{
showChiu = !showChiu;
FilterData();
}
protected void ToggFer()
{
showFer = !showFer;
FilterData();
}
protected void ToggFest()
{
showFest = !showFest;
FilterData();
}
protected void ToggMal()
{
showMal = !showMal;
FilterData();
}
protected void ToggPer()
{
showPer = !showPer;
FilterData();
}
#endregion Protected Methods
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private int selectedIndex = 2;
#endregion Private Fields
#region Private Properties
private int cMonth { get; set; } = 3;
private string currView { get; set; } = "";
private List<EventDTO> EvDtoFilt { get; set; } = new List<EventDTO>();
private int numEvAll { get; set; } = 0;
private int numEvFilt { get; set; } = 0;
private string schedHeight { get; set; } = "height: 50rem;";
private DateTime SelDate { get; set; } = DateTime.Today;
private bool showChiu { get; set; } = true;
private bool showFer { get; set; } = true;
private bool showFest { get; set; } = true;
private bool showMal { get; set; } = true;
private bool showPer { get; set; } = true;
#endregion Private Properties
#region Private Methods
private void FilterData()
{
// in primis copio tutto
EvDtoFilt = EvDtoList;
if (ShowNeedConf)
{
EvDtoFilt = EvDtoFilt.Where(x => !x.Conf).ToList();
}
// controllo ogni toggle...
if (!showChiu)
{
EvDtoFilt = EvDtoFilt
.Where(x => !x.IsCompany || (x.IsCompany && !x.CodTipo.Equals("FER", StringComparison.InvariantCultureIgnoreCase)))
.ToList();
}
if (!showFer)
{
EvDtoFilt = EvDtoFilt
.Where(x => !x.CodTipo.Equals("FER", StringComparison.InvariantCultureIgnoreCase) || (x.CodTipo.Equals("FER", StringComparison.InvariantCultureIgnoreCase) && x.IsCompany))
.ToList();
}
if (!showFest)
{
EvDtoFilt = EvDtoFilt
.Where(x => !x.CodTipo.Equals("FEST", StringComparison.InvariantCultureIgnoreCase))
.ToList();
}
if (!showMal)
{
EvDtoFilt = EvDtoFilt
.Where(x => !x.CodTipo.Equals("MAL", StringComparison.InvariantCultureIgnoreCase))
.ToList();
}
if (!showPer)
{
EvDtoFilt = EvDtoFilt
.Where(x => !x.CodTipo.Equals("PERM", StringComparison.InvariantCultureIgnoreCase) && !x.CodTipo.Equals("104", StringComparison.InvariantCultureIgnoreCase))
.ToList();
}
numEvFilt = EvDtoFilt.Count();
}
/// <summary>
/// Sistemazione colore sfonto di ogni evento mostrato
/// </summary>
/// <param name="args"></param>
private void OnAppointmentRender(SchedulerAppointmentRenderEventArgs<EventDTO> args)
{
// Never call StateHasChanged in AppointmentRender - would lead to infinite loop
args.Attributes["style"] = $"background: {args.Data.Color}; color: {args.Data.ForeColor};";
}
/// <summary>
/// Selezione evento per display
/// </summary>
/// <param name="selEv"></param>
/// <returns></returns>
private async Task OnAppointmentSelect(SchedulerAppointmentSelectEventArgs<EventDTO> selEv)
{
var copy = selEv.Data.Clone();
await Task.Delay(1);
var data = await DialogService.OpenAsync<TaskDetail>("", new Dictionary<string, object> { { "ThisTask", copy } });
}
/// <summary>
/// Gestione richeista caricamento dati dal controllo x avere nuovo set da mostrare
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
private async Task OnLoadData(SchedulerLoadDataEventArgs args)
{
await Task.Delay(1);
currView = scheduler.SelectedView.Text.ToLowerInvariant();
DateTime dtMid = args.Start.AddDays(args.End.Subtract(args.Start).TotalDays / 2);
// controllo se sia cambiata data anno precedente...
if (dtMid.Year != SelDate.Year)
{
SelDate = dtMid;
await DtReq.InvokeAsync(SelDate);
}
// di almeno 1 anno in questo caso...
else if (SelDate != scheduler.Date || Math.Abs(scheduler.Date.Subtract(args.Start).TotalDays) > 365)
{
SelDate = args.Start.AddDays(4);
await DtReq.InvokeAsync(SelDate);
}
//schedHeight = (currView == "year" || currView == "planner") ? "height: 60rem;" : "height: 50rem;";
// // Get the appointments for between the Start and End
// data = await MyAppointmentService.GetData(selEv.Start, selEv.End);
}
private void OnSlotRender(SchedulerSlotRenderEventArgs args)
{
// Highlight today in month view
if (args.View.Text == "Month" && args.Start.Date == DateTime.Today)
{
args.Attributes["style"] = "background: var(--rz-scheduler-highlight-background-color, rgba(255,220,40,.2));";
}
// Highlight working hours (9-18)
if ((args.View.Text == "Week" || args.View.Text == "Day") && args.Start.Hour > 8 && args.Start.Hour < 19)
{
args.Attributes["style"] = "background: var(--rz-scheduler-highlight-background-color, rgba(255,220,40,.2));";
}
}
private async Task OnSlotSelect(SchedulerSlotSelectEventArgs args)
{
int prevIdx = selectedIndex;
await Task.Delay(1);
// verifico indice corretto della vista...
switch (args.View.Text)
{
case "Day":
selectedIndex = 0;
break;
case "Week":
selectedIndex = 1;
break;
case "Month":
selectedIndex = 2;
break;
case "Planner":
selectedIndex = 3;
break;
case "Year":
selectedIndex = 4;
break;
default:
break;
}
if (prevIdx != selectedIndex)
{
await scheduler.Reload();
}
await Task.Delay(1);
if (selectedIndex > 0)
{
selectedIndex--;
}
// imposto al data selezionata
SelDate = args.Start;
// riporto data al controller parent...
await DtReq.InvokeAsync(SelDate);
}
#endregion Private Methods
}
}