Files
webwindowconfigurator/WebWindowComplex/Compo/AreaSash.razor.cs
T
Annamaria Sassi 2aa207d0d7 - Gestione soglia quando viene eliminata anta
- Gestione spessore split in anta o meno
2026-03-04 14:48:23 +01:00

421 lines
13 KiB
C#

using EgwCoreLib.Razor;
using Microsoft.AspNetCore.Components;
using Newtonsoft.Json.Linq;
using System;
using WebWindowComplex.Models;
using static WebWindowComplex.Json.WindowConst;
namespace WebWindowComplex.Compo
{
public partial class AreaSash
{
/// <summary>
/// Sash group corrente
/// </summary>
[CascadingParameter(Name = "CurrSashGroup")]
public Sash CurrSashGroup { get; set; } = null!;
/// <summary>
/// Sash dimension corrente
/// </summary>
[Parameter]
public SashDimension CurrSashDim { get; set; } = null!;
/// <summary>
/// Lista di ante che si stanno editando
/// </summary>
[Parameter]
public List<int> SashDimEditList { get; set; } = null!;
/// <summary>
/// Lista delle sash
/// </summary>
[CascadingParameter(Name = "SashList")]
public List<Sash> SashList { get; set; } = null!;
/// <summary>
/// Livello di accesso (utente base)
/// </summary>
[CascadingParameter(Name = "User")]
public bool User { get; set; } = false!;
/// <summary>
/// Indice della sash corrente
/// </summary>
[Parameter]
public int IndexSash { get; set; } = 0;
/// <summary>
/// Evento per aggiornare sash dimension
/// </summary>
[Parameter]
public EventCallback<SashDimension> EC_UpdateSashDim { get; set; }
/// <summary>
/// Evento per aggiornare sash
/// </summary>
[Parameter]
public EventCallback<DataUpdateProfile> EC_UpdateSash { get; set; }
/// <summary>
/// Evento per cambiare modalità di visualizzazione
/// </summary>
[Parameter]
public EventCallback<DataChangeMode> EC_EditView { get; set; }
/// <summary>
/// Evento per richiedere reset dizionari
/// </summary>
[Parameter]
public EventCallback<DataUpdateRes> EC_ReqResetDict { get; set; }
/// <summary>
/// Anta corrente
/// </summary>
public Area CurrAnta
{
get
{
if (CurrSashGroup.AreaList[IndexSash] is Splitted)
{
return CurrSashGroup.AreaList[IndexSash];
}
else
{
return CurrSashGroup;
}
}
set
{
CurrAnta = value;
}
}
/// <summary>
/// Metodo per avere il numero di decimali da usare nella form-input
/// </summary>
/// <returns></returns>
public int CssDecimals()
{
switch (CurrSashDim.MeasureType)
{
case Json.WindowConst.MeasureTypes.ABSOLUTE:
{
return 2;
}
case Json.WindowConst.MeasureTypes.PROPORTIONAL:
{
return 0;
}
case Json.WindowConst.MeasureTypes.PERCENTAGE:
{
return 1;
}
}
return 0;
}
///// <summary>
///// Metodo per avere il lo step da usare nella form-input
///// </summary>
///// <returns></returns>
//public double CssStepNumber()
//{
// switch (CurrSashDim.MeasureType)
// {
// case Json.WindowConst.MeasureTypes.ABSOLUTE:
// {
// return 0.5;
// }
// case Json.WindowConst.MeasureTypes.PROPORTIONAL:
// {
// return 1;
// }
// case Json.WindowConst.MeasureTypes.PERCENTAGE:
// {
// return 0.5;
// }
// }
// return 0;
//}
/// <summary>
/// Selezione tipo di apertura anta
/// </summary>
protected int OpeningTypeIndex
{
get => CurrSashDim.SelOpeningTypeIndex;
set
{
if (CurrSashDim.SelOpeningTypeIndex != value)
{
_ = EC_ReqResetDict.InvokeAsync(new DataUpdateRes { req = LayoutConst.DataAction.ResetHwOpt });
CurrSashDim.SelOpeningTypeIndex = value;
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
/// <summary>
/// Selezione tipo di misura della dimensione dell'anta
/// </summary>
protected int MeasureTypeIndex
{
get => CurrSashDim.SelMeasureTypeIndex;
set
{
if (CurrSashDim.SelMeasureTypeIndex != value)
{
CurrSashDim.SelMeasureTypeIndex = value;
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
/// <summary>
/// Inserimento dimensione anta
/// </summary>
protected double Dimension
{
get => CurrSashDim.dDimension;
set
{
if (CurrSashDim.dDimension != value)
{
CurrSashDim.dDimension = (double)Math.Round((decimal)value, CssDecimals());
_ = EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
}
/// <summary>
/// Sollevo evento richiesta per cambiare tutti i Joint
/// </summary>
/// <param name="JointType"> Tipo di giunto che si vuole </param>
/// <returns></returns>
private Task ChangeAllJoints(Json.WindowConst.Joints JointType)
{
foreach (var item in CurrSashDim.JointList)
item.SelJointType = JointType;
return EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
/// <summary>
/// Aggiornamento joint
/// </summary>
/// <param name="updRec"> Tipo di giunto che si vuole </param>
/// <returns></returns>
private async Task UpdateJoint(Joint updRec)
{
// cerco il record
var currRec = CurrSashDim.JointList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
/// <summary>
/// Aggiornamento element
/// </summary>
/// <param name="updRec"> Tipo di giunto che si vuole </param>
/// <returns></returns>
private async Task UpdateElement(ElementDimension updRec)
{
// cerco il record
var currRec = CurrSashDim.ElementDimensionList.FirstOrDefault(x => x.ParentArea == updRec.ParentArea && x.nIndex == updRec.nIndex);
// lo aggiorno
if (updRec != null)
{
currRec = updRec;
await EC_UpdateSashDim.InvokeAsync(CurrSashDim);
}
}
/// <summary>
/// Metodo per cambiare l'anta su cui è presente la maniglia
/// </summary>
/// <returns></returns>
private Task ChangeHandle()
{
// Cerco la Sash che si sta considerando nella lista Sash
var s = SashList.Where(x => x.GroupId == CurrSashGroup.GroupId).FirstOrDefault();
if (s != null)
{
// Setto la presenza o meno della maniglia per ogni anta
foreach (SashDimension item in s.SashList)
{
if (item.Equals(CurrSashDim))
{
item.bHasHandle = true;
}
else
{
if (item.bHasHandle)
{
switch (item.SelOpeningType)
{
case Openings.TILTTURN_LEFT:
{
item.SelOpeningType = Openings.TURNONLY_LEFT;
break;
}
case Openings.TILTTURN_RIGHT:
{
item.SelOpeningType = Openings.TURNONLY_RIGHT;
break;
}
default:
{
break;
}
}
}
item.bHasHandle = false;
}
}
}
CurrSashGroup.RefreshHardwareList();
CurrSashGroup.SetFirstHardware();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
/// <summary>
/// Copio contenuto anta da indexCopy a IndexModify
/// </summary>
/// <param name="IndexCopy"> Indice dell'ante di cui voglio copiare contenuto </param>
/// <param name="IndexModify"> Indice dell'ante di cui voglio modificare contenuto </param>
/// <returns></returns>
private Task CopyContentSash(int IndexCopy, int IndexModify)
{
isOpen = !isOpen;
// Anta selezionata
Area sashSplitted = CurrSashGroup.AreaList[IndexModify];
// Rimuovo riempimento da anta selezionata
sashSplitted.AreaList.RemoveAt(0);
// Creo la copia dell'anta scelta
Area a;
if (CurrSashGroup.AreaList[IndexCopy].AreaList.FirstOrDefault() != null)
{
a = CurrSashGroup.AreaList[IndexCopy].AreaList.FirstOrDefault()!.Copy(sashSplitted);
// Aggiungo copia all'anta selezionata
CurrSashGroup.AreaList[IndexModify].AreaList.Add(a);
}
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
/// <summary>
/// Metodo per aggiungere lo split nella singola anta
/// </summary>
/// <returns></returns>
private Task AddSplitToSash()
{
CurrAnta.AddSplit();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
/// <summary>
/// Metodo per aggiungere l'inglesina nella singola anta
/// </summary>
/// <returns></returns>
private Task AddInglesinaToSash()
{
CurrAnta.AddInglesina();
DataUpdateProfile args = new DataUpdateProfile()
{
sash = CurrSashGroup,
reqProfile = true
};
return EC_UpdateSash.InvokeAsync(args);
}
private bool isOpen = false;
private void ToggleDropdown()
{
isOpen = !isOpen;
}
/// <summary>
/// Metodo per determinare la visualizzazione dei pulsanti dei joint
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private string ButtonJointCss(Json.WindowConst.Joints type)
{
foreach (var item in CurrSashDim.JointList)
{
if (!item.SelJointType.Equals(type))
return "btn btn-outline-secondary btn-sm";
}
return "btn btn-secondary btn-sm";
}
private enum ModeView
{
NULL = 0,
View = 1,
Edit = 2
}
protected override void OnParametersSet()
{
//if (EditMode)
// mode = ModeView.Edit;
//else
// mode = ModeView.View;
}
private ModeView mode { get; set; } = ModeView.View;
private void doEdit(int index)
{
var args = new DataChangeMode
{
//Edit = true,
IndexSashEdit = index,
IndexSashClose = -1
};
_ = EC_EditView.InvokeAsync(args);
}
protected void ClosePopup(int index)
{
var args = new DataChangeMode
{
//Edit = false,
IndexSashEdit = -1,
IndexSashClose = index
};
_ = EC_EditView.InvokeAsync(args);
}
}
public class DataChangeMode {
public bool Edit { get; set; }
public int IndexSashEdit { get; set; }
public int IndexSashClose { get; set; }
}
public class DataUpdateProfile
{
public Sash sash { get; set; }
public bool reqProfile { get; set; } = false;
}
}