diff --git a/EgwCoreLib.Lux.Data/Controllers/LuxController.cs b/EgwCoreLib.Lux.Data/Controllers/LuxController.cs index 3ba22559..13a0dad6 100644 --- a/EgwCoreLib.Lux.Data/Controllers/LuxController.cs +++ b/EgwCoreLib.Lux.Data/Controllers/LuxController.cs @@ -1219,6 +1219,7 @@ namespace EgwCoreLib.Lux.Data.Controllers .Include(c => c.JobNav) .Include(c => c.PhaseNav) .Include(c => c.ResourceNav) + .Include(c => c.TagNav) .ToListAsync(); } catch (Exception exc) @@ -1311,7 +1312,7 @@ namespace EgwCoreLib.Lux.Data.Controllers { var currRec = dbCtx .DbSetJobStep - .Where(x => x.JobStepID == upsRec.JobStepID && upsRec.JobStepID>0) + .Where(x => x.JobStepID == upsRec.JobStepID && upsRec.JobStepID > 0) .FirstOrDefault(); // se trovato --> aggiorno if (currRec != null) @@ -1395,6 +1396,7 @@ namespace EgwCoreLib.Lux.Data.Controllers dbResult = await dbCtx .DbSetJobTask .Include(c => c.JobStepNav) + .Include(c => c.TagNav) .ToListAsync(); } catch (Exception exc) @@ -2156,6 +2158,7 @@ namespace EgwCoreLib.Lux.Data.Controllers { dbResult = await dbCtx .DbSetResource + .Include(d => d.DriverNav) .ToListAsync(); } catch (Exception exc) diff --git a/EgwCoreLib.Lux.Data/DbModel/Task/JobStepModel.cs b/EgwCoreLib.Lux.Data/DbModel/Task/JobStepModel.cs index bdd1f3ec..0a7b0a99 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Task/JobStepModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Task/JobStepModel.cs @@ -108,5 +108,14 @@ namespace EgwCoreLib.Lux.Data.DbModel.Task /// Many-to-many with Tags /// public virtual ICollection TagNav { get; set; } = new List(); + + /// + /// Numero Tags compresi + /// + [NotMapped] + public int NumTags + { + get => TagNav?.Count ?? 0; + } } } diff --git a/EgwCoreLib.Lux.Data/DbModel/Task/JobTaskModel.cs b/EgwCoreLib.Lux.Data/DbModel/Task/JobTaskModel.cs index 5f4eaf39..db33d3d1 100644 --- a/EgwCoreLib.Lux.Data/DbModel/Task/JobTaskModel.cs +++ b/EgwCoreLib.Lux.Data/DbModel/Task/JobTaskModel.cs @@ -57,5 +57,14 @@ namespace EgwCoreLib.Lux.Data.DbModel.Task { get => JobStepNav?.Count ?? 0; } + + /// + /// Numero Tags compresi + /// + [NotMapped] + public int NumTags + { + get => TagNav?.Count ?? 0; + } } } diff --git a/Lux.API/Lux.API.csproj b/Lux.API/Lux.API.csproj index 511cc631..9ada405f 100644 --- a/Lux.API/Lux.API.csproj +++ b/Lux.API/Lux.API.csproj @@ -4,7 +4,7 @@ net8.0 enable enable - 0.9.2510.3012 + 0.9.2510.3018 diff --git a/Lux.UI/Components/Compo/JobTask/JobStepMan.razor b/Lux.UI/Components/Compo/JobTask/JobStepMan.razor index 042a4d45..41b33dfd 100644 --- a/Lux.UI/Components/Compo/JobTask/JobStepMan.razor +++ b/Lux.UI/Components/Compo/JobTask/JobStepMan.razor @@ -95,6 +95,7 @@ Fase Risorsa Descrizione + Tags Resa @@ -148,6 +149,7 @@ @item.PhaseNav.Name @item.ResourceNav.Name @item.Description + @item.NumTags @($"{item.ProductivityRate:P2}") diff --git a/Lux.UI/Components/Compo/JobTask/JobTaskListMan.razor b/Lux.UI/Components/Compo/JobTask/JobTaskListMan.razor index b739df42..db470797 100644 --- a/Lux.UI/Components/Compo/JobTask/JobTaskListMan.razor +++ b/Lux.UI/Components/Compo/JobTask/JobTaskListMan.razor @@ -62,7 +62,8 @@ { Ord. Descrizione - Fasi + Fasi + Tags @@ -93,7 +94,8 @@ @item.Description - @item.NumChild + @item.NumChild + @item.NumTags @if (item.Lock || item.NumChild > 0) { diff --git a/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor b/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor new file mode 100644 index 00000000..8f8cf10b --- /dev/null +++ b/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor @@ -0,0 +1,47 @@ +
+@*
+ Elenco Risorse configurate +
*@ +
+ @if (isLoading || ListRecords == null) + { + + } + else if (totalCount == 0) + { +
Nessun record trovato
+ } + else + { + + + + + + + + + + + + @foreach (var item in ListRecords) + { + + + + + + + + } + +
+ + Cod.NomeDriver + +
+ + @item.CodResource@item.Name@item.DriverNav.Name-
+ } +
+
\ No newline at end of file diff --git a/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor.cs b/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor.cs new file mode 100644 index 00000000..4d5dba79 --- /dev/null +++ b/Lux.UI/Components/Compo/JobTask/ResourcesMan.razor.cs @@ -0,0 +1,136 @@ +using EgwCoreLib.Lux.Data.DbModel.Cost; +using EgwCoreLib.Lux.Data.DbModel.Task; +using EgwCoreLib.Lux.Data.Services; +using Microsoft.AspNetCore.Components; + +namespace Lux.UI.Components.Compo.JobTask +{ + public partial class ResourcesMan + { + #region Public Properties + + [Parameter] + public string CurrSearch { get; set; } = string.Empty; + + #endregion Public Properties + + #region Protected Fields + + protected List AllRecords = new List(); + protected List ListRecords = new List(); + protected List SearchRecords = new List(); + + #endregion Protected Fields + + #region Protected Properties + + [Inject] + protected DataLayerServices DLService { get; set; } = null!; + + #endregion Protected Properties + + #region Protected Methods + + /// + /// Reset selezione + /// + protected async void DoReset() + { + editRecord = null; + selRecord = null; + await ReloadBaseData(); + ReloadData(); + } + + /// + /// Selezione articolo x display info + /// + /// + protected void DoSelect(ResourceModel curRec) + { + selRecord = curRec; + } + + protected override async Task OnInitializedAsync() + { + await ReloadBaseData(); + ReloadData(); + } + + protected override void OnParametersSet() + { + ReloadData(); + } + + protected void ToggleAdd() + { + addVisible = !addVisible; + if (addVisible) + { + newRecord = new ResourceModel() + { + Name = $"Risorsa | {DateTime.Now:yyyy.MM.dd-HH.mm.ss}" + }; + } + } + + #endregion Protected Methods + + #region Private Fields + + private bool addVisible = false; + + private int currPage = 1; + private ResourceModel? editRecord = null; + private bool isLoading = false; + private ResourceModel? newRecord = null; + private int numRecord = 10; + private ResourceModel? selRecord = null; + private int totalCount = 0; + + #endregion Private Fields + + #region Private Properties + + private string mainCss + { + get => selRecord == null ? "col-6" : "col-4"; + } + + #endregion Private Properties + + #region Private Methods + + private async Task ReloadBaseData() + { + AllRecords = await DLService.ResourcesGetAllAsync(); + } + + private void ReloadData() + { + isLoading = true; + // se ho ricerca testuale faccio filtro ulteriore... + if (!string.IsNullOrEmpty(CurrSearch)) + { + SearchRecords = AllRecords + .Where(x => x.Name.Contains(CurrSearch, StringComparison.InvariantCultureIgnoreCase)) + .ToList(); + } + else + { + SearchRecords = AllRecords; + } + totalCount = SearchRecords.Count; + // fix paginazione + ListRecords = SearchRecords + .OrderBy(x => x.CodResource) + .ThenBy(x => x.Name) + .Skip(numRecord * (currPage - 1)) + .Take(numRecord) + .ToList(); + isLoading = false; + } + + #endregion Private Methods + } +} \ No newline at end of file diff --git a/Lux.UI/Components/Layout/NavMenu.razor b/Lux.UI/Components/Layout/NavMenu.razor index 9f9efb64..8b55b4a6 100644 --- a/Lux.UI/Components/Layout/NavMenu.razor +++ b/Lux.UI/Components/Layout/NavMenu.razor @@ -39,6 +39,11 @@ Articoli +