This commit is contained in:
Emmanuele Sassi
2023-05-17 13:49:51 +02:00
15 changed files with 364 additions and 167 deletions
@@ -101,6 +101,7 @@ namespace WebDoorCreator.Data.DbModels
DoorModel answ = new DoorModel()
{
MeasureUnit = MeasureUnit,
OrderId = OrderId,
TypeId = TypeId,
DoorExtCode = DoorExtCode,
DateIns = adesso,
@@ -108,6 +109,7 @@ namespace WebDoorCreator.Data.DbModels
DateMod = adesso,
UserIdMod = userId,
DoorDescript = DoorDescript,
Quantity = Quantity,
UnitCost = UnitCost,
DateLockExpiry = DateLockExpiry,
UserIdLock = UserIdLock
+34 -14
View File
@@ -158,25 +158,45 @@ namespace WebDoorCreator.Data.DbModels
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public DoorOpModel ObjClone(string userId)
public DoorOpModel ObjClone(string userId, int doorId)
{
DoorOpModel answ = new DoorOpModel();
DateTime adesso = DateTime.Now;
DoorOpModel answ = new DoorOpModel()
if (doorId == 0)
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = userId,
UserIdMod = userId,
ObjectId = ObjectId,
DoorId = DoorId,
JsoncConfigVal = JsoncConfigVal,
JsoncActVal = JsoncActVal,
userConfirm = userConfirm,
DtConfirm = DtConfirm
};
answ = new DoorOpModel()
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = userId,
UserIdMod = userId,
ObjectId = ObjectId,
DoorId = DoorId,
JsoncConfigVal = JsoncConfigVal,
JsoncActVal = JsoncActVal,
userConfirm = userConfirm,
DtConfirm = DtConfirm
};
}
else
{
answ = new DoorOpModel()
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = userId,
UserIdMod = userId,
ObjectId = ObjectId,
DoorId = doorId,
JsoncConfigVal = JsoncConfigVal,
JsoncActVal = JsoncActVal,
userConfirm = userConfirm,
DtConfirm = DtConfirm
};
}
return answ;
}
}
}
@@ -113,7 +113,7 @@ namespace WebDoorCreator.UI.Components.Buttons
string currDdf = currDdfConv.GetSerialized(listOp);
// FIXME TODO: si potrebbe eliminare in futuro che va su REDIS
await SaveYaml(currDdf);
//await SaveYaml(currDdf);
// versione corrente del DDF generato
int currVers = await QDataServ.SendCalcReq(idDoor, currDdf);
@@ -36,7 +36,7 @@
@if (isCloneMode)
{
<DoorSvgObj LineColor="#2D3047" LineWidth="8" ObjH="200" ObjW="650" LeftTextClass="col-4" RightTextClass="col-8" EC_ExeClone="@(()=>doClone(""))" Message1="@door.DoorId.ToString()" ShowClone="true" ImagePath="@imgPath" ObjId="idxCount" TextData="@textDictSetup(door)"></DoorSvgObj>
<DoorSvgObj LineColor="#2D3047" LineWidth="8" ObjH="200" ObjW="650" LeftTextClass="col-4" RightTextClass="col-8" EC_ExeClone="@(()=>doClone(@door.DoorId.ToString()))" Message1="@door.DoorId.ToString()" ShowClone="true" ImagePath="@imgPath" ObjId="idxCount" TextData="@textDictSetup(door)"></DoorSvgObj>
}
else if (isAddRemMode)
{
@@ -27,6 +27,7 @@ namespace WebDoorCreator.UI.Components.DoorMan
#region Protected Properties
protected List<DoorModel>? DoorsList { get; set; } = null;
protected List<DoorOpModel>? DoorOpsList { get; set; } = null;
protected bool IsChanged { get; set; } = false;
[Inject]
@@ -205,17 +206,43 @@ namespace WebDoorCreator.UI.Components.DoorMan
await InvokeAsync(StateHasChanged);
}
protected List<DoorOpModel> doorOps2Add = new List<DoorOpModel>();
/// <summary>
/// Clona la porta selezionata con annesse door operations
/// </summary>
/// <param name="message"></param>
/// <returns></returns>
protected async Task doClone(string message)
{
var door2Clone = DoorsList?.Where(x => x.DoorId == int.Parse(message)).FirstOrDefault();
if (door2Clone != null)
DoorOpsList = await WDService.DoorOpGetByDoorId(int.Parse(message));
if (DoorOpsList != null)
{
var doorOpToAdd = door2Clone.ObjClone(userId);
var doorOps2Clone = DoorOpsList?.Where(x => x.DoorId == int.Parse(message)).ToList();
// salvo!
var done = await WDService.DoorInsert(doorOpToAdd);
await ReloadData();
var door2Clone = DoorsList?.Where(x => x.DoorId == int.Parse(message)).FirstOrDefault();
if (door2Clone != null)
{
var doorToAdd = door2Clone.ObjClone(userId);
// salvo!
var newDoorId = await WDService.DoorInsert(doorToAdd);
if (newDoorId != 0 && doorOps2Clone != null)
{
foreach (var item in doorOps2Clone)
{
var doorOp2Add = item.ObjClone(userId, newDoorId);
doorOps2Add.Add(doorOp2Add);
}
// salvo!
var done = await WDService.DoorOpInsert(newDoorId, doorOps2Add);
if (done)
{
await ReloadData();
}
}
}
}
}
protected async void sendToAbh(int ordId, int orderStat)
@@ -4,9 +4,7 @@
@if (HwToShow != null)
{
<div class="row m-0">
<HardwareNewPanel HwLabel="@HwToShow.Label" E_act2Rel="setRefOnDelete" Lingua="@Lingua" HwCode="@HwToShow.TableName" HwAdded="@hwAdd" DoorId="@DoorId"></HardwareNewPanel>
<HardwareNewPanel HwInst="getInstNumber(HwToShow.Value)" HwLabel="@HwToShow.Label" E_act2Rel="setRefOnDelete" Lingua="@Lingua" HwCode="@HwToShow.TableName" HwAdded="@hwAdd" DoorId="@DoorId"></HardwareNewPanel>
</div>
<div>
@@ -19,18 +17,7 @@
@foreach (var item in HwList)
{
<div class="row col-4">
<div class="rectangle @setBgColor(item.TableName) row" @onclick="()=>hwToChoose(item.TableName)">
<div class="col-8">
@(translate(item.Label))
</div>
@if (@getInstNumber(item.Value) > 0)
{
<div class="col-4 text-end pe-4">
@getInstNumber(item.Value)
</div>
}
<div class="circle"></div>
</div>
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExeFunct="@(()=> hwToChoose(item.TableName))" ObjId="@item.TableName" ItemName="@(translate(item.Label))" ItemCount="getInstNumber(item.Value)"></HwSvgObj>
</div>
}
</div>
@@ -6,19 +6,23 @@ else
{
@if (DoorOpList != null)
{
<div class="text-center">
@*<div class="text-center">
<div class="row col-4">
<div class="rectangle">
@(translate(HwLabel))
<div class="circle" @onclick="()=>hwToAdd()"></div>
</div>
</div>
</div>*@
<div class="row col-4">
<HwSvgObj LineColor="#CFD8DC" LineWidth="8" ObjH="200" ObjW="700" EC_ExePlus="@(()=> hwToAdd(""))" ObjId="@HwCode" ItemName="@(translate(HwLabel))" ItemCount="@HwInst" ShowPlus="true" ImagePath=""></HwSvgObj>
</div>
<div class="row">
@foreach (var item in DoorOpList)
{
<div class="col-4" style="min-height: 20rem;">
<HwSingleInstance E_act2Rel="setRefOnDelete" instanceN="@(instNum++)" Lingua="@Lingua" DoorOpInst="@item" HwCode="@HwCode" E_recordUpdate="manageUpdate"></HwSingleInstance>
<HwSingleInstance E_act2Rel="setRefOnDelete" instanceN="@(getDoorOpInstNum(item.DoorOpId))" Lingua="@Lingua" DoorOpInst="@item" HwCode="@HwCode" E_recordUpdate="manageUpdate"></HwSingleInstance>
</div>
}
</div>
@@ -29,9 +29,13 @@ namespace WebDoorCreator.UI.Components.Hardware
[Parameter]
public string HwCode { get; set; } = "";
[Parameter]
public string HwLabel { get; set; } = "";
[Parameter]
public int HwInst { get; set; } = 0;
[Parameter]
public string Lingua { get; set; } = "EN";
[CascadingParameter]
@@ -46,7 +50,17 @@ namespace WebDoorCreator.UI.Components.Hardware
protected List<DoorOpModel>? DoorOpList { get; set; } = null!;
protected List<DoorOpModel> DoorOp2ModList { get; set; } = new List<DoorOpModel>();
protected int instNum { get; set; } = 1;
//protected int instNum { get; set; } = 1;
protected int getDoorOpInstNum(int doorOpId)
{
int answ = 0;
if (DoorOpList != null)
{
answ = DoorOpList.FindIndex(x => x.DoorOpId == doorOpId);
}
return answ + 1;
}
[Inject]
protected WDCRefreshService WDCRefresh { get; set; } = null!;
@@ -98,7 +112,7 @@ namespace WebDoorCreator.UI.Components.Hardware
[Inject]
protected WDCRefreshService WDCRService { get; set; } = null!;
protected async Task hwToAdd()
protected async Task hwToAdd(string message)
{
await Task.Delay(1);
DateTime adesso = DateTime.Now;
@@ -106,99 +120,97 @@ namespace WebDoorCreator.UI.Components.Hardware
if (HwCode != null)
{
if (DoorOp2ModList.Count == 0)
var listRecordFolder = await WDCService.ListValuesGetAll(HwCode, "Folder");
var listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "template");
if (listRecordTmp!.Count == 0)
{
var listRecordFolder = await WDCService.ListValuesGetAll(HwCode, "Folder");
var listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "template");
if (listRecordTmp!.Count == 0)
{
listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "shape");
}
Dictionary<string, List<string>> defaultDict = new Dictionary<string, List<string>>();
List<string> listDefVal = new List<string>();
Dictionary<string, string> actDict = new Dictionary<string, string>();
List<string> defaultParamsList = new List<string>();
string default2Design = "";
listRecordTmp = await WDCService.ListValuesGetAll(HwCode, "shape");
}
Dictionary<string, List<string>> defaultDict = new Dictionary<string, List<string>>();
List<string> listDefVal = new List<string>();
Dictionary<string, string> actDict = new Dictionary<string, string>();
List<string> defaultParamsList = new List<string>();
string default2Design = "";
if (listRecordFolder != null)
if (listRecordFolder != null)
{
var firstFolder = listRecordFolder.FirstOrDefault();
if (firstFolder != null)
{
var firstFolder = listRecordFolder.FirstOrDefault();
if (firstFolder != null)
actDict.Add(firstFolder.FieldName, firstFolder.Value.Trim());
if (listRecordTmp != null)
{
actDict.Add(firstFolder.FieldName, firstFolder.Value.Trim());
if (listRecordTmp != null)
var listRecordTemplates = listRecordTmp.Where(x => x.Value.Contains(firstFolder.Value)).ToList();
if (listRecordTemplates != null)
{
var listRecordTemplates = listRecordTmp.Where(x => x.Value.Contains(firstFolder.Value)).ToList();
if (listRecordTemplates != null)
var firstTemplate = listRecordTemplates.FirstOrDefault();
if (firstTemplate != null)
{
var firstTemplate = listRecordTemplates.FirstOrDefault();
if (firstTemplate != null)
if (firstTemplate.DefaultVal != "")
{
if (firstTemplate.DefaultVal != "")
{
default2Design = firstTemplate.DefaultVal;
}
else
{
default2Design = "1";
}
actDict.Add(firstTemplate.FieldName, firstTemplate.Value.Trim());
}
}
}
}
var listRecordGP = await WDCService.ListValuesGetAll(HwCode, $"Graphic Parameters{default2Design}");
if (listRecordGP != null)
{
foreach (var item in listRecordGP)
{
if (item.isSerializable && item.DefaultVal.Contains(","))
{
listDefVal = item.DefaultVal.Trim().Split(",").ToList();
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split(",")[0].Split("/")[0]);
}
else
{
if (item.DefaultVal.Contains("/"))
{
listDefVal = new List<string>() { item.DefaultVal.Trim().Split("/")[0] };
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split("/")[0]);
default2Design = firstTemplate.DefaultVal;
}
else
{
listDefVal = new List<string>() { item.DefaultVal.Trim() };
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim());
default2Design = "1";
}
actDict.Add(firstTemplate.FieldName, firstTemplate.Value.Trim());
}
//defaultParamsList.Add(listDefVal);
defaultDict.Add(item.Value.Trim(), listDefVal);
}
//actDict.Add(HwToShow.TableName, actParamsList);
var jsonDef = JsonConvert.SerializeObject(defaultDict);
var jsonAct = JsonConvert.SerializeObject(actDict);
DoorOpModel doorOpToAdd = new DoorOpModel()
}
}
var listRecordGP = await WDCService.ListValuesGetAll(HwCode, $"Graphic Parameters{default2Design}");
if (listRecordGP != null)
{
foreach (var item in listRecordGP)
{
if (item.isSerializable && item.DefaultVal.Contains(","))
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = UserId,
UserIdMod = UserId,
ObjectId = HwCode,
DoorId = DoorId,
JsoncConfigVal = jsonDef,
JsoncActVal = jsonAct
};
listOp.Add(doorOpToAdd);
// salvo Door OP associate
bool fatto = await WDCService.DoorOpInsert(DoorId, listOp);
if (fatto)
{
//hwAdd = fatto;
await InvokeAsync(StateHasChanged);
listDefVal = item.DefaultVal.Trim().Split(",").ToList();
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split(",")[0].Split("/")[0]);
}
else
{
if (item.DefaultVal.Contains("/"))
{
listDefVal = new List<string>() { item.DefaultVal.Trim().Split("/")[0] };
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim().Split("/")[0]);
}
else
{
listDefVal = new List<string>() { item.DefaultVal.Trim() };
actDict.Add(item.Value.Trim(), item.DefaultVal.Trim());
}
}
//defaultParamsList.Add(listDefVal);
defaultDict.Add(item.Value.Trim(), listDefVal);
}
//actDict.Add(HwToShow.TableName, actParamsList);
var jsonDef = JsonConvert.SerializeObject(defaultDict);
var jsonAct = JsonConvert.SerializeObject(actDict);
DoorOpModel doorOpToAdd = new DoorOpModel()
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = UserId,
UserIdMod = UserId,
ObjectId = HwCode,
DoorId = DoorId,
JsoncConfigVal = jsonDef,
JsoncActVal = jsonAct
};
listOp.Add(doorOpToAdd);
// salvo Door OP associate
bool fatto = await WDCService.DoorOpInsert(DoorId, listOp);
if (fatto)
{
//hwAdd = fatto;
//await InvokeAsync(StateHasChanged);
await ReloadData();
}
}
}
@@ -160,7 +160,7 @@ namespace WebDoorCreator.UI.Components.Hardware
protected async Task doClone()
{
var doorOpToAdd = DoorOpInst.ObjClone(userId);
var doorOpToAdd = DoorOpInst.ObjClone(userId, 0);
List<DoorOpModel> doorOpAddList = new List<DoorOpModel>() { doorOpToAdd };
// salvo!
@@ -5,10 +5,10 @@
<div class="row" style="@TextStyle">
@foreach (var item in TextData)
{
<div class="">
<div class="@LeftTextClass">
@item.Key
</div>
<div class="text-end">
<div class="@RightTextClass text-end">
<b>@item.Value</b>
</div>
}
@@ -63,7 +63,7 @@ namespace WebDoorCreator.UI.Components.SvgComp
public int ObjH { get; set; } = 204;
[Parameter]
public int ObjId { get; set; } = 0;
public string ObjId { get; set; } = "0";
[Parameter]
public int ObjW { get; set; } = 450;
@@ -2133,6 +2133,14 @@ namespace WebDoorCreator.UI.Data
return answ;
}
public async Task<bool> FlushCustomPattern(string keyWord)
{
await Task.Delay(1);
RedisValue pattern = new RedisValue($"{Constants.redisBaseAddr}:{keyWord}");
bool answ = await ExecFlushRedisPattern(pattern);
return answ;
}
#endregion Private Methods
}
}
+31
View File
@@ -0,0 +1,31 @@
@page "/Utils"
<div class="row">
<div class="col">
<button class="btn btn-lg btn-primary" @onclick="()=>doSave()">DO RESET</button>
@if (done)
{
<h1>DONE!!!!</h1>
}
</div>
<div class="col">
<button class="btn btn-lg btn-primary" @onclick="()=>flushCache()">DO FLUSH CACHE FROM ROOT (ALL!!)</button>
</div>
<div class="col">
<div class="input-group mb-3">
@if (keyWord != "")
{
<button class="btn btn-lg btn-outline-primary" @onclick="()=>FlushCustomPattern()">DO FLUSH CACHE BY KEYWORD)</button>
}
else
{
<button class="btn btn-lg btn-outline-secondary" @onclick="()=>FlushCustomPattern()">DO FLUSH CACHE BY KEYWORD</button>
}
<input type="text" class="form-control" placeholder="" @bind="@keyWord">
</div>
</div>
</div>
+149
View File
@@ -0,0 +1,149 @@
using Microsoft.AspNetCore.Components;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.Data.Services;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Pages
{
public partial class Utils
{
protected List<DoorOpModel>? DoorOpsList { get; set; }
protected List<DoorModel> DoorsList { get; set; } = new List<DoorModel>();
protected List<OrderStatusViewModel>? OrdersList { get; set; }
protected List<string> ordListVal { get; set; } = new List<string>();
protected List<DoorOpModel> listOp { get; set; } = new List<DoorOpModel>();
protected List<DoorOpModel> listOpAll { get; set; } = new List<DoorOpModel>();
[Inject]
protected QueueDataService QDataServ { get; set; } = null!;
[Inject]
protected WebDoorCreatorService WDCService { get; set; } = null!;
protected async Task doorsGetAll()
{
await ordersGetAll();
if (OrdersList != null)
{
foreach (var item in OrdersList)
{
var doors2Add = await WDCService.DoorGetByOrderId(item.OrderId);
if (doors2Add != null)
{
foreach (var door in doors2Add)
{
DoorsList.Add(door);
}
}
}
}
}
protected bool done { get; set; } = false;
[Inject]
protected IConfiguration config { get; set; } = null!;
protected override void OnInitialized()
{
base.OnInitialized();
string vers = config.GetValue<string>("ConfDDF:VersNumber");
bool remDoorOp = config.GetValue<bool>("ConfDDF:RemoveDoorOps");
var headRows = config.GetSection("ConfDDF:Header").Get<List<string>>();
var footRows = config.GetSection("ConfDDF:Footer").Get<List<string>>();
currDdfConv = new WebDoorCreator.Data.DDF.Converter(vers, remDoorOp, headRows, footRows);
}
protected WebDoorCreator.Data.DDF.Converter currDdfConv { get; set; } = null!;
/// <summary>
/// Effettua salvataggio record e generazione DDF
/// </summary>
/// <returns></returns>
protected async Task doSave()
{
await doorsGetAll();
if (DoorsList != null)
{
foreach (var door in DoorsList)
{
await Task.Delay(50);
listOpAll = await WDCService.DoorOpGetByDoorId(door.DoorId);
if (listOpAll != null)
{
listOp = listOpAll.Where(x => x.userConfirm != "" && x.DtConfirm != null).ToList();
if (listOp != null)
{
// chiamo metodo x avewre DDF serializzato
//var list2Ord = ;
var CurrentCompoOrder = await WDCService.ListValuesGetAll("*", "Hardware");
if (CurrentCompoOrder != null)
{
foreach (var item in CurrentCompoOrder.OrderBy(x => x.Ordinal).ToList())
{
ordListVal.Add(item.TableName);
}
}
listOp = listOp.OrderBy(d => ordListVal.IndexOf(d.ObjectId)).ToList();
if (listOp.Count != 0 && listOp != null)
{
string currDdf = currDdfConv.GetSerialized(listOp);
// FIXME TODO: si potrebbe eliminare in futuro che va su REDIS
//await SaveYaml(currDdf);
// versione corrente del DDF generato
int currVers = await QDataServ.SendCalcReq(door.DoorId, currDdf);
}
}
}
}
}
done = true;
}
protected async Task ordersGetAll()
{
DateTime adesso = DateTime.Today;
OrdersList = await WDCService.OrderStatusGetFilt(0, 0, adesso.AddYears(-200), adesso.AddYears(200));
}
public async Task flushCache()
{
await Task.Delay(1);
await WDService.FlushRedisCache();
await Task.Delay(1);
// rimando a pagina corrente
NavManager.NavigateTo("/", true);
}
protected string _keyWord { get; set; } = "";
protected string keyWord
{
get => _keyWord;
set => _keyWord = value;
}
public async Task FlushCustomPattern()
{
await Task.Delay(1);
await WDService.FlushCustomPattern(keyWord);
await Task.Delay(1);
// rimando a pagina corrente
NavManager.NavigateTo("/", true);
}
[Inject]
protected NavigationManager NavManager { get; set; } = null!;
[Inject]
protected WebDoorCreatorService WDService { get; set; } = null!;
}
}
-43
View File
@@ -1,43 +0,0 @@
#WEBDOORCREATOR
#Config: EgtCompoBase
#Door1
version: 2
produce: true
measures: inches
code: 0015943
order:
customer:
elevation:
project:
pO:
line:
date: 2023-05-17T00:00:00.0000000+02:00
piece: DO_1
size:
width: 33.8125
height: 81.25
thickness: 1.75
swing: LH
secure: UP
material: wood
profiles:
lockedge:
type: SQ
machining: ON
overmaterial: 0.1
hingeedge:
type: SQ
machining: ON
overmaterial: 0.1
top:
type: SQ
machining: ON
overmaterial: 0.1
bottom:
type: SQ
machining: ON
overmaterial: 0.1
hardware: {}
---