Compare commits

...

98 Commits

Author SHA1 Message Date
Samuele E. Locatelli 755423cf78 Merge branch 'release/FixDataInsertOverflow' 2021-10-01 19:56:08 +02:00
Samuele E. Locatelli 36f6dc50bc Completata review senza log verboso e con decimazione dati a 1 h 2021-10-01 19:55:28 +02:00
Samuele E. Locatelli a43383557b Modifica metodo ceiling minuti x fix overfow insert 2021-10-01 19:48:51 +02:00
Samuele Locatelli daff2dce2b arrotondamento date limite x inserimento 2021-10-01 17:21:06 +02:00
Samuele Locatelli 4ccef56363 Aumento log inserting 2021-10-01 17:16:19 +02:00
Samuele Locatelli 6b48308ffa test cambio calcolo item da inserire 2021-10-01 17:11:47 +02:00
Samuele Locatelli 2c22f46061 Fix calcolo candidati da inserire (maybe) 2021-10-01 16:55:35 +02:00
Samuele Locatelli 36b800f1d6 forzo scrittura ogni 2minuti x esasperare ricalcolo 2021-10-01 16:41:37 +02:00
Samuele Locatelli 7b74df99e6 Aggiunti log trace x esecuzione PlantLogInsert 2021-10-01 16:40:06 +02:00
Samuele Locatelli 32e0a73d48 Merge tag 'TestSimUfficio02' into develop
Miglioramento SIM livello x GWMS
2021-10-01 16:11:33 +02:00
Samuele Locatelli ddf5d8ab40 Merge branch 'release/TestSimUfficio02' 2021-10-01 16:11:12 +02:00
Samuele Locatelli c300547118 refresh parametri 2021-10-01 16:10:56 +02:00
Samuele Locatelli bebfbcf75a Merge tag 'TestSimUfficio01' into develop
Fix sim x ufficio Ok --> OK x risposta SIM
2021-10-01 15:00:38 +02:00
Samuele Locatelli 1ba07bff35 Merge branch 'release/TestSimUfficio01' 2021-10-01 15:00:24 +02:00
Samuele Locatelli 92ad0517c2 FIx restituzione valore Ok --> OK x SIM 2021-10-01 15:00:04 +02:00
Samuele Locatelli 580c488e4c Rimesso UI x check health 2021-09-30 18:21:34 +02:00
Samuele Locatelli f6fb441dec Merge tag 'TestHealthCheck02' into develop
test senza interfaccia UI health
2021-09-30 17:16:23 +02:00
Samuele Locatelli b5635c4cf7 Merge branch 'release/TestHealthCheck02' 2021-09-30 17:16:13 +02:00
Samuele Locatelli 516623d5a0 Eliminata interfaccia check UI x ridurre presisone RAM 2021-09-30 17:15:57 +02:00
Samuele Locatelli bb5a44ff7c Merge tag 'TestHealthCheck01' into develop
test checks + frequenti
2021-09-30 16:23:46 +02:00
Samuele Locatelli 8e3cd6a2c8 Merge branch 'release/TestHealthCheck01' 2021-09-30 16:23:36 +02:00
Samuele Locatelli a185f9754a health check + frequenti x test 2021-09-30 16:21:21 +02:00
Samuele Locatelli e77ec8d5ff tolto timers inutilizzato 2021-09-30 16:21:01 +02:00
Samuele Locatelli d026fb7353 Merge tag 'AddPlantSetup' into develop
Aggiunta gestione parametri PlantSetup
2021-09-29 16:43:22 +02:00
Samuele Locatelli 4d24590902 Merge branch 'release/AddPlantSetup' 2021-09-29 16:43:12 +02:00
Samuele Locatelli c1f1705856 Aggiunta gestione parametri setup impianti 2021-09-29 16:42:51 +02:00
Samuele Locatelli 3769bd8e0f Merge tag 'FixDbCOntext' into develop
Fix DB COntext (x evitare dispose brutali)
2021-09-29 14:06:20 +02:00
Samuele Locatelli bbd3fc4998 Merge branch 'release/FixDbCOntext' 2021-09-29 14:06:08 +02:00
Samuele Locatelli e1f0b7e0f5 COmpletata review metodi x usare sempre contesti disosable 2021-09-29 14:05:17 +02:00
Samuele Locatelli 9e5e9bc66c Update gestione dbCtx con using locale 2021-09-29 13:19:45 +02:00
Samuele Locatelli 48286d15bc Eliminazione reset controller preliminare da apgine 2021-09-29 12:47:46 +02:00
Samuele Locatelli e4a0c17731 Merge tag 'FixMigrateError' into develop
Fix migrate error in creazione dbCtx
2021-09-29 12:15:55 +02:00
Samuele Locatelli fac885cd89 Merge branch 'release/FixMigrateError' 2021-09-29 12:15:35 +02:00
Samuele Locatelli 77754d6779 ancora udpate migrations 2021-09-29 12:12:24 +02:00
Samuele Locatelli e56aa02c38 Update x evitare troppe chiamate migrations 2021-09-29 12:12:16 +02:00
Samuele Locatelli cc71653a7a Merge branch 'develop' 2021-09-29 09:52:38 +02:00
Samuele Locatelli 2b4ee79730 refresh 2021-09-29 09:52:12 +02:00
Samuele Locatelli cf74810a34 Refresh 2021-09-29 09:51:54 +02:00
Samuele Locatelli 96c5ba5a54 Aggiunta pag test con auth anonimo 2021-09-29 09:51:48 +02:00
Samuele Locatelli 5a09496266 Merge branch 'develop' 2021-09-28 19:05:05 +02:00
Samuele Locatelli 7ca8af530e init date rivisto 2021-09-28 19:04:58 +02:00
Samuele Locatelli d2be5171bf Update x fondoscala costante 30'000 x tutti i plant 2021-09-28 18:50:06 +02:00
Samuele Locatelli f293c754f9 Merge tag 'RecTOutParam' into develop
Fix ricezione timeout aprametrica
2021-09-28 17:53:34 +02:00
Samuele Locatelli dec2787cd6 Refresh 2021-09-28 17:52:31 +02:00
Samuele Locatelli f5792d10aa Fix timeout display online parametrico 2021-09-28 17:52:23 +02:00
Samuele Locatelli 4ca8d4c236 Merge branch 'develop' 2021-09-24 14:59:42 +02:00
Samuele Locatelli 27ed5e0d8e Pagina Load esplicita 2021-09-24 14:59:28 +02:00
Samuele Locatelli 8c0cf93305 Merge tag 'FixQrCodeScanner' into develop
Fix QrScanner GasStation --> GastStationLoad
2021-09-24 14:45:48 +02:00
Samuele Locatelli 049ec8bbdb Merge branch 'hotfix/FixQrCodeScanner' 2021-09-24 14:45:27 +02:00
Samuele Locatelli 7500e1abfb Merge branch 'develop' into hotfix/FixQrCodeScanner 2021-09-24 14:45:18 +02:00
Samuele Locatelli bfb5bc15a1 Refresh versione 2021-09-24 14:45:11 +02:00
Samuele Locatelli 3c61ef3976 RImbalzo GastStation --> GasStationLoad x reload ordine 2021-09-24 14:44:26 +02:00
Samuele Locatelli a53c557bec Merge tag 'HistPlantPage' into develop
Aggiunta pagina x analisi storico ordini e carichi
2021-09-23 15:37:45 +02:00
Samuele Locatelli 1d4cc9d174 Merge branch 'release/HistPlantPage' 2021-09-23 15:37:35 +02:00
Samuele Locatelli 19a15ea9f2 Completato editing ed update ordini mancanti 2021-09-23 15:36:49 +02:00
Samuele Locatelli dd91fe353c Fix comportamento cambio selezione data 2021-09-23 11:57:56 +02:00
Samuele Locatelli 08df606bf2 Fix display icone con span intorno a fontawesome 2021-09-23 11:24:53 +02:00
Samuele Locatelli 132718ee79 Update identity 2021-09-23 10:53:02 +02:00
Samuele Locatelli 3f35dfe505 Update Nuget MySql 2021-09-23 10:52:31 +02:00
Samuele Locatelli 44a3e2d093 Update Nuget EFCore 2021-09-23 10:52:13 +02:00
Samuele Locatelli 2d32617d3c NUget Update NLog + Blazorise 2021-09-23 10:51:10 +02:00
Samuele Locatelli 0f8593a4a3 Update x mostrare dati anailsi carichi 2021-09-23 10:50:35 +02:00
Samuele Locatelli 3cad5ac58b Fix selezione e bozza pagina storico impianti 2021-09-23 10:02:42 +02:00
Samuele Locatelli a6a1afa826 Aggiunto DTO x calcolo livelli summary quotidiani 2021-09-23 10:02:30 +02:00
Samuele Locatelli 052c56b903 Correzione chiamate InvokeAsync inutili 2021-09-22 19:18:46 +02:00
Samuele Locatelli 1df85b32ee Merge tag 'PubNexusFix' into develop
Fix pubblicazione Nexus (path versioni)
2021-09-22 19:04:00 +02:00
Samuele Locatelli e1cc60a5c9 Merge branch 'release/PubNexusFix' 2021-09-22 19:03:50 +02:00
Samuele Locatelli 7f7370f6fe Fix posizione resources x install nexus 2021-09-22 19:02:06 +02:00
Samuele Locatelli 861911eb64 Test deploy unstable 2021-09-22 18:58:20 +02:00
Samuele Locatelli ed33783f49 Merge tag 'PageMarginFix' into develop
Page Margin Fix
2021-09-22 18:29:49 +02:00
Samuele Locatelli e3433962fa Merge branch 'release/PageMarginFix' 2021-09-22 18:29:30 +02:00
Samuele Locatelli 442d419460 Update grafico x visualizzazione 2021-09-22 18:28:53 +02:00
Samuele Locatelli c82cd1ed8b Refresh layout 2021-09-10 19:30:38 +02:00
Samuele Locatelli 23f7e9c726 Refresh log refresh 2021-09-10 19:30:11 +02:00
Samuele Locatelli c71a592ab3 Merge tag 'Jenkins2GitLab' into develop
Completato porting conf tag win x test nuovi runners
2021-09-02 12:11:43 +02:00
Samuele Locatelli c848168552 Merge branch 'release/Jenkins2GitLab' 2021-09-02 12:11:24 +02:00
Samuele Locatelli d95a19af32 Taggato job come "win" x selezionare runners 2021-09-02 11:39:52 +02:00
Samuele Locatelli c5e4f95b94 update nav menu 2021-09-02 11:30:29 +02:00
Samuele Locatelli 35e00bdb71 Aggiunta update await x lettura in transporters 2021-09-02 11:30:25 +02:00
Samuele Locatelli 8948984b44 Merge tag 'RC11' into develop
Test modifica suppliers/transporters
2021-09-01 09:36:47 +02:00
Samuele Locatelli 58f8d2aee3 Merge branch 'release/RC11' 2021-09-01 09:36:38 +02:00
Samuele Locatelli 951a704b52 Pérova modifica reset controller per errore online 2021-09-01 09:36:23 +02:00
Samuele Locatelli d518861228 Merge tag 'RC10' into develop
Test fix catena reload data
2021-09-01 09:04:59 +02:00
Samuele Locatelli 32a0fa1287 Merge branch 'release/RC10' 2021-09-01 09:04:50 +02:00
Samuele Locatelli 33212941c8 Test modifica naming x chiamate che danno errori in OVH 2021-09-01 09:04:34 +02:00
Samuele Locatelli 59975a335d Merge tag 'RC9' into develop
Fix reanming local db context
2021-08-31 16:49:12 +02:00
Samuele Locatelli 390046a0c7 Merge branch 'release/RC9' 2021-08-31 16:49:02 +02:00
Samuele Locatelli 149f6251f7 Renaming localDbCtx 2021-08-31 16:48:48 +02:00
Samuele Locatelli 46a0efe748 Merge tag 'RC8' into develop
Fix display grafici su mobile
2021-08-31 16:32:02 +02:00
Samuele Locatelli ace620b09d Merge branch 'release/RC8' 2021-08-31 16:31:36 +02:00
Samuele Locatelli 3d87f28004 Fix QRCode size on small device 2021-08-31 16:31:06 +02:00
Samuele Locatelli b7071dcbe1 Fix display QRCode (test) 2021-08-31 16:26:11 +02:00
Samuele Locatelli fdf937131c Fix display grafici 2021-08-31 16:21:57 +02:00
Samuele Locatelli 1b8a19b036 Merge tag 'RC7' into develop
Update indicazione aggiornamento dati realtime/vecchi
2021-08-30 12:39:31 +02:00
Samuele Locatelli 86bd0f375c Merge branch 'release/RC7' 2021-08-30 12:39:06 +02:00
Samuele Locatelli 9e1d437563 Aggiunta indicazione trasmisisone RTime / vecchia 2021-08-30 12:38:20 +02:00
Samuele Locatelli 6bd54468dd Modifica logging (meno verboso) e rallentamento check UI 2021-08-30 12:13:27 +02:00
Samuele Locatelli 52a71d236d Merge tag 'RC6' into develop
Inserite trappole x log + verboso
2021-08-30 11:58:51 +02:00
54 changed files with 2562 additions and 655 deletions
+15 -37
View File
@@ -1,10 +1,4 @@
variables:
# NUGET_PATH: 'C:\Tools\nuget.exe'
# MSBUILD_PATH: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe'
# ASPNET_MERGE_PATH: 'C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools'
# EXE_RELEASE_FOLDER: 'c:\Projetcs\Compiled\GPW\Release'
# DEPLOY_FOLDER: 'c:\Projects\Deploy\GPW\Builds'
# NEW_REL: ''
VERS_MAIN: '0.9'
NEXUS_PATH: 'GWMS'
APP_NAME: 'GWMS.UI'
@@ -14,9 +8,9 @@ variables:
- |
$hasSource = C:\Tools\nuget.exe sources list | find "`"Steamware Nexus`"" /C
if ($hasSource -eq 0) {
C:\Tools\nuget.exe sources Add -Name "`"Steamware Nexus`"" -Source http://nexus.steamware.net/repository/nuget-group -username "`"nugetUser`"" -password "`"viaDante16`""
C:\Tools\nuget.exe sources Add -Name "`"Steamware Nexus`"" -Source https://nexus.steamware.net/repository/nuget-group -username "`"nugetUser`"" -password "`"viaDante16`""
} else {
C:\Tools\nuget.exe sources Update -Name "`"Steamware Nexus`"" -Source http://nexus.steamware.net/repository/nuget-group -username "`"nugetUser`"" -password "`"viaDante16`""
C:\Tools\nuget.exe sources Update -Name "`"Steamware Nexus`"" -Source https://nexus.steamware.net/repository/nuget-group -username "`"nugetUser`"" -password "`"viaDante16`""
}
echo $hasSource
@@ -52,11 +46,12 @@ variables:
$File2Send = Get-ChildItem($env:APP_NAME + "\bin\publish\*")
ForEach ($File in $File2Send) {
$FileName = Split-Path $File -leaf
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File http://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/0/$FileName
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File http://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/$VersNumb/$FileName
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/$FileName
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/ARCHIVE/$VersNumb/$FileName
}
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "Resources\manifest.xml" http://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/0/manifest.xml
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "Resources\ChangeLog.html" http://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/0/ChangeLog.html
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "Resources\manifest.xml" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/manifest.xml
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "Resources\ChangeLog.html" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/ChangeLog.html
# mCurl -v -u $env:NEXUS_USER:$env:NEXUS_PASSWD --upload-file bin/release/$env:APP_NAME.zip $env:NEXUS_SERVER/utility/$env:NEXUS_PATH/$version/$env:APP_NAME-$version.zip
@@ -64,12 +59,13 @@ variables:
stages:
- build
- test
# - deploy
- installer
- release
build:
stage: build
tags:
- win
before_script:
- *nuget-fix
- dotnet restore GWMS.sln
@@ -78,38 +74,18 @@ build:
test:
stage: test
tags:
- win
only:
- develop
needs: ["build"]
script:
- dotnet test -p:Configuration=Release GWMS.UI/GWMS.UI.csproj
# IIS01:deploy:
# stage: deploy
# only:
# - develop
# needs: ["test"]
# # before_script:
# # - *nuget-fix
# # - dotnet restore
# script:
# - dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true GWMS.UI/GWMS.UI.csproj
# IIS02:deploy:
# stage: deploy
# only:
# - master
# needs: ["build"]
# # before_script:
# # - *nuget-fix
# # - dotnet restore
# script:
# - dotnet publish -p:PublishProfile=IIS02.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true GWMS.UI/GWMS.UI.csproj
# - dotnet publish -p:PublishProfile=W2019-IIS-DEVProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true GWMS.UI/GWMS.UI.csproj
installer:
stage: installer
tags:
- win
only:
- develop
- master
@@ -127,6 +103,8 @@ installer:
release:
stage: release
tags:
- win
only:
#- feature/Deploy_CI_CD
# - master
+35
View File
@@ -0,0 +1,35 @@
{
"version": "0.2.0",
"configurations": [
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/GWMS.UI/bin/Debug/net5.0/GWMS.UI.dll",
"args": [],
"cwd": "${workspaceFolder}/GWMS.UI",
"stopAtEntry": false,
// Enable launching a web browser when ASP.NET Core starts. For more information: https://aka.ms/VSCode-CS-LaunchJson-WebBrowser
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)"
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach"
}
]
}
+42
View File
@@ -0,0 +1,42 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/GWMS.UI/GWMS.UI.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/GWMS.UI/GWMS.UI.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/GWMS.UI/GWMS.UI.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
}
+402 -156
View File
@@ -15,7 +15,6 @@ namespace GWMS.Data.Controllers
#region Private Fields
private static IConfiguration _configuration;
private static GWMSContext dbCtx;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
@@ -25,8 +24,6 @@ namespace GWMS.Data.Controllers
public GWMSController(IConfiguration configuration)
{
_configuration = configuration;
dbCtx = new GWMSContext(configuration);
Log.Info("Avviata classe GWMSController");
}
#endregion Public Constructors
@@ -41,33 +38,57 @@ namespace GWMS.Data.Controllers
/// <returns></returns>
public DateTime DateRoundEnd(DateTime dateOrig, int minInt)
{
int minRound = (int)Math.Ceiling((double)dateOrig.Minute / minInt) * minInt;
// calcolo con minuto + 0.5 per poter arrotondare in modo corretto sennò se 0 min e qualche secondo --> diventa floor e arrotonda x difetto...
int minRound = (int)Math.Ceiling(((double)dateOrig.Minute + 0.5) / minInt) * minInt;
DateTime roundDate = dateOrig.Date.AddHours(dateOrig.Hour).AddMinutes(minRound);
return roundDate;
}
public bool DbForceMigrate()
{
bool answ = false;
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
try
{
localDbCtx.DbForceMigrate();
answ = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione in DbForceMigrate");
}
}
return answ;
}
public void Dispose()
{
// Clear database context
dbCtx.Dispose();
Log.Info("Dispose di GWMSController");
//Log.Info("Dispose di GWMSController");
}
public List<ConfigModel> GetConfig()
{
var dbResult = dbCtx
List<ConfigModel> dbResult = new List<ConfigModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetConfig
.ToList();
}
return dbResult;
}
public List<ItemModel> GetItems()
{
var dbResult = dbCtx
List<ItemModel> dbResult = new List<ItemModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetItems
.ToList();
}
return dbResult;
}
@@ -87,9 +108,28 @@ namespace GWMS.Data.Controllers
return dbResult;
}
public OrderModel GetOrderById(int OrderId)
{
OrderModel dbResult = new OrderModel();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetOrders
.Where(x => (x.OrderId == OrderId))
.Include(p => p.Plant)
.Include(s => s.Supplier)
.Include(t => t.Transporter)
.FirstOrDefault();
}
return dbResult;
}
public List<OrderModel> GetOrdersFilt(int PlantId, int SupplierId, int TransporterId, DateTime DtStart, DateTime DtEnd, bool ShowClosed)
{
var dbResult = dbCtx
List<OrderModel> dbResult = new List<OrderModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetOrders
.Where(x => (x.PlantId == PlantId || PlantId == 0) && (x.SupplierId == SupplierId || SupplierId == 0) && (x.TransporterId == TransporterId || TransporterId == 0) && (x.DtOrder >= DtStart && x.DtOrder <= DtEnd) && (x.ExecutionQty == 0 || ShowClosed))
.Include(p => p.Plant)
@@ -97,13 +137,16 @@ namespace GWMS.Data.Controllers
.Include(t => t.Transporter)
.OrderByDescending(x => x.DtOrder)
.ToList();
}
return dbResult;
}
public List<OrderModel> GetOrdersOpen(int PlantId)
{
var dbResult = dbCtx
List<OrderModel> dbResult = new List<OrderModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetOrders
.Where(x => (x.PlantId == PlantId || PlantId == 0) && (x.DtExecStart < x.DtOrder))
.Include(p => p.Plant)
@@ -111,17 +154,20 @@ namespace GWMS.Data.Controllers
.Include(t => t.Transporter)
.OrderByDescending(x => x.DtOrder)
.ToList();
}
return dbResult;
}
public PlantDetailModel GetPlant(int PlantId)
{
var dbResult = dbCtx
PlantDetailModel dbResult = new PlantDetailModel();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetPlant
.Where(x => x.PlantId == PlantId)
.FirstOrDefault();
}
return dbResult;
}
@@ -134,31 +180,133 @@ namespace GWMS.Data.Controllers
/// <returns></returns>
public List<PlantLogModel> GetPlantLog(int PlantId, DateTime DtMaxDate, int numRec)
{
var dbResult = dbCtx
List<PlantLogModel> dbResult = new List<PlantLogModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetPlantLog
.Where(x => (x.PlantId == PlantId || PlantId == 0) && x.DtEvent <= DtMaxDate)
.OrderByDescending(x => x.DtEvent)
.Take(numRec)
.ToList();
}
return dbResult;
}
/// <summary>
/// Elenco in formato di lista DTO resoconti giornalieri x Plant
/// - elenco record livelli giornalieri
/// - elenco record ordini giornalieri
/// - valori start/end/min/max giornalieri x livello
/// </summary>
/// <param name="PlantId">codice plant</param>
/// <param name="DtStart">data inizio</param>
/// <param name="DtEnd">data fine</param>
/// <returns></returns>
public List<PlantLevSumDTO> GetPlantLogSummary(int PlantId, DateTime DtStart, DateTime DtEnd)
{
List<PlantLevSumDTO> dbResult = new List<PlantLevSumDTO>();
if (PlantId > 0)
{
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var dbLevels = localDbCtx
.DbSetPlantLog
.Where(x => x.PlantId == PlantId && x.FluxType == "Level" && x.DtEvent <= DtEnd && x.DtEvent > DtStart)
.OrderBy(x => x.DtEvent)
.ToList();
var dbOrders = localDbCtx
.DbSetOrders
.Where(x => (x.PlantId == PlantId) && x.DtExecStart <= DtEnd && x.DtExecStart > DtStart)
.OrderBy(x => x.DtExecStart)
.ToList();
var dbPlant = localDbCtx
.DbSetPlant
.Where(x => x.PlantId == PlantId)
.FirstOrDefault();
// ora ricostruisco i record in uscita... ciclando data x data...
DateTime dataCurr = DtStart.Date;
int numDays = DtEnd.Subtract(DtStart).Days;
for (int i = 0; i < numDays; i++)
{
dataCurr = DtStart.Date.AddDays(i);
// recupero i dati della gioranta indicata
var currLevelTS = dbLevels
.Where(x => x.DtEvent > dataCurr && x.DtEvent <= dataCurr.AddDays(1))
.Select(x => new TSData() { DtEvent = x.DtEvent, ValDouble = x.ValNumber })
.ToList();
// SOLO SE ho almeno 1 record livello
if (currLevelTS.Count > 0)
{
PlantLevSumDTO newRec = new PlantLevSumDTO()
{
PlantId = PlantId,
PlantCode = dbPlant.PlantCode,
PlantDesc = dbPlant.PlantDesc,
DataRif = dataCurr
};
// se ho dati giornalieri li aggiungo...
if (currLevelTS.Count > 0)
{
var minRecord = currLevelTS
.OrderBy(x => x.ValDouble)
.FirstOrDefault();
var maxRecord = currLevelTS
.OrderByDescending(x => x.ValDouble)
.FirstOrDefault();
newRec.LevelTS = currLevelTS;
newRec.LevelStart = currLevelTS
.OrderBy(x => x.DtEvent)
.FirstOrDefault().ValDouble;
newRec.LevelEnd = currLevelTS
.OrderByDescending(x => x.DtEvent)
.FirstOrDefault().ValDouble;
newRec.LevelMin = minRecord.ValDouble;
newRec.FillStart = minRecord.DtEvent;
newRec.LevelMax = maxRecord.ValDouble;
newRec.FillEnd = maxRecord.DtEvent;
}
if (dbOrders.Count > 0)
{
newRec.OrderTS = dbOrders
.Where(x => x.DtExecStart >= dataCurr && x.DtExecStart < dataCurr.AddDays(1))
.Select(x => new TSData() { DtEvent = x.DtOrder, ValDouble = x.OrderQty }).ToList();
newRec.OrdersIds = dbOrders
.Where(x => x.DtExecStart >= dataCurr && x.DtExecStart < dataCurr.AddDays(1))
.Select(x => x.OrderId).ToList();
}
dbResult.Add(newRec);
}
}
dbResult = dbResult.OrderByDescending(x => x.DataRif).ToList();
}
}
// restituisco riordinato DESC
return dbResult;
}
public List<PlantDetailModel> GetPlants()
{
var dbResult = dbCtx
List<PlantDetailModel> dbResult = new List<PlantDetailModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetPlant
.ToList();
}
return dbResult;
}
public List<PlantDTO> GetPlantsDTO(int maxRecords)
{
List<PlantDTO> dbResult = new List<PlantDTO>();
using (GWMSContext dbCtxMult = new GWMSContext(_configuration))
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var plantList = dbCtxMult
var plantList = localDbCtx
.DbSetPlant
.ToList();
@@ -177,46 +325,58 @@ namespace GWMS.Data.Controllers
/// <returns></returns>
public List<RebootLogModel> GetRebootLog(int maxNum = 100)
{
if (maxNum == 0)
List<RebootLogModel> dbResult = new List<RebootLogModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
maxNum = dbCtx.DbRebootLog.Count();
if (maxNum == 0)
{
maxNum = localDbCtx.DbRebootLog.Count();
}
dbResult = localDbCtx
.DbRebootLog
.OrderByDescending(x => x.DtEvent)
.Take(maxNum)
.ToList();
}
var dbResult = dbCtx
.DbRebootLog
.OrderByDescending(x => x.DtEvent)
.Take(maxNum)
.ToList();
return dbResult;
}
public List<SupplierModel> GetSuppliers()
{
var dbResult = dbCtx
List<SupplierModel> dbResult = new List<SupplierModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetSupplier
.ToList();
}
return dbResult;
}
public List<TransporterModel> GetTransporters()
{
var dbResult = dbCtx
List<TransporterModel> dbResult = new List<TransporterModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetTransporter
.ToList();
}
return dbResult;
}
public List<UserModel> GetUsersFilt(UserLevel UsrLvl, int PlantId, int SupplierId, int TransporterId)
{
var dbResult = dbCtx
List<UserModel> dbResult = new List<UserModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = localDbCtx
.DbSetUser
.Where(x => (x.Livello == UsrLvl || UsrLvl == UserLevel.ND) && (x.MaskPlantId == PlantId || PlantId == 0) && (x.MaskSupplierId == SupplierId || SupplierId == 0) && (x.MaskTranspId == TransporterId || TransporterId == 0))
.OrderBy(x => x.Livello)
.ThenBy(x => x.UserName)
.ToList();
}
return dbResult;
}
@@ -225,7 +385,7 @@ namespace GWMS.Data.Controllers
List<WeekPlanModel> dbResult = new List<WeekPlanModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbResult = dbCtx
dbResult = localDbCtx
.DbSetPlantSupplWeekPlan
.Include(p => p.Plant)
.Include(s => s.Supplier)
@@ -238,15 +398,18 @@ namespace GWMS.Data.Controllers
public bool HasPlantLog()
{
bool answ = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var numRecord = dbCtx
.DbSetPlantLog
.Count();
answ = numRecord > 0;
try
{
var numRecord = localDbCtx
.DbSetPlantLog
.Count();
answ = numRecord > 0;
}
catch
{ }
}
catch
{ }
return answ;
}
@@ -258,19 +421,28 @@ namespace GWMS.Data.Controllers
public bool OrderDelete(OrderModel Item2Del)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
if (Item2Del != null)
try
{
dbCtx
.DbSetOrders
.Remove(Item2Del);
dbCtx.SaveChanges();
done = true;
if (Item2Del != null)
{
var rec2del = localDbCtx
.DbSetOrders
.Where(x => x.OrderId == Item2Del.OrderId)
.FirstOrDefault();
localDbCtx
.DbSetOrders
.Remove(rec2del);
localDbCtx.SaveChanges();
done = true;
}
}
catch (Exception exc)
{
Log.Error($"Eccezione in OrderDelete:{Environment.NewLine}{exc}");
}
}
catch (Exception exc)
{ }
return done;
}
@@ -282,16 +454,19 @@ namespace GWMS.Data.Controllers
public bool OrderInsert(List<OrderModel> newItems)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbCtx
.DbSetOrders
.AddRange(newItems);
dbCtx.SaveChanges();
done = true;
try
{
localDbCtx
.DbSetOrders
.AddRange(newItems);
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{ }
}
catch (Exception exc)
{ }
return done;
}
@@ -303,16 +478,16 @@ namespace GWMS.Data.Controllers
public bool OrderUpdate(OrderModel updItem)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
OrderModel currData = null;
currData = dbCtx
.DbSetOrders
.Where(x => x.OrderId == updItem.OrderId)
.FirstOrDefault();
if (currData != null)
try
{
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
OrderModel currData = null;
currData = localDbCtx
.DbSetOrders
.Where(x => x.OrderId == updItem.OrderId)
.FirstOrDefault();
if (currData != null)
{
// se ho modificato data --> cambio codice ordine!
if (!localDbCtx.Entry(updItem).OriginalValues["DtOrder"].Equals(localDbCtx.Entry(updItem).CurrentValues["DtOrder"]))
@@ -323,18 +498,20 @@ namespace GWMS.Data.Controllers
localDbCtx.Entry(updItem).State = EntityState.Modified;
localDbCtx.SaveChanges();
}
else
{
localDbCtx
.DbSetOrders
.Add(updItem);
localDbCtx.SaveChanges();
}
done = true;
}
else
catch (Exception exc)
{
dbCtx
.DbSetOrders
.Add(updItem);
dbCtx.SaveChanges();
Log.Error($"Eccezione in OrderUpdate:{Environment.NewLine}{exc}");
}
done = true;
}
catch (Exception exc)
{ }
return done;
}
@@ -346,6 +523,7 @@ namespace GWMS.Data.Controllers
/// <returns></returns>
public PlantDTO PlantDTO(int PlantId, int maxRecords)
{
DateTime lastRec = DateTime.Today;
var currPlant = GetPlant(PlantId);
PlantDTO answ = new PlantDTO();
List<TSData> LevelTS = new List<TSData>();
@@ -356,10 +534,10 @@ namespace GWMS.Data.Controllers
List<TSData> PressBLTS = new List<TSData>();
List<TSData> OrderTS = new List<TSData>();
using (GWMSContext dbCtxMult = new GWMSContext(_configuration))
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
// recupero dal DB
var rawLevelData = dbCtxMult
var rawLevelData = localDbCtx
.DbSetPlantLog
.Where(x => x.FluxType == "Level" && x.PlantId == PlantId)
.OrderByDescending(x => x.DtEvent)
@@ -367,7 +545,7 @@ namespace GWMS.Data.Controllers
.OrderBy(x => x.DtEvent)
.ToList();
var rawMainPressData = dbCtxMult
var rawMainPressData = localDbCtx
.DbSetPlantLog
.Where(x => x.FluxType == "MainPress" && x.PlantId == PlantId)
.OrderByDescending(x => x.DtEvent)
@@ -375,7 +553,7 @@ namespace GWMS.Data.Controllers
.OrderBy(x => x.DtEvent)
.ToList();
var rawBHPressData = dbCtxMult
var rawBHPressData = localDbCtx
.DbSetPlantLog
.Where(x => x.FluxType == "PressBH" && x.PlantId == PlantId)
.OrderByDescending(x => x.DtEvent)
@@ -383,7 +561,7 @@ namespace GWMS.Data.Controllers
.OrderBy(x => x.DtEvent)
.ToList();
var rawBLPressData = dbCtxMult
var rawBLPressData = localDbCtx
.DbSetPlantLog
.Where(x => x.FluxType == "PressBL" && x.PlantId == PlantId)
.OrderByDescending(x => x.DtEvent)
@@ -391,7 +569,7 @@ namespace GWMS.Data.Controllers
.OrderBy(x => x.DtEvent)
.ToList();
var rawOrderData = dbCtxMult
var rawOrderData = localDbCtx
.DbSetOrders
.Where(x => x.PlantId == PlantId && x.ExecutionQty == 0)
.OrderByDescending(x => x.DtOrder)
@@ -423,6 +601,8 @@ namespace GWMS.Data.Controllers
double valBH = PressBHTS.Count > 0 ? PressBHTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
double valBL = PressBLTS.Count > 0 ? PressBLTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().ValDouble : 0;
lastRec = LevelTS.Count > 0 ? LevelTS.OrderByDescending(x => x.DtEvent).Take(1).FirstOrDefault().DtEvent : DateTime.Today;
PressAct.Add("Main", valMain);
PressAct.Add("BH", valBH);
PressAct.Add("BL", valBL);
@@ -430,6 +610,7 @@ namespace GWMS.Data.Controllers
// popolo valolri
answ = new PlantDTO()
{
LastUpdate = lastRec,
PlantId = PlantId,
PlantCode = currPlant.PlantCode,
PlantDesc = currPlant.PlantDesc,
@@ -452,7 +633,10 @@ namespace GWMS.Data.Controllers
/// <returns></returns>
public List<PlantLogModel> PlantLogGetLastByFlux(int PlantId)
{
List<PlantLogModel> lastRec = dbCtx
List<PlantLogModel> lastRec = new List<PlantLogModel>();
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
lastRec = localDbCtx
.DbSetPlantLog
.Where(x => x.PlantId == PlantId)
.OrderByDescending(o => o.DtEvent)
@@ -461,6 +645,7 @@ namespace GWMS.Data.Controllers
.GroupBy(g => g.FluxType)
.Select(s => s.First())
.ToList();
}
return lastRec;
}
@@ -472,43 +657,79 @@ namespace GWMS.Data.Controllers
public bool PlantLogInsertNew(List<PlantLogModel> newItems)
{
bool fatto = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbCtx
.DbSetPlantLog
.AddRange(newItems);
dbCtx.SaveChanges();
fatto = true;
try
{
localDbCtx
.DbSetPlantLog
.AddRange(newItems);
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante PlantLogInsertNew per {newItems.Count} rec{Environment.NewLine}{exc}");
}
}
catch (Exception exc)
{
Log.Error(exc, $"Eccezione durante PlantLogInsertNew per {newItems.Count} rec");
}
return fatto;
}
/// <summary>
/// Aggiorna un Plant
/// </summary>
/// <param name="updItem"></param>
/// <returns></returns>
public bool PlantUpdate(PlantDTO updItem)
{
bool done = false;
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
try
{
PlantDetailModel currData = localDbCtx
.DbSetPlant
.Where(x => x.PlantId == updItem.PlantId)
.FirstOrDefault();
if (currData != null)
{
// aggiorno valori
currData.LevelReorder = updItem.LevelReorder;
currData.LevelMax = updItem.LevelMax;
localDbCtx.Entry(currData).State = EntityState.Modified;
localDbCtx.SaveChanges();
}
done = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione in PlantUpdate:{Environment.NewLine}{exc}");
}
}
return done;
}
public bool RecordRebootLog(RebootLogModel newItem)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
dbCtx
.DbRebootLog
.Add(newItem);
dbCtx.SaveChanges();
done = true;
try
{
localDbCtx
.DbRebootLog
.Add(newItem);
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante RecordRebootLog{Environment.NewLine}{exc}");
}
}
catch (Exception exc)
{ }
return done;
}
public void ResetController()
{
dbCtx = new GWMSContext(_configuration);
}
/// <summary>
/// Annulla modifiche su una specifica entity (cancel update)
/// </summary>
@@ -517,16 +738,19 @@ namespace GWMS.Data.Controllers
public bool rollBackEntity(object item)
{
bool answ = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
if (dbCtx.Entry(item).State == EntityState.Deleted || dbCtx.Entry(item).State == EntityState.Modified)
try
{
dbCtx.Entry(item).Reload();
if (localDbCtx.Entry(item).State == EntityState.Deleted || localDbCtx.Entry(item).State == EntityState.Modified)
{
localDbCtx.Entry(item).Reload();
}
}
catch (Exception exc)
{
Log.Error($"Eccezione in rollBackEntity{Environment.NewLine}{exc}");
}
}
catch (Exception exc)
{
Log.Error($"Eccezione in rollBackEntity{Environment.NewLine}{exc}");
}
return answ;
}
@@ -539,27 +763,32 @@ namespace GWMS.Data.Controllers
public bool UserUpdate(UserModel updItem)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var currData = dbCtx
.DbSetUser
.Where(x => x.UserId == updItem.UserId)
.FirstOrDefault();
if (currData != null)
try
{
dbCtx.Entry(updItem).State = EntityState.Modified;
}
else
{
dbCtx
var currData = localDbCtx
.DbSetUser
.Add(updItem);
.Where(x => x.UserId == updItem.UserId)
.FirstOrDefault();
if (currData != null)
{
localDbCtx.Entry(updItem).State = EntityState.Modified;
}
else
{
localDbCtx
.DbSetUser
.Add(updItem);
}
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante UserUpdate{Environment.NewLine}{exc}");
}
dbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{ }
return done;
}
@@ -571,18 +800,23 @@ namespace GWMS.Data.Controllers
public bool WeekPlanDelete(WeekPlanModel selRecord)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var item2del = dbCtx
.DbSetPlantSupplWeekPlan
.Where(x => x.WeekPlanId == selRecord.WeekPlanId)
.FirstOrDefault();
dbCtx.DbSetPlantSupplWeekPlan.Remove(item2del);
dbCtx.SaveChanges();
done = true;
try
{
var item2del = localDbCtx
.DbSetPlantSupplWeekPlan
.Where(x => x.WeekPlanId == selRecord.WeekPlanId)
.FirstOrDefault();
localDbCtx.DbSetPlantSupplWeekPlan.Remove(item2del);
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante WeekPlanDelete{Environment.NewLine}{exc}");
}
}
catch (Exception exc)
{ }
return done;
}
@@ -594,27 +828,39 @@ namespace GWMS.Data.Controllers
public bool WeekPlanUpdate(WeekPlanModel updItem)
{
bool done = false;
try
using (GWMSContext localDbCtx = new GWMSContext(_configuration))
{
var currData = dbCtx
.DbSetPlantSupplWeekPlan
.Where(x => x.WeekPlanId == updItem.WeekPlanId)
.FirstOrDefault();
if (currData != null)
try
{
dbCtx.Entry(updItem).State = EntityState.Modified;
}
else
{
dbCtx
var currData = localDbCtx
.DbSetPlantSupplWeekPlan
.Add(updItem);
.Where(x => x.WeekPlanId == updItem.WeekPlanId)
.FirstOrDefault();
if (currData != null)
{
currData.DayNum = updItem.DayNum;
currData.DeliveryHour = updItem.DeliveryHour;
currData.Note = updItem.Note;
currData.PlantId = updItem.PlantId;
currData.SupplierId = updItem.SupplierId;
currData.TransporterId = updItem.TransporterId;
localDbCtx.Entry(currData).State = EntityState.Modified;
}
else
{
localDbCtx
.DbSetPlantSupplWeekPlan
.Add(updItem);
}
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante WeekPlanUpdate{Environment.NewLine}{exc}");
}
dbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{ }
return done;
}
+53
View File
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
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 GWMS.Data.DTO
{
public class PlantLevSumDTO
{
#region Public Properties
public int PlantId { get; set; }
public string PlantCode { get; set; } = "";
public string PlantDesc { get; set; } = "";
public DateTime DataRif { get; set; } = DateTime.Today;
public double LevelStart { get; set; } = 0;
public double LevelMin { get; set; } = 0;
public double LevelMax { get; set; } = 99999;
public double LevelEnd { get; set; } = 0;
public DateTime FillStart { get; set; } = DateTime.Today;
public DateTime FillEnd { get; set; } = DateTime.Today;
public double DeltaMin { get; set; } = 100;
public bool HasRefill
{
get
{
return (LevelMax > LevelStart + DeltaMin) && ((LevelStart + LevelEnd) > 0);
}
}
public bool HasOrder
{
get
{
return OrderTS.Count > 0;
}
}
public List<TSData> LevelTS { get; set; } = new List<TSData>();
public List<TSData> OrderTS { get; set; } = new List<TSData>();
public List<int> OrdersIds { get; set; } = new List<int>();
#endregion Public Properties
}
}
+18 -2
View File
@@ -14,16 +14,17 @@ namespace GWMS.Data.DTO
{
#region Public Properties
public int PlantId { get; set; }
public string PlantCode { get; set; } = "";
public string PlantDesc { get; set; } = "";
public DateTime LastUpdate { get; set; } = DateTime.Today.AddYears(-10);
public double LevelMax { get; set; } = 99999;
public double LevelAct { get; set; } = 0;
public double LevelReorder { get; set; } = 0;
public double OrderQtyStd { get; set; } = 0;
public int LevelRatio
{
@@ -36,6 +37,21 @@ namespace GWMS.Data.DTO
}
}
public double ReorderRatio
{
get
{
double answ = 0;
double denom = LevelMax == 0 ? 1 : LevelMax;
answ = Math.Round((double)(LevelReorder * 100 / denom), 2);
return answ;
}
set
{
LevelReorder = value * LevelMax / 100;
}
}
public List<TSData> LevelTS { get; set; } = new List<TSData>();
public List<TSData> OrderTS { get; set; } = new List<TSData>();
+9 -9
View File
@@ -10,21 +10,21 @@
<ItemGroup>
<PackageReference Include="MailKit" Version="2.15.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.7" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.7">
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.7">
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" />
<PackageReference Include="NLog" Version="4.7.10" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.0" />
<PackageReference Include="NLog" Version="4.7.11" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.1" />
</ItemGroup>
</Project>
+31 -8
View File
@@ -28,13 +28,6 @@ namespace GWMS.Data
public GWMSContext(IConfiguration configuration)
{
_configuration = configuration;
try
{
// se non ci fosse... crea o migra!
Database.Migrate();
}
catch (Exception exc)
{ }
}
public GWMSContext(DbContextOptions<GWMSContext> options) : base(options)
@@ -45,7 +38,9 @@ namespace GWMS.Data
Database.Migrate();
}
catch (Exception exc)
{ }
{
Log.Error(exc, "Exception during context initialization 02");
}
}
#endregion Public Constructors
@@ -53,19 +48,29 @@ namespace GWMS.Data
#region Public Properties
public virtual DbSet<RebootLogModel> DbRebootLog { get; set; }
public virtual DbSet<ConfigModel> DbSetConfig { get; set; }
public virtual DbSet<ItemModel> DbSetItems { get; set; }
public virtual DbSet<AnKeyValModel> DbSetKeyVal { get; set; }
public virtual DbSet<ListValModel> DbSetListVal { get; set; }
public virtual DbSet<OrderModel> DbSetOrders { get; set; }
public virtual DbSet<PlantDetailModel> DbSetPlant { get; set; }
public virtual DbSet<PlantLogModel> DbSetPlantLog { get; set; }
public virtual DbSet<PlantStatusModel> DbSetPlantStatus { get; set; }
public virtual DbSet<WeekPlanModel> DbSetPlantSupplWeekPlan { get; set; }
public virtual DbSet<SupplierModel> DbSetSupplier { get; set; }
public virtual DbSet<TransporterModel> DbSetTransporter { get; set; }
public virtual DbSet<UserModel> DbSetUser { get; set; }
#endregion Public Properties
@@ -129,5 +134,23 @@ namespace GWMS.Data
}
#endregion Protected Methods
#region Public Methods
public void DbForceMigrate()
{
try
{
// se non ci fosse... crea o migra!
Database.Migrate();
Log.Info("DbForceMigrate: done!");
}
catch (Exception exc)
{
Log.Error(exc, "DbForceMigrate: Exception during context initialization 01");
}
}
#endregion Public Methods
}
}
-10
View File
@@ -1,10 +0,0 @@
<Router AppAssembly="@typeof(Program).Assembly" PreferExactMatches="@true">
<Found Context="routeData">
<RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
+6 -6
View File
@@ -90,12 +90,12 @@
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fas fa-weight" aria-hidden="true"></span>
<span class="fas fa-cart-plus" title="Ordinato"></span>
</span>
</div>
<InputNumber @bind-Value="@_currItem.OrderQty" class="form-control"></InputNumber>
<div class="input-group-append">
<span class="input-group-text">kg</span>
<span class="input-group-text" title="Ordinato">kg</span>
</div>
</div>
</div>
@@ -172,12 +172,12 @@
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fas fa-weight" aria-hidden="true"></span>
<span class="fas fa-weight" aria-hidden="true" title="Consegnato"></span>
</span>
</div>
<InputNumber @bind-Value="@_currItem.ExecutionQty" class="form-control"></InputNumber>
<div class="input-group-append">
<span class="input-group-text">kg</span>
<span class="input-group-text" title="Consegnato">kg</span>
</div>
</div>
</div>
@@ -234,7 +234,7 @@
{
if (_currItem != null)
{
DataService.OrderUpdate(_currItem);
await DataService.OrderUpdate(_currItem);
await DataUpdated.InvokeAsync(1);
}
else
@@ -255,7 +255,7 @@
if (_currItem != null)
{
DataService.OrderDelete(_currItem);
await DataService.OrderDelete(_currItem);
await DataUpdated.InvokeAsync(1);
}
else
+2 -2
View File
@@ -68,10 +68,10 @@
</div>
<div class="col-12 col-lg-2">
<div class="mb-2">
<button type="button" class="btn btn-outline-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
<button type="button" class="btn btn-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
</div>
<div>
<button type="button" class="btn btn-outline-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
<button type="button" class="btn btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
</div>
</div>
</div>
+4 -11
View File
@@ -17,21 +17,14 @@
{
<EditForm Model="@_currItem">
<DataAnnotationsValidator />
<div class="row">
<div class="col-12 col-lg-2 text-center">
<div class="d-flex flex-column text-center">
<div class="p-1 flex-grow-1">
<div id="qrCodeImg"></div>
@_currItem.OrderCode
@*<img src="@getImgUrl(_currItem.OrderCode)" class="img-fluid" />*@
</div>
<div class="col-12 col-lg-2">
<div class="row">
@*<div class="col">
<button type="button" class="btn btn-sm btn-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
</div>*@
<div class="col">
<button type="button" class="btn btn-sm btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
</div>
</div>
<div class="p-1 flex-grow-1">
<button type="button" class="btn btn-sm btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
</div>
</div>
</EditForm>
+79
View File
@@ -0,0 +1,79 @@
@using Blazorise
@using GWMS.UI.Components
@using Microsoft.AspNetCore.Components.Authorization
@using GWMS.UI.Data
@using Microsoft.Extensions.Configuration
@using Microsoft.AspNetCore.Components.Authorization
<div class="card">
<div class="card-header bg-info text-light">
<b>Modifica</b>
</div>
<div class="card-body small p-1">
<EditForm Model="@_currItem">
<DataAnnotationsValidator />
<div class="row">
<div class="col-12 col-lg-10 align-items-center">
<div class="row">
<div class="col-3">
<h3>@_currItem.PlantCode</h3>
</div>
<div class="col-9 text-right">
<b>@_currItem.PlantDesc</b>
</div>
</div>
<div class="row">
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Livello Riordino
</span>
</div>
<InputNumber @bind-Value="@_currItem.LevelReorder" class="form-control text-right"></InputNumber>
<div class="input-group-append">
<span class="input-group-text" title="Livello Riordino kg">kg</span>
</div>
</div>
</div>
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Riordino
</span>
</div>
<InputNumber @bind-Value="@_currItem.ReorderRatio" class="form-control text-right"></InputNumber>
<div class="input-group-append">
<span class="input-group-text" title="% Riordino">%</span>
</div>
</div>
</div>
@if (editAll)
{
<div class="col">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
Capacità Massima
</span>
</div>
<InputNumber @bind-Value="@_currItem.LevelMax" class="form-control text-right"></InputNumber>
<div class="input-group-append">
<span class="input-group-text" title="Capacità Massima">kg</span>
</div>
</div>
</div>
}
</div>
</div>
<div class="col-12 col-lg-2">
<button type="button" class="btn btn-warning btn-block" value="Cancel" @onclick="cancelUpdate">Cancel <i class="fas fa-ban"></i></button>
<div class="mt-2">
<button type="button" class="btn btn-success btn-block" value="Save" @onclick="saveUpdate">Save <i class="far fa-save"></i></button>
</div>
</div>
</div>
</EditForm>
</div>
</div>
+121
View File
@@ -0,0 +1,121 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using GWMS.UI.Data;
using GWMS.Data.DTO;
using Microsoft.AspNetCore.Components;
using Blazorise.Charts;
using System.Threading;
using Microsoft.Extensions.Configuration;
using Microsoft.JSInterop;
using Microsoft.AspNetCore.Identity;
namespace GWMS.UI.Components
{
public partial class PlantEditor
{
#region Protected Fields
protected PlantDTO _currItem = new PlantDTO();
#endregion Protected Fields
#region Private Properties
[Inject]
private IConfiguration Configuration { get; set; }
[Inject]
private IJSRuntime JSRuntime { get; set; }
[Inject]
private NavigationManager NavManager { get; set; }
#endregion Private Properties
#region Protected Properties
[Inject]
protected UserManager<IdentityUser> _UserManager { get; set; }
[Inject]
protected GWMSDataService DataService { get; set; }
protected bool editAll
{
get
{
bool answ = false;
var currMode = GetQueryParm("currMode");
if (!string.IsNullOrEmpty(currMode))
{
answ = currMode.Equals("debug");
}
return answ;
}
}
[Inject]
protected MessageService MessageService { get; set; }
#endregion Protected Properties
#region Public Properties
[Parameter]
public PlantDTO 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.PlantUpdate(_currItem);
await DataUpdated.InvokeAsync(0);
}
else
{
Console.WriteLine("Order null!");
}
}
#endregion Private Methods
#region Protected Methods
// Blazor: get query parm from the URL
protected string GetQueryParm(string parmName)
{
var uriBuilder = new UriBuilder(NavManager.Uri);
var q = System.Web.HttpUtility.ParseQueryString(uriBuilder.Query);
return q[parmName] ?? "";
}
#endregion Protected Methods
}
}
@@ -6,11 +6,13 @@
@if (currItem != null)
{
<div class="row py-0">
<div class="col-5 pr-0 font-weight-bold">
<div class="col-8 pr-0 font-weight-bold">
<h2>@currItem.PlantCode</h2>
</div>
<div class="col-7 text-right">
<h4>@currItem.PlantDesc</h4>
<div class="col-4 text-right align-bottom">
<button class="btn btn-primary btn-lg btn-block" @onclick="() => ShowDetail(currItem.PlantId)">
<b>@currItem.PlantDesc&nbsp;<i class="fas fa-angle-double-right"></i></b>
</button>
</div>
</div>
}
@@ -31,7 +33,7 @@
<li class="list-group-item d-flex justify-content-between align-items-center small">
<span><i class="fas fa-compress-arrows-alt"></i> Alimentazione</span> <span><b>@getPressData("BHA", "N1")</b> <sub>bar</sub></span>
</li>
<li class="list-group-item active d-flex justify-content-between align-items-center py-1">PB Bassa</li>
<li class="list-group-item active d-flex justify-content-between align-items-center py-1">PB Media</li>
<li class="list-group-item d-flex justify-content-between align-items-center small">
<span><i class="fas fa-compress-arrows-alt"></i> Stoccaggio</span> <span><b>@getPressData("BL", "N1")</b> <sub>bar</sub></span>
</li>
@@ -46,25 +48,26 @@
<div class="row">
<div class="col-12">
<ul class="list-group">
<li class="list-group-item active d-flex justify-content-between align-items-center">SERBATOIO Principale</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<div class="row">
<div class="col-12 text-center small">
<span><i class="fas fa-database"></i> Livello: </span> <span style="font-size:1.2em;"><b>@currItem.LevelRatio</b> <sub>%</sub></span> <span>(@currItem.LevelAct.ToString("N0")/@currItem.LevelMax.ToString("N0"))</span>
</div>
<div class="col-12 small">
<li class="list-group-item @headerStatus d-flex justify-content-between align-items-center px-0 py-1 small">
<div class="px-1" title="@checkRTime">
SERBATOIO Principale <i class="fas fa-play @playStatus"></i>
</div>
<div class="px-1 text-right">
<span><i class="fas fa-database"></i> Livello:</span><span>@currItem.LevelAct.ToString("N0")/@currItem.LevelMax.ToString("N0")</span> | <span style="font-size:1.2em;"><b>@currItem.LevelRatio</b> <sub>%</sub></span>
</div>
</li>
<li class="list-group-item align-items-center px-1 py-2">
<div class="d-flex flex-column">
<div class="p-1 flex-grow-1">
<Progress>
<ProgressBar Value="@currItem.LevelRatio" Striped="false" Animated="false" />
</Progress>
</div>
<div class="col-12 px-0 mt-2">
<div class="px-1 py-2">
<LineChart @ref="LevelVal" TItem="double" OptionsObject="lineChartOptions" />
</div>
</div>
</li>
@*<li class="list-group-item d-flex justify-content-between align-items-center">
<span><i class="fas fa-database"></i> Livello</span> <span style="font-size:1.2em;"><b>@currItem.LevelRatio</b> <sub>%</sub></span>
</li>*@
<li class="list-group-item d-flex justify-content-between align-items-center">
<span><i class="fas fa-compress-arrows-alt"></i> Pressione</span> <span style="font-size:1.2em;"><b>@currItem.PressAct["Main"].ToString("N1")</b> <span class="small"> <sub>bar</sub></span></span>
</li>
@@ -11,7 +11,7 @@ using Microsoft.Extensions.Configuration;
namespace GWMS.UI.Components
{
public partial class PlantDetail
public partial class PlantOverview
{
#region Protected Fields
@@ -42,7 +42,7 @@ namespace GWMS.UI.Components
//text = "Kg",
ticks = new {
suggestedMin = 0,
suggestedMax = 10000
suggestedMax = 30000
}
}
}
@@ -57,7 +57,7 @@ namespace GWMS.UI.Components
Mode = "nearest",
Intersect = false
},
Animation = true,
Animation = false,
Responsive = true,
AspectRatio = 2,
type = "line",
@@ -87,17 +87,17 @@ namespace GWMS.UI.Components
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.PlantId;
answ = AppMService.Order_Filter.PlantId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.PlantId.Equals(value))
if (!AppMService.Order_Filter.PlantId.Equals(value))
{
MessageService.Order_Filter.PlantId = value;
AppMService.Order_Filter.PlantId = value;
}
}
}
@@ -107,15 +107,20 @@ namespace GWMS.UI.Components
#region Protected Properties
[Inject]
protected GWMSDataService DataService { get; set; }
protected MessageService AppMService { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
protected GWMSDataService DataService { get; set; }
#endregion Protected Properties
#region Public Properties
public string checkRTime
{
get => DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > 2 ? $"Mancata ricezione: ultimo aggiornamento {_currItem.LastUpdate}" : $"Dati Realtime aggiornati al {_currItem.LastUpdate}";
}
[Parameter]
public PlantDTO currItem
{
@@ -140,6 +145,23 @@ namespace GWMS.UI.Components
}
}
public string headerStatus
{
get
{
string answ = "";
int TimeoutOffline = 5;
int.TryParse(Configuration["TimeoutOffline"], out TimeoutOffline);
answ = DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > TimeoutOffline ? "text-secondary" : "active";
return answ;
}
}
public string playStatus
{
get => DateTime.Now.Subtract(_currItem.LastUpdate).TotalMinutes > 2 ? "text-danger" : "text-success";
}
#endregion Public Properties
#region Private Methods
@@ -150,13 +172,13 @@ namespace GWMS.UI.Components
int numCount = _currItem.LevelTS.Count;
// passo a 2h se > 3 gg
if (numCount > 72)
answ = 2;
answ = 3;
// passo a 3h se > 5 gg
else if (numCount > 120)
answ = 3;
answ = 4;
// passo a 4h se > 10 gg
else if (numCount > 240)
answ = 4;
answ = 5;
redFact = answ;
}
@@ -222,6 +244,13 @@ namespace GWMS.UI.Components
}
}
protected void ShowDetail(int currPlantId)
{
SelPlantId = currPlantId;
// rimando...
NavManager.NavigateTo($"PlantAnalisys");
}
protected void ShowOrders(int currPlantId)
{
SelPlantId = currPlantId;
+1 -1
View File
@@ -90,7 +90,7 @@
protected async Task ReloadData()
{
var resultUser = await Health.Checks.DbUserApp(DbConfig.DATABASE_NAME);
var resultLog = await Health.Checks.DbPlantLogTable(DbConfig.DATABASE_NAME);
var resultLog = await Health.Checks.DbPlantTable(DbConfig.DATABASE_NAME);
var resultIden = await Health.Checks.DbIdentity(DbConfig.DATABASE_NAME);
DbUserTableOk = (resultUser.Status == HealthStatus.Healthy);
DbLogOk = (resultLog.Status == HealthStatus.Healthy);
+40 -37
View File
@@ -42,7 +42,7 @@ namespace GWMS.UI.Controllers
public IOBController(GWMSDataService DataService)
{
_DataService = DataService;
Log.Debug("Avviata classe IOBController");
//Log.Debug("Avviata classe IOBController");
}
#endregion Public Constructors
@@ -67,7 +67,7 @@ namespace GWMS.UI.Controllers
[HttpGet("addOptPar/{id}")]
public string addOptPar(string id, string pName, string pValue)
{
Log.Debug($"Chiamata addOptPar | {id} | {pName} | {pValue}");
//Log.Debug($"Chiamata addOptPar | {id} | {pName} | {pValue}");
return $"N.A. | {id} | {pName} | {pValue}";
}
@@ -87,7 +87,7 @@ namespace GWMS.UI.Controllers
[HttpGet("addTask2Exe/{id}")]
public string addTask2Exe(string id, string taskName, string taskVal)
{
Log.Debug($"Chiamata addTask2Exe | {id} | {taskName} | {taskVal}");
//Log.Debug($"Chiamata addTask2Exe | {id} | {taskName} | {taskVal}");
return $"N.A. | {id} | {taskName} | {taskVal}";
}
@@ -100,7 +100,7 @@ namespace GWMS.UI.Controllers
[HttpGet("alive")]
public string alive()
{
Log.Debug("Chiamata alive");
//Log.Debug("Chiamata alive");
return $"OK";
}
@@ -114,13 +114,13 @@ namespace GWMS.UI.Controllers
[HttpGet("checkLevels/{id}")]
public async Task<string> checkLevels(string id)
{
Log.Debug($"Chiamata checkLevels | {id}");
//Log.Debug($"Chiamata checkLevels | {id}");
bool fatto = false;
// ...verifica per ricalcolo ordini...
fatto = await _DataService.checkLevels();
if (fatto)
{
return "Ok";
return "OK";
}
else
{
@@ -132,7 +132,7 @@ namespace GWMS.UI.Controllers
[HttpDelete("{id}")]
public void Delete(int id)
{
Log.Debug($"Chiamata Delete | {id}");
//Log.Debug($"Chiamata Delete | {id}");
}
/// <summary>
@@ -145,7 +145,7 @@ namespace GWMS.UI.Controllers
[HttpGet("enabled/{id}")]
public async Task<string> enabled(string id)
{
Log.Debug($"Chiamata enabled | {id}");
//Log.Debug($"Chiamata enabled | {id}");
string answ = "ND";
// se id nullo --> KO!
if (id == null)
@@ -169,7 +169,7 @@ namespace GWMS.UI.Controllers
[HttpPost("evListJson/{id}")]
public string evListJson(string id, [FromBody] evJsonPayload rawData)
{
Log.Debug($"Chiamata evListJson | {id}");
//Log.Debug($"Chiamata evListJson | {id}");
string answ = "KO";
#if false
int insDone = 0;
@@ -222,7 +222,7 @@ namespace GWMS.UI.Controllers
[HttpGet("flog/{id}")]
public async Task<string> flog(string id, string flux, string valore, string dtEve, string dtCurr, string cnt)
{
Log.Debug($"Chiamata flog | {id} | {flux} | {valore} | {dtEve} | {dtCurr} | {cnt}");
//Log.Debug($"Chiamata flog | {id} | {flux} | {valore} | {dtEve} | {dtCurr} | {cnt}");
bool fatto = false;
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
if (cnt == null)
@@ -302,7 +302,7 @@ namespace GWMS.UI.Controllers
if (fatto)
{
return "Ok";
return "OK";
}
else
{
@@ -319,7 +319,7 @@ namespace GWMS.UI.Controllers
[HttpPost("flogJson/{id}")]
public async Task<string> flogJson(string id, [FromBody] flogJsonPayload rawData)
{
Log.Debug($"Chiamata flogJson | {id}");
//Log.Debug($"Chiamata flogJson | {id}");
bool fatto = false;
// verifico ci sia valore
if (rawData != null && !string.IsNullOrEmpty(id))
@@ -330,16 +330,19 @@ namespace GWMS.UI.Controllers
{
// conversione dati
List<PlantLogModel> plData = rawData.fluxData.Select(jpl => _DataService.convertFluxToPL(currPlant.PlantId, jpl)).ToList();
Log.Trace($"flogJson | {id} | Convertiti {plData.Count} record");
//insert!
fatto = await _DataService.PlantLogInsert(plData);
Log.Trace($"flogJson | {id} | PlantLogInsert --> esito: {fatto}");
// effettuo SEMPRE verifica per ricalcolo ordini...
await _DataService.checkLevels();
Log.Trace($"flogJson | {id} | chiamata checkLevels");
}
}
if (fatto)
{
return "Ok";
return "OK";
}
else
{
@@ -358,7 +361,7 @@ namespace GWMS.UI.Controllers
[HttpPost("forceSplitOdl/{id}")]
public string forceSplitOdl(string id)
{
Log.Debug($"Chiamata forceSplitOdl | {id}");
//Log.Debug($"Chiamata forceSplitOdl | {id}");
return "OK";
}
@@ -377,7 +380,7 @@ namespace GWMS.UI.Controllers
[HttpPost("forceSplitOdlFull/{id}")]
public string forceSplitOdlFull(string id, bool doConfirm, bool qtyFromLast, int? roundStep, string keyRichiesta = "")
{
Log.Debug($"Chiamata forceSplitOdlFull | {id}");
//Log.Debug($"Chiamata forceSplitOdlFull | {id}");
return "OK";
}
@@ -390,7 +393,7 @@ namespace GWMS.UI.Controllers
[HttpGet]
public string Get()
{
Log.Debug("Chiamata Get");
//Log.Debug("Chiamata Get");
return "OK";
}
@@ -404,7 +407,7 @@ namespace GWMS.UI.Controllers
[HttpGet("{id}")]
public string Get(int id)
{
Log.Debug($"Chiamata Get | {id}");
//Log.Debug($"Chiamata Get | {id}");
return "OK";
}
@@ -419,7 +422,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCounter/{id}")]
public string getCounter(string id)
{
Log.Debug($"Chiamata getCounter | {id}");
//Log.Debug($"Chiamata getCounter | {id}");
return "0";
}
@@ -434,7 +437,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCounterTCRec/{id}")]
public string getCounterTCRec(string id)
{
Log.Debug($"Chiamata getCounterTCRec | {id}");
//Log.Debug($"Chiamata getCounterTCRec | {id}");
return "0";
}
@@ -449,7 +452,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCurrData/{id}")]
public string getCurrData(string id)
{
Log.Debug($"Chiamata getCurrData | {id}");
//Log.Debug($"Chiamata getCurrData | {id}");
return $"{id}";
}
@@ -464,7 +467,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCurrODL/{id}")]
public string getCurrODL(string id)
{
Log.Debug($"Chiamata getCurrODL | {id}");
//Log.Debug($"Chiamata getCurrODL | {id}");
return "1";
}
@@ -477,7 +480,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCurrOdlRow/{id}")]
public string getCurrOdlRow(string id)
{
Log.Debug($"Chiamata getCurrOdlRow | {id}");
//Log.Debug($"Chiamata getCurrOdlRow | {id}");
return "";
}
@@ -490,7 +493,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCurrOdlStart/{id}")]
public string getCurrOdlStart(string id)
{
Log.Debug($"Chiamata getCurrOdlStart | {id}");
//Log.Debug($"Chiamata getCurrOdlStart | {id}");
return $"{DateTime.Now}";
}
@@ -503,7 +506,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getCurrStatoRow/{id}")]
public string getCurrStatoRow(string id)
{
Log.Debug($"Chiamata getCurrStatoRow | {id}");
//Log.Debug($"Chiamata getCurrStatoRow | {id}");
return "";
}
@@ -516,7 +519,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getFiles/{id}")]
public string getFiles(string id)
{
Log.Debug($"Chiamata getFiles | {id}");
//Log.Debug($"Chiamata getFiles | {id}");
return "";
}
@@ -529,7 +532,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getIdlePeriod/{id}")]
public int getIdlePeriod(string id)
{
Log.Debug($"Chiamata getIdlePeriod | {id}");
//Log.Debug($"Chiamata getIdlePeriod | {id}");
return 0;
}
@@ -541,7 +544,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getIob2call/{id}")]
public string getIob2call(string id)
{
Log.Debug($"Chiamata getIob2call | {id}");
//Log.Debug($"Chiamata getIob2call | {id}");
return "";
}
@@ -553,7 +556,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getM2IOB/{id}")]
public string getM2IOB(string id)
{
Log.Debug($"Chiamata getM2IOB | {id}");
//Log.Debug($"Chiamata getM2IOB | {id}");
return "";
}
@@ -566,7 +569,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getObjItems/{id}")]
public string getObjItems(string id)
{
Log.Debug($"Chiamata getObjItems | {id}");
//Log.Debug($"Chiamata getObjItems | {id}");
return "";
}
@@ -581,7 +584,7 @@ namespace GWMS.UI.Controllers
[HttpGet("getTask2Exe/{id}")]
public string getTask2Exe(string id)
{
Log.Debug($"Chiamata getTask2Exe | {id}");
//Log.Debug($"Chiamata getTask2Exe | {id}");
string answ = "";
#if false
// scrivo keep alive!!! (se necessario, altrimenti è in cache...)
@@ -613,7 +616,7 @@ namespace GWMS.UI.Controllers
[HttpGet("input/{id}")]
public string input(string id, string valore, string dtEve, string dtCurr, string cnt)
{
Log.Debug($"Chiamata input | {id} | {valore} | {dtEve} | {dtCurr} | {cnt}");
//Log.Debug($"Chiamata input | {id} | {valore} | {dtEve} | {dtCurr} | {cnt}");
string answ = "OK";
#if false
// formato yyyymmddHHMMSSnnn ovvero da anno a millisecondi
@@ -645,14 +648,14 @@ namespace GWMS.UI.Controllers
[HttpPost]
public void Post([FromBody] string value)
{
Log.Debug("Chiamata Post");
//Log.Debug("Chiamata Post");
}
// PUT api/IOB/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
Log.Debug($"Chiamata Put | {id}");
//Log.Debug($"Chiamata Put | {id}");
}
#if false
@@ -1133,7 +1136,7 @@ namespace GWMS.UI.Controllers
[HttpPost("saveConf/{id}")]
public string saveConf(string id, [FromBody] System.Text.Json.JsonElement rawQuery)
{
Log.Debug($"Chiamata saveConf | {id}");
//Log.Debug($"Chiamata saveConf | {id}");
// problema deserializzaizone ENUM con classe nuova dotnet 5:
// https://github.com/graphql-dotnet/graphql-dotnet/issues/1439
@@ -1172,7 +1175,7 @@ namespace GWMS.UI.Controllers
[HttpGet("sendReboot")]
public string sendReboot(string idxMacchina, string mac)
{
Log.Debug($"Chiamata sendReboot | {idxMacchina} | {mac}");
//Log.Debug($"Chiamata sendReboot | {idxMacchina} | {mac}");
string answ = "";
try
{
@@ -1200,7 +1203,7 @@ namespace GWMS.UI.Controllers
[HttpPost("setObjItems/{id}")]
public string setObjItems(string id, [FromBody] List<objItem> currParams)
{
Log.Debug($"Chiamata setObjItems | {id}");
//Log.Debug($"Chiamata setObjItems | {id}");
string answ = "";
if (string.IsNullOrWhiteSpace(id))
{
@@ -1230,7 +1233,7 @@ namespace GWMS.UI.Controllers
[HttpPost("uploadFile/{id}")]
public string uploadFile(string id)
{
Log.Debug($"Chiamata uploadFile | {id}");
//Log.Debug($"Chiamata uploadFile | {id}");
string answ = "";
#if false
// questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo...
+5 -5
View File
@@ -47,14 +47,14 @@ namespace GWMS.UI.Controllers
[HttpDelete("{id}")]
public void Delete(int id)
{
Log.Debug($"Chiamata Delete | {id}");
//Log.Debug($"Chiamata Delete | {id}");
}
// GET: api/PlantData
[HttpGet]
public async Task<List<PlantDTO>> Get()
{
Log.Debug("Chiamata Get");
//Log.Debug("Chiamata Get");
// serializzo i dati di PlantDTO dell'impianto richiesto
List<PlantDTO> ListRecords = await _DataService.PlantsGetAll();
return ListRecords;
@@ -64,7 +64,7 @@ namespace GWMS.UI.Controllers
[HttpGet("{id}")]
public async Task<PlantDTO> Get(int id)
{
Log.Debug($"Chiamata Get | {id}");
//Log.Debug($"Chiamata Get | {id}");
// serializzo i dati di PlantDTO dell'impianto richiesto
var ListRecords = await _DataService.PlantsGetAll();
//seleziono plant...
@@ -76,14 +76,14 @@ namespace GWMS.UI.Controllers
[HttpPost]
public void Post([FromBody] string value)
{
Log.Debug("Chiamata Post");
//Log.Debug("Chiamata Post");
}
// PUT api/PlantData/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
Log.Debug($"Chiamata Put | {id}");
//Log.Debug($"Chiamata Put | {id}");
}
#endregion Public Methods
+1 -1
View File
@@ -54,7 +54,7 @@ namespace GWMS.UI.Controllers
[HttpGet]
public async Task<List<PlantLogModel>> Get()
{
Log.Debug("Chiamata Get");
//Log.Debug("Chiamata Get");
// arrotondo ai 5 minuti
DateTime adesso = DateTime.Now;
int dayHour = adesso.Hour;
+119 -48
View File
@@ -73,9 +73,6 @@ namespace GWMS.UI.Data
else
{
dbController = new GWMS.Data.Controllers.GWMSController(configuration);
//StringBuilder sb = new StringBuilder();
//sb.AppendLine($"DbController OK");
//_logger.LogInformation(sb.ToString());
}
}
@@ -97,6 +94,7 @@ namespace GWMS.UI.Data
/// <param name="newItems"></param>
private async Task updateCurrDTO(List<PlantLogModel> newItems)
{
DateTime adesso = DateTime.Now;
List<PlantDTO> dbResult = new List<PlantDTO>();
int PlantId = newItems.FirstOrDefault().PlantId;
string cacheKey = "DATA:PLANTS:ListDTO";
@@ -121,6 +119,7 @@ namespace GWMS.UI.Data
if (lastLev != null)
{
currDto.LevelAct = lastLev.ValNumber;
currDto.LastUpdate = adesso;
}
// verifico SE c'è MainPress
@@ -252,20 +251,6 @@ namespace GWMS.UI.Data
return answ;
}
/// <summary>
/// invalida tutta la cache in caso di update
/// </summary>
/// <returns></returns>
protected async void invalidateAllCache()
{
await distributedCache.RemoveAsync("DATA:CONFIG");
await distributedCache.RemoveAsync("DATA:CHECKLEVEL");
await distributedCache.RemoveAsync("DATA:PLANTS:ListDTO");
await distributedCache.RemoveAsync("DATA:SUPPL:List");
await distributedCache.RemoveAsync("DATA:TRANSP:List");
await distributedCache.RemoveAsync("DATA:WEEKPLAN:List");
}
protected async Task<List<PlantLogModel>> PlantLogGetLastByFlux(int PlantId)
{
List<PlantLogModel> lastValues = new List<PlantLogModel>();
@@ -289,7 +274,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per PlantLogGetLastByFlux: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per PlantLogGetLastByFlux: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(lastValues);
}
@@ -369,7 +354,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(false));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per ConfigGetAll: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per ConfigGetAll: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -394,6 +379,11 @@ namespace GWMS.UI.Data
return answ;
}
public async Task<bool> DbForceMigrate()
{
return await Task.FromResult(dbController.DbForceMigrate());
}
public void Dispose()
{
// Clear database controller
@@ -405,6 +395,20 @@ namespace GWMS.UI.Data
return await Task.FromResult(dbController.HasPlantLog());
}
/// <summary>
/// invalida tutta la cache in caso di update
/// </summary>
/// <returns></returns>
public async Task InvalidateAllCache()
{
await distributedCache.RemoveAsync("DATA:CONFIG");
await distributedCache.RemoveAsync("DATA:CHECKLEVEL");
await distributedCache.RemoveAsync("DATA:PLANTS:ListDTO");
await distributedCache.RemoveAsync("DATA:SUPPL:List");
await distributedCache.RemoveAsync("DATA:TRANSP:List");
await distributedCache.RemoveAsync("DATA:WEEKPLAN:List");
}
public async Task<List<GWMS.Data.DatabaseModels.ItemModel>> ItemsGetAll()
{
//return Task.FromResult(dbController.ActionsGetAll());
@@ -427,7 +431,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(false));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per ItemsGetAll: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per ItemsGetAll: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -460,17 +464,19 @@ namespace GWMS.UI.Data
return answ;
}
public async void OrderDelete(OrderModel currItem)
public async Task<bool> OrderDelete(OrderModel currItem)
{
bool done = false;
try
{
dbController.OrderDelete(currItem);
invalidateAllCache();
dbController.ResetController();
done = dbController.OrderDelete(currItem);
InvalidateAllCache();
}
catch
catch (Exception exc)
{
Log.Error($"Eccezione in OrderDelete:{Environment.NewLine}{exc}");
}
return await Task.FromResult(done);
}
public async Task<OrderModel> OrderGetByCode(string OrderCode)
@@ -482,7 +488,21 @@ namespace GWMS.UI.Data
dbResult = dbController.GetOrderByCode(OrderCode);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB per OrderGetByCode: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB per OrderGetByCode: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
public async Task<OrderModel> OrderGetById(int OrderId)
{
OrderModel dbResult = new OrderModel();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.GetOrderById(OrderId);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per OrderGetById: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
@@ -496,7 +516,7 @@ namespace GWMS.UI.Data
dbResult = dbController.GetOrdersFilt(CurrFilter.PlantId, CurrFilter.SupplierId, CurrFilter.TransporterId, CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.ShowClosed);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB per OrdersGetFilt: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB per OrdersGetFilt: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
@@ -515,22 +535,24 @@ namespace GWMS.UI.Data
dbResult = dbController.GetOrdersOpen(PlantId);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB per OrdersGetOpen | PlantId: {PlantId} | {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB per OrdersGetOpen | PlantId: {PlantId} | {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
public void OrderUpdate(OrderModel currItem)
public async Task<bool> OrderUpdate(OrderModel currItem)
{
bool done = false;
try
{
dbController.OrderUpdate(currItem);
invalidateAllCache();
dbController.ResetController();
done = dbController.OrderUpdate(currItem);
InvalidateAllCache();
}
catch
catch (Exception exc)
{
Log.Error($"Eccezione in OrderUpdate:{Environment.NewLine}{exc}");
}
return await Task.FromResult(done);
}
public async Task<List<PlantLogModel>> PlantLogGetFilt(int PlantId, DateTime DtMaxDate, int numRec)
@@ -554,7 +576,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per PlantLogGetFilt: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per PlantLogGetFilt: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -577,6 +599,7 @@ namespace GWMS.UI.Data
.GroupBy(g => g.FluxType)
.Select(s => s.First().FluxType)
.ToList();
foreach (var item in fluxList)
{
// cerco se c'è valore...
@@ -589,17 +612,19 @@ namespace GWMS.UI.Data
}
// cerco se ho record > valore minimo x ogni flusso ricevuto
List<PlantLogModel> insCandidates = newItems.Where(x => x.FluxType == item && x.DtEvent >= dateLimit).ToList();
List<PlantLogModel> insCandidates = newItems.Where(x => x.FluxType == item && x.DtEvent >= dateLimit).OrderBy(x => x.DtEvent).ToList();
while (insCandidates.Count > 0)
int num2ins = insCandidates.Count;
while (num2ins > 0)
{
var newRec = insCandidates.First();
// il primo lo accodo da inserire
item2insert.Add(newRec);
// calcolo nuovo veto
dateLimit = dbController.DateRoundEnd(newRec.DtEvent, IntervalMin);
// ...e se ho record accodo
insCandidates = newItems.Where(x => x.FluxType == item && x.DtEvent >= dateLimit).ToList();
// ...e se ho record > data limite accodo
insCandidates = newItems.Where(x => x.FluxType == item && x.DtEvent > dateLimit).OrderBy(x => x.DtEvent).ToList();
num2ins = insCandidates.Count;
}
}
@@ -612,12 +637,48 @@ namespace GWMS.UI.Data
// invalido i vari valori in cache
await distributedCache.RemoveAsync($"DATA:PLANTS:LastFlux:{PlantId}");
await distributedCache.RemoveAsync($"DATA:PLANTS:ListDTO");
Log.Trace($"PlantLogInsert | PlantId: {PlantId} | Completato insert {item2insert.Count} rec");
}
// restituisco
return await Task.FromResult(fatto);
}
public async Task<List<PlantLevSumDTO>> PlantsAnalisysGetByCode(SelectOrderData CurrFilter)
{
List<PlantLevSumDTO> dbResult = new List<PlantLevSumDTO>();
string cacheKey = $"DATA:PLANTS:LevelSum:{CurrFilter.PlantId}:{CurrFilter.DateStart:yyMMdd}:{CurrFilter.DateEnd:yyMMdd}";
string rawData;
var redisDataList = await distributedCache.GetAsync(cacheKey);
if (redisDataList != null)
{
rawData = Encoding.UTF8.GetString(redisDataList);
dbResult = JsonConvert.DeserializeObject<List<PlantLevSumDTO>>(rawData);
}
else
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.GetPlantLogSummary(CurrFilter.PlantId, CurrFilter.DateStart, CurrFilter.DateEnd);
rawData = JsonConvert.SerializeObject(dbResult);
redisDataList = Encoding.UTF8.GetBytes(rawData);
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB + caching per PlantsAnalisysGetByCode: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
public async Task<bool> PlantsAnalisysReset(SelectOrderData CurrFilter)
{
bool answ = false;
string cacheKey = $"DATA:PLANTS:LevelSum:{CurrFilter.PlantId}:{CurrFilter.DateStart:yyMMdd}:{CurrFilter.DateEnd:yyMMdd}";
await distributedCache.RemoveAsync(cacheKey);
answ = true;
return await Task.FromResult(answ);
}
public async Task<List<PlantDTO>> PlantsGetAll()
{
List<PlantDTO> dbResult = new List<PlantDTO>();
@@ -641,7 +702,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -658,6 +719,21 @@ namespace GWMS.UI.Data
return await Task.FromResult(answ);
}
public async Task<bool> PlantUpdate(PlantDTO currItem)
{
bool done = false;
try
{
done = dbController.PlantUpdate(currItem);
InvalidateAllCache();
}
catch (Exception exc)
{
Log.Error($"Eccezione in OrderUpdate:{Environment.NewLine}{exc}");
}
return await Task.FromResult(done);
}
public void RebootLogInsert(RebootLogModel newItem)
{
try
@@ -668,11 +744,6 @@ namespace GWMS.UI.Data
{ }
}
public void ResetController()
{
dbController.ResetController();
}
public void rollBackEdit(object item)
{
dbController.rollBackEntity(item);
@@ -699,7 +770,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -725,7 +796,7 @@ namespace GWMS.UI.Data
await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt(true));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB + caching per PlantsGetAll: {ts.TotalMilliseconds} ms");
}
return await Task.FromResult(dbResult);
}
@@ -739,7 +810,7 @@ namespace GWMS.UI.Data
dbResult = dbController.GetUsersFilt(UsrLvl, PlantId, SupplierId, TransporterId);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB per UsersGetFilt: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB per UsersGetFilt: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
@@ -778,7 +849,7 @@ namespace GWMS.UI.Data
dbResult = dbController.GetWeekPlan();
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Info($"Effettuata lettura da DB per WeekPlanGet: {ts.TotalMilliseconds} ms");
Log.Trace($"Effettuata lettura da DB per WeekPlanGet: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
+1 -3
View File
@@ -24,9 +24,7 @@ namespace GWMS.UI.Data
/// <returns></returns>
public static SelectData Init(int minRound, int numDayPrev)
{
TimeSpan DayElapsed = DateTime.Now.Subtract(DateTime.Today);
int minDay = (int)((DayElapsed.TotalMinutes / minRound) + 1) * minRound;
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
DateTime endRounded = DateTime.Today.AddDays(1);
SelectData answ = new SelectData()
{
DateEnd = endRounded,
+12 -11
View File
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Version>1.0.2108.3011</Version>
<Version>1.0.2110.0119</Version>
<UserSecretsId>95c9f021-52d1-4390-a670-5810b7b777b0</UserSecretsId>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
@@ -11,6 +11,7 @@
<ItemGroup>
<Compile Remove="QuartzHostedService.cs" />
<Compile Remove="Services\BlazorTimer.cs" />
</ItemGroup>
<ItemGroup>
@@ -38,21 +39,21 @@
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="5.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.Uris" Version="5.0.1" />
<PackageReference Include="BlazorBarcodeScanner.ZXing.JS" Version="0.2.4" />
<PackageReference Include="Blazorise" Version="0.9.4.3" />
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.4.3" />
<PackageReference Include="Blazorise.Charts" Version="0.9.4.3" />
<PackageReference Include="Blazorise.Components" Version="0.9.4.3" />
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.4.3" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.9">
<PackageReference Include="Blazorise" Version="0.9.4.4" />
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.4.4" />
<PackageReference Include="Blazorise.Charts" Version="0.9.4.4" />
<PackageReference Include="Blazorise.Components" Version="0.9.4.4" />
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.4.4" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" ExcludeAssets="All" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.13.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
</ItemGroup>
<ItemGroup>
+5 -5
View File
@@ -56,26 +56,26 @@ namespace GWMS.UI.Health
}
}
public static async Task<HealthCheckResult> DbPlantLogTable(string dbName)
public static async Task<HealthCheckResult> DbPlantTable(string dbName)
{
using (var appDb = new GWMSContext())
{
string description = "Try check Table PlantLog";
List<GWMS.Data.DatabaseModels.PlantLogModel> recordList = new List<GWMS.Data.DatabaseModels.PlantLogModel>();
List<GWMS.Data.DatabaseModels.PlantDetailModel> recordList = new List<GWMS.Data.DatabaseModels.PlantDetailModel>();
var healthCheckData = new Dictionary<string, object>();
try
{
// provo a controllare se ho tab utenti
recordList = await Task.FromResult(appDb.DbSetPlantLog.ToList()).ConfigureAwait(false);
recordList = await Task.FromResult(appDb.DbSetPlant.ToList()).ConfigureAwait(false);
if (recordList.Count > 0)
{
description = $"Check PlantLog table, found {recordList.Count} records";
description = $"Check PlantDetail table, found {recordList.Count} records";
return HealthCheckResult.Healthy(description, healthCheckData);
}
}
catch (Exception exc)
{
Log.Error(exc, "Errore in esecuzione DbPlantLogTable");
Log.Error(exc, "Errore in esecuzione PlantDetail Table");
}
return HealthCheckResult.Degraded(description + $" {dbName}", null, healthCheckData);
+1
View File
@@ -1,5 +1,6 @@
@page "/GasStation"
@page "/GasStation/{OrderCode}"
@page "/GasStationLoad/{OrderCode}"
@using Blazorise.Components
@using GWMS.UI.Components
+3 -3
View File
@@ -140,10 +140,10 @@ namespace GWMS.UI.Pages
private void LocalReceivedBarcodeText(BarcodeReceivedEventArgs args)
{
// rimando a pagina con codice ordine....
NavManager.NavigateTo($"GasStation/{args.BarcodeText}");
NavManager.NavigateTo($"GasStationLoad/{SelPlantId}/{args.BarcodeText}");
}
private async Task reloadData()
private async Task ReloadAllData()
{
isLoading = true;
PlantsList = null;
@@ -175,7 +175,7 @@ namespace GWMS.UI.Pages
MessageService.ShowSearch = false;
MessageService.PageName = "Stazione";
MessageService.PageIcon = "fas fa-gas-pump pr-2";
await reloadData();
await ReloadAllData();
}
protected void ResetData()
+94
View File
@@ -0,0 +1,94 @@
@page "/GasStationLoad"
@page "/GasStationLoad/{PlantCode}/{OrderCode}"
@using Blazorise.Components
@using GWMS.UI.Components
@using BlazorBarcodeScanner.ZXing.JS
<div class="card">
<div class="card-header table-primary mb-0">
<div class="row">
<div class="col-12">
<div class="row">
<div class="col-6 col-lg-8 h4">
QRCode
</div>
<div class="col-6 col-lg-2">
@if (string.IsNullOrEmpty(OrderCode))
{
<button class="btn btn-sm btn-block btn-info" @onclick="() => ToggleShowCam()" title="reload"><i class="fas fa-camera"></i>&nbsp;show select</button>
}
else
{
<button class="btn btn-sm btn-block btn-success" @onclick="() => ToggleBCode()" title="reload"><i class="fas fa-qrcode"></i>&nbsp;re-scan</button>
}
</div>
<div class="col-12">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fas fa-gas-pump" aria-hidden="true"></span>
</span>
</div>
<select @bind="@SelPlantId" class="form-control form-control-sm">
<option value="0">--- Tutti ---</option>
@if (PlantsList != null)
{
foreach (var item in PlantsList)
{
<option value="@item.PlantId">@item.PlantCode | @item.PlantDesc</option>
}
}
</select>
</div>
</div>
</div>
</div>
<div class="col-12 text-right">
</div>
</div>
</div>
<div class="card-body p-1">
<div class="row small">
<div class="col-12 text-center">
<div class="form-group">
@if (SelPlantId == 0)
{
<h2 class="alert alert-danger">Manca Stazione</h2>
}
else
{
@if (string.IsNullOrEmpty(OrderCode))
{
<BlazorBarcodeScanner.ZXing.JS.BarcodeReader Title=""
StartCameraAutomatically="true"
ShowStart="false"
ShowReset="false"
ShowToggleTorch="false"
ShowVideoDeviceList="@showCamera"
ShowResult="false"
OnBarcodeReceived="LocalReceivedBarcodeText" />
}
else
{
<OrderLoad OrderCode="@OrderCode" PlantId="@SelPlantId"></OrderLoad>
}
}
</div>
</div>
</div>
@*<p class="small">
Work IN progress, links:
<ul>
<li>https://github.com/sabitertan/BlazorBarcodeScanner</li>
<li>https://github.com/tallichet/ZXingBlazor</li>
<li>https://github.com/LorsSilvermort/BlazorBarcodeReader</li>
<li>https://www.bing.com/search?q=blazor+server+qrcode+scanner&qs=n&form=QBRE&sp=-1&pq=blazor+server+qrcode+scanner&sc=0-28&sk=&cvid=D827470C199B47BDB39F277EFC72A266</li>
</ul>
</p>*@
</div>
@*<div class="card-footer p-1">
</div>*@
</div>
+206
View File
@@ -0,0 +1,206 @@
using BlazorBarcodeScanner.ZXing.JS;
using GWMS.Data.DTO;
using GWMS.UI.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GWMS.UI.Pages
{
[Authorize(Roles = "SuperAdmin, Admin, User")]
public partial class GasStationLoad : ComponentBase, IDisposable
{
#region Private Fields
private List<PlantDTO> PlantsList;
#endregion Private Fields
#region Protected Fields
/// <summary>
/// Valore PlantId filtrato da claim
/// </summary>
protected int ClaimPlantId = -1;
#endregion Protected Fields
#region Private Properties
private bool isLoading { get; set; } = false;
#endregion Private Properties
#region Protected Properties
protected string _plantCode { get; set; } = "";
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
[Inject]
protected GWMSDataService DataService { get; set; }
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
protected bool showCamera { get; set; } = false;
#endregion Protected Properties
#region Public Properties
public string BarcodeText { get; set; } = "";
[Parameter]
public string OrderCode
{
get
{
return BarcodeText;
}
set
{
BarcodeText = $"{value}";
}
}
[Parameter]
public string PlantCode
{
get
{
return _plantCode;
}
set
{
_plantCode = $"{value}";
}
}
[Parameter]
public int SelPlantId
{
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
{
answ = MessageService.Order_Filter.PlantId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.PlantId.Equals(value))
{
MessageService.Order_Filter.PlantId = value;
}
}
}
#endregion Public Properties
#region Private Methods
/// <summary>
/// Recupero Claims dell'utente...
///
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
/// </summary>
/// <returns></returns>
private async Task GetClaimsData()
{
// recupero auth
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
// se autenticato --> controllo i claims
if (user.Identity.IsAuthenticated)
{
// cerco il claim PlantId...
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
int.TryParse(plantClaim, out ClaimPlantId);
}
else
{
ClaimPlantId = -1;
}
}
private void LocalReceivedBarcodeText(BarcodeReceivedEventArgs args)
{
// rimando a pagina con codice ordine....
NavManager.NavigateTo($"GasStationLoad/{SelPlantId}/{args.BarcodeText}");
}
private async Task ReloadAllData()
{
isLoading = true;
PlantsList = null;
await GetClaimsData();
// se ho un plantId valido --> altrimenti non abilitato
if (ClaimPlantId == 0)
{
PlantsList = await DataService.PlantsGetAll();
}
else if (ClaimPlantId > 0)
{
var rawData = await DataService.PlantsGetAll();
PlantsList = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
SelPlantId = ClaimPlantId;
}
else
{
PlantsList = new List<PlantDTO>();
}
isLoading = false;
}
#endregion Private Methods
#region Protected Methods
protected override async Task OnInitializedAsync()
{
MessageService.ShowSearch = false;
MessageService.PageName = "Stazione";
MessageService.PageIcon = "fas fa-gas-pump pr-2";
await ReloadAllData();
}
protected void ResetData()
{
}
protected void ToggleBCode()
{
NavManager.NavigateTo("GasStation");
}
protected void ToggleShowCam()
{
showCamera = !showCamera;
}
#endregion Protected Methods
#region Public Methods
public void Dispose()
{
}
#endregion Public Methods
}
}
+20 -16
View File
@@ -24,22 +24,26 @@
</div>
</div>
</div>
<div class="row">
<div class="col-12 my-lg-5">
<SetupDiagnostics></SetupDiagnostics>
</div>
<div class="col-12 text-center">
<img class="img-fluid mb-3" src="./img/LogoPizzaferri.png" />
<h4>
Sistema di gestione e pianificazione logistica impianti distribuzione metano
</h4>
</div>
<div class="col-12 text-center mt-5">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4 badge badge-pill badge-dark">
<div class="px-1">
<a class="text-light" href="https://www.egalware.com/" target="_blank">powered by&nbsp;EgalWare <img width="24" class="img-fluid" src="img/LogoBlu.svg" /></a>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-12 my-lg-5">
<SetupDiagnostics></SetupDiagnostics>
</div>
<div class="col-12 text-center">
<img class="img-fluid mb-3" src="./img/LogoPizzaferri.png" />
<h4>
Sistema di gestione e pianificazione logistica impianti distribuzione metano
</h4>
</div>
<div class="col-12 text-center mt-5">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4 badge badge-pill badge-dark">
<div class="px-1">
<a class="text-light" href="https://www.egalware.com/" target="_blank">powered by&nbsp;EgalWare <img width="24" class="img-fluid" src="img/LogoBlu.svg" /></a>
</div>
</div>
</div>
</div>
</div>
+4 -14
View File
@@ -115,8 +115,6 @@ namespace GWMS.UI.Pages
}
}
private bool ShowCharts { get; set; } = false;
private bool ShowClosed
{
get
@@ -308,9 +306,6 @@ namespace GWMS.UI.Pages
protected void Edit(OrderModel selRecord)
{
// rileggo dal DB il record corrente...
#if false
currRecord = selRecord;
#endif
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
pUpd.Wait();
}
@@ -327,18 +322,17 @@ namespace GWMS.UI.Pages
protected override async Task OnInitializedAsync()
{
DataService.ResetController();
AppMService.ShowSearch = false;
AppMService.PageName = "Ordini";
AppMService.PageIcon = "fas fa-file-invoice pr-2";
AppMService.EA_SearchUpdated += OnSeachUpdated;
ShowClosed = false;
await ReloadAllData();
}
protected async Task ReloadAllData()
{
isLoading = true;
//PlantsList = await DataService.PlantsGetAll();
SuppliersList = await DataService.SuppliersGetAll();
PlantsList = null;
await GetClaimsData();
@@ -358,7 +352,6 @@ namespace GWMS.UI.Pages
PlantsList = new List<PlantDTO>();
}
isLoading = false;
await ReloadData();
}
@@ -370,6 +363,7 @@ namespace GWMS.UI.Pages
protected async Task ResetFilter()
{
SelPlantId = 0;
currRecord = null;
SearchRecords = null;
ListRecords = null;
@@ -387,7 +381,6 @@ namespace GWMS.UI.Pages
protected async Task UpdateData()
{
currRecord = null;
DataService.ResetController();
await ReloadData();
}
@@ -417,11 +410,8 @@ namespace GWMS.UI.Pages
public async void OnSeachUpdated()
{
await InvokeAsync(() =>
{
Task task = UpdateData();
StateHasChanged();
});
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
-53
View File
@@ -1,53 +0,0 @@
@page "/Parameters"
@using GWMS.UI.Data
@using GWMS.UI.Components
@inject GWMSDataService DataService
@inject MessageService AppMService
@inject IJSRuntime JSRuntime
<div class="card">
<div class="card-header table-primary h3">
<h2>Setup Parametri</h2>
</div>
<div class="card-body">
<div class="row">
<div class="col-12">
@if (processRunning)
{
<LoadingData></LoadingData>
}
</div>
<div class="col-12">
@*<SetupSim />*@
</div>
</div>
</div>
</div>
@code {
protected int numDays { get; set; } = 7;
protected int stepMin { get; set; } = 30;
protected int maxHourRate { get; set; } = 800;
protected bool processRunning { get; set; } = false;
protected async Task resetDB()
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", "Sicuro di voler risimulare l'intero set di dati?"))
return;
processRunning = true;
//DataService.RegenDB(numDays, stepMin, maxHourRate);
processRunning = false;
}
protected override async Task OnInitializedAsync()
{
AppMService.ShowSearch = false;
AppMService.PageName = "Setup Parametri";
AppMService.PageIcon = "fas fa-wrench pr-2";
}
}
+186 -3
View File
@@ -1,7 +1,190 @@
@page "/PlantAnalisys"
<h3>PlantAnalisys</h3>
@using Blazorise.Components
@using GWMS.UI.Components
@code {
<div class="card">
<div class="card-header table-primary h3">
<div class="row">
<div class="col-6 col-lg-2 h3">
Dettaglio Impianto
</div>
<div class="col-6 col-lg-2 text-right">
<div class="d-flex justify-content-between">
<div class="p-2">
<div class="form-group mb-0">
<Button id="btnReset" class="btn btn-info btn-sm btn-block" Clicked="ResetFilter" title="Reset Filter"><span class="oi oi-loop-circular"></span></Button>
</div>
</div>
<div class="p-2">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
</div>
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="togRefill" title="Solo con Carichi / Mostra tutti" @bind-value="@ShowOnlyRefill" checked="@ShowOnlyRefill" />
<label class="custom-control-label small" for="togRefill"><sub>Consegne</sub></label>
</div>
</div>
</div>
@*<div class="p-2">
@if (ShowAddNew)
{
<button class="btn btn-block btn-sm btn-success" @onclick="CreateNew" title="Aggiunta nuovo Ordine"><i class="far fa-calendar-plus"></i></button>
}
</div>*@
</div>
</div>
<div class="col-12 col-lg-4 text-right">
<div class="d-flex justify-content-between">
<div class="p-2">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">inizio:</span>
</div>
<DateEdit class="form-control form-control-sm" TValue="DateTime?" Date="@DateStart" DateChanged="@OnDateStartChanged" />
</div>
</div>
<div class="p-2">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">fine:</span>
</div>
<DateEdit class="form-control form-control-sm" TValue="DateTime?" Date="@DateEnd" DateChanged="@OnDateEndChanged" />
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-4 text-right">
<div class="d-flex justify-content-between">
<div class="p-2">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fas fa-gas-pump" aria-hidden="true"></span>
</span>
</div>
<select @bind="@SelPlantId" class="form-control form-control-sm">
<option value="0">--- Tutti ---</option>
@if (PlantsList != null)
{
foreach (var item in PlantsList)
{
<option value="@item.PlantId">@item.PlantCode | @item.PlantDesc</option>
}
}
</select>
</div>
</div>
<div class="p-2">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">
<span class="fas fa-industry" aria-hidden="true"></span>
</span>
</div>
<select @bind="@SelSupplierId" class="form-control form-control-sm">
<option value="0">--- Tutti ---</option>
@if (SuppliersList != null)
{
foreach (var item in SuppliersList)
{
<option value="@item.SupplierId">@item.SupplierCode | @item.SupplierDesc</option>
}
}
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card-body p-1">
@if (currRecord != null)
{
<OrderAdminEditor currItem="@currRecord" DataReset="ResetData" DataUpdated="UpdateData" SupplierId="@currRecord.SupplierId"></OrderAdminEditor>
}
@if (ListRecords == null)
{
<LoadingData></LoadingData>
}
else if (totalCount == 0)
{
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
}
else
{
<div class="row">
<div class="col-12">
<table class="table table-sm table-striped table-responsive-lg">
<thead>
<tr>
<th>Impianto</th>
<th>Data</th>
<th>Livello Apertura</th>
<th>Livello Chiusura</th>
<th class="text-right">Carico <i class="fas fa-truck-moving"></i></th>
<th class="text-right">Ordine <i class="fas fa-file"></i></th>
</tr>
</thead>
<tbody>
@foreach (var record in ListRecords)
{
@*<tr class="@checkSelect(@record.OrderId)">*@
<tr>
<td>
<div>@record.PlantCode</div>
<div class="small">@record.PlantDesc</div>
</td>
<td>
<div>@record.DataRif.ToString("yyyy.MM.dd")</div>
<div class="small">@record.DataRif.ToString("dddd")</div>
</td>
<td>@record.LevelStart.ToString("N0")</td>
<td>@record.LevelEnd.ToString("N0")</td>
<td class="text-right">
@if (record.HasRefill)
{
if (record.HasOrder)
{
<span class="text-success">@record.LevelMin.ToString("N0") <i class="fas fa-sort-amount-up"></i> @record.LevelMax.ToString("N0")</span>
}
else
{
<span class="text-danger">@record.LevelMin.ToString("N0") <i class="fas fa-sort-amount-up"></i> @record.LevelMax.ToString("N0")</span>
}
}
}
</td>
<td class="text-right">
@if (record.HasOrder)
{
@if (currRecord == null)
{
<button class="btn btn-sm btn-info" @onclick="() => Edit(record)" title="Edit Ordine">
<span><i class="fas fa-truck-moving"></i></span>
</button>
}
else
{
<button class="btn btn-sm btn-secondary disabled">
<span><i class="fas fa-truck-moving"></i></span>
</button>
}
}
else if (ShowAddNew && record.HasRefill)
{
<button class="btn btn-sm btn-success" @onclick="() => CreateNew(record)" title="Aggiunta nuovo Ordine"><i class="far fa-calendar-plus"></i></button>
}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
}
</div>
<div class="card-footer p-1">
<DataPager PageSize="numRecord" currPage="currPage" numRecordChanged="ForceReload" numPageChanged="ForceReloadPage" totalCount="totalCount" showLoading="isLoading" />
</div>
</div>
+434
View File
@@ -0,0 +1,434 @@
using GWMS.Data.DatabaseModels;
using GWMS.Data.DTO;
using GWMS.UI.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.JSInterop;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GWMS.UI.Pages
{
[Authorize(Roles = "SuperAdmin, Admin, User")]
public partial class PlantAnalisys : ComponentBase, IDisposable
{
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private bool _ShowOnlyRefill = false;
private OrderModel currRecord = null;
private List<PlantLevSumDTO> ListRecords;
private List<PlantDTO> PlantsList;
private List<PlantLevSumDTO> SearchRecords;
private List<SupplierModel> SuppliersList;
#endregion Private Fields
#region Protected Fields
/// <summary>
/// Valore PlantId filtrato da claim
/// </summary>
protected int ClaimPlantId = -1;
#endregion Protected Fields
#region Private Properties
private int _currPage { get; set; } = 1;
private int _numRecord { get; set; } = 10;
private int currPage
{
get => _currPage;
set
{
if (_currPage != value)
{
_currPage = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
private bool isLoading { get; set; } = false;
private int numRecord
{
get => _numRecord;
set
{
if (_numRecord != value)
{
_numRecord = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
private int SelPlantId
{
get
{
int answ = 0;
if (AppMService.Order_Filter != null)
{
answ = AppMService.Order_Filter.PlantId;
}
return answ;
}
set
{
if (!AppMService.Order_Filter.PlantId.Equals(value))
{
AppMService.Order_Filter.PlantId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
private int SelSupplierId
{
get
{
int answ = 0;
if (AppMService.Order_Filter != null)
{
answ = AppMService.Order_Filter.SupplierId;
}
return answ;
}
set
{
if (!AppMService.Order_Filter.SupplierId.Equals(value))
{
AppMService.Order_Filter.SupplierId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
private bool ShowOnlyRefill
{
get
{
return _ShowOnlyRefill;
}
set
{
_ShowOnlyRefill = value;
currPage = 1;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
#endregion Private Properties
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
[Inject]
protected GWMSDataService DataService { get; set; }
protected DateTime DateEnd
{
get
{
DateTime answ = DateTime.Today.AddDays(1);
if (AppMService.Order_Filter != null)
{
answ = AppMService.Order_Filter.DateEnd;
}
return answ;
}
set
{
if (!AppMService.Order_Filter.DateEnd.Equals(value))
{
AppMService.Order_Filter.DateEnd = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
protected DateTime DateStart
{
get
{
DateTime answ = DateTime.Today.AddDays(-1);
if (AppMService.Order_Filter != null)
{
answ = AppMService.Order_Filter.DateStart;
}
return answ;
}
set
{
if (!AppMService.Order_Filter.DateStart.Equals(value))
{
AppMService.Order_Filter.DateStart = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
protected int totalCount
{
get
{
int answ = 0;
if (SearchRecords != null)
{
answ = SearchRecords.Count;
}
return answ;
}
}
#endregion Protected Properties
#region Public Properties
public bool ShowAddNew
{
get
{
bool answ = false;
answ = (SelSupplierId > 0 && SelPlantId > 0);
return answ;
}
}
#endregion Public Properties
#region Private Methods
/// <summary>
/// Recupero Claims dell'utente...
///
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
/// </summary>
/// <returns></returns>
private async Task GetClaimsData()
{
// recupero auth
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
// se autenticato --> controllo i claims
if (user.Identity.IsAuthenticated)
{
// cerco il claim PlantId...
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
int.TryParse(plantClaim, out ClaimPlantId);
}
else
{
ClaimPlantId = -1;
}
}
private void OnDateEndChanged(DateTime? date)
{
DateEnd = (DateTime)date;
}
private void OnDateStartChanged(DateTime? date)
{
DateStart = (DateTime)date;
}
private async Task ReloadData()
{
isLoading = true;
ListRecords = null;
try
{
SearchRecords = await DataService.PlantsAnalisysGetByCode(AppMService.Order_Filter);
SearchRecords = SearchRecords.Where(x => x.HasRefill || !_ShowOnlyRefill).ToList();
ListRecords = SearchRecords
.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
}
catch (Exception exc)
{
Log.Error($"Eccezione in ReloadData:{Environment.NewLine}{exc}");
}
isLoading = false;
}
#endregion Private Methods
#region Protected Methods
/// <summary>
/// Creazione nuovo record Ordine
/// </summary>
protected void CreateNew(PlantLevSumDTO currItem)
{
var currPlant = PlantsList.Where(x => x.PlantId == SelPlantId).FirstOrDefault();
var currSuppl = SuppliersList.Where(x => x.SupplierId == SelSupplierId).FirstOrDefault();
if (currPlant != null && currSuppl != null)
{
DateTime ordDate = currItem.DataRif.AddDays(-1);
// creo un nuovo record
currRecord = new OrderModel()
{
DtOrder = ordDate,
PlantId = SelPlantId,
SupplierId = SelSupplierId,
OrderDesc = $"Ord Man {currPlant.PlantDesc} - {ordDate}",
TransporterId = 1,
OrderCode = $"O{currPlant.PlantCode}{ordDate:yyMMddHHmm}",
LevelStart = Math.Round(currItem.LevelMin),
LevelEnd = Math.Round(currItem.LevelMax),
DtExecStart = currItem.FillStart,
DtExecEnd = currItem.FillEnd,
ExecutionQty = Math.Ceiling((currItem.LevelMax - currItem.LevelMin) / currItem.DeltaMin) * currItem.DeltaMin,
OrderQty = Math.Ceiling((currItem.LevelMax - currItem.LevelMin) / 2000) * 2000
};
//// aggiorno filtro
//AppMService.Order_Filter = SelectOrderData.Init(5, 10);
}
}
protected void Edit(PlantLevSumDTO selRecord)
{
// rileggo dal DB il record corrente...
var pUpd = Task.Run(async () =>
{
currRecord = await DataService.OrderGetById(selRecord.OrdersIds.FirstOrDefault());
});
pUpd.Wait();
}
protected void ForceReload(int newNum)
{
numRecord = newNum;
}
protected void ForceReloadPage(int newNum)
{
currPage = newNum;
}
protected override async Task OnInitializedAsync()
{
AppMService.ShowSearch = false;
AppMService.PageName = "Ordini";
AppMService.PageIcon = "fas fa-file-invoice pr-2";
AppMService.EA_SearchUpdated += OnSeachUpdated;
await ReloadAllData();
}
protected async Task ReloadAllData()
{
isLoading = true;
SuppliersList = await DataService.SuppliersGetAll();
PlantsList = null;
await GetClaimsData();
// se ho un plantId valido --> altrimenti non abilitato
if (ClaimPlantId == 0)
{
PlantsList = await DataService.PlantsGetAll();
}
else if (ClaimPlantId > 0)
{
var rawData = await DataService.PlantsGetAll();
PlantsList = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
SelPlantId = ClaimPlantId;
}
else
{
PlantsList = new List<PlantDTO>();
}
isLoading = false;
await ReloadData();
}
protected void ResetData()
{
DataService.rollBackEdit(currRecord);
currRecord = null;
}
protected async Task ResetFilter()
{
SelPlantId = 0;
currRecord = null;
SearchRecords = null;
ListRecords = null;
AppMService.Order_Filter = SelectOrderData.Init(5, 10);
await DataService.PlantsAnalisysReset(AppMService.Order_Filter);
await ReloadAllData();
}
protected void Select(OrderModel selRecord)
{
// applico filtro da selezione
currRecord = selRecord;
}
protected async Task UpdateData()
{
currRecord = null;
await DataService.PlantsAnalisysReset(AppMService.Order_Filter);
await ReloadData();
}
#endregion Protected Methods
#region Public Methods
public string checkSelect(int OrderId)
{
string answ = "";
if (currRecord != null)
{
try
{
answ = (currRecord.OrderId == OrderId) ? "table-info" : "";
}
catch
{ }
}
return answ;
}
public void Dispose()
{
AppMService.EA_SearchUpdated -= OnSeachUpdated;
}
public async void OnSeachUpdated()
{
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
}
}
+87
View File
@@ -0,0 +1,87 @@
@page "/PlantSetup"
@using GWMS.UI.Data
@using GWMS.UI.Components
<div class="card">
<div class="card-header table-primary h3">
<h2>Dettaglio Parametri</h2>
</div>
<div class="card-body">
<div class="row">
<div class="col-12">
@if (currRecord != null)
{
<PlantEditor currItem="@currRecord" DataReset="ResetData" DataUpdated="UpdateData"></PlantEditor>
}
@if (ListRecords == null)
{
<LoadingData></LoadingData>
}
else if (totalCount == 0)
{
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
}
else
{
<table class="table table-sm table-striped table-responsive-lg">
<thead>
<tr>
<th></th>
<th>Codice</th>
<th>Impianto</th>
<th>Livello</th>
<th class="text-right">Soglia Riordino</th>
</tr>
</thead>
<tbody>
@foreach (var record in ListRecords)
{
<tr class="@checkSelect(@record.PlantId)">
<td class="text-nowrap">
@if (currRecord == null)
{
<button class="btn btn-sm btn-info" @onclick="() => Edit(record)">
<span class="oi oi-pencil"></span>
</button>
}
else
{
<button class="btn btn-sm btn-secondary disabled">
<i class="oi oi-pencil"></i>
</button>
}
</td>
<td>
<span>@record.PlantCode</span>
</td>
<td>
<span>@record.PlantDesc</span>
</td>
<td>
<div class="row">
<div class="col-6">
<b>@record.LevelAct.ToString("N0")</b> kg
</div>
<div class="col-6 text-right">
<span>@record.LevelMax.ToString("N0")</span>
</div>
<div class="col-12">
<Progress>
<ProgressBar Value="@record.LevelRatio" Striped="false" Animated="false" />
</Progress>
</div>
</div>
</td>
<td class="text-right">
<span>@record.ReorderRatio.ToString("N1") % = <b>@record.LevelReorder.ToString("N0")</b> kg</span>
</td>
</tr>
}
</tbody>
</table>
}
</div>
</div>
</div>
</div>
+170
View File
@@ -0,0 +1,170 @@
using GWMS.Data.DTO;
using GWMS.UI.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GWMS.UI.Pages
{
[Authorize(Roles = "SuperAdmin, Admin")]
public partial class PlantSetup : ComponentBase, IDisposable
{
#region Private Fields
private PlantDTO currRecord = null;
private List<PlantDTO> ListRecords;
#endregion Private Fields
#region Protected Fields
/// <summary>
/// Valore PlantId filtrato da claim
/// </summary>
protected int ClaimPlantId = -1;
#endregion Protected Fields
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
[Inject]
protected GWMSDataService DataService { get; set; }
[Inject]
protected IJSRuntime JSRuntime { get; set; }
protected int maxHourRate { get; set; } = 800;
protected int numDays { get; set; } = 7;
protected int stepMin { get; set; } = 30;
protected int totalCount
{
get
{
int answ = 0;
if (ListRecords != null)
{
answ = ListRecords.Count;
}
return answ;
}
}
#endregion Protected Properties
#region Private Methods
/// <summary>
/// Recupero Claims dell'utente...
///
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
/// </summary>
/// <returns></returns>
private async Task GetClaimsData()
{
// recupero auth
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
// se autenticato --> controllo i claims
if (user.Identity.IsAuthenticated)
{
// cerco il claim PlantId...
var plantClaim = user.FindFirst(c => c.Type == "PlantId")?.Value;
int.TryParse(plantClaim, out ClaimPlantId);
}
else
{
ClaimPlantId = -1;
}
}
private async Task ReloadAllData()
{
ListRecords = null;
await GetClaimsData();
// se ho un plantId valido --> altrimenti non abilitato
if (ClaimPlantId == 0)
{
ListRecords = await DataService.PlantsGetAll();
}
else if (ClaimPlantId > 0)
{
var rawData = await DataService.PlantsGetAll();
ListRecords = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
}
else
{
ListRecords = new List<PlantDTO>();
}
}
#endregion Private Methods
#region Protected Methods
protected void Edit(PlantDTO selRecord)
{
// rileggo dal DB il record corrente...
var pUpd = Task.Run(async () => currRecord = await DataService.PlantsGetByCode(selRecord.PlantCode));
pUpd.Wait();
}
protected override async Task OnInitializedAsync()
{
AppMService.ShowSearch = false;
AppMService.PageName = "Setup Impianti";
AppMService.PageIcon = "fas fa-wrench pr-2";
await ReloadAllData();
}
protected void ResetData()
{
DataService.rollBackEdit(currRecord);
currRecord = null;
}
protected async Task UpdateData()
{
currRecord = null;
await DataService.InvalidateAllCache();
await ReloadAllData();
}
#endregion Protected Methods
#region Public Methods
public string checkSelect(int PlantId)
{
string answ = "";
if (currRecord != null)
{
try
{
answ = (currRecord.PlantId == PlantId) ? "table-info" : "";
}
catch
{ }
}
return answ;
}
public void Dispose()
{
}
#endregion Public Methods
}
}
+2 -2
View File
@@ -2,7 +2,7 @@
@using GWMS.UI.Components
<div class="row">
<div class="row mx-0">
@if (ListRecords == null)
{
<div class="col-12">
@@ -22,7 +22,7 @@
@foreach (var record in ListRecords)
{
<div class="col-12 col-xl-6 py-2">
<PlantDetail currItem="@record"></PlantDetail>
<PlantOverview currItem="@record"></PlantOverview>
</div>
}
</div>
+5 -8
View File
@@ -99,7 +99,7 @@ namespace GWMS.UI.Pages
}
}
private async Task reloadData()
private async Task ReloadAllData()
{
isLoading = true;
ListRecords = null;
@@ -131,7 +131,7 @@ namespace GWMS.UI.Pages
MessageService.PageName = "Impianti";
MessageService.PageIcon = "fas fa-gas-pump pr-2";
MessageService.EA_SearchUpdated += OnSeachUpdated;
await reloadData();
await ReloadAllData();
}
protected void Select(PlantDTO selRecord)
@@ -143,7 +143,7 @@ namespace GWMS.UI.Pages
protected async Task UpdateData()
{
currRecord = null;
await reloadData();
await ReloadAllData();
}
#endregion Protected Methods
@@ -157,11 +157,8 @@ namespace GWMS.UI.Pages
public async void OnSeachUpdated()
{
await InvokeAsync(() =>
{
Task task = UpdateData();
StateHasChanged();
});
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
+33 -35
View File
@@ -76,17 +76,17 @@ namespace GWMS.UI.Pages
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.PlantId;
answ = AppMService.Order_Filter.PlantId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.PlantId.Equals(value))
if (!AppMService.Order_Filter.PlantId.Equals(value))
{
MessageService.Order_Filter.PlantId = value;
AppMService.Order_Filter.PlantId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -98,29 +98,30 @@ namespace GWMS.UI.Pages
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.SupplierId;
answ = AppMService.Order_Filter.SupplierId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.SupplierId.Equals(value))
if (!AppMService.Order_Filter.SupplierId.Equals(value))
{
MessageService.Order_Filter.SupplierId = value;
AppMService.Order_Filter.SupplierId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
}
}
private bool ShowCharts { get; set; } = false;
#endregion Private Properties
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
@@ -132,17 +133,17 @@ namespace GWMS.UI.Pages
get
{
DateTime answ = DateTime.Today.AddDays(1);
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.DateEnd;
answ = AppMService.Order_Filter.DateEnd;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.DateEnd.Equals(value))
if (!AppMService.Order_Filter.DateEnd.Equals(value))
{
MessageService.Order_Filter.DateEnd = value;
AppMService.Order_Filter.DateEnd = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -154,17 +155,17 @@ namespace GWMS.UI.Pages
get
{
DateTime answ = DateTime.Today.AddDays(-1);
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.DateStart;
answ = AppMService.Order_Filter.DateStart;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.DateStart.Equals(value))
if (!AppMService.Order_Filter.DateStart.Equals(value))
{
MessageService.Order_Filter.DateStart = value;
AppMService.Order_Filter.DateStart = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -174,9 +175,6 @@ namespace GWMS.UI.Pages
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
@@ -241,7 +239,7 @@ namespace GWMS.UI.Pages
private async Task ReloadData()
{
isLoading = true;
SearchRecords = await DataService.OrdersGetFilt(MessageService.Order_Filter);
SearchRecords = await DataService.OrdersGetFilt(AppMService.Order_Filter);
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
isLoading = false;
}
@@ -252,7 +250,9 @@ namespace GWMS.UI.Pages
protected void Edit(OrderModel selRecord)
{
currRecord = selRecord;
// rileggo dal DB il record corrente...
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
pUpd.Wait();
}
protected void ForceReload(int newNum)
@@ -267,19 +267,20 @@ namespace GWMS.UI.Pages
protected override async Task OnInitializedAsync()
{
MessageService.ShowSearch = false;
MessageService.PageName = "Fornitore";
MessageService.PageIcon = "fas fa-industry pr-2";
MessageService.EA_SearchUpdated += OnSeachUpdated;
AppMService.ShowSearch = false;
AppMService.PageName = "Fornitore";
AppMService.PageIcon = "fas fa-industry pr-2";
AppMService.EA_SearchUpdated += OnSeachUpdated;
await ReloadAllData();
}
protected async Task ReloadAllData()
{
isLoading = true;
PlantsList = await DataService.PlantsGetAll();
SelSupplierId = 0;
SuppliersList = null;
await GetClaimsData();
PlantsList = await DataService.PlantsGetAll();
// se ho un plantId valido --> altrimenti non abilitato
if (ClaimSupplierId == 0)
{
@@ -310,7 +311,7 @@ namespace GWMS.UI.Pages
currRecord = null;
SearchRecords = null;
ListRecords = null;
MessageService.Order_Filter = SelectOrderData.Init(5, 7);
AppMService.Order_Filter = SelectOrderData.Init(5, 7);
await ReloadAllData();
}
@@ -347,16 +348,13 @@ namespace GWMS.UI.Pages
public void Dispose()
{
MessageService.EA_SearchUpdated -= OnSeachUpdated;
AppMService.EA_SearchUpdated -= OnSeachUpdated;
}
public async void OnSeachUpdated()
{
await InvokeAsync(() =>
{
Task task = UpdateData();
StateHasChanged();
});
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
+31
View File
@@ -0,0 +1,31 @@
@page "/Test"
@using GWMS.UI.Components
<div class="row mx-0">
@if (ListRecords == null)
{
<div class="col-12">
<LoadingData></LoadingData>
</div>
}
else if (totalCount == 0)
{
<div class="col-12">
<div class="alert alert-warning text-center display-4">Nessun record trovato</div>
</div>
}
else
{
<div class="col-12">
<div class="row">
@foreach (var record in ListRecords)
{
<div class="col-12 col-xl-6 py-2">
<PlantOverview currItem="@record"></PlantOverview>
</div>
}
</div>
</div>
}
</div>
+147
View File
@@ -0,0 +1,147 @@
using GWMS.Data.DTO;
using GWMS.UI.Data;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GWMS.UI.Pages
{
[AllowAnonymous]
public partial class Test : ComponentBase, IDisposable
{
#region Private Fields
private PlantDTO currRecord = null;
private List<PlantDTO> ListRecords;
#endregion Private Fields
#region Protected Fields
/// <summary>
/// Valore PlantId filtrato da claim
/// </summary>
protected int ClaimPlantId = -1;
#endregion Protected Fields
#region Private Properties
private bool isLoading { get; set; } = false;
private bool ShowCharts { get; set; } = false;
#endregion Private Properties
#region Protected Properties
[Inject]
protected GWMSDataService DataService { get; set; }
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
protected int totalCount
{
get
{
int answ = 0;
if (ListRecords != null)
{
answ = ListRecords.Count;
}
return answ;
}
}
#endregion Protected Properties
#region Private Methods
/// <summary>
/// Recupero Claims dell'utente...
///
/// https://docs.microsoft.com/it-it/aspnet/core/blazor/security/?view=aspnetcore-5.0
/// </summary>
/// <returns></returns>
private async Task GetClaimsData()
{
ClaimPlantId = 0;
}
private async Task ReloadAllData()
{
isLoading = true;
ListRecords = null;
await GetClaimsData();
// se ho un plantId valido --> altrimenti non abilitato
if (ClaimPlantId == 0)
{
ListRecords = await DataService.PlantsGetAll();
}
else if (ClaimPlantId > 0)
{
var rawData = await DataService.PlantsGetAll();
ListRecords = rawData.Where(x => x.PlantId == ClaimPlantId).ToList();
}
else
{
ListRecords = new List<PlantDTO>();
}
isLoading = false;
}
#endregion Private Methods
#region Protected Methods
protected override async Task OnInitializedAsync()
{
MessageService.ShowSearch = false;
MessageService.PageName = "Impianti";
MessageService.PageIcon = "fas fa-gas-pump pr-2";
MessageService.EA_SearchUpdated += OnSeachUpdated;
await ReloadAllData();
}
protected void Select(PlantDTO selRecord)
{
// applico filtro da selezione
currRecord = selRecord;
}
protected async Task UpdateData()
{
currRecord = null;
await ReloadAllData();
}
#endregion Protected Methods
#region Public Methods
public void Dispose()
{
MessageService.EA_SearchUpdated -= OnSeachUpdated;
}
public async void OnSeachUpdated()
{
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
}
}
+33 -35
View File
@@ -22,7 +22,6 @@ namespace GWMS.UI.Pages
private List<OrderModel> ListRecords;
private List<PlantDTO> PlantsList;
private List<OrderModel> SearchRecords;
private List<TransporterModel> TransportersList;
#endregion Private Fields
@@ -100,18 +99,18 @@ namespace GWMS.UI.Pages
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.PlantId;
answ = AppMService.Order_Filter.PlantId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.PlantId.Equals(value))
if (!AppMService.Order_Filter.PlantId.Equals(value))
{
currRecord = null;
MessageService.Order_Filter.PlantId = value;
AppMService.Order_Filter.PlantId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -123,18 +122,18 @@ namespace GWMS.UI.Pages
get
{
int answ = 0;
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.TransporterId;
answ = AppMService.Order_Filter.TransporterId;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.TransporterId.Equals(value))
if (!AppMService.Order_Filter.TransporterId.Equals(value))
{
currRecord = null;
MessageService.Order_Filter.TransporterId = value;
AppMService.Order_Filter.TransporterId = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -145,6 +144,9 @@ namespace GWMS.UI.Pages
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
[Inject]
protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }
@@ -156,17 +158,17 @@ namespace GWMS.UI.Pages
get
{
DateTime answ = DateTime.Today.AddDays(1);
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.DateEnd;
answ = AppMService.Order_Filter.DateEnd;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.DateEnd.Equals(value))
if (!AppMService.Order_Filter.DateEnd.Equals(value))
{
MessageService.Order_Filter.DateEnd = value;
AppMService.Order_Filter.DateEnd = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -178,17 +180,17 @@ namespace GWMS.UI.Pages
get
{
DateTime answ = DateTime.Today.AddDays(-1);
if (MessageService.Order_Filter != null)
if (AppMService.Order_Filter != null)
{
answ = MessageService.Order_Filter.DateStart;
answ = AppMService.Order_Filter.DateStart;
}
return answ;
}
set
{
if (!MessageService.Order_Filter.DateStart.Equals(value))
if (!AppMService.Order_Filter.DateStart.Equals(value))
{
MessageService.Order_Filter.DateStart = value;
AppMService.Order_Filter.DateStart = value;
var pUpd = Task.Run(async () => await ReloadData());
pUpd.Wait();
}
@@ -198,9 +200,6 @@ namespace GWMS.UI.Pages
[Inject]
protected IJSRuntime JSRuntime { get; set; }
[Inject]
protected MessageService MessageService { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; }
@@ -235,6 +234,7 @@ namespace GWMS.UI.Pages
/// <returns></returns>
private async Task GetClaimsData()
{
ClaimTransporterId = -1;
// recupero auth
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
var user = authState.User;
@@ -266,9 +266,8 @@ namespace GWMS.UI.Pages
private async Task ReloadData()
{
isLoading = true;
SearchRecords = await DataService.OrdersGetFilt(MessageService.Order_Filter);
SearchRecords = await DataService.OrdersGetFilt(AppMService.Order_Filter);
ListRecords = SearchRecords.Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
//ListRecords = SearchRecords.Where(x => x.TransporterId == TransporterIdFilt).Skip(numRecord * (currPage - 1)).Take(numRecord).ToList();
isLoading = false;
}
@@ -278,7 +277,9 @@ namespace GWMS.UI.Pages
protected void Edit(OrderModel selRecord)
{
currRecord = selRecord;
// rileggo dal DB il record corrente...
var pUpd = Task.Run(async () => currRecord = await DataService.OrderGetByCode(selRecord.OrderCode));
pUpd.Wait();
}
protected void ForceReload(int newNum)
@@ -295,10 +296,10 @@ namespace GWMS.UI.Pages
{
SelPlantId = 0;
SelTranspId = 0;
MessageService.ShowSearch = false;
MessageService.PageName = "Fornitore";
MessageService.PageIcon = "fas fa-industry pr-2";
MessageService.EA_SearchUpdated += OnSeachUpdated;
AppMService.ShowSearch = false;
AppMService.PageName = "Fornitore";
AppMService.PageIcon = "fas fa-industry pr-2";
AppMService.EA_SearchUpdated += OnSeachUpdated;
await ReloadAllData();
}
@@ -306,6 +307,7 @@ namespace GWMS.UI.Pages
{
isLoading = true;
PlantsList = await DataService.PlantsGetAll();
SelTranspId = 0;
TransportersList = null;
await GetClaimsData();
// se ho un plantId valido --> altrimenti non abilitato
@@ -324,7 +326,6 @@ namespace GWMS.UI.Pages
PlantsList = new List<PlantDTO>();
}
isLoading = false;
await ReloadData();
}
@@ -339,7 +340,7 @@ namespace GWMS.UI.Pages
currRecord = null;
SearchRecords = null;
ListRecords = null;
MessageService.Order_Filter = SelectOrderData.Init(5, 7);
AppMService.Order_Filter = SelectOrderData.Init(5, 7);
await ReloadAllData();
}
@@ -395,16 +396,13 @@ namespace GWMS.UI.Pages
public void Dispose()
{
MessageService.EA_SearchUpdated -= OnSeachUpdated;
AppMService.EA_SearchUpdated -= OnSeachUpdated;
}
public async void OnSeachUpdated()
{
await InvokeAsync(() =>
{
Task task = UpdateData();
StateHasChanged();
});
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
+12 -3
View File
@@ -141,9 +141,18 @@
</button>
}
</td>
<td>@user.Identity.Id.Substring(0, 4)...</td>
@*<td>@user.UserName</td>*@
<td><span class="badge badge-pill @checkSem(user.Identity.EmailConfirmed)" title="Email validata"><span class="oi oi-check" aria-hidden="true"></span></span> @user.Identity.Email</td>
<td>@user.Identity.Id.Substring(0, 8)...</td>
<td>
@if (user.Identity.EmailConfirmed)
{
<span class="badge badge-pill badge-success" title="Email validata"><span class="oi oi-check" aria-hidden="true"></span></span>
}
else
{
<span class="badge badge-pill badge-danger" title="Email NON ancora validata!"><span class="oi oi-check" aria-hidden="true"></span></span>
}
&nbsp;@user.Identity.Email
</td>
<td>
@ShowRoles(user.Roles)
</td>
+1 -9
View File
@@ -452,11 +452,6 @@ namespace GWMS.UI.Pages
#region Public Methods
public string checkSem(bool valore)
{
return valore ? "badge-success" : "badge-danger";
}
public void Dispose()
{
AppMService.EA_SearchUpdated -= OnSeachUpdated;
@@ -509,10 +504,7 @@ namespace GWMS.UI.Pages
public async void OnSeachUpdated()
{
await GetUsers();
await InvokeAsync(() =>
{
StateHasChanged();
});
StateHasChanged();
}
public string ShowClaims(List<System.Security.Claims.Claim> ClaimList)
+2 -5
View File
@@ -243,11 +243,8 @@ namespace GWMS.UI.Pages
public async void OnSeachUpdated()
{
await InvokeAsync(() =>
{
Task task = UpdateData();
StateHasChanged();
});
await UpdateData();
StateHasChanged();
}
#endregion Public Methods
-49
View File
@@ -1,49 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Timers;
namespace GWMS.UI.Services
{
/// <summary>
/// Timer a consumo
/// https://wellsb.com/csharp/aspnet/blazor-timer-navigate-programmatically/
/// (da verificare)
/// </summary>
public class BlazorTimer
{
#region Private Fields
private Timer _timer;
#endregion Private Fields
#region Public Events
public event Action OnElapsed;
#endregion Public Events
#region Private Methods
private void NotifyTimerElapsed(Object source, ElapsedEventArgs e)
{
OnElapsed?.Invoke();
_timer.Dispose();
}
#endregion Private Methods
#region Public Methods
public void SetTimer(double interval)
{
_timer = new Timer(interval);
_timer.Elapsed += NotifyTimerElapsed;
_timer.Enabled = true;
}
#endregion Public Methods
}
}
+1
View File
@@ -2,6 +2,7 @@
@using GWMS.UI.Data
@using GWMS.UI.Components
@inject MessageService MessageService
@implements IDisposable
+12 -6
View File
@@ -52,6 +52,12 @@
<span class="@hideText">Stato Impianti</span>
</NavLink>
</li>
<li class="nav-item px-3" title="Storico Impianto">
<NavLink class="nav-link" href="PlantAnalisys">
<i class="fas fa-2x fa-history pr-2"></i>
<span class="@hideText">Storico Impianto</span>
</NavLink>
</li>
<li class="nav-item px-3" title="Storico Ordini">
<NavLink class="nav-link" href="Orders">
<i class="fas fa-2x fa-file-invoice pr-2" aria-hidden="true"></i>
@@ -94,6 +100,12 @@
<span class="@hideText">Planner Consegne</span>
</NavLink>
</li>
<li class="nav-item px-3" title="Setup Impianti">
<NavLink class="nav-link" href="PlantSetup">
<i class="fas fa-2x fa-wrench pr-2" aria-hidden="true"></i>
<span class="@hideText">Setup Impianti</span>
</NavLink>
</li>
<li class="nav-item px-3" title="Admin Utenti">
<NavLink class="nav-link" href="UserAdmin">
<i class="fas fa-2x fa-users pr-2" aria-hidden="true"></i>
@@ -114,12 +126,6 @@
<i class="fas fa-2x fa-calendar-alt pr-2" aria-hidden="true"></i>
<span class="@hideText">Job Scheduler</span>
</NavLink>
</li>
<li class="nav-item px-3" title="Setup Parametri">
<NavLink class="nav-link" href="Parameters">
<i class="fas fa-2x fa-wrench pr-2" aria-hidden="true"></i>
<span class="@hideText">Setup Parametri</span>
</NavLink>
</li>*@
</ul>
</div>
+12 -28
View File
@@ -122,44 +122,38 @@ namespace GWMS.UI
// inizializzo il DB e creo (se necessario) l'utente
DbConfig.CheckUser(nKey, sKey);
// verifico se serve applicazione migrazioni
//DbConfig.ExecMigrationMain();
DbConfig.ExecMigrationMain();
//DbConfig.ExecMigrationIdentity();
// altri parametri per check vari
string connStringDB = DbConfig.CONNECTION_STRING;
string connStringRedis = Configuration.GetConnectionString("Redis");
string redisSrvAddr = connStringRedis.Substring(0, connStringRedis.IndexOf(":"));
//var qrCodeUri = new Uri(Configuration["ZCodeUrl"]);
//string qrCodeAddr = qrCodeUri.Host;
// healthchecks
services.AddHealthChecks()
.AddMySql(connStringDB, "MySql instance")
.AddAsyncCheck($"DB PING ({dbServerAddr})", () => Health.Checks.PingCheck(dbServerAddr))
.AddAsyncCheck($"Redis PING ({redisSrvAddr})", () => Health.Checks.PingCheck(redisSrvAddr))
//.AddAsyncCheck($"QrCode PING ({qrCodeAddr})", () => Health.Checks.PingCheck(qrCodeAddr))
.AddProcessAllocatedMemoryHealthCheck(512, "Max Process memory (<512MB)", failureStatus: HealthStatus.Degraded) // 512 MB max allocated memory
.AddRedis(Configuration.GetConnectionString("Redis"), "Redis", failureStatus: HealthStatus.Degraded)
//.AddUrlGroup(new Uri(Configuration["ZCodeUrl"]), name: $"QrCode Gen ({Configuration["ZCodeUrl"]})", failureStatus: HealthStatus.Degraded)
.AddAsyncCheck($"MySql Root User", () => Health.Checks.DbUserRoot("MySql"))
.AddAsyncCheck($"MySql App Users", () => Health.Checks.DbUserApp(DbConfig.DATABASE_NAME))
.AddAsyncCheck($"MySql Identity", () => Health.Checks.DbIdentity(DbConfig.DATABASE_NAME))
.AddAsyncCheck($"MySql PlantLog", () => Health.Checks.DbPlantLogTable(DbConfig.DATABASE_NAME))
.AddAsyncCheck($"MySql PlantLog", () => Health.Checks.DbPlantTable(DbConfig.DATABASE_NAME))
;
//.AddDiskStorageHealthCheck(s => s.AddDrive("C:\\", 1024)) // 1024 MB (1 GB) free minimum
//.AddProcessHealthCheck("ProcessName", p => p.Length > 0) // check if process is running
//.AddWindowsServiceHealthCheck("someservice", s => s.Status == ServiceControllerStatus.Running);
services
.AddHealthChecksUI(s =>
{
s.AddHealthCheckEndpoint("GWMS_Services", "health");
s.SetEvaluationTimeInSeconds(15);
s.SetMinimumSecondsBetweenFailureNotifications(60);
s.SetApiMaxActiveRequests(5);
s.SetHeaderText("GWMS Health Check Status");
})
.AddInMemoryStorage();
.AddHealthChecksUI(s =>
{
s.AddHealthCheckEndpoint("GWMS_Services", "health");
s.SetEvaluationTimeInSeconds(30);
//s.SetEvaluationTimeInSeconds(60);
s.SetMinimumSecondsBetweenFailureNotifications(120);
s.SetApiMaxActiveRequests(5);
s.SetHeaderText("GWMS Health Check Status");
})
.AddInMemoryStorage();
// abilitazione x email management con MailKit
services.AddTransient<IEmailSender, MailKitEmailSender>();
@@ -237,19 +231,9 @@ namespace GWMS.UI
services.AddScoped<AuthenticationStateProvider, RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddSingleton<IConfiguration>(Configuration);
//services.AddTransient<Services.BlazorTimer>();
//services.AddSingleton<GWMSDataService>();
services.AddScoped<GWMSDataService>();
services.AddScoped<MessageService>();
#if false
// aggiunta quartz scheduler
var scheduler = StdSchedulerFactory.GetDefaultScheduler().GetAwaiter().GetResult();
services.AddSingleton(scheduler);
services.AddHostedService<QuartzHostedService>();
#endif
}
#endregion Public Methods
+1 -1
View File
@@ -1,7 +1,7 @@
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
+2
View File
@@ -31,6 +31,8 @@
"nKey": "PZZFRR",
"sKey": "M3T@n0"
},
"TimeoutOffline": 3,
//"IntervalMin": 2,
"IntervalMin": 60,
"MaxLogRecord": 360,
"ZCodeUrl": "https://qrcode.steamware.net/",
-3
View File
@@ -28,7 +28,4 @@ Set-Content -Path $FileManOut -Value $manData
# replace x ChangeLog
$clogData = Get-Content $FileCLogIn
$clogData = $clogData -replace "{{CURRENT-REL}}", $currRelNum
# $clogData = $clogData -replace "{{DIRNAME}}", "MP-STATS"
# $clogData = $clogData -replace "{{BRANCHNAME}}", "stable"
# $clogData = $clogData -replace "{{PACKNAME}}", "GWMS.UI"
Set-Content -Path $FileCLogOut -Value $clogData
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>GWMS - Gas Warehouse Management System</i>
<h4>Versione: 1.0.2108.3011</h4>
<h4>Versione: 1.0.2110.0119</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
1.0.2108.3011
1.0.2110.0119
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>1.0.2108.3011</version>
<version>1.0.2110.0119</version>
<url>http://nexus.steamware.net/repository/SWS/GWMS/stable/0/GWMS.UI.zip</url>
<changelog>http://nexus.steamware.net/repository/SWS/GWMS/stable/0/ChangeLog.html</changelog>
<mandatory>false</mandatory>