Compare commits

...

433 Commits

Author SHA1 Message Date
Samuele Locatelli 1271b44b15 Merge branch 'Release/FixOreAnticipo' 2022-10-20 17:28:21 +02:00
Samuele Locatelli 132f5966dd Forzato default anticipo a 50h... 2022-10-20 17:28:01 +02:00
Samuele Locatelli 02c46c99db Merge tag 'UpdateSearchArt' into develop
Fix ricerca articoli
2022-10-20 16:53:17 +02:00
Samuele Locatelli 485808e8d4 Merge branch 'Release/UpdateSearchArt' 2022-10-20 16:53:09 +02:00
Samuele Locatelli d78c2d3173 Fix ricerca articoli 2022-10-20 16:52:47 +02:00
Samuele Locatelli 2a1602c5b9 Update metodi dossier 2022-10-20 16:33:48 +02:00
Samuele Locatelli a096f6a13e Merge tag 'UpdateModuloDoss' into develop
Update modulo dossier in blocco
2022-10-20 14:54:28 +02:00
Samuele Locatelli 1cae70c244 Merge branch 'Release/UpdateModuloDoss' 2022-10-20 14:54:22 +02:00
Samuele Locatelli 18ee183b05 Pulizia codice DOSS x spostamento modulo update 2022-10-20 14:54:03 +02:00
Samuele Locatelli d88c4cc2bd Update comportamento edit dossier 2022-10-20 13:16:07 +02:00
zaccaria.majid 67922520b8 fix edit mode label 'PENDING CHANGES' 2022-10-20 11:42:10 +02:00
zaccaria.majid c5b5b54586 fix edit mode 2022-10-20 11:21:01 +02:00
zaccaria.majid ae3864a614 fix salva solo quando finito 2022-10-20 11:08:31 +02:00
zaccaria.majid f878f1c496 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-20 09:42:27 +02:00
zaccaria.majid d453c1d944 modifiche comportamento editing 2022-10-20 09:42:19 +02:00
Samuele Locatelli 921bf52659 Filtro eventi macchina spenta
- preso da semaforo (no idxStato)
2022-10-20 09:31:42 +02:00
Samuele Locatelli e948ae31af Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-19 20:07:36 +02:00
Samuele Locatelli b344180da2 Fix gestione HideSpenta da statistiche 2022-10-19 20:07:33 +02:00
zaccaria.majid 4b885d780c Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-19 17:47:48 +02:00
zaccaria.majid 01e181a4fc inizio modifiche editing 2022-10-19 17:47:07 +02:00
Samuele Locatelli 56f342a488 refresh test 2022-10-19 17:30:26 +02:00
Samuele Locatelli ed72bdfa24 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-19 17:14:20 +02:00
Samuele Locatelli 5e6924f0fe Inizio gestione nascondi spenta 2022-10-19 17:13:43 +02:00
zaccaria.majid cae7e50cbd cleanUp 2022-10-19 17:11:27 +02:00
zaccaria.majid e769227bb3 fix not update if "annulla" 2022-10-19 17:10:56 +02:00
zaccaria.majid 60f757965e CleanUp 2022-10-19 13:07:05 +02:00
zaccaria.majid 603ed3782f Cleanup 2022-10-19 13:02:59 +02:00
zaccaria.majid 71177e04c7 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-19 13:01:28 +02:00
zaccaria.majid 1a211ebca5 delete msgService da PARAMS 2022-10-19 13:01:21 +02:00
zaccaria.majid 591b66b52d delete msgService da dossier 2022-10-19 12:49:13 +02:00
Samuele Locatelli 96f4bb3b4c Merge tag 'UpdateLogCall' into develop
Fix log chaimate MP/IO
2022-10-19 11:02:23 +02:00
Samuele Locatelli f1c295993c Merge branch 'Release/UpdateLogCall' 2022-10-19 11:02:16 +02:00
Samuele Locatelli a293ce825e Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-19 11:01:34 +02:00
Samuele Locatelli e3b67ee6c0 Fix log vari x chiamate MP/IO 2022-10-19 11:01:29 +02:00
zaccaria.majid 0c5e41826e fix recordsel = null in dossier post chiusura 2022-10-19 10:43:45 +02:00
Samuele Locatelli 0d4e1aed88 Merge tag 'FixPAramsDetailAndReload' into develop
Sistemazione reload e params detail
2022-10-18 20:02:34 +02:00
Samuele Locatelli 93f4f09b85 Merge branch 'Release/FixPAramsDetailAndReload' 2022-10-18 20:02:26 +02:00
Samuele Locatelli aebae6b406 Update selezione dossier:
- selezione x periodo
- ancora check ottimizzazione sel distinct
2022-10-18 20:01:53 +02:00
Samuele Locatelli a2bf5f4a8b Ottimizzazioni selezione casi distinct 2022-10-18 19:16:20 +02:00
Samuele Locatelli 759373b5a4 Modifica display valori fluxLog x Dossier 2022-10-18 18:37:26 +02:00
Samuele Locatelli 0ea3ee6341 Merge tag 'FixMemoryLeakError' into develop
Update x gestione condizione errore memory leak (ridotto in test debug)
x gestione dispose componenti
2022-10-18 17:12:23 +02:00
Samuele Locatelli a0ffe1bc6c Merge branch 'Release/FixMemoryLeakError' 2022-10-18 17:12:04 +02:00
Samuele Locatelli 6e75f590bb pulizia codice 2022-10-18 17:11:42 +02:00
Samuele Locatelli 12473b5088 Ancora cleanup di GC x recupero RAM inutilizzata 2022-10-18 17:10:29 +02:00
Samuele Locatelli f6406f833f Ancora memory leak
- diminuito problema di refresh automatico
- inizio gestione dispose oggetti
2022-10-18 16:53:00 +02:00
Samuele Locatelli a21cd16362 FIX PODL
- verifica PODL attrezzabili (=senza OIDL correnti)
2022-10-18 16:32:40 +02:00
Samuele Locatelli d659afacc2 Fix PODL
- paginazione
- cambio num rec
- sel fase
2022-10-18 16:15:59 +02:00
zaccaria.majid 56c3ba4064 Fix loop ram 2022-10-18 15:56:14 +02:00
Samuele Locatelli 8d0292d789 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-18 12:01:06 +02:00
Samuele Locatelli 419863a684 Loop Update:
inizio verifica ODL/PODL
2022-10-18 12:01:04 +02:00
Samuele Locatelli f56a7e5164 Aggiunto btn x forzare syncDb 2022-10-18 11:28:59 +02:00
zaccaria.majid 0cf6ecd38f fix colori 2022-10-18 11:23:27 +02:00
zaccaria.majid 094ce0d181 fix style plot 2022-10-18 11:10:39 +02:00
Samuele Locatelli b4de1c9880 Merge tag 'UpdateGestSelect' into develop
Update grafico
2022-10-18 10:11:26 +02:00
Samuele Locatelli 67f0f74fbe Merge branch 'Release/UpdateGestSelect' 2022-10-18 10:11:16 +02:00
Samuele Locatelli d00b4bbb8b Refresh 2022-10-18 10:09:01 +02:00
Samuele Locatelli dd63bb292d Merge remote-tracking branch 'origin/develop' into develop 2022-10-18 09:56:05 +02:00
zaccaria.majid 57bc790074 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-18 09:55:37 +02:00
zaccaria.majid 41a00ffa45 fix 2 variabili x statRecord e currRecord 2022-10-18 09:55:29 +02:00
Samuele Locatelli 633b5dda6e Fix cache recupero ODL correnti (3 sec redis) 2022-10-18 09:51:43 +02:00
Samuele Locatelli 5d6bef0fc8 Merge tag 'UpdateGestOdlPodl' into develop
Update gestione ODL/PODL
2022-10-18 09:26:34 +02:00
Samuele Locatelli d24b2ada0c Merge branch 'Release/UpdateGestOdlPodl' 2022-10-18 09:26:27 +02:00
Samuele Locatelli 0a9ccffe28 Fix ODL/PODL x setup ed avvio 2022-10-18 09:26:04 +02:00
Samuele Locatelli 207d305327 Merge tag 'UpdateGestSetupOdl' into develop
Fix x test gesiotne ODL (manca vera gestione SE ODL aperto)
2022-10-18 08:43:44 +02:00
Samuele Locatelli caa4b4f590 Merge branch 'Release/UpdateGestSetupOdl' 2022-10-18 08:43:22 +02:00
Samuele Locatelli e45cb0595e Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-18 08:42:56 +02:00
Samuele Locatelli 77e7e39985 Aggiornamento modifiche x chiudere ODL e creare nuovo 2022-10-18 08:41:12 +02:00
Samuele Locatelli b2e9ae76d4 bozza modifiche (da completare) 2022-10-17 20:10:52 +02:00
zaccaria.majid 460eb769dc inizio gestione currRecord dopo chiusura modal 2022-10-17 17:27:39 +02:00
Samuele Locatelli 5e38749c65 Bozza gestione PODL --> ODL 2022-10-17 12:17:11 +02:00
Samuele Locatelli 91083b6c4a Merge remote-tracking branch 'origin/develop' into develop 2022-10-17 12:01:43 +02:00
Samuele Locatelli de562b1287 Update x gestione chiusura ODL 2022-10-17 12:01:33 +02:00
zaccaria.majid 470c9a2191 aggiunta controllo listaStati null 2022-10-17 11:25:05 +02:00
zaccaria.majid 26e36e7124 fix posizionamento label durata 2022-10-17 10:09:16 +02:00
zaccaria.majid bef0ee6000 fix text dark progress bar gialla 2022-10-17 09:22:38 +02:00
zaccaria.majid 9e4822d529 Aggiunta filtro per macchine ODL 2022-10-17 09:09:43 +02:00
Samuele Locatelli 7f9685a007 Merge tag 'UpdateOdlStatsModal' into develop
fix gestione statistiche ODL
2022-10-14 17:43:06 +02:00
Samuele Locatelli d8978f84f3 Merge branch 'Release/UpdateOdlStatsModal' 2022-10-14 17:42:54 +02:00
Samuele Locatelli 946f157cff Pulizia codice 2022-10-14 17:41:50 +02:00
Samuele Locatelli 47f1ae5cb2 Completo fix plot ODL x chiusura modale 2022-10-14 17:35:56 +02:00
Samuele Locatelli a428ecb4ab Fix overlay donught 2022-10-14 17:27:55 +02:00
zaccaria.majid c4b6f289af modifiche grafiche richieste 2022-10-14 16:54:41 +02:00
zaccaria.majid 1cc90d2459 minor fix 2022-10-14 13:08:32 +02:00
zaccaria.majid e438fa3930 minor fix 2022-10-14 12:47:13 +02:00
zaccaria.majid 6c88e2687a fix plot odl + modifiche grafiche 2022-10-14 12:39:43 +02:00
zaccaria.majid fba6eca9cc Minor fix 2022-10-13 09:30:43 +02:00
zaccaria.majid 330e208866 Minor fix 2022-10-12 15:27:10 +02:00
zaccaria.majid 013b21e055 Fix serializzazione valori edit 2022-10-12 11:48:51 +02:00
Samuele Locatelli 8e763e52a4 update metodo DTO da testare 2022-10-12 06:26:04 +02:00
Samuele Locatelli d5f5cf9b11 FluxLogDTO:
- Update modello dati x gestione nuovo DTO
- bozza udpatre DB e servizio
2022-10-12 06:20:54 +02:00
Samuele Locatelli a4810826f8 Aggiunta metodo x copiare ODL in SEND + trad valori 2022-10-11 20:56:51 +02:00
zaccaria.majid 7f3a73ba0e bozza Metodo Update 2022-10-11 17:34:02 +02:00
zaccaria.majid d108b74f7d test grafico x valori modificati 2022-10-11 16:52:11 +02:00
zaccaria.majid 16278b6ae0 pescaggio e clonazione flusso scelto 2022-10-11 13:03:56 +02:00
zaccaria.majid 1f10e8537d Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-11 09:16:42 +02:00
Samuele E. Locatelli a6408ba2af Merge tag 'UpdateMain221010' into develop
Update di riallineamento
2022-10-11 08:02:06 +02:00
Samuele E. Locatelli 924a5017f5 Merge branch 'release/UpdateMain221010' 2022-10-11 08:01:04 +02:00
zaccaria.majid 5bcc32023a fix plot 2022-10-10 17:55:53 +02:00
zaccaria.majid e87d14bd8a Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-10 17:14:39 +02:00
zaccaria.majid cbaa16a850 Merge branch 'FeatureODLPlot' into develop 2022-10-10 17:12:27 +02:00
zaccaria.majid cc272cac29 Plot ODL 2022-10-10 17:12:09 +02:00
zaccaria.majid b032b6bbb9 Primo ODL PLOT da fixare 2022-10-10 13:15:42 +02:00
Samuele Locatelli 91174a2f67 Merge remote-tracking branch 'origin/develop' into develop 2022-10-10 12:05:20 +02:00
Samuele Locatelli 2a96b63f17 PODL:
- aggiunto chiamate x syncDbData post delete o update
2022-10-10 12:05:11 +02:00
Samuele Locatelli 08634b5656 Aggiunta servizio x chiamate API REST ad MP-IO 2022-10-10 11:54:03 +02:00
zaccaria.majid 5d63c41cf8 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-10 10:11:40 +02:00
zaccaria.majid de3ce0f114 inizio odl Plot 2022-10-10 10:11:02 +02:00
Samuele Locatelli 2ec29bbe68 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-10 09:55:42 +02:00
Samuele Locatelli 7416f6e7b5 Bozza dettaglio stat con modale 2022-10-10 09:55:39 +02:00
zaccaria.majid a604e5741b minor fix 2022-10-10 09:03:32 +02:00
Samuele Locatelli 923094054b fix key model 2022-10-10 08:40:34 +02:00
Samuele Locatelli c28dae0c8d SPEC, statistiche ODL:
-aggiunta model e controllo x recupero stat da stored
2022-10-08 17:47:47 +02:00
Samuele Locatelli 6fb9cbe085 update displayODL 2022-10-07 18:50:08 +02:00
Samuele Locatelli 4f03661182 Update minori pagina ODL 2022-10-07 18:43:32 +02:00
Samuele Locatelli dd26773590 Merge remote-tracking branch 'origin/develop' into develop 2022-10-07 18:33:10 +02:00
Samuele Locatelli 75894fa3c7 update ordinamento fluxlog 2022-10-07 18:32:56 +02:00
zaccaria.majid 9fc73c5c85 modifiche richieste 2022-10-07 18:30:53 +02:00
Samuele Locatelli 0f9c01ae82 Update grafico e calcolo durata ODL 2022-10-07 17:20:35 +02:00
Samuele Locatelli ea60e785f9 Update fix x ODL con filtri nuovi 2022-10-07 16:58:33 +02:00
Samuele Locatelli 1849101028 inizio modifica pagina ODL x SPEC 2022-10-07 16:14:29 +02:00
Samuele Locatelli a1f9a958b3 Fix errore compilaizone stats 2022-10-07 16:14:22 +02:00
zaccaria.majid fd585aee93 modifiche richieste 2022-10-07 15:14:57 +02:00
zaccaria.majid 4ecd647b1b modifiche richieste 2022-10-07 14:43:00 +02:00
zaccaria.majid 8aace3fb82 Minor fix 2022-10-07 12:00:37 +02:00
zaccaria.majid 4acf2a2970 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-07 11:16:41 +02:00
zaccaria.majid 9b6c449354 Fix grafici richiesti 2022-10-07 11:16:02 +02:00
Samuele Locatelli c11e05123d Fix display label x filtro parametri 2022-10-07 08:41:45 +02:00
zaccaria.majid 862960bae4 minor fix 2022-10-06 17:47:40 +02:00
zaccaria.majid 4cdf0033cd fix index 2022-10-06 17:32:32 +02:00
zaccaria.majid 25b75101e9 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-06 17:24:49 +02:00
zaccaria.majid 50dbe7691f minor fix 2022-10-06 17:24:43 +02:00
Samuele Locatelli 9c762969ac Merge remote-tracking branch 'origin/develop' into develop 2022-10-06 16:30:59 +02:00
Samuele Locatelli 09b2008f25 Update classe dossier 2022-10-06 16:30:54 +02:00
zaccaria.majid baa42fbd2f Merge branch 'FeatureParametersFilter' into develop 2022-10-06 16:28:14 +02:00
zaccaria.majid 90d4a46087 Fine fix filtri params e dossier 2022-10-06 16:27:49 +02:00
zaccaria.majid 5b12ac47d3 update Filter 2022-10-06 13:10:12 +02:00
zaccaria.majid 81fd2820df Params filter con dots INIZIO 2022-10-05 17:39:51 +02:00
Samuele Locatelli 624d6d3411 minor refresh x display trad articolo/macchina 2022-10-05 16:46:56 +02:00
zaccaria.majid 21fa81f09c fix grafico filtri Dossier 2022-10-05 16:34:22 +02:00
zaccaria.majid 0795cae1d5 Aggiunta filtro per articolo
+ fix lettura da redis dossiers
2022-10-05 15:46:59 +02:00
Samuele Locatelli 6a0eeba75f Bozza metodo selezione x articolo 2022-10-05 14:45:29 +02:00
Samuele Locatelli b476829a73 Merge branch 'develop' 2022-10-05 11:13:46 +02:00
Samuele Locatelli 78c90a8e93 Update ODL come PODL 2022-10-05 11:12:51 +02:00
Samuele Locatelli 9515906e20 Merge branch 'master' into develop 2022-10-05 11:04:42 +02:00
Samuele Locatelli c929e3cf65 Merge branch 'Release/FixPodlAndSnapshotBaglietto' 2022-10-05 11:04:31 +02:00
Samuele Locatelli 43f0569fe3 Fix flush + reload home 2022-10-05 11:03:18 +02:00
Samuele Locatelli 2807bd9edc Merge remote-tracking branch 'origin/develop' into develop 2022-10-05 10:59:42 +02:00
Samuele Locatelli c4a682cc24 Gestione snapshot
- anticipo parametricod a tab config
2022-10-05 10:58:49 +02:00
zaccaria.majid 5ef3139bd5 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-10-05 10:53:30 +02:00
zaccaria.majid 2a679504eb fix selRecord + fix grafico toggle att 2022-10-05 10:53:17 +02:00
Samuele Locatelli 10f9ed08a8 Fix query anticipo a 24h 2022-10-05 10:47:57 +02:00
Samuele Locatelli 374902d5f0 Merge branch 'Feature/AddPodlClone' into develop 2022-10-05 10:24:30 +02:00
Samuele Locatelli 59b43f6005 Update pagina PODL 2022-10-05 10:24:19 +02:00
zaccaria.majid 1ad6222543 Aggiunta selezione data minima in PARAMETERS 2022-09-28 09:10:52 +02:00
Samuele Locatelli b97394b067 Aggiunta duplicazione articoli 2022-09-27 18:47:47 +02:00
Samuele Locatelli 9d35441b07 Merge branch 'develop' into Feature/AddPodlClone 2022-09-27 18:28:28 +02:00
Samuele Locatelli f71ec80c16 Aggiunta duplicazione riga 2022-09-27 18:27:46 +02:00
Samuele Locatelli d1b6c804be Aggiunta editing note 2022-09-27 18:14:40 +02:00
Samuele Locatelli 391078dd06 Aggiunto edit numpz e TCiclo 2022-09-27 18:08:17 +02:00
zaccaria.majid 55c6790d7b update per takesnapshotList 2022-09-27 18:03:36 +02:00
zaccaria.majid 66642032bf Merge branch 'develop' 2022-09-27 16:40:09 +02:00
Samuele Locatelli da76bc96f8 Update display dati dossier 2022-09-27 16:19:40 +02:00
zaccaria.majid 23fbacba87 Fix lettura da cache 2022-09-27 14:27:24 +02:00
Samuele Locatelli b9d67616cb Merge branch 'develop' 2022-09-27 12:01:32 +02:00
Samuele Locatelli 79da055771 Fix filtraggio record ODL 2022-09-27 12:01:25 +02:00
Samuele Locatelli 7e879fe2f6 Merge tag 'UpdateDossierHistSnapshot' into develop
Fix dossier management:
- delete dossiers
- possibilità snapshot valori apssati
2022-09-27 11:43:58 +02:00
Samuele Locatelli 95e83f7d56 Merge branch 'Release/UpdateDossierHistSnapshot' 2022-09-27 11:43:40 +02:00
Samuele Locatelli 0efe322f7a Pagine con molti record nascoste (footer):
- Update cards x avere margine mb-5
2022-09-27 11:43:04 +02:00
zaccaria.majid 3bc3746a9d Fix scomparsa bottone snapshot fatto 2022-09-27 11:36:51 +02:00
Samuele Locatelli 08901bcebc Riduzione numero chiamate x update parametri 2022-09-27 11:03:55 +02:00
Samuele Locatelli 4d481699a1 Ok selezione e filtraggio parametri 2022-09-27 10:57:45 +02:00
Samuele Locatelli 3efeb994cf Fix selezione data max x filtro parametri 2022-09-27 10:34:24 +02:00
Samuele Locatelli 5014bb1ecb Inizio gestione filtro parametri con data max 2022-09-27 09:47:41 +02:00
Samuele Locatelli 523b1683d9 Metodi cancellazione dossier (2 test) 2022-09-27 08:20:40 +02:00
Samuele Locatelli 35c0f2856d Prima bozza con salvataggio live e storico... 2022-09-26 20:03:05 +02:00
Samuele Locatelli 77457df40a Update numero maxRecord gestiti (fino a 5000) 2022-09-26 19:35:26 +02:00
Samuele Locatelli add4fe13fa Inizio update selezione parametri 2022-09-26 19:31:55 +02:00
zaccaria.majid b748c76cad fix 2022-09-23 08:33:24 +02:00
Samuele Locatelli 279d2799ae Merge tag 'consolidateNuget220921' into develop
Fix/consolidate nuget pack x progetti MON / STATS
2022-09-21 18:36:21 +02:00
Samuele Locatelli 198d18002b Merge branch 'Release/consolidateNuget220921' 2022-09-21 18:36:10 +02:00
Samuele Locatelli 838ebe55da Fix nuget
- progetti CORE MON/STATS aggiornati
- consolidamenti nuget
2022-09-21 18:35:41 +02:00
Samuele Locatelli f58253341f Merge tag '220921_FixAndNugetUpdate' into develop
Fix vari (es paginazione dossier) + nuget update generale
2022-09-21 14:53:20 +02:00
Samuele Locatelli 4644646fa4 Merge branch 'Release/220921_FixAndNugetUpdate' 2022-09-21 14:53:05 +02:00
Samuele Locatelli c3c5300830 Nuget Update:
- nlog
- newtonsoft json
2022-09-21 14:52:25 +02:00
Samuele Locatelli ebeeab69e1 Nuget Update: dotNet framework 2022-09-21 14:50:56 +02:00
Samuele Locatelli 2a41e8070b CodeMaid
- fix componenti UI
- lasciati invariati in area wwwroot
2022-09-21 14:49:45 +02:00
Samuele Locatelli 3a5b77314a CodeMaid:
- DTO e MOdelli NON riorganizzabili
- refresh globale ordinamenti
- test rebuild
2022-09-21 14:45:57 +02:00
zaccaria.majid 16c7b0bc6b modifiche grafiche + fix paginazione 2022-09-21 14:21:22 +02:00
Samuele Locatelli 46f284ae0c Merge tag 'FirstSpecStableRelease' into develop
Prima release master con fix vari grafici + tutte le funzionalità
2022-09-21 10:36:57 +02:00
Samuele Locatelli e945aad224 Merge branch 'Release/FirstSpecStableRelease' 2022-09-21 10:36:40 +02:00
Samuele Locatelli 8510731366 Update home page 2022-09-21 10:36:29 +02:00
Samuele Locatelli 5df4195e6c Completato salvataggio snapshot + refresh 2022-09-21 10:26:09 +02:00
Samuele Locatelli a3dc1e1657 Start ver 6.16 2022-09-21 09:52:54 +02:00
Samuele Locatelli 27149e2131 Fix grafici minori 2022-09-21 09:46:44 +02:00
Samuele Locatelli 91be755781 Fix conf key redis cache:
- era overlapping parametri/dossiers
2022-09-21 09:27:00 +02:00
Samuele Locatelli 84f6730023 Merge remote-tracking branch 'origin/develop' into develop 2022-09-21 09:22:12 +02:00
zaccaria.majid b51c2679e4 aggiunta cache redis 2022-09-21 09:17:28 +02:00
zaccaria.majid 9d7502d1a4 modifiche grafiche e round orario datetime 2022-09-21 09:13:39 +02:00
zaccaria.majid d3b8160634 fix deserializzazione oggetto fluxlog 2022-09-20 17:35:45 +02:00
zaccaria.majid 601c817aa2 Modifiche grafiche 2022-09-20 17:16:42 +02:00
zaccaria.majid d0d30bd1c3 Modifiche per permettere la deserializzazione dei
valori in dossier
2022-09-20 17:16:21 +02:00
zaccaria.majid 0e9e7f3dda Creazione pagina per la visualizzazione Dossier
con relativi filtri
2022-09-20 12:54:46 +02:00
Samuele Locatelli e518c17db2 Aggiunta traccia x pagina dossiers 2022-09-20 09:03:22 +02:00
Samuele Locatelli 0a281827f9 Refresh 2022-09-19 20:01:24 +02:00
Samuele Locatelli 141473ce28 Aggiunta metodi gestione lettura dossiers da DB + refresh 2022-09-19 20:01:13 +02:00
Samuele Locatelli 45af089e3f Aggiunta preliminare modello Dossiers 2022-09-19 20:00:56 +02:00
Samuele Locatelli 4e4387620b Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-09-19 09:58:28 +02:00
Samuele Locatelli 8c2c48a63f Fix procedura di flux dati:
- aggiunta conn tipo admin
- tolta cancellazione intero DB
- ricerca x pattern delle sole chaivi interessate
2022-09-19 09:54:30 +02:00
zaccaria.majid 534a668496 tentativo fix redis Flush 2022-09-19 09:22:29 +02:00
zaccaria.majid eed45695e8 continuo flushCache 2022-09-19 08:43:48 +02:00
zaccaria.majid ff2fbe0c34 modifiche grafiche
inizio pagina utils
2022-09-16 17:37:39 +02:00
Samuele Locatelli 3324c736c6 Minor fix 2022-09-16 16:49:19 +02:00
zaccaria.majid 0a6a0bc5cb modifiche grafiche varie 2022-09-16 16:00:13 +02:00
Samuele Locatelli e18e0ddff3 Fix last update da pagina main 2022-09-16 15:18:56 +02:00
zaccaria.majid 580a498238 tentativo fix lastUpdate 2022-09-16 14:47:31 +02:00
zaccaria.majid c97557722e Modifiche grafiche 2022-09-16 14:22:23 +02:00
zaccaria.majid c17fa17d76 fix filtri aggiunta titles 2022-09-16 12:40:18 +02:00
zaccaria.majid 5b054ee2ec fix last snapshot che non veniva
scritto al primo giro
2022-09-16 11:55:23 +02:00
zaccaria.majid 2771d9957d Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-09-16 11:47:43 +02:00
zaccaria.majid 5893152761 aggiornamento grafico filtri 2022-09-16 11:47:35 +02:00
Samuele Locatelli b7d57e935a COmpletato fix version number 2022-09-16 11:21:03 +02:00
Samuele Locatelli 61b613a8fb Fix proj config x calcolo versione 2022-09-16 11:19:26 +02:00
Samuele Locatelli d2fef81f55 Merge remote-tracking branch 'origin/develop' into develop 2022-09-16 11:17:33 +02:00
Samuele Locatelli cd7a8ccad8 Fix x display numero versione 2022-09-16 11:17:28 +02:00
zaccaria.majid 08079d3e0e Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-09-16 10:51:19 +02:00
zaccaria.majid 8156828ec3 fix bottone filtri avanzati 2022-09-16 10:44:45 +02:00
Samuele Locatelli 9bb95c5a49 Merge tag 'FixMasterDeploy' into develop
Fix deploy IIS x icone, errore cancellazione, log
2022-09-16 10:37:26 +02:00
Samuele Locatelli 7ba3aeb65d Merge branch 'Release/FixMasterDeploy' 2022-09-16 10:37:10 +02:00
Samuele Locatelli 6ea938a91a Aggiunta web.config x windows auth 2022-09-16 10:36:25 +02:00
Samuele Locatelli 92c196023d fix posizione img home page 2022-09-16 10:33:13 +02:00
Samuele Locatelli 10d9625b6d fix articoli:
- tolto refuso cancellazione csv temp appoggio
2022-09-16 10:33:03 +02:00
Samuele Locatelli 5f955499e2 Fix file favicon e logfolder 2022-09-16 10:32:47 +02:00
Samuele Locatelli 716813abe1 Merge tag 'AddSpecInstaller' into develop
Aggiornamento x generazione installer SPEC su nexus
2022-09-16 09:13:19 +02:00
Samuele Locatelli 6f0d0419c5 Merge branch 'Release/AddSpecInstaller' 2022-09-16 09:13:02 +02:00
Samuele Locatelli 300c2dc294 Metodo timeout+ random x cache 2022-09-16 09:03:05 +02:00
Samuele Locatelli fddfbb6dfa More cleanup! 2022-09-16 08:36:52 +02:00
Samuele Locatelli b2858c9c8a Fix catena update pagina 2022-09-16 08:16:00 +02:00
Samuele Locatelli 68404c928a Cleanup page PODL 2022-09-16 08:02:08 +02:00
Samuele Locatelli ca16c3a1b0 Clenaup classe dataAdapter 2022-09-16 08:01:51 +02:00
Samuele Locatelli c11163896c Speedup:
- aggiuta cache redis x elenco macchine con dati flux
2022-09-16 07:43:42 +02:00
Samuele Locatelli 891def5bcd refresh 2022-09-15 19:43:21 +02:00
Samuele Locatelli 65aa95d1e7 Update yaml (da testare) 2022-09-15 19:43:07 +02:00
Samuele Locatelli 1b20cd8ef5 Aggiunta xml pubblicazione 2022-09-15 19:39:31 +02:00
Samuele Locatelli 11934fcae2 Minor Update x reload 2022-09-15 19:25:51 +02:00
Samuele Locatelli 687a254a8d Collegato refresh period da edit conf 2022-09-15 18:53:51 +02:00
Samuele Locatelli 25f274d4d6 cleanup params page 2022-09-15 18:48:04 +02:00
Samuele Locatelli 0ec3a4c31a Correzione Dispose:
- fix sovrapposizione eventi multipli
2022-09-15 18:47:35 +02:00
Samuele Locatelli 1b89501529 Fix cambio pagina da cambio filtro 2022-09-15 18:35:38 +02:00
Samuele Locatelli 191b23ee7d Fix comportamento cambio filtro su pag 1 2022-09-15 18:23:10 +02:00
Samuele Locatelli ae39db267d CurrPage:
- riporto a 1 se cambio filtro
- sbaglia primo cambio da sel DataPager
2022-09-15 18:01:25 +02:00
Samuele Locatelli 7cc25ac9be Fix toggle show/hide edit params 2022-09-15 17:55:14 +02:00
Samuele Locatelli 5c30c8a1ba Levato isLoading inutilizzato da filtro parametri 2022-09-15 17:46:03 +02:00
Samuele Locatelli d5777c0020 REDIS:
- fix cache selezione flussi da macchina
- rimosse modalità async lettura/Scrittura redis
2022-09-15 17:43:52 +02:00
zaccaria.majid f5bbcae0db Aggiunta filtri per max record e
tempo aggiornamento
2022-09-15 17:28:26 +02:00
zaccaria.majid 1efd5f5a4b listParams riga 136 fix pager stop live
PARAMS riga 147 fix filter stop live
2022-09-15 16:08:47 +02:00
Samuele Locatelli 47ddab4e67 Merge branch 'Feature/TestSelFilterObj' into develop 2022-09-15 15:46:48 +02:00
Samuele Locatelli 07c58c5738 Pulizia metodi inutilizzati 2022-09-15 15:46:39 +02:00
Samuele Locatelli fcf1ec5ea9 FIX: ora ok con update in blocco 2022-09-15 15:36:05 +02:00
Samuele Locatelli 673eb62d8c Inizio gestione con unico obj filtro 2022-09-15 15:30:48 +02:00
Samuele Locatelli 6790088950 Ancora update x gestione filtro/stop live... 2022-09-15 13:09:05 +02:00
Samuele Locatelli d46f3fd38d OK con filtraggio in cascata 2022-09-15 12:40:23 +02:00
Samuele Locatelli 0fe40dacc7 Fix errore inc ascata selezione parametri 2022-09-15 12:02:01 +02:00
zaccaria.majid 0c01e93ff3 Fix filtro flussi 2022-09-15 10:51:00 +02:00
Samuele Locatelli 6da702e31f Fix dati x lettura solo macc valide (=con dati flux) 2022-09-15 10:31:39 +02:00
Samuele Locatelli ce92f70eb0 Correzione timer x considerare tempo di esecuzione 2022-09-15 09:51:24 +02:00
Samuele Locatelli 37a62a34ae Parametri:
- FIx selezione live su pagina 1
- passo a pag 1 sul cambio filtro
2022-09-15 08:57:27 +02:00
Samuele Locatelli c138ea3143 Live update:
- disattivato al cambio filtro
- sbaglia num record paginazione
2022-09-14 17:55:27 +02:00
Samuele Locatelli 4e11685415 Fix live + filtri x parameters 2022-09-14 17:49:06 +02:00
Samuele Locatelli 32398cd7fb CLeanup + tolto search da parametri 2022-09-14 17:39:29 +02:00
Samuele Locatelli d5f2ed3950 Fix lettura dati con/senza filtro 2022-09-14 17:38:16 +02:00
Samuele Locatelli f120bb6c28 Merge remote-tracking branch 'origin/Feature/ParameterDataMethods' into develop 2022-09-14 16:56:57 +02:00
zaccaria.majid 7abd135f30 Modifiche page params
aggiunta msgservice per selezione macchina
2022-09-14 16:53:46 +02:00
zaccaria.majid bae58ec4bb modifiche per grafica pagina PARAMS 2022-09-14 14:34:30 +02:00
zaccaria.majid f44838d235 Aggiunta pagina parameters con componente live. 2022-09-14 12:18:36 +02:00
zaccaria.majid 9c11e877aa Merge remote-tracking branch 'origin/develop' into Feature/ParameterDataMethods 2022-09-14 10:15:07 +02:00
zaccaria.majid 5fdd74ae9a Inizio page params 2022-09-14 10:13:51 +02:00
Samuele Locatelli b838e95c28 Merge branch 'Feature/ParameterDataMethods' into develop 2022-09-14 09:26:23 +02:00
Samuele Locatelli 0e2036cb42 Completato aggiunta metodi elenco (da testare) 2022-09-14 09:23:46 +02:00
Samuele Locatelli b29bac08a2 Inizio aggiunta parametri e metodi relativi 2022-09-14 09:07:30 +02:00
Samuele Locatelli 5559e7daa8 Fix spazio titolo x add button 2022-09-13 18:23:09 +02:00
Samuele Locatelli d3fb78810e Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-09-13 18:20:39 +02:00
Samuele Locatelli 30dac79e7c PODL:
- completato editing con delete
2022-09-13 18:19:30 +02:00
zaccaria.majid bf8f7b8fa3 fix bottone new PODL allineato con scritta 2022-09-13 17:44:56 +02:00
zaccaria.majid 5915e5f532 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2022-09-13 17:39:54 +02:00
zaccaria.majid 658488fe0e fix bottone aggiunta PODL 2022-09-13 17:39:48 +02:00
Samuele Locatelli 5f8e60b4ba Code cleanup + fix preselezione gruppo fase + art 2022-09-13 17:35:55 +02:00
Samuele Locatelli fff3659939 Update x inserimento nuovo record (OK) 2022-09-13 17:05:08 +02:00
Samuele Locatelli 385c5cf7ea Update gestione editing fasi/key richeista 2022-09-13 16:51:13 +02:00
Samuele Locatelli 31ed8b2edb Aggiunto estrazione dato fase da PODL 2022-09-13 16:17:34 +02:00
Samuele Locatelli 0ef6d161d5 Bozza edit + new quasi OK 2022-09-13 15:44:15 +02:00
Samuele Locatelli a0b88fd157 UPdate x ricerca art in cascata 2022-09-13 15:16:46 +02:00
Samuele Locatelli ed93a04fd0 Inizio modifica selezione articolo 2022-09-13 15:01:07 +02:00
Samuele Locatelli 00a0fc81ce POSDL:
- FIX Selezione stato comemssa e filtraggio
2022-09-13 14:40:54 +02:00
Samuele Locatelli 681aa44b32 Fix reset ricerca al cambio pagina 2022-09-13 14:14:15 +02:00
zaccaria.majid 9d43a221ed fix label 2022-09-13 12:33:23 +02:00
zaccaria.majid 53a7630d97 Divisione visualizzazione ODL e PODL in due pagine 2022-09-13 12:23:44 +02:00
Samuele Locatelli 7317fa58b4 Inizio inserimento pagina PODL 2022-09-13 10:26:04 +02:00
zaccaria.majid dd56701b5b fix paginazione e ricerca 2022-09-12 16:26:30 +02:00
Samuele Locatelli 014bed96f9 Typo:
-CodeMaid vari
2022-09-12 15:12:56 +02:00
Samuele Locatelli ac196be0b7 MessageService:
- Fix errore loop infinito in update numero record totali
2022-09-12 15:12:10 +02:00
zaccaria.majid a77862b372 fix pagina PODL 2022-09-12 14:53:25 +02:00
zaccaria.majid ed5b55cf77 fix controller spec +
inizio implementazione pagina PODL
2022-09-12 13:00:34 +02:00
Samuele Locatelli aec6271f5a Update x ricerca ODL 2022-09-12 11:54:08 +02:00
Samuele Locatelli 62359ac858 Fix evento mostr/nascondi 2022-09-12 11:39:41 +02:00
Samuele Locatelli 73df595421 Fix paginazione ODL:
- aggiunto StateHasChanged in async
2022-09-12 11:28:48 +02:00
Samuele Locatelli 2cd1d57cd3 UPdate comportamento compress menù laterale sx 2022-09-12 11:14:01 +02:00
Samuele Locatelli 8934c86f7b STATS:
- Refresh conf StatsODL
2022-09-09 17:35:50 +02:00
Samuele Locatelli cee1718208 refresh list ODL 2022-08-23 11:25:58 +02:00
Samuele Locatelli 9407b451c7 bozza ODL 2022-08-01 13:34:16 +02:00
Samuele Locatelli 66469b9df7 Inizio pagina PODL/ODL correnti 2022-08-01 12:43:42 +02:00
Samuele Locatelli 57833b368d Update gestione azienda sel da config 2022-08-01 09:44:14 +02:00
Samuele Locatelli 634f5f7120 Aggiunta gestione oggetti JQM in home/index page 2022-07-25 07:56:32 +02:00
Samuele Locatelli 0e376c070c Aggiunta lettura Link JQL 2022-07-25 07:56:20 +02:00
Samuele Locatelli 387df699b0 Update link in pagina HOME 2022-07-23 17:56:51 +02:00
Samuele Locatelli 2016379205 ART:
- aggiunta ricerca x selVal
- completata ricerca veto cancellazione
2022-07-23 17:19:19 +02:00
Samuele Locatelli 0ad15c90c3 Articoli
- completato fix editing lista valori ammissibili x tipo
- ok editing
2022-07-23 16:05:38 +02:00
Samuele Locatelli 190e572bce Inizio insert listValues model 2022-07-23 12:12:54 +02:00
Samuele Locatelli 02e7b7c4e7 Modifica edit:
- azienda da selettore, tranne "tutte"
2022-07-23 11:53:38 +02:00
Samuele Locatelli e03b590844 Update pagina articoli: CRUD 2022-07-23 11:45:59 +02:00
Samuele Locatelli 4ee291c12d update bootstrap / bootstrap-icons 2022-07-23 11:45:41 +02:00
Samuele Locatelli 81c04ef70b Aggiunta metodi delete/update 2022-07-23 11:45:30 +02:00
Samuele Locatelli 19b89db170 Update display articoli 2022-07-23 10:32:35 +02:00
Samuele Locatelli 623ecd6308 Update DB
- aggiunta anagrafica aziende
- filtro articoli
2022-07-23 10:32:29 +02:00
Samuele Locatelli c5e598a0d6 Ancora update x mostrare articoli 2022-07-21 14:57:51 +02:00
Samuele Locatelli a46dc9cb32 Bozza pagine 2022-07-21 14:21:14 +02:00
Samuele Locatelli 3634f85359 Ancora update bozza SPEC 2022-07-21 11:47:33 +02:00
Samuele Locatelli 54d2cd634c Refresh sln 2022-07-21 10:05:33 +02:00
Samuele Locatelli 4cd61462c0 Aggiunta preliminare sito MP.SPEC 2022-07-21 10:05:03 +02:00
Samuele Locatelli 5444722c25 Merge tag 'AddConfMaxAge' into develop
Update impiegando MaxAge
2022-07-15 17:36:49 +02:00
Samuele Locatelli d5d47076df Merge branch 'release/AddConfMaxAge' 2022-07-15 17:36:41 +02:00
Samuele Locatelli 612c3c95f7 MON:
- fix: parametro MaxAge usato anche x redis
- cambio maxAge a 2000ms
2022-07-15 17:36:21 +02:00
Samuele Locatelli dddac15b52 MON:
- update x conf maxAge da appsetting.json
2022-07-15 17:23:58 +02:00
Samuele Locatelli a315e4f0ef Merge tag 'FixDisplayMonHours' into develop
Update x display ore in MON
2022-07-15 17:16:43 +02:00
Samuele Locatelli d71e9465e5 Merge branch 'release/FixDisplayMonHours' 2022-07-15 17:15:57 +02:00
Samuele Locatelli 876197b0ac Update display MON x vedere HH 2022-07-15 17:14:44 +02:00
Samuele Locatelli cd07a940d0 Merge tag 'UpdateLand4WCS' into develop
update x compatibilità con nuovi metodi WebConfigSetter
2022-07-14 17:55:44 +02:00
Samuele Locatelli d2f7dd53f3 Merge branch 'release/UpdateLand4WCS' 2022-07-14 17:55:28 +02:00
Samuele Locatelli 8c75556240 Update LAND:
- spostamento aree conf server in apposito blocco
- implementaizone compatibile con WebConfigSetter
2022-07-14 17:54:59 +02:00
Samuele Locatelli a025057865 Merge tag 'FixRedisNugetStat' into develop
Cambio modalità auto-reconnect e tentativi
2022-07-13 09:49:43 +02:00
Samuele Locatelli c5ebcd5b40 Merge branch 'release/FixRedisNugetStat' 2022-07-13 09:49:33 +02:00
Samuele Locatelli df1526d522 MP MON:
- cambio gestione auto-reconnect: più tentativi, per 10 minuti
2022-07-13 09:49:16 +02:00
Samuele Locatelli fb88e6e30d Merge tag 'FixRedisNugetStats' into develop
Fix nuget stats
2022-07-13 09:06:08 +02:00
Samuele Locatelli e83945488d Merge branch 'release/FixRedisNugetStats' 2022-07-13 09:05:53 +02:00
Samuele Locatelli 23835d330d Fix nuget redis x STATS 2022-07-13 09:05:36 +02:00
Samuele Locatelli b57885576e Merge tag 'FixRedisRegression' into develop
Update x fix regressione valore redis mal testato
2022-07-13 08:58:13 +02:00
Samuele Locatelli 417ea1a77d Merge branch 'release/FixRedisRegression' 2022-07-13 08:57:59 +02:00
Samuele Locatelli 335fdf78f0 Correzione regressione test valori redis 2022-07-13 08:57:33 +02:00
Samuele Locatelli d50e5a6860 Merge tag 'UpdatePack' into develop
Update nuget e eliminazione warnings
2022-07-13 08:29:21 +02:00
Samuele Locatelli 86d28f1901 Merge branch 'release/UpdatePack' 2022-07-13 08:28:57 +02:00
Samuele Locatelli 202c5f6faf Refresh pacchetti nuget + minor fix 2022-07-13 08:28:38 +02:00
Samuele Locatelli e2947d1017 Merge tag 'UpdateSlowTimerElapse' into develop
Aggiornamento slow time elapse (+/- 10%)
2022-07-13 07:57:33 +02:00
Samuele Locatelli 55faefcb9a Merge branch 'release/UpdateSlowTimerElapse' 2022-07-13 07:57:19 +02:00
Samuele Locatelli 1e5f894fd9 MON:
- attesa refresh variabile x client
- esclusione compilazione WASM (NON pronta)
2022-07-13 07:55:12 +02:00
Samuele Locatelli cf8baa054f Merge tag 'MonCleanup' into develop
Update con cleanup codice ed un paio di fix dispose
2022-07-12 19:06:59 +02:00
Samuele Locatelli 871a0c8ca5 Merge branch 'release/MonCleanup' 2022-07-12 19:05:53 +02:00
Samuele Locatelli 78cb17d8fc Cleanup MP/MON 2022-07-12 19:05:30 +02:00
Samuele Locatelli 22ff799204 Merge tag 'MonWithRedisChannels' into develop
Gestioen con redis channels (da ripulire...)
2022-07-12 18:45:32 +02:00
Samuele Locatelli a26408a21c Merge branch 'release/MonWithRedisChannels' 2022-07-12 18:45:18 +02:00
Samuele Locatelli ee043f81be Update MON:
- gestione tramite REDIS CHANNEL
- refresh sincrono
2022-07-12 18:44:57 +02:00
Samuele Locatelli 97741b4973 refresh libs 2022-07-12 18:44:35 +02:00
Samuele Locatelli 544c977740 Merge tag 'UpdateMonStandard' into develop
Update comportamento monitor standard
2022-07-12 17:10:37 +02:00
Samuele Locatelli dc38127291 Merge branch 'release/UpdateMonStandard' 2022-07-12 17:10:23 +02:00
Samuele Locatelli 8e7bdf2b77 Refresh bootstrap libs 2022-07-12 17:09:53 +02:00
Samuele Locatelli 7e922555b1 refresh MON principale 2022-07-12 17:08:48 +02:00
Samuele Locatelli acbbd5c9e6 Cambio metodi DB : asNoTracking 2022-07-12 17:08:19 +02:00
Samuele Locatelli 77f06c465e Update metodi WASM Server 2022-07-12 17:07:56 +02:00
Samuele Locatelli 4bfba522ce Complto review WASM client 2022-07-12 17:07:44 +02:00
Samuele Locatelli cbbdc8e8d8 Fix blink WASM client 2022-07-12 17:07:10 +02:00
Samuele Locatelli e8e3d63d09 Implementato dispose classe server 2022-07-11 18:46:53 +02:00
Samuele E. Locatelli 9dc73936da ancora pub profiles 2022-07-09 18:26:21 +02:00
Samuele E. Locatelli a2afeab317 refresh publish profiles 2022-07-09 18:26:15 +02:00
Samuele E. Locatelli 2c62abdf73 ancora refresh yaml e versione WASM 2022-07-09 18:21:04 +02:00
Samuele E. Locatelli d17cb03c7b Setup pubblicazione sito + test yaml (da validare) 2022-07-09 18:20:55 +02:00
Samuele Locatelli c749f10a8a UPdate MON da provare 2022-07-09 13:13:12 +02:00
Samuele Locatelli f2973cb0be Update refresh sincronizzato 2022-07-09 10:30:08 +02:00
Samuele Locatelli 8f2afd8ab5 MON Server / WASM
- fine tuning cache
- test velocità recupero dati
2022-07-09 09:53:21 +02:00
Samuele Locatelli 1d46b75608 Merge branch 'Feature/WASM' into develop 2022-07-08 19:53:00 +02:00
Samuele Locatelli 7c28833874 Update con cache REDIS x non chiamare sempre DB 2022-07-08 19:52:50 +02:00
Samuele Locatelli 1a019f1c72 refresh WASM 2022-07-08 19:51:24 +02:00
Samuele Locatelli cae553c47f Update progetto WASM con inclusione index page 2022-07-08 18:49:32 +02:00
Samuele Locatelli 7634fc42ba Bozza riscrittura WASM applicazione MON 2022-07-08 17:27:08 +02:00
Samuele Locatelli c24935afce WASM
- aggiunta preliminare progetto Web Assembly
2022-07-08 17:05:53 +02:00
Samuele Locatelli 2c4ce635c0 Merge tag 'FixPrerenderMonAndStressTest' into develop
Fix stress test e server prerender
2022-07-08 10:01:41 +02:00
Samuele Locatelli a4b01773ea Merge branch 'release/FixPrerenderMonAndStressTest' 2022-07-08 10:01:33 +02:00
Samuele Locatelli b076148e65 MON:
- Update con log esteso
- evitato server prerender x raddoppio pagina
- test stress (disabilitato)
2022-07-08 10:01:03 +02:00
Samuele Locatelli 02369f87f7 Merge tag 'UpgradeMapoCoreAll' into develop
Upgrade all MAPO-CORE
2022-07-07 18:58:43 +02:00
Samuele Locatelli 4b04feedff Merge branch 'release/UpgradeMapoCoreAll' 2022-07-07 18:58:34 +02:00
Samuele Locatelli e99def8664 Update LAND x refresh pagina 2022-07-07 18:57:34 +02:00
Samuele Locatelli a8744cfc56 Refresh STATS
- page reload
- Nuget upgrade
2022-07-07 18:52:53 +02:00
Samuele Locatelli 03761b81ec Merge tag 'UpgradeMapoMon' into develop
Update mapo MON x verificare reboot da Jetco
2022-07-07 18:49:28 +02:00
Samuele Locatelli dd4f403b7a Merge branch 'release/UpgradeMapoMon' 2022-07-07 18:49:16 +02:00
Samuele Locatelli c7d1ca046c Update/refresh MON:
- cambio logica reload blazor x MON
- update nuget vari
- rimozione warnings
2022-07-07 18:48:33 +02:00
Samuele Locatelli 2c3494f9f0 Merge tag 'UpdateAboutColorCheck' into develop
Update comportamento colori x About page e check licenze
2022-07-06 13:31:10 +02:00
Samuele Locatelli 7dc0aef175 Merge branch 'release/UpdateAboutColorCheck' 2022-07-06 13:30:49 +02:00
Samuele Locatelli e2afe6a586 Update display a + colori x check licenze 2022-07-06 13:30:22 +02:00
Samuele Locatelli e3ed9a7f35 Merge tag 'FixAboutPageError' into develop
Sistemato About page e suo errore x licenze cannate
2022-07-06 10:11:29 +02:00
Samuele Locatelli db003d2bc3 Merge branch 'release/FixAboutPageError' 2022-07-06 10:11:16 +02:00
Samuele Locatelli c203ab6eb3 Fix comportamento pagina About x check licenze 2022-07-06 10:10:50 +02:00
Samuele Locatelli c10633b6f1 Merge branch 'develop' 2022-07-05 10:00:30 +02:00
Samuele Locatelli a9fd0e2f83 Ancora fix sel reparto 2022-07-05 10:00:21 +02:00
Samuele Locatelli 112c73aea1 Merge tag 'FixSelReprtoAndSelEnabled' into develop
Fix: esclusi i gruppi con sel enabled se NON fossero tipo REPARTO
2022-07-05 09:57:19 +02:00
Samuele Locatelli 9e8e885ef9 Merge branch 'release/FixSelReprtoAndSelEnabled' 2022-07-05 09:56:59 +02:00
Samuele Locatelli 1f964ded92 Fix selezione gruppi
- prende SOLO reparto
- escluso gruppi con selEnabled
2022-07-05 09:56:28 +02:00
Samuele Locatelli eeba41cb5c Merge tag 'FixQrCodeJsConsoleLog' into develop
Eliminato console log inutile
2022-07-04 19:14:20 +02:00
Samuele Locatelli c418812ba2 Merge branch 'release/FixQrCodeJsConsoleLog' 2022-07-04 19:14:10 +02:00
Samuele Locatelli 6169d8cfcc Correzione jscript: niente console log 2022-07-04 19:13:28 +02:00
Samuele Locatelli 75596c61bc Merge tag 'FixQrUserDisplay' into develop
Fix comportamento display QrCode user
2022-07-04 19:12:39 +02:00
Samuele Locatelli b51e164c18 Merge branch 'release/FixQrUserDisplay' 2022-07-04 19:12:24 +02:00
Samuele Locatelli c35d625c36 Gestioen QRCode filt
- completata correzione selezione con distinct
- fix join come richeista Gian
2022-07-04 19:11:55 +02:00
Samuele Locatelli c893ce4d44 refresh pagina QR Card utenti 2022-07-04 18:48:58 +02:00
Samuele Locatelli c47fb1787c Aggiunta helper js x qrcode 2022-07-04 18:48:48 +02:00
Samuele Locatelli aca61c24dc Filtro gruppi:
- add componente filtro gruppi
- add meccanismo mesageService
2022-07-04 18:48:37 +02:00
Samuele Locatelli 167c9d89d4 Aggiunto modelli accesso dati x filtro QRCode utenti 2022-07-04 18:48:03 +02:00
Samuele Locatelli 2295f12958 Merge tag 'UpdateDisplayMonOverride' into develop
Update x MONitor: gestione override info x parameti FLog
2022-06-06 16:45:43 +02:00
Samuele Locatelli 9762628abc Merge branch 'release/UpdateDisplayMonOverride' 2022-06-06 16:45:23 +02:00
Samuele Locatelli a7918e1a89 Update con gestione override display da conf JSon 2022-06-06 16:42:49 +02:00
Samuele E. Locatelli 7a8e05462c Da testare: metodi redis da mostrare 2022-06-04 18:09:29 +02:00
Samuele E. Locatelli aaeae6e99e Riorganizzazione classe con CodeMaid 2022-06-04 17:44:37 +02:00
Samuele E. Locatelli 533f3f4f8f Update: spostao da DTO a conf la parte setup IOB + metodi ad avvio class MpDataService 2022-06-04 17:42:03 +02:00
Samuele E. Locatelli 5135987f1b Inizio update x gestione override dati in MON 2022-06-03 19:01:00 +02:00
Samuele Locatelli 458d788a13 Merge tag 'FixDownloadCsvOnDataPager' into develop
Fix gestione download csv da datapager (sparito in refactoring...)
2022-05-23 11:11:51 +02:00
Samuele Locatelli e842228baf Merge branch 'release/FixDownloadCsvOnDataPager' 2022-05-23 11:11:27 +02:00
Samuele Locatelli 25d2ada96e Fix errore eliminazione download csv da datapager 2022-05-23 11:10:04 +02:00
Samuele Locatelli f22933f925 Merge branch 'develop' 2022-05-03 14:49:30 +02:00
Samuele Locatelli 009b5f6452 Update x nuovo installer MON da testare 2022-05-03 14:49:22 +02:00
Samuele Locatelli 94c72b7e11 Merge tag 'FixSetupCssSemaforoAssente' into develop
Correzione mON nuovo: se manca colore semaforo x una macchina si pianta
--> metto nero (tipicamente al setup)
2022-05-02 19:06:09 +02:00
Samuele Locatelli 11a1925660 Merge branch 'release/FixSetupCssSemaforoAssente' 2022-05-02 19:05:10 +02:00
Samuele Locatelli 6ce8386248 Fix x caso colore semaforo assente (es setup iniziale) --> mette NERO 2022-05-02 19:04:26 +02:00
Samuele Locatelli 1739dcf38a Merge tag 'AddCheckLicMapo' into develop
Aggiunto controllo licenze in pagina about
2022-04-26 12:15:35 +02:00
Samuele Locatelli 1a42d581d4 Merge branch 'release/AddCheckLicMapo' 2022-04-26 12:15:22 +02:00
Samuele Locatelli 625433a3af Update visualizzazione licenze x MAPO 2022-04-26 12:14:52 +02:00
Samuele Locatelli 782a01a4b0 UIpdate pagina about x check licenze e server 2022-04-23 09:50:15 +02:00
Samuele Locatelli e65105b305 Merge tag 'FixDeployMaster' into develop
Sistemazione ciclo deploy su Master + fix vers number
2022-04-14 16:53:34 +02:00
4201 changed files with 239874 additions and 17828 deletions
+218 -2
View File
@@ -1,5 +1,6 @@
variables:
NEXUS_PATH: 'MP-STATS'
PROJ_PATH: ''
APP_NAME: 'MP.Stats'
SOL_NAME: 'MP-STATS'
@@ -120,6 +121,33 @@ MON:build:
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
SPEC:build:
stage: build
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# WAMON:build:
# stage: build
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# script:
# - dotnet build $env:PROJ_PATH/$env:APP_NAME.csproj
LAND:test:
stage: test
tags:
@@ -184,6 +212,39 @@ MON:test:
script:
- dotnet test $env:APP_NAME/$env:APP_NAME.csproj
# WAMON:test:
# stage: test
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# only:
# - develop
# needs: ["WAMON:build"]
# script:
# - dotnet test $env:PROJ_PATH/$env:APP_NAME.csproj
SPEC:test:
stage: test
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
- develop
needs: ["SPEC:build"]
script:
- dotnet test $env:APP_NAME/$env:APP_NAME.csproj
LAND:IIS01:deploy:
stage: deploy
tags:
@@ -248,6 +309,39 @@ MON:IIS01:deploy:
script:
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
# WAMON:IIS01:deploy:
# stage: deploy
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# only:
# - develop
# needs: ["WAMON:test"]
# script:
# - dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:PROJ_PATH/$env:APP_NAME.csproj
SPEC:IIS01:deploy:
stage: deploy
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
- develop
needs: ["SPEC:test"]
script:
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
LAND:IIS02:deploy:
stage: deploy
tags:
@@ -316,6 +410,41 @@ MON:IIS02:deploy:
- dotnet publish -p:PublishProfile=IIS02.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
# WAMON:IIS02:deploy:
# stage: deploy
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# only:
# - master
# needs: ["WAMON:build"]
# script:
# - dotnet publish -p:PublishProfile=IIS02.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:PROJ_PATH/$env:APP_NAME.csproj
# - dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:PROJ_PATH/$env:APP_NAME.csproj
SPEC:IIS02:deploy:
stage: deploy
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
- master
needs: ["SPEC:build"]
script:
- dotnet publish -p:PublishProfile=IIS02.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=viadante16 -p:AllowUntrustedCertificate=true $env:APP_NAME/$env:APP_NAME.csproj
LAND:installer:
stage: installer
tags:
@@ -400,6 +529,49 @@ MON:installer:
- *hashBuild
- *nexusUpload
# WAMON:installer:
# stage: installer
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# NEXUS_PATH: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# only:
# - develop
# - master
# needs: ["WAMON:build"]
# script:
# - dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release $env:PROJ_PATH/$env:APP_NAME.csproj -o:publish
# # qui il deploy su nexus...
# - *hashBuild
# - *nexusUpload
SPEC:installer:
stage: installer
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
NEXUS_PATH: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
- develop
- master
needs: ["SPEC:build"]
script:
- dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release $env:APP_NAME/$env:APP_NAME.csproj -o:publish
# qui il deploy su nexus...
- *hashBuild
- *nexusUpload
LAND:release:
stage: release
tags:
@@ -484,8 +656,6 @@ MON:release:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
#- feature/Deploy_CI_CD
# - master
- tags
except:
- branches
@@ -495,3 +665,49 @@ MON:release:
- publish/
script:
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj
# WAMON:release:
# stage: release
# tags:
# - win
# variables:
# PROJ_PATH: MP.WASM.Mon\Server
# APP_NAME: MP.WASM.Mon.Server
# SOL_NAME: MP-WAMON
# NEXUS_PATH: MP-WAMON
# before_script:
# - *nuget-fix
# - dotnet restore "$env:SOL_NAME.sln"
# only:
# - tags
# except:
# - branches
# needs: ["WAMON:build"]
# artifacts:
# paths:
# - publish/
# script:
# - dotnet publish -c Release -o ./publish $env:PROJ_PATH/$env:APP_NAME.csproj
SPEC:release:
stage: release
tags:
- win
variables:
APP_NAME: MP.SPEC
SOL_NAME: MP-SPEC
NEXUS_PATH: MP-SPEC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
only:
- tags
except:
- branches
needs: ["SPEC:build"]
artifacts:
paths:
- publish/
script:
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj
+8 -1
View File
@@ -30,7 +30,14 @@ namespace Egw.Core
{
string passPhrase = string.Format("{0}|{1}", cliente.PadLeft(50, ':'), applicativo);
plainAuthKey = SteamCrypto.DecryptString(authKey, passPhrase); // uso combinazione cliente+applicativo come passphrase!
answ = Convert.ToDateTime(plainAuthKey.Replace(string.Format("{0}#{1}-", cliente, applicativo.PadLeft(20, '-')), "").Replace(string.Format("%{0}%", licenze), ""));
string datePart = plainAuthKey.Replace($"{cliente}#{applicativo.PadLeft(20, '-')}-", "").Replace($"%{licenze}%", "");
//string datePart = plainAuthKey.Replace(string.Format("{0}#{1}-", cliente, applicativo.PadLeft(20, '-')), "").Replace(string.Format("%{0}%", licenze), "");
// se non avesse "bonificato" la parte num licenze (es non corrisponde al max) forzo il trim
if (datePart.Contains("%"))
{
datePart = datePart.Substring(0, datePart.IndexOf("%"));
}
answ = Convert.ToDateTime(datePart);
}
catch (Exception exc)
{
+31
View File
@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32126.317
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.SPEC", "MP.SPEC\MP.SPEC.csproj", "{C777A098-6F91-45AF-A85E-0AD08CBCAC52}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {632D11D1-088B-4795-97E5-048534002558}
EndGlobalSection
EndGlobal
+43
View File
@@ -0,0 +1,43 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32126.317
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Mon", "MP.Mon\MP.Mon.csproj", "{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Server", "MP.WASM.Mon\Server\MP.WASM.Mon.Server.csproj", "{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.WASM.Mon.Client", "MP.WASM.Mon\Client\MP.WASM.Mon.Client.csproj", "{9BF7BDE7-016A-458C-8791-494FD4204301}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.Build.0 = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A98B7F4-4EC6-4284-9D6C-63203DB981B1}.Release|Any CPU.Build.0 = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9BF7BDE7-016A-458C-8791-494FD4204301}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {632D11D1-088B-4795-97E5-048534002558}
EndGlobalSection
EndGlobal
+33
View File
@@ -54,7 +54,9 @@ namespace MP.AppAuth
#region Public Properties
public virtual DbSet<AnagraficaGruppi> DbSetAnagraficaGruppi { get; set; }
public virtual DbSet<AnagraficaOperatori> DbSetAnagOpr { get; set; }
public virtual DbSet<Gruppi2Operatori> DbSetGruppi2Oper { get; set; }
public virtual DbSet<UpdMan> DbSetUpdMan { get; set; }
public virtual DbSet<Vocabolario> DbSetVocabolario { get; set; }
@@ -103,6 +105,37 @@ namespace MP.AppAuth
.HasMaxLength(500);
});
modelBuilder.Entity<AnagraficaGruppi>(entity =>
{
entity.HasKey(e => e.CodGruppo);
entity.ToTable("AnagraficaGruppi");
entity.Property(e => e.CodGruppo).HasMaxLength(50);
entity.Property(e => e.DescrGruppo)
.IsRequired()
.HasMaxLength(250)
.HasDefaultValueSql("('')");
entity.Property(e => e.SelEnabled).HasComment("Indica se sia selezionabile a livello di tendina x inserimento BCode");
entity.Property(e => e.TipoGruppo)
.IsRequired()
.HasMaxLength(50)
.HasDefaultValueSql("('REPARTO')")
.HasComment("tipo gruppo: reparto (es x gestione operatori assegnati), GRUPPO FASE (es macchien che fanno lo stesso tipo di lavoro), ...");
});
modelBuilder.Entity<Gruppi2Operatori>(entity =>
{
entity.HasKey(e => new { e.MatrOpr, e.CodGruppo });
entity.ToTable("Gruppi2Operatori");
entity.Property(e => e.CodGruppo).HasMaxLength(50);
});
//
modelBuilder.Seed();
@@ -31,6 +31,38 @@ namespace MP.AppAuth.Controllers
#region Public Methods
/// <summary>
/// Elenco Record x Gruppi
/// </summary>
/// <returns></returns>
public List<Models.AnagraficaGruppi> AnagGruppiFilt(string codTipo)
{
List<Models.AnagraficaGruppi> dbResult = new List<Models.AnagraficaGruppi>();
using (AppAuthContext localDbCtx = new AppAuthContext(_configuration))
{
dbResult = localDbCtx
.DbSetAnagraficaGruppi
.Where(x => x.TipoGruppo == codTipo)
.ToList();
}
return dbResult;
}
/// <summary>
/// Elenco Record x Gruppi
/// </summary>
/// <returns></returns>
public List<Models.AnagraficaGruppi> AnagGruppiGetAll()
{
List<Models.AnagraficaGruppi> dbResult = new List<Models.AnagraficaGruppi>();
using (AppAuthContext localDbCtx = new AppAuthContext(_configuration))
{
dbResult = localDbCtx
.DbSetAnagraficaGruppi
.ToList();
}
return dbResult;
}
public List<Models.AnagraficaOperatori> AnagOpGetAll(string searchVal)
{
List<Models.AnagraficaOperatori> dbResult = new List<Models.AnagraficaOperatori>();
@@ -53,6 +85,41 @@ namespace MP.AppAuth.Controllers
// ritorno
return dbResult;
}
public List<Models.AnagraficaOperatori> AnagOpByGruppoGetFilt(string codGruppo, string searchVal)
{
List<Models.AnagraficaOperatori> dbResult = new List<Models.AnagraficaOperatori>();
using (AppAuthContext localDbCtx = new AppAuthContext(_configuration))
{
if (!string.IsNullOrEmpty(searchVal))
{
dbResult = localDbCtx
.DbSetGruppi2Oper
.Where(x => x.CodGruppo == codGruppo || string.IsNullOrEmpty(codGruppo))
.Join(
localDbCtx.DbSetAnagOpr.Where(x => x.Cognome.Contains(searchVal) || x.Nome.Contains(searchVal)),
gruppo => gruppo.MatrOpr,
operatore => operatore.MatrOpr,
(gruppo, operatore) => operatore
)
.ToList();
}
else
{
dbResult = localDbCtx
.DbSetGruppi2Oper
.Where(x => x.CodGruppo == codGruppo || string.IsNullOrEmpty(codGruppo))
.Join(
localDbCtx.DbSetAnagOpr,
gruppo => gruppo.MatrOpr,
operatore => operatore.MatrOpr,
(gruppo, operatore) => operatore
)
.ToList();
}
}
// ritorno
return dbResult;
}
public void Dispose()
{
+14 -13
View File
@@ -2,22 +2,17 @@
using NLog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MP.AppAuth.Controllers
{
public class MPController : IDisposable
{
#region Private Fields
#region Public Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
public static AppAuth.Controllers.MPController dbController;
#endregion Private Fields
#endregion Public Fields
#region Public Constructors
@@ -31,12 +26,6 @@ namespace MP.AppAuth.Controllers
#region Public Methods
public void Dispose()
{
// Clear database controller
dbController.Dispose();
}
/// <summary>
/// Elenco Record x AnagKeyValue
@@ -54,7 +43,19 @@ namespace MP.AppAuth.Controllers
return dbResult;
}
public void Dispose()
{
// Clear database controller
dbController.Dispose();
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
+6 -6
View File
@@ -9,18 +9,18 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<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">
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NLog" Version="4.7.11" />
<PackageReference Include="NLog" Version="5.0.4" />
</ItemGroup>
<ItemGroup>
+15
View File
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
#nullable disable
namespace MP.AppAuth.Models
{
public partial class AnagraficaGruppi
{
public string CodGruppo { get; set; }
public string TipoGruppo { get; set; }
public string DescrGruppo { get; set; }
public bool SelEnabled { get; set; }
}
}
+13
View File
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
#nullable disable
namespace MP.AppAuth.Models
{
public partial class Gruppi2Operatori
{
public int MatrOpr { get; set; }
public string CodGruppo { get; set; }
}
}
+3 -1
View File
@@ -71,7 +71,7 @@ namespace MP.AppAuth
public virtual DbSet<ListValue> ListValues { get; set; }
public virtual DbSet<Macchine> Macchines { get; set; }
public virtual DbSet<UpdMan> UpdMan { get; set; }
public virtual DbSet<Vocabolario> Vocabolario { get; set; }
public virtual DbSet<Vocabolario> DbSetVocabolario { get; set; }
#endregion Public Properties
@@ -503,6 +503,8 @@ namespace MP.AppAuth
.HasMaxLength(500);
});
OnModelCreatingPartial(modelBuilder);
}
+19
View File
@@ -0,0 +1,19 @@
using System.Collections.Generic;
namespace MP.Data.Conf
{
/// <summary>
/// Struttura conf del file conf TAG x IOB
/// </summary>
public class IobTags
{
#region Public Fields
/// <summary>
/// Oggetto dizionario di configurazione x IOB
/// </summary>
public Dictionary<string, List<TagData>> IobSetup = new Dictionary<string, List<TagData>>();
#endregion Public Fields
}
}
+50
View File
@@ -0,0 +1,50 @@
namespace MP.Data.Conf
{
/// <summary>
/// Item da mostrare nei blocchi MON degli impianti come override ai dati MSE
/// </summary>
public class TagData
{
#region Public Properties
/// <summary>
/// Indice della colonna (ordine) del dato
/// </summary>
public int ColNum { get; set; } = 0;
/// <summary>
/// Indice della riga del dato
/// </summary>
public int RowNum { get; set; } = 0;
/// <summary>
/// Override CSS (es fontSmall)
/// </summary>
public string TagCss { get; set; } = "";
/// <summary>
/// Indicazione della chiave REDIS dove recuperare il tag indicato (già in formato string)
/// </summary>
public string TagLocation { get; set; } = "";
/// <summary>
/// Etichetta da mostrare
/// </summary>
public string TagName { get; set; } = "";
#endregion Public Properties
#region Public Methods
/// <summary>
/// Clone dell'oggetto
/// </summary>
/// <returns></returns>
public TagData Clone()
{
return (TagData)this.MemberwiseClone();
}
#endregion Public Methods
}
}
+19
View File
@@ -0,0 +1,19 @@
namespace MP.Data
{
public class Constants
{
#region Public Fields
public static readonly string ACT_BLINK_KEY = $"{BASE_HASH}:Current:Blink";
public static readonly string ACT_MSE_DATA_KEY = $"{BASE_HASH}:Current:MSE";
// dati conf REDIS Cache
public static readonly string BASE_HASH = "MAPO";
// REDIS KEY Dati correnti
public static readonly string CONF_MON_KEY = $"{BASE_HASH}:Conf:MonDispData";
#endregion Public Fields
}
}
+32 -28
View File
@@ -10,14 +10,6 @@ namespace MP.Data.Controllers
{
public class MpMonController : IDisposable
{
#region Private Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Public Constructors
public MpMonController(IConfiguration configuration)
@@ -36,13 +28,14 @@ namespace MP.Data.Controllers
/// <param name="numRecord"></param>
/// <param name="searchVal"></param>
/// <returns></returns>
public List<DatabaseModels.AnagArticoli> ArticoliGetSearch(int numRecord, string searchVal = "")
public List<DatabaseModels.StatsAnagArticoli> ArticoliGetSearch(int numRecord, string searchVal = "")
{
List<DatabaseModels.AnagArticoli> dbResult = new List<DatabaseModels.AnagArticoli>();
List<DatabaseModels.StatsAnagArticoli> dbResult = new List<DatabaseModels.StatsAnagArticoli>();
using (var dbCtx = new MoonProContext(_configuration))
{
dbResult = dbCtx
.DbSetArticoli
.DbSetStatArticoli
.AsNoTracking()
.Where(x => x.CodArticolo.Contains(searchVal) || x.DescArticolo.Contains(searchVal) || x.Disegno.Contains(searchVal) || string.IsNullOrEmpty(searchVal))
.OrderBy(x => x.CodArticolo)
.Take(numRecord)
@@ -51,6 +44,24 @@ namespace MP.Data.Controllers
return dbResult;
}
/// <summary>
/// Elenco da tabella Macchine
/// </summary>
/// <returns></returns>
public List<DatabaseModels.ConfigModel> ConfigGetAll()
{
List<DatabaseModels.ConfigModel> dbResult = new List<DatabaseModels.ConfigModel>();
using (var dbCtx = new MoonProContext(_configuration))
{
dbResult = dbCtx
.DbSetConfig
.AsNoTracking()
.OrderBy(x => x.Chiave)
.ToList();
}
return dbResult;
}
public void Dispose()
{
}
@@ -66,29 +77,13 @@ namespace MP.Data.Controllers
{
dbResult = dbCtx
.DbSetMacchine
.AsNoTracking()
.OrderBy(x => x.IdxMacchina)
.ToList();
}
return dbResult;
}
/// <summary>
/// Elenco da tabella Macchine
/// </summary>
/// <returns></returns>
public List<DatabaseModels.ConfigModel> ConfigGetAll()
{
List<DatabaseModels.ConfigModel> dbResult = new List<DatabaseModels.ConfigModel>();
using (var dbCtx = new MoonProContext(_configuration))
{
dbResult = dbCtx
.DbSetConfig
.OrderBy(x => x.Chiave)
.ToList();
}
return dbResult;
}
/// <summary>
/// Elenco da tabella MappaStatoExpl
/// </summary>
@@ -103,6 +98,7 @@ namespace MP.Data.Controllers
dbResult = dbCtx
.DbSetMSE
.FromSqlRaw("EXEC stp_MSE_getData @maxAgeSec", maxAgeSec)
.AsNoTracking()
.ToList();
}
return dbResult;
@@ -134,5 +130,13 @@ namespace MP.Data.Controllers
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
File diff suppressed because it is too large Load Diff
+14 -14
View File
@@ -10,14 +10,6 @@ namespace MP.Data.Controllers
{
public class MpStatsController : IDisposable
{
#region Private Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Public Constructors
public MpStatsController(IConfiguration configuration)
@@ -52,9 +44,9 @@ namespace MP.Data.Controllers
/// <param name="numRecord"></param>
/// <param name="searchVal"></param>
/// <returns></returns>
public List<DatabaseModels.AnagArticoli> ArticoliGetSearch(int numRecord, string searchVal = "")
public List<DatabaseModels.StatsAnagArticoli> ArticoliGetSearch(int numRecord, string searchVal = "")
{
List<DatabaseModels.AnagArticoli> dbResult = new List<DatabaseModels.AnagArticoli>();
List<DatabaseModels.StatsAnagArticoli> dbResult = new List<DatabaseModels.StatsAnagArticoli>();
using (var dbCtx = new MoonPro_STATSContext(_configuration))
{
dbResult = dbCtx
@@ -73,9 +65,9 @@ namespace MP.Data.Controllers
/// <param name="numRecord"></param>
/// <param name="searchVal"></param>
/// <returns></returns>
public List<DatabaseModels.ODL> CommesseGetSearch(int numRecord, string searchVal = "")
public List<DatabaseModels.StatsODL> CommesseGetSearch(int numRecord, string searchVal = "")
{
List<DatabaseModels.ODL> dbResult = new List<DatabaseModels.ODL>();
List<DatabaseModels.StatsODL> dbResult = new List<DatabaseModels.StatsODL>();
using (var dbCtx = new MoonPro_STATSContext(_configuration))
{
dbResult = dbCtx
@@ -223,9 +215,9 @@ namespace MP.Data.Controllers
/// <param name="numRecord"></param>
/// <param name="searchVal"></param>
/// <returns></returns>
public List<DatabaseModels.ODL> StatOdlGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo)
public List<DatabaseModels.StatsODL> StatOdlGetAll(DateTime DataStart, DateTime DataEnd, string IdxMacchina, int IdxODL, string KeyRichiesta, string CodArticolo)
{
List<DatabaseModels.ODL> dbResult = new List<DatabaseModels.ODL>();
List<DatabaseModels.StatsODL> dbResult = new List<DatabaseModels.StatsODL>();
using (var dbCtx = new MoonPro_STATSContext(_configuration))
{
var dataFrom = new SqlParameter("@dataFrom", DataStart);
@@ -326,5 +318,13 @@ namespace MP.Data.Controllers
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
+22
View File
@@ -0,0 +1,22 @@
using MP.Data.DatabaseModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DTO
{
public class DossierFluxLogDTO
{
/// <summary>
/// Elenco valori FluxLogDTO serializzato (compreso valori edit)
/// </summary>
public List<FluxLogDTO> ODL { get; set; } = new List<FluxLogDTO>();
}
}
+23
View File
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MP.Data.DTO
{
public class FluxLogDTO
{
public string IdxMacchina { get; set; }
public DateTime dtEvento { get; set; }
public string CodFlux { get; set; }
public string Valore { get; set; }
public string ValoreEdit { get; set; }
}
}
+6 -1
View File
@@ -1,10 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("AnagArticoli")]
public partial class AnagArticoli
{
#region Public Properties
@@ -13,6 +17,7 @@ namespace MP.Data.DatabaseModels
public string DescArticolo { get; set; }
public string Disegno { get; set; }
public string Tipo { get; set; }
public string Azienda { get; set; }
#endregion Public Properties
}
+30
View File
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("AnagraficaGruppi")]
public partial class AnagGruppi
{
#region Public Properties
//[Key, DatabaseGenerated(DatabaseGeneratedOption.None), MaxLength(50)]
public string CodGruppo { get; set; }
//[MaxLength(50)]
public string TipoGruppo { get; set; }
//[MaxLength(250)]
public string DescrGruppo { get; set; }
public bool SelEnabled { get; set; }
#endregion Public Properties
}
}
+3 -1
View File
@@ -2,7 +2,9 @@
using System.Collections.Generic;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class AzioniUL
+4
View File
@@ -2,6 +2,10 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("Config")]
+3
View File
@@ -4,6 +4,9 @@ using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
+50
View File
@@ -0,0 +1,50 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("Dossiers")]
public partial class Dossiers
{
#region Public Properties
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdxDossier { get; set; }
[MaxLength(50)]
public string DataType { get; set; }
public DateTime DtRif { get; set; }
[MaxLength(50)]
public string IdxMacchina { get; set; } = "";
[MaxLength(50)]
public string CodArticolo { get; set; } = "";
public int IdxODL { get; set; } = 0;
public string Valore { get; set; } = "";
/// <summary>
/// Navigazione oggetto Machine
/// </summary>
[ForeignKey("IdxMacchina")]
public virtual Macchine MachineNav { get; set; } = null!;
/// <summary>
/// Navigazione oggetto ODL
/// </summary>
[ForeignKey("IdxODL")]
public virtual ODLModel OdlNav { get; set; } = null!;
#endregion Public Properties
}
}
+47
View File
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("EventList")]
public partial class EventListModel
{
#region Public Properties
[MaxLength(50)]
public string IdxMacchina { get; set; } = "NA";
public DateTime? InizioStato { get; set; } = DateTime.Now;
public int IdxTipo { get; set; } = 0;
[MaxLength(50)]
public string CodArticolo { get; set; } = "";
[MaxLength(250)]
public string Value { get; set; } = "";
public int MatrOpr { get; set; } = 0;
[MaxLength(20)]
public string pallet { get; set; } = "";
/// <summary>
/// Navigazione oggetto Machine
/// </summary>
[ForeignKey("IdxMacchina")]
public virtual Macchine MachineNav { get; set; } = null!;
/// <summary>
/// Navigazione oggetto Articolo
/// </summary>
[ForeignKey("CodArticolo")]
public virtual AnagArticoli ArticoloNav { get; set; } = null!;
#endregion Public Properties
}
}
+32
View File
@@ -0,0 +1,32 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("FluxLog")]
public partial class FluxLog
{
#region Public Properties
[MaxLength(50)]
public string IdxMacchina { get; set; }
public DateTime dtEvento { get; set; }
[MaxLength(50)]
public string CodFlux { get; set; }
[MaxLength(250)]
public string Valore { get; set; }
public int Cnt { get; set; }
#endregion Public Properties
}
}
+38
View File
@@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("LinkMenuJQM")]
public partial class LinkMenu
{
#region Public Properties
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int idxLink { get; set; }
[MaxLength(50)]
public string TipoLink { get; set; } = "";
public int ordine { get; set; } = 0;
[MaxLength(50)]
public string Testo { get; set; } = "";
[MaxLength(50)]
public string NavigateUrl { get; set; } = "";
[MaxLength(50)]
public string icona { get; set; } = "";
#endregion Public Properties
}
}
+32
View File
@@ -0,0 +1,32 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("ListValues")]
public partial class ListValues
{
#region Public Properties
[MaxLength(50)]
public string TableName { get; set; }
[MaxLength(50)]
public string FieldName { get; set; }
[MaxLength(50)]
public string value { get; set; }
[MaxLength(50)]
public string label { get; set; }
public int ordinal { get; set; }
#endregion Public Properties
}
}
+4 -1
View File
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class Macchine
+4
View File
@@ -1,6 +1,10 @@
using System;
using System.Collections.Generic;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class MappaStatoExpl
+69
View File
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("ODL")]
public partial class ODLModel
{
#region Public Properties
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdxOdl { get; set; }
[MaxLength(50)]
public string CodArticolo { get; set; } = "";
[MaxLength(50)]
public string IdxMacchina { get; set; }
public int NumPezzi { get; set; }
public decimal Tcassegnato { get; set; }
public DateTime? DataInizio { get; set; }
public DateTime? DataFine { get; set; }
[MaxLength(2500)]
public string Note { get; set; } = "";
[MaxLength(50)]
public string KeyRichiesta { get; set; }
public int PzPallet { get; set; } = 1;
[MaxLength(50)]
public string CodCli { get; set; } = "";
[NotMapped]
public string DurataMinuti
{
get
{
string answ = "";
DateTime end = DataFine != null ? (DateTime)DataFine : DateTime.Now;
var tsDurata = (end).Subtract((DateTime)DataInizio);
if (tsDurata.TotalDays < 1)
{
answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'";
}
else
{
answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h";
}
return answ;
}
}
/// <summary>
/// Navigazione oggetto Machine
/// </summary>
[ForeignKey("IdxMacchina")]
public virtual Macchine MachineNav { get; set; } = null!;
/// <summary>
/// Navigazione oggetto Articolo
/// </summary>
[ForeignKey("CodArticolo")]
public virtual AnagArticoli ArticoloNav { get; set; } = null!;
#endregion Public Properties
}
}
+71
View File
@@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
[Table("PromesseODL")]
public partial class PODLModel
{
#region Public Properties
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdxPromessa { get; set; }
[MaxLength(50)]
public string KeyRichiesta { get; set; }
[MaxLength(50)]
public string KeyBCode { get; set; }
public bool Attivabile { get; set; } = false;
public int IdxOdl { get; set; } = 0;
[MaxLength(50)]
public string CodArticolo { get; set; } = "";
[MaxLength(50)]
public string CodGruppo { get; set; } = "";
[MaxLength(50)]
public string IdxMacchina { get; set; }
public int NumPezzi { get; set; } = 1;
public decimal Tcassegnato { get; set; } = 1;
public DateTime? DueDate { get; set; }
public int Priorita { get; set; } = 1;
public int PzPallet { get; set; } = 1;
[MaxLength(2500)]
public string Note { get; set; } = "";
[MaxLength(50)]
public string CodCli { get; set; } = "";
public DateTime InsertDate { get; set; } = DateTime.Now;
[NotMapped]
public string CodFase
{
get
{
string answ = "*";
var allData = KeyRichiesta.Split('_');
if (allData.Length > 0)
{
answ = allData[0];
}
return answ;
}
}
/// <summary>
/// Navigazione oggetto Machine
/// </summary>
[ForeignKey("IdxMacchina")]
public virtual Macchine MachineNav { get; set; } = null!;
/// <summary>
/// Navigazione oggetto Articolo
/// </summary>
[ForeignKey("CodArticolo")]
public virtual AnagArticoli ArticoloNav { get; set; } = null!;
#endregion Public Properties
}
}
+4 -1
View File
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class ResControlli
+4 -1
View File
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class ResScarti
+26
View File
@@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class StatODLModel
{
#region Public Properties
[Key]
public int IdxStato { get; set; }
public string Descrizione { get; set; } = "";
public string Semaforo { get; set; }
public string Css { get; set; }
public double TotDurata { get; set; }
#endregion Public Properties
}
}
+20
View File
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class StatoProdModel
{
[Key]
public string idxMacchina { get; set; } = "NA";
public int pezziNonConfermati { get; set; } = 0;
public DateTime DataFrom { get; set; } = DateTime.Now;
public DateTime DataTo { get; set; } = DateTime.Now;
}
}
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class StatsAnagArticoli
{
#region Public Properties
public string CodArticolo { get; set; }
public string DescArticolo { get; set; }
public string Disegno { get; set; }
public string Tipo { get; set; }
#endregion Public Properties
}
}
@@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class ODL
public partial class StatsODL
{
#region Public Properties
+4 -1
View File
@@ -3,8 +3,11 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class TurniOee
+4 -1
View File
@@ -1,8 +1,11 @@
using System;
using System.Collections.Generic;
#nullable disable
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data.DatabaseModels
{
public partial class UserActionLog
+7 -7
View File
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
@@ -12,14 +12,14 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.4">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.9" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.4" />
<PackageReference Include="NLog" Version="4.7.15" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.9" />
<PackageReference Include="NLog" Version="5.0.4" />
</ItemGroup>
</Project>
+131
View File
@@ -0,0 +1,131 @@
using NLog;
using StackExchange.Redis;
using System;
namespace MP.Data
{
public class MessagePipe
{
#region Public Constructors
public MessagePipe(IConnectionMultiplexer redisConn, string channelName, bool enableLog = false)
{
_channel = channelName;
redis = redisConn;
redisDb = redis.GetDatabase();
this.enableLog = enableLog;
// aggiungo sottoscrittore
setupSubscriber();
}
#endregion Public Constructors
#region Public Events
public event EventHandler EA_NewMessage = delegate { };
#endregion Public Events
#region Public Methods
public bool saveAndSendMessage(string memKey, string message)
{
bool answ = false;
// invio notifica tramite il canale richiesto
answ = sendMessage(message);
if (redisDb != null)
{
redisDb.StringSetAsync(memKey, message);
if (enableLog)
{
Log.Info($"Redis Cache Key: {memKey}");
}
}
return answ;
}
/// <summary>
/// Invio messaggio sul canale
/// </summary>
/// <param name="newMess"></param>
/// <returns></returns>
public bool sendMessage(string newMess)
{
bool answ = false;
ISubscriber sub = redis.GetSubscriber();
sub.Publish(_channel, newMess);
return answ;
}
#endregion Public Methods
#region Protected Fields
protected static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Protected Fields
#region Private Fields
private bool enableLog = false;
private IConnectionMultiplexer redis;
private IDatabase? redisDb;
#endregion Private Fields
#region Private Properties
/// <summary>
/// Canale associato al gestore pipeline messaggi
/// </summary>
private string _channel { get; set; } = "";
#endregion Private Properties
#region Private Methods
private void setupSubscriber()
{
ISubscriber sub = redis.GetSubscriber();
//Subscribe to the channel named messages
sub.Subscribe(_channel, (channel, message) =>
{
Log.Trace($"ch {channel} | {message}");
// messaggio
PubSubEventArgs mea = new PubSubEventArgs(message);
// se qualcuno ascolta sollevo evento nuovo valore...
if (EA_NewMessage != null)
{
EA_NewMessage(this, mea);
}
});
Log.Info($"Subscribed {_channel}");
}
#endregion Private Methods
/// <summary>
/// Invio messaggio sul canale + salvataggio in cache REDIS
/// </summary>
/// <param name="memKey">Chiave REDIS x salvare valore</param>
/// <param name="message"></param>
}
public class PubSubEventArgs : EventArgs
{
#region Public Constructors
public PubSubEventArgs(string messaggio)
{
this.newMessage = messaggio;
}
#endregion Public Constructors
#region Public Properties
public string newMessage { get; set; } = "";
#endregion Public Properties
}
}
+88 -5
View File
@@ -6,7 +6,9 @@ using MP.Data.DatabaseModels;
using NLog;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data
{
public partial class MoonProContext : DbContext
@@ -34,10 +36,21 @@ namespace MP.Data
#region Public Properties
public virtual DbSet<StatsAnagArticoli> DbSetStatArticoli { get; set; }
public virtual DbSet<AnagArticoli> DbSetArticoli { get; set; }
public virtual DbSet<Macchine> DbSetMacchine { get; set; }
public virtual DbSet<MappaStatoExpl> DbSetMSE { get; set; }
public virtual DbSet<ConfigModel> DbSetConfig { get; set; }
public virtual DbSet<AnagGruppi> DbSetAnagGruppi { get; set; }
public virtual DbSet<ListValues> DbSetListValues { get; set; }
public virtual DbSet<LinkMenu> DbSetLinkMenu { get; set; }
public virtual DbSet<ODLModel> DbSetODL { get; set; }
public virtual DbSet<PODLModel> DbSetPODL { get; set; }
public virtual DbSet<FluxLog> DbSetFluxLog { get; set; }
public virtual DbSet<Dossiers> DbSetDossiers { get; set; }
public virtual DbSet<StatODLModel> DbSetStatOdl { get; set; }
public virtual DbSet<StatoProdModel> DbSetStatoProd { get; set; }
public virtual DbSet<EventListModel> DbSetEvList { get; set; }
#endregion Public Properties
@@ -53,7 +66,15 @@ namespace MP.Data
{
if (!optionsBuilder.IsConfigured)
{
string connString = _configuration.GetConnectionString("Mp.Mon");
string connString = _configuration.GetConnectionString("Mp.Data");
if (string.IsNullOrEmpty(connString))
{
connString = _configuration.GetConnectionString("Mp.Mon");
}
if (string.IsNullOrEmpty(connString))
{
connString = _configuration.GetConnectionString("Mp.STATS");
}
optionsBuilder.UseSqlServer(connString);
//optionsBuilder.UseSqlServer("Server=SQL2016DEV;Database=MoonPro;Trusted_Connection=True;");
@@ -64,9 +85,9 @@ namespace MP.Data
{
modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");
modelBuilder.Entity<AnagArticoli>(entity =>
modelBuilder.Entity<StatsAnagArticoli>(entity =>
{
entity.HasNoKey();
entity.HasKey(e => e.CodArticolo);
entity.ToView("v_UI_AnagArticoli");
@@ -86,10 +107,36 @@ namespace MP.Data
.IsRequired()
.HasMaxLength(50);
});
modelBuilder.Entity<AnagArticoli>(entity =>
{
entity.HasKey(e => e.CodArticolo);
entity.ToView("AnagArticoli");
entity.Property(e => e.CodArticolo)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.DescArticolo)
.IsRequired()
.HasMaxLength(250);
entity.Property(e => e.Disegno)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.Tipo)
.IsRequired()
.HasMaxLength(50);
entity.Property(e => e.Azienda)
.IsRequired()
.HasMaxLength(50);
});
modelBuilder.Entity<Macchine>(entity =>
{
entity.HasNoKey();
entity.HasKey(e => e.IdxMacchina);
entity.ToView("Macchine");
@@ -223,6 +270,42 @@ namespace MP.Data
.HasColumnName("valoreStd")
.HasComment("Valore di default/riferimento per la variabile");
});
modelBuilder.Entity<AnagGruppi>(entity =>
{
entity.HasKey(e => e.CodGruppo);
entity.Property(e => e.CodGruppo)
.HasMaxLength(50)
.HasColumnName("CodGruppo");
entity.Property(e => e.TipoGruppo)
.HasMaxLength(50)
.HasColumnName("TipoGruppo");
entity.Property(e => e.DescrGruppo)
.HasMaxLength(250)
.HasColumnName("DescrGruppo");
entity.Property(e => e.SelEnabled)
.HasColumnName("SelEnabled");
});
modelBuilder.Entity<ListValues>(entity =>
{
entity.HasKey(e => new { e.TableName, e.FieldName, e.value });
});
modelBuilder.Entity<FluxLog>(entity =>
{
entity.HasKey(e => new { e.IdxMacchina, e.dtEvento, e.CodFlux });
});
modelBuilder.Entity<EventListModel>(entity =>
{
entity.HasKey(e => new { e.IdxMacchina, e.InizioStato, e.IdxTipo});
});
OnModelCreatingPartial(modelBuilder);
}
+7 -5
View File
@@ -6,7 +6,9 @@ using MP.Data.DatabaseModels;
using NLog;
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
namespace MP.Data
{
public partial class MoonPro_STATSContext : DbContext
@@ -34,12 +36,12 @@ namespace MP.Data
#region Public Properties
public virtual DbSet<AnagArticoli> DbSetArticoli { get; set; }
public virtual DbSet<StatsAnagArticoli> DbSetArticoli { get; set; }
public virtual DbSet<AzioniUL> DbSetAzioniUL { get; set; }
public virtual DbSet<ResControlli> DbSetControlli { get; set; }
public virtual DbSet<DdbTurni> DbSetDdbTurni { get; set; }
public virtual DbSet<Macchine> DbSetMacchine { get; set; }
public virtual DbSet<ODL> DbSetODL { get; set; }
public virtual DbSet<StatsODL> DbSetODL { get; set; }
public virtual DbSet<ResScarti> DbSetScarti { get; set; }
public virtual DbSet<TurniOee> DbSetTurniOee { get; set; }
public virtual DbSet<UserActionLog> DbSetUserLog { get; set; }
@@ -98,7 +100,7 @@ namespace MP.Data
.HasMaxLength(5);
});
modelBuilder.Entity<AnagArticoli>(entity =>
modelBuilder.Entity<StatsAnagArticoli>(entity =>
{
entity.HasNoKey();
@@ -325,7 +327,7 @@ namespace MP.Data
.HasMaxLength(250);
});
modelBuilder.Entity<ODL>(entity =>
modelBuilder.Entity<StatsODL>(entity =>
{
entity.HasKey(e => e.IdxOdl)
.HasName("PK_ODL_1");
+69 -3
View File
@@ -3,13 +3,26 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MP.Data
{
public class Utils
{
#region Public Properties
public static string redKeyArtUsed
{
get => RedHash($"CACHE:CheckArtUsed");
}
public static string redKeyTabCheckArt
{
get => RedHash($"CACHE:TabCheckArt");
}
#endregion Public Properties
#region Public Methods
public static string ConvMinToTime(double minutes)
@@ -28,17 +41,70 @@ namespace MP.Data
return answ;
}
public static async Task SaveToCsv<T>(List<T> reportData, string path)
/// <summary>
/// Nome della variabile HASH da utilizzare (dato CodModulo / Server / DB impiegato da
/// funzionalita' DbConfig) + keyName richiesto...
/// </summary>
public static string RedHash(string keyName)
{
string answ = keyName;
try
{
answ = $"MP:Data:{keyName}";
}
catch
{ }
return answ;
}
/// <summary>
/// Effettua salvataggio in file di un generico oggetto in formato CSV
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="reportData"></param>
/// <param name="path"></param>
/// <param name="separator">Separatore da impiegare</param>
/// <returns></returns>
public static async Task SaveToCsv<T>(List<T> reportData, string path, char separator)
{
var lines = new List<string>();
IEnumerable<PropertyDescriptor> props = TypeDescriptor.GetProperties(typeof(T)).OfType<PropertyDescriptor>();
var header = string.Join(";", props.ToList().Select(x => x.Name));
lines.Add(header);
var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
var valueLines = reportData.Select(row => string.Join(separator, header.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
//var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
lines.AddRange(valueLines);
await Task.Run(() => File.WriteAllLines(path, lines.ToArray()));
}
/// <summary>
/// Inizializzazione con periodo e arrotondamento
/// </summary>
/// <param name="minRound"></param>
/// <returns></returns>
public static DateTime InitDatetime(DateTime dtRif, int minRound)
{
TimeSpan DayElapsed = dtRif.Subtract(dtRif.Date);
int minDay = (int)Math.Ceiling((double)(DayElapsed.TotalMinutes / minRound)) * minRound;
DateTime endRounded = DateTime.Today.AddMinutes(minDay);
return endRounded;
}
public static string FormDurata(double durataMinuti)
{
string answ = "";
TimeSpan tsDurata = TimeSpan.FromMinutes(durataMinuti);
if (tsDurata.TotalDays < 1)
{
answ = $"{tsDurata.Hours:00}h {tsDurata.Minutes:00}'";
}
else
{
answ = $"{tsDurata.Days}gg {tsDurata.Hours:00}h";
}
return answ;
}
#endregion Public Methods
}
}
+20
View File
@@ -0,0 +1,20 @@
<div class="row">
<div class="col-6">
Gruppi
</div>
<div class="col-6 text-right">
<select @bind="@groupName" class="form-control form-control-sm">
<option value="">--- Tutti ---</option>
@if (ListGroups != null)
{
@foreach (var item in ListGroups)
{
<option value="@item.CodGruppo">@item.DescrGruppo</option>
}
}
</select>
</div>
</div>
+54
View File
@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Net.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.Web.Virtualization;
using Microsoft.JSInterop;
using MP.Land;
using MP.Land.Shared;
using MP.AppAuth.Models;
using MP.Land.Data;
namespace MP.Land.Components
{
public partial class CmpGroupFilt
{
[Inject]
protected MessageService AppMService { get; set; }
[Inject]
protected AppAuthService DataService { get; set; }
private List<AnagraficaGruppi> ListGroups;
private string groupName
{
get
{
return AppMService.CodGruppo;
}
set
{
AppMService.CodGruppo = value;
}
}
protected override async Task OnInitializedAsync()
{
await ReloadData();
}
private async Task ReloadData()
{
// carico i gruppi
ListGroups = await DataService.AnagGruppiFilt("REPARTO");
}
}
}
+3 -3
View File
@@ -42,9 +42,9 @@
{
<div class="input-group input-group-sm">
<select @bind="@PageSize" class="form-control form-control-sm">
<option value="2">2</option>
<option value="4">4</option>
<option value="10">10</option>
<option value="3">3</option>
<option value="6">6</option>
<option value="9">9</option>
</select>
</div>
}
+1 -1
View File
@@ -71,7 +71,7 @@ namespace MP.Land.Components
protected int _numPage { get; set; } = 1;
protected int _numRecord { get; set; } = 4;
protected int _numRecord { get; set; } = 6;
protected int percLoading { get; set; } = 0;
+1 -1
View File
@@ -118,7 +118,7 @@ else // disegno box non cliccabile e licenza mancante
protected string fullUrl(string relUrl)
{
return $"{Configuration["BaseUrl"]}{relUrl}";
return $"{Configuration["ServerConf:BaseUrl"]}{relUrl}";
}
protected MarkupString traduci(string lemma)
+2 -2
View File
@@ -81,12 +81,12 @@ namespace MP.Land.Components
protected string fullUrl(string relUrl)
{
return $"{Configuration["BaseUrl"]}{relUrl}";
return $"{Configuration["ServerConf:BaseUrl"]}{relUrl}";
}
protected string localPath(string localRepo)
{
return @$"{Configuration["downloadPath"]}\{localRepo}\{Configuration["appVers"]}"; ;
return @$"{Configuration["ServerConf:downloadPath"]}\{localRepo}\{Configuration["appVers"]}"; ;
}
protected override void OnInitialized()
+1 -1
View File
@@ -31,7 +31,7 @@
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
if (firstRender)
{
await JSRuntime.InvokeVoidAsync("clearContent", $"qrCodeImg_{CurrItem.MatrOpr}");
await JSRuntime.InvokeVoidAsync("displayQr", $"qrCodeImg_{CurrItem.MatrOpr}", rawCode);
+40
View File
@@ -129,6 +129,46 @@ namespace MP.Land.Data
#region Public Methods
public async Task<List<AppAuth.Models.AnagraficaGruppi>> AnagGruppiAll()
{
List<AppAuth.Models.AnagraficaGruppi> dbResult = new List<AppAuth.Models.AnagraficaGruppi>();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.AnagGruppiGetAll();
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per AnagGruppiAll: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
public async Task<List<AppAuth.Models.AnagraficaGruppi>> AnagGruppiFilt(string codTipo)
{
List<AppAuth.Models.AnagraficaGruppi> dbResult = new List<AppAuth.Models.AnagraficaGruppi>();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.AnagGruppiFilt(codTipo);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per AnagGruppiFilt: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
public async Task<List<AppAuth.Models.AnagraficaOperatori>> AnagOperByGroupList(string codGruppo, string searchVal)
{
List<AppAuth.Models.AnagraficaOperatori> dbResult = new List<AppAuth.Models.AnagraficaOperatori>();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
var rawData = dbController
.AnagOpByGruppoGetFilt(codGruppo, searchVal);
dbResult = rawData
.GroupBy(user => user.MatrOpr)
.Select(grp => grp.First())
.ToList();
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per AnagOperByGroupList: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
public async Task<List<AppAuth.Models.AnagraficaOperatori>> AnagOperList(string searchVal)
{
List<AppAuth.Models.AnagraficaOperatori> dbResult = new List<AppAuth.Models.AnagraficaOperatori>();
+181 -51
View File
@@ -28,6 +28,12 @@ namespace MP.Land.Data
/// URL dell'API x chiamate gestione licenze
/// </summary>
private static string apiUrl = "https://liman.egalware.com/ELM.API/";
//private static string apiUrl = "https://localhost:44351/";
/// <summary>
/// Chiave redis x info della licenza
/// </summary>
private static string rkeyAppInfo = "LongCache:AppInfo";
private readonly IDistributedCache distributedCache;
@@ -120,10 +126,26 @@ namespace MP.Land.Data
public DateTime infoExpiry { get; set; } = DateTime.Today.AddDays(1);
/// <summary>
/// Codice cliente/installazione
/// </summary>
public string Installazione { get; set; } = "";
/// <summary>
/// Master key licenza principale
/// </summary>
public string MasterKey { get; set; } = "";
/// <summary>
/// Numero licenze da DB
/// </summary>
public int NumLicDb { get; set; } = -1;
/// <summary>
/// Numero licenze da auth remota
/// </summary>
public int NumLicRemote { get; set; } = -1;
public bool ValidData
{
get
@@ -160,7 +182,7 @@ namespace MP.Land.Data
RestClient client = new RestClient(apiUrl);
//client.Authenticator = new HttpBasicAuthenticator("username", "password");
string MKeyEnc = HttpUtility.UrlEncode(MasterKey);
var request = new RestRequest($"/api/attivazioni/?chiave={MKeyEnc}", Method.Get);
var request = new RestRequest($"api/attivazioni/?chiave={MKeyEnc}", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
@@ -172,6 +194,29 @@ namespace MP.Land.Data
return await Task.FromResult(answ);
}
/// <summary>
/// Recupera info licenza da remoto
/// </summary>
private async Task<List<LiManObj.ApplicativoDTO>> OnlineAppInfo()
{
List<LiManObj.ApplicativoDTO> answ = new List<LiManObj.ApplicativoDTO>();
// cerco online
RestClient client = new RestClient(apiUrl);
string MKeyEnc = HttpUtility.UrlEncode(MasterKey);
//string mKey = System.Net.WebUtility.UrlEncode(MasterKey);
string reqUrl = $"api/licenza/{Installazione}?CodApp={Applicazione}&Chiave={MKeyEnc}";
var request = new RestRequest(reqUrl, Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// verifico risposta
string rawData = $"{response.Content}";
answ = JsonConvert.DeserializeObject<List<LiManObj.ApplicativoDTO>?>(rawData);
}
return await Task.FromResult(answ);
}
private void ReportUpdated()
{
if (EA_InfoUpdated != null)
@@ -184,6 +229,25 @@ namespace MP.Land.Data
#region Protected Methods
/// <summary>
/// Cerca di recuperare valore INT da elenco AKV
/// </summary>
/// <param name="varReq">Chiave AKV richiesta</param>
/// <returns></returns>
protected int getAVKInt(string varReq)
{
int answ = -9999;
if (AKVList != null && AKVList.Count > 0)
{
var currRec = AKVList.Where(x => x.NomeVar == varReq).FirstOrDefault();
if (currRec != null)
{
answ = currRec.ValInt ?? 0;
}
}
return answ;
}
/// <summary>
/// Cerca di recuperare valore string da elenco AKV
/// </summary>
@@ -285,55 +349,6 @@ namespace MP.Land.Data
return await Task.FromResult(dbResult);
}
/// <summary>
/// Init della classe con variabili di base da Redis/DB
/// </summary>
public bool InitAkv()
{
bool fatto = false;
Applicazione = "MAPO";
Installazione = getAVKStr("Installazione");
MasterKey = getAVKStr(Applicazione);
fatto = !string.IsNullOrEmpty($"{Installazione}{MasterKey}");
return fatto;
}
/// <summary>
/// Init della classe con variabili di base da Redis/DB
/// </summary>
public async Task<bool> RefreshLicense()
{
bool fatto = false;
var onlineAct = await OnlineActivationList();
if (onlineAct != null)
{
if (onlineAct.Count > 0)
{
// scadenza info a 15 gg...
int numDays = 15;
infoExpiry = DateTime.Now.AddDays(numDays);
ActivList = onlineAct;
fatto = await setActivList(onlineAct, numDays);
}
}
await Task.Delay(1);
return fatto;
}
public async Task<bool> setActivList(List<LiManObj.AttivazioneDTO> newActList, int numDays)
{
bool fatto = false;
string cacheKey = $"{rKeyAttByLic}:{MasterKey}";
var rawData = JsonConvert.SerializeObject(newActList);
await setRSV(cacheKey, rawData, numDays * cacheFact * 24);
fatto = true;
if (EA_InfoUpdated != null)
{
EA_InfoUpdated?.Invoke();
}
return fatto;
}
/// <summary>
/// Verifica attivazione licenza
/// </summary>
@@ -363,6 +378,121 @@ namespace MP.Land.Data
return answ;
}
/// <summary>
/// Stato server gestione licenze
/// </summary>
public async Task<string> checkLimanServer()
{
string answ = "ND";
// cerco online
RestClient client = new RestClient(apiUrl);
var request = new RestRequest($"api/health", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// verifico risposta
answ = response.Content.Replace("\"", "");
}
return await Task.FromResult(answ);
}
/// <summary>
/// Init della classe con variabili di base da Redis/DB
/// </summary>
public bool InitAkv()
{
bool fatto = false;
Applicazione = "MAPO";
Installazione = getAVKStr("Installazione");
MasterKey = getAVKStr(Applicazione);
NumLicDb = getAVKInt(Applicazione);
fatto = !string.IsNullOrEmpty($"{Installazione}{MasterKey}");
return fatto;
}
public async Task<List<LiManObj.ApplicativoDTO>> LicAppCache()
{
List<LiManObj.ApplicativoDTO> dbResult = new List<LiManObj.ApplicativoDTO>();
string cacheKey = $"{rkeyAppInfo}:{MasterKey}";
trackCache(cacheKey);
string rawData = await getRSV(cacheKey);
if (!string.IsNullOrEmpty(rawData))
{
var cacheRes = JsonConvert.DeserializeObject<List<LiManObj.ApplicativoDTO>?>(rawData);
if (cacheRes != null)
{
dbResult = cacheRes;
}
}
return await Task.FromResult(dbResult);
}
/// <summary>
/// Init della classe con variabili di base da Redis/DB
/// </summary>
public async Task<bool> RefreshLicense()
{
bool fatto = false;
// scadenza info a 15 gg...
int numDays = 15;
// dati applicativo
var appData = await OnlineAppInfo();
if (appData != null)
{
if (appData.Count > 0)
{
fatto = await setAppInfo(appData, numDays);
// salvo info licenza...
NumLicRemote = appData[0].NumLicenze;
}
}
// dati attivazioni
var onlineAct = await OnlineActivationList();
if (onlineAct != null)
{
if (onlineAct.Count > 0)
{
infoExpiry = DateTime.Now.AddDays(numDays);
ActivList = onlineAct;
fatto = await setActivList(onlineAct, numDays);
}
}
await Task.Delay(1);
return fatto;
}
public async Task<bool> setActivList(List<LiManObj.AttivazioneDTO> newActList, int numDays)
{
bool fatto = false;
string cacheKey = $"{rKeyAttByLic}:{MasterKey}";
var rawData = JsonConvert.SerializeObject(newActList);
await setRSV(cacheKey, rawData, numDays * cacheFact * 24);
fatto = true;
if (EA_InfoUpdated != null)
{
EA_InfoUpdated?.Invoke();
}
return fatto;
}
public async Task<bool> setAppInfo(List<LiManObj.ApplicativoDTO> newAppInfo, int numDays)
{
bool fatto = false;
string cacheKey = $"{rkeyAppInfo}:{MasterKey}";
var rawData = JsonConvert.SerializeObject(newAppInfo);
await setRSV(cacheKey, rawData, numDays * cacheFact * 24);
fatto = true;
if (EA_InfoUpdated != null)
{
EA_InfoUpdated?.Invoke();
}
return fatto;
}
#endregion Public Methods
}
}
}
+15
View File
@@ -106,6 +106,21 @@ namespace MP.Land.Data
}
}
protected string _groupName { get; set; } = "";
public string CodGruppo
{
get => _groupName;
set
{
if (_groupName != value)
{
_groupName = value;
ReportFilter();
}
}
}
#endregion Public Properties
#region Private Methods
+1 -1
View File
@@ -44,7 +44,7 @@ namespace MP.Land.Data
public bool OnlyMod { get; set; } = false;
public bool OnlyNoTag { get; set; } = false;
public int PageNum { get; set; } = 1;
public int PageSize { get; set; } = 4;
public int PageSize { get; set; } = 6;
public string SearchVal { get; set; } = "";
public string Tag { get; set; } = "";
+5 -5
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>MP.Land</RootNamespace>
<Version>6.15.2204.1216</Version>
<Version>6.16.2209.2118</Version>
</PropertyGroup>
<ItemGroup>
@@ -45,14 +45,14 @@
<ItemGroup>
<PackageReference Include="DiffMatchPatch" Version="1.0.3" />
<PackageReference Include="Majorsoft.Blazor.Components.Debounce" Version="1.5.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.9">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.9" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.9" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.1.4" />
<PackageReference Include="RestSharp" Version="107.1.2" />
</ItemGroup>
+59 -15
View File
@@ -2,9 +2,10 @@
@using MP.Land.Data
@inject MessageService AppMService
@inject LicenseService LicServ
<div class="row mx-2">
<div class="col-12 col-lg-8 offset-lg-2">
<div class="col-12 col-lg-10 offset-lg-1">
<div class="card">
<div class="card-header text-center">
<div class="row">
@@ -28,28 +29,71 @@
<img src="img/LogoMapoFull.png" class="img-fluid" />
</div>
<div class="col-lg-3"></div>
<div class="col-12">
<div class="col-6">
<h4 class="card-title">@Messaggio</h4>
<br />
<p>MoonPro / MAPO sono una suite di applicazioni e dispositivi hw dedicati per l'IOT,l'industry 4.0 e la gestione automatizzata dei processi produttivi.</p>
<hr />
<p>Per maggiori informazioni <a href="http://www.steamware.net/iot" target="_blank">visita il link</a> sul nostro sito.</p>
</div>
<div class="col-6 text-right">
<div runat="server" id="divCheck" class="@mainCss">
<h4>Info installazione</h4>
<hr />
<div class="d-flex justify-content-between @remSrvCss">
<div class="px-2">
<i class="fa fa-server" aria-hidden="true"></i> Remote Server:
</div>
<div class="px-2">
<b>@ServerStatus</b>
</div>
</div>
<div class="d-flex justify-content-between">
<div class="px-2">
<i class="fa fa-certificate" aria-hidden="true"></i> Cliente:
</div>
<div class="px-2">
<b>@Installazione</b>
</div>
</div>
<div class="d-flex justify-content-between">
<div class="px-2">
<i class="fa fa-desktop" aria-hidden="true"></i> App:
</div>
<div class="px-2">
<b>@Applicazione</b>
</div>
</div>
<div class="d-flex justify-content-between @licenseCss">
<div class="px-2">
<i class="fa fa-users" aria-hidden="true"></i> Licenze:
</div>
<div class="px-2">
<b title="# Licenze locali / # Licenze Remote">@Licenze</b>
</div>
</div>
<div class="d-flex justify-content-between @expDateCss">
<div class="px-2">
<i class="far fa-calendar-check" aria-hidden="true"></i> Scadenza:
</div>
<div class="px-2">
<b>@($"{Scadenza:yyyy/MM/dd}")</b>
</div>
</div>
<div class="d-flex justify-content-between @licenseCss">
<div class="px-2">
<i class="fa fa-key" aria-hidden="true"></i> Key
</div>
<div class="px-2">
<span Font-Size="0.6em" class="small">@MastKey</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@code {
protected string Titolo = "";
protected string Messaggio = "";
protected override void OnInitialized()
{
Titolo = "MES | SCADA | IOT";
Messaggio = "Soluzione integrata per la gestione della produzione";
AppMService.ShowSearch = false;
AppMService.PageName = "About";
AppMService.PageIcon = "fas fa-info-circle pr-2";
}
}
+90
View File
@@ -0,0 +1,90 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Net.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.Web.Virtualization;
using Microsoft.JSInterop;
using MP.Land;
using MP.Land.Shared;
using MP.Land.Data;
using NLog;
namespace MP.Land.Pages
{
public partial class About
{
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private string Titolo = "";
private string Messaggio = "";
private string ServerStatus = "SrvState";
private string Installazione = "Inst";
private string Applicazione = "App";
private string Licenze = "#";
private DateTime Scadenza = DateTime.Today;
private string MastKey = "########################";
private string mainCss = "alert alert-info";
private string remSrvCss = "bg-warning text-secondary";
private string expDateCss = "bg-warning text-secondary";
private string licenseCss = "bg-warning text-secondary";
protected override async Task OnInitializedAsync()
{
updatePageHead();
await reloadLicenseData();
}
private async Task reloadLicenseData()
{
int cDelay = 5;
// recupero dati
await Task.Delay(cDelay);
try
{
LicServ.InitAkv();
// verifico stati
ServerStatus = await LicServ.checkLimanServer();
Installazione = LicServ.Installazione;
Applicazione = LicServ.Applicazione;
MastKey = LicServ.MasterKey;
await Task.Delay(cDelay);
var fatto = await LicServ.RefreshLicense();
await Task.Delay(cDelay);
Licenze = $"{LicServ.NumLicDb}/{LicServ.NumLicRemote}";
licenseCss = "";
}
catch(Exception exc)
{
licenseCss = "bg-dark text-warning";
Log.Error($"Eccezione in reloadLicenseData:{Environment.NewLine}{exc}");
}
bool okRemoteSrv = ServerStatus == "OK";
bool okScadenza = LicServ.checkLicenseActive(LicServ.MasterKey);
bool okNumLic = (LicServ.NumLicDb <= LicServ.NumLicRemote);
// aggiornamento css secondo status colore da check
mainCss = okNumLic ? "alert alert-success shadowBox" : "alert alert-warning shadowBox";
expDateCss = okScadenza ? "" : "bg-danger text-warning";
remSrvCss = okRemoteSrv ? "" : "bg-danger text-warning";
await Task.Delay(cDelay);
}
private void updatePageHead()
{
Titolo = "MES | SCADA | IOT";
Messaggio = "Soluzione integrata per la gestione della produzione";
AppMService.ShowSearch = false;
AppMService.PageName = "About";
AppMService.PageIcon = "fas fa-info-circle pr-2";
}
}
}
+1 -1
View File
@@ -121,7 +121,7 @@ namespace MP.Land.Pages
protected string localPath(string localRepo)
{
return @$"{Configuration["downloadPath"]}\{localRepo}\{Configuration["appVers"]}"; ;
return @$"{Configuration["ServerConf:downloadPath"]}\{localRepo}\{Configuration["appVers"]}"; ;
}
protected override void OnInitialized()
+2
View File
@@ -5,6 +5,7 @@
<div class="card">
<div class="card-body">
<CmpGroupFilt></CmpGroupFilt>
@if (ListRecords == null)
{
<LoadingData></LoadingData>
@@ -15,6 +16,7 @@
}
else
{
<div class="row">
@foreach (var item in ListRecords)
{
+102 -75
View File
@@ -11,12 +11,14 @@ namespace MP.Land.Pages
{
public partial class UserQr : IDisposable
{
#region Private Fields
#region Public Methods
private List<AnagraficaOperatori> ListRecords;
private List<AnagraficaOperatori> SearchRecords;
public void Dispose()
{
AppMService.EA_SearchUpdated -= OnSeachUpdated;
}
#endregion Private Fields
#endregion Public Methods
#region Protected Fields
@@ -25,6 +27,74 @@ namespace MP.Land.Pages
#endregion Protected Fields
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
protected string BaseUrlTab
{
get => $"{Configuration["ServerConf:BaseUrl"]}{Configuration["QrJumpPath"]}";
}
[Inject]
protected AppAuthService DataService { get; set; }
protected string Environment
{
get => Configuration["Environment"];
}
#endregion Protected Properties
#region Protected Methods
protected override async Task OnInitializedAsync()
{
AppMService.ShowSearch = true;
AppMService.PageName = "User Card";
AppMService.PageIcon = "fas fa-qrcode pr-2";
await ReloadData();
AppMService.EA_SearchUpdated += OnSeachUpdated;
AppMService.EA_FilterUpdated += OnFilterUpdated;
}
protected async Task PagerReloadNum(int newNum)
{
ListRecords = null;
numRecord = newNum;
await ReloadData();
isLoading = false;
}
protected async Task PagerReloadPage(int newNum)
{
ListRecords = null;
currPage = newNum;
await ReloadData();
isLoading = false;
}
protected MarkupString traduci(string lemma)
{
MarkupString answ;
//string rawHtml = "<li>primo</li><li>secondo</li>";
string rawHtml = DataService.Traduci(lemma, "IT");
answ = new MarkupString(rawHtml);
// cerco nella cache Redis
return answ;
}
#endregion Protected Methods
#region Private Fields
private List<AnagraficaOperatori> ListRecords;
private List<AnagraficaOperatori> SearchRecords;
#endregion Private Fields
#region Private Properties
[Inject]
@@ -42,6 +112,14 @@ namespace MP.Land.Pages
}
}
private string groupName
{
get
{
return AppMService.CodGruppo;
}
}
private bool isLoading { get; set; } = false;
private int numRecord
@@ -58,28 +136,16 @@ namespace MP.Land.Pages
#endregion Private Properties
#region Protected Properties
[Inject]
protected MessageService AppMService { get; set; }
protected string BaseUrlTab
{
get => $"{Configuration["BaseUrl"]}{Configuration["QrJumpPath"]}";
}
[Inject]
protected AppAuthService DataService { get; set; }
protected string Environment
{
get => Configuration["Environment"];
}
#endregion Protected Properties
#region Private Methods
private async void OnFilterUpdated()
{
ListRecords = null;
currPage = 1;
await Task.Delay(1);
await ReloadData();
}
private async void OnSeachUpdated()
{
ListRecords = null;
@@ -88,41 +154,21 @@ namespace MP.Land.Pages
await ReloadData();
}
#endregion Private Methods
#region Protected Methods
protected override async Task OnInitializedAsync()
{
AppMService.ShowSearch = true;
AppMService.PageName = "User Card";
AppMService.PageIcon = "fas fa-qrcode pr-2";
await ReloadData();
AppMService.EA_SearchUpdated += OnSeachUpdated;
}
protected async Task PagerReloadNum(int newNum)
{
ListRecords = null;
numRecord = newNum;
await ReloadData();
isLoading = false;
}
protected async Task PagerReloadPage(int newNum)
{
ListRecords = null;
currPage = newNum;
await ReloadData();
isLoading = false;
}
protected async Task ReloadData()
private async Task ReloadData()
{
isLoading = true;
// importante altrimenti NON mostra update UI
await Task.Delay(1);
SearchRecords = await DataService.AnagOperList(AppMService.SearchVal);
// se ho selezionato qualcosa cerco x gruppo
//if (groupName != "")
//{
SearchRecords = await DataService.AnagOperByGroupList(groupName, AppMService.SearchVal);
//}
//else
//{
// //altrimenti TUTTI
// SearchRecords = await DataService.AnagOperList(AppMService.SearchVal);
//}
ListRecords = SearchRecords.Skip((currPage - 1) * numRecord).Take(numRecord).ToList();
totalCount = SearchRecords.Count();
await Task.Delay(1);
@@ -130,25 +176,6 @@ namespace MP.Land.Pages
StateHasChanged();
}
protected MarkupString traduci(string lemma)
{
MarkupString answ;
//string rawHtml = "<li>primo</li><li>secondo</li>";
string rawHtml = DataService.Traduci(lemma, "IT");
answ = new MarkupString(rawHtml);
// cerco nella cache Redis
return answ;
}
#endregion Protected Methods
#region Public Methods
public void Dispose()
{
AppMService.EA_SearchUpdated -= OnSeachUpdated;
}
#endregion Public Methods
#endregion Private Methods
}
}
+25 -31
View File
@@ -36,11 +36,30 @@
<a class="dismiss">🗙</a>
</div>
@* Riconnessione server app: https://www.syncfusion.com/faq/how-do-i-reconnect-blazor-server-side-automatically *@
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
<script>
Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
document.location.reload();
}
//Blazor.start().then(() => {
// Blazor.defaultReconnectionHandler._reconnectionDisplay = {
// show: () => { },
// update: (d) => { },
// rejected: (d) => document.location.reload()
// };
//});
Blazor.start().then(() => {
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
get() {
return this.__reconnectionDisplay;
},
set(value) {
this.__reconnectionDisplay = {
show: () => value.show(),
update: (d) => value.update(d),
rejected: (d) => document.location.reload()
}
}
});
});
</script>
<!-- inside of body section and after the div/app tag -->
@@ -50,33 +69,8 @@
<script src="font-awesome/js/all.min.js"></script>
<script src="_framework/blazor.server.js"></script>
<script type="text/javascript" src="~/lib/qrcode.js"></script>
<script type="text/javascript">
function clearContent(elementID) {
console.log(elementID);
document.getElementById(elementID).innerHTML = "";
}
// gestione qrcode... da https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-enable-qrcodes?view=aspnetcore-5.0
//var qrcode = new QRCode("qrCodeImg");
function displayQr(elementName, rawData) {
console.log(elementName);
try {
if (elementName != "" && rawData != "") {
qrcode = new QRCode(document.getElementById(elementName),
{
text: rawData,
width: 200,
height: 200
});
//qrcode = new QRCode(document.getElementById(elementName));
//qrcode.clear();
//qrcode.makeCode(rawData);
}
}
catch
{ }
}
</script>
<script type="text/javascript" src="~/lib/qrHelper.js"></script>
</body>
</html>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo gestione Programmi MAPO</i>
<h4>Versione: 6.15.2204.1216</h4>
<h4>Versione: 6.16.2209.2118</h4>
<br />
Note di rilascio:
<ul>
+1 -1
View File
@@ -1 +1 @@
6.15.2204.1216
6.16.2209.2118
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.15.2204.1216</version>
<version>6.16.2209.2118</version>
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+20 -18
View File
@@ -1,21 +1,23 @@
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Environment": "Steam PROD",
"BaseUrl": "https://iis02.egalware.com/",
"AllowedHosts": "*",
"QrJumpPath": "MP/TAB/jumper?",
"downloadPath": "C:\\Steamware\\installers\\MP",
"appVers": "stable",
"ConnectionStrings": {
"DefaultConnection": "Server=SQL2016DEV;Database=MoonPro;Trusted_Connection=True;MultipleActiveResultSets=true",
"MP.Land": "Server=SQL2016DEV;Database=MoonPro;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=MP.Land;",
"Redis": "localhost:6379,defaultDatabase=1,keepAlive=180,asyncTimeout=5000"
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Environment": "Steam PROD",
"AllowedHosts": "*",
"QrJumpPath": "MP/TAB/jumper?",
"appVers": "stable",
"ConnectionStrings": {
"DefaultConnection": "Server=SQL2016DEV;Database=MoonPro;Trusted_Connection=True;MultipleActiveResultSets=true",
"MP.Land": "Server=SQL2016DEV;Database=MoonPro;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=MP.Land;",
"Redis": "localhost:6379,defaultDatabase=1,keepAlive=180,asyncTimeout=5000"
},
"ServerConf": {
"BaseUrl": "https://iis02.egalware.com/",
"downloadPath": "C:\\Steamware\\installers\\MP"
}
}
+4 -1
View File
@@ -8,5 +8,8 @@
}
},
"Environment": "Steam DEV",
"BaseUrl": "https://iis01.egalware.com/"
"ServerConf": {
"BaseUrl": "https://iis01.egalware.com/",
"downloadPath": "C:\\Steamware\\installers\\MP"
}
}
+6 -4
View File
@@ -7,19 +7,21 @@
}
},
"AllowedHosts": "*",
"BaseUrl": "https://localhost:44309/",
"QrJumpPath": "MP/TAB/jumper?",
"Environment": "Steam DEV",
"downloadPath": "C:\\Steamware\\installers\\MP",
"appVers": "stable",
"ConnectionStrings": {
"DefaultConnection": "Server=SQL2016DEV;Database=MoonPro;Trusted_Connection=True;MultipleActiveResultSets=true",
"MP.Land": "Server=SQL2016DEV;Database=MoonPro;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=MP.Land;",
"Redis": "localhost:6379,defaultDatabase=1,keepAlive=180,asyncTimeout=5000"
},
"ServerConf": {
"BaseUrl": "https://localhost:44309/",
"downloadPath": "C:\\Steamware\\installers\\MP"
}
//"ConnectionStrings": {
// "DefaultConnection": "Server=SQL2016PROD;Database=Valvital_MoonPro_Prod;Trusted_Connection=True;MultipleActiveResultSets=true",
// "MP.Land": "Server=SQL2016PROD;Database=Valvital_MoonPro_Prod;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=MP.Land;",
// "DefaultConnection": "Server=SQL2016PROD;Database=Jetco_MoonPro_Prod;Trusted_Connection=True;MultipleActiveResultSets=true",
// "MP.Land": "Server=SQL2016PROD;Database=Jetco_MoonPro_Prod;User ID=sa;Password=keyhammer16;integrated security=False;MultipleActiveResultSets=True;App=MP.Land;",
// "Redis": "localhost:6379,defaultDatabase=11,keepAlive=180,asyncTimeout=5000"
//}
}
+50 -4
View File
@@ -63,6 +63,52 @@ a,
.footer {
line-height: 1.8em;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.maxChar {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.max5Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 5rem;
}
.max10Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 10rem;
}
.max20Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 20rem;
}
.max30Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 30rem;
}
.max40Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 40rem;
}
.max50Char {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 50rem;
}
/*------------------------------------------------------------------
[ Shortcuts / .shortcuts ]
*/
@@ -76,7 +122,7 @@ a,
min-width: 9rem;
min-height: 5rem;
display: inline-block;
padding: 0.66666667rem 0;
padding: 2rem/3 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
@@ -89,13 +135,13 @@ a,
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 0.5rem;
border-radius: 1rem/2;
}
.shortcuts .shortcut-sm {
min-width: 4.5rem;
min-height: 3rem;
display: inline-block;
padding: 0.25rem 0;
padding: 1rem/4 0;
margin: 0 2px 1em;
vertical-align: top;
text-decoration: none;
@@ -108,7 +154,7 @@ a,
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffeeeeee', GradientType=0);
border: 1px solid #ddd;
box-sizing: border-box;
border-radius: 0.5rem;
border-radius: 1rem/2;
}
.shortcuts .shortcut .shortcut-icon {
width: 100%;
+44
View File
@@ -63,6 +63,50 @@ a, .btn-link {
line-height: 1.8em;
}
.textTrim {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.maxChar {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.max5Char {
.maxChar;
width: 5rem;
}
.max10Char {
.maxChar;
width: 10rem;
}
.max20Char {
.maxChar;
width: 20rem;
}
.max30Char {
.maxChar;
width: 30rem;
}
.max40Char {
.maxChar;
width: 40rem;
}
.max50Char {
.maxChar;
width: 50rem;
}
/*------------------------------------------------------------------
[ Shortcuts / .shortcuts ]
*/
+1 -1
View File
@@ -1 +1 @@
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');@import url('fonts.min.css');h1,h2,h3,h4,h5,h6,b,display-1,display-2,display-3,display-4{font-family:'Lato',sans-serif}html,body,.textCondensed{font-family:'Roboto Condensed',sans-serif}a,.btn-link{color:#0366d6}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac}.content{padding-top:1.1rem}.valid.modified:not([type=checkbox]){outline:1px solid #26b050}.invalid{outline:1px solid #f00}.validation-message{color:#f00}.textStriked{text-decoration:line-through}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem}.footer{line-height:1.8em}.shortcuts{text-align:center}.shortcuts .shortcut-icon{font-size:2rem}.shortcuts .shortcut{min-width:9rem;min-height:5rem;display:inline-block;padding:.66666667rem 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:.5rem}.shortcuts .shortcut-sm{min-width:4.5rem;min-height:3rem;display:inline-block;padding:.25rem 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:.5rem}.shortcuts .shortcut .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333}.shortcuts .shortcut-sm .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333}.shortcuts .shortcut:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0)}.shortcuts .shortcut-sm:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0)}.shortcuts .shortcut:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.shortcuts .shortcut-sm:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.shortcuts .shortcut:hover .shortcut-icon{color:#c93}.shortcuts .shortcut-sm:hover .shortcut-icon{color:#666}.shortcuts .shortcut-label{display:block;margin-top:.75em;font-weight:400;color:#666}@media(max-width:640px){.shortcuts .shortcut{min-width:8rem;min-height:4rem}body{font-size:.8em}}
@import url('open-iconic/font/css/open-iconic-bootstrap.min.css');@import url('fonts.min.css');h1,h2,h3,h4,h5,h6,b,display-1,display-2,display-3,display-4{font-family:'Lato',sans-serif}html,body,.textCondensed{font-family:'Roboto Condensed',sans-serif}a,.btn-link{color:#0366d6}.btn-primary{color:#fff;background-color:#1b6ec2;border-color:#1861ac}.content{padding-top:1.1rem}.valid.modified:not([type=checkbox]){outline:1px solid #26b050}.invalid{outline:1px solid #f00}.validation-message{color:#f00}.textStriked{text-decoration:line-through}#blazor-error-ui{background:#ffffe0;bottom:0;box-shadow:0 -1px 2px rgba(0,0,0,.2);display:none;left:0;padding:.6rem 1.25rem .7rem 1.25rem;position:fixed;width:100%;z-index:1000}#blazor-error-ui .dismiss{cursor:pointer;position:absolute;right:.75rem;top:.5rem}.footer{line-height:1.8em}.textTrim{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.maxChar{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.max5Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:5rem}.max10Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:10rem}.max20Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:20rem}.max30Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:30rem}.max40Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:40rem}.max50Char{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:50rem}.shortcuts{text-align:center}.shortcuts .shortcut-icon{font-size:2rem}.shortcuts .shortcut{min-width:9rem;min-height:5rem;display:inline-block;padding:2rem/3 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:1rem/2}.shortcuts .shortcut-sm{min-width:4.5rem;min-height:3rem;display:inline-block;padding:1rem/4 0;margin:0 2px 1em;vertical-align:top;text-decoration:none;background:#f3f3f3;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,0%,#eee,100%);background-image:-moz-linear-gradient(top,#fff 0%,#eee 100%);background-image:linear-gradient(to bottom,#fff 0%,#eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);border:1px solid #ddd;box-sizing:border-box;border-radius:1rem/2}.shortcuts .shortcut .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333}.shortcuts .shortcut-sm .shortcut-icon{width:100%;margin-top:0;margin-bottom:0;font-size:2rem;color:#333}.shortcuts .shortcut:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0)}.shortcuts .shortcut-sm:hover{background:#e8e8e8;background-image:-webkit-gradient(linear,left 0%,left 100%,from(#fafafa),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#fafafa,0%,#e1e1e1,100%);background-image:-moz-linear-gradient(top,#fafafa 0%,#e1e1e1 100%);background-image:linear-gradient(to bottom,#fafafa 0%,#e1e1e1 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffafafa',endColorstr='#ffe1e1e1',GradientType=0)}.shortcuts .shortcut:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.shortcuts .shortcut-sm:active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.shortcuts .shortcut:hover .shortcut-icon{color:#c93}.shortcuts .shortcut-sm:hover .shortcut-icon{color:#666}.shortcuts .shortcut-label{display:block;margin-top:.75em;font-weight:400;color:#666}@media(max-width:640px){.shortcuts .shortcut{min-width:8rem;min-height:4rem}body{font-size:.8em}}
+21
View File
@@ -0,0 +1,21 @@
function clearContent(elementID) {
//console.log("Remove " + elementID);
document.getElementById(elementID).innerHTML = "";
}
// gestione qrcode... da https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity-enable-qrcodes?view=aspnetcore-5.0
//var qrcode = new QRCode("qrCodeImg");
function displayQr(elementName, rawData) {
//console.log("Add " + elementName);
try {
if (elementName != "" && rawData != "") {
qrcode = new QRCode(document.getElementById(elementName),
{
text: rawData,
width: 200,
height: 200
});
}
}
catch
{ }
}
-38
View File
@@ -7,41 +7,3 @@
</div>
</div>
@code {
Version version = typeof(Program).Assembly.GetName().Version;
protected override async Task OnInitializedAsync()
{
StartTimer();
}
public void Dispose()
{
aTimer.Stop();
aTimer.Dispose();
}
private static System.Timers.Timer aTimer;
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
public void ElapsedTimer(Object source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
//await ReloadData();
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
}
}
+58
View File
@@ -0,0 +1,58 @@
using NLog;
namespace MP.Mon.Components
{
public partial class CmpFooter
{
#region Public Methods
public void Dispose()
{
//aTimer.Elapsed -= ElapsedTimer;
aTimer.Stop();
aTimer.Dispose();
}
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
await Task.Delay(1);
await InvokeAsync(() => StateHasChanged());
});
pUpd.Wait();
//Log.Trace($"Elapsed Timer Footer");
}
public void StartTimer()
{
int tOutPeriod = 5000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
#endregion Public Methods
#region Protected Methods
protected override void OnInitialized()
{
var currAssembly = typeof(Program).Assembly.GetName();
version = currAssembly.Version != null ? currAssembly.Version : new Version();
StartTimer();
}
#endregion Protected Methods
#region Private Fields
private static System.Timers.Timer aTimer = null!;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private Version version = null!;
#endregion Private Fields
}
}
+3 -3
View File
@@ -1,12 +1,12 @@
<div class="px-2">
<img class="logoImg img-fluid" src="images/LogoMapo.png" width="80" />
<span class="mainHead p-3"><b><span style="color: #DEDEDE;">MP MON</span>itor</b></span>
<img class="logoImg img-fluid" src="images/LogoMapo.png" height="24" />
<span class="mainHead p-3 align-middle"><b><span style="color: #DEDEDE;">MP MON</span>itor</b></span>
</div>
<div class="px-2">
<span id="text-white text-right">
@($"{DateTime.Now:dddd dd MMMM yyyy}")
</span>
<img class="logoImg img-fluid" src="images/logoCliente.png" width="32" />
<img class="logoImg img-fluid" src="images/logoCliente.png" height="24" />
EgalWare
</div>
+92 -29
View File
@@ -9,44 +9,107 @@
<div class="d-flex mb-1 ui-title justify-content-center align-items-center text-uppercase">
@CurrRecord.Nome
</div>
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
<div class="px-1 pe-0">Art</div>
<div class="px-1 ps-0 ui-art">
@if (showArt == "CodArticolo")
@if (hasRow(1))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(1))
{
<span>@CurrRecord.CodArticolo</span>
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
else
{
if (string.IsNullOrEmpty(CurrRecord.Disegno))
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
<div class="px-1 pe-0">Art</div>
<div class="px-1 ps-0 ui-art">
@if (showArt == "CodArticolo")
{
<span>[@CurrRecord.CodArticolo]</span>
<span>@CurrRecord.CodArticolo</span>
}
else
{
<span>@CurrRecord.Disegno</span>
if (string.IsNullOrEmpty(CurrRecord.Disegno))
{
<span>[@CurrRecord.CodArticolo]</span>
}
else
{
<span>@CurrRecord.Disegno</span>
}
}
</div>
</div>
}
@if (hasRow(2))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(2))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
</div>
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall">
<div class="px-1 text-uppercase"><b>@CurrRecord.DescrizioneStato</b></div>
<div class="px-1 ps-0">@getMinSec((decimal)CurrRecord.Durata)</div>
</div>
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
@*<div class="col-6 pe-0">OEE</div>
<div class="col-6 ps-0">xx%</div>*@
<div class="px-1 pe-0">TCiclo</div>
<div class="px-1 ps-0">std: @getMinSec(@CurrRecord.TCAssegnato)</div>
<div class="px-1 ps-0">act: @getMinSec(@CurrRecord.TCLavRT)</div>
</div>
<div class="d-flex justify-content-between pt-0 pb-0 px-1 fontSmall1 text-uppercase">
@*<div class="px-1 pe-0">Pezzi</div>
<div class="px-1 ps-0">prod: @CurrRecord.PezziProd</div>
<div class="px-1 ps-0">ord: @CurrRecord.NumPezzi</div>*@
<div class="px-1 pe-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="px-1 ps-0">@CurrRecord.PezziProd / @CurrRecord.NumPezzi</div>
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall">
<div class="px-1 text-uppercase"><b>@CurrRecord.DescrizioneStato</b></div>
<div class="px-1 ps-0">@getMinSec(getDecimal(@CurrRecord.Durata))</div>
</div>
}
@if (hasRow(3))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(3))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall text-uppercase">
@*<div class="col-6 pe-0">OEE</div>
<div class="col-6 ps-0">xx%</div>*@
<div class="px-1 pe-0">TCiclo</div>
<div class="px-1 ps-0">std: @getMinSec(@CurrRecord.TCAssegnato)</div>
<div class="px-1 ps-0">act: @getMinSec(@CurrRecord.TCLavRT)</div>
</div>
}
@if (hasRow(4))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(4))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
else
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1 fontSmall1 text-uppercase">
<div class="px-1 pe-0">Pezzi<sub>(prod/ord)</sub></div>
<div class="px-1 ps-0">@CurrRecord.PezziProd / @CurrRecord.NumPezzi</div>
</div>
}
@if (hasRow(5))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(5))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
@if (hasRow(6))
{
<div class="d-flex justify-content-between pt-0 pb-0 px-1">
@foreach (var item in rowValues(6))
{
<div class="px-1 @item.TagCss">@item.TagName: <b>@currVal(item.TagLocation)</b></div>
}
</div>
}
</div>
<div class="@cssComStatus(CurrRecord.Semaforo, CurrRecord.LastUpdate) p-1">
<div class="row fontSmaller mt-1">
+232 -77
View File
@@ -1,59 +1,208 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Net.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.Web.Virtualization;
using Microsoft.JSInterop;
using MP.Mon;
using MP.Mon.Shared;
using MP.Mon.Components;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
using NLog;
namespace MP.Mon.Components
{
public partial class DetailMSE
{
#region Public Properties
protected string baseCss = "sem";
protected bool dataLoaded { get; set; } = false;
protected int kaFactor = 60 / 2;
[Parameter]
public MappaStatoExpl? CurrRecord { get; set; } = null;
[Parameter]
public List<TagData>? currTagConf { get; set; } = null;
[Parameter]
public Dictionary<string, string> currTagVal { get; set; } = new Dictionary<string, string>();
[Parameter]
public bool doAnimate { get; set; } = true;
[Parameter]
public string showArt { get; set; } = "";
public bool doBlink { get; set; } = false;
[Parameter]
public int keepAliveMin { get; set; } = 5;
[Parameter]
public MappaStatoExpl? CurrRecord { get; set; } = null;
private string cssStatus(string codSemaforo)
[Parameter]
public string showArt { get; set; } = "";
#endregion Public Properties
#region Public Methods
public void Dispose()
{
string codColore = codSemaforo.Substring(1, 2);
string answ = $"{baseCss}{codColore}";
if (doAnimate && codColore != "Ve")
aTimer.Elapsed -= ElapsedTimer;
aTimer.Stop();
aTimer.Dispose();
}
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
await Task.Delay(1);
// verifica variazione x blink...
bool needUpdate = false;
if (CurrRecord == null)
{
answ += "_b";
needUpdate = true;
}
else
{
if (OldRecord == null)
{
needUpdate = true;
}
else
{
if (!CurrRecord.Semaforo.Equals(OldRecord.Semaforo) || CurrRecord.Semaforo != "sVe")
{
needUpdate = true;
}
}
}
if (needUpdate)
{
await InvokeAsync(() => StateHasChanged());
}
OldRecord = CurrRecord;
});
pUpd.Wait();
}
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
#endregion Public Methods
#region Protected Fields
protected string baseCss = "sem";
protected int kaFactor = 60 / 2;
#endregion Protected Fields
#region Protected Properties
protected string codIOB
{
get
{
string answ = "";
if (CurrRecord != null)
{
answ = CurrRecord.IdxMacchina;
}
return answ;
}
}
protected bool dataLoaded { get; set; } = false;
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// restituisce il valore data la tagLocation
/// </summary>
/// <param name="tagLocation"></param>
/// <returns></returns>
protected string currVal(string tagLocation)
{
string answ = "";
if (currTagVal.ContainsKey(tagLocation))
{
answ = currTagVal[tagLocation];
}
return answ;
}
/// <summary>
/// Verifica se ci sia un override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected bool hasRow(int numRow)
{
bool answ = false;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
var currVals = rowValues(numRow);
answ = currVals.Count > 0;
}
}
return answ;
}
protected override async Task OnInitializedAsync()
{
//StartTimer();
Random rnd = new Random();
await Task.Delay(rnd.Next(5));
setupConf();
dataLoaded = true;
}
/// <summary>
/// Restituisce (se presenti) valori di override per la riga indicata
/// </summary>
/// <param name="numRow"></param>
/// <returns></returns>
protected List<TagData> rowValues(int numRow)
{
List<TagData>? rowVals = null;
if (currTagConf != null)
{
if (currTagConf.Count > 0)
{
//cerco solo la riga corrente...
rowVals = currTagConf.Where(x => x.RowNum == numRow).ToList();
}
}
if (rowVals == null)
{
rowVals = new List<TagData>();
}
return rowVals;
}
#endregion Protected Methods
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Private Properties
private static System.Timers.Timer aTimer { get; set; } = null!;
/// <summary>
/// Valore precedente x calcolo variazione
/// </summary>
private MappaStatoExpl? OldRecord { get; set; } = null;
#endregion Private Properties
#region Private Methods
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
@@ -72,18 +221,63 @@ namespace MP.Mon.Components
}
return answ;
}
protected override async Task OnInitializedAsync()
private string cssStatus(string codSemaforo)
{
StartTimer();
Random rnd = new Random();
//await Task.Delay(rnd.Next(500));
dataLoaded = true;
setupConf();
// se vuoto --> mostra nero!
if (string.IsNullOrEmpty(codSemaforo))
{
codSemaforo = "sNe";
}
string codColore = codSemaforo.Substring(1, 2);
string answ = $"{baseCss}{codColore}";
if (doAnimate && codColore != "Ve")
{
if (doBlink)
{
answ += "_b";
}
}
return answ;
}
private decimal getDecimal(object? rawData)
{
decimal answ = 0;
if (rawData != null)
{
decimal.TryParse($"{rawData}", out answ);
}
return answ;
}
private string getMinSec(decimal? currTimeMin)
{
string answ = "nd";
TimeSpan tSpan = new TimeSpan(0);
try
{
double cTimeMin = currTimeMin != null ? (double)currTimeMin : 0;
tSpan = TimeSpan.FromMinutes(cTimeMin);
if (tSpan.TotalHours < 1)
{
answ = $"{tSpan:mm}:{tSpan:ss}";
}
else
{
answ = $"{tSpan.TotalHours:N0}h {tSpan:mm}:{tSpan:ss}";
}
}
catch
{ }
return answ;
}
private void setupConf()
{
//baseCss = doAnimate ? "semBlink" : "sem";
}
private bool showComErr(DateTime? lastUpdateN)
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
@@ -95,45 +289,6 @@ namespace MP.Mon.Components
return answ;
}
private string getMinSec(decimal? currTimeMin)
{
string answ = "nd";
TimeSpan tSpan = new TimeSpan(0);
try
{
tSpan = TimeSpan.FromMinutes((double)currTimeMin);
answ = $"{tSpan:mm}:{tSpan:ss}";
}
catch
{ }
return answ;
}
public void Dispose()
{
aTimer.Stop();
aTimer.Dispose();
}
private static System.Timers.Timer aTimer = new System.Timers.Timer(60 * 1000);
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
public void ElapsedTimer(Object source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
}
#endregion Private Methods
}
}
+7 -3
View File
@@ -1,6 +1,10 @@
<div class="row p-5 m-5 bg-light">
<div class="col-12 text-center mt-5 py-5 alert alert-primary">
<div class="row p-5 m-5 alert alert-primary">
<div class="col-6 text-center mt-4 py-3 bg-light">
<h1>MAPO MON</h1>
EgalWare MES suite <img class="logoImg img-fluid" src="images/logoCliente.png" />
</div>
<div class="col-6 text-center mt-4 py-3 bg-light">
<h3>loading data</h3>
<i class="fas fa-spinner fa-spin fa-5x"></i>
<i class="fas fa-spinner fa-spin fa-4x"></i>
</div>
</div>
+5
View File
@@ -0,0 +1,5 @@
{
"IobSetup": {
"***": []
}
}
+90
View File
@@ -0,0 +1,90 @@
{
"IobSetup": {
"***": [
{
"ColNum": 1,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Feed Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:FEED_OVER"
},
{
"ColNum": 2,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Rapid Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:RAPID_OVER"
}
],
"SIMUL_01": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_01:POWER_01"
}
],
"SIMUL_02": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_02:POWER_01"
}
],
"GIACO_ICOEL_001": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
],
"GIACO_ICOEL_002": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
]
}
}
+256 -22
View File
@@ -1,29 +1,30 @@
using MP.Data.DatabaseModels;
using MP.Data;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
using Newtonsoft.Json;
using NLog;
using StackExchange.Redis;
using System.Diagnostics;
using System.Text;
namespace MP.Mon.Data
{
public class MpDataService : IDisposable
{
#region Private Fields
private static IConfiguration _configuration;
private static ILogger<MpDataService> _logger;
#endregion Private Fields
#region Public Fields
public static MP.Data.Controllers.MpMonController dbController;
#endregion Public Fields
#region Public Constructors
public MpDataService(IConfiguration configuration, ILogger<MpDataService> logger)
{
_logger = logger;
_configuration = configuration;
// setup compoenti REDIS
redisConn = ConnectionMultiplexer.Connect(_configuration.GetConnectionString("Redis"));
redisDb = redisConn.GetDatabase();
// setup canali pub/sub
dataPipe = new MessagePipe(redisConn, Constants.ACT_MSE_DATA_KEY);
blinkPipe = new MessagePipe(redisConn, Constants.ACT_BLINK_KEY);
// conf DB
string connStr = _configuration.GetConnectionString("Mp.Mon");
if (string.IsNullOrEmpty(connStr))
@@ -35,13 +36,33 @@ namespace MP.Mon.Data
dbController = new MP.Data.Controllers.MpMonController(configuration);
StringBuilder sb = new StringBuilder();
sb.AppendLine($"DbController OK");
//sb.AppendLine($"CST: {dbController.CustomersCount()} | CNT: {dbController.CountersCount()} | BSK: {dbController.BasketsCount()} | NGT: {dbController.NegotiationsCount()} | DOC: {dbController.DocsCount()} | ITM: {dbController.ItemsCount()} | RES: {dbController.ResourcesCount()}");
_logger.LogInformation(sb.ToString());
}
// setup conf IOB da dizionario
tryLoadIobTags();
// avvio timers...
startTimers();
}
#endregion Public Constructors
#region Public Properties
public static MP.Data.Controllers.MpMonController dbController { get; set; } = null!;
public MessagePipe blinkPipe { get; set; } = null!;
/// <summary>
/// Dizionario dei tag configurati per IOB
/// </summary>
public Dictionary<string, List<TagData>> currTagConf { get; set; } = new Dictionary<string, List<TagData>>();
public MessagePipe dataPipe { get; set; } = null!;
#endregion Public Properties
#region Public Methods
public Task<List<ConfigModel>> ConfigGetAll()
@@ -55,21 +76,234 @@ namespace MP.Mon.Data
dbController.Dispose();
}
public Task<List<Macchine>> MacchineGetAll()
/// <summary>
/// Richiesta attivazione --&gt; sposto avanti 1 minuto il periodo limite x fast running
/// </summary>
public void doActivate()
{
return Task.FromResult(dbController.MacchineGetAll().ToList());
fastLimit = DateTime.Now.AddMinutes(1);
}
public Task<List<MappaStatoExpl>> MseGetAll()
/// <summary>
/// Elenco setup dei tag conf correnti
/// </summary>
/// <returns></returns>
public Task<Dictionary<string, List<TagData>>> getAllTags()
{
var dbResult = dbController.MseGetAll();
if (dbResult == null)
return Task.FromResult(currTagConf);
}
/// <summary>
/// restituisce il valore da REDIS associato al tag richeisto
/// </summary>
/// <param name="redKey">Chiave in cui cercare il valore</param>
/// <returns></returns>
public string getTagConf(string redKey)
{
string outVal = "";
// cerco in REDIS la conf x l'IOB
var rawData = redisDb.StringGet(redKey);
if (!string.IsNullOrEmpty(rawData))
{
dbResult = new List<MappaStatoExpl>();
outVal = $"{rawData}";
}
return Task.FromResult(dbResult);
return outVal;
}
public Task<List<Macchine>> MacchineGetAll()
{
return Task.FromResult(dbController.MacchineGetAll());
}
public async Task<List<MappaStatoExpl>> MseGetAll()
{
int maxAge = 2000;
int.TryParse(_configuration.GetValue<string>("ServerConf:maxAge"), out maxAge);
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
List<MappaStatoExpl>? result = new List<MappaStatoExpl>();
// cerco in redis...
RedisValue rawData = await redisDb.StringGetAsync(redisMseKey);
if (!string.IsNullOrEmpty($"{rawData}"))
{
result = JsonConvert.DeserializeObject<List<MappaStatoExpl>>($"{rawData}");
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Debug($"Read from REDIS: {ts.TotalMilliseconds}ms");
}
else
{
result = await Task.FromResult(dbController.MseGetAll(maxAge));
// serializzp e salvo...
rawData = JsonConvert.SerializeObject(result);
await redisDb.StringSetAsync(redisMseKey, rawData, TimeSpan.FromMilliseconds(maxAge));
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Debug($"Read from DB: {ts.TotalMilliseconds}ms");
}
if (result == null)
{
result = new List<MappaStatoExpl>();
}
return result;
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration = null!;
private static ILogger<MpDataService> _logger = null!;
private static System.Timers.Timer fastTimer = new System.Timers.Timer(4000);
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
/// <summary>
/// Limite in formato data-ora per inviare dati rapidamente (incrementato come now + 1 min
/// ad ogni chiamata client)
/// </summary>
private DateTime fastLimit = DateTime.Now;
private int fastRefreshMs = 1000;
/// <summary>
/// Oggetto per connessione a REDIS
/// </summary>
private ConnectionMultiplexer redisConn = null!;
//ISubscriber sub = redis.GetSubscriber();
/// <summary>
/// Oggetto DB redis da impiegare x chiamate R/W
/// </summary>
private IDatabase redisDb = null!;
private string redisMseKey = "MP:MON:Cache:MSE";
#endregion Private Fields
#region Private Methods
private void ElapsedFastTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
// secondi pari --> blink, secondi dispari --> ricarica
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
{
// invio in channel blink il segnale
blinkPipe.sendMessage("true");
Log.Debug("Elapsed Fast Timer Blink");
}
else
{
// invio in channel blink segnale false
blinkPipe.sendMessage("false");
// rileggo dati...
var newData = await MseGetAll();
// invio tramite la pipe...
dataPipe.sendMessage(JsonConvert.SerializeObject(newData));
Log.Debug("Elapsed Fast Timer reload");
}
});
pUpd.Wait();
}
private void startTimers()
{
fastTimer = new System.Timers.Timer(fastRefreshMs);
fastTimer.Elapsed += ElapsedFastTimer;
fastTimer.Enabled = true;
fastTimer.Start();
}
/// <summary>
/// Prova a caricare da file la conf degli IOB se presente
/// </summary>
private void tryLoadIobTags()
{
Dictionary<string, List<TagData>> currConf = new Dictionary<string, List<TagData>>();
string strExeFilePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
if (!string.IsNullOrEmpty(strExeFilePath))
{
string? strWorkPath = Path.GetDirectoryName(strExeFilePath);
if (!string.IsNullOrEmpty(strWorkPath))
{
string filePath = $"{strWorkPath}/Conf/iobTagsConf.json";
if (File.Exists(filePath))
{
string rawData = File.ReadAllText(filePath);
if (!string.IsNullOrEmpty(rawData))
{
var fileConfData = JsonConvert.DeserializeObject<IobTags>(rawData);
if (fileConfData != null)
{
// effettuo esplosione conf SE contenesse il valore "***" = tutti
// gli IOB
if (fileConfData.IobSetup.ContainsKey("***"))
{
// recupero elenco macchine...
var elencoMacc = dbController.MacchineGetAll();
// x ogni macchina creo le righe standard da conf...
var baseConf = fileConfData.IobSetup.Where(x => x.Key == "***").FirstOrDefault();
foreach (var item in elencoMacc)
{
if (!string.IsNullOrEmpty(item.IdxMacchina))
{
// converto i valori x la macchina corrente... clono in
// nuovo oggetto
var specVal = baseConf.Value.Select(i => i.Clone()).ToList();
// sostituisco segnaposto
foreach (var singleVal in specVal)
{
singleVal.TagLocation = singleVal.TagLocation.Replace("***", item.IdxMacchina);
}
// ora aggiungo eventuali valori in override...
if (fileConfData.IobSetup.ContainsKey(item.IdxMacchina))
{
var otConf = fileConfData.IobSetup.Where(x => x.Key == item.IdxMacchina).FirstOrDefault();
//verifico x ogni valore other...
foreach (var otTag in otConf.Value)
{
var ovrTag = specVal.Where(x => x.ColNum == otTag.ColNum && x.RowNum == otTag.RowNum).FirstOrDefault();
// se contiene --> sovrascrivo
if (ovrTag != null)
{
//ovrTag = otTag.Clone();
specVal.Remove(ovrTag);
specVal.Add(otTag.Clone());
}
// se non contiene --> aggiungo
else
{
specVal.Add(otTag);
}
}
}
currConf.Add(item.IdxMacchina, specVal);
}
}
}
// altrimenti copio ed ho finito
else
{
currConf = fileConfData.IobSetup;
}
}
}
}
if (currConf != null)
{
currTagConf = currConf;
}
}
}
}
#endregion Private Methods
}
}
+15 -3
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>6.15.2204.1416</Version>
<Version>6.16.2209.2118</Version>
</PropertyGroup>
<ItemGroup>
@@ -30,13 +30,25 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.15" />
<PackageReference Include="StackExchange.Redis" Version="2.5.61" />
<PackageReference Include="NLog" Version="5.0.4" />
<PackageReference Include="StackExchange.Redis" Version="2.6.66" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MP.Data\MP.Data.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="Conf\iobTagsConf.office.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="logs\.placeholder">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="powershell.exe -ExecutionPolicy Unrestricted -NoProfile -NonInteractive -File $(ProjectDir)\post-build.ps1 -ProjectDir $(ProjectDir) -ProjectPath $(ProjectPath)" />
</Target>
+2 -2
View File
@@ -29,7 +29,7 @@
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target xsi:type="File" name="fileTarget" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=false} | ${message}" />
<target xsi:type="ColoredConsole" name="consoleTarget" layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=true}| ${message}" />
<target xsi:type="ColoredConsole" name="consoleTarget" layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=true} | ${message}" />
</targets>
<rules>
@@ -39,7 +39,7 @@
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Trace" writeTo="consoleTarget" />
<logger name="*" minlevel="Debug" writeTo="consoleTarget" />
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
<logger name="*" minlevel="Info" writeTo="fileTarget" />
</rules>
+7 -11
View File
@@ -2,18 +2,16 @@
<PageTitle>Index</PageTitle>
<PageTitle>MP MON</PageTitle>
<div class="row statusMap mx-1 my-1">
@if (ListMSE == null)
@if (listMSE == null)
{
<div class="col-12">
<LoadingData></LoadingData>
</div>
}
else if (ListMSE.Count == 0)
else if (listMSE.Count == 0)
{
<div class="col-12">
<div class="alert alert-warning">
@@ -24,23 +22,21 @@
else
{
int currIdx = 0;
foreach (var macchina in ListMSE)
foreach (var recordIob in listMSE)
{
<DetailMSE CurrRecord="@macchina" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt"></DetailMSE>
<DetailMSE CurrRecord="@recordIob" currTagConf="@getIobTag(recordIob.IdxMacchina)" currTagVal="@getTagVal(recordIob.IdxMacchina)" doAnimate="@doAnimate" keepAliveMin="@keepAliveMin" showArt="@showArt" doBlink="@doBlink"></DetailMSE>
currIdx++;
if (currIdx >= maxCol)
{
currIdx = 0;
@((MarkupString)"</div><div class=\"row statusMap mx-1 my-1\">")
;
@((MarkupString)"</div><div class=\"row statusMap mx-1 my-1\">");
}
}
// controllo se devo "chiudere riga...
int currNum = (currIdx % maxCol);
while (currNum < (maxCol))
{
@((MarkupString)"<div class=\"col machBlock\">&nbsp;</div>")
;
@((MarkupString)"<div class=\"col machBlock\">&nbsp;</div>");
currNum++;
}
+201 -98
View File
@@ -1,62 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using System.Net.Http;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Components.Authorization;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Routing;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.Web.Virtualization;
using Microsoft.JSInterop;
using MP.Mon;
using MP.Mon.Shared;
using MP.Mon.Components;
using MP.Data;
using MP.Data.Conf;
using MP.Data.DatabaseModels;
using MP.Mon.Components;
using MP.Mon.Data;
using Newtonsoft.Json;
using NLog;
namespace MP.Mon.Pages
{
public partial class Index : IDisposable
{
protected List<MappaStatoExpl>? ListMSE = null;
List<ConfigModel>? CurrConfig = null;
#region Public Methods
public void Dispose()
{
disposeTimers();
}
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
public async void ElapsedSlowTimer(object? source, System.Timers.ElapsedEventArgs e)
{
listMSE = null;
await Task.Delay(10);
Log.Info("Elapsed Slow Timer --> full page reload");
// dispongo i vari timers...
disposeTimers();
await Task.Delay(10);
// reload pagina
NavManager.NavigateTo(NavManager.Uri);
}
protected int keepAliveMin = 1;
public void StartTimer()
{
// timer lento
slowTimer = new System.Timers.Timer(slowRefreshMs);
slowTimer.Elapsed += ElapsedSlowTimer;
slowTimer.Enabled = true;
slowTimer.Start();
}
protected int maxCol = 4;
#endregion Public Methods
#region Protected Fields
protected bool doAnimate = true;
protected int fastRefreshMs = 1000;
protected int keepAliveMin = 1;
protected int maxCol = 6;
protected string showArt = "";
protected int slowRefreshSec = 300;
protected int fastRefreshSec = 10;
#endregion Protected Fields
protected int slowRefreshMs
{
get => 1000 * slowRefreshSec;
}
protected int fastRefreshMs
{
get => 1000 * fastRefreshSec;
}
protected override async Task OnInitializedAsync()
{
await setupConf();
await ReloadData();
StartTimer();
}
#region Protected Properties
[Inject]
protected MpDataService MMDataService { get; set; } = null!;
@@ -64,24 +59,40 @@ namespace MP.Mon.Pages
[Inject]
protected NavigationManager NavManager { get; set; } = null!;
private async Task setupConf()
protected int slowRefreshMs
{
CurrConfig = await MMDataService.ConfigGetAll();
get
{
// tempo variabile tra +/- 10% del target
int answ = rnd.Next(900, 1100) * slowRefreshSec;
return answ;
}
}
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Recupera il valore e se trovato aggiorna
/// </summary>
/// <param name="chiave">Valore da cercare</param>
/// <param name="varObj">String in cui salvare il valore se trovato</param>
/// <returns></returns>
protected bool getConfVal(string chiave, ref string varObj)
{
bool answ = false;
if (CurrConfig != null && CurrConfig.Count > 0)
{
// sistemo i parametri opzionali...
getConfValInt("keepAliveMin", ref keepAliveMin);
getConfValInt("MON_maxCol", ref maxCol);
int intDoAnim = 0;
getConfValInt("doAnimate", ref intDoAnim);
doAnimate = intDoAnim == 1;
getConfValInt("pageRefreshSec", ref slowRefreshSec);
getConfValInt("MSE_cacheDuration", ref fastRefreshSec);
getConfVal("sART", ref showArt);
Log.Info($"Effettuato setup parametri | keepAlive: {keepAliveMin} | MaxCol: {maxCol} | doAnimate: {doAnimate} | slowRefreshSec: {slowRefreshSec} | fastRefreshSec: {fastRefreshSec}");
ConfigModel? risultato = CurrConfig.FirstOrDefault(x => x.Chiave == chiave);
if (risultato != null)
{
varObj = risultato.Valore;
answ = !string.IsNullOrEmpty(risultato.Valore);
}
}
return answ;
}
/// <summary>
@@ -106,72 +117,164 @@ namespace MP.Mon.Pages
}
/// <summary>
/// Recupera il valore e se trovato aggiorna
/// Recupera da conf eventuale setup tag dell'IOB indicato
/// </summary>
/// <param name="chiave">Valore da cercare</param>
/// <param name="varObj">String in cui salvare il valore se trovato</param>
/// <param name="codIob"></param>
/// <returns></returns>
protected bool getConfVal(string chiave, ref string varObj)
protected List<TagData>? getIobTag(string codIob)
{
bool answ = false;
if (CurrConfig != null && CurrConfig.Count > 0)
List<TagData>? answ = null;
if (MMDataService.currTagConf != null)
{
// sistemo i parametri opzionali...
ConfigModel? risultato = CurrConfig.FirstOrDefault(x => x.Chiave == chiave);
if (risultato != null)
// cerco x chiave IOB...
if (MMDataService.currTagConf.ContainsKey(codIob))
{
varObj = risultato.Valore;
answ = !string.IsNullOrEmpty(risultato.Valore);
answ = MMDataService.currTagConf[codIob];
}
}
return answ;
}
private async Task ReloadData()
/// <summary>
/// Recupera da redis (in una chiamata soltanto) tutti i valori richiesti e compone un
/// dizionario x ottimizzare visualizzazione
/// </summary>
/// <param name="codIob"></param>
/// <returns></returns>
protected Dictionary<string, string> getTagVal(string codIob)
{
ListMSE = await MMDataService.MseGetAll();
Dictionary<string, string> answ = new Dictionary<string, string>();
// recupero conf tags...
var currTags = getIobTag(codIob);
if (currTags != null && currTags.Count > 0)
{
// FIXME TODO !!!! FARE !!!! - da verificare
answ = currTags.ToDictionary(x => x.TagLocation, x => MMDataService.getTagConf(x.TagLocation));
}
return answ;
}
public void Dispose()
protected override async Task OnInitializedAsync()
{
fastTimer.Stop();
fastTimer.Dispose();
await setupConf();
MMDataService.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage;
MMDataService.blinkPipe.EA_NewMessage += BlinkPipe_EA_NewMessage;
Random rnd = new Random();
await Task.Delay(rnd.Next(1000, 1200));
StartTimer();
}
#endregion Protected Methods
#region Private Fields
//private static System.Timers.Timer fastTimer = new System.Timers.Timer(4000);
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private static System.Timers.Timer slowTimer = new System.Timers.Timer(300000);
private List<ConfigModel>? CurrConfig = null;
private bool doBlink = false;
private List<MappaStatoExpl>? listMSE = null;
private Random rnd = new Random();
#endregion Private Fields
#region Private Methods
private void BlinkPipe_EA_NewMessage(object? sender, EventArgs e)
{
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly List<string> --> allarmi
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
try
{
var dataRaw = JsonConvert.DeserializeObject<string>(currArgs.newMessage);
if (dataRaw != null)
{
bool.TryParse($"{dataRaw}", out doBlink);
}
}
catch
{ }
InvokeAsync(() =>
{
StateHasChanged();
});
}
}
/// <summary>
/// Ricevuto nuovi dati da mostrare!
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void DataPipe_EA_NewMessage(object? sender, EventArgs e)
{
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly List<string> --> allarmi
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
try
{
var dataList = JsonConvert.DeserializeObject<List<MappaStatoExpl>>(currArgs.newMessage);
if (dataList != null)
{
#if DEBUG
// hack: legge 4 volte i dati x stressare sistema
var singleData = dataList;
listMSE = new List<MappaStatoExpl>();
for (int i = 0; i < 4; i++)
{
listMSE.AddRange(singleData);
}
#else
listMSE = dataList;
#endif
}
}
catch
{ }
}
InvokeAsync(() =>
{
#if false
// attesa random 0-50ms...
Random rnd = new Random();
Task.Delay(rnd.Next(5, 50));
#endif
StateHasChanged();
});
}
private void disposeTimers()
{
slowTimer.Elapsed -= ElapsedSlowTimer;
slowTimer.Stop();
slowTimer.Dispose();
}
private static System.Timers.Timer fastTimer = new System.Timers.Timer(4000);
private static System.Timers.Timer slowTimer = new System.Timers.Timer(300000);
public void StartTimer()
private async Task setupConf()
{
// timer veloce
fastTimer = new System.Timers.Timer(fastRefreshMs);
fastTimer.Elapsed += ElapsedFastTimer;
fastTimer.Enabled = true;
fastTimer.Start();
// timer lento
slowTimer = new System.Timers.Timer(slowRefreshMs);
slowTimer.Elapsed += ElapsedSlowTimer;
slowTimer.Enabled = true;
slowTimer.Start();
}
public void ElapsedFastTimer(Object source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
CurrConfig = await MMDataService.ConfigGetAll();
if (CurrConfig != null && CurrConfig.Count > 0)
{
await ReloadData();
//await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
// sistemo i parametri opzionali...
getConfValInt("keepAliveMin", ref keepAliveMin);
getConfValInt("MON_maxCol", ref maxCol);
int intDoAnim = 0;
getConfValInt("doAnimate", ref intDoAnim);
doAnimate = intDoAnim == 1;
getConfValInt("pageRefreshSec", ref slowRefreshSec);
getConfVal("sART", ref showArt);
Log.Info($"setupConf | Effettuato setup parametri | keepAlive: {keepAliveMin} | MaxCol: {maxCol} | doAnimate: {doAnimate} | slowRefreshSec: {slowRefreshSec} | fastRefreshMs: {fastRefreshMs}");
}
}
public async void ElapsedSlowTimer(Object source, System.Timers.ElapsedEventArgs e)
{
ListMSE = null;
NavManager.NavigateTo(NavManager.Uri);
}
#endregion Private Methods
}
}
+1 -1
View File
@@ -5,4 +5,4 @@
Layout = "_Layout";
}
<component type="typeof(App)" render-mode="ServerPrerendered" />
<component type="typeof(App)" render-mode="Server" />
+22 -10
View File
@@ -7,6 +7,7 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="google" content="notranslate">
<base href="~/" />
<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.min.css" />
<link rel="stylesheet" href="css/site.css" />
@@ -28,17 +29,28 @@
<a class="dismiss">🗙</a>
</div>
@* Riconnessione server app: https://www.syncfusion.com/faq/how-do-i-reconnect-blazor-server-side-automatically *@
<script src="_framework/blazor.server.js" autostart="false"></script>
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
<script>
Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
document.location.reload();
}
Blazor.start({
reconnectionOptions: {
maxRetries: 300,
retryIntervalMilliseconds: 2000
}
}).then(() => {
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
get() {
return this.__reconnectionDisplay;
},
set(value) {
this.__reconnectionDisplay = {
show: () => value.show(),
update: (d) => value.update(d),
rejected: (d) => document.location.reload()
}
}
});
});
</script>
<script src="_framework/blazor.server.js"></script>
<script src="lib/Chart.js/chart.js"></script>
<script src="lib/luxon/luxon.js"></script>
<script src="lib/chartjs-adapter-luxon/chartjs-adapter-luxon.js"></script>
<script src="lib/chartBoot.js"></script>
</body>
</html>
-1
View File
@@ -21,7 +21,6 @@ string redisSrvAddr = connStringRedis.Substring(0, connStringRedis.IndexOf(":"))
// avvio oggetto shared x redis...
var redisMultiplexer = ConnectionMultiplexer.Connect(connStringRedis);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
@@ -7,6 +7,6 @@ by editing this MSBuild file. In order to learn more about this please visit htt
<PropertyGroup>
<TimeStampOfAssociatedLegacyPublishXmlFile />
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA+11nhJeDSkeTlSej+COD3AAAAAACAAAAAAADZgAAwAAAABAAAACFCXZ0UR7Czo59aaRCHU5QAAAAAASAAACgAAAAEAAAACYlKt9E6s77uEikpKwyhdQYAAAAUwae989LovFbsfjRp69HCVpyUQZbqLyYFAAAAMW8mLSAxWmKaOvB4nkDgUpS27/b</EncryptedPassword>
<History>True|2022-04-14T07:37:09.1341280Z;True|2022-02-26T18:24:32.0833123+01:00;False|2022-02-26T18:24:15.3994092+01:00;False|2022-02-26T18:23:44.8358586+01:00;True|2021-05-26T19:49:30.0427896+02:00;False|2021-05-26T19:49:14.9065510+02:00;True|2021-05-25T17:48:33.3901785+02:00;True|2021-05-25T17:46:09.2063020+02:00;True|2021-05-25T17:42:47.8167539+02:00;True|2021-05-25T17:22:03.1877438+02:00;True|2021-05-25T17:21:05.1565775+02:00;True|2021-05-25T16:26:34.1426996+02:00;True|2021-05-25T16:14:28.2842402+02:00;True|2021-05-25T15:02:11.7131495+02:00;</History>
<History>True|2022-07-12T14:34:20.2940329Z;True|2022-04-14T09:37:09.1341280+02:00;True|2022-02-26T18:24:32.0833123+01:00;False|2022-02-26T18:24:15.3994092+01:00;False|2022-02-26T18:23:44.8358586+01:00;True|2021-05-26T19:49:30.0427896+02:00;False|2021-05-26T19:49:14.9065510+02:00;True|2021-05-25T17:48:33.3901785+02:00;True|2021-05-25T17:46:09.2063020+02:00;True|2021-05-25T17:42:47.8167539+02:00;True|2021-05-25T17:22:03.1877438+02:00;True|2021-05-25T17:21:05.1565775+02:00;True|2021-05-25T16:26:34.1426996+02:00;True|2021-05-25T16:14:28.2842402+02:00;True|2021-05-25T15:02:11.7131495+02:00;</History>
</PropertyGroup>
</Project>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MON MAPO</i>
<h4>Versione: 6.15.2204.1416</h4>
<h4>Versione: 6.16.2209.2118</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.15.2204.1416
6.16.2209.2118
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.15.2204.1416</version>
<version>6.16.2209.2118</version>
<url>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.Mon.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
-14
View File
@@ -4,19 +4,6 @@
<div class="page">
<main>
@*<div class="top-row px-4 justify-content-between">
<div class="px-2">
<img class="logoImg img-fluid" src="images/LogoMapo.png" width="80" />
<span class="mainHead p-3"><b><span style="color: #DEDEDE;">MP MON</span>itor</b></span>
</div>
<div class="px-2">
<span id="text-white text-right">
@($"{DateTime.Now:dddd dd MMMM yyyy, HH:mm}")
</span>
<img class="logoImg img-fluid" src="images/logoCliente.png" width="32" />
EgalWare
</div>
</div>*@
<div class="top-row px-4 justify-content-between">
<CmpHeader></CmpHeader>
</div>
@@ -27,6 +14,5 @@
<div class="fixed-bottom bottom-row px-2">
<CmpFooter></CmpFooter>
</div>
</main>
</div>
+2 -2
View File
@@ -13,14 +13,14 @@ main {
/*border-bottom: 1px solid #696969;*/
color: #696969;
font-size: 1.4em;
height: 3rem;
height: 2.6rem;
display: flex;
align-items: center;
justify-content: space-evenly;
}
.mainHead{
font-size: 1.7rem;
font-size: 1.6rem;
}
.top-row ::deep a,
-39
View File
@@ -1,39 +0,0 @@
<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">MP.Mon</a>
<button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</div>
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu">
<nav class="flex-column">
<div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="oi oi-home" aria-hidden="true"></span> Home
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="counter">
<span class="oi oi-plus" aria-hidden="true"></span> Counter
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="fetchdata">
<span class="oi oi-list-rich" aria-hidden="true"></span> Fetch data
</NavLink>
</div>
</nav>
</div>
@code {
private bool collapseNavMenu = true;
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}
-16
View File
@@ -1,16 +0,0 @@
<div class="alert alert-secondary mt-4">
<span class="oi oi-pencil me-2" aria-hidden="true"></span>
<strong>@Title</strong>
<span class="text-nowrap">
Please take our
<a target="_blank" class="font-weight-bold link-dark" href="https://go.microsoft.com/fwlink/?linkid=2149017">brief survey</a>
</span>
and tell us what you think.
</div>
@code {
// Demonstrates how a parent component can supply parameters
[Parameter]
public string? Title { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
{
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"CodApp": "MP.MON",
"ConnectionStrings": {
"MP.Mon": "Server=localhost\\SQLEXPRESS;Database=MoonPro; User ID=steamware;Password=viadante16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;",
"MP.Stats": "Server=localhost\\SQLEXPRESS;Database=MoonPro_STATS; User ID=steamware;Password=viadante16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;",
"Redis": "localhost:6379,DefaultDatabase=13,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false"
}
}
+4 -1
View File
@@ -10,6 +10,9 @@
"ConnectionStrings": {
"MP.Mon": "Server=SQL2016DEV;Database=MoonPro; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;",
"MP.Stats": "Server=SQL2016DEV;Database=MoonPro_STATS; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=Blazor.ServerApp;",
"Redis": "localhost:6379,DefaultDatabase=13,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false"
"Redis": "localhost:6379,DefaultDatabase=1,connectTimeout=5000,syncTimeout=5000,asyncTimeout=5000,abortConnect=false,ssl=false"
},
"ServerConf": {
"maxAge": "2000"
}
}

Some files were not shown because too many files have changed in this diff Show More