Files
2024-08-26 11:40:08 +02:00

247 lines
6.7 KiB
C#

using Microsoft.AspNetCore.Components;
using System.Drawing;
using EgwCoreLib.Razor.Data;
namespace EgwCoreLib.Razor
{
public partial class CalendarWeek
{
#region Public Properties
/// <summary>
/// Evento x ritorno click
/// </summary>
[Parameter]
public EventCallback<bool> backToCalendar { get; set; }
/// <summary>
/// Periodo da mostrare (tipicamente 1 settimana)
/// </summary>
[Parameter]
public List<DateTime> DateList { get; set; } = new List<DateTime>();
/// <summary>
/// Evento selezione data valida (= entro il periodo selezionato)
/// </summary>
[Parameter]
public EventCallback<DateTime> DateSelected { get; set; }
/// <summary>
/// Evento selezione data singola giornata da header
/// </summary>
[Parameter]
public EventCallback<DateTime> EC_HeadDateSel { get; set; }
/// <summary>
/// Ora fine visualizzazione calendario
/// </summary>
[Parameter]
public int EndHour { get; set; } = 20;
/// <summary>
/// Eventi da inserire
/// </summary>
[Parameter]
public List<CalendarEvent> EventList { get; set; } = new List<CalendarEvent>();
/// <summary>
/// Css titolo
/// default: color: red
/// </summary>
[Parameter]
public string HeadStyle { get; set; } = "color: #E67E22";
/// <summary>
/// Altezza di ogni blocco ora da mostrare
/// </summary>
[Parameter]
public int HeightHour { get; set; } = 20;
/// <summary>
/// Larghezza calcolata delle etichette, minimo tra
/// </summary>
[Parameter]
public int labelWidth { get; set; } = 15;
/// <summary>
/// Fattore di shift in X, se 0 = nessuno shift, se &gt; 0 è percentuale moltiplica il
/// gradino calcolato
/// Default: 100 (poi riportato a intero, quindi 100/100 = 1.0)
/// </summary>
[Parameter]
public int PercX { get; set; } = 100;
/// <summary>
/// Fattore di shift in Y, se 0 = nessuno shift, se &gt; 0 è percentuale moltiplica il
/// gradino calcolato
/// Default: 90 (poi riportato a intero, quindi 90/100 = 0.9)
/// </summary>
[Parameter]
public int PercY { get; set; } = 90;
[Parameter]
public int StartHour { get; set; } = 8;
/// <summary>
/// Dimensioni viewbox GLOBALE
/// </summary>
[Parameter]
public Size vBox { get; set; } = new Size(1200, 1600);
/// <summary>
/// Evento richiesta modifica settimana
/// </summary>
[Parameter]
public EventCallback<int> WeekChanged { get; set; }
#endregion Public Properties
#region Protected Fields
protected List<int> HourSlot = new List<int>();
#endregion Protected Fields
#region Protected Properties
protected int calcColSpan
{
get => numDays + 1;
}
protected int contWidth
{
get => (vBox.Width * 2) / (2 * numDays + 1);
//get => numDays > 1 ? (vBox.Width * 2) / (2 * numDays + 1) : vBox.Width * 90 / 100;
}
protected DateTime DtRif
{
get
{
DateTime answ = DateTime.Today;
if (DateList != null && DateList.Count > 0)
{
answ = DateList[0];
}
return answ;
}
}
protected int numDays
{
get => DateList.Count;
}
protected Size vBoxCont
{
get
{
// label e' MENO di 1/tot columns
Size answ = new Size(contWidth, vBox.Height);
return answ;
}
}
protected Size vBoxLabel
{
get
{
// label e' MENO di 1/tot columns
Size answ = new Size(contWidth / 2, vBox.Height);
//Size answ = new Size(labelWidth, vBox.Height);
return answ;
}
}
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Richiesta cambio sett di riferimento --&gt; riporta evento
/// </summary>
/// <param name="delta"></param>
/// <returns></returns>
protected async Task changeWeek(int delta)
{
await WeekChanged.InvokeAsync(delta);
}
protected List<CalendarEvent> DayEvent(DateTime DtReq)
{
List<CalendarEvent> answ = new List<CalendarEvent>();
if (EventList != null)
{
answ = EventList.Where(x => x.Inizio.Date == DtReq.Date).ToList();
}
return answ;
}
/// <summary>
/// Genera etichette orarie (1 x ora)
/// </summary>
/// <returns></returns>
protected List<CalendarEvent> LabelList()
{
int idx = 0;
List<CalendarEvent> answ = HourSlot.Select(x => new CalendarEvent()
{
id = idx++,
Inizio = DtRif.AddHours(x),
Fine = DtRif.AddHours(x),
CssClass = "text-light",
Title = $"{x:00}:00",
Description = $"{x:00}:00"
}).ToList();
return answ;
}
protected override async Task OnParametersSetAsync()
{
HourSlot = new List<int>();
for (int i = StartHour; i <= EndHour; i++)
{
HourSlot.Add(i);
}
await InvokeAsync(StateHasChanged);
}
protected async Task OpenCalendarMonth()
{
await backToCalendar.InvokeAsync(true);
}
protected async Task SelectDate(DateTime selDate)
{
await EC_HeadDateSel.InvokeAsync(selDate);
}
/// <summary>
/// GetIso8601WeekOfYear
/// </summary>
/// <param name="DtReq"></param>
/// <returns></returns>
protected int weekNum(DateTime DtReq)
{
int wNum = WeekData.GetIso8601WeekOfYear(DtReq);
return wNum;
}
#endregion Protected Methods
#region Private Properties
private string dataWidth
{
get => $"{(double)contWidth / vBox.Width:P2}".Replace(",", ".");
}
private string lblWidth
{
get => $"{(double)(vBox.Width - (contWidth * numDays)) / vBox.Width:P2}".Replace(",", ".");
}
#endregion Private Properties
}
}