Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 317508f37b | |||
| 6d190dd95c | |||
| 912dd3579b |
+166
-60
@@ -1,11 +1,8 @@
|
|||||||
variables:
|
variables:
|
||||||
VERS_MAIN: '2.1'
|
VERS_MAIN: '1.0'
|
||||||
NEXUS_PATH: 'LiMan'
|
NEXUS_PATH: 'LiMan'
|
||||||
APP_NAME: 'LiMan.UI'
|
APP_NAME: 'LiMan.UI'
|
||||||
SOL_NAME: 'LiMan.UI'
|
NUGET_PATH: 'C:\Tools\nuget.exe'
|
||||||
NUGET_PATH: 'C:\Tools\nuget.exe'
|
|
||||||
MSBUILD_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe'
|
|
||||||
SRC_ZIP_PATH: 'bin\publish\net6.0'
|
|
||||||
|
|
||||||
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
|
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
|
||||||
.nuget-fix: &nuget-fix
|
.nuget-fix: &nuget-fix
|
||||||
@@ -14,19 +11,18 @@ variables:
|
|||||||
dotnet nuget list source
|
dotnet nuget list source
|
||||||
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus Proxy"
|
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus Proxy"
|
||||||
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
||||||
dotnet nuget remove source "Steamware Nexus Proxy"
|
dotnet nuget remove source "`"Steamware Nexus Proxy`""
|
||||||
}
|
}
|
||||||
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus"
|
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus"
|
||||||
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
||||||
dotnet nuget remove source "Steamware Nexus"
|
dotnet nuget remove source "`"Steamware Nexus`""
|
||||||
}
|
}
|
||||||
$hasSource = dotnet nuget list source | Select-String -Pattern "nexus-proxy-v3"
|
$hasSource = dotnet nuget list source | Select-String -Pattern "nexus-proxy-v3"
|
||||||
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
|
||||||
dotnet nuget remove source nexus-proxy-v3
|
dotnet nuget remove source nexus-proxy-v3
|
||||||
}
|
}
|
||||||
dotnet nuget add source https://nexus.steamware.net/repository/nuget-group-3/index.json -n "Steamware Nexus" -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
|
dotnet nuget add source https://nexus.steamware.net/repository/nuget-group-3/index.json -n "Steamware Nexus" -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
|
||||||
echo "Steamware Nexus Source added, final state:"
|
echo "Steamware Nexus Source added"
|
||||||
dotnet nuget list source
|
|
||||||
|
|
||||||
# helper creazione files zip
|
# helper creazione files zip
|
||||||
.zipper: &zipper
|
.zipper: &zipper
|
||||||
@@ -37,9 +33,9 @@ variables:
|
|||||||
}
|
}
|
||||||
Set-Alias 7zip $7zipPath
|
Set-Alias 7zip $7zipPath
|
||||||
$Target = "$env:APP_NAME\Releases\" + $CI_COMMIT_BRANCH + "\" + $env:APP_NAME + ".zip"
|
$Target = "$env:APP_NAME\Releases\" + $CI_COMMIT_BRANCH + "\" + $env:APP_NAME + ".zip"
|
||||||
$Source = "$env:APP_NAME\$SRC_ZIP_PATH\*"
|
$Source = "$env:APP_NAME\bin\publish\net6.0\*"
|
||||||
echo "calling 7zip $Source --> $Target"
|
|
||||||
7zip a -tzip $Target $Source -xr!DATA
|
7zip a -tzip $Target $Source -xr!DATA
|
||||||
|
echo "called ZIP $Source --> $Target"
|
||||||
|
|
||||||
#cd "$env:APP_NAME\bin\publish\net6.0"
|
#cd "$env:APP_NAME\bin\publish\net6.0"
|
||||||
|
|
||||||
@@ -126,11 +122,13 @@ variables:
|
|||||||
echo "replace completati"
|
echo "replace completati"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- build
|
- build
|
||||||
- deploy
|
- deploy
|
||||||
- release
|
- release
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
# BUILD
|
# BUILD
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
@@ -138,46 +136,46 @@ UI:build:
|
|||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
except:
|
|
||||||
- EgwAppControlCenter
|
|
||||||
variables:
|
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.UI
|
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
- dotnet restore "$env:SOL_NAME.sln"
|
- dotnet restore LiMan.sln
|
||||||
script:
|
script:
|
||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet build LiMan.UI/LiMan.UI.csproj
|
||||||
|
|
||||||
API:build:
|
API:build:
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
except:
|
|
||||||
- EgwAppControlCenter
|
|
||||||
variables:
|
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.Api
|
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
- dotnet restore "$env:SOL_NAME.sln"
|
- dotnet restore LiMan.sln
|
||||||
script:
|
script:
|
||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet build LiMan.Api/LiMan.Api.csproj
|
||||||
|
|
||||||
Transfer:build:
|
Transfer:build:
|
||||||
stage: build
|
stage: build
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
except:
|
|
||||||
- EgwAppControlCenter
|
|
||||||
variables:
|
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.Transfer
|
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
- dotnet restore "$env:SOL_NAME.sln"
|
- dotnet restore LiMan.sln
|
||||||
script:
|
script:
|
||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet build LiMan.Transfer/LiMan.Transfer.csproj
|
||||||
|
|
||||||
|
EgwProxy.LiMan:build:
|
||||||
|
stage: build
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
APP_NAME: EgwProxy.LiMan
|
||||||
|
SOL_NAME: EgwProxy.LiMan
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- '& "$env:NUGET_PATH" restore "$env:APP_NAME.sln" -verbosity quiet'
|
||||||
|
script:
|
||||||
|
- echo $CI_COMMIT_BRANCH
|
||||||
|
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
# DEPLOY
|
# DEPLOY
|
||||||
@@ -186,17 +184,13 @@ UI:IIS01:deploy:
|
|||||||
stage: deploy
|
stage: deploy
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
variables:
|
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.UI
|
|
||||||
SRC_ZIP_PATH: bin\Release\net6.0
|
|
||||||
only:
|
only:
|
||||||
- develop
|
- develop
|
||||||
needs: ["UI:build"]
|
needs: ["UI:build"]
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
script:
|
script:
|
||||||
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true LiMan.UI/LiMan.UI.csproj
|
||||||
- *zipper
|
- *zipper
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
@@ -206,16 +200,14 @@ API:IIS01:deploy:
|
|||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
variables:
|
variables:
|
||||||
SOL_NAME: LiMan
|
APP_NAME: 'LiMan.Api'
|
||||||
APP_NAME: LiMan.Api
|
|
||||||
SRC_ZIP_PATH: bin\Release\net6.0
|
|
||||||
only:
|
only:
|
||||||
- develop
|
- develop
|
||||||
needs: ["API:build"]
|
needs: ["API:build"]
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
script:
|
script:
|
||||||
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true LiMan.Api/LiMan.Api.csproj
|
||||||
- *zipper
|
- *zipper
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
@@ -224,38 +216,29 @@ UI:IIS04:deploy:
|
|||||||
stage: deploy
|
stage: deploy
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
variables:
|
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.UI
|
|
||||||
SRC_ZIP_PATH: bin\Release\net6.0
|
|
||||||
only:
|
only:
|
||||||
- main
|
- main
|
||||||
needs: ["UI:build"]
|
needs: ["UI:build"]
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
script:
|
script:
|
||||||
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true LiMan.UI/LiMan.UI.csproj
|
||||||
- *zipper
|
- *zipper
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
|
|
||||||
API:IIS04:deploy:
|
API:IIS04:deploy:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
except:
|
|
||||||
- EgwAppControlCenter
|
|
||||||
variables:
|
variables:
|
||||||
SOL_NAME: LiMan
|
APP_NAME: 'LiMan.Api'
|
||||||
APP_NAME: LiMan.Api
|
|
||||||
SRC_ZIP_PATH: bin\Release\net6.0
|
|
||||||
only:
|
only:
|
||||||
- main
|
- main
|
||||||
needs: ["API:build"]
|
needs: ["API:build"]
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
script:
|
script:
|
||||||
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true LiMan.Api/LiMan.Api.csproj
|
||||||
- *zipper
|
- *zipper
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
@@ -264,17 +247,140 @@ Transfer:deploy:
|
|||||||
stage: deploy
|
stage: deploy
|
||||||
tags:
|
tags:
|
||||||
- win
|
- win
|
||||||
except:
|
|
||||||
- EgwAppControlCenter
|
|
||||||
variables:
|
variables:
|
||||||
SOL_NAME: LiMan
|
|
||||||
APP_NAME: LiMan.Transfer
|
APP_NAME: LiMan.Transfer
|
||||||
needs: ["Transfer:build"]
|
needs: ["Transfer:build"]
|
||||||
before_script:
|
before_script:
|
||||||
- *nuget-fix
|
- *nuget-fix
|
||||||
script:
|
script:
|
||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet build LiMan.Transfer/LiMan.Transfer.csproj
|
||||||
- dotnet publish -p:PublishProfile=SingleFileX86.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet publish -p:PublishProfile=SingleFileX86.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release LiMan.Transfer/LiMan.Transfer.csproj
|
||||||
- *zipper
|
- *zipper
|
||||||
- *hashBuild
|
- *hashBuild
|
||||||
- *nexusUpload
|
- *nexusUpload
|
||||||
|
|
||||||
|
EgwProxy.LiMan:deploy:
|
||||||
|
stage: deploy
|
||||||
|
needs: ["EgwProxy.LiMan:build"]
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
CONFIG: Debug
|
||||||
|
APP_NAME: EgwProxy.LiMan
|
||||||
|
SOL_NAME: EgwProxy.LiMan
|
||||||
|
only:
|
||||||
|
refs:
|
||||||
|
- develop
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- '& "$env:NUGET_PATH" restore "$env:SOL_NAME.sln" -verbosity quiet'
|
||||||
|
- *version-fix
|
||||||
|
- *nuspec-fix
|
||||||
|
script:
|
||||||
|
# - '& "$env:MSBUILD_PATH" "$env:APP_NAME\$env:APP_NAME.csproj" -target:Build /p:Configuration=$env:CONFIG /p:Platform="Any CPU" /p:OutputPath=bin/$env:CONFIG /verbosity:minimal /m'
|
||||||
|
- dotnet build "$env:APP_NAME\$env:APP_NAME.csproj"
|
||||||
|
- '& Remove-Item *.nupkg'
|
||||||
|
- '& $env:NUGET_PATH pack "$env:APP_NAME.Debug.nuspec"'
|
||||||
|
- '& "$env:NUGET_PATH" setapikey $NUGET_API_KEY -source http://nexus.steamware.net/repository/nuget-hosted'
|
||||||
|
- '& "$env:NUGET_PATH" push *$env:NUM_DEB.nupkg -Source http://nexus.steamware.net/repository/nuget-hosted'
|
||||||
|
|
||||||
|
# --------------------------------
|
||||||
|
# RELEASE
|
||||||
|
# --------------------------------
|
||||||
|
EgwProxy.LiMan:release:
|
||||||
|
stage: release
|
||||||
|
needs: ["EgwProxy.LiMan:build"]
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
CONFIG: Release
|
||||||
|
APP_NAME: EgwProxy.LiMan
|
||||||
|
SOL_NAME: EgwProxy.LiMan
|
||||||
|
only:
|
||||||
|
refs:
|
||||||
|
- SDK
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- '& "$env:NUGET_PATH" restore "$env:SOL_NAME.sln" -verbosity quiet'
|
||||||
|
- *version-fix
|
||||||
|
- *nuspec-fix
|
||||||
|
script:
|
||||||
|
- dotnet build "$env:APP_NAME\$env:APP_NAME.csproj"
|
||||||
|
- '& Remove-Item *.nupkg'
|
||||||
|
- '& $env:NUGET_PATH pack "$env:APP_NAME.Release.nuspec"'
|
||||||
|
- '& "$env:NUGET_PATH" setapikey $NUGET_API_KEY -source http://nexus.steamware.net/repository/nuget-hosted'
|
||||||
|
- '& "$env:NUGET_PATH" push *$env:NUM_REL.nupkg -Source http://nexus.steamware.net/repository/nuget-hosted'
|
||||||
|
|
||||||
|
# UI:installer:
|
||||||
|
# stage: installer
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# only:
|
||||||
|
# - develop
|
||||||
|
# - main
|
||||||
|
# needs: ["UI:build"]
|
||||||
|
# variables:
|
||||||
|
# APP_NAME: LiMan.UI
|
||||||
|
# NEXUS_PATH: MP-LAND
|
||||||
|
# before_script:
|
||||||
|
# # - *nuget-fix
|
||||||
|
# # - dotnet restore
|
||||||
|
# script:
|
||||||
|
# - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release LiMan.UI/LiMan.UI.csproj -o:publish
|
||||||
|
# # qui il deploy su nexus...
|
||||||
|
# - *hashBuild
|
||||||
|
# - *nexusUpload
|
||||||
|
|
||||||
|
# API:installer:
|
||||||
|
# stage: installer
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# only:
|
||||||
|
# - develop
|
||||||
|
# - main
|
||||||
|
# needs: ["API:build"]
|
||||||
|
# variables:
|
||||||
|
# APP_NAME: LiMan.Api
|
||||||
|
# NEXUS_PATH: MP-PROG
|
||||||
|
# before_script:
|
||||||
|
# # - *nuget-fix
|
||||||
|
# # - dotnet restore
|
||||||
|
# script:
|
||||||
|
# - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release LiMan.Api/LiMan.Api.csproj -o:publish
|
||||||
|
# # qui il deploy su nexus...
|
||||||
|
# - *hashBuild
|
||||||
|
# - *nexusUpload
|
||||||
|
|
||||||
|
# UI:release:
|
||||||
|
# stage: release
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# only:
|
||||||
|
# #- feature/Deploy_CI_CD
|
||||||
|
# # - main
|
||||||
|
# - tags
|
||||||
|
# except:
|
||||||
|
# - branches
|
||||||
|
# needs: ["UI:build"]
|
||||||
|
# artifacts:
|
||||||
|
# paths:
|
||||||
|
# - publish/
|
||||||
|
# script:
|
||||||
|
# - dotnet publish -c Release -o ./publish LiMan.UI/LiMan.UI.csproj
|
||||||
|
|
||||||
|
# API:release:
|
||||||
|
# stage: release
|
||||||
|
# tags:
|
||||||
|
# - win
|
||||||
|
# only:
|
||||||
|
# #- feature/Deploy_CI_CD
|
||||||
|
# # - main
|
||||||
|
# - tags
|
||||||
|
# except:
|
||||||
|
# - branches
|
||||||
|
# needs: ["API:build"]
|
||||||
|
# artifacts:
|
||||||
|
# paths:
|
||||||
|
# - publish/
|
||||||
|
# script:
|
||||||
|
# - dotnet publish -c Release -o ./publish LiMan.Api/LiMan.Api.csproj
|
||||||
|
|||||||
@@ -1,67 +0,0 @@
|
|||||||
using Newtonsoft.Json;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
namespace Core
|
|
||||||
{
|
|
||||||
public class AppRelVersion
|
|
||||||
{
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Installazione funzionalità uploader
|
|
||||||
/// </summary>
|
|
||||||
public string CodInst { get; set; } = "";
|
|
||||||
/// <summary>
|
|
||||||
/// ID upload app
|
|
||||||
/// </summary>
|
|
||||||
public string UplAppID { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Chiave di autorizzazione alla comunicazione
|
|
||||||
/// </summary>
|
|
||||||
public string MasterKey { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Cod applicativo di riferimento
|
|
||||||
/// </summary>
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tipo Applicazione
|
|
||||||
/// </summary>
|
|
||||||
public string Tipo { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione applicativo formato semver numerico 4 blocchi
|
|
||||||
/// </summary>
|
|
||||||
public string VersNum { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione applicativo, formato testuale libero, può essere uguale a VersNum
|
|
||||||
/// </summary>
|
|
||||||
public string VersText { get; set; } = "a.b";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data di release
|
|
||||||
/// </summary>
|
|
||||||
public DateTime ReleaseDate { get; set; } = DateTime.Today.AddYears(100);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tag associati a versione, comma separated
|
|
||||||
/// </summary>
|
|
||||||
public string RelTags { get; set; } = "";
|
|
||||||
|
|
||||||
public bool IsValid
|
|
||||||
{
|
|
||||||
get => !string.IsNullOrEmpty(CodInst) && !string.IsNullOrEmpty(UplAppID) && !string.IsNullOrEmpty(MasterKey) && !string.IsNullOrEmpty(CodApp) && !string.IsNullOrEmpty(VersNum) && !string.IsNullOrEmpty(VersText);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-4
@@ -10,10 +10,7 @@ namespace Core
|
|||||||
{
|
{
|
||||||
|
|
||||||
// classi utilità x cache REDIS dati DB
|
// classi utilità x cache REDIS dati DB
|
||||||
public const string redisBaseAddr = "LiMan:Ui";
|
public const string redisBaseAddr = "MagManUi";
|
||||||
public const string rKeyConfig = $"{redisBaseAddr}:Cache";
|
public const string rKeyConfig = $"{redisBaseAddr}:Cache";
|
||||||
public const string ENRL_MSG_PIPE = $"{redisBaseAddr}:MPipe:Enroll";
|
|
||||||
public const string TASK_MSG_PIPE = $"{redisBaseAddr}:MPipe:Tasks";
|
|
||||||
public const string UPDT_MSG_PIPE = $"{redisBaseAddr}:MPipe:Update";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core.DTO
|
|
||||||
{
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
public class AuthDataDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Master Key
|
|
||||||
/// </summary>
|
|
||||||
public string MastKey { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Codice Impiego istanza SubLic
|
|
||||||
/// </summary>
|
|
||||||
public string CodImp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Chiave SubLic
|
|
||||||
/// </summary>
|
|
||||||
public string AppKey { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica complessiva validità richiesta:
|
|
||||||
/// CodApp presente
|
|
||||||
/// - MainKey oppure CodImp + AppKey presenti
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public virtual bool IsValid
|
|
||||||
{
|
|
||||||
get => (!string.IsNullOrEmpty(MastKey) || (!string.IsNullOrEmpty(CodImp) && !string.IsNullOrEmpty(AppKey)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core.DTO
|
|
||||||
{
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
public class ManDeclareDTO : AuthDataDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco delle CodApp Gestite
|
|
||||||
/// </summary>
|
|
||||||
public List<string> ListCodApp { get; set; } = new List<string>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica complessiva validità richiesta:
|
|
||||||
/// CodApp presente
|
|
||||||
/// - MainKey oppure CodImp + AppKey presenti
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public override bool IsValid
|
|
||||||
{
|
|
||||||
get => (ListCodApp != null && ListCodApp.Count > 0) && (!string.IsNullOrEmpty(MastKey) || (!string.IsNullOrEmpty(CodImp) && !string.IsNullOrEmpty(AppKey)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core.DTO
|
|
||||||
{
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
public class ReleaseReqDTO : AuthDataDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// CodApp Richiesta
|
|
||||||
/// </summary>
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione minima richiesta
|
|
||||||
/// </summary>
|
|
||||||
public string VersMin { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione MAX richiesta
|
|
||||||
/// </summary>
|
|
||||||
public string VersMax { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero di Impieghi attivi (es num di IOB relativi)
|
|
||||||
/// </summary>
|
|
||||||
public int NumImp { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica complessiva validità richiesta:
|
|
||||||
/// CodApp presente
|
|
||||||
/// - MainKey oppure CodImp + AppKey presenti
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public override bool IsValid
|
|
||||||
{
|
|
||||||
get => !string.IsNullOrEmpty(CodApp) && (!string.IsNullOrEmpty(MastKey) || (!string.IsNullOrEmpty(CodImp) && !string.IsNullOrEmpty(AppKey)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core.DTO
|
|
||||||
{
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
public class TaskResultDTO : AuthDataDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Payload informazione ricevuto come dizionario chiavi/valore, il valore potrebbe essere un info ulteriormente serializzata
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string,string> DataPayload { get; set; } = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -3,9 +3,6 @@ using static Core.Enum;
|
|||||||
|
|
||||||
namespace Core.DTO
|
namespace Core.DTO
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
public class TicketDTO
|
public class TicketDTO
|
||||||
{
|
{
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|||||||
+3
-118
@@ -1,9 +1,4 @@
|
|||||||
using Newtonsoft.Json.Converters;
|
namespace Core
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace Core
|
|
||||||
{
|
{
|
||||||
public class Enum
|
public class Enum
|
||||||
{
|
{
|
||||||
@@ -43,14 +38,9 @@ namespace Core
|
|||||||
UserKey,
|
UserKey,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Chiave tipo Checksum basata su licenza master + checksum MD5 di una serie di dati (child licenses)
|
/// Chiave tiupo Checksum basata su licenza masster + checksum MD5 di una serie di dati (child licenses)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
CheckSumKey,
|
CheckSumKey
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Chiave tiupo SubLicenza applicativa (es AppControlCenter)
|
|
||||||
/// </summary>
|
|
||||||
AppSubLic
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -62,110 +52,5 @@ namespace Core
|
|||||||
Licenze,
|
Licenze,
|
||||||
FileUpload
|
FileUpload
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco tipi app ammessi
|
|
||||||
/// </summary>
|
|
||||||
public static Dictionary<string, string> AppType = new Dictionary<string, string>{
|
|
||||||
{ "", "---Selezionare---" },
|
|
||||||
{ "Cli", "Cli (Console)" },
|
|
||||||
{ "EgwACC", "EgwAppCtrCenter" },
|
|
||||||
{ "LicenceApp", "LicenceApp" },
|
|
||||||
{ "Machine", "Machine" },
|
|
||||||
{ "WebApp", "WebApp" },
|
|
||||||
{ "WinApp", "WinApp" }
|
|
||||||
};
|
|
||||||
|
|
||||||
#if false
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
|
||||||
public enum AppType
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
Cli,
|
|
||||||
Machine,
|
|
||||||
WebApp,
|
|
||||||
WinApp,
|
|
||||||
LicenceApp
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco tipi di azioni che si possono chiedere ad EgwACC
|
|
||||||
/// </summary>
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
|
||||||
public enum EgwAccTask
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Non definito (init)
|
|
||||||
/// </summary>
|
|
||||||
ND = 0,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiesta ricerca generica app da sorgenti mappate (registro, path...) ricevute in input
|
|
||||||
/// </summary>
|
|
||||||
AppSearch,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Effettua backup ed invio cartella CONF delle app gestite x update
|
|
||||||
/// </summary>
|
|
||||||
BackupSendConf,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiesta info device (analoghe a quelle del setup iniziale in Enroll)
|
|
||||||
/// </summary>
|
|
||||||
DeviceInfoGet,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiesta verifica forzata da remoto
|
|
||||||
/// </summary>
|
|
||||||
ForceCheck,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiede reload forzato (come da tray menu con Reload senza check update)
|
|
||||||
/// </summary>
|
|
||||||
ForceReload,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiede update forzato (come da tray menu con restart tramite bootstrap process esterno)
|
|
||||||
/// </summary>
|
|
||||||
ForceUpdate,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Info tipo License (Oxysec key)
|
|
||||||
/// </summary>
|
|
||||||
OxyLicenseGet,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Forza Reset parametri opzionali impostabili da remoto
|
|
||||||
/// </summary>
|
|
||||||
ParamDictReset,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Upsert di parametri operativi (gestiti in remoto)
|
|
||||||
/// </summary>
|
|
||||||
ParamUpsert,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Upsert valori TargetList (gestiti in remoto)
|
|
||||||
/// </summary>
|
|
||||||
TargetListUpsert,
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Aggiorno di un applicazione richiamato da remoto
|
|
||||||
/// </summary>
|
|
||||||
TargetAppUpdate
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// /Status di aggiornamento di un applicativo updater
|
|
||||||
/// </summary>
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
|
||||||
public enum UpdStatus
|
|
||||||
{
|
|
||||||
None,
|
|
||||||
Pending,
|
|
||||||
Running,
|
|
||||||
Done
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core
|
|
||||||
{
|
|
||||||
public class MeasureUtils
|
|
||||||
{
|
|
||||||
#region Public Fields
|
|
||||||
|
|
||||||
public static readonly string[] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" };
|
|
||||||
|
|
||||||
#endregion Public Fields
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Calcola dimensione file automaticamwente secondo dimensione
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="value"></param>
|
|
||||||
/// <param name="decimalPlaces"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
/// <exception cref="ArgumentOutOfRangeException"></exception>
|
|
||||||
public static string SizeSuffix(Int64 value, int decimalPlaces = 1)
|
|
||||||
{
|
|
||||||
if (decimalPlaces < 0) { throw new ArgumentOutOfRangeException("decimalPlaces"); }
|
|
||||||
if (value < 0) { return "-" + SizeSuffix(-value, decimalPlaces); }
|
|
||||||
if (value == 0) { return string.Format("{0:n" + decimalPlaces + "} bytes", 0); }
|
|
||||||
|
|
||||||
// mag is 0 for bytes, 1 for KB, 2, for MB, etc.
|
|
||||||
int mag = (int)Math.Log(value, 1024);
|
|
||||||
|
|
||||||
// 1L << (mag * 10) == 2 ^ (10 * mag) [i.e. the number of bytes in the unit
|
|
||||||
// corresponding to mag]
|
|
||||||
decimal adjustedSize = (decimal)value / (1L << (mag * 10));
|
|
||||||
|
|
||||||
// make adjustment when the value is large enough that it would round up to 1000 or more
|
|
||||||
if (Math.Round(adjustedSize, decimalPlaces) >= 1000)
|
|
||||||
{
|
|
||||||
mag += 1;
|
|
||||||
adjustedSize /= 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
return string.Format("{0:n" + decimalPlaces + "} {1}",
|
|
||||||
adjustedSize,
|
|
||||||
SizeSuffixes[mag]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
using Newtonsoft.Json.Converters;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core.Models
|
|
||||||
{
|
|
||||||
public class ControlTarget
|
|
||||||
{
|
|
||||||
[Key]
|
|
||||||
public int Idx { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tipo applicazione da monitorare
|
|
||||||
/// </summary>
|
|
||||||
public string ApplicationType { get; set; } = "";
|
|
||||||
#if false
|
|
||||||
[JsonConverter(typeof(StringEnumConverter))]
|
|
||||||
public CoreEnum.AppType ApplicationType { get; set; } = CoreEnum.AppType.None;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Path di base da monitorare
|
|
||||||
/// </summary>
|
|
||||||
public string BasePath { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Pattern di ricerca
|
|
||||||
/// </summary>
|
|
||||||
public string SearchPattern { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indica se il path sia abilitato
|
|
||||||
/// </summary>
|
|
||||||
public bool IsEnabled { get; set; } = true;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indica se sia abilitato l'update x l'item
|
|
||||||
/// </summary>
|
|
||||||
public bool UpdateEnabled { get; set; } = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,9 +2,9 @@
|
|||||||
{
|
{
|
||||||
public class UploadResult
|
public class UploadResult
|
||||||
{
|
{
|
||||||
public bool Uploaded { get; set; } = false;
|
public bool Uploaded { get; set; }
|
||||||
public string FileName { get; set; } = "";
|
public string FileName { get; set; } = "";
|
||||||
public string StoredFileName { get; set; } = "";
|
public string StoredFileName { get; set; } = "";
|
||||||
public int ErrorCode { get; set; } = 0;
|
public int ErrorCode { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
namespace Core
|
namespace Core
|
||||||
{
|
{
|
||||||
@@ -12,7 +11,6 @@ namespace Core
|
|||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
public string MasterKey { get; set; } = "";
|
public string MasterKey { get; set; } = "";
|
||||||
public TipoLicenza LicType { get; set; } = TipoLicenza.UserKey;
|
|
||||||
public Dictionary<string, string> ParamDict { get; set; } = new Dictionary<string, string>();
|
public Dictionary<string, string> ParamDict { get; set; } = new Dictionary<string, string>();
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Core
|
|
||||||
{
|
|
||||||
public class Utils
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Effettua arrotondamento di un timespan ad un dato step di minuti
|
|
||||||
///
|
|
||||||
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="TSpanOrig">DataOra originale</param>
|
|
||||||
/// <param name="roundMin">Minuti di arrotondamento richeisti</param>
|
|
||||||
/// <param name="isFloor">Arrotondamento x difetto (floor = true) o eccesso (false)</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static TimeSpan TSpanRounded(TimeSpan TSpanOrig, int roundMin, bool isFloor)
|
|
||||||
{
|
|
||||||
long ticks = 0;
|
|
||||||
roundMin = roundMin <= 0 ? 1 : roundMin;
|
|
||||||
TimeOnly step = new TimeOnly(0, roundMin);
|
|
||||||
if (isFloor)
|
|
||||||
{
|
|
||||||
ticks = TSpanOrig.Ticks / step.Ticks;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ticks = (TSpanOrig.Ticks + step.Ticks - 1) / step.Ticks;
|
|
||||||
}
|
|
||||||
TimeSpan answ = new TimeSpan(ticks * step.Ticks);
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Effettua arrotondamento di un timespan ad un dato step di minuti
|
|
||||||
///
|
|
||||||
/// vedere qui: https://stackoverflow.com/questions/1393696/rounding-datetime-objects
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="DateOrig">DataOra originale</param>
|
|
||||||
/// <param name="roundMin">Minuti di arrotondamento richeisti</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static TimeSpan TSpanRounded(TimeSpan TSpanOrig, int roundMin)
|
|
||||||
{
|
|
||||||
long ticks = 0;
|
|
||||||
roundMin = roundMin <= 0 ? 1 : roundMin;
|
|
||||||
TimeOnly step = new TimeOnly(0, roundMin);
|
|
||||||
ticks = (TSpanOrig.Ticks + step.Ticks / 2) / step.Ticks;
|
|
||||||
TimeSpan answ = new TimeSpan(ticks * step.Ticks);
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<startup>
|
||||||
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||||
|
</startup>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.3" newVersion="8.0.0.3" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
</configuration>
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{5DADD362-4B14-45AD-AB0A-B30361D7449B}</ProjectGuid>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<RootNamespace>EgwProxy.LiMan.ConsoleTest</RootNamespace>
|
||||||
|
<AssemblyName>EgwProxy.LiMan.ConsoleTest</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="Program.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="App.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\EgwProxy.LiMan\EgwProxy.LiMan.csproj">
|
||||||
|
<Project>{1b8191a0-dd4e-4320-878b-246a9b61c368}</Project>
|
||||||
|
<Name>EgwProxy.LiMan</Name>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace EgwProxy.LiMan.ConsoleTest
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
string separator = "-----------------";
|
||||||
|
string codApp = "EgtBeamWall";
|
||||||
|
string answ = "";
|
||||||
|
#if DEBUG
|
||||||
|
string srvUrl = "localhost:5003";
|
||||||
|
//string srvUrl = "liman.egalware.com/ELM.API";
|
||||||
|
#else
|
||||||
|
string srvUrl = "liman.egalware.com/ELM.API";
|
||||||
|
#endif
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("EgwProxy.LiMan | Console test app");
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("premere un tasto per continuare...");
|
||||||
|
Console.ReadLine();
|
||||||
|
// per prima cosa instanzio (cablato) la classe di comnicazione
|
||||||
|
var commLib = new DataSyncro(srvUrl);
|
||||||
|
|
||||||
|
// test ping
|
||||||
|
Console.WriteLine("Premere ENT per check ping");
|
||||||
|
answ = Console.ReadLine();
|
||||||
|
bool servOk = commLib.CheckRemote();
|
||||||
|
string esito = servOk ? "OK" : "KO";
|
||||||
|
Console.WriteLine($"Esito controllo server: {esito}");
|
||||||
|
|
||||||
|
// chiamo e mostro elenco
|
||||||
|
var listAll = commLib.ReleaseGetAll(codApp);
|
||||||
|
|
||||||
|
// mostro elenco
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("Elenco versioni completo:");
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("");
|
||||||
|
foreach (var item in listAll)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{item.CodApp} | {item.VersNum} | {item.VersText} | {item.ReleaseDate:yyyy-MM-dd}");
|
||||||
|
}
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("premere un tasto per continuare...");
|
||||||
|
Console.WriteLine("");
|
||||||
|
Console.ReadLine();
|
||||||
|
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("Elenco versioni filtrato:");
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("");
|
||||||
|
Console.WriteLine("Inserire versione minima richiesta (default: 0.0.0.0)");
|
||||||
|
answ = Console.ReadLine();
|
||||||
|
answ = string.IsNullOrEmpty(answ) ? "0.0.0.0" : answ;
|
||||||
|
|
||||||
|
while (!string.IsNullOrEmpty(answ))
|
||||||
|
{
|
||||||
|
var listFilt = commLib.ReleaseGetFilt(codApp, answ);
|
||||||
|
foreach (var item in listFilt)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"{item.CodApp} | {item.VersNum} | {item.VersText} | {item.ReleaseDate:yyyy-MM-dd}");
|
||||||
|
}
|
||||||
|
Console.WriteLine(separator);
|
||||||
|
Console.WriteLine("");
|
||||||
|
|
||||||
|
Console.WriteLine("Inserire versione minima richiesta (se vuoto esce)");
|
||||||
|
answ = Console.ReadLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("EgwProxy.LiMan.ConsoleTest")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("EgwProxy.LiMan.ConsoleTest")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("5dadd362-4b14-45ad-ab0a-b30361d7449b")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
|
<metadata>
|
||||||
|
<id>EgwProxy.LiMan</id>
|
||||||
|
<version>#version#</version>
|
||||||
|
<title>EgwProxy.LiMan</title>
|
||||||
|
<authors>Samuele E. Locatelli, EgalWare</authors>
|
||||||
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
<license type="expression">MIT</license>
|
||||||
|
<description>Libreria per comunicazione REST con server LiMan - beta/unstable</description>
|
||||||
|
<releaseNotes>#releaseNotes#</releaseNotes>
|
||||||
|
<copyright>#copyright#</copyright>
|
||||||
|
<tags>EgwProxy.LiMan LiMan Rest</tags>
|
||||||
|
<dependencies>
|
||||||
|
<dependency id="RestSharp" version="111.2.0.0" />
|
||||||
|
<dependency id="Newtonsoft.Json" version="13.0.0.0" />
|
||||||
|
</dependencies>
|
||||||
|
</metadata>
|
||||||
|
<files>
|
||||||
|
<file src="EgwProxy.LiMan\bin\Debug\EgwProxy.LiMan*.dll" target="lib" />
|
||||||
|
<file src="EgwProxy.LiMan\bin\Debug\EgwProxy.LiMan*.config" target="lib" />
|
||||||
|
<file src="EgwProxy.LiMan\bin\Debug\EgwProxy.LiMan*.pdb" target="lib" />
|
||||||
|
</files>
|
||||||
|
</package>
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||||
|
<metadata>
|
||||||
|
<id>EgwProxy.LiMan</id>
|
||||||
|
<version>#version#</version>
|
||||||
|
<title>EgwProxy.LiMan</title>
|
||||||
|
<authors>Samuele E. Locatelli, EgalWare</authors>
|
||||||
|
<requireLicenseAcceptance>false</requireLicenseAcceptance>
|
||||||
|
<license type="expression">MIT</license>
|
||||||
|
<description>Libreria per comunicazione REST con server LiMan</description>
|
||||||
|
<releaseNotes>#releaseNotes#</releaseNotes>
|
||||||
|
<copyright>#copyright#</copyright>
|
||||||
|
<tags>EgwProxy.LiMan LiMan Rest</tags>
|
||||||
|
<dependencies>
|
||||||
|
<dependency id="RestSharp" version="111.2.0.0" />
|
||||||
|
<dependency id="Newtonsoft.Json" version="13.0.0.0" />
|
||||||
|
</dependencies>
|
||||||
|
</metadata>
|
||||||
|
<files>
|
||||||
|
<file src="EgwProxy.LiMan\bin\Debug\EgwProxy.LiMan*.dll" target="lib" />
|
||||||
|
<file src="EgwProxy.LiMan\bin\Debug\EgwProxy.LiMan*.config" target="lib" />
|
||||||
|
</files>
|
||||||
|
</package>
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 17
|
||||||
|
VisualStudioVersion = 17.9.34902.65
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwProxy.LiMan", "EgwProxy.LiMan\EgwProxy.LiMan.csproj", "{1B8191A0-DD4E-4320-878B-246A9B61C368}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EgwProxy.LiMan.ConsoleTest", "EgwProxy.LiMan.ConsoleTest\EgwProxy.LiMan.ConsoleTest.csproj", "{5DADD362-4B14-45AD-AB0A-B30361D7449B}"
|
||||||
|
EndProject
|
||||||
|
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TestWinFormVB", "TestWinFormVB\TestWinFormVB.vbproj", "{CC0A7D8F-0888-45F5-B791-FCD90349CD21}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
Release|Any CPU = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{1B8191A0-DD4E-4320-878B-246A9B61C368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{1B8191A0-DD4E-4320-878B-246A9B61C368}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{1B8191A0-DD4E-4320-878B-246A9B61C368}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{1B8191A0-DD4E-4320-878B-246A9B61C368}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{5DADD362-4B14-45AD-AB0A-B30361D7449B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{5DADD362-4B14-45AD-AB0A-B30361D7449B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{5DADD362-4B14-45AD-AB0A-B30361D7449B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{5DADD362-4B14-45AD-AB0A-B30361D7449B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{CC0A7D8F-0888-45F5-B791-FCD90349CD21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{CC0A7D8F-0888-45F5-B791-FCD90349CD21}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{CC0A7D8F-0888-45F5-B791-FCD90349CD21}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{CC0A7D8F-0888-45F5-B791-FCD90349CD21}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {4898F98F-F4DF-4114-A026-D03C28F288A3}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
// <Auto-Generated>
|
||||||
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
// </Auto-Generated>
|
||||||
|
namespace EgwProxy.LiMan.DTO
|
||||||
|
{
|
||||||
|
public class ReleaseDTO
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Codice/Nome applicativo
|
||||||
|
/// </summary>
|
||||||
|
public string CodApp { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Versione applicativo formato semver numerico 4 blocchi
|
||||||
|
/// </summary>
|
||||||
|
public string VersNum { get; set; } = "0.0.0.0";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Versione applicativo, formato testuale libero, può essere uguale a VersNum
|
||||||
|
/// </summary>
|
||||||
|
public string VersText { get; set; } = "a.b";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Oggetto versione calcolato da VersNum
|
||||||
|
/// </summary>
|
||||||
|
public Version VersVal { get; set; } = new Version();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Verifica se sia permessa la versione quando viene valutata la versione massima consentita
|
||||||
|
/// </summary>
|
||||||
|
public bool IsPermitted { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Data di release
|
||||||
|
/// </summary>
|
||||||
|
public DateTime ReleaseDate { get; set; } = DateTime.Today.AddYears(100);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Url pagina web di changelog (traduzione gestita sul sito target) - calcolato da CodApp + vers
|
||||||
|
/// </summary>
|
||||||
|
public string UrlChangelog { get; set; } = "http://releases.egalware.com";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Url pagina web di changelog estesa (traduzione gestita sul sito target) - calcolato da CodApp + vers
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public string UrlChangelogExt { get; set; } = "http://releases.egalware.com";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indica se il record sia da considerare attivo/pubblico
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool IsActive { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,327 @@
|
|||||||
|
using EgwProxy.LiMan.DTO;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using NLog;
|
||||||
|
using NLog.Fluent;
|
||||||
|
using RestSharp;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
|
namespace EgwProxy.LiMan
|
||||||
|
{
|
||||||
|
public class DataSyncro
|
||||||
|
{
|
||||||
|
#region Public Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inizializza la libreria di comunicazione con il token assegnato
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serverUrl">URL del server</param>
|
||||||
|
public DataSyncro(string serverUrl)
|
||||||
|
{
|
||||||
|
servAddr = serverUrl;
|
||||||
|
apiUrl = $"https://{servAddr}/api/";
|
||||||
|
rcOptions = new RestClientOptions { BaseUrl = new Uri(apiUrl), Timeout = TimeSpan.FromMilliseconds(callTimeout) };
|
||||||
|
Log.Info($"DataSyncro initialized | api: {apiUrl} | timeout: {callTimeout}");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test ping x indirizzo indicato
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tgtAddr">Indirizzo da pingare</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IPStatus pingAddress(string tgtAddr)
|
||||||
|
{
|
||||||
|
IPStatus answ = IPStatus.Unknown;
|
||||||
|
IPAddress address;
|
||||||
|
PingReply reply;
|
||||||
|
using (Ping pingSender = new Ping())
|
||||||
|
{
|
||||||
|
address = IPAddress.Loopback;
|
||||||
|
int pingMsTimeout = 500;
|
||||||
|
IPAddress.TryParse(tgtAddr, out address);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// se != null --> uso tgtAddr...
|
||||||
|
if (address != null)
|
||||||
|
{
|
||||||
|
reply = pingSender.Send(address, pingMsTimeout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reply = pingSender.Send(tgtAddr, pingMsTimeout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
reply = pingSender.Send(IPAddress.Loopback, pingMsTimeout);
|
||||||
|
}
|
||||||
|
answ = reply.Status;
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test ping x indirizzo indicato
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="tgtAddr">Indirizzo da pingare</param>
|
||||||
|
/// <param name="timeout">Timeout chiamata in ms</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IPStatus pingAddress(string tgtAddr, int timeout)
|
||||||
|
{
|
||||||
|
IPStatus answ = IPStatus.Unknown;
|
||||||
|
IPAddress address;
|
||||||
|
PingReply reply;
|
||||||
|
using (Ping pingSender = new Ping())
|
||||||
|
{
|
||||||
|
address = IPAddress.Loopback;
|
||||||
|
int pingMsTimeout = timeout;
|
||||||
|
IPAddress.TryParse(tgtAddr, out address);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// se != null --> uso tgtAddr...
|
||||||
|
if (address != null && address != IPAddress.Loopback)
|
||||||
|
{
|
||||||
|
reply = pingSender.Send(address, pingMsTimeout);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reply = pingSender.Send(tgtAddr, pingMsTimeout);
|
||||||
|
}
|
||||||
|
answ = reply.Status;
|
||||||
|
}
|
||||||
|
catch (Exception exc)
|
||||||
|
{
|
||||||
|
answ = IPStatus.Unknown;
|
||||||
|
Log.Error($"Errore in ping:{Environment.NewLine}{exc}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Effettua chiamata test sul server (ping), se fallisse riprova fino a maxTry volte
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="maxTry">num tentativi in caso di KO</param>
|
||||||
|
/// <param name="waitTime">tempo di attesa medio tra tentativi in ms</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool CheckRemote(int maxTry = 5, int waitTime = 200)
|
||||||
|
{
|
||||||
|
bool res = false;
|
||||||
|
int numTry = 0;
|
||||||
|
IPAddress address = IPAddress.Loopback;
|
||||||
|
string srvName = servAddr;
|
||||||
|
// tolgo eventuale nome con ":"
|
||||||
|
if (servAddr.Contains(":"))
|
||||||
|
{
|
||||||
|
srvName = servAddr.Substring(0, servAddr.IndexOf(":"));
|
||||||
|
}
|
||||||
|
// tolgo eventuale nome con "/"
|
||||||
|
if (servAddr.Contains("/"))
|
||||||
|
{
|
||||||
|
srvName = servAddr.Substring(0, servAddr.IndexOf("/"));
|
||||||
|
}
|
||||||
|
while (!res && numTry < maxTry)
|
||||||
|
{
|
||||||
|
res = pingAddress(srvName, callTimeout) == IPStatus.Success;
|
||||||
|
numTry++;
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
Thread.Sleep(waitTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<ReleaseDTO> ReleaseGetAll(string CodApp)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/{CodAppEnc}", Method.Get);
|
||||||
|
var response = client.Get(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Versione Async Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<ReleaseDTO>> ReleaseGetAllAsync(string CodApp)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/{CodAppEnc}", Method.Get);
|
||||||
|
var response = await client.GetAsync(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return await Task.FromResult(answ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <param name="VersMin">Versione minima richiesta</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<ReleaseDTO> ReleaseGetFilt(string CodApp, string VersMin)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/filt/{CodAppEnc}?VersMin={VersMin}", Method.Get);
|
||||||
|
var response = client.Get(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Versione Async Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <param name="VersMin">Versione minima richiesta</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<ReleaseDTO>> ReleaseGetFiltAsync(string CodApp, string VersMin)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/filt/{CodAppEnc}?VersMin={VersMin}", Method.Get);
|
||||||
|
var response = await client.GetAsync(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return await Task.FromResult(answ);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <param name="VersMin">Versione minima richiesta</param>
|
||||||
|
/// <param name="VersMax">Versione massima consentita</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<ReleaseDTO> ReleaseGetFiltLimit(string CodApp, string VersMin, string VersMax)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/filtLimit/{CodAppEnc}?VersMin={VersMin}&VersMax={VersMax}", Method.Get);
|
||||||
|
var response = client.Get(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Versione Async Elenco Release applicazione
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="CodApp">CodApp richiesta</param>
|
||||||
|
/// <param name="VersMin">Versione minima richiesta</param>
|
||||||
|
/// <param name="VersMax">Versione massima consentita</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<ReleaseDTO>> ReleaseGetFiltLimitAsync(string CodApp, string VersMin, string VersMax)
|
||||||
|
{
|
||||||
|
List<ReleaseDTO> answ = new List<ReleaseDTO>();
|
||||||
|
|
||||||
|
using (RestClient client = new RestClient(rcOptions))
|
||||||
|
{
|
||||||
|
string CodAppEnc = HttpUtility.UrlEncode(CodApp);
|
||||||
|
var request = new RestRequest($"Release/filtLimit/{CodAppEnc}?VersMin={VersMin}&VersMax={VersMax}", Method.Get);
|
||||||
|
var response = await client.GetAsync(request);
|
||||||
|
// controllo risposta
|
||||||
|
if (response.StatusCode == HttpStatusCode.OK)
|
||||||
|
{
|
||||||
|
// contenuto serializzato
|
||||||
|
string rawData = $"{response.Content}";
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ReleaseDTO>>(rawData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return await Task.FromResult(answ);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Istanza logger
|
||||||
|
/// </summary>
|
||||||
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// URL dell'API x chiamate gestione licenze
|
||||||
|
/// </summary>
|
||||||
|
private string apiUrl = $"";
|
||||||
|
|
||||||
|
private int callTimeout = 10000;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Opzioni standard di chiamata
|
||||||
|
/// </summary>
|
||||||
|
private RestClientOptions rcOptions = new RestClientOptions();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indirizzo server (URL con eventuale porta)
|
||||||
|
/// </summary>
|
||||||
|
private string servAddr = $"";
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{1B8191A0-DD4E-4320-878B-246A9B61C368}</ProjectGuid>
|
||||||
|
<OutputType>Library</OutputType>
|
||||||
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
|
<RootNamespace>EgwProxy.LiMan</RootNamespace>
|
||||||
|
<AssemblyName>EgwProxy.LiMan</AssemblyName>
|
||||||
|
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||||
|
<FileAlignment>512</FileAlignment>
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<TargetFrameworkProfile />
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<DebugType>full</DebugType>
|
||||||
|
<Optimize>false</Optimize>
|
||||||
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
|
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<DebugType>pdbonly</DebugType>
|
||||||
|
<Optimize>true</Optimize>
|
||||||
|
<OutputPath>bin\Release\</OutputPath>
|
||||||
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
|
<ErrorReport>prompt</ErrorReport>
|
||||||
|
<WarningLevel>4</WarningLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\NLog.5.0.1\lib\net46\NLog.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="RestSharp, Version=111.2.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\RestSharp.111.2.0\lib\net471\RestSharp.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System" />
|
||||||
|
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||||
|
<Reference Include="System.Configuration" />
|
||||||
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.IO.Compression" />
|
||||||
|
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Numerics" />
|
||||||
|
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Text.Json, Version=8.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Text.Json.8.0.3\lib\net462\System.Text.Json.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Web" />
|
||||||
|
<Reference Include="System.Xml.Linq" />
|
||||||
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
|
<Reference Include="Microsoft.CSharp" />
|
||||||
|
<Reference Include="System.Data" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
|
<Reference Include="System.Xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="DataSyncro.cs" />
|
||||||
|
<Compile Include="RestPayload.cs" />
|
||||||
|
<Compile Include="DTO\ReleaseDTO.cs" />
|
||||||
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="app.config" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
|
</Project>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
// General Information about an assembly is controlled through the following
|
||||||
|
// set of attributes. Change these attribute values to modify the information
|
||||||
|
// associated with an assembly.
|
||||||
|
[assembly: AssemblyTitle("EgwProxy.LiMan")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("EgwProxy.LiMan")]
|
||||||
|
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||||
|
[assembly: AssemblyTrademark("")]
|
||||||
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
// Setting ComVisible to false makes the types in this assembly not visible
|
||||||
|
// to COM components. If you need to access a type in this assembly from
|
||||||
|
// COM, set the ComVisible attribute to true on that type.
|
||||||
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
|
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||||
|
[assembly: Guid("1b8191a0-dd4e-4320-878b-246a9b61c368")]
|
||||||
|
|
||||||
|
// Version information for an assembly consists of the following four values:
|
||||||
|
//
|
||||||
|
// Major Version
|
||||||
|
// Minor Version
|
||||||
|
// Build Number
|
||||||
|
// Revision
|
||||||
|
//
|
||||||
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
|
// by using the '*' as shown below:
|
||||||
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
using EgwProxy.LiMan.DTO;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace EgwProxy.LiMan
|
||||||
|
{
|
||||||
|
public class RestPayload
|
||||||
|
{
|
||||||
|
public class ReleaseData
|
||||||
|
{
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco record ReleaseDTO x verifica versioni disponibili
|
||||||
|
/// </summary>
|
||||||
|
public List<ReleaseDTO> ReleaseList { get; set; }
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<configuration>
|
||||||
|
<runtime>
|
||||||
|
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.3" newVersion="8.0.0.3" />
|
||||||
|
</dependentAssembly>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||||
|
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
|
||||||
|
</dependentAssembly>
|
||||||
|
</assemblyBinding>
|
||||||
|
</runtime>
|
||||||
|
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup></configuration>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
|
||||||
|
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
|
||||||
|
<package id="NLog" version="5.0.1" targetFramework="net462" />
|
||||||
|
<package id="RestSharp" version="111.2.0" targetFramework="net472" />
|
||||||
|
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
|
||||||
|
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
|
||||||
|
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
|
||||||
|
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
|
||||||
|
<package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net472" />
|
||||||
|
<package id="System.Text.Json" version="8.0.3" targetFramework="net462" />
|
||||||
|
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
||||||
|
<package id="System.ValueTuple" version="4.5.0" targetFramework="net462" requireReinstallation="true" />
|
||||||
|
</packages>
|
||||||
File diff suppressed because one or more lines are too long
@@ -1,357 +0,0 @@
|
|||||||
using Core;
|
|
||||||
using Core.DTO;
|
|
||||||
using ICSharpCode.SharpZipLib.Core;
|
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
|
||||||
using LiMan.APi.Data;
|
|
||||||
using Microsoft.AspNetCore.Hosting;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.APi.Controllers
|
|
||||||
{
|
|
||||||
[Route("api/apptask")]
|
|
||||||
[ApiController]
|
|
||||||
public class AppTaskController : ControllerBase
|
|
||||||
{
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Init generico
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="configuration"></param>
|
|
||||||
/// <param name="DataService"></param>
|
|
||||||
/// <param name="env"></param>
|
|
||||||
public AppTaskController(IConfiguration configuration, ApiDataService DataService, IWebHostEnvironment env)
|
|
||||||
{
|
|
||||||
_configuration = configuration;
|
|
||||||
this.env = env;
|
|
||||||
dataService = DataService;
|
|
||||||
Log.Info("Avviata classe TaskController");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elimina tutte le registrazioni req/run/done x device
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dev">dev richiedente</param>
|
|
||||||
/// <param name="CurrReq">Obj AuthDataDTO con chiavi (master o app)</param>
|
|
||||||
[HttpDelete("cleanup/{dev}")]
|
|
||||||
public async Task<Dictionary<string, string>> TaskClearAll(string dev, [FromBody] TaskResultDTO CurrReq)
|
|
||||||
{
|
|
||||||
Dictionary<string, string> result = new Dictionary<string, string>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CurrReq.IsValid)
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!! effettuare verifica valori chiavi/imp/device...
|
|
||||||
|
|
||||||
// elimina tutte le richieste x la macchina...
|
|
||||||
var rawData = dataService.TaskListReset(CurrReq.CodImp);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "TaskClearAll");
|
|
||||||
|
|
||||||
if (rawData != null)
|
|
||||||
{
|
|
||||||
result = rawData;
|
|
||||||
}
|
|
||||||
// salva in redis e toglie dai task da eseguire la richiesta relativa...
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(dev, CurrReq.CodImp, $"POST:api/apptask/clear/ | {CurrReq.MastKey} | {CurrReq.CodImp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiede elenco di task da eseguire x il dev richiedente
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dev">dev richiedente</param>
|
|
||||||
/// <param name="AppKey">Cod Auth applicativo</param>
|
|
||||||
/// <param name="CodImp">CodImp del dev</param>
|
|
||||||
[HttpGet("pend/{dev}")]
|
|
||||||
public async Task<Dictionary<string, string>> TaskGetPending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp)
|
|
||||||
//public async Task<ActionResult<Dictionary<string, string>>> TaskGetPending(string dev, [FromHeader] string CodInst, [FromHeader] string CodImp)
|
|
||||||
{
|
|
||||||
Dictionary<string, string> result = new Dictionary<string, string>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (!string.IsNullOrEmpty(AppKey) && !string.IsNullOrEmpty(CodImp))
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!! effettuare verifica valori chiavi/imp/device...
|
|
||||||
|
|
||||||
// recupero da REDIS le richieste pending x la macchina...
|
|
||||||
result = dataService.TaskListGet(CodImp);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CodImp, "TaskGetPending");
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(dev, CodImp, $"POST:api/apptask/pending/ | {dev} | {CodImp} | {AppKey}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Registra risultato esecuzione task richiesti al device
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dev">dev richiedente</param>
|
|
||||||
/// <param name="CurrReq">Obj AuthDataDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("done/{dev}")]
|
|
||||||
public async Task<string> TaskSetDone(string dev, [FromBody] TaskResultDTO CurrReq)
|
|
||||||
{
|
|
||||||
string result = "NA";
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CurrReq.IsValid)
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!! effettuare verifica valori chiavi/imp/device...
|
|
||||||
|
|
||||||
// recupero da REDIS le richieste pending x la macchina...
|
|
||||||
int numDone = dataService.TaskSetDone(CurrReq.CodImp, CurrReq.DataPayload);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "TaskSetDone");
|
|
||||||
|
|
||||||
result = $"saved {numDone}/{CurrReq.DataPayload.Count}";
|
|
||||||
// salva in redis e toglie dai task da eseguire la richiesta relativa...
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(CurrReq.CodImp, CurrReq.CodImp, $"POST:api/apptask/done/ | {CurrReq.MastKey} | {CurrReq.CodImp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Registra in esecuzione itask richiesti al device
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="dev">dev richiedente</param>
|
|
||||||
/// <param name="CurrReq">Obj AuthDataDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("running/{dev}")]
|
|
||||||
public async Task<string> TaskSetRunning(string dev, [FromBody] TaskResultDTO CurrReq)
|
|
||||||
{
|
|
||||||
string result = "NA";
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CurrReq.IsValid)
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!! effettuare verifica valori chiavi/imp/device...
|
|
||||||
|
|
||||||
// recupero da REDIS le richieste pending x la macchina...
|
|
||||||
int numDone = dataService.TaskSetRunning(CurrReq.CodImp, CurrReq.DataPayload);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "TaskSetRunning");
|
|
||||||
|
|
||||||
result = $"saved {numDone}/{CurrReq.DataPayload.Count}";
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(dev, CurrReq.CodImp, $"POST:api/apptask/running/ | {CurrReq.MastKey} | {CurrReq.CodImp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Caricamento file backup applicativo in formato ZIP via FORM POST (backup configurazione applicativo)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CodApp">Applicazione di riferimento</param>
|
|
||||||
/// <param name="AppKey">Chiave istanza</param>
|
|
||||||
/// <param name="CodImp">CodImpiego istanza</param>
|
|
||||||
/// <param name="DoUnzip">Richiesta UnZip file post caricamento</param>
|
|
||||||
/// <param name="ForceApprov">Richiesta di approvazione salvataggio files modificati post upload + unzip</param>
|
|
||||||
/// <param name="ZipFile">File da caricare ed estrarre</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost("zipbackup")]
|
|
||||||
public async Task<ActionResult<UploadResult>> ZipFileSaveExtract([FromForm] string CodApp,
|
|
||||||
[FromForm] string AppKey,
|
|
||||||
[FromForm] string CodImp,
|
|
||||||
[FromForm] bool DoUnzip,
|
|
||||||
[FromForm] bool ForceApprov,
|
|
||||||
[FromForm] IFormFile ZipFile)
|
|
||||||
{
|
|
||||||
// preparo oggetti x risposta
|
|
||||||
var resourcePath = new Uri($"{Request.Scheme}://{Request.Host}/api/filesave/");
|
|
||||||
List<UploadResult> uploadResults = new List<UploadResult>();
|
|
||||||
var uploadResult = new UploadResult();
|
|
||||||
string CodInst = "";
|
|
||||||
// max 20 mb
|
|
||||||
long maxFileSize = 1024 * 1024 * 20;
|
|
||||||
// in primis verifica CodImp e AppKey
|
|
||||||
var sLicList = await SubLicGet(AppKey, CodImp);
|
|
||||||
if (sLicList == null || sLicList.Count == 0)
|
|
||||||
{
|
|
||||||
Log.Error($"ZipUpload backup failed: received code not validated | CodApp: {CodApp} | AppKey: {AppKey} | CodImp: {CodImp}");
|
|
||||||
uploadResult.ErrorCode = 3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var fRec = sLicList.FirstOrDefault();
|
|
||||||
if (fRec == null || fRec.LicenzaNav == null)
|
|
||||||
{
|
|
||||||
Log.Error($"ZipUpload backup failed: Impossible to find CodInst for current data | CodApp: {CodApp} | AppKey: {AppKey} | CodImp: {CodImp}");
|
|
||||||
uploadResult.ErrorCode = 4;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
CodInst = fRec.LicenzaNav.CodInst;
|
|
||||||
string fileDir = env.ContentRootPath;
|
|
||||||
string relDir = env.EnvironmentName;
|
|
||||||
string authKey = "";
|
|
||||||
uploadResult.FileName = ZipFile.FileName;
|
|
||||||
// controllo size e procedo
|
|
||||||
if (ZipFile.Length == 0)
|
|
||||||
{
|
|
||||||
Log.Info($"{ZipFile.FileName} length is 0 (Err: 1)");
|
|
||||||
uploadResult.ErrorCode = 1;
|
|
||||||
}
|
|
||||||
else if (ZipFile.Length > maxFileSize)
|
|
||||||
{
|
|
||||||
Log.Info($"{ZipFile.FileName} of {CalcSize(ZipFile.Length)} is larger than the limit of {CalcSize(maxFileSize)} (Err: 2)");
|
|
||||||
uploadResult.ErrorCode = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
relDir = _configuration["ServerConf:FileShareAppBackup"];
|
|
||||||
fileDir = Path.Combine(relDir, CodApp, CodInst);
|
|
||||||
if (!Directory.Exists(fileDir))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(fileDir);
|
|
||||||
}
|
|
||||||
var filePath = Path.Combine(fileDir, ZipFile.FileName);
|
|
||||||
|
|
||||||
// elimino se ci fosse già il file...
|
|
||||||
if (System.IO.File.Exists(filePath))
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// salvo da filestream a file locale
|
|
||||||
using (FileStream fs = new(filePath, FileMode.Create))
|
|
||||||
{
|
|
||||||
await ZipFile.CopyToAsync(fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
// log!
|
|
||||||
Log.Info($"{ZipFile.FileName} saved at {filePath}");
|
|
||||||
uploadResult.Uploaded = true;
|
|
||||||
uploadResult.StoredFileName = ZipFile.FileName;
|
|
||||||
// se richiesto unzip eseguo
|
|
||||||
if (DoUnzip)
|
|
||||||
{
|
|
||||||
bool extractDone = false;
|
|
||||||
// recupero applicativi connessi
|
|
||||||
var listLic = await dataService.AppDtoSearch(CodInst, CodApp, false);
|
|
||||||
var currLic = listLic.Where(x => x.IsActive).FirstOrDefault();
|
|
||||||
// procedo SOLO SE ho una licenza attiva x questo cliente
|
|
||||||
if (currLic != null)
|
|
||||||
{
|
|
||||||
// esegue unzip
|
|
||||||
await Task.Run(() =>
|
|
||||||
{
|
|
||||||
System.IO.Compression.ZipFile.ExtractToDirectory(filePath, fileDir, true);
|
|
||||||
});
|
|
||||||
extractDone = true;
|
|
||||||
|
|
||||||
// elimino zip e altro...
|
|
||||||
if (extractDone)
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// se richiesta auto approvazione eseguo...
|
|
||||||
string reqAppFile = Path.Combine(fileDir, "ChangeApprove.req");
|
|
||||||
if (System.IO.File.Exists(reqAppFile))
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(reqAppFile);
|
|
||||||
}
|
|
||||||
if (ForceApprov)
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!!
|
|
||||||
// deve chiamare metodo x approvare, in MP-PROG, la directory dei
|
|
||||||
// documenti caricati.. x ora segnaposto con file (così se scansiona
|
|
||||||
// trova e approva)...
|
|
||||||
System.IO.File.WriteAllText(reqAppFile, authKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
Log.Error($"{ZipFile.FileName} error on upload (Err: 3): {ex.Message}");
|
|
||||||
uploadResult.ErrorCode = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Log.Info($"ZipUpload backup completed | CodInst: {CodInst} | CodApp: {CodApp} | {uploadResults.Count} files");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uploadResults.Add(uploadResult);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CodImp, "ZipFileSaveExtract");
|
|
||||||
|
|
||||||
return new CreatedResult(resourcePath, uploadResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dataservice x accesso DB
|
|
||||||
/// </summary>
|
|
||||||
protected ApiDataService dataService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Restituisce size calcolata
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="origSize"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected string CalcSize(long origSize)
|
|
||||||
{
|
|
||||||
return MeasureUtils.SizeSuffix(origSize, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private static IConfiguration _configuration;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Classe per logging
|
|
||||||
/// </summary>
|
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
private readonly IWebHostEnvironment env;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica validità codici
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="AppKey"></param>
|
|
||||||
/// <param name="CodImp"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private async Task<List<DB.DBModels.SubLicenzaModel>> SubLicGet(string AppKey, string CodImp)
|
|
||||||
{
|
|
||||||
List<DB.DBModels.SubLicenzaModel> listRes = await dataService.AttivazioniGetAppImp(AppKey, CodImp);
|
|
||||||
return listRes;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -60,7 +60,7 @@ namespace LiMan.APi.Controllers
|
|||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<List<DB.DTO.ApplicativoDTO>> Get(string id, string CodApp)
|
public async Task<List<DB.DTO.ApplicativoDTO>> Get(string id, string CodApp)
|
||||||
{
|
{
|
||||||
var result = await dataService.AppDtoSearch(id, CodApp, true);
|
var result = await dataService.ApplicativiSearch(id, CodApp, true);
|
||||||
await dataService.recordCall(id, CodApp, $"GET:api/applicazione");
|
await dataService.recordCall(id, CodApp, $"GET:api/applicazione");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,10 +93,9 @@ namespace LiMan.APi.Controllers
|
|||||||
public async Task<List<DB.DTO.AttivazioneDTO>> Post([FromBody] UserLicenseRequest CurrRequest)
|
public async Task<List<DB.DTO.AttivazioneDTO>> Post([FromBody] UserLicenseRequest CurrRequest)
|
||||||
{
|
{
|
||||||
List<DB.DTO.AttivazioneDTO> currData = new List<DB.DTO.AttivazioneDTO>();
|
List<DB.DTO.AttivazioneDTO> currData = new List<DB.DTO.AttivazioneDTO>();
|
||||||
// giorni veto riattivazione: 60 x lic utente GPW, 7 altrimenti
|
|
||||||
int dayVeto = CurrRequest.LicType == Core.Enum.TipoLicenza.UserKey ? 60 : 7;
|
|
||||||
// eseguo tentativo generazione attivazioni da licenza...
|
// eseguo tentativo generazione attivazioni da licenza...
|
||||||
bool done = await dataService.AttivazioniTryAdd(CurrRequest.MasterKey, CurrRequest.ParamDict, dayVeto, CurrRequest.LicType);
|
bool done = await dataService.AttivazioniTryAdd(CurrRequest.MasterKey, CurrRequest.ParamDict, 60);
|
||||||
currData = await dataService.AttivazioniByMasterKey(CurrRequest.MasterKey, false);
|
currData = await dataService.AttivazioniByMasterKey(CurrRequest.MasterKey, false);
|
||||||
// se ho qualcosa da loggare...
|
// se ho qualcosa da loggare...
|
||||||
foreach (var item in CurrRequest.ParamDict)
|
foreach (var item in CurrRequest.ParamDict)
|
||||||
@@ -148,7 +147,7 @@ namespace LiMan.APi.Controllers
|
|||||||
/// <param name="chiave">Licenza MASTER</param>
|
/// <param name="chiave">Licenza MASTER</param>
|
||||||
/// <param name="codImpiego">Codice univoco impiego licenza</param>
|
/// <param name="codImpiego">Codice univoco impiego licenza</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
// GET api/attivazioni/verifica/5?codImpiego=abcd
|
// GET api/attivazioni/verifica/5
|
||||||
[HttpGet("verifica")]
|
[HttpGet("verifica")]
|
||||||
public async Task<DB.DTO.AttivazioneDTO> VerificaImpiego(string chiave, string codImpiego)
|
public async Task<DB.DTO.AttivazioneDTO> VerificaImpiego(string chiave, string codImpiego)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,137 +0,0 @@
|
|||||||
using Core;
|
|
||||||
using LiMan.APi.Data;
|
|
||||||
using LiMan.DB.DBModels;
|
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.APi.Controllers
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Controller livello APPLICAZIONE
|
|
||||||
/// </summary>
|
|
||||||
[Route("api/enroller")]
|
|
||||||
[ApiController]
|
|
||||||
public class EnrollerController : ControllerBase
|
|
||||||
{
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Init generico
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="DataService"></param>
|
|
||||||
public EnrollerController(ApiDataService DataService)
|
|
||||||
{
|
|
||||||
dataService = DataService;
|
|
||||||
Log.Info("Avviata classe ApplicazioneController");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera record di enroll di una richiesta x ricavarne ID licenza da applicare
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="id">ID richiesta</param>
|
|
||||||
/// <param name="passcode">passcode associato</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpGet("{id}")]
|
|
||||||
public async Task<EnrollRequestModel> Get(string id, int passcode)
|
|
||||||
{
|
|
||||||
string CodInst = "NA";
|
|
||||||
string CodApp = "Updater";
|
|
||||||
int reqId = 0;
|
|
||||||
int.TryParse(id, out reqId);
|
|
||||||
EnrollRequestModel reqRec = await dataService.EnrollReqGetById(reqId);
|
|
||||||
// solo se il passcode è corretto restituisco record, altrimenti fake one...
|
|
||||||
if (reqRec != null && reqRec.Passcode != passcode)
|
|
||||||
{
|
|
||||||
reqRec = new EnrollRequestModel() { IdReq = reqId };
|
|
||||||
}
|
|
||||||
await dataService.recordCall(CodInst, CodApp, $"GET:api/enroller/{id}");
|
|
||||||
return reqRec;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera record della licenza (mainKey) associata ad una richiesta date le sue info ID, passcode, ID licenza asegnata
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="id">ID richiesta</param>
|
|
||||||
/// <param name="passcode">passcode associato</param>
|
|
||||||
/// <param name="idLic">ID licenza associato</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpGet("getLicense/{id}")]
|
|
||||||
public async Task<LicenzaModel> GetLicData(string id, int passcode, int idLic)
|
|
||||||
{
|
|
||||||
string CodInst = "NA";
|
|
||||||
string CodApp = "Updater";
|
|
||||||
int reqId = 0;
|
|
||||||
int.TryParse(id, out reqId);
|
|
||||||
EnrollRequestModel reqRec = await dataService.EnrollReqGetById(reqId);
|
|
||||||
// init licenza non valida
|
|
||||||
LicenzaModel licRec = new LicenzaModel()
|
|
||||||
{
|
|
||||||
IdxLic = idLic,
|
|
||||||
Chiave = "",
|
|
||||||
CodInst = "NA",
|
|
||||||
CodApp = "None",
|
|
||||||
NumLicenze = 0,
|
|
||||||
Scadenza = DateTime.Today.AddYears(-1),
|
|
||||||
Payload = "",
|
|
||||||
Enigma = ""
|
|
||||||
};
|
|
||||||
// solo se sono corretti passcode e idLic corretto restituisco record, altrimenti fake one...
|
|
||||||
if (reqRec != null && reqRec.Passcode == passcode && reqRec.IdxLic == idLic)
|
|
||||||
{
|
|
||||||
licRec = await dataService.LicenzaById(idLic);
|
|
||||||
CodInst = licRec.CodInst;
|
|
||||||
CodApp = licRec.CodApp;
|
|
||||||
}
|
|
||||||
await dataService.recordCall(CodInst, CodApp, $"GET:api/enroller/getLicense/{id}");
|
|
||||||
return licRec;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Richiesta di un record con codice TOTP per l'enroll di un app client
|
|
||||||
/// </summary>
|
|
||||||
[HttpPost("getNewEnrollRec")]
|
|
||||||
public async Task<EnrollRequestModel> GetNewEnrollRec([FromBody] Dictionary<string, string> MachineInfo)
|
|
||||||
{
|
|
||||||
string CodInst = "NA";
|
|
||||||
string CodApp = "Updater";
|
|
||||||
var newRec = await dataService.EnrollReqCreate(MachineInfo);
|
|
||||||
await dataService.recordCall(CodInst, CodApp, $"GET:api/enroller/GetEnrollRec");
|
|
||||||
return newRec;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dataservice x accesso DB
|
|
||||||
/// </summary>
|
|
||||||
protected ApiDataService dataService { get; set; }
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Classe per logging
|
|
||||||
/// </summary>
|
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Generatore pseudocasuale
|
|
||||||
/// </summary>
|
|
||||||
private Random rnd = new Random();
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
using Core;
|
using Core;
|
||||||
using ICSharpCode.SharpZipLib.Core;
|
|
||||||
using ICSharpCode.SharpZipLib.Zip;
|
|
||||||
using LiMan.APi.Data;
|
using LiMan.APi.Data;
|
||||||
using LiMan.DB.DBModels;
|
using LiMan.DB.DBModels;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
@@ -12,7 +10,6 @@ using NLog;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@@ -25,6 +22,19 @@ namespace LiMan.APi.Controllers
|
|||||||
[Route("api/filesave")]
|
[Route("api/filesave")]
|
||||||
public class FilesaveController : ControllerBase
|
public class FilesaveController : ControllerBase
|
||||||
{
|
{
|
||||||
|
#region Private Fields
|
||||||
|
|
||||||
|
private static IConfiguration _configuration;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe per logging
|
||||||
|
/// </summary>
|
||||||
|
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
|
private readonly IWebHostEnvironment env;
|
||||||
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
#region Public Constructors
|
#region Public Constructors
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -43,6 +53,35 @@ namespace LiMan.APi.Controllers
|
|||||||
|
|
||||||
#endregion Public Constructors
|
#endregion Public Constructors
|
||||||
|
|
||||||
|
#region Protected Properties
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dataservice x accesso DB
|
||||||
|
/// </summary>
|
||||||
|
protected ApiDataService dataService { get; set; }
|
||||||
|
|
||||||
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Protected Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calcolo correetto mimetype da nome file
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected string GetMimeType(string fileName)
|
||||||
|
{
|
||||||
|
var provider = new FileExtensionContentTypeProvider();
|
||||||
|
string contentType;
|
||||||
|
if (!provider.TryGetContentType(fileName, out contentType))
|
||||||
|
{
|
||||||
|
contentType = "application/octet-stream";
|
||||||
|
}
|
||||||
|
return contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Protected Methods
|
||||||
|
|
||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
/// GET api/filesave/id/filename
|
/// GET api/filesave/id/filename
|
||||||
@@ -56,7 +95,7 @@ namespace LiMan.APi.Controllers
|
|||||||
[HttpGet("{id}/{secureName}/{fileName}")]
|
[HttpGet("{id}/{secureName}/{fileName}")]
|
||||||
public async Task<ActionResult> DownloadFile(string id, string secureName, string fileName)
|
public async Task<ActionResult> DownloadFile(string id, string secureName, string fileName)
|
||||||
{
|
{
|
||||||
string relDir = _configuration["ServerConf:FileShareTickets"];
|
string relDir = _configuration["FileShare"];
|
||||||
string ticketDir = Path.Combine(relDir, id);
|
string ticketDir = Path.Combine(relDir, id);
|
||||||
var filePath = Path.Combine(ticketDir, secureName);
|
var filePath = Path.Combine(ticketDir, secureName);
|
||||||
// verifico esistenza..
|
// verifico esistenza..
|
||||||
@@ -72,11 +111,12 @@ namespace LiMan.APi.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Elenco files associati a ticket supporto POST api/filesave/list/1
|
/// Elenco files assaociati a ticket supporto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id"></param>
|
/// <param name="id"></param>
|
||||||
/// <param name="CurrRequest"></param>
|
/// <param name="CurrRequest"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
// POST api/filesave/list/1
|
||||||
[HttpPost("list/{id}")]
|
[HttpPost("list/{id}")]
|
||||||
public async Task<List<FileAttachModel>> list(int id, [FromBody] SupportRequest CurrRequest)
|
public async Task<List<FileAttachModel>> list(int id, [FromBody] SupportRequest CurrRequest)
|
||||||
{
|
{
|
||||||
@@ -128,7 +168,7 @@ namespace LiMan.APi.Controllers
|
|||||||
}
|
}
|
||||||
else if (file.Length > maxFileSize)
|
else if (file.Length > maxFileSize)
|
||||||
{
|
{
|
||||||
Log.Info($"{trustedFileNameForDisplay} of {CalcSize(file.Length)} is larger than the limit of {CalcSize(maxFileSize)} (Err: 2)");
|
Log.Info($"{trustedFileNameForDisplay} of {file.Length} bytes is larger than the limit of {maxFileSize} bytes (Err: 2)");
|
||||||
uploadResult.ErrorCode = 2;
|
uploadResult.ErrorCode = 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -137,7 +177,7 @@ namespace LiMan.APi.Controllers
|
|||||||
{
|
{
|
||||||
DateTime oggi = DateTime.Today;
|
DateTime oggi = DateTime.Today;
|
||||||
trustedFileNameForFileStorage = Path.GetRandomFileName();
|
trustedFileNameForFileStorage = Path.GetRandomFileName();
|
||||||
relDir = _configuration["ServerConf:FileShareTickets"];
|
relDir = _configuration["FileShare"];
|
||||||
fileDir = Path.Combine(relDir, ticketDir);
|
fileDir = Path.Combine(relDir, ticketDir);
|
||||||
if (!Directory.Exists(fileDir))
|
if (!Directory.Exists(fileDir))
|
||||||
{
|
{
|
||||||
@@ -206,7 +246,7 @@ namespace LiMan.APi.Controllers
|
|||||||
}
|
}
|
||||||
else if (file.Length > maxFileSize)
|
else if (file.Length > maxFileSize)
|
||||||
{
|
{
|
||||||
Log.Info($"{trustedFileNameForDisplay} of {CalcSize(file.Length)} is larger than the limit of {CalcSize(maxFileSize)} (Err: 2)");
|
Log.Info($"{trustedFileNameForDisplay} of {file.Length} bytes is larger than the limit of {maxFileSize} bytes (Err: 2)");
|
||||||
uploadResult.ErrorCode = 2;
|
uploadResult.ErrorCode = 2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -215,7 +255,7 @@ namespace LiMan.APi.Controllers
|
|||||||
{
|
{
|
||||||
DateTime oggi = DateTime.Today;
|
DateTime oggi = DateTime.Today;
|
||||||
trustedFileNameForFileStorage = Path.GetRandomFileName();
|
trustedFileNameForFileStorage = Path.GetRandomFileName();
|
||||||
relDir = _configuration["ServerConf:FileShareTickets"];
|
relDir = _configuration["FileShare"];
|
||||||
fileDir = Path.Combine(relDir, ticketDir);
|
fileDir = Path.Combine(relDir, ticketDir);
|
||||||
if (!Directory.Exists(fileDir))
|
if (!Directory.Exists(fileDir))
|
||||||
{
|
{
|
||||||
@@ -245,202 +285,6 @@ namespace LiMan.APi.Controllers
|
|||||||
return new CreatedResult(resourcePath, uploadResult);
|
return new CreatedResult(resourcePath, uploadResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Caricamento file backup applicativo in formato ZIP via FORM POST (backup configurazione applicativo, file protetto da masterKey)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CodApp">Applicazione di riferimento</param>
|
|
||||||
/// <param name="CodInst">Installazione di riferimento</param>
|
|
||||||
/// <param name="DoUnzip">Richiesta UnZip file post caricamento</param>
|
|
||||||
/// <param name="ForceApprov">
|
|
||||||
/// Richiesta di approvazione salvataggio files modificati post upload + unzip
|
|
||||||
/// </param>
|
|
||||||
/// <param name="ZipFile">File da caricare ed estrarre</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpPost("zipbackup")]
|
|
||||||
public async Task<ActionResult<UploadResult>> PostZipFile([FromForm] string CodApp, [FromForm] string CodInst, [FromForm] bool DoUnzip, [FromForm] bool ForceApprov, [FromForm] IFormFile ZipFile)
|
|
||||||
{
|
|
||||||
// max 200 mb
|
|
||||||
long maxFileSize = 1024 * 1024 * 200;
|
|
||||||
// preparo oggetti x risposta
|
|
||||||
var resourcePath = new Uri($"{Request.Scheme}://{Request.Host}/api/filesave/");
|
|
||||||
List<UploadResult> uploadResults = new List<UploadResult>();
|
|
||||||
string fileDir = env.ContentRootPath;
|
|
||||||
string relDir = env.EnvironmentName;
|
|
||||||
string authKey = "";
|
|
||||||
var uploadResult = new UploadResult();
|
|
||||||
uploadResult.FileName = ZipFile.FileName;
|
|
||||||
// controllo size e procedo
|
|
||||||
if (ZipFile.Length == 0)
|
|
||||||
{
|
|
||||||
Log.Info($"{ZipFile.FileName} length is 0 (Err: 1)");
|
|
||||||
uploadResult.ErrorCode = 1;
|
|
||||||
}
|
|
||||||
else if (ZipFile.Length > maxFileSize)
|
|
||||||
{
|
|
||||||
Log.Info($"{ZipFile.FileName} of {CalcSize(ZipFile.Length)} is larger than the limit of {CalcSize(maxFileSize)} (Err: 2)");
|
|
||||||
uploadResult.ErrorCode = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
DateTime oggi = DateTime.Today;
|
|
||||||
relDir = _configuration["ServerConf:FileShareAppBackup"];
|
|
||||||
fileDir = Path.Combine(relDir, CodApp, CodInst);
|
|
||||||
if (!Directory.Exists(fileDir))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(fileDir);
|
|
||||||
}
|
|
||||||
var filePath = Path.Combine(fileDir, ZipFile.FileName);
|
|
||||||
|
|
||||||
// elimino se ci fosse già il file...
|
|
||||||
if (System.IO.File.Exists(filePath))
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// salvo da filestream a file locale
|
|
||||||
using (FileStream fs = new(filePath, FileMode.Create))
|
|
||||||
{
|
|
||||||
await ZipFile.CopyToAsync(fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
// log!
|
|
||||||
Log.Info($"{ZipFile.FileName} saved at {filePath}");
|
|
||||||
uploadResult.Uploaded = true;
|
|
||||||
uploadResult.StoredFileName = ZipFile.FileName;
|
|
||||||
// se richiesto unzip eseguo
|
|
||||||
if (DoUnzip)
|
|
||||||
{
|
|
||||||
bool extractDone = false;
|
|
||||||
// recupero applicativi connessi
|
|
||||||
var listLic = await dataService.AppDtoSearch(CodInst, CodApp, false);
|
|
||||||
var currLic = listLic.Where(x => x.IsActive).FirstOrDefault();
|
|
||||||
// procedo SOLO SE ho una licenza attiva x questo cliente
|
|
||||||
if (currLic != null)
|
|
||||||
{
|
|
||||||
//recupero authKey
|
|
||||||
authKey = currLic.Chiave;
|
|
||||||
using (ZipFile zf = new ZipFile(filePath))
|
|
||||||
{
|
|
||||||
zf.Password = authKey;
|
|
||||||
foreach (ZipEntry zipEntry in zf)
|
|
||||||
{
|
|
||||||
// Manipulate the output filename here as desired.
|
|
||||||
var entryFileName = zipEntry.Name;
|
|
||||||
var fullZipToPath = Path.Combine(fileDir, entryFileName);
|
|
||||||
Console.WriteLine(zipEntry.Name);
|
|
||||||
if (!zipEntry.IsFile)
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(fullZipToPath);
|
|
||||||
// Ignore directories
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4K is optimum
|
|
||||||
var buffer = new byte[4096];
|
|
||||||
|
|
||||||
// Unzip file in buffered chunks. This is just as fast as
|
|
||||||
// unpacking to a buffer the full size of the file, but does not
|
|
||||||
// waste memory. The "using" will close the stream even if an
|
|
||||||
// exception occurs.
|
|
||||||
using (var zipStream = zf.GetInputStream(zipEntry))
|
|
||||||
{
|
|
||||||
using (Stream fsOutput = System.IO.File.Create(fullZipToPath))
|
|
||||||
{
|
|
||||||
StreamUtils.Copy(zipStream, fsOutput, buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
extractDone = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// elimino zip e altro...
|
|
||||||
if (extractDone)
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(filePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
// se richiesta auto approvazione eseguo...
|
|
||||||
string reqAppFile = Path.Combine(fileDir, "ChangeApprove.req");
|
|
||||||
if (System.IO.File.Exists(reqAppFile))
|
|
||||||
{
|
|
||||||
System.IO.File.Delete(reqAppFile);
|
|
||||||
}
|
|
||||||
if (ForceApprov)
|
|
||||||
{
|
|
||||||
// FixMe ToDo !!!
|
|
||||||
// deve chiamare metodo x approvare, in MP-PROG, la directory dei
|
|
||||||
// documenti caricati.. x ora segnaposto con file (così se scansiona
|
|
||||||
// trova e approva)...
|
|
||||||
System.IO.File.WriteAllText(reqAppFile, authKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (IOException ex)
|
|
||||||
{
|
|
||||||
Log.Error($"{ZipFile.FileName} error on upload (Err: 3): {ex.Message}");
|
|
||||||
uploadResult.ErrorCode = 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
uploadResults.Add(uploadResult);
|
|
||||||
Log.Info($"ZipUpload backup completed | CodInst: {CodInst} | CodApp: {CodApp} | {uploadResults.Count} files");
|
|
||||||
|
|
||||||
return new CreatedResult(resourcePath, uploadResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dataservice x accesso DB
|
|
||||||
/// </summary>
|
|
||||||
protected ApiDataService dataService { get; set; }
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Restituisce size calcolata
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="origSize"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected string CalcSize(long origSize)
|
|
||||||
{
|
|
||||||
return MeasureUtils.SizeSuffix(origSize, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Calcolo correetto mimetype da nome file
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="fileName"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected string GetMimeType(string fileName)
|
|
||||||
{
|
|
||||||
var provider = new FileExtensionContentTypeProvider();
|
|
||||||
string contentType;
|
|
||||||
if (!provider.TryGetContentType(fileName, out contentType))
|
|
||||||
{
|
|
||||||
contentType = "application/octet-stream";
|
|
||||||
}
|
|
||||||
return contentType;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private static IConfiguration _configuration;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Classe per logging
|
|
||||||
/// </summary>
|
|
||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
private readonly IWebHostEnvironment env;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,8 +56,9 @@ namespace LiMan.APi.Controllers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public ActionResult<string> Get()
|
public async Task<string> Get()
|
||||||
{
|
{
|
||||||
|
await Task.Delay(1);
|
||||||
return "OK";
|
return "OK";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ namespace LiMan.APi.Controllers
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupera dati Licenza Applicativa (id licenza + num utenze) dati cliente + programma + licenza ATTUALE
|
/// Recupera dati Licenza Applicativa (id licenza + num utenze) dati cliente + programma + licenza ATTUALE
|
||||||
///
|
///
|
||||||
/// GET api/licenza/id?CodApp=xxx&Chiave=yyyy
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">Codice cliente/Installazione</param>
|
/// <param name="id">Codice cliente/Installazione</param>
|
||||||
/// <param name="CodApp">Codice Applicazione</param>
|
/// <param name="CodApp">Codice Applicazione</param>
|
||||||
/// <param name="Chiave">Chiave licenza da validare</param>
|
/// <param name="Chiave">Chiave licenza da validare</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
// GET api/licenza/id?CodApp=xxx&Chiave=yyyy
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<List<DB.DTO.ApplicativoDTO>> Get(string id, string CodApp, string Chiave)
|
public async Task<List<DB.DTO.ApplicativoDTO>> Get(string id, string CodApp, string Chiave)
|
||||||
{
|
{
|
||||||
@@ -99,36 +99,13 @@ namespace LiMan.APi.Controllers
|
|||||||
string msgTopic = "LiMan: verifica Licenze in scadenza";
|
string msgTopic = "LiMan: verifica Licenze in scadenza";
|
||||||
|
|
||||||
// invio email
|
// invio email
|
||||||
string destList = _configuration["MailDest:ExpiryNotify"];
|
await sendEmail(msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
||||||
await sendEmailExpiry(destList, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
|
||||||
|
|
||||||
// ritorno solo LOG azioni
|
// ritorno solo LOG azioni
|
||||||
answ = $"Scadute {numScadute} | Settimana: {numWeek} | Mese: {numMonth} | Trimestre: {numTrim}";
|
answ = $"Scadute {numScadute} | Settimana: {numWeek} | Mese: {numMonth} | Trimestre: {numTrim}";
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Effettua test invio email
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
[HttpGet("test-email")]
|
|
||||||
public async Task<string> TestEmail()
|
|
||||||
{
|
|
||||||
// oggetti base
|
|
||||||
string answ = "ND";
|
|
||||||
string msgBody = "Prova invio email a destinatari <b>MailDest:ExpiryNotify</b>";
|
|
||||||
// predispongo email
|
|
||||||
string msgTopic = "LiMan: Test invio email!";
|
|
||||||
|
|
||||||
// invio email
|
|
||||||
string destList = _configuration["MailDest:ExpiryNotify"];
|
|
||||||
await sendEmailExpiry(destList, msgTopic, msgBody.Replace($"{Environment.NewLine}", "<br/>"));
|
|
||||||
|
|
||||||
// ritorno solo LOG azioni
|
|
||||||
answ = $"Test effettuato!";
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// POST api/licenza
|
/// POST api/licenza
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupera dati Licenza Applicativa (id licenza + num utenze) dati cliente + programma +
|
/// Recupera dati Licenza Applicativa (id licenza + num utenze) dati cliente + programma +
|
||||||
@@ -234,36 +211,30 @@ namespace LiMan.APi.Controllers
|
|||||||
if (elencoLicenze.Count == 0)
|
if (elencoLicenze.Count == 0)
|
||||||
{
|
{
|
||||||
doLog($" - nessuna", logType.info, ref sbMain);
|
doLog($" - nessuna", logType.info, ref sbMain);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
foreach (var item in elencoLicenze)
|
||||||
{
|
{
|
||||||
foreach (var item in elencoLicenze)
|
doLog($" - {item.Scadenza:yyyy.MM.dd} | <b>{item.CodInst}</b> | {item.Descrizione}", logType.info, ref sbMain);
|
||||||
{
|
}
|
||||||
doLog($" - {item.Scadenza:yyyy.MM.dd} | <b>{item.CodInst}</b> | {item.Descrizione}", logType.info, ref sbMain);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
doLog("</div>", logType.none, ref sbMain);
|
doLog("</div>", logType.none, ref sbMain);
|
||||||
doLog("</div>", logType.none, ref sbMain);
|
doLog("</div>", logType.none, ref sbMain);
|
||||||
return sbMain.ToString();
|
return sbMain.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
protected async Task sendEmail(string subject, string message)
|
||||||
/// Invio email a lista ExpiryNotify
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="destList">Elenco destinatari comma separated</param>
|
|
||||||
/// <param name="subject">Oggetto Email</param>
|
|
||||||
/// <param name="message">MEssaggio</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected async Task sendEmailExpiry(string destList, string subject, string message)
|
|
||||||
{
|
{
|
||||||
List<string> emailDestList = destList.Split(",").ToList();
|
string emailRaw = _configuration["MailDest:ExpiryNotify"];
|
||||||
|
List<string> emailDestList = emailRaw.Split(",").ToList();
|
||||||
foreach (var dest in emailDestList)
|
foreach (var dest in emailDestList)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _emailSender.SendEmailAsync(dest, subject, message);
|
await _emailSender.SendEmailAsync(dest, subject, message);
|
||||||
}
|
}
|
||||||
catch (Exception exc)
|
catch(Exception exc)
|
||||||
{
|
{
|
||||||
Log.Error($"Eccezione durante invio email:{Environment.NewLine}dest: {dest} | subject {subject}{Environment.NewLine}{exc}");
|
Log.Error($"Eccezione durante invio email:{Environment.NewLine}dest: {dest} | subject {subject}{Environment.NewLine}{exc}");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,10 @@
|
|||||||
using Core.DTO;
|
using LiMan.APi.Data;
|
||||||
using Core;
|
|
||||||
using LiMan.APi.Data;
|
|
||||||
using LiMan.DB.DTO;
|
using LiMan.DB.DTO;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using NLog;
|
using NLog;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Linq;
|
|
||||||
using LiMan.DB.DBModels;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Org.BouncyCastle.Asn1.Crmf;
|
|
||||||
using System;
|
|
||||||
|
|
||||||
namespace LiMan.APi.Controllers
|
namespace LiMan.APi.Controllers
|
||||||
{
|
{
|
||||||
@@ -39,293 +32,47 @@ namespace LiMan.APi.Controllers
|
|||||||
#region Public Methods
|
#region Public Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupera elenco dati Release (rilasciate) GET api/release/EgtBW
|
/// Recupera elenco dati licenza Applicativi (completo)
|
||||||
|
/// GET api/Release/EgtBW
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">Codice Applicazione</param>
|
/// <param name="id">Codice Applicazione</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
[Obsolete("Please use POST with api/release/getall instead.", false)]
|
|
||||||
public async Task<List<ReleaseDTO>> Get(string id)
|
public async Task<List<ReleaseDTO>> Get(string id)
|
||||||
{
|
{
|
||||||
var result = await dataService.ReleaseDtoGetByApp(id);
|
var result = await dataService.ReleaseGetByApp(id);
|
||||||
await dataService.recordCall(id, id, $"GET:api/release/{id}");
|
await dataService.recordCall(id, id, $"GET:api/Release/{id}");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupera elenco dati Release (rilasciate) data versione minima GET api/release/filt/EgtBW
|
/// Recupera elenco dati licenza Applicativi data versione minima
|
||||||
|
/// GET api/Release/EgtBW
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">Codice Applicazione</param>
|
/// <param name="id">Codice Applicazione</param>
|
||||||
/// <param name="VersMin">Versione minima richiesta (attuale)</param>
|
/// <param name="VersMin">Versione minima richiesta (attuale)</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("filt/{id}")]
|
[HttpGet("filt/{id}")]
|
||||||
[Obsolete("Please use POST with api/release/getfilt instead.", false)]
|
|
||||||
public async Task<List<ReleaseDTO>> GetFilt(string id, string VersMin)
|
public async Task<List<ReleaseDTO>> GetFilt(string id, string VersMin)
|
||||||
{
|
{
|
||||||
var result = await dataService.ReleaseDtoGetByAppVers(id, VersMin);
|
var result = await dataService.ReleaseGetByAppVers(id, VersMin);
|
||||||
Log.Warn($"Chiamato metodo legacy api/release/filt | id: {id} | vers: {VersMin}");
|
await dataService.recordCall(id, id, $"GET:api/Release/filt/{id}");
|
||||||
await dataService.recordCall(id, id, $"GET:api/release/filt/{id}");
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Recupera elenco dati Release (rilasciate) data versione minima e massima GET api/release/filtLimit/EgtBW
|
/// Recupera elenco dati licenza Applicativi data versione minima + vers limite
|
||||||
|
/// GET api/Release/EgtBW
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">Codice Applicazione</param>
|
/// <param name="id">Codice Applicazione</param>
|
||||||
/// <param name="VersMin">Versione minima richiesta (attuale)</param>
|
/// <param name="VersMin">Versione minima richiesta (attuale)</param>
|
||||||
/// <param name="VersMax">Versione massima consentita</param>
|
/// <param name="VersMax">Versione massima consentita</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("filtLimit/{id}")]
|
[HttpGet("filtLimit/{id}")]
|
||||||
[Obsolete("Please use POST with api/release/getlimit instead.", false)]
|
|
||||||
public async Task<List<ReleaseDTO>> GetFiltLimit(string id, string VersMin, string VersMax)
|
public async Task<List<ReleaseDTO>> GetFiltLimit(string id, string VersMin, string VersMax)
|
||||||
{
|
{
|
||||||
var result = await dataService.ReleaseGetByAppVersLimit(id, VersMin, VersMax);
|
var result = await dataService.ReleaseGetByAppVersLimit(id, VersMin, VersMax);
|
||||||
await dataService.recordCall(id, id, $"GET:api/release/filtLimit/{id}");
|
await dataService.recordCall(id, id, $"GET:api/Release/filt/{id}");
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera elenco dati Release (rilasciate) POST api/release/getall
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ReleaseReqDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("getall")]
|
|
||||||
public async Task<List<ReleaseDTO>> GetReleases([FromBody] ReleaseReqDTO CurrReq)
|
|
||||||
{
|
|
||||||
List<ReleaseDTO> result = new List<ReleaseDTO>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
result = await dataService.ReleaseDtoGetByApp(CurrReq.CodApp);
|
|
||||||
// non necessario notificare UI...
|
|
||||||
#if false
|
|
||||||
// invio notifica x app...
|
|
||||||
dataService.UpdActMessPipe.sendMessage(CurrReq.CodImp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "GetReleases");
|
|
||||||
|
|
||||||
await dataService.recordCall(CurrReq.CodApp, CurrReq.CodApp, $"POST:api/release/getall/ | {CurrReq.MastKey} | {CurrReq.CodImp} | {CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera elenco dati Release CRITICHE rilasciate (se sono ultima per singola CodApp)
|
|
||||||
/// POST api/release/get-critical
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ReleaseReqDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("getcritical")]
|
|
||||||
public async Task<Dictionary<string, ReleaseDTO>> GetReleasesCritical([FromBody] ReleaseReqDTO CurrReq)
|
|
||||||
{
|
|
||||||
Dictionary<string, ReleaseDTO> result = new Dictionary<string, ReleaseDTO>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
result = await dataService.ReleaseGetCritical();
|
|
||||||
// non necessario notificare UI...
|
|
||||||
#if false
|
|
||||||
// invio notifica x app...
|
|
||||||
dataService.UpdActMessPipe.sendMessage(CurrReq.CodImp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "GetReleasesCritical");
|
|
||||||
|
|
||||||
await dataService.recordCall(CurrReq.CodApp, CurrReq.CodApp, $"POST:api/release/getcritical/ | {CurrReq.MastKey} | {CurrReq.CodImp} | {CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera elenco dati Release (rilasciate) data versione minima POST api/release/getfilt
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ReleaseReqDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("getfilt")]
|
|
||||||
public async Task<List<ReleaseDTO>> GetReleasesFilt([FromBody] ReleaseReqDTO CurrReq)
|
|
||||||
{
|
|
||||||
List<ReleaseDTO> result = new List<ReleaseDTO>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
result = await dataService.ReleaseDtoGetByAppVers(CurrReq.CodApp, CurrReq.VersMin);
|
|
||||||
// registro stato applicativi (da richiesta...)
|
|
||||||
InstalledReleasesModel checkRec = new InstalledReleasesModel()
|
|
||||||
{
|
|
||||||
AppKey = CurrReq.AppKey,
|
|
||||||
CodApp = CurrReq.CodApp,
|
|
||||||
CodImp = CurrReq.CodImp,
|
|
||||||
DtCheck = DateTime.Now,
|
|
||||||
MastKey = CurrReq.MastKey,
|
|
||||||
NumImp = CurrReq.NumImp,
|
|
||||||
VersNum = CurrReq.VersMin
|
|
||||||
};
|
|
||||||
bool changed = dataService.InstallRelUpsert(checkRec);
|
|
||||||
// chiamata x effettuare eventuale snapshot sulle installazioni attive SE variato
|
|
||||||
await dataService.InstallRelHistSnapshot(changed);
|
|
||||||
if (changed)
|
|
||||||
{
|
|
||||||
// invio notifica x app...
|
|
||||||
dataService.UpdActMessPipe.sendMessage(CurrReq.CodImp);
|
|
||||||
}
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "GetReleasesFilt");
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(CurrReq.CodApp, CurrReq.CodApp, $"POST:api/release/getfilt/ | {CurrReq.MastKey} | {CurrReq.CodImp} | {CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera elenco dati Release (rilasciate) data versione minima e massima POST api/release/getlimit
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ReleaseReqDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("getlimit")]
|
|
||||||
public async Task<List<ReleaseDTO>> GetReleasesLimit([FromBody] ReleaseReqDTO CurrReq)
|
|
||||||
{
|
|
||||||
List<ReleaseDTO> result = new List<ReleaseDTO>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
result = await dataService.ReleaseGetByAppVersLimit(CurrReq.CodApp, CurrReq.VersMin, CurrReq.VersMax);
|
|
||||||
#if false
|
|
||||||
// invio notifica x app...
|
|
||||||
dataService.UpdActMessPipe.sendMessage(CurrReq.CodImp);
|
|
||||||
#endif
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "GetReleasesLimit");
|
|
||||||
|
|
||||||
await dataService.recordCall(CurrReq.CodApp, CurrReq.CodApp, $"POST:api/release/getlimit/ | {CurrReq.MastKey} | {CurrReq.CodImp} | {CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Salva una nuova release dell'applicativo (eventualmente sovrascrivendo) POST api/release/save
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj Richiesta</param>
|
|
||||||
[HttpPost("save")]
|
|
||||||
public async Task<ReleaseDTO> SaveRelease([FromBody] AppRelVersion CurrReq)
|
|
||||||
{
|
|
||||||
ReleaseDTO result = new ReleaseDTO()
|
|
||||||
{
|
|
||||||
CodApp = CurrReq.CodApp,
|
|
||||||
ReleaseDate = CurrReq.ReleaseDate,
|
|
||||||
VersNum = CurrReq.VersNum,
|
|
||||||
VersText = CurrReq.VersText,
|
|
||||||
RelTags = CurrReq.RelTags.ToUpper()
|
|
||||||
};
|
|
||||||
// controllo valori
|
|
||||||
if (CurrReq.IsValid)
|
|
||||||
{
|
|
||||||
// verifica preliminare licenza x upload
|
|
||||||
var licUploader = await dataService.LicenzeSearch(CurrReq.CodInst, CurrReq.UplAppID, CurrReq.MasterKey, false);
|
|
||||||
if (licUploader != null && licUploader.Count > 0)
|
|
||||||
{
|
|
||||||
// in primis cerco app...
|
|
||||||
var appList = await dataService.ApplicNextGetAll(true);
|
|
||||||
ApplicativoModel recApp = new ApplicativoModel();
|
|
||||||
if (appList != null)
|
|
||||||
{
|
|
||||||
recApp = appList.FirstOrDefault(x => x.CodApp == CurrReq.CodApp);
|
|
||||||
}
|
|
||||||
// nel caso mancasse la aggiungo
|
|
||||||
if (recApp == null || string.IsNullOrEmpty(recApp.CodApp) || recApp.CodApp != CurrReq.CodApp)
|
|
||||||
{
|
|
||||||
recApp = new ApplicativoModel()
|
|
||||||
{
|
|
||||||
CodApp = CurrReq.CodApp,
|
|
||||||
Descrizione = "Nuova APP da POST api/release/save",
|
|
||||||
TplConnString = "",
|
|
||||||
Tipo = CurrReq.Tipo
|
|
||||||
};
|
|
||||||
await dataService.ApplicNextUpdate(recApp);
|
|
||||||
}
|
|
||||||
//converto in una release...
|
|
||||||
ReleaseModel newRec = new ReleaseModel()
|
|
||||||
{
|
|
||||||
CodApp = CurrReq.CodApp,
|
|
||||||
ReleaseDate = CurrReq.ReleaseDate,
|
|
||||||
RelTags = CurrReq.RelTags.ToUpper(),
|
|
||||||
VersNum = CurrReq.VersNum,
|
|
||||||
VersText = CurrReq.VersText
|
|
||||||
};
|
|
||||||
// registro versione eventualmente gestendo nuovo applicativo
|
|
||||||
var insRes = await dataService.ReleaseUpsert(newRec);
|
|
||||||
if (insRes)
|
|
||||||
{
|
|
||||||
Log.Info($"Release recorded | {CurrReq.CodApp} | {CurrReq.VersNum} | {CurrReq.VersText} | {CurrReq.ReleaseDate} | {CurrReq.RelTags}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Error($"Errore: licenza UpdateManager non TROVATA | {CurrReq.MasterKey}");
|
|
||||||
await dataService.recordCall(CurrReq.CodInst, CurrReq.CodApp, $"ERROR POST:api/release/save:{CurrReq.CodApp} | {CurrReq.MasterKey}");
|
|
||||||
}
|
|
||||||
// recupero vers applicativo...
|
|
||||||
var rawResult = await dataService.ReleaseDtoGetByApp(CurrReq.CodApp);
|
|
||||||
if (rawResult != null && rawResult.Count > 0)
|
|
||||||
{
|
|
||||||
result = rawResult.Where(x => x.VersText == CurrReq.VersText).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
// fisso nostra install
|
|
||||||
await dataService.recordCall(CurrReq.CodInst, CurrReq.CodApp, $"POST:api/release/save:{CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Log.Error($"Errore: licenza UpdateManager non VALIDA | {CurrReq.MasterKey}");
|
|
||||||
await dataService.recordCall(CurrReq.CodInst, CurrReq.CodApp, $"ERROR POST:api/release/save:{CurrReq.CodApp} | {CurrReq.MasterKey}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Esegue tentativo salvataggio rel history
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ReleaseReqDTO con chiavi (master o app)</param>
|
|
||||||
[HttpPost("save-history")]
|
|
||||||
public async Task<List<ReleaseDTO>> SaveRelHistory([FromBody] ReleaseReqDTO CurrReq)
|
|
||||||
{
|
|
||||||
List<ReleaseDTO> result = new List<ReleaseDTO>();
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
// chiamata x effettuare eventuale snapshot sulle installazioni attive
|
|
||||||
await dataService.InstallRelHistSnapshot(true);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "SaveRelHistory");
|
|
||||||
|
|
||||||
// registro infine chiamata
|
|
||||||
await dataService.recordCall(CurrReq.CodApp, CurrReq.CodApp, $"POST:api/release/save-history/ | {CurrReq.MastKey} | {CurrReq.CodImp} | {CurrReq.CodApp}");
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Conferma quale sia l'elenco delle app gestite POST api/release/setmanaged
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="CurrReq">Obj ManDeclareDTO con chiavi + elenco app gestite (x eliminare altre)</param>
|
|
||||||
/// <returns>Numero di record eliminati</returns>
|
|
||||||
[HttpPost("setmanaged")]
|
|
||||||
public async Task<int> SetManaged([FromBody] ManDeclareDTO CurrReq)
|
|
||||||
{
|
|
||||||
int result = 0;
|
|
||||||
// verifica validità richiesta...
|
|
||||||
if (CheckReqKeys(CurrReq))
|
|
||||||
{
|
|
||||||
result = dataService.InstallRelClean(CurrReq.CodImp, CurrReq.AppKey, CurrReq.ListCodApp);
|
|
||||||
|
|
||||||
// registro updater...
|
|
||||||
dataService.UpdaterRecordAction(CurrReq.CodImp, "SetManaged");
|
|
||||||
|
|
||||||
// invio notifica x app...
|
|
||||||
dataService.UpdActMessPipe.sendMessage(CurrReq.CodImp);
|
|
||||||
}
|
|
||||||
await Task.Delay(1);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,79 +95,5 @@ namespace LiMan.APi.Controllers
|
|||||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||||
|
|
||||||
#endregion Private Fields
|
#endregion Private Fields
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica validità richiesta
|
|
||||||
/// - dati presenti in chiamata
|
|
||||||
/// - combinazioni CodApp + chiavi valide/attive
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currReq"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private bool CheckReqKeys(ReleaseReqDTO currReq)
|
|
||||||
{
|
|
||||||
bool answ = currReq.IsValid;
|
|
||||||
if (answ)
|
|
||||||
{
|
|
||||||
// verifica validità chiavi... TBD!!!
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica validità richiesta
|
|
||||||
/// - dati presenti in chiamata
|
|
||||||
/// - combinazioni CodApp + chiavi valide/attive
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currReq"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private bool CheckReqKeys(AuthDataDTO currReq)
|
|
||||||
{
|
|
||||||
bool answ = currReq.IsValid;
|
|
||||||
if (answ)
|
|
||||||
{
|
|
||||||
// verifica validità chiavi... TBD!!!
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica validità richiesta
|
|
||||||
/// - dati presenti in chiamata
|
|
||||||
/// - combinazioni CodApp + chiavi valide/attive
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currReq"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private bool CheckReqKeys(ManDeclareDTO currReq)
|
|
||||||
{
|
|
||||||
bool answ = currReq.IsValid;
|
|
||||||
if (answ)
|
|
||||||
{
|
|
||||||
// verifica validità chiavi... TBD!!!
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
|
|
||||||
#if false
|
|
||||||
/// <summary>
|
|
||||||
/// Verifica validità richiesta
|
|
||||||
/// - dati presenti in chiamata
|
|
||||||
/// - combinazioni CodApp + chiavi valide/attive
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currReq"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private bool CheckReqKeys(TaskResultDTO currReq)
|
|
||||||
{
|
|
||||||
bool answ = currReq.IsValid;
|
|
||||||
if (answ)
|
|
||||||
{
|
|
||||||
// verifica validità chiavi... TBD!!!
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+658
-339
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
@@ -22,24 +22,21 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Properties\PublishProfiles\IIS01.pubxml.user" />
|
<None Include="Properties\PublishProfiles\IIS01.pubxml.user" />
|
||||||
<None Include="Properties\PublishProfiles\IIS02.pubxml.user" />
|
<None Include="Properties\PublishProfiles\IIS02.pubxml.user" />
|
||||||
<None Include="Properties\PublishProfiles\IIS03.pubxml.user" />
|
|
||||||
<None Include="Properties\PublishProfiles\IIS04.pubxml.user" />
|
<None Include="Properties\PublishProfiles\IIS04.pubxml.user" />
|
||||||
|
<None Include="Properties\PublishProfiles\IIS03.pubxml.user" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.3" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.11" />
|
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.11" />
|
||||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
<PackageReference Include="StackExchange.Redis" Version="2.2.88" />
|
||||||
<PackageReference Include="StackExchange.Redis" Version="2.10.1" />
|
|
||||||
<PackageReference Include="StackExchange.Redis.Extensions.AspNetCore" Version="7.1.1" />
|
<PackageReference Include="StackExchange.Redis.Extensions.AspNetCore" Version="7.1.1" />
|
||||||
<PackageReference Include="StackExchange.Redis.Extensions.Newtonsoft" Version="7.1.1" />
|
<PackageReference Include="StackExchange.Redis.Extensions.Newtonsoft" Version="7.1.1" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.6.2" />
|
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.6.2" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.36.0" />
|
|
||||||
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.0" />
|
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
@@ -57,7 +54,4 @@
|
|||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
</Project>
|
||||||
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
|
|
||||||
</Target>
|
|
||||||
</Project>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<body>
|
|
||||||
<i>License Manager</i>
|
|
||||||
<h4>Versione: {{CURRENT-REL}}</h4>
|
|
||||||
<br /> Note di rilascio:
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<b>Ultime modifiche:</b>
|
|
||||||
<ul>{{LAST-CHANGES}}</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<b>v.1.* →</b>
|
|
||||||
<ul>
|
|
||||||
<li>Nuova release dotnet6</li>
|
|
||||||
<li>Prima release dotnet5</li>
|
|
||||||
<li>Integrazione EFCore</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div>
|
|
||||||
<div style="float: left;">
|
|
||||||
<img src="logoSteamware.png" />
|
|
||||||
</div>
|
|
||||||
<div style="float: right;">
|
|
||||||
<a href="https://www.steamware.net/" target="_blank">© Steamware 2006-2021</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
<body>
|
|
||||||
<i>License Manager</i>
|
|
||||||
<h4>Versione: 2.1.2512.0409</h4>
|
|
||||||
<br /> Note di rilascio:
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<b>Ultime modifiche:</b>
|
|
||||||
<ul>{{LAST-CHANGES}}</ul>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<b>v.1.* →</b>
|
|
||||||
<ul>
|
|
||||||
<li>Nuova release dotnet6</li>
|
|
||||||
<li>Prima release dotnet5</li>
|
|
||||||
<li>Integrazione EFCore</li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div>
|
|
||||||
<div style="float: left;">
|
|
||||||
<img src="logoSteamware.png" />
|
|
||||||
</div>
|
|
||||||
<div style="float: right;">
|
|
||||||
<a href="https://www.steamware.net/" target="_blank">© Steamware 2006-2021</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
2.1.2512.0409
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<item>
|
|
||||||
<version>1.0.0.0</version>
|
|
||||||
<url>https://nexus.steamware.net/repository/SWS/{{DIRNAME}}/{{BRANCHNAME}}/{{PACKNAME}}.zip</url>
|
|
||||||
<changelog>https://nexus.steamware.net/repository/SWS/{{DIRNAME}}/{{BRANCHNAME}}/ChangeLog.html</changelog>
|
|
||||||
<mandatory>false</mandatory>
|
|
||||||
</item>
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<item>
|
|
||||||
<version>2.1.2512.0409</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>
|
|
||||||
</item>
|
|
||||||
+12
-13
@@ -73,12 +73,6 @@ namespace LiMan.Serv
|
|||||||
EnableDirectoryBrowsing = true
|
EnableDirectoryBrowsing = true
|
||||||
//EnableDirectoryBrowsing = false
|
//EnableDirectoryBrowsing = false
|
||||||
});
|
});
|
||||||
app.UseFileServer(new FileServerOptions
|
|
||||||
{
|
|
||||||
FileProvider = new PhysicalFileProvider(@"\\stor01\TEAM DRIVES\40_FileUpload\AppBackup"),
|
|
||||||
RequestPath = new PathString("/app_backup"),
|
|
||||||
EnableDirectoryBrowsing = false
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -89,12 +83,6 @@ namespace LiMan.Serv
|
|||||||
EnableDirectoryBrowsing = true
|
EnableDirectoryBrowsing = true
|
||||||
//EnableDirectoryBrowsing = false
|
//EnableDirectoryBrowsing = false
|
||||||
});
|
});
|
||||||
app.UseFileServer(new FileServerOptions
|
|
||||||
{
|
|
||||||
FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "app_backup")),
|
|
||||||
RequestPath = new PathString("/app_backup"),
|
|
||||||
EnableDirectoryBrowsing = false
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
app.UseEndpoints(endpoints =>
|
app.UseEndpoints(endpoints =>
|
||||||
@@ -117,17 +105,28 @@ namespace LiMan.Serv
|
|||||||
|
|
||||||
// abilitazione x email management con MailKit
|
// abilitazione x email management con MailKit
|
||||||
services.AddTransient<IEmailSender, MailKitEmailSender>();
|
services.AddTransient<IEmailSender, MailKitEmailSender>();
|
||||||
|
// recupero email reversed
|
||||||
|
string revPwd = Configuration["ExternalProviders:MailKit:SMTP:Password"] ?? "";
|
||||||
|
string pwd = "";
|
||||||
|
foreach (char c in revPwd)
|
||||||
|
{
|
||||||
|
pwd = c + pwd;
|
||||||
|
}
|
||||||
services.Configure<MailKitEmailSenderOptions>(options =>
|
services.Configure<MailKitEmailSenderOptions>(options =>
|
||||||
{
|
{
|
||||||
options.Host_Address = Configuration["ExternalProviders:MailKit:SMTP:Address"];
|
options.Host_Address = Configuration["ExternalProviders:MailKit:SMTP:Address"];
|
||||||
options.Host_Port = Convert.ToInt32(Configuration["ExternalProviders:MailKit:SMTP:Port"]);
|
options.Host_Port = Convert.ToInt32(Configuration["ExternalProviders:MailKit:SMTP:Port"]);
|
||||||
options.Host_Username = Configuration["ExternalProviders:MailKit:SMTP:Account"];
|
options.Host_Username = Configuration["ExternalProviders:MailKit:SMTP:Account"];
|
||||||
options.Host_Password = Configuration["ExternalProviders:MailKit:SMTP:Password"] ?? "";
|
options.Host_Password = pwd;
|
||||||
options.Sender_EMail = Configuration["ExternalProviders:MailKit:SMTP:SenderEmail"];
|
options.Sender_EMail = Configuration["ExternalProviders:MailKit:SMTP:SenderEmail"];
|
||||||
options.Sender_Name = Configuration["ExternalProviders:MailKit:SMTP:SenderName"];
|
options.Sender_Name = Configuration["ExternalProviders:MailKit:SMTP:SenderName"];
|
||||||
options.Host_SecureSocketOptions = MailKit.Security.SecureSocketOptions.Auto;
|
options.Host_SecureSocketOptions = MailKit.Security.SecureSocketOptions.Auto;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//services.AddStackExchangeRedisCache(options =>
|
||||||
|
//{
|
||||||
|
// options.Configuration = Configuration.GetConnectionString("Redis");
|
||||||
|
//});
|
||||||
|
|
||||||
services.AddControllers()
|
services.AddControllers()
|
||||||
.AddJsonOptions(c => c.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);
|
.AddJsonOptions(c => c.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);
|
||||||
|
|||||||
@@ -10,16 +10,16 @@
|
|||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"LiMan.GLS": "Server=W2019-SQL-STEAM;Database=SteamWare_Auth;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=LiMan.API;",
|
"LiMan.GLS": "Server=W2019-SQL-STEAM;Database=SteamWare_Auth;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=LiMan.API;",
|
||||||
"LiMan.DB": "Server=W2019-SQL-STEAM;Database=LiMan.DB;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=LiMan.API;",
|
"LiMan.DB": "Server=W2019-SQL-STEAM;Database=LiMan.DB;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=LiMan.API;",
|
||||||
"Redis": "redis.ufficio:26379, serviceName=prod, DefaultDatabase=13, connectTimeout=5000, syncTimeout=5000, asyncTimeout=5000, abortConnect=false, ssl=false, password=BtN9Py1wtLfLRvmzWnOPJ7RytDM+CLiVsJ/16zduNTlV8IOPGNrtzJSXPUnImA5PqmUMhKaUqo9NdHIG"
|
"Redis": "localhost:6379,DefaultDatabase=13"
|
||||||
},
|
},
|
||||||
"ExternalProviders": {
|
"ExternalProviders": {
|
||||||
"MailKit": {
|
"MailKit": {
|
||||||
"SMTP": {
|
"SMTP": {
|
||||||
"Address": "smtp.gmail.com",
|
"Address": "smtp-mail.outlook.com",
|
||||||
"Port": "587",
|
"Port": "587",
|
||||||
"Account": "services@steamware.net",
|
"Account": "steamwarebot@outlook.it",
|
||||||
"Password": "ruejpcwgycvbmmsr",
|
"Password": "!39elanoizaNaiVnIomais",
|
||||||
"SenderEmail": "services@steamware.net",
|
"SenderEmail": "steamwarebot@outlook.it",
|
||||||
"SenderName": "Steamware Email BOT"
|
"SenderName": "Steamware Email BOT"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,10 +43,7 @@
|
|||||||
],
|
],
|
||||||
"Database": 14
|
"Database": 14
|
||||||
},
|
},
|
||||||
"ServerConf": {
|
"FileShare": "\\\\stor01\\TEAM DRIVES\\40_FileUpload\\unsafe_uploads",
|
||||||
"FileShareAppBackup": "\\\\stor01\\AppBackup",
|
|
||||||
"FileShareTickets": "\\\\stor01\\TEAM DRIVES\\40_FileUpload\\unsafe_uploads"
|
|
||||||
},
|
|
||||||
"ApiUrl": "https://liman.egalware.com/",
|
"ApiUrl": "https://liman.egalware.com/",
|
||||||
"HostOs": "Win"
|
"HostOs": "Win"
|
||||||
}
|
}
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
param([string]$ProjectDir, [string]$ProjectPath);
|
|
||||||
|
|
||||||
$FileMajMin = "..\MajMin.vers"
|
|
||||||
$FileVers = "Resources\VersNum.txt"
|
|
||||||
$FileManIn = "Resources\manifest-original.xml"
|
|
||||||
$FileManOut = "Resources\manifest.xml"
|
|
||||||
$FileCLogIn = "Resources\ChangeLog-original.html"
|
|
||||||
$FileCLogOut = "Resources\ChangeLog.html"
|
|
||||||
$MajMin = Get-Content $FileMajMin # "6.14."
|
|
||||||
$currentDate = get-date -format yyMM;
|
|
||||||
$currentTime = get-date -format ddHH;
|
|
||||||
$find = "<Version>(.|\n)*?</Version>";
|
|
||||||
$currRelNum = $MajMin + $currentDate +"." + $currentTime
|
|
||||||
$replace = "<Version>" + $MajMin + $currentDate +"." + $currentTime + "</Version>";
|
|
||||||
$csproj = Get-Content $ProjectPath
|
|
||||||
$csprojUpdated = $csproj -replace $find, $replace
|
|
||||||
|
|
||||||
Set-Content -Path $ProjectPath -Value $csprojUpdated
|
|
||||||
Set-Content -Path $FileVers -Value $currRelNum
|
|
||||||
|
|
||||||
# replace x manifest
|
|
||||||
$manData = Get-Content $FileManIn
|
|
||||||
$manData = $manData -replace "1.0.0.0", $currRelNum
|
|
||||||
$manData = $manData -replace "{{DIRNAME}}", "LiMan"
|
|
||||||
$manData = $manData -replace "{{BRANCHNAME}}", "stable/LAST"
|
|
||||||
$manData = $manData -replace "{{PACKNAME}}", "LiMan.UI"
|
|
||||||
Set-Content -Path $FileManOut -Value $manData
|
|
||||||
|
|
||||||
# replace x ChangeLog
|
|
||||||
$clogData = Get-Content $FileCLogIn
|
|
||||||
$clogData = $clogData -replace "{{CURRENT-REL}}", $currRelNum
|
|
||||||
Set-Content -Path $FileCLogOut -Value $clogData
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -23,11 +23,6 @@ namespace LiMan.DB.DBModels
|
|||||||
[MaxLength(2500)]
|
[MaxLength(2500)]
|
||||||
public string TplConnString { get; set; } = "";
|
public string TplConnString { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tipo Applicazione
|
|
||||||
/// </summary>
|
|
||||||
public string Tipo { get; set; } = "";
|
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,109 +0,0 @@
|
|||||||
using Newtonsoft.Json;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DBModels
|
|
||||||
{
|
|
||||||
[Table("EnrollRequest")]
|
|
||||||
public partial class EnrollRequestModel
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// ID univoco
|
|
||||||
/// </summary>
|
|
||||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
||||||
public int IdReq { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Passcode usato per autorizzare (un valore random NON DUPLICATO con quelli attivi al momento della richiesta)
|
|
||||||
/// </summary>
|
|
||||||
public int Passcode { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Payload richiesta, ovvero la serializzazione json di un Dict[string,string] delle info ricevute
|
|
||||||
/// </summary>
|
|
||||||
public string ReqPayload { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DataOra richiesta enroll
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtReq { get; set; } = DateTime.Now;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DataOra approvazione
|
|
||||||
/// </summary>
|
|
||||||
public DateTime? DtAppr { get; set; } = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Username approvatore
|
|
||||||
/// </summary>
|
|
||||||
public string UserAppr { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Licenza fornita in risposta alla richiesta
|
|
||||||
/// </summary>
|
|
||||||
public int IdxLic { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indica Scaduta se non approvata e richiesta da oltre 15 minuti
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public bool IsScaduta
|
|
||||||
{
|
|
||||||
get => DtAppr == null && DateTime.Now.Subtract(DtReq).TotalMinutes > minScad;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DataOra Scadenza richiesta (periodo indicato - 10 sec)
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public DateTime DtScadenza
|
|
||||||
{
|
|
||||||
get => DtReq.AddSeconds(minScad * 60 - 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public Dictionary<string, string> DictAttrib
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Dictionary<string, string> answ = new Dictionary<string, string>();
|
|
||||||
if (!string.IsNullOrEmpty(ReqPayload))
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(ReqPayload);
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public int DictNumKVP()
|
|
||||||
{
|
|
||||||
return DictAttrib.Count;
|
|
||||||
}
|
|
||||||
public Dictionary<string, string> DictAttribShort(int numMax)
|
|
||||||
{
|
|
||||||
Dictionary<string, string> answ = DictAttrib;
|
|
||||||
if (answ.Count > numMax)
|
|
||||||
{
|
|
||||||
answ = answ.Take(numMax).ToDictionary(x => x.Key, x => x.Value);
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Scadenza massima (in minuti) per la richiesta
|
|
||||||
/// </summary>
|
|
||||||
private const int minScad = 15;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.DB.DBModels
|
|
||||||
{
|
|
||||||
[Table("InstalledReleasesHistory")]
|
|
||||||
public partial class InstalledReleasesHistoryModel
|
|
||||||
{
|
|
||||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
||||||
public int IdxInstRelHist { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data di riferimento campionamento
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtRif { get; set; } = DateTime.Today;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodApp Richiesta
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(50)]
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione applicativo formato semver numerico 4 blocchi
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(50)]
|
|
||||||
public string VersNum { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Copie Installate dell'applicativo
|
|
||||||
/// </summary>
|
|
||||||
public int NumInst { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Impieghi dell'applicativo (es per MAPO IOB-WIN il num di iOB usati con uno specifico SW)
|
|
||||||
/// </summary>
|
|
||||||
public int NumImp { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Installazioni con score 4 (tutti valori rel correnti M.m.r.b)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIS4 { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Installazioni con score 3 (3 valori rel correnti M.m.r.x)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIS3 { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Installazioni con score 2 (2 valori rel correnti M.m.x.x)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIS2 { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Installazioni con score 1 (3 valori rel correnti M.x.x.x)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIS1 { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Installazioni con score 0 (0 valori rel correnti x.x.x.x)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIS0 { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione (calcolata) a partire dal valore Num
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public Version VersVal
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Version answ = new Version();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// solo se è una versione valida: SemVer = 2/3 punti
|
|
||||||
int numPunti = VersNum.Length - VersNum.Replace(".", "").Length;
|
|
||||||
if (numPunti >= 2 && numPunti <= 3)
|
|
||||||
{
|
|
||||||
answ = !string.IsNullOrEmpty(VersNum) ? new Version(VersNum) : new Version();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[ForeignKey("CodApp")]
|
|
||||||
public virtual ApplicativoModel ApplicativoNav { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.DB.DBModels
|
|
||||||
{
|
|
||||||
[Table("InstalledReleases")]
|
|
||||||
public partial class InstalledReleasesModel
|
|
||||||
{
|
|
||||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
||||||
public int IdxInstall { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodApp Richiesta
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(50)]
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Master Key
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(500)]
|
|
||||||
public string MastKey { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Codice Impiego Istanza (SubLic)
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(500)]
|
|
||||||
public string CodImp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Chiave SubLic
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(500)]
|
|
||||||
public string AppKey { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione applicativo formato semver numerico 4 blocchi
|
|
||||||
/// </summary>
|
|
||||||
[MaxLength(50)]
|
|
||||||
public string VersNum { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero impieghi dell'applicativo (es per MAPO IOB-WIN il num di iOB usati con uno specifico SW)
|
|
||||||
/// </summary>
|
|
||||||
public int NumImp { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data di ultima verifica versione
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtCheck { get; set; } = DateTime.Today.AddYears(-1);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Licenza associata
|
|
||||||
/// </summary>
|
|
||||||
public int IdxLic { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Istanza (SubLic) associata
|
|
||||||
/// </summary>
|
|
||||||
public int IdxSubLic { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione (calcolata) a partire dal valore Num
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public Version VersVal
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
Version answ = new Version();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// solo se è una versione valida: SemVer = 2/3 punti
|
|
||||||
int numPunti = VersNum.Length - VersNum.Replace(".", "").Length;
|
|
||||||
if (numPunti >= 2 && numPunti <= 3)
|
|
||||||
{
|
|
||||||
answ = !string.IsNullOrEmpty(VersNum) ? new Version(VersNum) : new Version();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[ForeignKey("CodApp")]
|
|
||||||
public virtual ApplicativoModel ApplicativoNav { get; set; }
|
|
||||||
|
|
||||||
[ForeignKey("IdxLic")]
|
|
||||||
public virtual LicenzaModel? LicenzaNav { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
namespace LiMan.DB.DBModels
|
|
||||||
{
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
//[Index(nameof(Installazione), nameof(Active), nameof(DiskStatus))]
|
|
||||||
[Table("LogCodImp")]
|
|
||||||
public partial class LogCodImp
|
|
||||||
{
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
|
||||||
public int IdxLogCodImp { get; set; }
|
|
||||||
public int IdxLic { get; set; } = 0;
|
|
||||||
public int IdxSubLic { get; set; } = 0;
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
public string CodImpOld { get; set; } = "";
|
|
||||||
public string CodImpNew { get; set; } = "";
|
|
||||||
public DateTime DtMod { get; set; } = DateTime.Now;
|
|
||||||
|
|
||||||
|
|
||||||
[ForeignKey("IdxLic")]
|
|
||||||
public virtual LicenzaModel LicenzaNav { get; set; }
|
|
||||||
[ForeignKey("CodApp")]
|
|
||||||
public virtual ApplicativoModel ApplicativoNav { get; set; }
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -29,37 +29,13 @@ namespace LiMan.DB.DBModels
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string VersText { get; set; } = "0.1a2";
|
public string VersText { get; set; } = "0.1a2";
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tag associati a versione, comma separated
|
|
||||||
/// </summary>
|
|
||||||
public string RelTags { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Versione (calcolata) a partire dal valore Num
|
/// Versione (calcolata) a partire dal valore Num
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public Version VersVal
|
public Version VersVal
|
||||||
{
|
{
|
||||||
get
|
get =>!string.IsNullOrEmpty(VersNum) ? new Version(VersNum): new Version();
|
||||||
{
|
|
||||||
Version answ = new Version();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
// solo se è una versione valida: SemVer = 2/3 punti
|
|
||||||
int numPunti = VersNum.Length - VersNum.Replace(".", "").Length;
|
|
||||||
if (numPunti >= 2 && numPunti <= 3)
|
|
||||||
{
|
|
||||||
answ = !string.IsNullOrEmpty(VersNum) ? new Version(VersNum) : new Version();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
[NotMapped]
|
|
||||||
public bool IsReleased
|
|
||||||
{
|
|
||||||
get => ReleaseDate <= DateTime.Now;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,114 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// DTO relativo alle info di ogni singolo applicativo
|
|
||||||
/// </summary>
|
|
||||||
public class AppRelStatusDTO
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodApp Richiesta
|
|
||||||
/// </summary>
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodInstall collegato
|
|
||||||
/// </summary>
|
|
||||||
public string CodInst { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodImpiego collegato
|
|
||||||
/// </summary>
|
|
||||||
public string CodImp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Licenza Updater
|
|
||||||
/// </summary>
|
|
||||||
public int IdxLic { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Codice cliente
|
|
||||||
/// </summary>
|
|
||||||
public string Cliente { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Istanza Updater (PC)
|
|
||||||
/// </summary>
|
|
||||||
public int IdxSubLic { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// PC/Installazione specifica
|
|
||||||
/// </summary>
|
|
||||||
public string PcInst { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Conteggio del numero totale degli impieghi attivi (es conteggio IOB)
|
|
||||||
/// </summary>
|
|
||||||
|
|
||||||
public int NumImp { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione Installata
|
|
||||||
/// </summary>
|
|
||||||
public string VersNumInstall { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione Release corrente
|
|
||||||
/// </summary>
|
|
||||||
public string VersNumCurrent { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Status aggiornamento:
|
|
||||||
/// 4 = corrente, 4 blocchi uguali (0.0.0.0)
|
|
||||||
/// 3 = 3 uguali, cambia 4 blocco (0.0.0.x)
|
|
||||||
/// 2 = 2 uguali, cambia 3 blocco (0.0.x.x)
|
|
||||||
/// 1 = 1 uguali, cambia 2 blocco (0.x.x.x)
|
|
||||||
/// 0 = 0 uguali, cambia 1 blocco (x.x.x.x)
|
|
||||||
/// </summary>
|
|
||||||
public int UpToDateStatus
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
int answ = 0;
|
|
||||||
if (VersNumCurrent == VersNumInstall)
|
|
||||||
{
|
|
||||||
answ = 4;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var tokInst = VersNumInstall.Split('.');
|
|
||||||
var tokCurr = VersNumCurrent.Split('.');
|
|
||||||
int numTok = tokCurr.Count();
|
|
||||||
// parto dal + basso ad assegnare punteggio...
|
|
||||||
for (int i = 0; i < numTok; i++)
|
|
||||||
{
|
|
||||||
// se diversi esco...
|
|
||||||
if (tokInst[i] != tokCurr[i])
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
answ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data Ora ultimo controllo
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtCheck { get; set; } = DateTime.Now;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// DTO relativo alle info RAGGRUPPATE x applicativo
|
|
||||||
/// </summary>
|
|
||||||
public class AppStatusDTO
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CodApp Richiesta
|
|
||||||
/// </summary>
|
|
||||||
public string CodApp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Conteggio del numero totale installazioni
|
|
||||||
/// </summary>
|
|
||||||
|
|
||||||
public int NumInst { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Conteggio del numero totale degli impieghi attivi (es conteggio IOB)
|
|
||||||
/// </summary>
|
|
||||||
|
|
||||||
public int NumImp { get; set; } = 1;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione Release corrente
|
|
||||||
/// </summary>
|
|
||||||
public string VersNumCurrent { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dizionario Versioni Installate
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string, int> DictVersNumInst { get; set; } = new Dictionary<string, int>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dizionario Stato Update, dove la chiave è UpToDateStatus come
|
|
||||||
/// 4 = corrente, 4 blocchi uguali (0.0.0.0)
|
|
||||||
/// 3 = 3 uguali, cambia 4 blocco (0.0.0.x)
|
|
||||||
/// 2 = 2 uguali, cambia 3 blocco (0.0.x.x)
|
|
||||||
/// 1 = 1 uguali, cambia 2 blocco (0.x.x.x)
|
|
||||||
/// 0 = 0 uguali, cambia 1 blocco (x.x.x.x)
|
|
||||||
/// </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>
|
|
||||||
/// Score dello stato di aggiornamento complessivo
|
|
||||||
/// </summary>
|
|
||||||
public double UpdateScore
|
|
||||||
{
|
|
||||||
get => DictUpdate != null ? (double)(DictUpdate.Sum(x => x.Key * x.Value)) / (4 * DictUpdate.Sum(x => x.Value)) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data Ora ultimo controllo
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtCheck { get; set; } = DateTime.Now;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
using Core;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DTO
|
|
||||||
{
|
|
||||||
public class DeviceDTO
|
|
||||||
{
|
|
||||||
public string CodImp { get; set; } = "";
|
|
||||||
public string CodInst { get; set; } = "";
|
|
||||||
public string DevName { get; set; } = "";
|
|
||||||
public DateTime LastUpdate { get; set; } = DateTime.Today.AddYears(-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
using LiMan.DB.DBModels;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Resoconto informazioni per statistiche installazioni
|
|
||||||
/// </summary>
|
|
||||||
public class InstallStatusDTO
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco delle licenze degli applicativi abilitati alla gestione verifica update
|
|
||||||
/// </summary>
|
|
||||||
public List<ApplicativoDTO> UpdaterList { get; set; } = new List<ApplicativoDTO>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco chiamate con conteggio x CodApp
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string, int> ReqCountApp { get; set; } = new Dictionary<string, int>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista delle ultime richieste registrate (TargetUrl like '%release%') come conteggio orario (tipicamente 15 gg)
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<DateTime, int> ReqCountHour { get; set; } = new Dictionary<DateTime, int>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista delle ultime richieste registrate (TargetUrl like '%release%') come conteggio giornaliero (tipicamente 1 anno)
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<DateTime, int> ReqCountDay { get; set; } = new Dictionary<DateTime, int>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista delle Releases Installate x le applicazioni gestite
|
|
||||||
/// </summary>
|
|
||||||
public List<AppRelStatusDTO> InstallRelList { get; set; } = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Statistica aggregata status applicativi
|
|
||||||
/// </summary>
|
|
||||||
public List<AppStatusDTO> InstallStatus { get; set; } = new List<AppStatusDTO>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Dizionario record Impiego/dati device
|
|
||||||
/// </summary>
|
|
||||||
public Dictionary<string, DeviceDTO> InstDevices { get; set; } = new Dictionary<string, DeviceDTO>();
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public int LastCallHour
|
|
||||||
{
|
|
||||||
get => ReqCountHour != null && ReqCountHour.Count > 0 ? ReqCountHour.Last().Value : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public int LastCallDay
|
|
||||||
{
|
|
||||||
get => ReqCountDay != null && ReqCountDay.Count > 0 ? ReqCountDay.Last().Value : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public int TotalUpdaterAct
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return UpdaterList.Sum(x => x.NumLicenzeAttive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[NotMapped]
|
|
||||||
public double GlobalUpdateScore
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return InstallStatus.Sum(x => x.UpdateScore * x.NumInst) / (InstallStatus.Sum(x => x.NumInst));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/// <summary>
|
|
||||||
/// Conteggio totale di tutte le applicazioni gestite, come somma CONTEGGIO degli applicativi diversi gestiti (per cliente)
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public int TotalManagedCount
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return UpdaterList.Count + InstallRelList.Count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Conteggio totale di tutte le applicazioni gestite, come somma NumImpieghi di tutti gli applicativi + conteggio updater
|
|
||||||
/// </summary>
|
|
||||||
[NotMapped]
|
|
||||||
public int TotalManagedNum
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return UpdaterList.Sum(x => x.NumLicenzeAttive) + InstallRelList.Sum(x => x.NumImp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data Ora ultimo aggiornamento informazioni
|
|
||||||
/// </summary>
|
|
||||||
public DateTime LastUpdated { get; set; } = DateTime.Now;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -43,11 +43,6 @@ namespace LiMan.DB.DTO
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime ReleaseDate { get; set; } = DateTime.Today.AddYears(100);
|
public DateTime ReleaseDate { get; set; } = DateTime.Today.AddYears(100);
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tag associati a versione, comma separated
|
|
||||||
/// </summary>
|
|
||||||
public string RelTags { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Url pagina web di changelog (traduzione gestita sul sito target) - calcolato da CodApp + vers
|
/// Url pagina web di changelog (traduzione gestita sul sito target) - calcolato da CodApp + vers
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
using Core;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
|
||||||
// </Auto-Generated>
|
|
||||||
namespace LiMan.DB.DTO
|
|
||||||
{
|
|
||||||
public class UpdaterDTO
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Codice impiego (univoco x device)
|
|
||||||
/// </summary>
|
|
||||||
[Key]
|
|
||||||
public string CodImp { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Nome App updater
|
|
||||||
/// </summary>
|
|
||||||
public string AppName { get; set; } = "Nemo";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Versione updater
|
|
||||||
/// </summary>
|
|
||||||
public string AppVers { get; set; } = "0.0.0.0";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Cod installazione
|
|
||||||
/// </summary>
|
|
||||||
public string CodInst { get; set; } = "";
|
|
||||||
/// <summary>
|
|
||||||
/// Cod Cliente
|
|
||||||
/// </summary>
|
|
||||||
public string Cliente { get; set; } = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Data ora ultima comunicaziione
|
|
||||||
/// </summary>
|
|
||||||
public DateTime DtLastCom { get; set; } = DateTime.Today.AddYears(-1);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Num App gestite
|
|
||||||
/// </summary>
|
|
||||||
public int NumApp { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Num file licenza gestite
|
|
||||||
/// </summary>
|
|
||||||
public int NumLicenze { get; set; } = 0;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Numero Istsanze complessive (App x Istanze)
|
|
||||||
/// </summary>
|
|
||||||
public int NumIstanze { get; set; } = 0;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -53,7 +53,6 @@ namespace LiMan.DB
|
|||||||
public virtual DbSet<InstallazioneModel> DbSetInst { get; set; }
|
public virtual DbSet<InstallazioneModel> DbSetInst { get; set; }
|
||||||
public virtual DbSet<LicenzaModel> DbSetLicenze { get; set; }
|
public virtual DbSet<LicenzaModel> DbSetLicenze { get; set; }
|
||||||
public virtual DbSet<LogCallModel> DbSetLogCall { get; set; }
|
public virtual DbSet<LogCallModel> DbSetLogCall { get; set; }
|
||||||
public virtual DbSet<LogCodImp> DbSetLogCodImp { get; set; }
|
|
||||||
public virtual DbSet<LogLicenzaModel> DbSetLogLicenze { get; set; }
|
public virtual DbSet<LogLicenzaModel> DbSetLogLicenze { get; set; }
|
||||||
public virtual DbSet<SubLicenzaModel> DbSetSubLicenze { get; set; }
|
public virtual DbSet<SubLicenzaModel> DbSetSubLicenze { get; set; }
|
||||||
public virtual DbSet<TicketModel> DbSetTicket { get; set; }
|
public virtual DbSet<TicketModel> DbSetTicket { get; set; }
|
||||||
@@ -62,9 +61,6 @@ namespace LiMan.DB
|
|||||||
public virtual DbSet<AuthRoleModel> DbSetRoles { get; set; }
|
public virtual DbSet<AuthRoleModel> DbSetRoles { get; set; }
|
||||||
public virtual DbSet<AuthClaimModel> DbSetClaims { get; set; }
|
public virtual DbSet<AuthClaimModel> DbSetClaims { get; set; }
|
||||||
public virtual DbSet<ReleaseModel> DbSetReleases { get; set; }
|
public virtual DbSet<ReleaseModel> DbSetReleases { get; set; }
|
||||||
public virtual DbSet<EnrollRequestModel> DbSetEnrollReq { get; set; }
|
|
||||||
public virtual DbSet<InstalledReleasesModel> DbSetInstallRel { get; set; }
|
|
||||||
public virtual DbSet<InstalledReleasesHistoryModel> DbSetInstallRelHist { get; set; }
|
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
|
|||||||
@@ -6,21 +6,17 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="MailKit" Version="2.15.0" />
|
<PackageReference Include="MailKit" Version="2.15.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.36" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.36" />
|
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.36">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.28">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.3" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.36.0" />
|
|
||||||
<PackageReference Include="NLog" Version="5.3.2" />
|
<PackageReference Include="NLog" Version="5.3.2" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.36.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,157 +0,0 @@
|
|||||||
using NLog;
|
|
||||||
using StackExchange.Redis;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.DB
|
|
||||||
{
|
|
||||||
public class MessagePipe
|
|
||||||
{
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
public MessagePipe(IConnectionMultiplexer redisConn, string channelName, bool enableLog = false)
|
|
||||||
{
|
|
||||||
_channel = channelName;
|
|
||||||
redis = redisConn;
|
|
||||||
redisDb = redis.GetDatabase();
|
|
||||||
this.enableLog = enableLog;
|
|
||||||
// aggiungo sottoscrittore
|
|
||||||
setupSubscriber();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Public Events
|
|
||||||
|
|
||||||
public event EventHandler EA_NewMessage = delegate { };
|
|
||||||
|
|
||||||
#endregion Public Events
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Invio messaggio sul canale + salvataggio in cache REDIS
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="memKey">Chiave REDIS x salvare valore</param>
|
|
||||||
/// <param name="message">Messaggio serializzato da inviare</param>
|
|
||||||
public bool saveAndSendMessage(string memKey, string message)
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
Stopwatch stopWatch = new Stopwatch();
|
|
||||||
stopWatch.Start();
|
|
||||||
|
|
||||||
// invio notifica tramite il canale richiesto
|
|
||||||
answ = sendMessage(message);
|
|
||||||
if (redisDb != null)
|
|
||||||
{
|
|
||||||
redisDb.StringSetAsync(memKey, message);
|
|
||||||
}
|
|
||||||
stopWatch.Stop();
|
|
||||||
TimeSpan ts = stopWatch.Elapsed;
|
|
||||||
if (numSent.ContainsKey(memKey))
|
|
||||||
{
|
|
||||||
numSent[memKey]++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
numSent.Add(memKey, 1);
|
|
||||||
}
|
|
||||||
if (enableLog || numSent[memKey] > 30)
|
|
||||||
{
|
|
||||||
Log.Info($"saveAndSendMessage| mKey {memKey} x {numSent[memKey]} | {message.Length} size | {ts.TotalMilliseconds} ms");
|
|
||||||
|
|
||||||
numSent[memKey] = 0;
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Invio messaggio sul canale
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="newMess"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public bool sendMessage(string newMess)
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
ISubscriber sub = redis.GetSubscriber();
|
|
||||||
sub.Publish(_channel, newMess);
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Fields
|
|
||||||
|
|
||||||
protected static Logger Log = LogManager.GetCurrentClassLogger();
|
|
||||||
|
|
||||||
#endregion Protected Fields
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private bool enableLog = false;
|
|
||||||
private Dictionary<string, int> numSent = new Dictionary<string, int>();
|
|
||||||
private IConnectionMultiplexer redis;
|
|
||||||
private IDatabase redisDb;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Canale associato al gestore pipeline messaggi
|
|
||||||
/// </summary>
|
|
||||||
private string _channel { get; set; } = "";
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private void setupSubscriber()
|
|
||||||
{
|
|
||||||
ISubscriber sub = redis.GetSubscriber();
|
|
||||||
//Subscribe to the channel named messages
|
|
||||||
sub.Subscribe(_channel, (channel, message) =>
|
|
||||||
{
|
|
||||||
if (enableLog)
|
|
||||||
{
|
|
||||||
Log.Trace($"req setup ch {channel} | {message}");
|
|
||||||
}
|
|
||||||
// messaggio
|
|
||||||
PubSubEventArgs mea = new PubSubEventArgs(message);
|
|
||||||
// se qualcuno ascolta sollevo evento nuovo valore...
|
|
||||||
if (EA_NewMessage != null)
|
|
||||||
{
|
|
||||||
EA_NewMessage(this, mea);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (enableLog)
|
|
||||||
{
|
|
||||||
Log.Info($"Subscribed {_channel}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
|
|
||||||
public class PubSubEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
#region Public Constructors
|
|
||||||
|
|
||||||
public PubSubEventArgs(string messaggio)
|
|
||||||
{
|
|
||||||
this.newMessage = messaggio;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Constructors
|
|
||||||
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
public string newMessage { get; set; } = "";
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,552 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using LiMan.DB;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LMDbContext))]
|
|
||||||
[Migration("20240917090404_UpdRelModelAndApp01")]
|
|
||||||
partial class UpdRelModelAndApp01
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
|
||||||
.HasAnnotation("ProductVersion", "6.0.28")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ApplicativoModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
|
||||||
.HasMaxLength(2500)
|
|
||||||
.HasColumnType("nvarchar(2500)");
|
|
||||||
|
|
||||||
b.HasKey("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Applicativi");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ClaimID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ClaimID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtIns")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("ClaimID");
|
|
||||||
|
|
||||||
b.HasIndex("RoleID");
|
|
||||||
|
|
||||||
b.HasIndex("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RoleID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Ruolo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("RoleID");
|
|
||||||
|
|
||||||
b.ToTable("AuthRoles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("UserID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AD_Domain")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("AD_User")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Cognome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Nome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Username")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthUsers");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxFileAttach")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxFileAttach"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtEvent")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("FullStoragePath")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("OriginalName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("StorageName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxFileAttach");
|
|
||||||
|
|
||||||
b.HasIndex("IdxTicket");
|
|
||||||
|
|
||||||
b.ToTable("FileAttach");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstallazioneModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Cliente")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Contatto")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.HasKey("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Installazioni");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DataEnigma")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Enigma")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<bool>("Locked")
|
|
||||||
.HasColumnType("bit");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Payload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Licenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<DateTime>("DataRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("TargetUrl")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("NumCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("DataRif", "CodInst", "CodApp", "TargetUrl");
|
|
||||||
|
|
||||||
b.ToTable("LogCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxRel")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxRel"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("VersText")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxRel");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Releases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.StatsCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("YearRef")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("TotCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("YearRef", "CodInst", "CodApp");
|
|
||||||
|
|
||||||
b.ToView("v_StatsCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxSubLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("VetoUnlock")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.HasKey("IdxSubLic");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("SubLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxTicket"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactPhone")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqBody")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("Status")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("SupplAnsw")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplUserCode")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("TType")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxTicket");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("TicketLog");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthRoleModel", "RoleNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("RoleID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthUserModel", "UserNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("UserID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("RoleNav");
|
|
||||||
|
|
||||||
b.Navigation("UserNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.TicketModel", "TicketNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxTicket")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("TicketNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Attivazioni")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Tickets")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Attivazioni");
|
|
||||||
|
|
||||||
b.Navigation("Tickets");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
public partial class UpdRelModelAndApp01 : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.AddColumn<string>(
|
|
||||||
name: "RelTags",
|
|
||||||
table: "Releases",
|
|
||||||
type: "nvarchar(max)",
|
|
||||||
nullable: true);
|
|
||||||
|
|
||||||
migrationBuilder.AddColumn<string>(
|
|
||||||
name: "Tipo",
|
|
||||||
table: "Applicativi",
|
|
||||||
type: "nvarchar(max)",
|
|
||||||
nullable: true);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropColumn(
|
|
||||||
name: "RelTags",
|
|
||||||
table: "Releases");
|
|
||||||
|
|
||||||
migrationBuilder.DropColumn(
|
|
||||||
name: "Tipo",
|
|
||||||
table: "Applicativi");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,583 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using LiMan.DB;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LMDbContext))]
|
|
||||||
[Migration("20241231105435_AddEnrollRequest")]
|
|
||||||
partial class AddEnrollRequest
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
|
||||||
.HasAnnotation("ProductVersion", "6.0.28")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ApplicativoModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
|
||||||
.HasMaxLength(2500)
|
|
||||||
.HasColumnType("nvarchar(2500)");
|
|
||||||
|
|
||||||
b.HasKey("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Applicativi");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ClaimID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ClaimID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtIns")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("ClaimID");
|
|
||||||
|
|
||||||
b.HasIndex("RoleID");
|
|
||||||
|
|
||||||
b.HasIndex("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RoleID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Ruolo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("RoleID");
|
|
||||||
|
|
||||||
b.ToTable("AuthRoles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("UserID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AD_Domain")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("AD_User")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Cognome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Nome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Username")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthUsers");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.EnrollRequestModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdReq")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdReq"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DtAppr")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Passcode")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqPayload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("UserAppr")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdReq");
|
|
||||||
|
|
||||||
b.ToTable("EnrollRequest");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxFileAttach")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxFileAttach"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtEvent")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("FullStoragePath")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("OriginalName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("StorageName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxFileAttach");
|
|
||||||
|
|
||||||
b.HasIndex("IdxTicket");
|
|
||||||
|
|
||||||
b.ToTable("FileAttach");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstallazioneModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Cliente")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Contatto")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.HasKey("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Installazioni");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DataEnigma")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Enigma")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<bool>("Locked")
|
|
||||||
.HasColumnType("bit");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Payload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Licenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<DateTime>("DataRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("TargetUrl")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("NumCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("DataRif", "CodInst", "CodApp", "TargetUrl");
|
|
||||||
|
|
||||||
b.ToTable("LogCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxRel")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxRel"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("VersText")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxRel");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Releases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.StatsCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("YearRef")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("TotCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("YearRef", "CodInst", "CodApp");
|
|
||||||
|
|
||||||
b.ToView("v_StatsCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxSubLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("VetoUnlock")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.HasKey("IdxSubLic");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("SubLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxTicket"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactPhone")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqBody")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("Status")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("SupplAnsw")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplUserCode")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("TType")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxTicket");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("TicketLog");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthRoleModel", "RoleNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("RoleID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthUserModel", "UserNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("UserID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("RoleNav");
|
|
||||||
|
|
||||||
b.Navigation("UserNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.TicketModel", "TicketNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxTicket")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("TicketNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Attivazioni")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Tickets")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Attivazioni");
|
|
||||||
|
|
||||||
b.Navigation("Tickets");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
public partial class AddEnrollRequest : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "EnrollRequest",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
IdReq = table.Column<int>(type: "int", nullable: false)
|
|
||||||
.Annotation("SqlServer:Identity", "1, 1"),
|
|
||||||
Passcode = table.Column<int>(type: "int", nullable: false),
|
|
||||||
ReqPayload = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
||||||
DtReq = table.Column<DateTime>(type: "datetime2", nullable: false),
|
|
||||||
DtAppr = table.Column<DateTime>(type: "datetime2", nullable: true),
|
|
||||||
UserAppr = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
||||||
IdxLic = table.Column<int>(type: "int", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_EnrollRequest", x => x.IdReq);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "EnrollRequest");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,639 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using LiMan.DB;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LMDbContext))]
|
|
||||||
[Migration("20250111112800_AddInstalledRelTrack")]
|
|
||||||
partial class AddInstalledRelTrack
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
|
||||||
.HasAnnotation("ProductVersion", "6.0.28")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ApplicativoModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
|
||||||
.HasMaxLength(2500)
|
|
||||||
.HasColumnType("nvarchar(2500)");
|
|
||||||
|
|
||||||
b.HasKey("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Applicativi");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ClaimID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ClaimID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtIns")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("ClaimID");
|
|
||||||
|
|
||||||
b.HasIndex("RoleID");
|
|
||||||
|
|
||||||
b.HasIndex("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RoleID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Ruolo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("RoleID");
|
|
||||||
|
|
||||||
b.ToTable("AuthRoles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("UserID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AD_Domain")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("AD_User")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Cognome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Nome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Username")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthUsers");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.EnrollRequestModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdReq")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdReq"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DtAppr")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Passcode")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqPayload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("UserAppr")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdReq");
|
|
||||||
|
|
||||||
b.ToTable("EnrollRequest");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxFileAttach")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxFileAttach"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtEvent")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("FullStoragePath")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("OriginalName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("StorageName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxFileAttach");
|
|
||||||
|
|
||||||
b.HasIndex("IdxTicket");
|
|
||||||
|
|
||||||
b.ToTable("FileAttach");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstallazioneModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Cliente")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Contatto")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.HasKey("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Installazioni");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstall")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstall"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AppKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImp")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtCheck")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("MastKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstall");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DataEnigma")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Enigma")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<bool>("Locked")
|
|
||||||
.HasColumnType("bit");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Payload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Licenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<DateTime>("DataRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("TargetUrl")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("NumCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("DataRif", "CodInst", "CodApp", "TargetUrl");
|
|
||||||
|
|
||||||
b.ToTable("LogCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxRel")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxRel"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("VersText")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxRel");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Releases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.StatsCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("YearRef")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("TotCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("YearRef", "CodInst", "CodApp");
|
|
||||||
|
|
||||||
b.ToView("v_StatsCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxSubLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("VetoUnlock")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.HasKey("IdxSubLic");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("SubLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxTicket"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactPhone")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqBody")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("Status")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("SupplAnsw")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplUserCode")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("TType")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxTicket");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("TicketLog");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthRoleModel", "RoleNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("RoleID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthUserModel", "UserNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("UserID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("RoleNav");
|
|
||||||
|
|
||||||
b.Navigation("UserNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.TicketModel", "TicketNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxTicket")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("TicketNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Attivazioni")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Tickets")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Attivazioni");
|
|
||||||
|
|
||||||
b.Navigation("Tickets");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
public partial class AddInstalledRelTrack : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "InstalledReleases",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
IdxInstall = table.Column<int>(type: "int", nullable: false)
|
|
||||||
.Annotation("SqlServer:Identity", "1, 1"),
|
|
||||||
CodApp = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
|
|
||||||
MastKey = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
|
|
||||||
CodImp = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
|
|
||||||
AppKey = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
|
|
||||||
VersNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
|
|
||||||
NumImp = table.Column<int>(type: "int", nullable: false),
|
|
||||||
DtCheck = table.Column<DateTime>(type: "datetime2", nullable: false),
|
|
||||||
IdxLic = table.Column<int>(type: "int", nullable: false),
|
|
||||||
IdxSubLic = table.Column<int>(type: "int", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_InstalledReleases", x => x.IdxInstall);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "FK_InstalledReleases_Applicativi_CodApp",
|
|
||||||
column: x => x.CodApp,
|
|
||||||
principalTable: "Applicativi",
|
|
||||||
principalColumn: "CodApp");
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_InstalledReleases_CodApp",
|
|
||||||
table: "InstalledReleases",
|
|
||||||
column: "CodApp");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "InstalledReleases");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,705 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using LiMan.DB;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LMDbContext))]
|
|
||||||
[Migration("20250115112104_AddInstRelHistTrack")]
|
|
||||||
partial class AddInstRelHistTrack
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
|
||||||
.HasAnnotation("ProductVersion", "6.0.28")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ApplicativoModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
|
||||||
.HasMaxLength(2500)
|
|
||||||
.HasColumnType("nvarchar(2500)");
|
|
||||||
|
|
||||||
b.HasKey("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Applicativi");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ClaimID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ClaimID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtIns")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("ClaimID");
|
|
||||||
|
|
||||||
b.HasIndex("RoleID");
|
|
||||||
|
|
||||||
b.HasIndex("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RoleID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Ruolo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("RoleID");
|
|
||||||
|
|
||||||
b.ToTable("AuthRoles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("UserID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AD_Domain")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("AD_User")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Cognome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Nome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Username")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthUsers");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.EnrollRequestModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdReq")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdReq"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DtAppr")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Passcode")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqPayload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("UserAppr")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdReq");
|
|
||||||
|
|
||||||
b.ToTable("EnrollRequest");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxFileAttach")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxFileAttach"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtEvent")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("FullStoragePath")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("OriginalName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("StorageName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxFileAttach");
|
|
||||||
|
|
||||||
b.HasIndex("IdxTicket");
|
|
||||||
|
|
||||||
b.ToTable("FileAttach");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstallazioneModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Cliente")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Contatto")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.HasKey("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Installazioni");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstRelHist")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstRelHist"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS0")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS1")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS2")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS3")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS4")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumInst")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstRelHist");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleasesHistory");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstall")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstall"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AppKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImp")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtCheck")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("MastKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstall");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DataEnigma")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Enigma")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<bool>("Locked")
|
|
||||||
.HasColumnType("bit");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Payload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Licenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<DateTime>("DataRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("TargetUrl")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("NumCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("DataRif", "CodInst", "CodApp", "TargetUrl");
|
|
||||||
|
|
||||||
b.ToTable("LogCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxRel")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxRel"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("VersText")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxRel");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Releases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.StatsCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("YearRef")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("TotCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("YearRef", "CodInst", "CodApp");
|
|
||||||
|
|
||||||
b.ToView("v_StatsCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxSubLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("VetoUnlock")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.HasKey("IdxSubLic");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("SubLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxTicket"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactPhone")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqBody")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("Status")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("SupplAnsw")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplUserCode")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("TType")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxTicket");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("TicketLog");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthRoleModel", "RoleNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("RoleID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthUserModel", "UserNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("UserID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("RoleNav");
|
|
||||||
|
|
||||||
b.Navigation("UserNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.TicketModel", "TicketNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxTicket")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("TicketNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Attivazioni")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Tickets")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Attivazioni");
|
|
||||||
|
|
||||||
b.Navigation("Tickets");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
public partial class AddInstRelHistTrack : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "InstalledReleasesHistory",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
IdxInstRelHist = table.Column<int>(type: "int", nullable: false)
|
|
||||||
.Annotation("SqlServer:Identity", "1, 1"),
|
|
||||||
DtRif = table.Column<DateTime>(type: "datetime2", nullable: false),
|
|
||||||
CodApp = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
|
|
||||||
VersNum = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
|
|
||||||
NumInst = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumImp = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumIS4 = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumIS3 = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumIS2 = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumIS1 = table.Column<int>(type: "int", nullable: false),
|
|
||||||
NumIS0 = table.Column<int>(type: "int", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_InstalledReleasesHistory", x => x.IdxInstRelHist);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "FK_InstalledReleasesHistory_Applicativi_CodApp",
|
|
||||||
column: x => x.CodApp,
|
|
||||||
principalTable: "Applicativi",
|
|
||||||
principalColumn: "CodApp");
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_InstalledReleases_IdxLic",
|
|
||||||
table: "InstalledReleases",
|
|
||||||
column: "IdxLic");
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_InstalledReleasesHistory_CodApp",
|
|
||||||
table: "InstalledReleasesHistory",
|
|
||||||
column: "CodApp");
|
|
||||||
|
|
||||||
migrationBuilder.AddForeignKey(
|
|
||||||
name: "FK_InstalledReleases_Licenze_IdxLic",
|
|
||||||
table: "InstalledReleases",
|
|
||||||
column: "IdxLic",
|
|
||||||
principalTable: "Licenze",
|
|
||||||
principalColumn: "IdxLic",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropForeignKey(
|
|
||||||
name: "FK_InstalledReleases_Licenze_IdxLic",
|
|
||||||
table: "InstalledReleases");
|
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "InstalledReleasesHistory");
|
|
||||||
|
|
||||||
migrationBuilder.DropIndex(
|
|
||||||
name: "IX_InstalledReleases_IdxLic",
|
|
||||||
table: "InstalledReleases");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,757 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using LiMan.DB;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LMDbContext))]
|
|
||||||
[Migration("20251203155123_AddLogCodImp")]
|
|
||||||
partial class AddLogCodImp
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
|
||||||
.HasAnnotation("ProductVersion", "6.0.36")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ApplicativoModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
|
||||||
.HasMaxLength(2500)
|
|
||||||
.HasColumnType("nvarchar(2500)");
|
|
||||||
|
|
||||||
b.HasKey("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Applicativi");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ClaimID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ClaimID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtIns")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("ClaimID");
|
|
||||||
|
|
||||||
b.HasIndex("RoleID");
|
|
||||||
|
|
||||||
b.HasIndex("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("RoleID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("RoleID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Ruolo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("RoleID");
|
|
||||||
|
|
||||||
b.ToTable("AuthRoles");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("UserID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("UserID"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AD_Domain")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("AD_User")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Cognome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Nome")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Username")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("UserID");
|
|
||||||
|
|
||||||
b.ToTable("AuthUsers");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.EnrollRequestModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdReq")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdReq"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DtAppr")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Passcode")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqPayload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("UserAppr")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdReq");
|
|
||||||
|
|
||||||
b.ToTable("EnrollRequest");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxFileAttach")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxFileAttach"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtEvent")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("FullStoragePath")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("OriginalName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("StorageName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxFileAttach");
|
|
||||||
|
|
||||||
b.HasIndex("IdxTicket");
|
|
||||||
|
|
||||||
b.ToTable("FileAttach");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstallazioneModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Cliente")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Contatto")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.HasMaxLength(250)
|
|
||||||
.HasColumnType("nvarchar(250)");
|
|
||||||
|
|
||||||
b.HasKey("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Installazioni");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstRelHist")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstRelHist"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS0")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS1")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS2")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS3")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS4")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumInst")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstRelHist");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleasesHistory");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstall")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstall"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AppKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImp")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtCheck")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("MastKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstall");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DataEnigma")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Enigma")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<bool>("Locked")
|
|
||||||
.HasColumnType("bit");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Payload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.ToTable("Licenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<DateTime>("DataRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("TargetUrl")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("NumCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("DataRif", "CodInst", "CodApp", "TargetUrl");
|
|
||||||
|
|
||||||
b.ToTable("LogCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCodImp", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogCodImp")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogCodImp"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpNew")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpOld")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogCodImp");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogCodImp");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("Descrizione")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumLicenze")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("Scadenza")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogLic");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("CodInst");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxRel")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxRel"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("VersText")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdxRel");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("Releases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.StatsCallModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("YearRef")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("CodInst")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(450)");
|
|
||||||
|
|
||||||
b.Property<int>("TotCall")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("YearRef", "CodInst", "CodApp");
|
|
||||||
|
|
||||||
b.ToView("v_StatsCall");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxSubLic"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("Chiave")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("VetoUnlock")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.HasKey("IdxSubLic");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("SubLicenze");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxTicket")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxTicket"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodImpiego")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactName")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("ContactPhone")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqBody")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("Status")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("SupplAnsw")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplEmail")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("SupplUserCode")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<int>("TType")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Tipo")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxTicket");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("TicketLog");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthClaimModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthRoleModel", "RoleNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("RoleID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.AuthUserModel", "UserNav")
|
|
||||||
.WithMany("Claims")
|
|
||||||
.HasForeignKey("UserID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("RoleNav");
|
|
||||||
|
|
||||||
b.Navigation("UserNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.TicketModel", "TicketNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxTicket")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("TicketNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCodImp", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.InstallazioneModel", "InstallazioneNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodInst");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("InstallazioneNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.ReleaseModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.SubLicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Attivazioni")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.TicketModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany("Tickets")
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthRoleModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.AuthUserModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Claims");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
|
||||||
{
|
|
||||||
b.Navigation("Attivazioni");
|
|
||||||
|
|
||||||
b.Navigation("Tickets");
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace LiMan.DB.Migrations
|
|
||||||
{
|
|
||||||
public partial class AddLogCodImp : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "LogCodImp",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
IdxLogCodImp = table.Column<int>(type: "int", nullable: false)
|
|
||||||
.Annotation("SqlServer:Identity", "1, 1"),
|
|
||||||
IdxLic = table.Column<int>(type: "int", nullable: false),
|
|
||||||
IdxSubLic = table.Column<int>(type: "int", nullable: false),
|
|
||||||
CodApp = table.Column<string>(type: "nvarchar(50)", nullable: true),
|
|
||||||
CodImpOld = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
||||||
CodImpNew = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
||||||
DtMod = table.Column<DateTime>(type: "datetime2", nullable: false)
|
|
||||||
},
|
|
||||||
constraints: table =>
|
|
||||||
{
|
|
||||||
table.PrimaryKey("PK_LogCodImp", x => x.IdxLogCodImp);
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "FK_LogCodImp_Applicativi_CodApp",
|
|
||||||
column: x => x.CodApp,
|
|
||||||
principalTable: "Applicativi",
|
|
||||||
principalColumn: "CodApp");
|
|
||||||
table.ForeignKey(
|
|
||||||
name: "FK_LogCodImp_Licenze_IdxLic",
|
|
||||||
column: x => x.IdxLic,
|
|
||||||
principalTable: "Licenze",
|
|
||||||
principalColumn: "IdxLic",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_LogCodImp_CodApp",
|
|
||||||
table: "LogCodImp",
|
|
||||||
column: "CodApp");
|
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
|
||||||
name: "IX_LogCodImp_IdxLic",
|
|
||||||
table: "LogCodImp",
|
|
||||||
column: "IdxLic");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "LogCodImp");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,7 +18,7 @@ namespace LiMan.DB.Migrations
|
|||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
.UseCollation("SQL_Latin1_General_CP1_CI_AS")
|
||||||
.HasAnnotation("ProductVersion", "6.0.36")
|
.HasAnnotation("ProductVersion", "6.0.28")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||||
|
|
||||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
|
||||||
@@ -33,9 +33,6 @@ namespace LiMan.DB.Migrations
|
|||||||
.HasMaxLength(250)
|
.HasMaxLength(250)
|
||||||
.HasColumnType("nvarchar(250)");
|
.HasColumnType("nvarchar(250)");
|
||||||
|
|
||||||
b.Property<string>("Tipo")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("TplConnString")
|
b.Property<string>("TplConnString")
|
||||||
.HasMaxLength(2500)
|
.HasMaxLength(2500)
|
||||||
.HasColumnType("nvarchar(2500)");
|
.HasColumnType("nvarchar(2500)");
|
||||||
@@ -121,37 +118,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.ToTable("AuthUsers");
|
b.ToTable("AuthUsers");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.EnrollRequestModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdReq")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdReq"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DtAppr")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtReq")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("Passcode")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("ReqPayload")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("UserAppr")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("IdReq");
|
|
||||||
|
|
||||||
b.ToTable("EnrollRequest");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
modelBuilder.Entity("LiMan.DB.DBModels.FileAttachModel", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("IdxFileAttach")
|
b.Property<int>("IdxFileAttach")
|
||||||
@@ -209,102 +175,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.ToTable("Installazioni");
|
b.ToTable("Installazioni");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstRelHist")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstRelHist"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtRif")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS0")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS1")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS2")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS3")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumIS4")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("NumInst")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstRelHist");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleasesHistory");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxInstall")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxInstall"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("AppKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImp")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtCheck")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("MastKey")
|
|
||||||
.HasMaxLength(500)
|
|
||||||
.HasColumnType("nvarchar(500)");
|
|
||||||
|
|
||||||
b.Property<int>("NumImp")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("VersNum")
|
|
||||||
.HasMaxLength(50)
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.HasKey("IdxInstall");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("InstalledReleases");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("IdxLic")
|
b.Property<int>("IdxLic")
|
||||||
@@ -377,41 +247,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.ToTable("LogCall");
|
b.ToTable("LogCall");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCodImp", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("IdxLogCodImp")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("IdxLogCodImp"), 1L, 1);
|
|
||||||
|
|
||||||
b.Property<string>("CodApp")
|
|
||||||
.HasColumnType("nvarchar(50)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpNew")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("CodImpOld")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DtMod")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<int>("IdxLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("IdxSubLic")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("IdxLogCodImp");
|
|
||||||
|
|
||||||
b.HasIndex("CodApp");
|
|
||||||
|
|
||||||
b.HasIndex("IdxLic");
|
|
||||||
|
|
||||||
b.ToTable("LogCodImp");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("IdxLogLic")
|
b.Property<int>("IdxLogLic")
|
||||||
@@ -466,9 +301,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.Property<string>("CodApp")
|
b.Property<string>("CodApp")
|
||||||
.HasColumnType("nvarchar(50)");
|
.HasColumnType("nvarchar(50)");
|
||||||
|
|
||||||
b.Property<string>("RelTags")
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<DateTime>("ReleaseDate")
|
b.Property<DateTime>("ReleaseDate")
|
||||||
.HasColumnType("datetime2");
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
@@ -621,32 +453,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.Navigation("TicketNav");
|
b.Navigation("TicketNav");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesHistoryModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.InstalledReleasesModel", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
modelBuilder.Entity("LiMan.DB.DBModels.LicenzaModel", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
||||||
@@ -662,23 +468,6 @@ namespace LiMan.DB.Migrations
|
|||||||
b.Navigation("InstallazioneNav");
|
b.Navigation("InstallazioneNav");
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogCodImp", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CodApp");
|
|
||||||
|
|
||||||
b.HasOne("LiMan.DB.DBModels.LicenzaModel", "LicenzaNav")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("IdxLic")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.Navigation("ApplicativoNav");
|
|
||||||
|
|
||||||
b.Navigation("LicenzaNav");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
modelBuilder.Entity("LiMan.DB.DBModels.LogLicenzaModel", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
b.HasOne("LiMan.DB.DBModels.ApplicativoModel", "ApplicativoNav")
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -11,19 +11,15 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.36">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.28">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.3" />
|
|
||||||
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.36.0" />
|
|
||||||
<PackageReference Include="NLog" Version="5.3.2" />
|
<PackageReference Include="NLog" Version="5.3.2" />
|
||||||
<PackageReference Include="StackExchange.Redis" Version="2.10.1" />
|
<PackageReference Include="StackExchange.Redis" Version="2.2.88" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.36.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -105,44 +105,13 @@ namespace LiMan.DbSync.Services
|
|||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Esegue flush memoria redis dato pat2Flush
|
/// Esegue flush memoria redis dato pattern
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="pat2Flush"></param>
|
/// <param name="pattern"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected async Task<bool> ExecFlushRedisPattern(RedisValue pat2Flush)
|
protected async Task<bool> ExecFlushRedisPattern(RedisValue pattern)
|
||||||
{
|
{
|
||||||
bool answ = false;
|
bool answ = false;
|
||||||
var masterEndpoint = redisConn.GetEndPoints()
|
|
||||||
.Where(ep => redisConn.GetServer(ep).IsConnected && !redisConn.GetServer(ep).IsReplica)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
// sepattern è "*" elimino intero DB...
|
|
||||||
if (masterEndpoint != null && (pat2Flush.Equals(new RedisValue("*")) || pat2Flush == RedisValue.Null))
|
|
||||||
{
|
|
||||||
redisConn.GetServer(masterEndpoint).FlushDatabase(database: redisDb.Database);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var server = redisConn.GetServer(masterEndpoint);
|
|
||||||
var keys = server.Keys(database: redisDb.Database, pattern: pat2Flush, pageSize: 1000);
|
|
||||||
|
|
||||||
var deleteTasks = new List<Task>();
|
|
||||||
foreach (var key in keys)
|
|
||||||
{
|
|
||||||
deleteTasks.Add(redisDb.KeyDeleteAsync(key));
|
|
||||||
if (deleteTasks.Count >= 1000)
|
|
||||||
{
|
|
||||||
await Task.WhenAll(deleteTasks);
|
|
||||||
deleteTasks.Clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (deleteTasks.Count > 0)
|
|
||||||
{
|
|
||||||
await Task.WhenAll(deleteTasks);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
answ = true;
|
|
||||||
#if false
|
|
||||||
var listEndpoints = redisConn.GetEndPoints();
|
var listEndpoints = redisConn.GetEndPoints();
|
||||||
foreach (var endPoint in listEndpoints)
|
foreach (var endPoint in listEndpoints)
|
||||||
{
|
{
|
||||||
@@ -157,8 +126,7 @@ namespace LiMan.DbSync.Services
|
|||||||
}
|
}
|
||||||
answ = true;
|
answ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,25 +5,19 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Remove="DTO\**" />
|
<Folder Include="DTO\" />
|
||||||
<EmbeddedResource Remove="DTO\**" />
|
|
||||||
<None Remove="DTO\**" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.36" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.36">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.28">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.3" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.28" />
|
||||||
<PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="6.36.0" />
|
|
||||||
<PackageReference Include="NLog" Version="5.3.2" />
|
<PackageReference Include="NLog" Version="5.3.2" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="6.0.0" />
|
|
||||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.36.0" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<body>
|
<body>
|
||||||
<i>License Manager</i>
|
<i>License Manager</i>
|
||||||
<h4>Versione: 2.1.2512.0409</h4>
|
<h4>Versione: 1.1.2408.0817</h4>
|
||||||
<br />
|
<br />
|
||||||
Note di rilascio:
|
Note di rilascio:
|
||||||
<ul>
|
<ul>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2.1.2512.0409
|
1.1.2408.0817
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<item>
|
<item>
|
||||||
<version>2.1.2512.0409</version>
|
<version>1.1.2408.0817</version>
|
||||||
<url>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/LiMan.Transfer.zip</url>
|
<url>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/LiMan.Transfer.zip</url>
|
||||||
<changelog>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/ChangeLog.html</changelog>
|
<changelog>https://nexus.steamware.net/repository/SWS/LiMan/stable/LAST/ChangeLog.html</changelog>
|
||||||
<mandatory>false</mandatory>
|
<mandatory>false</mandatory>
|
||||||
|
|||||||
@@ -1,46 +1,39 @@
|
|||||||
@if (showKeyGen)
|
<div class="card">
|
||||||
{
|
|
||||||
<div class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog" data-keyboard="true">
|
|
||||||
<div class="modal-dialog modal-xl">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header d-flex justify-content-between">
|
|
||||||
<div class="px-2">
|
|
||||||
<h4 class="modal-title">Machine Key Generator</h4>
|
|
||||||
</div>
|
|
||||||
<div class="px-2">
|
|
||||||
<button type="button" class="btn btn-close" data-dismiss="modal" @onclick="@ToggleKeyGen"></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<MachineKeyGen></MachineKeyGen>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-danger" data-dismiss="modal" @onclick="@ToggleKeyGen">Close</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-header bg-info py-1 text-light">
|
<div class="card-header bg-info py-1 text-light">
|
||||||
<div class="d-flex justify-content-between">
|
<div class="row">
|
||||||
<div class="px-2">
|
<div class="col-4">
|
||||||
<h3>Istanze/Attivazioni</h3>
|
<h3>Attivazioni</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="px-2">
|
<div class="col-4">
|
||||||
@if (CanEdit)
|
</div>
|
||||||
{
|
<div class="col-4">
|
||||||
<button type="button" class="btn btn-primary" @onclick="@ToggleKeyGen">Show Machine KeyGen <i class="fas fa-key"></i></button>
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#machKeyGen">
|
||||||
}
|
Show Machine KeyGen <i class="fas fa-key"></i>
|
||||||
else
|
</button>
|
||||||
{
|
|
||||||
<button type="button" class="btn btn-secondary" disabled>Show Machine KeyGen <i class="fas fa-key"></i></button>
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body bg-light p-1">
|
<div class="card-body bg-light p-1">
|
||||||
|
<div class="modal" id="machKeyGen">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title">Machine Key Generator</h4>
|
||||||
|
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<MachineKeyGen></MachineKeyGen>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<table class="table table-sm table-striped table-responsive-lg">
|
<table class="table table-sm table-striped table-responsive-lg">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -61,8 +54,8 @@
|
|||||||
}
|
}
|
||||||
</th>
|
</th>
|
||||||
<th>Scadenza Veto</th>
|
<th>Scadenza Veto</th>
|
||||||
<th class="text-end"><i class="fas fa-user-lock"></i></th>
|
<th class="text-right"><i class="fas fa-user-lock"></i></th>
|
||||||
<th class="text-end"><i class="fas fa-exclamation-triangle"></i></th>
|
<th class="text-right"><i class="fas fa-exclamation-triangle"></i></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@@ -93,7 +86,7 @@
|
|||||||
<td>
|
<td>
|
||||||
<span class="@cssScadenza(record.VetoUnlock)">@($"{record.VetoUnlock:yyyy.MM.dd}")</span>
|
<span class="@cssScadenza(record.VetoUnlock)">@($"{record.VetoUnlock:yyyy.MM.dd}")</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-end">
|
<td class="text-right">
|
||||||
@if (record.Locked)
|
@if (record.Locked)
|
||||||
{
|
{
|
||||||
<span aria-hidden="true" title="Licenza Bloccata"><i class="fas fa-lock text-danger"></i></span>
|
<span aria-hidden="true" title="Licenza Bloccata"><i class="fas fa-lock text-danger"></i></span>
|
||||||
@@ -103,8 +96,8 @@
|
|||||||
<span aria-hidden="true" title="Licenza Libera"><i class="fas fa-unlock-alt text-success"></i></span>
|
<span aria-hidden="true" title="Licenza Libera"><i class="fas fa-unlock-alt text-success"></i></span>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td class="text-end">
|
<td class="text-right">
|
||||||
@if (!record.Locked && CanEdit)
|
@if (!record.Locked)
|
||||||
{
|
{
|
||||||
<button title="Elimina Licenza" class="btn btn-sm btn-danger" @onclick="() => Remove(record)"><i class="fas fa-trash"></i></button>
|
<button title="Elimina Licenza" class="btn btn-sm btn-danger" @onclick="() => Remove(record)"><i class="fas fa-trash"></i></button>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,10 +12,51 @@ namespace LiMan.UI.Components
|
|||||||
{
|
{
|
||||||
public partial class Activations
|
public partial class Activations
|
||||||
{
|
{
|
||||||
#region Public Properties
|
#region Private Fields
|
||||||
|
|
||||||
[Parameter]
|
private List<SubLicenzaModel> ListRecords;
|
||||||
public bool CanEdit { get; set; } = false;
|
|
||||||
|
#endregion Private Fields
|
||||||
|
|
||||||
|
#region Protected Fields
|
||||||
|
|
||||||
|
protected SubLicenzaModel _currRecord = new SubLicenzaModel();
|
||||||
|
|
||||||
|
protected LicenzaModel _masterLic = new LicenzaModel();
|
||||||
|
|
||||||
|
protected bool showKey = false;
|
||||||
|
|
||||||
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private SubLicenzaModel currRecord
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _currRecord;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_currRecord = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
|
#region Protected Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
protected LiManDataService DataService { get; set; }
|
||||||
|
|
||||||
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback<int> DataReset { get; set; }
|
public EventCallback<int> DataReset { get; set; }
|
||||||
@@ -40,52 +81,26 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
#region Public Methods
|
#region Private Methods
|
||||||
|
|
||||||
public string checkSelect(int IdxSubLic)
|
private async Task fullReload()
|
||||||
{
|
{
|
||||||
string answ = "";
|
await DataService.InvalidateAllCache();
|
||||||
if (currRecord != null)
|
await ReloadAllData();
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
answ = (currRecord.IdxSubLic == IdxSubLic) ? "table-info" : "";
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{ }
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public string decryptAuthKey(string authKey)
|
private async Task ReloadAllData()
|
||||||
{
|
{
|
||||||
string answ = authKey;
|
isLoading = true;
|
||||||
try
|
ListRecords = null;
|
||||||
{
|
await Task.Delay(1);
|
||||||
string passphrase = (MasterLicence.CodApp == "GPW") ? "AuthGPW" : MasterLicence.CodApp;
|
ListRecords = MasterLicence.Attivazioni.ToList();
|
||||||
answ = SteamCrypto.DecryptString(authKey, passphrase);
|
//AllRecords = await DataService.AttivazioniGetByLic(MasterLicence.IdxLic);
|
||||||
}
|
await Task.Delay(1);
|
||||||
catch
|
isLoading = false;
|
||||||
{ }
|
|
||||||
return answ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Public Methods
|
#endregion Private Methods
|
||||||
|
|
||||||
#region Protected Fields
|
|
||||||
|
|
||||||
protected SubLicenzaModel _currRecord = new SubLicenzaModel();
|
|
||||||
protected LicenzaModel _masterLic = new LicenzaModel();
|
|
||||||
protected bool showKey = false;
|
|
||||||
|
|
||||||
#endregion Protected Fields
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected LiManDataService DataService { get; set; }
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
@@ -94,8 +109,13 @@ namespace LiMan.UI.Components
|
|||||||
await DataReset.InvokeAsync(0);
|
await DataReset.InvokeAsync(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary> formatta testo secondo scadenza: scadenza < oggi --> verde scadenza > oggi -->
|
/// <summary>
|
||||||
/// rosso </summary> <param name="scadenza"></param> <returns></returns>
|
/// formatta testo secondo scadenza:
|
||||||
|
/// scadenza < oggi --> verde
|
||||||
|
/// scadenza > oggi --> rosso
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scadenza"></param>
|
||||||
|
/// <returns></returns>
|
||||||
protected string cssScadenza(DateTime scadenza)
|
protected string cssScadenza(DateTime scadenza)
|
||||||
{
|
{
|
||||||
string answ = "text-dark";
|
string answ = "text-dark";
|
||||||
@@ -112,17 +132,6 @@ namespace LiMan.UI.Components
|
|||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task Remove(SubLicenzaModel selRecord)
|
|
||||||
{
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler eliminare in modo forzato la licenza? Operazione irreversibile."))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// chiamo procedura sblocco...
|
|
||||||
await DataService.AttivazioneDelete(selRecord.IdxSubLic);
|
|
||||||
//await ResetData();
|
|
||||||
await DataUpdated.InvokeAsync(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task ResetData()
|
protected async Task ResetData()
|
||||||
{
|
{
|
||||||
await fullReload();
|
await fullReload();
|
||||||
@@ -144,61 +153,48 @@ namespace LiMan.UI.Components
|
|||||||
await DataUpdated.InvokeAsync(0);
|
await DataUpdated.InvokeAsync(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async Task Remove(SubLicenzaModel selRecord)
|
||||||
|
{
|
||||||
|
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler eliminare in modo forzato la licenza? Operazione irreversibile."))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// chiamo procedura sblocco...
|
||||||
|
await DataService.AttivazioneDelete(selRecord.IdxSubLic);
|
||||||
|
//await ResetData();
|
||||||
|
await DataUpdated.InvokeAsync(0);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
#region Private Fields
|
#region Public Methods
|
||||||
|
|
||||||
private List<SubLicenzaModel> ListRecords;
|
public string checkSelect(int IdxSubLic)
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
private SubLicenzaModel currRecord
|
|
||||||
{
|
{
|
||||||
get
|
string answ = "";
|
||||||
|
if (currRecord != null)
|
||||||
{
|
{
|
||||||
return _currRecord;
|
try
|
||||||
|
{
|
||||||
|
answ = (currRecord.IdxSubLic == IdxSubLic) ? "table-info" : "";
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{ }
|
||||||
}
|
}
|
||||||
set
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string decryptAuthKey(string authKey)
|
||||||
|
{
|
||||||
|
string answ = authKey;
|
||||||
|
try
|
||||||
{
|
{
|
||||||
_currRecord = value;
|
answ = SteamCrypto.DecryptString(authKey, "AuthGPW");
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{ }
|
||||||
|
return answ;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
#endregion Public Methods
|
||||||
|
|
||||||
[Inject]
|
|
||||||
private IJSRuntime JSRuntime { get; set; }
|
|
||||||
|
|
||||||
private bool showKeyGen { get; set; } = false;
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private async Task fullReload()
|
|
||||||
{
|
|
||||||
await DataService.FlushRedisCache();
|
|
||||||
await ReloadAllData();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ReloadAllData()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
ListRecords = null;
|
|
||||||
await Task.Delay(1);
|
|
||||||
ListRecords = MasterLicence.Attivazioni.ToList();
|
|
||||||
//SearchRecords = await LMDService.AttivazioniGetByLic(MasterLicence.IdxLic);
|
|
||||||
await Task.Delay(1);
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ToggleKeyGen()
|
|
||||||
{
|
|
||||||
showKeyGen = !showKeyGen;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
<div class="row">
|
|
||||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
|
||||||
<div class="card shadow text-center rounded-3">
|
|
||||||
<div class="card-header fs-2">
|
|
||||||
Clienti
|
|
||||||
</div>
|
|
||||||
<div class="card-body body-height">
|
|
||||||
<div class="fs-1 mb-3">
|
|
||||||
<b>@InfoStats.UpdaterList.Count</b>
|
|
||||||
</div>
|
|
||||||
<div class="input-group">
|
|
||||||
<select @bind="@CodInstSel" class="form-select form-select-lg2">
|
|
||||||
<option value="">--- Tutti ---</option>
|
|
||||||
@if (ListInstall != null)
|
|
||||||
{
|
|
||||||
foreach (var item in ListInstall)
|
|
||||||
{
|
|
||||||
<option value="@item.CodInst">@item.CodInst</option>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
|
||||||
<div class="card shadow text-center rounded-3">
|
|
||||||
<div class="card-header fs-2">
|
|
||||||
AppControlCenter
|
|
||||||
</div>
|
|
||||||
<div class="card-body body-height">
|
|
||||||
<div class="fs-1">
|
|
||||||
<b>@InfoStats.TotalUpdaterAct</b>
|
|
||||||
</div>
|
|
||||||
<div class="btn-group w-100" role="group">
|
|
||||||
<button title="Richiesta update info Applicazioni" class="btn btn-primary" @onclick="() => DoMassiveRequest(Core.Enum.EgwAccTask.ForceCheck)">Apps Info</button>
|
|
||||||
<button title="Richiesta update info Devices" class="btn btn-info" @onclick="() => DoMassiveRequest(Core.Enum.EgwAccTask.DeviceInfoGet)">Dev. info</button>
|
|
||||||
<button disabled title="Richiesta Riavvio + Update AppControlCenter" class="btn btn-danger">Reboot</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
<div class="d-flex justify-content-evenly rounded">
|
|
||||||
<button class="btn btn-sm w-100 text-center @BtnState(TaskReq.Count,"text-danger")" @onclick="() => ShowDetail(Core.Enum.UpdStatus.Pending)">Pending <b>@TaskReq.Count</b></button>
|
|
||||||
<button class="btn btn-sm w-100 text-center @BtnState(TaskRun.Count)" @onclick="() => ShowDetail(Core.Enum.UpdStatus.Running)">Run <b>@TaskRun.Count</b></button>
|
|
||||||
<button class="btn btn-sm w-100 text-center @BtnState(TaskDone.Count)" @onclick="() => ShowDetail(Core.Enum.UpdStatus.Done)">Done <b>@TaskDone.Count</b></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
|
||||||
<div class="card shadow text-center rounded-3">
|
|
||||||
<div class="card-header fs-2">
|
|
||||||
Update Score
|
|
||||||
</div>
|
|
||||||
<div class="card-body body-height">
|
|
||||||
<div class="fs-1">
|
|
||||||
<b>@($"{InfoStats.GlobalUpdateScore:P1}")</b>
|
|
||||||
</div>
|
|
||||||
<i>global update commands</i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-md-6 col-lg-4 col-xl-3">
|
|
||||||
<div class="card shadow text-center rounded-3">
|
|
||||||
<div class="card-header fs-2">
|
|
||||||
Request Received
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-1 body-height">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
|
||||||
<div>
|
|
||||||
Call / Hour <sub>(last)</sub>
|
|
||||||
</div>
|
|
||||||
<span class="badge text-bg-primary rounded-pill">@InfoStats.LastCallHour</span>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
|
||||||
<div>
|
|
||||||
Call / Day <sub>(last)</sub>
|
|
||||||
</div>
|
|
||||||
<span class="badge text-bg-primary rounded-pill">@InfoStats.LastCallDay</span>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-start">
|
|
||||||
<div>
|
|
||||||
App Requested <sub>(all)</sub>
|
|
||||||
</div>
|
|
||||||
<span class="badge text-bg-primary rounded-pill">@InfoStats.ReqCountApp.Count()</span>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@if (UpdStatusReq != Core.Enum.UpdStatus.None)
|
|
||||||
{
|
|
||||||
<ListDevicesDTO Title="@($"{UpdStatusReq}")" EC_StatusReq="ShowDetail" SearchRecord="ListDev2Show"></ListDevicesDTO>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
@@ -1,356 +0,0 @@
|
|||||||
using LiMan.DB;
|
|
||||||
using LiMan.DB.DBModels;
|
|
||||||
using LiMan.DB.DTO;
|
|
||||||
using LiMan.UI.Data;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace LiMan.UI.Components
|
|
||||||
{
|
|
||||||
public partial class AggregateStats : IDisposable
|
|
||||||
{
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
LMDService.EnrollMessPipe.EA_NewMessage -= async (sender, e) => await EnrollMessPipe_EA_NewMessage(sender, e);
|
|
||||||
LMDService.UpdActMessPipe.EA_NewMessage -= async (sender, e) => await UpdActMessPipe_EA_NewMessage(sender, e);
|
|
||||||
MServ.EA_SelCodImp -= async () => await MServ_EA_SelCodImp();
|
|
||||||
MServ.EA_SelCodInst -= async () => await MServ_EA_SelCodInst();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Codice installazione selezionata
|
|
||||||
/// </summary>
|
|
||||||
protected string CodInstSel
|
|
||||||
{
|
|
||||||
get => codInstSel;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (codInstSel != value)
|
|
||||||
{
|
|
||||||
codInstSel = value;
|
|
||||||
isLoading = true;
|
|
||||||
var pUpd = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await ReloadData();
|
|
||||||
MServ.UsrParamSet("CodInst", value);
|
|
||||||
MServ.ReportSelCodInst();
|
|
||||||
});
|
|
||||||
pUpd.Wait();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tipo app selezionato
|
|
||||||
/// </summary>
|
|
||||||
protected string CodTipoApp
|
|
||||||
{
|
|
||||||
get => codTipoApp;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (codTipoApp != value)
|
|
||||||
{
|
|
||||||
codTipoApp = value;
|
|
||||||
isLoading = true;
|
|
||||||
var pUpd = Task.Run(async () =>
|
|
||||||
{
|
|
||||||
await ReloadData();
|
|
||||||
// resetto eventuale App
|
|
||||||
MServ.UsrParamSet("CodApp", "");
|
|
||||||
MServ.ReportSelCodApp();
|
|
||||||
});
|
|
||||||
pUpd.Wait();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected LiManDataService LMDService { get; set; } = null!;
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MServ { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
LMDService.EnrollMessPipe.EA_NewMessage += async (sender, e) => await EnrollMessPipe_EA_NewMessage(sender, e);
|
|
||||||
LMDService.UpdActMessPipe.EA_NewMessage += async (sender, e) => await UpdActMessPipe_EA_NewMessage(sender, e);
|
|
||||||
MServ.EA_SelCodImp += async () => await MServ_EA_SelCodImp();
|
|
||||||
MServ.EA_SelCodInst += async () => await MServ_EA_SelCodInst();
|
|
||||||
await ReloadLicData();
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private string CodDeviceSel = "";
|
|
||||||
|
|
||||||
private string codInstSel = "";
|
|
||||||
|
|
||||||
private Dictionary<string, string> DetailFilt = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
private bool HasFiltClienti = false;
|
|
||||||
|
|
||||||
private bool HasFiltImpiego = false;
|
|
||||||
|
|
||||||
private List<InstallazioneModel> ListInstall;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista Task in stato DONE
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<string, string> TaskDone = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista Task in stato REQUESTED
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<string, string> TaskReq = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Lista Task in stato RUNNING
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<string, string> TaskRun = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Status degli udpater da mostrare
|
|
||||||
/// </summary>
|
|
||||||
private Core.Enum.UpdStatus UpdStatusReq = Core.Enum.UpdStatus.None;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Impianto selezionato
|
|
||||||
/// </summary>
|
|
||||||
private string CodImpSel { get; set; } = "";
|
|
||||||
|
|
||||||
private string codTipoApp { get; set; } = "";
|
|
||||||
|
|
||||||
private string DevName { get; set; } = "";
|
|
||||||
|
|
||||||
private DateTime DtFine { get; set; } = DateTime.Today.AddHours(DateTime.Now.Hour + 1);
|
|
||||||
|
|
||||||
private DateTime DtInizio { get; set; } = DateTime.Today.AddMonths(-1);
|
|
||||||
|
|
||||||
private InstallStatusDTO InfoStats { get; set; } = new InstallStatusDTO();
|
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
private IJSRuntime JSRuntime { get; set; }
|
|
||||||
|
|
||||||
private List<DeviceDTO> ListDev2Show { get; set; } = new List<DeviceDTO>();
|
|
||||||
private Dictionary<string, DeviceDTO> ListDevices { get; set; } = new Dictionary<string, DeviceDTO>();
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private string BtnState(int numRec, string cssAct = "text-success")
|
|
||||||
{
|
|
||||||
return numRec > 0 ? cssAct : "text-secondary";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// lancio richiesta udpate app info x ogni IMP gestito...
|
|
||||||
/// </summary>
|
|
||||||
private async Task DoMassiveRequest(Core.Enum.EgwAccTask reqType)
|
|
||||||
{
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler inviare un comando di {reqType} a tutti i devices?"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler proseguire? Verranno interesati {InfoStats.TotalUpdaterAct} devices."))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var listCodImp = InfoStats.InstDevices.Select(x => x.Value.CodImp).ToList();
|
|
||||||
LMDService.TaskReqAdd(listCodImp, reqType, $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Evento refresh legato a ricezione evento da MessagePipe
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private async Task EnrollMessPipe_EA_NewMessage(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
PubSubEventArgs currArgs = (PubSubEventArgs)e;
|
|
||||||
// qualsiasi messaggio fa scattare reload data
|
|
||||||
if (!string.IsNullOrEmpty(currArgs.newMessage))
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
await ReloadLicData();
|
|
||||||
await ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Selezionato CodImp (PC)
|
|
||||||
/// </summary>
|
|
||||||
/// <exception cref="NotImplementedException"></exception>
|
|
||||||
private async Task MServ_EA_SelCodImp()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
// se trovo salvate in preferenze utente le info necessarie...
|
|
||||||
CodImpSel = MServ.UsrParamGet("CodImp");
|
|
||||||
HasFiltImpiego = !string.IsNullOrEmpty(CodImpSel);
|
|
||||||
DetailFilt.Clear();
|
|
||||||
DetailFilt.Add("Cliente", MServ.UsrParamGet("Cliente"));
|
|
||||||
DevName = MServ.UsrParamGet("PcInst");
|
|
||||||
DetailFilt.Add("PC", DevName);
|
|
||||||
DetailFilt.Add("SW ver.", MServ.UsrParamGet("Version"));
|
|
||||||
DetailFilt.Add("IP", MServ.UsrParamGet("PcIP"));
|
|
||||||
DetailFilt.Add("Started", MServ.UsrParamGet("PcRestart"));
|
|
||||||
ReloadTaskStatus();
|
|
||||||
isLoading = false;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Selezionato CodInstall (Cliente)
|
|
||||||
/// </summary>
|
|
||||||
/// <exception cref="NotImplementedException"></exception>
|
|
||||||
private async Task MServ_EA_SelCodInst()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
CodInstSel = MServ.UsrParamGet("CodInst");
|
|
||||||
HasFiltClienti = !string.IsNullOrEmpty(CodInstSel);
|
|
||||||
ReloadDevices();
|
|
||||||
isLoading = false;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ReloadData()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
InfoStats = await LMDService.InstallStatusGetInfo(DtInizio, DtFine, CodInstSel, CodTipoApp);
|
|
||||||
ReloadDevices();
|
|
||||||
ReloadTaskStatus();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReloadDevices()
|
|
||||||
{
|
|
||||||
ListDevices = new Dictionary<string, DeviceDTO>();
|
|
||||||
if (InfoStats != null)
|
|
||||||
{
|
|
||||||
// se necessario filtro...
|
|
||||||
if (HasFiltClienti)
|
|
||||||
{
|
|
||||||
ListDevices = InfoStats
|
|
||||||
.InstDevices
|
|
||||||
.Where(x => x.Value.CodInst == CodInstSel)
|
|
||||||
.OrderBy(x => x.Value.DevName)
|
|
||||||
.ToDictionary(x => x.Key, x => x.Value);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ListDevices = InfoStats
|
|
||||||
.InstDevices
|
|
||||||
.OrderBy(x => x.Value.DevName)
|
|
||||||
.ToDictionary(x => x.Key, x => x.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ReloadLicData()
|
|
||||||
{
|
|
||||||
ListInstall = await LMDService.InstallazioniNextGetAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Esegue update stato task
|
|
||||||
/// </summary>
|
|
||||||
private void ReloadTaskStatus()
|
|
||||||
{
|
|
||||||
TaskReq = LMDService.TaskListReqGet();
|
|
||||||
TaskRun = LMDService.TaskListRunGet();
|
|
||||||
TaskDone = LMDService.TaskListDoneGet();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Imposta status visualizzazione dettaglio
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="newStatus"></param>
|
|
||||||
private async void ShowDetail(Core.Enum.UpdStatus newStatus)
|
|
||||||
{
|
|
||||||
UpdStatusReq = newStatus;
|
|
||||||
ListDev2Show = new List<DeviceDTO>();
|
|
||||||
Dictionary<string, string> dictCurr = new Dictionary<string, string>();
|
|
||||||
switch (UpdStatusReq)
|
|
||||||
{
|
|
||||||
case Core.Enum.UpdStatus.Pending:
|
|
||||||
dictCurr = TaskReq;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Core.Enum.UpdStatus.Running:
|
|
||||||
dictCurr = TaskRun;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Core.Enum.UpdStatus.Done:
|
|
||||||
dictCurr = TaskDone;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Core.Enum.UpdStatus.None:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// filtro x stato richiesto...
|
|
||||||
List<DeviceDTO> list2show = new List<DeviceDTO>();
|
|
||||||
foreach (var item in ListDevices)
|
|
||||||
{
|
|
||||||
if (dictCurr.ContainsKey(item.Key))
|
|
||||||
{
|
|
||||||
// sistemo dataora in obj...
|
|
||||||
string rawDate = dictCurr[item.Key];
|
|
||||||
if (DateTime.TryParse(rawDate, out var date))
|
|
||||||
{
|
|
||||||
item.Value.LastUpdate = date;
|
|
||||||
}
|
|
||||||
list2show.Add(item.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ListDev2Show = list2show;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Evento refresh legato a ricezione evento da MessagePipe
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private async Task UpdActMessPipe_EA_NewMessage(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
PubSubEventArgs currArgs = (PubSubEventArgs)e;
|
|
||||||
// qualsiasi messaggio fa scattare reload data
|
|
||||||
if (!string.IsNullOrEmpty(currArgs.newMessage))
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
ReloadTaskStatus();
|
|
||||||
isLoading = false;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
.body-height {
|
|
||||||
min-height: 10rem;
|
|
||||||
}
|
|
||||||
@@ -13,16 +13,13 @@ namespace LiMan.UI.Components
|
|||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback<string> EC_LockIdSel { get; set; }
|
public string searchVal { get; set; } = "";
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string LockId { get; set; } = "";
|
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public int ProdId { get; set; } = 0;
|
public int ProdId { get; set; } = 0;
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string searchVal { get; set; } = "";
|
public string LockId { get; set; } = "";
|
||||||
|
|
||||||
#endregion Public Properties
|
#endregion Public Properties
|
||||||
|
|
||||||
@@ -33,6 +30,21 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
private List<LicenceModel> AllRecords { get; set; } = new List<LicenceModel>();
|
||||||
|
|
||||||
|
private int currPage { get; set; } = 1;
|
||||||
|
|
||||||
|
private bool isLoading { get; set; } = false;
|
||||||
|
|
||||||
|
private List<LicenceModel> ListRecords { get; set; } = new List<LicenceModel>();
|
||||||
|
private int numRecord { get; set; } = 10;
|
||||||
|
private List<LicenceModel> SearchRecords { get; set; } = new List<LicenceModel>();
|
||||||
|
private int totalCount { get; set; } = 0;
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
@@ -46,11 +58,6 @@ namespace LiMan.UI.Components
|
|||||||
// aggiorno
|
// aggiorno
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async Task ReportLockId(string lockId)
|
|
||||||
{
|
|
||||||
await EC_LockIdSel.InvokeAsync(lockId);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setNumPage(int newNum)
|
protected void setNumPage(int newNum)
|
||||||
{
|
{
|
||||||
currPage = newNum;
|
currPage = newNum;
|
||||||
@@ -67,23 +74,16 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
private List<LicenceModel> AllRecords { get; set; } = new List<LicenceModel>();
|
|
||||||
|
|
||||||
private int currPage { get; set; } = 1;
|
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
|
||||||
|
|
||||||
private List<LicenceModel> ListRecords { get; set; } = new List<LicenceModel>();
|
|
||||||
private int numRecord { get; set; } = 10;
|
|
||||||
private List<LicenceModel> SearchRecords { get; set; } = new List<LicenceModel>();
|
|
||||||
private int totalCount { get; set; } = 0;
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
|
||||||
|
protected async Task ReportLockId(string lockId)
|
||||||
|
{
|
||||||
|
await EC_LockIdSel.InvokeAsync(lockId);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<string> EC_LockIdSel { get; set; }
|
||||||
|
|
||||||
private void ReloadAllData()
|
private void ReloadAllData()
|
||||||
{
|
{
|
||||||
// rileggo i dati
|
// rileggo i dati
|
||||||
@@ -91,8 +91,8 @@ namespace LiMan.UI.Components
|
|||||||
if (!string.IsNullOrEmpty(searchVal) || !string.IsNullOrEmpty(LockId))
|
if (!string.IsNullOrEmpty(searchVal) || !string.IsNullOrEmpty(LockId))
|
||||||
{
|
{
|
||||||
SearchRecords = AllRecords
|
SearchRecords = AllRecords
|
||||||
.Where(x => (ProdId == 0 || x.ProductID == ProdId) && (string.IsNullOrEmpty(LockId) || x.LockID.Contains(LockId, StringComparison.CurrentCultureIgnoreCase))
|
.Where(x => (ProdId == 0 || x.ProductID == ProdId) && (string.IsNullOrEmpty(LockId) || x.LockID.Contains(LockId, StringComparison.CurrentCultureIgnoreCase))
|
||||||
&& (string.IsNullOrEmpty(searchVal) || (
|
&& (string.IsNullOrEmpty(searchVal) || (
|
||||||
(!string.IsNullOrEmpty(x.Note) && x.Note.Contains(searchVal, StringComparison.CurrentCultureIgnoreCase))
|
(!string.IsNullOrEmpty(x.Note) && x.Note.Contains(searchVal, StringComparison.CurrentCultureIgnoreCase))
|
||||||
|| x.ProductVersion.ToString().Contains(searchVal, StringComparison.CurrentCultureIgnoreCase)
|
|| x.ProductVersion.ToString().Contains(searchVal, StringComparison.CurrentCultureIgnoreCase)
|
||||||
|| (!string.IsNullOrEmpty(x.Note) && x.Note.Contains(searchVal, StringComparison.CurrentCultureIgnoreCase))
|
|| (!string.IsNullOrEmpty(x.Note) && x.Note.Contains(searchVal, StringComparison.CurrentCultureIgnoreCase))
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
<div class="col-12 col-lg-4 col-xl-6 d-none d-lg-block text-center h4 text-truncate">
|
<div class="col-12 col-lg-4 col-xl-6 d-none d-lg-block text-center h4 text-truncate">
|
||||||
<CmpPageTitle CurrIcon="@PageIcon" CurrName="@PageName"></CmpPageTitle>
|
<CmpPageTitle CurrIcon="@PageIcon" CurrName="@PageName"></CmpPageTitle>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 col-md-6 col-lg-4 col-xl-3 text-end">
|
<div class="col-5 col-md-6 col-lg-4 col-xl-3 text-right">
|
||||||
@if (ShowSearch)
|
@if (ShowSearch)
|
||||||
{
|
{
|
||||||
<SearchMod></SearchMod>
|
<SearchMod></SearchMod>
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
MServ.EA_PageUpdated -= OnPageUpdate;
|
AppMessages.EA_PageUpdated -= OnPageUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnPageUpdate()
|
public void OnPageUpdate()
|
||||||
{
|
{
|
||||||
PageName = MServ.PageName;
|
PageName = AppMessages.PageName;
|
||||||
PageIcon = MServ.PageIcon;
|
PageIcon = AppMessages.PageIcon;
|
||||||
InvokeAsync(() =>
|
InvokeAsync(() =>
|
||||||
{
|
{
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
@@ -36,7 +36,7 @@ namespace LiMan.UI.Components
|
|||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected MessageService MServ { get; set; } = null!;
|
protected MessageService AppMessages { get; set; } = null!;
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
protected LiManDataService DataService { get; set; } = null!;
|
protected LiManDataService DataService { get; set; } = null!;
|
||||||
@@ -51,7 +51,7 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
MServ.EA_PageUpdated += OnPageUpdate;
|
AppMessages.EA_PageUpdated += OnPageUpdate;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
@@ -75,8 +75,8 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
private string userName
|
private string userName
|
||||||
{
|
{
|
||||||
get => MServ.UserName;
|
get => AppMessages.UserName;
|
||||||
set => MServ.UserName = value;
|
set => AppMessages.UserName = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion Private Properties
|
#endregion Private Properties
|
||||||
|
|||||||
@@ -13,61 +13,22 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-10">
|
<div class="col-12 col-lg-10">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-6 col-lg-3">
|
<div class="col-12 col-lg-3">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">
|
<span class="input-group-text">
|
||||||
Codice
|
Codice
|
||||||
</span>
|
</span>
|
||||||
<InputText @bind-Value="@_currItem.CodApp" class="form-control"></InputText>
|
<InputText @bind-Value="@_currItem.CodApp" class="form-control"></InputText>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6 col-lg-3">
|
<div class="col-12 col-lg-9">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">
|
<span class="input-group-text">
|
||||||
Tipo
|
Descrizione
|
||||||
</span>
|
</span>
|
||||||
<InputSelect @bind-Value="_currItem!.Tipo" class="form-select">
|
|
||||||
<option value="">
|
|
||||||
--Selezionare--
|
|
||||||
</option>
|
|
||||||
<option checked="@(_currItem!.Tipo == "WebApp")" value="WebApp">
|
|
||||||
WebApp
|
|
||||||
</option>
|
|
||||||
<option checked="@(_currItem!.Tipo == "WinApp")" value="WinApp">
|
|
||||||
WinApp
|
|
||||||
</option>
|
|
||||||
<option checked="@(_currItem!.Tipo == "Machine")" value="Machine">
|
|
||||||
Machine
|
|
||||||
</option>
|
|
||||||
<option checked="@(_currItem!.Tipo == "Cli")" value="Cli">
|
|
||||||
Cli
|
|
||||||
</option>
|
|
||||||
</InputSelect>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12 col-lg-6">
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text">
|
|
||||||
Descrizione
|
|
||||||
</span>
|
|
||||||
<InputText @bind-Value="@_currItem.Descrizione" class="form-control"></InputText>
|
<InputText @bind-Value="@_currItem.Descrizione" class="form-control"></InputText>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12">
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text">
|
|
||||||
Db ConnString (opz.)
|
|
||||||
</span>
|
|
||||||
@if (UserHasClaim("Admin"))
|
|
||||||
{
|
|
||||||
<InputText @bind-Value="@_currItem.TplConnString" class="form-control"></InputText>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<input class="form-control" disabled type="password" value="********************************************" />
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-2">
|
<div class="col-12 col-lg-2">
|
||||||
|
|||||||
@@ -11,38 +11,22 @@ namespace LiMan.UI.Components
|
|||||||
{
|
{
|
||||||
public partial class EditApplicazioni
|
public partial class EditApplicazioni
|
||||||
{
|
{
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public ApplicativoModel currItem
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _currItem;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_currItem = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public EventCallback<int> DataReset { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public EventCallback<int> DataUpdated { get; set; }
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string UserName { get; set; } = "";
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
|
|
||||||
#region Protected Fields
|
#region Protected Fields
|
||||||
|
|
||||||
protected ApplicativoModel _currItem = new ApplicativoModel();
|
protected ApplicativoModel _currItem = new ApplicativoModel();
|
||||||
|
|
||||||
#endregion Protected Fields
|
#endregion Protected Fields
|
||||||
|
|
||||||
|
#region Private Properties
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
|
[Inject]
|
||||||
|
private NavigationManager NavManager { get; set; }
|
||||||
|
|
||||||
|
#endregion Private Properties
|
||||||
|
|
||||||
#region Protected Properties
|
#region Protected Properties
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
@@ -67,6 +51,51 @@ namespace LiMan.UI.Components
|
|||||||
|
|
||||||
#endregion Protected Properties
|
#endregion Protected Properties
|
||||||
|
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public ApplicativoModel currItem
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _currItem;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_currItem = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<int> DataReset { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public EventCallback<int> DataUpdated { get; set; }
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
|
||||||
|
#region Private Methods
|
||||||
|
|
||||||
|
private async Task cancelUpdate()
|
||||||
|
{
|
||||||
|
await DataReset.InvokeAsync(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task saveUpdate()
|
||||||
|
{
|
||||||
|
if (_currItem != null)
|
||||||
|
{
|
||||||
|
await DataService.ApplicazioniNextUpdate(_currItem);
|
||||||
|
await DataUpdated.InvokeAsync(0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Record null!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Private Methods
|
||||||
|
|
||||||
#region Protected Methods
|
#region Protected Methods
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -81,43 +110,6 @@ namespace LiMan.UI.Components
|
|||||||
return q[parmName] ?? "";
|
return q[parmName] ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected bool UserHasClaim(string ruolo)
|
|
||||||
{
|
|
||||||
return DataService.UserHasClaim(UserName, ruolo);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
#endregion Protected Methods
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
private IJSRuntime JSRuntime { get; set; }
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
private NavigationManager NavManager { get; set; }
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private async Task cancelUpdate()
|
|
||||||
{
|
|
||||||
await DataReset.InvokeAsync(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task saveUpdate()
|
|
||||||
{
|
|
||||||
if (_currItem != null)
|
|
||||||
{
|
|
||||||
await DataService.ApplicNextUpdate(_currItem);
|
|
||||||
await DataUpdated.InvokeAsync(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.WriteLine("Record null!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ namespace LiMan.UI.Components
|
|||||||
_currItem = value;
|
_currItem = value;
|
||||||
var pUpd = Task.Run(async () =>
|
var pUpd = Task.Run(async () =>
|
||||||
{
|
{
|
||||||
ListApp = await DataService.ApplicNextGetAll(false);
|
ListApp = await DataService.ApplicazioniNextGetAll();
|
||||||
ListInstall = await DataService.InstallazioniNextGetAll();
|
ListInstall = await DataService.InstallazioniNextGetAll();
|
||||||
});
|
});
|
||||||
pUpd.Wait();
|
pUpd.Wait();
|
||||||
|
|||||||
@@ -8,6 +8,14 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-12 col-lg-10">
|
<div class="col-12 col-lg-10">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="col-12">
|
||||||
|
<div class="input-group">
|
||||||
|
<span class="input-group-text">
|
||||||
|
Rilascio
|
||||||
|
</span>
|
||||||
|
<InputDate @bind-Value="@_currItem.ReleaseDate" class="form-control text-end"></InputDate>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">
|
<span class="input-group-text">
|
||||||
@@ -24,22 +32,6 @@
|
|||||||
<InputText @bind-Value="@_currItem.VersText" class="form-control text-end"></InputText>
|
<InputText @bind-Value="@_currItem.VersText" class="form-control text-end"></InputText>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4">
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text">
|
|
||||||
Rilascio
|
|
||||||
</span>
|
|
||||||
<InputDate @bind-Value="@_currItem.ReleaseDate" class="form-control text-end"></InputDate>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-8">
|
|
||||||
<div class="input-group">
|
|
||||||
<span class="input-group-text">
|
|
||||||
Tags
|
|
||||||
</span>
|
|
||||||
<InputText @bind-Value="@_currItem.RelTags" class="form-control text-end"></InputText>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-12 col-lg-2">
|
<div class="col-12 col-lg-2">
|
||||||
|
|||||||
@@ -1,284 +0,0 @@
|
|||||||
@if (isLoading)
|
|
||||||
{
|
|
||||||
<LoadingData></LoadingData>
|
|
||||||
}
|
|
||||||
else if (SelRecord != null)
|
|
||||||
{
|
|
||||||
<div class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog" data-keyboard="true">
|
|
||||||
<div class="modal-dialog modal-xl shadow">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header d-flex justify-content-between py-2">
|
|
||||||
<div class="px-2">
|
|
||||||
<h4>Gestione / Assegnazione Licenza</h4>
|
|
||||||
</div>
|
|
||||||
<div class="px-2">
|
|
||||||
<button class="btn my-2 btn-outline-dark w-100" @onclick="ResetSel" title="Torna ad elenco">Chiudi <i class="fa-solid fa-xmark"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body p-0">
|
|
||||||
<div class="row mx-0">
|
|
||||||
<div class="col-8">
|
|
||||||
<div class="card shadow shadow-lg my-1 mx-0">
|
|
||||||
<div class="card-header text-center p-1">
|
|
||||||
<h4 class="mb-0 fw-bold">@($"{SelRecord.Passcode:00 00 00 00}")</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-1">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item d-flex justify-content-between active">
|
|
||||||
<div class="px-0">
|
|
||||||
Richiesta:
|
|
||||||
</div>
|
|
||||||
<div class="px-0">
|
|
||||||
@($"{SelRecord.DtReq:ddd yyyy-MM-dd, HH:MM:ss}")
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
@foreach (var kvp in SelRecord.DictAttrib)
|
|
||||||
{
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-0 small">@kvp.Key:</div>
|
|
||||||
<div class="px-0"><b>@kvp.Value</b></div>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<div class="card shadow shadow-lg my-1 mx-0">
|
|
||||||
<div class="card-header text-center p-1">
|
|
||||||
<h4 class="mb-0">Azioni Ammesse</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
|
|
||||||
@if (ShowAddLic)
|
|
||||||
{
|
|
||||||
<div class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog" data-keyboard="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header d-flex justify-content-between">
|
|
||||||
<div class="px-0">
|
|
||||||
<b>Nuova Licenza Updater</b>
|
|
||||||
</div>
|
|
||||||
<div class="px-0">
|
|
||||||
<button type="button" class="btn btn-dark" data-dismiss="modal" @onclick="ToggleAddNew">Chiudi <i class="fa-solid fa-xmark"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="form-floating">
|
|
||||||
<select id="floatingSelect" @bind="@SelCodInst" class="form-select">
|
|
||||||
<option value="">--- Nessuna selezione ---</option>
|
|
||||||
@if (ListInstall != null)
|
|
||||||
{
|
|
||||||
foreach (var item in ListInstall)
|
|
||||||
{
|
|
||||||
<option value="@item.CodInst">@item.Cliente | @item.CodInst</option>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</select>
|
|
||||||
<label for="floatingSelect">Selezione Cliente/Installazione</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn btn-success btn-lg w-100" @onclick="() => AddLicense()"><i class="fa-solid fa-circle-plus"></i> Crea Nuova Licenza</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
else if (ShowEditLic)
|
|
||||||
{
|
|
||||||
<div class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog" data-keyboard="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header d-flex justify-content-between">
|
|
||||||
<div class="px-0">
|
|
||||||
<b>Edit Licenza Updater</b>
|
|
||||||
</div>
|
|
||||||
<div class="px-0">
|
|
||||||
<button type="button" class="btn btn-dark" data-dismiss="modal" @onclick="ToggleEditLic">Chiudi <i class="fa-solid fa-xmark"></i></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="form-floating">
|
|
||||||
<select id="floatingSelect" @bind="@SelIdxLic" class="form-select">
|
|
||||||
<option value="0">--- Nessuna selezione ---</option>
|
|
||||||
@if (ListLicenze != null)
|
|
||||||
{
|
|
||||||
foreach (var item in ListLicenze)
|
|
||||||
{
|
|
||||||
if (item.Attivazioni.Count < item.NumLicenze)
|
|
||||||
{
|
|
||||||
<option value="@item.IdxLic">@item.CodApp | @item.CodInst | @item.Attivazioni.Count / @item.NumLicenze</option>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<option value="@item.IdxLic" disabled>@item.CodApp | @item.CodInst | @item.Attivazioni.Count / @item.NumLicenze | Esaurito</option>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</select>
|
|
||||||
<label for="floatingSelect">Selezione Licenza Esistente</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
@if (SelIdxLic > 0)
|
|
||||||
{
|
|
||||||
<button class="btn btn-success btn-lg w-100" @onclick="() => AddActivations()" title="Aggiunta attivazioni a licenza selezionata"><i class="fa-solid fa-circle-plus"></i> 10 Attivazioni Licenza</button>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<button class="btn btn-secondary btn-lg w-100" disabled><i class="fa-solid fa-circle-plus"></i> 10 Attivazioni Licenza</button>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
@if (SelRecord.IdxLic == 0)
|
|
||||||
{
|
|
||||||
<button class="btn btn-sm my-2 btn-success w-100" @onclick="ToggleAddNew" title="Aggiunta nuova licenza Cliente (Installazione)">Add New Inst <i class="fa-solid fa-plus"></i></button>
|
|
||||||
}
|
|
||||||
<button class="btn btn-sm btn-primary w-100" @onclick="ToggleEditLic" title="incrementa numero Attivazioni permesse per Licenza Cliente (Installazione) già attiva">Incrementa # Attivazioni permesse <i class="fa-solid fa-edit"></i></button>
|
|
||||||
<div class="row my-3">
|
|
||||||
<div class="col-12">
|
|
||||||
@if (SelRecord.IdxLic == 0)
|
|
||||||
{
|
|
||||||
<div>
|
|
||||||
<b>Assegnazione a Cliente/Installazione</b>
|
|
||||||
</div>
|
|
||||||
<div class="form-floating">
|
|
||||||
<select id="floatingSelect" @bind="@SelIdxLic" class="form-select">
|
|
||||||
<option value="0">--- Nessuna selezione ---</option>
|
|
||||||
@if (ListLicenze != null)
|
|
||||||
{
|
|
||||||
foreach (var item in ListLicenze)
|
|
||||||
{
|
|
||||||
if (item.Attivazioni.Count < item.NumLicenze)
|
|
||||||
{
|
|
||||||
<option value="@item.IdxLic">@item.CodApp | @item.CodInst | @item.Attivazioni.Count / @item.NumLicenze</option>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<option value="@item.IdxLic" disabled>@item.CodApp | @item.CodInst | @item.Attivazioni.Count / @item.NumLicenze | Esaurito</option>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</select>
|
|
||||||
<label for="floatingSelect">Selezione Licenza Esistente</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@if (string.IsNullOrEmpty(SelRecord.UserAppr) && SelIdxLic > 0)
|
|
||||||
{
|
|
||||||
<button class="btn btn-success btn-lg w-100 my-2" @onclick="() => DoApprove()"><i class="fa-regular fa-thumbs-up"></i> Approva + Assegna Licenza</button>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<ul class="list-group my-3">
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-1">Licenza assegnata: </div>
|
|
||||||
<div class="px-1"><b>@SelRecord.IdxLic</b></div>
|
|
||||||
</li>
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-1">Approvatore: </div>
|
|
||||||
<div class="px-1"><b>@SelRecord.UserAppr</b></div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@if (!string.IsNullOrEmpty(SelRecord.UserAppr))
|
|
||||||
{
|
|
||||||
<button class="btn btn-sm btn-danger w-100" @onclick="DoDelete" title="Elimina Enroll ed attivazione dalla Licenza collegata">Elimina Enroll + Attivazione <i class="fa-solid fa-trash"></i></button>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
else if (SearchRecords == null || SearchRecords.Count == 0)
|
|
||||||
{
|
|
||||||
<div class="alert alert-warning p-2 m-2 text-center">No record Found</div>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
@foreach (var item in ListRecords)
|
|
||||||
{
|
|
||||||
<div class="col-3 px-1">
|
|
||||||
<div class="card shadow shadow-lg m-2">
|
|
||||||
<div class="card-header text-center">
|
|
||||||
<h3>@($"{item.Passcode:00 00 00 00}")</h3>
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-1">
|
|
||||||
<ul class="list-group">
|
|
||||||
<li class="list-group-item d-flex justify-content-between active">
|
|
||||||
<div class="px-0">
|
|
||||||
Richiesta:
|
|
||||||
</div>
|
|
||||||
<div class="px-0">
|
|
||||||
@($"{item.DtReq:ddd yyyy-MM-dd, HH:MM:ss}")
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
@if (item.DictNumKVP() > nShort)
|
|
||||||
{
|
|
||||||
|
|
||||||
@foreach (var kvp in item.DictAttribShort(nShort))
|
|
||||||
{
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-0 small">@kvp.Key:</div>
|
|
||||||
<div class="px-0"><b>@kvp.Value</b></div>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-0">
|
|
||||||
@if (string.IsNullOrEmpty(item.UserAppr))
|
|
||||||
{
|
|
||||||
<button class="btn btn-success btn-sm" @onclick="() => DoSelect(item)">Select</button>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<button class="btn btn-secondary btn-sm" @onclick="() => DoSelect(item)">ShowDetail</button>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="px-0"><i>...@(item.DictNumKVP() - nShort) more</i></div>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@foreach (var kvp in item.DictAttrib)
|
|
||||||
{
|
|
||||||
<li class="list-group-item d-flex justify-content-between">
|
|
||||||
<div class="px-0">@kvp.Key:</div>
|
|
||||||
<div class="px-0"> <b>@kvp.Value</b> </div>
|
|
||||||
</li>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
<div class="d-flex justify-content-between small">
|
|
||||||
<div class="px-1">UpdateManager</div>
|
|
||||||
<div class="px-1 fw-bold">@(DescrLic(item.IdxLic))</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="card-footer">
|
|
||||||
@if (totalCount > numRecord)
|
|
||||||
{
|
|
||||||
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="setNumRec" numPageChanged="setNumPage" totalCount="totalCount" showLoading="isLoading" PageSizeList="PageList" />
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@@ -1,359 +0,0 @@
|
|||||||
using Liman.CadCam.Services;
|
|
||||||
using LiMan.DB;
|
|
||||||
using LiMan.DB.DBModels;
|
|
||||||
using LiMan.UI.Data;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using Microsoft.AspNetCore.Components.Authorization;
|
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using NLog.LayoutRenderers;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
|
|
||||||
namespace LiMan.UI.Components
|
|
||||||
{
|
|
||||||
public partial class EnrollList : IDisposable
|
|
||||||
{
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public DateTime DtEnd { get; set; } = DateTime.Today.AddDays(1);
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public DateTime DtStart { get; set; } = DateTime.Today.AddMonths(-1);
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public int IdxLicSel { get; set; } = 0;
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public bool OnlyActive { get; set; } = true;
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public string SearchVal { get; set; } = "";
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Metodo dispose
|
|
||||||
/// </summary>
|
|
||||||
public virtual void Dispose()
|
|
||||||
{
|
|
||||||
LMDService.EnrollMessPipe.EA_NewMessage -= async (sender, e) => await EnrollMessPipe_EA_NewMessage(sender, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected AuthenticationStateProvider AuthStateProvider { get; set; } = null!;
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected LiManDataService LMDService { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Aggiunge all licenza selezionata altri 10 slot...
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected async Task AddActivations()
|
|
||||||
{
|
|
||||||
// chiedo conferma...
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler aggiungere 10 ulteriori slot alla licenza {SelCodInst}? L'operazione non è reversibile"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var currLic = LMDService.LicenzaNextGetByIdx(SelIdxLic);
|
|
||||||
currLic.NumLicenze += 10;
|
|
||||||
// aggiorno chiave calcolata
|
|
||||||
currLic.Chiave = currLic.ChiaveCalc;
|
|
||||||
await LMDService.LicenzeNextUpdate(currLic);
|
|
||||||
LMDService.EnrollMessPipe.sendMessage("LicUpdated");
|
|
||||||
ShowAddLic = false;
|
|
||||||
ShowEditLic = false;
|
|
||||||
await ReloadLicData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Aggiunge la licenza selezionata x 10 slot...
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected async Task AddLicense()
|
|
||||||
{
|
|
||||||
// chiedo conferma...
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler aggiungere la richiesta per l'installazione {SelCodInst}? L'operazione non è reversibile"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
LicenzaModel newLic = new LicenzaModel()
|
|
||||||
{
|
|
||||||
CodApp = "UpdateManager",
|
|
||||||
CodInst = SelCodInst,
|
|
||||||
NumLicenze = 10,
|
|
||||||
Tipo = TipoLicenza.MasterKey,
|
|
||||||
Scadenza = new DateTime(2099, 12, 31),
|
|
||||||
Descrizione = "Licenza per Richieste Enroll Applicativi",
|
|
||||||
Enigma = "",
|
|
||||||
Payload = "",
|
|
||||||
};
|
|
||||||
// aggiungo chiave calcolata
|
|
||||||
newLic.Chiave = newLic.ChiaveCalc;
|
|
||||||
await LMDService.LicenzeNextUpdate(newLic);
|
|
||||||
LMDService.EnrollMessPipe.sendMessage("LicAdded");
|
|
||||||
ShowAddLic = false;
|
|
||||||
ShowEditLic = false;
|
|
||||||
await ReloadLicData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Recupera info licenza dato Idx x indicare licenza di assegnazione dell'enroll
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="idxLic"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected string DescrLic(int idxLic)
|
|
||||||
{
|
|
||||||
string answ = "NA";
|
|
||||||
if (idxLic > 0 && ListLicenze != null && ListLicenze.Count > 0)
|
|
||||||
{
|
|
||||||
var sRec = ListLicenze.FirstOrDefault(x => x.IdxLic == idxLic);
|
|
||||||
if (sRec != null)
|
|
||||||
{
|
|
||||||
answ = $"{sRec.CodInst}";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task DoApprove()
|
|
||||||
{
|
|
||||||
// chiedo conferma...
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler confermare la richiesta?"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var authState = await AuthStateProvider.GetAuthenticationStateAsync();
|
|
||||||
var user = authState.User;
|
|
||||||
|
|
||||||
if (user.Identity.IsAuthenticated && !string.IsNullOrEmpty(user.Identity.Name))
|
|
||||||
{
|
|
||||||
// registra approvazione
|
|
||||||
SelRecord.DtAppr = DateTime.Now;
|
|
||||||
SelRecord.UserAppr = user.Identity.Name;
|
|
||||||
SelRecord.IdxLic = SelIdxLic;
|
|
||||||
await LMDService.EnrollReqUpsert(SelRecord);
|
|
||||||
LMDService.EnrollMessPipe.sendMessage("AppApproved");
|
|
||||||
SelRecord = null;
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task DoDelete()
|
|
||||||
{
|
|
||||||
if (SelRecord != null)
|
|
||||||
{
|
|
||||||
// chiedo conferma...
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler eliminare il record?"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// cerca l'attivazione collegata x DeviceID (contenuto nel payload) e se lo trova la elimina
|
|
||||||
List<SubLicenzaModel> listAtt = await LMDService.AttivazioniGetByLic(SelRecord.IdxLic);
|
|
||||||
// se ne ho trovate cerco...
|
|
||||||
if (listAtt.Count > 0)
|
|
||||||
{
|
|
||||||
var dictPayload = JsonConvert.DeserializeObject<Dictionary<string, string>>(SelRecord.ReqPayload);
|
|
||||||
if (dictPayload != null && dictPayload.Count > 0)
|
|
||||||
{
|
|
||||||
string DeviceID = "";
|
|
||||||
if (dictPayload.ContainsKey("DeviceID"))
|
|
||||||
{
|
|
||||||
DeviceID = dictPayload["DeviceID"];
|
|
||||||
}
|
|
||||||
// cerco attivazioni correlate (tutte)
|
|
||||||
var rec2del = listAtt.Where(x => x.CodImpiego == DeviceID).ToList();
|
|
||||||
if (rec2del != null)
|
|
||||||
{
|
|
||||||
foreach (var rec in rec2del)
|
|
||||||
{
|
|
||||||
// elimino InstRel data
|
|
||||||
int numDel = LMDService.InstallRelDelBySubLic(rec.IdxSubLic);
|
|
||||||
// elimino attivazioni
|
|
||||||
await LMDService.AttivazioneDelete(rec.IdxSubLic);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await LMDService.EnrollReqDelete(SelRecord.IdReq);
|
|
||||||
await Task.Delay(10);
|
|
||||||
SelRecord = null;
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task DoSelect(EnrollRequestModel curRec)
|
|
||||||
{
|
|
||||||
SelRecord = curRec;
|
|
||||||
await ReloadLicData();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// init sottoscrizione messaggi + refresh dati
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
protected override async Task OnInitializedAsync()
|
|
||||||
{
|
|
||||||
LMDService.EnrollMessPipe.EA_NewMessage += async (sender, e) => await EnrollMessPipe_EA_NewMessage(sender, e);
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override async Task OnParametersSetAsync()
|
|
||||||
{
|
|
||||||
await ReloadLicData();
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task ResetSel()
|
|
||||||
{
|
|
||||||
SelRecord = null;
|
|
||||||
await ReloadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task setNumPage(int newNum)
|
|
||||||
{
|
|
||||||
currPage = newNum;
|
|
||||||
await ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async Task setNumRec(int newNum)
|
|
||||||
{
|
|
||||||
currPage = 1;
|
|
||||||
numRecord = newNum;
|
|
||||||
await ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void ToggleAddNew()
|
|
||||||
{
|
|
||||||
ShowAddLic = !ShowAddLic;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void ToggleEditLic()
|
|
||||||
{
|
|
||||||
ShowEditLic = !ShowEditLic;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private List<InstallazioneModel> ListInstall;
|
|
||||||
private List<LicenzaModel> ListLicenze;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// num max di dettagli KVP da mostrare
|
|
||||||
/// </summary>
|
|
||||||
private int nShort = 3;
|
|
||||||
|
|
||||||
private List<int> PageList = new List<int>() { 4, 8, 12, 16, 24, 48 };
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Codice installazione selezionata
|
|
||||||
/// </summary>
|
|
||||||
private string SelCodInst = "";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Idx licenza selezionata
|
|
||||||
/// </summary>
|
|
||||||
private int SelIdxLic = 0;
|
|
||||||
|
|
||||||
private bool ShowAddLic = false;
|
|
||||||
private bool ShowEditLic = false;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
private int currPage { get; set; } = 1;
|
|
||||||
|
|
||||||
private bool isLoading { get; set; } = false;
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
private IJSRuntime JSRuntime { get; set; }
|
|
||||||
|
|
||||||
private List<EnrollRequestModel> ListRecords { get; set; } = new List<EnrollRequestModel>();
|
|
||||||
|
|
||||||
private int numRecord { get; set; } = 8;
|
|
||||||
|
|
||||||
private List<EnrollRequestModel> SearchRecords { get; set; } = new List<EnrollRequestModel>();
|
|
||||||
|
|
||||||
private EnrollRequestModel? SelRecord { get; set; } = null;
|
|
||||||
|
|
||||||
private int totalCount { get; set; } = 0;
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Evento refresh legato a ricezione evento da MessagePipe
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private async Task EnrollMessPipe_EA_NewMessage(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
PubSubEventArgs currArgs = (PubSubEventArgs)e;
|
|
||||||
// qualsiasi messaggio fa scattare reload data
|
|
||||||
if (!string.IsNullOrEmpty(currArgs.newMessage))
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
//await InvokeAsync(StateHasChanged);
|
|
||||||
await LMDService.FlushEnrollCache();
|
|
||||||
//await Task.Delay(50);
|
|
||||||
await ReloadData();
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ReloadData()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
SearchRecords = await LMDService.EnrollReqGetFilt(OnlyActive, DtStart, DtEnd);
|
|
||||||
if (IdxLicSel > 0)
|
|
||||||
{
|
|
||||||
SearchRecords = SearchRecords.Where(x => x.IdxLic == IdxLicSel).ToList();
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrEmpty(SearchVal))
|
|
||||||
{
|
|
||||||
SearchRecords = SearchRecords.Where(x => $"{x.Passcode}".Contains(SearchVal)).ToList();
|
|
||||||
}
|
|
||||||
totalCount = SearchRecords.Count;
|
|
||||||
ListRecords = SearchRecords
|
|
||||||
.Skip((currPage - 1) * numRecord)
|
|
||||||
.Take(numRecord)
|
|
||||||
.ToList();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task ReloadLicData()
|
|
||||||
{
|
|
||||||
SelectNext currFilt = new SelectNext()
|
|
||||||
{
|
|
||||||
ApplicazioneSel = "UpdateManager"
|
|
||||||
};
|
|
||||||
var rawList = await LMDService.LicenzeNextGetFilt(currFilt);
|
|
||||||
ListLicenze = rawList
|
|
||||||
.OrderBy(x => x.CodApp)
|
|
||||||
.ThenBy(x => x.CodInst)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
ListInstall = await LMDService.InstallazioniNextGetAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
<div class="row p-0">
|
|
||||||
<div class="@CssDivMain px-1">
|
|
||||||
<div class="card shadow">
|
|
||||||
<div class="card-header">
|
|
||||||
<div class="text-end">Vers. Corrente: <b>@CurrRecord.VersNumCurrent</b></div>
|
|
||||||
</div>
|
|
||||||
<div class="card-body p-1">
|
|
||||||
<table class="table table-sm table-striped table-responsive-lg small">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
<button class="btn btn-sm btn-dark @CssResetCli" title="Rimuovi Filtro Cliente" @onclick="ResetCliente"><i class="fa-solid fa-rotate-right"></i> Cliente</button>
|
|
||||||
<Sorter ParamName="CodInst" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
<button class="btn btn-sm btn-primary @CssResetImp" title="Rimuovi Filtro Dispositivo" @onclick="ResetCodImp"><i class="fa-solid fa-rotate-right"></i> Dispositivo</button>
|
|
||||||
<Sorter ParamName="PcInst" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
@if (!HasFiltImp)
|
|
||||||
{
|
|
||||||
<th>
|
|
||||||
# Lic.
|
|
||||||
<Sorter ParamName="NumImp" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
<th class="text-end">
|
|
||||||
Versione
|
|
||||||
<Sorter ParamName="VersNumInstall" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
}
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach (var record in ListRecord)
|
|
||||||
{
|
|
||||||
<tr>
|
|
||||||
<td>
|
|
||||||
<button class="btn btn-sm @CssBtnInst(record.CodInst) py-1 text-truncate" title="Fissa Cliente" @onclick="() => SetCliente(record)"><i class="fa-solid fa-location-crosshairs"></i> @record.Cliente</button>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<button class="btn btn-sm @CssBtnImp(record.CodImp) py-1 text-truncate" title="Fissa Dispositivo" @onclick="() => SetCodImp(record)"><i class="fa-solid fa-location-crosshairs"></i> @record.PcInst</button>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
@if (!HasFiltImp)
|
|
||||||
{
|
|
||||||
<td>@record.NumImp</td>
|
|
||||||
<td class="text-end @cssVers(record)">@record.VersNumInstall</td>
|
|
||||||
}
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
@if (totalCount > numRecord)
|
|
||||||
{
|
|
||||||
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="setNumRec" numPageChanged="setNumPage" totalCount="totalCount" showLoading="isLoading" />
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="@CssDivDetail px-2">
|
|
||||||
@if (HasFiltImp)
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-5 px-1">
|
|
||||||
<div class="mb-1">
|
|
||||||
<ListAppShort AppList="AppInstList" EC_ReqUpdateApp="ProcReqUpdate"></ListAppShort>
|
|
||||||
</div>
|
|
||||||
<div class="mb-1">
|
|
||||||
<ListInfoShort Title="License Data" DetailInfo="LicInfo" EnabAbbrev="true" MaxKeyChar="30"></ListInfoShort>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-7 px-1">
|
|
||||||
<div class="mb-1">
|
|
||||||
<ListInfoShort Title="Device Info" DetailInfo="DevInfo"></ListInfoShort>
|
|
||||||
</div>
|
|
||||||
<div class="mb-1">
|
|
||||||
<ListInfoShort Title="Updater Stats" DetailInfo="RunStats"></ListInfoShort>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<div class="card shadow">
|
|
||||||
<div class="card-header">
|
|
||||||
<b>Distribuzione</b>
|
|
||||||
</div>
|
|
||||||
<div class="card-body px-1 py-3">
|
|
||||||
<Doughnut Id="RelVers" Type="@Doughnut.ChartType.Doughnut" Data="@ChartData" Labels="ChartLabels" BackgroundColor="@ChartColor" BordWidth="1"></Doughnut>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,582 +0,0 @@
|
|||||||
using EgwCoreLib.Razor.Data;
|
|
||||||
using LiMan.DB;
|
|
||||||
using LiMan.DB.DTO;
|
|
||||||
using LiMan.UI.Data;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using Microsoft.IdentityModel.Tokens;
|
|
||||||
using Microsoft.JSInterop;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using Org.BouncyCastle.Ocsp;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static Core.Enum;
|
|
||||||
using static EgwCoreLib.Razor.Sorter;
|
|
||||||
|
|
||||||
namespace LiMan.UI.Components
|
|
||||||
{
|
|
||||||
public partial class InstAppPareto : IDisposable
|
|
||||||
{
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public List<AppRelStatusDTO> AppDetList { get; set; } = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public AppStatusDTO CurrRecord { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
|
|
||||||
#region Public Methods
|
|
||||||
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
LMDService.TaskMessPipe.EA_NewMessage -= async (sender, e) => await TaskMessPipe_EA_NewMessage(sender, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Public Methods
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected IJSRuntime JSRuntime { get; set; } = null!;
|
|
||||||
|
|
||||||
protected List<AppRelStatusDTO> ListRecord { get; set; } = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected LiManDataService LMDService { get; set; } = null!;
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MServ { get; set; } = null!;
|
|
||||||
|
|
||||||
protected List<AppRelStatusDTO> SearchRecord { get; set; } = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
LMDService.TaskMessPipe.EA_NewMessage += async (sender, e) => await TaskMessPipe_EA_NewMessage(sender, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnParametersSet()
|
|
||||||
{
|
|
||||||
ReloadData();
|
|
||||||
ReloadTaskStatus();
|
|
||||||
ReloadTaskResults();
|
|
||||||
ReloadCharts();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reset filtro cliente...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currRec"></param>
|
|
||||||
protected void ResetCliente()
|
|
||||||
{
|
|
||||||
HasFlitCli = false;
|
|
||||||
CodInstSel = "";
|
|
||||||
// salvo nelle preferenze i valori CodImp e PcInst
|
|
||||||
MServ.UsrParamSet("Cliente", "");
|
|
||||||
MServ.UsrParamSet("CodInst", "");
|
|
||||||
MServ.UsrParamSet("CodImp", "");
|
|
||||||
MServ.UsrParamSet("PcInst", "");
|
|
||||||
MServ.UsrParamSet("PcRestart", "");
|
|
||||||
MServ.UsrParamSet("PcIP", "");
|
|
||||||
MServ.UsrParamSet("Version", "");
|
|
||||||
// Richiedo azione x gestione dettaglio info
|
|
||||||
MServ.ReportSelCodInst();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Reset filtro PC/Impiego...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currRec"></param>
|
|
||||||
protected void ResetCodImp()
|
|
||||||
{
|
|
||||||
HasFiltImp = false;
|
|
||||||
CodImpSel = "";
|
|
||||||
// salvo nelle preferenze i valori CodImp e PcInst
|
|
||||||
MServ.UsrParamSet("CodImp", "");
|
|
||||||
MServ.UsrParamSet("PcInst", "");
|
|
||||||
MServ.UsrParamSet("PcRestart", "");
|
|
||||||
MServ.UsrParamSet("PcIP", "");
|
|
||||||
MServ.UsrParamSet("Version", "");
|
|
||||||
// Richiedo azione x gestione dettaglio info
|
|
||||||
MServ.ReportSelCodImp();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set filtro cliente...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currRec"></param>
|
|
||||||
protected void SetCliente(AppRelStatusDTO currRec)
|
|
||||||
{
|
|
||||||
HasFlitCli = true;
|
|
||||||
CodInstSel = currRec.CodInst;
|
|
||||||
// salvo nelle preferenze i valori CodImp e PcInst
|
|
||||||
MServ.UsrParamSet("Cliente", currRec.Cliente);
|
|
||||||
MServ.UsrParamSet("CodInst", currRec.CodInst);
|
|
||||||
MServ.UsrParamSet("CodImp", "");
|
|
||||||
MServ.UsrParamSet("PcInst", "");
|
|
||||||
MServ.UsrParamSet("PcRestart", "");
|
|
||||||
MServ.UsrParamSet("PcIP", "");
|
|
||||||
MServ.UsrParamSet("Version", "");
|
|
||||||
// Richiedo azione x gestione dettaglio info
|
|
||||||
MServ.ReportSelCodInst();
|
|
||||||
// se era selezionato impianto lo deseleziona...
|
|
||||||
if (HasFiltImp)
|
|
||||||
{
|
|
||||||
CodImpSel = "";
|
|
||||||
HasFiltImp = false;
|
|
||||||
MServ.ReportSelCodImp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Set filtro PC/Impiego...
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="currRec"></param>
|
|
||||||
protected void SetCodImp(AppRelStatusDTO currRec)
|
|
||||||
{
|
|
||||||
HasFiltImp = true;
|
|
||||||
CodImpSel = currRec.CodImp;
|
|
||||||
AppInstList = AppDetList
|
|
||||||
.Where(x => x.CodImp == currRec.CodImp && x.IdxSubLic == currRec.IdxSubLic)
|
|
||||||
.ToList();
|
|
||||||
// se era selezionato cliente lo riseleziono...
|
|
||||||
if (HasFlitCli)
|
|
||||||
{
|
|
||||||
CodInstSel = currRec.CodInst;
|
|
||||||
MServ.ReportSelCodInst();
|
|
||||||
}
|
|
||||||
// salvo nelle preferenze i valori CodImp e PcInst
|
|
||||||
MServ.UsrParamSet("Cliente", currRec.Cliente);
|
|
||||||
MServ.UsrParamSet("CodInst", currRec.CodInst);
|
|
||||||
MServ.UsrParamSet("CodImp", currRec.CodImp);
|
|
||||||
MServ.UsrParamSet("PcInst", currRec.PcInst);
|
|
||||||
MServ.UsrParamSet("PcRestart", "");
|
|
||||||
MServ.UsrParamSet("PcIP", "");
|
|
||||||
MServ.UsrParamSet("Version", "");
|
|
||||||
ReloadTaskStatus();
|
|
||||||
ReloadTaskResults();
|
|
||||||
// cerco in stats info
|
|
||||||
if (RunStats != null && RunStats.Count > 0)
|
|
||||||
{
|
|
||||||
if (RunStats.ContainsKey("Startup"))
|
|
||||||
{
|
|
||||||
MServ.UsrParamSet("PcRestart", RunStats["Startup"]);
|
|
||||||
}
|
|
||||||
if (RunStats.ContainsKey("Version"))
|
|
||||||
{
|
|
||||||
MServ.UsrParamSet("Version", RunStats["Version"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// cerco nei device info
|
|
||||||
if (DevInfo != null && DevInfo.Count > 0)
|
|
||||||
{
|
|
||||||
string ipKey = "Int.0.Ipv4";
|
|
||||||
var recFound = DevInfo.Where(x => x.Key.StartsWith(ipKey)).ToList();
|
|
||||||
if (recFound.Count > 0)
|
|
||||||
{
|
|
||||||
var recIp = recFound.FirstOrDefault();
|
|
||||||
if (recIp.Key.StartsWith(ipKey))
|
|
||||||
{
|
|
||||||
MServ.UsrParamSet("PcIP", recIp.Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Richiedo azione x gestione dettaglio info
|
|
||||||
MServ.ReportSelCodImp();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setNumPage(int newNum)
|
|
||||||
{
|
|
||||||
currPage = newNum;
|
|
||||||
ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setNumRec(int newNum)
|
|
||||||
{
|
|
||||||
currPage = 1;
|
|
||||||
numRecord = newNum;
|
|
||||||
ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void SortRequested(SortCallBack e)
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
if (sortField == e.ParamName)
|
|
||||||
{
|
|
||||||
sortAsc = e.IsAscending;
|
|
||||||
}
|
|
||||||
sortField = e.ParamName;
|
|
||||||
ReloadData();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private List<AppRelStatusDTO> AppInstList = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
private List<DoughnutStyling> ChartColor = new List<DoughnutStyling>();
|
|
||||||
|
|
||||||
private double[] ChartData = new double[1];
|
|
||||||
|
|
||||||
private string[] ChartLabels = new string[1];
|
|
||||||
|
|
||||||
private string CodImpSel = "";
|
|
||||||
|
|
||||||
private string CodInstSel = "";
|
|
||||||
|
|
||||||
private int currPage = 1;
|
|
||||||
|
|
||||||
private Dictionary<string, string> DevInfo = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
private bool HasFiltImp = false;
|
|
||||||
|
|
||||||
private bool HasFlitCli = false;
|
|
||||||
|
|
||||||
private bool isLoading = false;
|
|
||||||
|
|
||||||
private Dictionary<string, string> LicInfo = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
private int numRecord = 10;
|
|
||||||
|
|
||||||
private Dictionary<string, string> RunStats = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
private bool showDetail = false;
|
|
||||||
|
|
||||||
private string sKey = "InstAppPareto";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Elenco task eseguiti
|
|
||||||
/// </summary>
|
|
||||||
private Dictionary<string, string> TaskDone = new Dictionary<string, string>();
|
|
||||||
|
|
||||||
private int totalCount = 0;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
private string CssDivDetail
|
|
||||||
{
|
|
||||||
get => HasFiltImp ? "col-9" : "col-5";
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CssDivMain
|
|
||||||
{
|
|
||||||
get => HasFiltImp ? "col-3" : "col-7";
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CssResetCli
|
|
||||||
{
|
|
||||||
get => HasFlitCli ? "" : "disabled";
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CssResetImp
|
|
||||||
{
|
|
||||||
get => HasFiltImp ? "" : "disabled";
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool sortAsc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
var sVal = MServ.UsrParamGet($"{sKey}_sort");
|
|
||||||
if (!string.IsNullOrEmpty(sVal))
|
|
||||||
{
|
|
||||||
bool.TryParse(sVal, out answ);
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
set => MServ.UsrParamSet($"{sKey}_sort", $"{value}");
|
|
||||||
}
|
|
||||||
|
|
||||||
private string sortField
|
|
||||||
{
|
|
||||||
get => MServ.UsrParamGet($"{sKey}_field");
|
|
||||||
set => MServ.UsrParamSet($"{sKey}_field", $"{value}");
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private string CssBtnImp(string CodImp)
|
|
||||||
{
|
|
||||||
return HasFiltImp && CodImpSel == CodImp ? "btn-primary" : "btn-outline-primary";
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CssBtnInst(string CodInst)
|
|
||||||
{
|
|
||||||
return HasFlitCli && CodInstSel == CodInst ? "btn-dark" : "btn-outline-dark";
|
|
||||||
}
|
|
||||||
|
|
||||||
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 void MServ_EA_TaskUpdate()
|
|
||||||
{
|
|
||||||
ReloadTaskStatus();
|
|
||||||
ReloadTaskResults();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Registrazione richiesta update app remota
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="selRec"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private async Task ProcReqUpdate(AppRelStatusDTO selRec)
|
|
||||||
{
|
|
||||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler forzare update applicativo {selRec.CodApp} sul Device? Eventuali configurazioni presenti saranno ripristinate, altrimenti andrà verificato manualmente l'esito dell'operazione."))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// invio task update applicazione
|
|
||||||
LMDService.TaskReqAdd(CodImpSel, EgwAccTask.TargetAppUpdate, selRec.CodApp);
|
|
||||||
ReloadTaskStatus();
|
|
||||||
ReloadTaskResults();
|
|
||||||
// invio notifica update...
|
|
||||||
LMDService.UpdActMessPipe.sendMessage(selRec.CodApp);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReloadCharts()
|
|
||||||
{
|
|
||||||
// sistemo info x grafico... se ho impieghi uso quello, altrimenti istanze...
|
|
||||||
if (CurrRecord.NumImp > 0)
|
|
||||||
{
|
|
||||||
ChartData = SearchRecord
|
|
||||||
.GroupBy(x => x.VersNumInstall)
|
|
||||||
.Select(g => (double)g.Sum(x => x.NumImp))
|
|
||||||
.ToArray();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ChartData = SearchRecord
|
|
||||||
.GroupBy(x => x.VersNumInstall)
|
|
||||||
.Select(g => (double)g.Count())
|
|
||||||
.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
ChartLabels = SearchRecord
|
|
||||||
.GroupBy(x => x.VersNumInstall)
|
|
||||||
.Select(g => g.Key)
|
|
||||||
.ToArray();
|
|
||||||
ChartColor.Clear();
|
|
||||||
var listStatus = SearchRecord
|
|
||||||
.GroupBy(x => x.VersNumInstall)
|
|
||||||
.Select(g => g.First().UpToDateStatus)
|
|
||||||
.ToList();
|
|
||||||
foreach (var item in listStatus)
|
|
||||||
{
|
|
||||||
switch (item)
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
ChartColor.Add(new DoughnutStyling("#12FF06", "#006900"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
ChartColor.Add(new DoughnutStyling("#ABFF69", "#11AA11"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
ChartColor.Add(new DoughnutStyling("#FFE493", "#AAFF00"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
ChartColor.Add(new DoughnutStyling("#FF6900", "#953500"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
ChartColor.Add(new DoughnutStyling("#AA3600", "#AA0000"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ReloadData()
|
|
||||||
{
|
|
||||||
SearchRecord = CurrRecord.DetailInstalled;
|
|
||||||
totalCount = SearchRecord.Count;
|
|
||||||
switch (sortField)
|
|
||||||
{
|
|
||||||
case "NumImp":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.NumImp).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.NumImp).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "VersNumInstall":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.VersNumInstall).ThenBy(x => x.PcInst).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.VersNumInstall).ThenBy(x => x.PcInst).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "PcInst":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.PcInst).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.PcInst).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "CodInst":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.CodInst).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.CodInst).ThenByDescending(x => x.VersNumInstall).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SearchRecord = SearchRecord
|
|
||||||
.OrderByDescending(x => x.VersNumInstall)
|
|
||||||
.ThenBy(x => x.CodInst)
|
|
||||||
.ThenBy(x => x.PcInst)
|
|
||||||
.ToList();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// paginazione
|
|
||||||
ListRecord = SearchRecord
|
|
||||||
.Skip((currPage - 1) * numRecord)
|
|
||||||
.Take(numRecord)
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Rilegge risultato task come obj specifici in area DONE...
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
private void ReloadTaskResults()
|
|
||||||
{
|
|
||||||
DevInfo = new Dictionary<string, string>();
|
|
||||||
RunStats = new Dictionary<string, string>();
|
|
||||||
LicInfo = new Dictionary<string, string>();
|
|
||||||
if (TaskDone != null && TaskDone.Count > 0)
|
|
||||||
{
|
|
||||||
// cerco Device Info specifiche
|
|
||||||
string devInfoKey = $"{EgwAccTask.DeviceInfoGet}";
|
|
||||||
if (TaskDone.ContainsKey(devInfoKey))
|
|
||||||
{
|
|
||||||
string rawData = TaskDone[devInfoKey];
|
|
||||||
if (!string.IsNullOrEmpty(rawData) && rawData.Count() > 2)
|
|
||||||
{
|
|
||||||
DevInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// cerco Info Stats
|
|
||||||
if (TaskDone.ContainsKey("RunStats"))
|
|
||||||
{
|
|
||||||
string rawData = TaskDone["RunStats"];
|
|
||||||
if (!string.IsNullOrEmpty(rawData) && rawData.Count() > 2)
|
|
||||||
{
|
|
||||||
RunStats = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// cerco Info License
|
|
||||||
if (TaskDone.ContainsKey("LicInfo"))
|
|
||||||
{
|
|
||||||
string rawData = TaskDone["LicInfo"];
|
|
||||||
if (!string.IsNullOrEmpty(rawData) && rawData.Count() > 2)
|
|
||||||
{
|
|
||||||
LicInfo = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Esegue update stato task
|
|
||||||
/// </summary>
|
|
||||||
private void ReloadTaskStatus()
|
|
||||||
{
|
|
||||||
TaskDone = new Dictionary<string, string>();
|
|
||||||
if (!string.IsNullOrEmpty(CodImpSel))
|
|
||||||
{
|
|
||||||
TaskDone = LMDService.TaskDoneGet(CodImpSel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Evento refresh legato a ricezione evento da MessagePipe
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private async Task TaskMessPipe_EA_NewMessage(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
PubSubEventArgs currArgs = (PubSubEventArgs)e;
|
|
||||||
// qualsiasi messaggio fa scattare reload data
|
|
||||||
if (!string.IsNullOrEmpty(currArgs.newMessage))
|
|
||||||
{
|
|
||||||
// verifico se sia il cod impianto selezionato, nel faso forzo refreesh...
|
|
||||||
if (!string.IsNullOrEmpty(CodImpSel) && CodImpSel.Equals(currArgs.newMessage))
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
ReloadTaskStatus();
|
|
||||||
ReloadTaskResults();
|
|
||||||
isLoading = false;
|
|
||||||
await InvokeAsync(StateHasChanged);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
<div class="card shadow">
|
|
||||||
<div class="card-header">
|
|
||||||
@if (CurrRecord == null)
|
|
||||||
{
|
|
||||||
<b>Applicazioni</b>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<span>Detail Info: <b>@CurrRecord.CodApp</b> | <span class="small">v.@CurrRecord.VersNumCurrent</span></span>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
@if (isLoading)
|
|
||||||
{
|
|
||||||
<LoadingData DisplayMode="LoadingData.SpinMode.BounceLine"></LoadingData>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@if (AppStats == null || AppStats.Count == 0)
|
|
||||||
{
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
Nessun record trovato
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
<div class="row">
|
|
||||||
@if (!HasCodImp)
|
|
||||||
{
|
|
||||||
<div class="@tblColMain">
|
|
||||||
<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
|
|
||||||
<Sorter ParamName="CodApp" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
@if (CurrRecord == null)
|
|
||||||
{
|
|
||||||
<th class="text-end">
|
|
||||||
# Copie
|
|
||||||
<Sorter ParamName="NumInst" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
<th class="text-end">
|
|
||||||
# Licenze
|
|
||||||
<Sorter ParamName="NumImp" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
<th class="text-end">
|
|
||||||
Versione
|
|
||||||
<Sorter ParamName="VersNumCurrent" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</th>
|
|
||||||
<th class="text-end ms-1">
|
|
||||||
Stato
|
|
||||||
<Sorter ParamName="UpdateScore" IsAsc="@sortAsc" CurrParam="@sortField" sortReq="SortRequested"></Sorter>
|
|
||||||
</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 class="text-end">@record.NumInst</td>
|
|
||||||
<td class="text-end">@record.NumImp</td>
|
|
||||||
<td class="text-end">@record.VersNumCurrent</td>
|
|
||||||
<td class="ms-1">
|
|
||||||
<InstUp2DateDispl CurrRecord="record"></InstUp2DateDispl>
|
|
||||||
</td>
|
|
||||||
}
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@if (CurrRecord != null)
|
|
||||||
{
|
|
||||||
<div class="@tblColDet">
|
|
||||||
<InstAppPareto CurrRecord="CurrRecord" AppDetList="AppRelList"></InstAppPareto>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
|
||||||
@if (totalCount > numRecord)
|
|
||||||
{
|
|
||||||
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="setNumRec" numPageChanged="setNumPage" totalCount="totalCount" showLoading="isLoading" />
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -1,276 +0,0 @@
|
|||||||
using LiMan.DB.DTO;
|
|
||||||
using LiMan.UI.Data;
|
|
||||||
using Microsoft.AspNetCore.Components;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using static EgwCoreLib.Razor.Sorter;
|
|
||||||
|
|
||||||
namespace LiMan.UI.Components
|
|
||||||
{
|
|
||||||
public partial class InstAppRelStatus : IDisposable
|
|
||||||
{
|
|
||||||
public void Dispose()
|
|
||||||
{
|
|
||||||
MServ.EA_SelCodApp -= MServ_EA_SelCodApp;
|
|
||||||
MServ.EA_SelCodImp -= MServ_EA_SelCodImp;
|
|
||||||
MServ.EA_SelCodInst -= MServ_EA_SelCodInst;
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Public Properties
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public List<AppStatusDTO> AppStats { get; set; } = new List<AppStatusDTO>();
|
|
||||||
|
|
||||||
[Parameter]
|
|
||||||
public List<AppRelStatusDTO> AppRelList { get; set; } = new List<AppRelStatusDTO>();
|
|
||||||
|
|
||||||
#endregion Public Properties
|
|
||||||
|
|
||||||
#region Protected Properties
|
|
||||||
|
|
||||||
[Inject]
|
|
||||||
protected MessageService MServ { get; set; } = null!;
|
|
||||||
|
|
||||||
#endregion Protected Properties
|
|
||||||
|
|
||||||
#region Protected Methods
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(sortField))
|
|
||||||
{
|
|
||||||
sortField = "NumInst";
|
|
||||||
sortAsc = false;
|
|
||||||
}
|
|
||||||
MServ.EA_SelCodApp += MServ_EA_SelCodApp;
|
|
||||||
MServ.EA_SelCodImp += MServ_EA_SelCodImp;
|
|
||||||
MServ.EA_SelCodInst += MServ_EA_SelCodInst;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MServ_EA_SelCodApp()
|
|
||||||
{
|
|
||||||
// cerco codApp sel...
|
|
||||||
string newCodApp = MServ.UsrParamGet("CodApp");
|
|
||||||
if (!CodAppSel.Equals(newCodApp))
|
|
||||||
{
|
|
||||||
var recSel = AppStats.FirstOrDefault(x => x.CodApp == newCodApp);
|
|
||||||
DoSelect(recSel);
|
|
||||||
}
|
|
||||||
CodAppSel = newCodApp;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MServ_EA_SelCodInst()
|
|
||||||
{
|
|
||||||
string newCodInst = MServ.UsrParamGet("CodInst");
|
|
||||||
if (!CodInstSel.Equals(newCodInst) && !string.IsNullOrEmpty(CodInstSel))
|
|
||||||
{
|
|
||||||
DoSelect(null);
|
|
||||||
}
|
|
||||||
CodInstSel = newCodInst;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Selezionato CodImp (PC)
|
|
||||||
/// </summary>
|
|
||||||
private void MServ_EA_SelCodImp()
|
|
||||||
{
|
|
||||||
CodImpSel = MServ.UsrParamGet("CodImp");
|
|
||||||
HasCodImp = !string.IsNullOrEmpty(CodImpSel);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string CodAppSel = "";
|
|
||||||
private string CodImpSel = "";
|
|
||||||
private string CodInstSel = "";
|
|
||||||
private bool HasCodImp = false;
|
|
||||||
|
|
||||||
protected override void OnParametersSet()
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
UpdateTable();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setNumPage(int newNum)
|
|
||||||
{
|
|
||||||
currPage = newNum;
|
|
||||||
UpdateTable();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setNumRec(int newNum)
|
|
||||||
{
|
|
||||||
numRecord = newNum;
|
|
||||||
currPage = 1;
|
|
||||||
UpdateTable();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void SortRequested(SortCallBack e)
|
|
||||||
{
|
|
||||||
isLoading = true;
|
|
||||||
if (sortField == e.ParamName)
|
|
||||||
{
|
|
||||||
sortAsc = e.IsAscending;
|
|
||||||
}
|
|
||||||
sortField = e.ParamName;
|
|
||||||
UpdateTable();
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Protected Methods
|
|
||||||
|
|
||||||
#region Private Fields
|
|
||||||
|
|
||||||
private int currPage = 1;
|
|
||||||
private bool isLoading = false;
|
|
||||||
private int numRecord = 10;
|
|
||||||
private string sKey = "InstAppRelStatus";
|
|
||||||
private int totalCount = 0;
|
|
||||||
|
|
||||||
#endregion Private Fields
|
|
||||||
|
|
||||||
#region Private Properties
|
|
||||||
|
|
||||||
private AppStatusDTO? CurrRecord { get; set; } = null;
|
|
||||||
|
|
||||||
private List<AppStatusDTO> ListRecord { get; set; } = new List<AppStatusDTO>();
|
|
||||||
|
|
||||||
private List<AppStatusDTO> SearchRecord { get; set; } = new List<AppStatusDTO>();
|
|
||||||
|
|
||||||
private bool sortAsc
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
var sVal = MServ.UsrParamGet($"{sKey}_sort");
|
|
||||||
if (!string.IsNullOrEmpty(sVal))
|
|
||||||
{
|
|
||||||
bool.TryParse(sVal, out answ);
|
|
||||||
}
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
set => MServ.UsrParamSet($"{sKey}_sort", $"{value}");
|
|
||||||
}
|
|
||||||
|
|
||||||
private string sortField
|
|
||||||
{
|
|
||||||
get => MServ.UsrParamGet($"{sKey}_field");
|
|
||||||
set => MServ.UsrParamSet($"{sKey}_field", $"{value}");
|
|
||||||
}
|
|
||||||
|
|
||||||
private string tblColMain
|
|
||||||
{
|
|
||||||
get => CurrRecord == null ? "col-12" : HasCodImp ? "col-1" : "col-3";
|
|
||||||
}
|
|
||||||
private string tblColDet
|
|
||||||
{
|
|
||||||
get => CurrRecord == null ? "col-1" : HasCodImp ? "col-12" : "col-9";
|
|
||||||
}
|
|
||||||
#endregion Private Properties
|
|
||||||
|
|
||||||
#region Private Methods
|
|
||||||
|
|
||||||
private string checkSelect(string codApp)
|
|
||||||
{
|
|
||||||
string answ = (CurrRecord != null && codApp == CurrRecord.CodApp) ? "table-info" : "";
|
|
||||||
return answ;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Selezoine record corrente
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="selRec"></param>
|
|
||||||
private void DoSelect(AppStatusDTO selRec)
|
|
||||||
{
|
|
||||||
CurrRecord = selRec;
|
|
||||||
CodAppSel = selRec != null ? selRec.CodApp : "";
|
|
||||||
MServ.UsrParamSet("CodApp", CodAppSel);
|
|
||||||
string numApp = selRec != null ? $"{selRec.NumInst}" : "";
|
|
||||||
MServ.UsrParamSet("NumApp", numApp);
|
|
||||||
string numLic = selRec != null ? $"{selRec.NumImp}" : "";
|
|
||||||
MServ.UsrParamSet("NumLic", numLic);
|
|
||||||
string lastVers = selRec != null ? selRec.VersNumCurrent : "";
|
|
||||||
MServ.UsrParamSet("LastVers", lastVers);
|
|
||||||
string score = selRec != null ? $"{selRec.UpdateScore:P1}" : "";
|
|
||||||
MServ.UsrParamSet("Score", score);
|
|
||||||
MServ.ReportSelCodApp();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateTable()
|
|
||||||
{
|
|
||||||
SearchRecord = AppStats;
|
|
||||||
totalCount = SearchRecord.Count;
|
|
||||||
switch (sortField)
|
|
||||||
{
|
|
||||||
case "CodApp":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.CodApp).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.CodApp).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "NumInst":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.NumInst).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.NumInst).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "NumImp":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.NumImp).ThenByDescending(x => x.NumInst).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.NumImp).ThenByDescending(x => x.NumInst).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "VersNumCurrent":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.VersNumCurrent).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.VersNumCurrent).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "UpdateScore":
|
|
||||||
if (sortAsc)
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderBy(x => x.UpdateScore).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SearchRecord = SearchRecord.OrderByDescending(x => x.UpdateScore).ThenByDescending(x => x.NumImp).ToList();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
SearchRecord = SearchRecord
|
|
||||||
.OrderByDescending(x => x.NumImp)
|
|
||||||
.ThenByDescending(x => x.NumInst)
|
|
||||||
.ToList();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ListRecord = SearchRecord
|
|
||||||
.Skip((currPage - 1) * numRecord)
|
|
||||||
.Take(numRecord)
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Private Methods
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user