Merge branch 'release/InstallStats_03'
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>License Manager</i>
|
||||
<h4>Versione: 2.1.2501.1314</h4>
|
||||
<h4>Versione: 2.1.2501.1315</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.1.2501.1314
|
||||
2.1.2501.1315
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>2.1.2501.1314</version>
|
||||
<version>2.1.2501.1315</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/LiMan.UI.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -1601,7 +1601,8 @@ namespace LiMan.DB.Controllers
|
||||
NumImp = g.Sum(x => x.NumImp),
|
||||
VersNumCurrent = g.First().VersNumCurrent,
|
||||
DictVersNumInst = CountRelVers(g.ToList()),
|
||||
DictUpdate = CountRelStatus(g.ToList())
|
||||
DictUpdate = CountRelStatus(g.ToList()),
|
||||
DetailInstalled = g.ToList(),
|
||||
})
|
||||
.ToList();
|
||||
answ.InstallStatus = appStatus;
|
||||
|
||||
@@ -54,6 +54,11 @@ namespace LiMan.DB.DTO
|
||||
/// </summary>
|
||||
public Dictionary<int, int> DictUpdate { get; set; } = new Dictionary<int, int>();
|
||||
|
||||
/// <summary>
|
||||
/// Dettaglio delle versioni installate con tutte le info
|
||||
/// </summary>
|
||||
public List<AppRelStatusDTO> DetailInstalled { get; set; } = new List<AppRelStatusDTO>();
|
||||
|
||||
/// <summary>
|
||||
/// Data Ora ultimo controllo
|
||||
/// </summary>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<div class="card shadow">
|
||||
<div class="card-header">
|
||||
<b>Dettaglio Versioni</b>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex justify-content-between p-2">
|
||||
<div class="px-0">
|
||||
<Doughnut Id="RelVers" Type="@Doughnut.ChartType.Doughnut" Data="@ChartData" Labels="ChartLabels" BackgroundColor="@ChartColor"></Doughnut>
|
||||
</div>
|
||||
<div class="px-0 w-75">
|
||||
<div class="text-end">Vers. Corrente: <b>@CurrRecord.VersNumCurrent</b></div>
|
||||
<table class="table table-sm table-striped table-responsive-lg">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Cliente</th>
|
||||
<th>PC</th>
|
||||
<th># Licenze</th>
|
||||
<th class="text-end">Versione</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var record in ListRecord)
|
||||
{
|
||||
<tr>
|
||||
<td>@record.Cliente</td>
|
||||
<td>@record.PcInst</td>
|
||||
<td>@record.NumImp</td>
|
||||
<td class="text-end @cssVers(record)">@record.VersNumInstall</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,90 @@
|
||||
using EgwCoreLib.Razor.Data;
|
||||
using LiMan.DB.DTO;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Org.BouncyCastle.Ocsp;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace LiMan.UI.Components
|
||||
{
|
||||
public partial class InstAppPareto
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public AppStatusDTO CurrRecord { get; set; } = null!;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected List<AppRelStatusDTO> ListRecord { get; set; } = new List<AppRelStatusDTO>();
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
ListRecord = CurrRecord.DetailInstalled.OrderByDescending(x => x.UpToDateStatus).ToList();
|
||||
// sistemo info x grafico...
|
||||
ChartData = ListRecord.Select(x => (double)x.NumImp).ToArray();
|
||||
ChartLabels = ListRecord.Select(x => x.VersNumInstall).ToArray();
|
||||
ChartColor.Clear();
|
||||
foreach (var item in ListRecord)
|
||||
{
|
||||
switch (item.UpToDateStatus)
|
||||
{
|
||||
case 4:
|
||||
ChartColor.Add(new DoughnutStyling("#28FF69", "00FF00"));
|
||||
break;
|
||||
case 3:
|
||||
ChartColor.Add(new DoughnutStyling("#EEFF33", "AAFF00"));
|
||||
break;
|
||||
case 2:
|
||||
ChartColor.Add(new DoughnutStyling("#99CC33", "AAFF00"));
|
||||
break;
|
||||
case 1:
|
||||
ChartColor.Add(new DoughnutStyling("#CC9933", "FFAA00"));
|
||||
break;
|
||||
case 0:
|
||||
ChartColor.Add(new DoughnutStyling("#CC6633", "FF3300"));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private string cssVers(AppRelStatusDTO rec)
|
||||
{
|
||||
string answ = "";
|
||||
switch (rec.UpToDateStatus)
|
||||
{
|
||||
case 4:
|
||||
answ = "text-success fw-bold";
|
||||
break;
|
||||
case 3:
|
||||
answ = "text-success";
|
||||
break;
|
||||
case 2:
|
||||
answ = "text-warning";
|
||||
break;
|
||||
case 1:
|
||||
answ = "text-danger";
|
||||
break;
|
||||
case 0:
|
||||
answ = "text-danger fw-bold";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
private string[] ChartLabels = new string[1];
|
||||
private double[] ChartData = new double[1];
|
||||
private List<DoughnutStyling> ChartColor = new List<DoughnutStyling>();
|
||||
#endregion Protected Methods
|
||||
}
|
||||
}
|
||||
@@ -11,31 +11,51 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="table table-sm table-striped table-responsive-lg">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Applicazione</th>
|
||||
<th># Copie</th>
|
||||
<th># Licenze</th>
|
||||
<th class="text-right">Versione</th>
|
||||
<th class="text-right">Stato</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var record in ListRecord)
|
||||
{
|
||||
<tr>
|
||||
<td>@record.CodApp</td>
|
||||
<td>@record.NumInst</td>
|
||||
<td>@record.NumImp</td>
|
||||
<td>@record.VersNumCurrent</td>
|
||||
<td>
|
||||
<InstUp2DateDispl CurrRecord="record"></InstUp2DateDispl>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="row">
|
||||
<div class="@tblCol">
|
||||
<table class="table table-sm table-striped table-responsive-lg">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><button class="btn btn-primary btn-sm" @onclick="() => DoSelect(null)"><i class="fa-solid fa-rotate"></i></button></th>
|
||||
<th>Applicazione</th>
|
||||
@if (CurrRecord == null)
|
||||
{
|
||||
<th># Copie</th>
|
||||
<th># Licenze</th>
|
||||
<th class="text-right">Versione</th>
|
||||
<th class="text-right">Stato</th>
|
||||
}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var record in ListRecord)
|
||||
{
|
||||
<tr class="@checkSelect(record.CodApp)">
|
||||
<td>
|
||||
<button class="btn btn-info btn-sm" @onclick="() => DoSelect(record)"><i class="fa-solid fa-magnifying-glass"></i></button>
|
||||
</td>
|
||||
<td>@record.CodApp</td>
|
||||
@if (CurrRecord == null)
|
||||
{
|
||||
<td>@record.NumInst</td>
|
||||
<td>@record.NumImp</td>
|
||||
<td>@record.VersNumCurrent</td>
|
||||
<td>
|
||||
<InstUp2DateDispl CurrRecord="record"></InstUp2DateDispl>
|
||||
</td>
|
||||
}
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@if (CurrRecord != null)
|
||||
{
|
||||
<div class="col-9">
|
||||
<InstAppPareto CurrRecord="CurrRecord"></InstAppPareto>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
|
||||
@@ -54,12 +54,30 @@ namespace LiMan.UI.Components
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private AppStatusDTO? CurrRecord { get; set; } = null;
|
||||
|
||||
private List<AppStatusDTO> ListRecord { get; set; } = new List<AppStatusDTO>();
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private string checkSelect(string codApp)
|
||||
{
|
||||
string answ = (CurrRecord != null && codApp == CurrRecord.CodApp) ? "table-info" : "";
|
||||
return answ;
|
||||
}
|
||||
|
||||
private string tblCol
|
||||
{
|
||||
get => CurrRecord == null ? "col-12" : "col-3";
|
||||
}
|
||||
|
||||
private void DoSelect(AppStatusDTO selRec)
|
||||
{
|
||||
CurrRecord = selRec;
|
||||
}
|
||||
|
||||
private void UpdateTable()
|
||||
{
|
||||
totalCount = AppStats.Count;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Version>2.1.2501.1314</Version>
|
||||
<Version>2.1.2501.1315</Version>
|
||||
<RootNamespace>LiMan.UI</RootNamespace>
|
||||
<AssemblyName>LiMan.UI</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
<script src="jquery/jquery.min.js"></script>
|
||||
<script src="lib/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="lib/font-awesome/js/all.min.js"></script>
|
||||
<script src="lib/Chart.js/chart.umd.js"></script>
|
||||
|
||||
<script src="_framework/blazor.server.js" autostart="false"></script>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>License Manager</i>
|
||||
<h4>Versione: 2.1.2501.1314</h4>
|
||||
<h4>Versione: 2.1.2501.1315</h4>
|
||||
<br /> Note di rilascio:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
2.1.2501.1314
|
||||
2.1.2501.1315
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>2.1.2501.1314</version>
|
||||
<version>2.1.2501.1315</version>
|
||||
<url>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/LiMan.UI.zip</url>
|
||||
<changelog>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
{
|
||||
"library": "font-awesome@6.7.2",
|
||||
"destination": "wwwroot/lib/font-awesome/"
|
||||
},
|
||||
{
|
||||
"provider": "cdnjs",
|
||||
"library": "Chart.js@4.4.1",
|
||||
"destination": "wwwroot/lib/Chart.js/"
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"helpers.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
||||
@@ -0,0 +1,9 @@
|
||||
/*!
|
||||
* Chart.js v4.4.1
|
||||
* https://www.chartjs.org
|
||||
* (c) 2023 Chart.js Contributors
|
||||
* Released under the MIT License
|
||||
*/
|
||||
export { H as HALF_PI, b2 as INFINITY, P as PI, b1 as PITAU, b4 as QUARTER_PI, b3 as RAD_PER_DEG, T as TAU, b5 as TWO_THIRDS_PI, R as _addGrace, X as _alignPixel, a2 as _alignStartEnd, p as _angleBetween, b6 as _angleDiff, _ as _arrayUnique, a8 as _attachContext, as as _bezierCurveTo, ap as _bezierInterpolation, ax as _boundSegment, an as _boundSegments, a5 as _capitalize, am as _computeSegments, a9 as _createResolver, aK as _decimalPlaces, aV as _deprecated, aa as _descriptors, ah as _elementsEqual, N as _factorize, aO as _filterBetween, I as _getParentNode, q as _getStartAndCountOfVisiblePoints, W as _int16Range, aj as _isBetween, ai as _isClickEvent, M as _isDomSupported, C as _isPointInArea, S as _limitValue, aN as _longestText, aP as _lookup, B as _lookupByKey, V as _measureText, aT as _merger, aU as _mergerIf, ay as _normalizeAngle, y as _parseObjectDataRadialScale, aq as _pointInLine, ak as _readValueToProps, A as _rlookupByKey, w as _scaleRangesChanged, aG as _setMinAndMaxByKey, aW as _splitKey, ao as _steppedInterpolation, ar as _steppedLineTo, aB as _textX, a1 as _toLeftRightCenter, al as _updateBezierControlPoints, au as addRoundedRectPath, aJ as almostEquals, aI as almostWhole, Q as callback, af as clearCanvas, Y as clipArea, aS as clone, c as color, j as createContext, ad as debounce, h as defined, aE as distanceBetweenPoints, at as drawPoint, aD as drawPointLegend, F as each, e as easingEffects, O as finiteOrDefault, a$ as fontString, o as formatNumber, D as getAngleFromPoint, aR as getHoverColor, G as getMaximumSize, z as getRelativePosition, az as getRtlAdapter, a_ as getStyle, b as isArray, g as isFinite, a7 as isFunction, k as isNullOrUndef, x as isNumber, i as isObject, aQ as isPatternOrGradient, l as listenArrayEvents, aM as log10, a4 as merge, ab as mergeIf, aH as niceNum, aF as noop, aA as overrideTextDirection, J as readUsedSize, Z as renderText, r as requestAnimFrame, a as resolve, f as resolveObjectKey, aC as restoreTextDirection, ae as retinaScale, ag as setsEqual, s as sign, aY as splineCurve, aZ as splineCurveMonotone, K as supportsEventListenerOptions, L as throttled, U as toDegrees, n as toDimension, a0 as toFont, aX as toFontString, b0 as toLineHeight, E as toPadding, m as toPercentage, t as toRadians, av as toTRBL, aw as toTRBLCorners, ac as uid, $ as unclipArea, u as unlistenArrayEvents, v as valueOrDefault } from './chunks/helpers.segment.js';
|
||||
import '@kurkle/color';
|
||||
//# sourceMappingURL=helpers.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"helpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
|
||||
@@ -0,0 +1 @@
|
||||
export{H as HALF_PI,b2 as INFINITY,P as PI,b1 as PITAU,b4 as QUARTER_PI,b3 as RAD_PER_DEG,T as TAU,b5 as TWO_THIRDS_PI,R as _addGrace,X as _alignPixel,a2 as _alignStartEnd,p as _angleBetween,b6 as _angleDiff,_ as _arrayUnique,a8 as _attachContext,as as _bezierCurveTo,ap as _bezierInterpolation,ax as _boundSegment,an as _boundSegments,a5 as _capitalize,am as _computeSegments,a9 as _createResolver,aK as _decimalPlaces,aV as _deprecated,aa as _descriptors,ah as _elementsEqual,N as _factorize,aO as _filterBetween,I as _getParentNode,q as _getStartAndCountOfVisiblePoints,W as _int16Range,aj as _isBetween,ai as _isClickEvent,M as _isDomSupported,C as _isPointInArea,S as _limitValue,aN as _longestText,aP as _lookup,B as _lookupByKey,V as _measureText,aT as _merger,aU as _mergerIf,ay as _normalizeAngle,y as _parseObjectDataRadialScale,aq as _pointInLine,ak as _readValueToProps,A as _rlookupByKey,w as _scaleRangesChanged,aG as _setMinAndMaxByKey,aW as _splitKey,ao as _steppedInterpolation,ar as _steppedLineTo,aB as _textX,a1 as _toLeftRightCenter,al as _updateBezierControlPoints,au as addRoundedRectPath,aJ as almostEquals,aI as almostWhole,Q as callback,af as clearCanvas,Y as clipArea,aS as clone,c as color,j as createContext,ad as debounce,h as defined,aE as distanceBetweenPoints,at as drawPoint,aD as drawPointLegend,F as each,e as easingEffects,O as finiteOrDefault,a$ as fontString,o as formatNumber,D as getAngleFromPoint,aR as getHoverColor,G as getMaximumSize,z as getRelativePosition,az as getRtlAdapter,a_ as getStyle,b as isArray,g as isFinite,a7 as isFunction,k as isNullOrUndef,x as isNumber,i as isObject,aQ as isPatternOrGradient,l as listenArrayEvents,aM as log10,a4 as merge,ab as mergeIf,aH as niceNum,aF as noop,aA as overrideTextDirection,J as readUsedSize,Z as renderText,r as requestAnimFrame,a as resolve,f as resolveObjectKey,aC as restoreTextDirection,ae as retinaScale,ag as setsEqual,s as sign,aY as splineCurve,aZ as splineCurveMonotone,K as supportsEventListenerOptions,L as throttled,U as toDegrees,n as toDimension,a0 as toFont,aX as toFontString,b0 as toLineHeight,E as toPadding,m as toPercentage,t as toRadians,av as toTRBL,aw as toTRBLCorners,ac as uid,$ as unclipArea,u as unlistenArrayEvents,v as valueOrDefault}from"./chunks/helpers.segment.js";import"@kurkle/color";
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
export * from './controllers/index.js';
|
||||
export * from './core/index.js';
|
||||
export * from './elements/index.js';
|
||||
export * from './platform/index.js';
|
||||
export * from './plugins/index.js';
|
||||
export * from './scales/index.js';
|
||||
import * as controllers from './controllers/index.js';
|
||||
import * as elements from './elements/index.js';
|
||||
import * as plugins from './plugins/index.js';
|
||||
import * as scales from './scales/index.js';
|
||||
export { controllers, elements, plugins, scales, };
|
||||
export declare const registerables: (typeof controllers | typeof elements | typeof plugins | typeof scales)[];
|
||||
@@ -0,0 +1,5 @@
|
||||
/**
|
||||
* @namespace Chart
|
||||
*/
|
||||
import Chart from './core/core.controller.js';
|
||||
export default Chart;
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Temporary entry point of the types at the time of the transition.
|
||||
* After transition done need to remove it in favor of index.ts
|
||||
*/
|
||||
export * from './index.js';
|
||||
/**
|
||||
* Explicitly re-exporting to resolve the ambiguity.
|
||||
*/
|
||||
export { BarController, BubbleController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, ScatterController, Animation, Animations, Chart, DatasetController, Interaction, Scale, Ticks, defaults, layouts, registry, ArcElement, BarElement, LineElement, PointElement, BasePlatform, BasicPlatform, DomPlatform, Decimation, Filler, Legend, SubTitle, Title, Tooltip, CategoryScale, LinearScale, LogarithmicScale, RadialLinearScale, TimeScale, TimeSeriesScale, PluginOptionsByType, ElementOptionsByType, ChartDatasetProperties, UpdateModeEnum, registerables } from './types/index.js';
|
||||
export * from './types/index.js';
|
||||
Reference in New Issue
Block a user