Aggiunta prima vers display QRCode GEN x ADM

This commit is contained in:
Samuele Locatelli
2025-06-23 17:04:56 +02:00
parent 1a75678882
commit 2ecad55883
12 changed files with 133 additions and 84 deletions
+2
View File
@@ -57,6 +57,8 @@
<script src="lib/luxon/luxon.js"></script>
<script src="lib/chartjs-adapter-luxon/chartjs-adapter-luxon.js"></script>
<script src="lib/chartBoot.js"></script>
<script type="text/javascript" src="lib/qrcode.js"></script>
<script type="text/javascript" src="lib/qrHelper.js"></script>
</body>
@@ -18,7 +18,12 @@
</div>
</div>
<div class="px-0 d-flex">
elenco switch QRCode
<span class="input-group-text px-2">
<span class="form-check form-switch align-content-center ms-2" title="Mostra QRCode">
<input class="form-check-input" type="checkbox" @bind=@ShowQrCode>
<label class="form-check-label">QRCode dipendenti</label>
</span>
</span>
</div>
</div>
</div>
@@ -30,80 +35,105 @@
}
else if (totalCount == 0)
{
<div class="alert alert-info">Nessun record trovato</div>
}
else
{
<div class="row">
<div class="@mainDivCss">
<table class="table table-striped table-sm text-start">
<thead>
<tr>
<th>
<button class="btn btn-primary btn-sm" @onclick="() => ForceReload()"><i class="fa-solid fa-rotate"></i></button>
</th>
<th>Cognome <Sorter ParamName="Cognome" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Nome <Sorter ParamName="Nome" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Matricola <Sorter ParamName="Matricola" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Profilo <Sorter ParamName="Profilo" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Dominio <Sorter ParamName="Dominio" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Utente <Sorter ParamName="Utente" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Email <Sorter ParamName="Email" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>CF <Sorter ParamName="CF" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>CodeHw <Sorter ParamName="CodeHw" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Dati anagrafici <Sorter ParamName="DatiAnag" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Gruppo <Sorter ParamName="Gruppo" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Stato licenza <Sorter ParamName="StatoLic" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th class="text-end">Responsabile <Sorter ParamName="Responsabile" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
</tr>
</thead>
<tbody>
@foreach (var item in ListRecords)
{
<tr class="@CheckSel(item)">
<td class="text-nowrap">
<button class="btn btn-info btn-sm" @onclick="() => DoSelect(item)"><i class="fa-solid fa-search"></i></button>
@if (SelItem == null)
{
<button class="btn btn-primary btn-sm mx-1" @onclick="() => DoEdit(item)">
<i class="fa-solid fa-edit"></i>
</button>
}
else
{
<button class="btn btn-secondary btn-sm mx-1" disabled><i class="fa-solid fa-edit"></i></button>
}
</td>
<td class="text-start">@item.Cognome</td>
<td class="text-start">@item.Nome</td>
<td class="text-start">@item.Matricola</td>
<td class="text-start">@item.CodOrario</td>
<td class="text-start">@item.Dominio</td>
<td class="text-start">@item.Utente</td>
<td class="text-start">@item.Email</td>
<td class="text-start">@item.Cf</td>
<td class="text-start">@item.CodHw</td>
<td class="text-start">@($"{item.LuogoNascita}") - @($"{item.ProvNascita}") - @($"{item.NazNascita}") - @($"{item.DataNascita:dd/MM/yyyy}")</td>
<td class="text-start">@item.Gruppo</td>
<td class="text-start">@($"{item.DataAssunzione:dd/MM/yyyy}") - @($"{item.DataCessazione:dd/MM/yyyy}")</td>
<td class="text-end">
<select @bind="@item.idxResp" class="form-select form-select-sm disabled" disabled style="min-width: 12rem;">
<option value="0">--- Selezionare ---</option>
@foreach (var dip in ListDipendenti)
{
<option value="@dip.IdxDipendente">@($"{dip.Cognome} {dip.Nome}")</option>
}
</select>
</td>
@if (ShowQrCode)
{
@foreach (var item in ListRecords)
{
<div class="col-12 col-md-6 col-lg-4 col-xl-3 mb-2">
<div class="card shadow">
<div class="card-header p-0">
<UserQrCode LinkInt="ShowLinkInt" RecordDip="item"></UserQrCode>
</div>
<div class="card-body py-1">
<div class="fs-1 fw-bold">@item.Cognome</div>
<div class="fs-4">@item.Nome</div>
</div>
<div class="card-footer d-flex justify-content-between">
<div class="px-1"><img src="images/logoegw.png" class="imf-fluid" width="32" /> <span class="fs-6">Egalware</span></div>
<div class="px-1 fs-6 align-content-center"><i>SMART a-link</i></div>
</div>
</div>
</div>
}
}
else
{
<div class="col-12">
<table class="table table-striped table-sm text-start">
<thead>
<tr>
<th>
<button class="btn btn-primary btn-sm" @onclick="() => ForceReload()"><i class="fa-solid fa-rotate"></i></button>
</th>
<th>Cognome <Sorter ParamName="Cognome" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Nome <Sorter ParamName="Nome" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Matricola <Sorter ParamName="Matricola" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Profilo <Sorter ParamName="Profilo" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Dominio <Sorter ParamName="Dominio" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Utente <Sorter ParamName="Utente" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Email <Sorter ParamName="Email" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>CF <Sorter ParamName="CF" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>CodeHw <Sorter ParamName="CodeHw" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Dati anagrafici <Sorter ParamName="DatiAnag" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Gruppo <Sorter ParamName="Gruppo" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th>Stato licenza <Sorter ParamName="StatoLic" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
<th class="text-end">Responsabile <Sorter ParamName="Responsabile" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter></th>
</tr>
}
</thead>
<tbody>
@foreach (var item in ListRecords)
{
<tr class="@CheckSel(item)">
<td class="text-nowrap">
<button class="btn btn-info btn-sm" @onclick="() => DoSelect(item)"><i class="fa-solid fa-search"></i></button>
@if (SelItem == null)
{
<button class="btn btn-primary btn-sm mx-1" @onclick="() => DoEdit(item)">
<i class="fa-solid fa-edit"></i>
</button>
}
else
{
<button class="btn btn-secondary btn-sm mx-1" disabled><i class="fa-solid fa-edit"></i></button>
}
</td>
</tbody>
</table>
</div>
<td class="text-start">@item.Cognome</td>
<td class="text-start">@item.Nome</td>
<td class="text-start">@item.Matricola</td>
<td class="text-start">@item.CodOrario</td>
<td class="text-start">@item.Dominio</td>
<td class="text-start">@item.Utente</td>
<td class="text-start">@item.Email</td>
<td class="text-start">@item.Cf</td>
<td class="text-start">@item.CodHw</td>
<td class="text-start">@($"{item.LuogoNascita}") - @($"{item.ProvNascita}") - @($"{item.NazNascita}") - @($"{item.DataNascita:dd/MM/yyyy}")</td>
<td class="text-start">@item.Gruppo</td>
<td class="text-start">@($"{item.DataAssunzione:dd/MM/yyyy}") - @($"{item.DataCessazione:dd/MM/yyyy}")</td>
<td class="text-end">
<select @bind="@item.idxResp" class="form-select form-select-sm disabled" disabled style="min-width: 12rem;">
<option value="0">--- Selezionare ---</option>
@foreach (var dip in ListDipendentiOrd)
{
<option value="@dip.IdxDipendente">@($"{dip.Cognome} {dip.Nome}")</option>
}
</select>
</td>
</tr>
}
</tbody>
</table>
</div>
}
</div>
}
</div>
@@ -91,6 +91,7 @@ namespace GPW.CORE.ADM.Components.Compo
private DipendentiModel? SelItem = null;
private bool ShowInatt = false;
private bool ShowQrCode = false;
private bool sortAsc = true;
private string sortField = "";
@@ -101,15 +102,17 @@ namespace GPW.CORE.ADM.Components.Compo
private List<DipendentiModel>? ListDipendenti { get; set; } = null;
private List<DipendentiModel>? ListRecords { get; set; } = null;
private string mainDivCss
{
get => SelRecord == null ? "col-12" : "col-12 col-lg-9";
}
private List<DipendentiModel>? SearchRecords { get; set; } = null;
private DipendentiModel? SelRecord { get; set; } = null;
private int totalCount { get; set; } = 0;
private bool ShowLinkInt = true;
protected List<DipendentiModel> ListDipendentiOrd
{
get => ListDipendenti != null ? ListDipendenti.OrderBy(x => x.Cognome).ThenBy(x => x.Nome).ToList() : new List<DipendentiModel>();
}
#endregion Private Properties
#region Private Methods
@@ -1,5 +1,5 @@
<h3>UserQrCode</h3>
<div class="card-body text-center">
<div class="img-fluid" id="qrCodeImg_@idxDipendente"></div>
</div>
@code {
}
@@ -24,6 +24,12 @@ namespace GPW.CORE.ADM.Components.Compo
#region Protected Methods
protected int idxDipendente
{
get => RecordDip != null ? RecordDip.IdxDipendente : 0;
}
protected string getUrlCode(string baseUrl, string authKey)
{
return $"{baseUrl}jumper?idxDipendente={RecordDip.IdxDipendente}&authKey={authKey}";
@@ -83,9 +83,9 @@ namespace GPW.CORE.ADM.Components.Layout
#region Private Properties
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
protected string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private string? TextCss => onlyIcon ? "d-none" : "";
protected string? TextCss => onlyIcon ? "d-none" : "";
#endregion Private Properties
+1 -1
View File
@@ -4,7 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>4.1.2506.2314</Version>
<Version>4.1.2506.2317</Version>
</PropertyGroup>
<ItemGroup>
+4
View File
@@ -80,5 +80,9 @@
"AdmApp": {
"LinkMal": "https://office.egalware.com/GPW/CORE.ADM/malattia",
"LinkRich": "https://office.egalware.com/GPW/CORE.ADM/richiesteDip"
},
"OptPar": {
"UrlLinkInt": "https://office.egalware.com/GPW/CORE.SMART/",
"UrlLinkExt": "https://seriate.egalware.com/GPW/CORE.SMART/"
}
}
+6 -2
View File
@@ -11,8 +11,12 @@ function displayQr(elementName, rawData) {
qrcode = new QRCode(document.getElementById(elementName),
{
text: rawData,
width: 200,
height: 200
width: 240,
height: 240,
correctLevel: QRCode.CorrectLevel.L
//correctLevel: QRCode.CorrectLevel.M
//correctLevel: QRCode.CorrectLevel.Q
//correctLevel: QRCode.CorrectLevel.H
});
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>GPW - Gestione Presenze Web</i>
<h4>Versione: 4.1.2506.2314</h4>
<h4>Versione: 4.1.2506.2317</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
4.1.2506.2314
4.1.2506.2317
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>4.1.2506.2314</version>
<version>4.1.2506.2317</version>
<url>http://nexus.steamware.net/repository/SWS/GPW/stable/GPW.UI.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/GPW/stable/ChangeLog.html</changelog>
<mandatory>false</mandatory>