Compare commits

...

1182 Commits

Author SHA1 Message Date
Samuele Locatelli 561c073489 Refresh compilazione 2026-06-04 08:13:10 +02:00
Samuele Locatelli 8c6bf075fb Completata review di tutti i progetti coi nuovi repository! 2026-06-04 08:12:05 +02:00
Samuele Locatelli 217836099c LAND:
- fix program.cs startup
- fix calcolo dim DB
- fix IOB count
2026-06-03 18:32:51 +02:00
Samuele Locatelli febe1d0132 IOC:
- completata review program.cs
- fix temporaneo init servizi data interni (da rivedere con FusionCache ...)
2026-06-03 18:23:12 +02:00
Samuele Locatelli fab32124d8 RIOC:
- fix compilazione con prerequisiti vari
- fx init program.cs x dbcontext
2026-06-03 18:12:16 +02:00
Samuele Locatelli 9055eaf73c SPEC:
- aggiunta pagina operatori
- completato fix
2026-06-03 18:05:59 +02:00
Samuele Locatelli d804074121 Completato fix SPEC, ok x MON, altri da verificare/sistemare 2026-06-03 12:21:45 +02:00
Samuele E. Locatelli (W11-AI) 328f7adc06 Completamento migrazione repository MpSpecController: aggiunti MpMon, MpVoc, MpLand; migrati TranslateSrv, StatusData, LandDataService, TranslateSrv, MonDataFeeder, TabDataFeeder; 0 errori build 2026-06-02 23:59:01 +02:00
Samuele E. Locatelli (W11-AI) 843435ad3b Continua revisione codice assisted 2026-06-02 20:02:38 +02:00
Samuele E. Locatelli (W11-AI) 0a6133a0c9 Aggiunta gestione repository nuovi x ListSelect e OrderData 2026-06-02 17:22:15 +02:00
Samuele E. Locatelli (W11-AI) 05313c123c Correzione tipi restituiti 2026-06-02 16:07:44 +02:00
Samuele E. Locatelli (W11-AI) 712bc5e380 Inizia code assisted review (non compila...) 2026-06-02 15:44:25 +02:00
Samuele Locatelli 537ebec330 Continuo spostamento repository.. test ok 2026-06-01 19:22:34 +02:00
Samuele Locatelli fa46fe89e5 Continuo migrazione repository 2026-06-01 19:12:12 +02:00
Samuele Locatelli a34dd4cc79 Continuo spostamento metodi nel repository Anag 2026-06-01 18:54:03 +02:00
Samuele Locatelli 5c20387e1d Inizio setup repository 2026-06-01 16:43:40 +02:00
Samuele Locatelli 3ea4b77827 pre-update descrizioni 2026-06-01 13:56:14 +02:00
Samuele Locatelli d2e82d7209 Rename controller --> repositori x spec 2026-06-01 13:55:27 +02:00
Samuele Locatelli 213eb35be1 Refresh compilazioni 2026-06-01 13:54:21 +02:00
Samuele Locatelli 7c9e601010 Spostamento refactor plan x metodi SPEC 2026-06-01 09:44:10 +02:00
Samuele Locatelli bd2b35b2e6 Completata pèulizia SPEC!!! 2026-06-01 09:37:10 +02:00
Samuele Locatelli b19f21fdff Trasformazione async metodi SaveSendMessages 2026-06-01 08:25:28 +02:00
Samuele Locatelli 4e632ff9f4 Correzione compilazione progetti x spostamento altre classi in SPEC service method 2026-06-01 07:59:10 +02:00
Samuele Locatelli 8e7d08e4c9 Cleanup metodi e correzioni varie 2026-06-01 07:27:48 +02:00
Samuele Locatelli 2f4cead6e1 Continuo code cleanup metodi STATS 2026-05-30 12:02:18 +02:00
Samuele Locatelli e65822ceb5 Fix delete dossier sistemato... 2026-05-30 10:20:17 +02:00
Samuele Locatelli 18aa123672 Completato fix pagina gestione PODL-KIT x refresh 2026-05-30 10:09:00 +02:00
Samuele Locatelli 79024ddcac Ok gestione eliminazione KIT 2026-05-30 09:58:24 +02:00
Samuele Locatelli 26e8ca0370 Fix gestione reparti/operatore 2026-05-30 09:18:19 +02:00
Samuele Locatelli 1b06aec692 refres reparti 2026-05-30 07:19:09 +02:00
Samuele Locatelli ff78941795 Inizio fix gestione reparti 2026-05-30 07:18:52 +02:00
Samuele Locatelli 6af40d9cae Refresh + fix gestione reparti-operatori 2026-05-29 19:41:00 +02:00
Samuele Locatelli 7de0f88b9e Update pagina composizione kit PODL 2026-05-29 12:01:01 +02:00
Samuele Locatelli af264a8922 Aggiunta filtro search per PODL 2026-05-29 11:43:52 +02:00
Samuele Locatelli bd2bd32d30 Update pagina KIT template 2026-05-29 11:17:13 +02:00
Samuele Locatelli 823af36971 Fix e pulizia metodi ODL 2026-05-29 09:00:36 +02:00
Samuele Locatelli 582004c605 Rimosso vocabolario da IOC(non serve...) + cleanup generale IOC e SPEC per pulizia 2026-05-29 08:40:22 +02:00
Samuele Locatelli 75e91dbc79 Update gestione vocabolario con FusionCache 2026-05-29 08:33:43 +02:00
Samuele Locatelli f697e2413a Ripartenza da refactor plan x nuova sessione 2026-05-29 07:54:37 +02:00
Samuele Locatelli 15fe664418 Rimozione metodi sync x SPEC 2026-05-29 07:47:30 +02:00
Samuele Locatelli b0be426c62 refresh compiile 2026-05-29 07:24:00 +02:00
Samuele Locatelli 116d7395c9 Ancora update metodi SPEC 2026-05-29 07:23:54 +02:00
Samuele Locatelli ff36dadadc refresh compilazioni test 2026-05-28 19:07:14 +02:00
Samuele Locatelli 3660306c52 Fix metodi IOC (ancora da ottimizzare cmq) 2026-05-28 19:06:53 +02:00
Samuele Locatelli 37044040c4 Altra ottimizzazione letture cache async 2026-05-28 18:59:54 +02:00
Samuele Locatelli 6b49cb29fe Ancora updaate caching e gestione oggetti 2026-05-28 18:49:10 +02:00
Samuele Locatelli e0d0f7b493 Update conf scadenze rapide/lunghe x cache 2026-05-28 16:54:27 +02:00
Samuele Locatelli 53910dcd62 Ancora update x ottimizzazione gestione lista articoli e dati in cache vari 2026-05-28 16:36:53 +02:00
Samuele Locatelli 8d9c450ed9 Update timing scadenza cache articoli non eliminabili 2026-05-28 15:35:33 +02:00
Samuele Locatelli 2f4bb9c1b8 Aggiunta gestione controllo articoli in Istanze KIT come chil 2026-05-28 14:49:32 +02:00
Samuele Locatelli c45dab1c31 Update metodi cache su SPEC 2026-05-28 14:49:20 +02:00
Samuele Locatelli 47326e6535 Altri fix async 2026-05-28 13:07:37 +02:00
Samuele Locatelli b8fd2c992f Ancora update async (preliminare) 2026-05-28 13:07:31 +02:00
Samuele Locatelli 4daaf6ffd0 Ancora refactor metodi + documentazione 2026-05-28 12:47:03 +02:00
Samuele Locatelli 7be59894e4 Update cache su altri metodi 2026-05-28 12:39:57 +02:00
Samuele Locatelli 3f4a64e833 Fix IOC dataService 2026-05-28 12:29:59 +02:00
Samuele Locatelli f3b02436ee Refresh build vers 2026-05-28 12:28:57 +02:00
Samuele Locatelli a1447c38c3 Fix durate random cache 2026-05-28 12:27:40 +02:00
Samuele Locatelli e424218b01 Fix cache duration 2026-05-28 12:14:18 +02:00
Samuele Locatelli 9df2a7853f Preparazione metodi async x pagina ODL 2026-05-28 12:11:53 +02:00
Samuele Locatelli 92703f6bbd Update caching 2026-05-28 11:22:59 +02:00
Samuele Locatelli d731187d62 Aggiunta secondo helper estrazione dati navManager 2026-05-28 11:22:42 +02:00
Samuele Locatelli 2854f2f6ce Fix warnings 2026-05-28 11:18:17 +02:00
Samuele Locatelli 5165a2cabb Fix compilazione IOC 2026-05-28 11:12:51 +02:00
Samuele Locatelli b946e40608 Preparazione metodi x spostamento cache Async 2026-05-28 11:09:55 +02:00
Samuele Locatelli 25c38f5bcb Preprocess per cambio metodi Async 2026-05-28 10:42:39 +02:00
Samuele Locatelli e4d56be0af Correzioni warnings vari e test compilazione, fix applicazioni CORE in generale 2026-05-28 10:33:00 +02:00
Samuele Locatelli ce59a00d02 Correzioni warnings in TaskMan 2026-05-28 09:41:22 +02:00
Samuele Locatelli 31682e57da Fix csv export warning + ottimizzazione e fix warnings vari metodi Core 2026-05-28 09:40:36 +02:00
Samuele Locatelli 195f975c6a Ancora update metodi + udpate async generico 2026-05-28 09:17:17 +02:00
Samuele Locatelli 0476b78d09 Continuo fix metodi cache x SPEC 2026-05-28 08:57:20 +02:00
Samuele Locatelli 74083fac93 Fix naming + pulizia metodi nonn usati 2026-05-28 08:46:45 +02:00
Samuele Locatelli 966209f573 Update metodi + parametrizzazione build_par 2026-05-28 08:34:01 +02:00
Samuele Locatelli 6ab59ec1e5 Aggiunta script x compilazione parallela, spostamento progetti old/disuso, limite paralleo a 3 per evitare errori 2026-05-28 08:27:14 +02:00
Samuele Locatelli 3210225c1b Renaming metodo 2026-05-28 08:03:42 +02:00
Samuele Locatelli 102dffcc65 Continuo fix con nuova cache x metodi MpDataService 2026-05-28 07:52:20 +02:00
Samuele Locatelli 44c19a2c5f Update metodi async con FusionCache 2026-05-27 19:45:29 +02:00
Samuele Locatelli 47a952c204 FIX IOC 2026-05-27 19:39:10 +02:00
Samuele Locatelli 2fce840ed9 Preparazione metodi Async pre conversione FusionCache 2026-05-27 19:28:13 +02:00
Samuele Locatelli d8bc1379be Ancora update componenti con review tags 2026-05-27 19:12:57 +02:00
Samuele Locatelli 15605f2a00 Update gestione tags x eliminazione cache ottimizzata 2026-05-27 19:12:31 +02:00
Samuele Locatelli 0526a81e8e ancora fix gestione KIT 2026-05-27 16:31:30 +02:00
Samuele Locatelli e30e980833 Completo update gestione articoli editabili (KIT no...) 2026-05-27 16:31:24 +02:00
Samuele Locatelli fcf3bc8400 Update ricerfa articoli x tipo 2026-05-27 16:20:09 +02:00
Samuele Locatelli 9d513edab4 Update plan interventi 2026-05-27 14:47:49 +02:00
Samuele Locatelli 8580acdb0c Ancora update ART 2026-05-27 14:46:04 +02:00
Samuele Locatelli e2e9111860 Inizio update agents e modifiche x pagina ART con async vari e num records 2026-05-27 14:45:51 +02:00
Samuele Locatelli 38b8f37d30 Riorganizzazione codice MpDataService 2026-05-27 14:11:31 +02:00
Samuele Locatelli 13d42d9565 Cleanup codice 2026-05-27 14:07:59 +02:00
Samuele Locatelli 9537691756 Ancora update gestione elenco articoli 2026-05-27 12:05:27 +02:00
Samuele Locatelli e328c4e6f1 Fix metodi accesso dati SPEC con assistant 2026-05-27 12:00:15 +02:00
Samuele Locatelli 1eb5185240 Continuo refactor con cache Fusion 2026-05-27 09:46:55 +02:00
Samuele Locatelli 9e4594f8b4 Review cache con FusionCache 2026-05-27 08:51:30 +02:00
Samuele Locatelli 20a16471a9 Ancora ottimizzazione azioni calcolo/update/display 2026-05-26 19:14:10 +02:00
Samuele Locatelli 8c995d4c44 Update caching SPEC 2026-05-26 19:01:01 +02:00
Samuele Locatelli 1cefa18895 Porting a versione 8 della struttura app x SPEC 2026-05-26 17:49:32 +02:00
Samuele Locatelli a94e40a6aa Continuo ottimizzazione oggetti in memoria 2026-05-26 16:38:02 +02:00
Samuele Locatelli 40694e5766 Aggiunta hashset x velocizzare ricerca recipes x PODL 2026-05-26 16:37:54 +02:00
Samuele Locatelli 8461398ff8 Update SPEC 2026-05-25 19:06:04 +02:00
Samuele Locatelli d20f256736 Correzione fusioncache x RIOC 2026-05-25 19:05:56 +02:00
Samuele Locatelli 8d1e61ec8b UPdate spec x gestione PODL 2026-05-25 17:14:38 +02:00
Samuele Locatelli 7034a288d0 Merge tag 'FixFusionCache' into develop
Fix gestione cache con FusionCache
2026-05-12 07:29:06 +02:00
Samuele Locatelli b4718437fc Merge branch 'Release/FixFusionCache' 2026-05-12 07:28:56 +02:00
Samuele Locatelli 844e19f11f Update cache con FusionCache in ram 2026-05-12 07:19:24 +02:00
Samuele Locatelli 4c1d8df918 Merge tag 'FixCacheSemaphore_01' into develop
Rimozione semaforo cache problematico
2026-05-11 12:43:09 +02:00
Samuele Locatelli c24b7b26c1 Merge branch 'Release/FixCacheSemaphore_01' 2026-05-11 12:43:01 +02:00
Samuele Locatelli 43d3138740 Aggiunti metodi balance globali x tutte le chiamate 2026-05-11 12:41:33 +02:00
Samuele Locatelli 926f8ae710 Fix semaforo x cache in IOC x redis 2026-05-11 12:30:16 +02:00
Samuele Locatelli 77f79ba891 Merge tag 'RIOC_AddErrorMan_01' into develop
Aggiunta migrazione e gestione nuove stats x errori rev proxy
2026-05-11 11:26:25 +02:00
Samuele Locatelli d9924accf7 Merge branch 'Release/RIOC_AddErrorMan_01' 2026-05-11 11:26:08 +02:00
Samuele Locatelli a937fd78f3 refresh vers 2026-05-11 11:25:35 +02:00
Samuele Locatelli a7ff46ca99 Completo modifiche x test SIMULA nuove statistiche cone rrori 2026-05-11 10:38:39 +02:00
Samuele Locatelli 7c2d470551 Update script LUA + conf x aggiornamento statistiche da RIOC 2026-05-11 10:11:58 +02:00
Samuele Locatelli 8ca120716c Update service che usa i repository 2026-05-11 09:44:27 +02:00
Samuele Locatelli 5fdc6fcf4e Aggiunta preliminare repository x nuove tab statistiche 2026-05-11 09:13:30 +02:00
Samuele Locatelli 0de18419a4 Aggiunta nuovi modelli dati x errori e statusCode + migration 2026-05-11 09:13:01 +02:00
Samuele Locatelli 0b48f1ecef update versione 2026-05-11 08:17:36 +02:00
Samuele Locatelli e3169ff880 Aggiunta registrazione errori estesa x avere + info 2026-05-11 08:17:27 +02:00
Samuele Locatelli f788162d26 Merge tag 'TestFix_CICD_RIOC_02' into develop
Update x gestione IOC con http x evitare problemi https e redirect
2026-05-09 10:20:56 +02:00
Samuele Locatelli 6e8852e7e0 Merge branch 'Release/TestFix_CICD_RIOC_02' 2026-05-09 10:19:37 +02:00
Samuele Locatelli c3dbfc717b Test modifica x usare http vs https 2026-05-09 10:19:17 +02:00
Samuele Locatelli a28365ae03 Modifica IOC: tolto redirect obbligatorio ad https 2026-05-09 10:14:38 +02:00
Samuele Locatelli 60dd0cb403 Merge tag 'TestFix_CICD_RIOC_01' into develop
Update pubblicazione (spero)#
2026-05-09 07:04:31 +02:00
Samuele Locatelli 2a55db5082 Merge branch 'Release/TestFix_CICD_RIOC_01' 2026-05-09 07:04:23 +02:00
Samuele Locatelli 5cecdaed9e correzione dati publicazione 2026-05-09 07:01:04 +02:00
Samuele Locatelli 1f3f2632cd Semplificazione route manager 2026-05-09 07:00:58 +02:00
Samuele Locatelli d4f5207d39 Fix gestione manifest pubblicazione (hope) 2026-05-09 07:00:26 +02:00
Samuele Locatelli bd7aeeebe1 Merge tag 'AddRIoc_04' into develop
Ifx RIOC deploy file in manifest
2026-05-08 15:13:27 +02:00
Samuele Locatelli 6e39fe1c7f Merge branch 'Release/AddRIoc_04' 2026-05-08 15:13:18 +02:00
Samuele Locatelli f09f819138 Update manifest x deploy RIOC 2026-05-08 15:13:00 +02:00
Samuele Locatelli 067c5e692b Merge tag 'AddRIoc_03' into develop
nuova aggiunta pubxml
2026-05-08 12:22:05 +02:00
Samuele Locatelli e7012dd5f7 Merge branch 'Release/AddRIoc_03' 2026-05-08 12:21:59 +02:00
Samuele Locatelli 47782c1845 Riaggiunta pubxml 2026-05-08 12:21:39 +02:00
Samuele Locatelli 9b61bba0d3 Merge tag 'AddRIoc_02' into develop
Ancora update RIOC
2026-05-08 12:15:27 +02:00
Samuele Locatelli 763a5da061 Merge branch 'Release/AddRIoc_02' 2026-05-08 12:15:11 +02:00
Samuele Locatelli 417c778d8c Update sln file 2026-05-08 12:14:49 +02:00
Samuele Locatelli facd8c0856 Fix solution MP.RIOC 2026-05-08 12:13:12 +02:00
Samuele Locatelli 351cde50a7 update proj x compilazione 2026-05-08 12:09:49 +02:00
Samuele Locatelli 7f8a9e01c0 Merge tag 'AddRIoc_01' into develop
Inizio release versioni RIOC
2026-05-08 12:01:32 +02:00
Samuele Locatelli 8dd5a31ad4 Merge branch 'Release/AddRIoc_01' 2026-05-08 12:01:24 +02:00
Samuele Locatelli c0e70bd07f Ancora pubxml update 2026-05-08 12:00:52 +02:00
Samuele Locatelli 7ae537516b Aggiunto profilo x RIOC 2026-05-08 12:00:46 +02:00
Samuele Locatelli 3f79e67735 Review LAND x preparare nuovi installers 2026-05-08 11:56:12 +02:00
Samuele Locatelli 9c1adee62a Rimozione YARP da sito IOC: test in prod 2026-05-08 11:24:36 +02:00
Samuele Locatelli 46e97f586b Aggiunto placeholder file, update pubxml 2026-05-08 09:49:34 +02:00
Samuele Locatelli ec3c5e65e6 ancora ottimizzazioni deploy 2026-05-08 09:45:29 +02:00
Samuele Locatelli d9728dc706 Test modifica pubxml 2026-05-08 09:45:23 +02:00
Samuele Locatelli 9b1a5a8772 Aggiunta servizi x gestione chaimate LUA su Redis 2026-05-08 08:59:52 +02:00
Samuele Locatelli a8eef823ff Fix index page + update profiles 2026-05-08 08:59:38 +02:00
Samuele Locatelli 9242bcf7e2 pulizia classi non necessarie services 2026-05-08 08:59:24 +02:00
Samuele Locatelli 0209dbfc4c Aggiunta publish profiles 2026-05-08 08:58:56 +02:00
Samuele Locatelli 46f8377acb Completato setup ottimizzato per RIOC 2026-05-08 08:23:35 +02:00
Samuele Locatelli f95e7c441b Aggiunta progetto API Routing semplificata (solo routing) 2026-05-08 08:03:23 +02:00
Samuele Locatelli 0f54b832e7 Merge tag 'AddInMemoryCache_02' into develop
Fix gestione index page x IOC
2026-05-06 11:40:21 +02:00
Samuele Locatelli b3cc5c71d9 Merge branch 'Release/AddInMemoryCache_02' 2026-05-06 11:39:34 +02:00
Samuele Locatelli 79b052b221 Fix index page IOC 2026-05-06 11:39:17 +02:00
Samuele Locatelli bb7839f74b Merge tag 'AddInMemoryCache_01' into develop
Aggiunta InMemoryCache x IOC con altre ottimizzazioni x IOC
2026-05-06 10:15:50 +02:00
Samuele Locatelli 2162a0b3fc Merge branch 'Release/AddInMemoryCache_01' 2026-05-06 10:15:33 +02:00
Samuele Locatelli 5dab9100da Ulteriore ottimizzazione codice IOC x caching in memoria e obj scoped (da testare...) 2026-05-06 10:08:09 +02:00
Samuele Locatelli 0e6abf4f28 Implementata cache in memoria per alcuni metodi "di configurazione long period" 2026-05-06 09:47:56 +02:00
Samuele Locatelli 2f108ebdd3 inizio inserimento InMemoryCache x metodi vari IOC 2026-05-06 09:16:30 +02:00
Samuele Locatelli 7ca5637fe4 Aggiunta InMemoryCache x servizi legati a INPUT (es list master/slave) 2026-05-06 07:15:57 +02:00
Samuele Locatelli 5e258917c4 Merge tag 'AddEnergyCheckPage_03' into develop
Update info IOC
2026-05-04 17:19:53 +02:00
Samuele Locatelli 3924b735df Merge branch 'Release/AddEnergyCheckPage_03' 2026-05-04 17:19:48 +02:00
Samuele Locatelli ed77856a12 Update debug level + display IOC 2026-05-04 17:19:28 +02:00
Samuele Locatelli 974a804d72 Correzioni icone stats 2026-05-04 14:56:56 +02:00
Samuele Locatelli 243dcf00a5 Merge tag 'AddEnergyCheckPage_02' into develop
update gestione analisi scadenza dati energy
2026-05-04 12:36:37 +02:00
Samuele Locatelli e495131b7e Merge branch 'Release/AddEnergyCheckPage_02' 2026-05-04 12:36:28 +02:00
Samuele Locatelli 8b02b0da12 Update display STATS x situazione acquisitori + update conf MON/TAB3 x MP.Data in json conf 2026-05-04 12:36:09 +02:00
Samuele Locatelli a75cb19ea7 FIX conf x TAb3 e MON: mancava MP.Data 2026-05-04 11:14:01 +02:00
Samuele Locatelli 8755630ab1 Merge tag 'AddEnergyCheckPage_01' into develop
Update gestione CheckPage x Energy
2026-05-04 10:03:33 +02:00
Samuele Locatelli 564ee415be Merge branch 'Release/AddEnergyCheckPage_01' 2026-05-04 10:03:21 +02:00
Samuele Locatelli aad546ed72 Stats: update displays cadenza dati energy 2026-05-04 09:51:40 +02:00
Samuele Locatelli 75e4b539a9 log solo debug (poi lo attivo in prod...) 2026-04-30 18:41:58 +02:00
Samuele Locatelli c4aa1a2990 upteriore cambio tempo log 2026-04-30 18:28:26 +02:00
Samuele Locatelli ef3084af91 aggiunto log x input lento (>15ms...) 2026-04-30 18:26:49 +02:00
Samuele Locatelli e66e4f898f Update ance x metodo enabled in nuovo servizio/repository 2026-04-30 18:13:26 +02:00
Samuele Locatelli 523bf78d33 Update pesante x gestione servizio x accesso IOC repo 2026-04-30 17:58:55 +02:00
Samuele Locatelli 7fe91d59d7 Tolto, da service Ioc, il trace+ caching x ottimizzare... 2026-04-30 16:57:07 +02:00
Samuele Locatelli f621c3613f Aggiunto log impiego factory o meno 2026-04-30 16:08:15 +02:00
Samuele Locatelli 6886569864 Fix repository 2026-04-30 15:56:21 +02:00
Samuele Locatelli 7b706e7fc1 Aggiunta gestione microstatomacchina 2026-04-30 15:54:26 +02:00
Samuele Locatelli 1ecef8e09f Rimozione transazione in gestione EvList / DDB 2026-04-30 15:54:05 +02:00
Samuele Locatelli 492648a592 Rimoziona transazione 2026-04-30 15:45:06 +02:00
Samuele Locatelli 0063498f43 Update controller x usare scoped service x input in modalità connectionFactory x process input 2026-04-30 15:34:02 +02:00
Samuele Locatelli 4d7f527230 Rimessa async anche prima chamata 2026-04-30 08:44:57 +02:00
Samuele Locatelli 081a8fcb69 aggunta transazione 2026-04-30 08:37:00 +02:00
Samuele Locatelli 3e9d0237aa Update metodo checkCambiastato (da validare) + rimessa transazione 3 stored 2026-04-30 08:36:55 +02:00
Samuele Locatelli 533007d72e Altra ottimizzazione chiamate checkCambiostato... 2026-04-29 19:13:03 +02:00
Samuele Locatelli 035dd8351d Rimoazione transazione in checkCambiostato 2026-04-29 19:05:46 +02:00
Samuele Locatelli 9e67df84a1 Riscrittura metodo EFCore x avere unica transazione x checkCambiaStato 2026-04-29 18:37:18 +02:00
Samuele Locatelli bfd843cfde Update metodi x insert async in transazione 2026-04-29 17:25:05 +02:00
Samuele Locatelli 8860f5687c Fix chart display: dati orari come metrica di partenza + update home 2026-04-29 16:15:46 +02:00
Samuele Locatelli 628efdc4e1 Merge tag 'UpdateIoC_03' into develop
Update gestione grafici con linee stacked
2026-04-29 07:45:06 +02:00
Samuele Locatelli 42db8abf15 Merge branch 'Release/UpdateIoC_03' 2026-04-29 07:44:31 +02:00
Samuele Locatelli 28304f99cf Update gestione IOC x grafici call 2026-04-29 07:44:14 +02:00
Samuele Locatelli f15fb309d1 Merge tag 'UpdateIoC_02' into develop
Update generale per IOC da testare in Jetco
2026-04-28 18:45:23 +02:00
Samuele Locatelli 9d43691710 Merge branch 'Release/UpdateIoC_02' 2026-04-28 18:45:12 +02:00
Samuele Locatelli 5733be8968 Update colleazione statistiche x aggregazione destination (server) oppure macchina + update cleanup rebootLog a 60 min 2026-04-28 18:38:49 +02:00
Samuele Locatelli 379b35cfe0 Update soglia controllo esecuzione stored ove necessario 2026-04-28 09:50:05 +02:00
Samuele Locatelli 35be37224f Aggiunta gestione esecuzione limitata di pulizia tab RRL da MpDataServie (per evitare chaimate stored non necessarie) 2026-04-28 09:46:09 +02:00
Samuele Locatelli af92a64383 Merge tag 'UpdateIoC_01' into develop
Update componenti remotereboot + minor fix input
2026-04-28 09:07:46 +02:00
Samuele Locatelli 9b74b25348 Merge branch 'Release/UpdateIoC_01' 2026-04-28 09:06:49 +02:00
Samuele Locatelli 143185a286 eliminazione vecchia procedura commentata x fix dataora eventi remoti IOB 2026-04-28 09:06:24 +02:00
Samuele Locatelli 80a5d40897 test fix input 2026-04-28 08:59:48 +02:00
Samuele Locatelli d2ec5b15d4 Update a stored e metodi x evitare race conditions su scrittura remoteRebootLog 2026-04-28 08:23:27 +02:00
Samuele Locatelli d9ede3aae3 Merge tag 'FixIobObj_03' into develop
Update progetti tutti a dotnet 8
2026-04-28 07:01:49 +02:00
Samuele Locatelli cf1a090792 Merge branch 'Release/FixIobObj_03' 2026-04-28 07:01:36 +02:00
Samuele Locatelli f74ae7a72c Minor update x tentativo ottimizzazione input (da rivedere) 2026-04-27 18:48:51 +02:00
Samuele Locatelli fc02d0967f IOC: correzione metrica mostrata (count se (#) altrimenti avgDuration come ora 2026-04-27 18:35:57 +02:00
Samuele Locatelli 0901c3a7ca Rimosso vecchio progetto mon6 (validato 8 da tempo...) 2026-04-27 18:23:24 +02:00
Samuele Locatelli 98ad3532df Update profili pubblicazione a dotnet 8 x progetti vari (tranne mon6...) 2026-04-27 18:22:48 +02:00
Samuele Locatelli 7dae6650c2 Update pacchetti x gestione comune (POTREBBE funzionare...) 2026-04-27 18:14:33 +02:00
Samuele Locatelli fe4754921e Update gestione editing articoli x SPEC 2026-04-27 17:40:21 +02:00
Samuele Locatelli 5c6cb02f63 Aggiunta preliminare Directory.Packages.props (NON ok...) 2026-04-27 16:38:05 +02:00
Samuele Locatelli b60d3fa96e fix preliminare resource html files 2026-04-27 16:37:29 +02:00
Samuele Locatelli 6da2cd998d Merge tag 'UpdateSpecDb_01' into develop
Update gestione spec DB x errori ART/kit
2026-04-27 15:49:16 +02:00
Samuele Locatelli 2941475270 Merge branch 'Release/UpdateSpecDb_01' 2026-04-27 15:48:53 +02:00
Samuele Locatelli a0af9b831f ancora correzioni using 2026-04-27 15:46:30 +02:00
Samuele Locatelli 9a2faa48b5 Ancora update nuget vari progetti 2026-04-27 15:37:41 +02:00
Samuele Locatelli 5e67402330 Fix errore using desueti 2026-04-27 15:28:37 +02:00
Samuele Locatelli 2666aaa808 - fix anag articoli x SPEC (Kit e ART)
- update nuget vari
2026-04-27 15:28:01 +02:00
Samuele Locatelli 36890d34c1 Update saveDataItem: reinserito metodo mongoDB 2026-04-27 14:56:48 +02:00
Samuele Locatelli 4f4b8ddc77 Merge tag 'UpdateFluxLogAndReboot' into develop
Update gestione fluxcache x ottimizzare reboot recording
2026-04-27 11:33:10 +02:00
Samuele Locatelli 1e91bde9fc Merge branch 'Release/UpdateFluxLogAndReboot' 2026-04-27 11:32:44 +02:00
Samuele Locatelli a9769dd78c rimozione verbosità ri-add innovations su dati 2026-04-27 11:32:11 +02:00
Samuele Locatelli 1cf7a61e74 Test riscrittura flushredis + ottimizzazione insert remoteRebootLog 2026-04-27 11:20:09 +02:00
Samuele Locatelli 7a01793bfd Merge tag 'MigrateMongoCall_02' into develop
Update gestione useFactory x enabled & co
2026-04-24 09:58:49 +02:00
Samuele Locatelli f421c00593 Merge branch 'Release/MigrateMongoCall_02' 2026-04-24 09:58:23 +02:00
Samuele Locatelli 3c1fdb92a2 Ulteriore update x test factory in prod 2026-04-24 09:57:48 +02:00
Samuele Locatelli 24b2405429 Merge tag 'MigrateMongoCall_01' into develop
Migrazione call MongoDB: primo metodo x salvataggio setup MTC + conf x
chiamate da scopeFactory x DB da conf
2026-04-24 07:51:03 +02:00
Samuele Locatelli 36645d162a Merge branch 'Release/MigrateMongoCall_01' 2026-04-24 07:49:10 +02:00
Samuele Locatelli 3cb955fcb7 test per sendDataItem + enabled con scopeFactory 2026-04-24 07:18:28 +02:00
Samuele Locatelli e8ea4c5815 Update con servizio singleton x gestione MtcService 2026-04-23 19:50:59 +02:00
Samuele Locatelli 0c7726a6e7 Modifica comportamento salvataggio controller MTC... 2026-04-23 19:37:25 +02:00
Samuele Locatelli f6312363b2 Update repository e servizi x gestione dati aggiornati 2026-04-23 19:15:16 +02:00
Samuele Locatelli 760a91b3a3 Correzione struttura modelx abilitare null + update API POST 2026-04-23 19:15:02 +02:00
Samuele Locatelli 226cac656f Aggiunta servizi/repository x MTC (da testare...) 2026-04-23 18:39:44 +02:00
Samuele Locatelli fa6fad0a57 Aggiunto modello e migrations x MtcSetup 2026-04-23 18:39:05 +02:00
Samuele Locatelli dd13704423 Merge tag 'FixAddOptPar_01' into develop
Fix metodo addOptPar
2026-04-23 08:27:45 +02:00
Samuele Locatelli 56ff3267cf Merge branch 'Release/FixAddOptPar_01' 2026-04-23 08:27:39 +02:00
Samuele Locatelli 80ce35aadb Fix metodo AddOptPar 2026-04-23 08:27:15 +02:00
Samuele Locatelli 93a699989b Merge tag 'AddMachstats_01' into develop
Update statistiche daily x macchina
2026-04-22 19:24:27 +02:00
Samuele Locatelli 8811f87281 Merge branch 'Release/AddMachstats_01' 2026-04-22 19:24:03 +02:00
Samuele Locatelli 34023c807f Aggiornamento statistiche con dati x macchina chiamante 2026-04-22 19:23:16 +02:00
Samuele Locatelli 586a5b24d1 Aggiunta migration + modifica record statistiche con MachineId (dest) in stats DAY 2026-04-22 18:27:50 +02:00
Samuele Locatelli cd9f7c5da5 Merge tag 'AddRedisScriptMan_03' into develop
update display x chart & pie
2026-04-21 11:14:16 +02:00
Samuele Locatelli ce24ab98a8 Merge branch 'Release/AddRedisScriptMan_03' 2026-04-21 11:14:09 +02:00
Samuele Locatelli 41bdd059d1 Fix pie display 2026-04-21 11:13:53 +02:00
Samuele Locatelli 4ddb34cf19 Merge tag 'AddRedisScriptMan_02' into develop
Update x invio dati verso LUA in formato EN (decimali con .)
2026-04-21 10:00:36 +02:00
Samuele Locatelli 3633d9c292 Merge branch 'Release/AddRedisScriptMan_02' 2026-04-21 10:00:21 +02:00
Samuele Locatelli b9b7e30e41 Update x gestione con decimali ENG verso LUA v5 2026-04-21 09:59:44 +02:00
Samuele Locatelli 1d7b17b2d2 Completo update MpIocController: tutto portato ad async! 2026-04-20 16:54:33 +02:00
Samuele Locatelli 9f6643247a Merge tag 'AddRedisScriptMan_01' into develop
Aggiornamento x gestione parametrica script redis da conf
2026-04-20 10:52:32 +02:00
Samuele Locatelli a82bb52cb2 Merge branch 'Release/AddRedisScriptMan_01' 2026-04-20 10:52:09 +02:00
Samuele Locatelli 91f433e41c Update gestione script LUA:
- cartella con script
- conf x scelta
- gestione script letti 1 sola volta all'avvio
2026-04-20 10:51:38 +02:00
Samuele Locatelli 2d77838a01 Ancora fix async vari + using 2026-04-20 08:54:50 +02:00
Samuele Locatelli 8c307dee5c Ancora fix async 2026-04-20 08:49:02 +02:00
Samuele Locatelli dd0854a6ef Continuo migrazione async metodi DB 2026-04-20 08:45:22 +02:00
Samuele Locatelli 50987d15fb miglioramenti generici/minori per contesto su EfCore method + cleanup 2026-04-18 16:48:07 +02:00
Samuele Locatelli 59798f47ce Ottimizzaziione master/slave + ottimizzazioni using contesto db vari 2026-04-18 16:34:04 +02:00
Samuele Locatelli 389fa5df04 Fix chiamata async errata da stored che NON deve fare firstOrDefault in EFCore composing... 2026-04-18 15:48:26 +02:00
Samuele Locatelli d7a66d69cb altro test con redis transaction unica 2026-04-18 15:33:52 +02:00
Samuele Locatelli 7e0f73d9d2 Ancora ottimizzazione async/await verso redis 2026-04-18 15:24:53 +02:00
Samuele Locatelli 4c117d274a ancora rimozione chaimate async 2026-04-18 14:54:25 +02:00
Samuele E. Locatelli (W11-AI) d470352dcd fix await 2026-04-18 14:44:44 +02:00
Samuele Locatelli d91f224179 modifica call checkCambbiaStato in ASYNC 2026-04-18 12:31:04 +02:00
Samuele Locatelli 950c2ed87b Update conf cache time redis 2026-04-18 11:48:31 +02:00
Samuele Locatelli 9e2ed83a7a Update modalità display statistiche chiamate 2026-04-18 11:40:17 +02:00
Samuele Locatelli 9e0cfefce9 fix save carico pezzi (sperabilmente...) 2026-04-18 10:48:08 +02:00
Samuele Locatelli 1a8e28a3a5 Semplificazione MSFD call 2026-04-18 10:46:47 +02:00
Samuele Locatelli b475391189 fix patytern redis 2026-04-18 10:21:54 +02:00
Samuele Locatelli 20f52a0cfc Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-18 10:19:39 +02:00
Samuele Locatelli e3c1c6baef update interafaccia Callstats 2026-04-18 10:19:37 +02:00
Samuele E. Locatelli (W11-AI) dcb2ddd341 semplificazione getHashField 2026-04-18 10:17:54 +02:00
Samuele Locatelli b6a1879543 pulizia metodi inutili + cambio async recupero stateMachine 2026-04-18 09:38:14 +02:00
Samuele Locatelli 09d6b85bd4 correzione metodi con ritorno void 2026-04-18 09:28:21 +02:00
Samuele Locatelli 52351c2ca7 update metodi redis x semplificazione chiamate 2026-04-18 09:26:28 +02:00
Samuele E. Locatelli (W11-AI) 9fe1506dd3 test alcune modifiche gestione redisSet 2026-04-18 09:22:15 +02:00
Samuele E. Locatelli (W11-AI) 7837564f08 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-18 07:14:22 +02:00
Samuele E. Locatelli (W11-AI) 72168fe1de minor typo su controller IOB 2026-04-18 07:12:43 +02:00
Samuele Locatelli 1dc0f5e31e Fix loooop su set hash... 2026-04-18 07:11:18 +02:00
Samuele Locatelli 8b1ecb4775 Fix async methods 2026-04-17 18:56:53 +02:00
Samuele E. Locatelli (W11-AI) 0167cc9142 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-17 18:29:59 +02:00
Samuele E. Locatelli (W11-AI) 59b49084f9 Moproposte x ottimizzare input (da testare) 2026-04-17 18:29:55 +02:00
Samuele Locatelli eba119cb47 Merge tag 'AggiuntaMetodiIoc_06' into develop
Update metodi vari + completamento autoOdl + fix minori da testare
2026-04-17 09:13:32 +02:00
Samuele Locatelli 767bb155f6 Merge branch 'Release/AggiuntaMetodiIoc_06' 2026-04-17 09:13:15 +02:00
Samuele Locatelli 74ead47e3f Ancora minor fix performances... 2026-04-17 09:12:56 +02:00
Samuele Locatelli cf060cc387 Completato fix metodo AutoODL (da testare!) 2026-04-17 08:55:00 +02:00
Samuele Locatelli c0552e87a8 Update gestione titolo paretodetail + fix controller 2026-04-16 18:35:10 +02:00
Samuele Locatelli 8e53e21189 Modifiche x metodo input (portato async) 2026-04-16 18:29:44 +02:00
Samuele Locatelli 058fb40e57 Merge tag 'AggiuntaMetodiIoc_05' into develop
Aggiunta metodi x creazione/migrazione DB alla partenza
2026-04-16 18:07:35 +02:00
Samuele Locatelli 9e4b044761 Merge branch 'Release/AggiuntaMetodiIoc_05' 2026-04-16 18:07:18 +02:00
Samuele Locatelli 6b5db421ad Aggiunta migration/creazione DB Utls 2026-04-16 18:06:18 +02:00
Samuele Locatelli 359ffc4676 Merge tag 'AggiuntaMetodiIoc_04' into develop
Update con gestione fix appsettings.json + fix display pieChart con
elementi troppo piccoli
2026-04-16 16:05:32 +02:00
Samuele Locatelli 486add5955 Merge branch 'Release/AggiuntaMetodiIoc_04' 2026-04-16 16:05:03 +02:00
Samuele Locatelli 5885d88aff Update display pareto PieChart 2026-04-16 16:04:39 +02:00
Samuele Locatelli a4c9419180 Fix chiavi configurazione IOC x WebConfigSetter 2026-04-16 15:46:22 +02:00
Samuele Locatelli b9199f0e37 Merge tag 'AggiuntaMetodiIoc_03' into develop
Completamento metodi base da test IIS01
2026-04-16 12:26:23 +02:00
Samuele Locatelli 5e4555dcdf Merge branch 'Release/AggiuntaMetodiIoc_03' 2026-04-16 12:26:13 +02:00
Samuele Locatelli bc37f08a11 Completo metodi attuali!!! 2026-04-16 12:16:14 +02:00
Samuele Locatelli dbf5e4fee8 Aggiunto anche obj non da scrivere... 2026-04-16 11:55:15 +02:00
Samuele Locatelli 663f02d9b7 Aggiunto getObjItems2Write 2026-04-16 11:50:41 +02:00
Samuele Locatelli 3eca7da2e9 OK metodo PODLNext 2026-04-16 11:35:58 +02:00
Samuele Locatelli ac5ccc3a13 Aggiunta 2 metodi detLast + check modelli dati 2026-04-16 10:37:07 +02:00
Samuele Locatelli c4f2392a5a Fix modelli e gestione recupero enabled async 2026-04-16 09:49:26 +02:00
Samuele Locatelli 8cc9abcaa4 Merge tag 'AggiuntaMetodiIoc_02' into develop
Update gestione IOC con altri metodi + fix async x enabled
2026-04-16 08:44:08 +02:00
Samuele Locatelli 82ec12ed36 Merge branch 'Release/AggiuntaMetodiIoc_02' 2026-04-16 08:43:54 +02:00
Samuele Locatelli 8cf048fb4e Miglioramento enabled (HOPE!!!) 2026-04-16 08:40:44 +02:00
Samuele Locatelli 875b0109f3 Update versone 2026-04-16 08:17:41 +02:00
Samuele Locatelli 6d2d1603af Aggiunta metodo x snapshot quotdiani FluxLog 2026-04-16 08:17:34 +02:00
Samuele Locatelli b0e960be84 Da completare che non compila... 2026-04-15 19:35:31 +02:00
Samuele Locatelli 7a4d5cbe2f Aggiunta metodo EvListJson 2026-04-15 19:19:06 +02:00
Samuele Locatelli 69db4bed94 Aggiunta GetXdlNum 2026-04-15 18:43:51 +02:00
Samuele Locatelli a0eeac59f0 Aggiunta metodo GetIdlePeriod 2026-04-15 18:41:22 +02:00
Samuele Locatelli 257ddbf775 Fix metodo GetArtNum 2026-04-15 18:11:08 +02:00
Samuele Locatelli 707e7d8f31 Merge remote-tracking branch 'origin/develop' 2026-04-15 17:39:13 +02:00
Samuele Locatelli 0e4efcd209 Aggiunta model x DecNumArt da gestire x IOC 2026-04-15 17:39:03 +02:00
Samuele Locatelli 37a73ee2fe Update metodi task2exe 2026-04-15 17:07:03 +02:00
Samuele Locatelli 3bbb952b49 Aggiunta metodi sendReboot 2026-04-15 15:23:13 +02:00
Samuele Locatelli 5ef5a9fd12 Fix logica setPzCounter per check pèresenza chiave redis 2026-04-15 14:45:49 +02:00
Samuele Locatelli bf1973e425 update timing cache stato prod x setPzCount 2026-04-15 12:53:53 +02:00
Samuele Locatelli 1e969171a8 Update salvataggio conf... 2026-04-15 12:35:51 +02:00
Samuele Locatelli 84bd09a01c Prova moditica metodo setPzCount 2026-04-15 08:58:57 +02:00
Samuele Locatelli e5178e19fc Aggiunta metodi FixDayOdl (con/senza conf pezzi) 2026-04-15 08:23:10 +02:00
Samuele Locatelli 732449f516 aggiunta metodo sendAlarmBankUpdate 2026-04-15 07:25:21 +02:00
Samuele Locatelli 6a2bd0465c Update conf x FluxLog in IOC 2026-04-14 16:13:40 +02:00
Samuele Locatelli 53bf6ba5b3 Aggiunta metodi ulog 2026-04-14 16:10:50 +02:00
Samuele Locatelli a6d49bae99 Fix calcolo DurataTimespan con inizio null... 2026-04-14 09:02:30 +02:00
Samuele Locatelli 1b48ee24fa Aggiunta metodi processin FLog 2026-04-14 09:00:41 +02:00
Samuele Locatelli 683b326194 Fix errore serialzzazione durata null... 2026-04-14 07:48:46 +02:00
Samuele Locatelli ea6da9e282 Aggiunta metodo M2IOB + reorg codeMaid 2026-04-14 07:14:50 +02:00
Samuele Locatelli be960f9e3f update SetCounter: usato metodo async... 2026-04-13 18:47:08 +02:00
Samuele Locatelli 840dbd0125 Correzione gestione CodArticolo 2026-04-13 18:36:19 +02:00
Samuele Locatelli 39e2832b93 Aggiunta SaveMachineIobConf 2026-04-13 18:27:29 +02:00
Samuele Locatelli 4a7b41dde7 Aggiunta chiamata getCurrOdlQtaReq 2026-04-13 18:13:22 +02:00
Samuele Locatelli 7e32367791 Correzione: chiave cercata errata... 2026-04-13 18:10:46 +02:00
Samuele Locatelli 9fc55c2743 Fix chiave dati macchina da IO NameSpace... 2026-04-13 18:06:45 +02:00
Samuele Locatelli 145399b6d2 Fix errore data-ora ODL in retrieve stored multirow in single record 2026-04-13 17:59:45 +02:00
Samuele Locatelli aac43ec24d Aggiunta metodo update objItems 2026-04-13 17:13:27 +02:00
Samuele Locatelli dc07d77e20 Aggiunta metodo GetCurrOdlStart x IOC 2026-04-13 16:26:39 +02:00
Samuele Locatelli 66cbbc4ee9 Update cachhe x salvataggio contapezzi + metodo x savePzIncr (da migrare) 2026-04-13 15:59:31 +02:00
Samuele Locatelli 8e7cfe3150 Modifica pesantre x prima versione INPUT abilitato cu IOC... forzo! 2026-04-13 12:38:42 +02:00
Samuele Locatelli 7b8352f65d Bozza input + modalità sync x saveCounter 2026-04-13 07:56:16 +02:00
Samuele Locatelli c1460e25e9 Refresh metodo (da completare) 2026-04-11 13:04:17 +02:00
Samuele Locatelli 55f42ed03c Aggiunto metodo SetCounter 2026-04-11 12:53:15 +02:00
Samuele Locatelli ac48bc5a21 Aggiunta metodo getTask2Exe con gestione async estesa 2026-04-11 12:21:28 +02:00
Samuele Locatelli 76d3d6f9e6 Aggiunta metodo getCurrODL 2026-04-11 10:43:02 +02:00
Samuele Locatelli 3c36c24ddb Rimozione MARS x EfCore8 (non + utile) per migliorare log e gestione transazioni 2026-04-11 10:11:47 +02:00
Samuele Locatelli c4df2bf0ce Fix timing controller pz (testing TTL) 2026-04-11 10:02:36 +02:00
Samuele Locatelli 255f9556ee Fix naming metodo async StatoProdMacchinaAsync x TAB3 2026-04-11 09:47:17 +02:00
Samuele Locatelli 7762e8e5d6 Fix preliminare metodi getTC 2026-04-11 09:36:23 +02:00
Samuele Locatelli c54f491bdd Fix pareto top orario 2026-04-10 17:54:06 +02:00
Samuele Locatelli d6bc7e313a Correzione codici ritorno chiamate IOB 2026-04-10 17:50:14 +02:00
Samuele Locatelli d37618feb5 Update ordinamenti weight + refresh prod 2026-04-10 17:31:54 +02:00
Samuele Locatelli 7812b04369 Aggiunta secondo metodo (da testare) 2026-04-10 17:15:17 +02:00
Samuele Locatelli 899fbb9ab9 Update prima versione chart x IO/IOC 2026-04-10 16:39:44 +02:00
Samuele Locatelli 4eff768b53 Aggiunta dto x preparare output charting 2026-04-10 15:49:24 +02:00
Samuele Locatelli dc1bac2237 Aggiunto retrieve dati (da convertire x grafico) 2026-04-10 12:41:16 +02:00
Samuele Locatelli d08f8eaa7e Ancora update selezione sistemato 2026-04-10 12:35:57 +02:00
Samuele Locatelli 98cbf96077 Update ID x fix errori selezione 2026-04-10 12:34:09 +02:00
Samuele Locatelli 2b8a5313cd Ancora update selezione valori pareto 2026-04-10 12:16:35 +02:00
Samuele Locatelli 43fd04e289 Aggiunto controllo selezione valori statistiche 2026-04-10 12:01:07 +02:00
Samuele Locatelli 6fbe53b8b9 Fix metodo impostanuoe nuova weight 2026-04-10 11:53:51 +02:00
Samuele Locatelli 844d22ddf3 Modifica x
- editabilità bilanciamento route config
- riduzione log controller IOB
- review iniziale metodi
2026-04-10 11:47:33 +02:00
Samuele Locatelli bf79ae7477 Inizio pagina route configuration 2026-04-10 10:35:30 +02:00
Samuele Locatelli 3ced78bcad Ancora update display statistiche 2026-04-10 10:03:15 +02:00
Samuele Locatelli 3d61c0924b Fix chiamata awaits 2026-04-10 10:00:57 +02:00
Samuele E. Locatelli (W11-AI) b2dec4d903 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-10 09:56:53 +02:00
Samuele E. Locatelli (W11-AI) b2433a9775 Update modalità recupero dati da redis 2026-04-10 09:56:34 +02:00
Samuele Locatelli efd7fab27c Update display statistiche chiamata 2026-04-10 09:55:53 +02:00
Samuele Locatelli f612eb7cdd Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-10 08:52:15 +02:00
Samuele Locatelli 0a0255e24d Aggiunta precondizioni e componenti x ChartJS 2026-04-10 08:52:13 +02:00
Samuele E. Locatelli (W11-AI) b664ad784e Aggiunta metodi gestione valori weight da memoria/redis (da testare) 2026-04-10 08:50:55 +02:00
Samuele Locatelli 819e6e02f7 Update stats page 2026-04-10 08:17:34 +02:00
Samuele Locatelli d160f7e4f2 Update display Call Stats (da completare con grafici) 2026-04-09 18:46:59 +02:00
Samuele Locatelli bb4d10daa0 Modifica con dettaglio statistiche aggregate + cambio metodo undek a "/" come default 2026-04-09 18:39:15 +02:00
Samuele Locatelli 09204750c9 Update stats: fix selezione in blocco x macchine 2026-04-09 17:49:38 +02:00
Samuele Locatelli 936feccec9 Update IOC x stats preliminari 2026-04-09 16:49:43 +02:00
Samuele Locatelli f1320c971f Update home page 2026-04-09 15:54:50 +02:00
Samuele Locatelli e47b2df5d2 Aggiunta pagine status x MP-IOC (preliminare) 2026-04-09 15:48:56 +02:00
Samuele Locatelli 7ad6468969 Update gestione tipo report dinamico 2026-04-09 10:46:11 +02:00
Samuele Locatelli c329437700 Bozza detail upsert da testare 2026-04-09 07:10:14 +02:00
Samuele Locatelli d83353bc82 Upsert con merge x dati aggregati (da provare) 2026-04-08 19:33:03 +02:00
Samuele Locatelli 1122b57f4c disattivata cancellazione chiavi!!! 2026-04-08 17:52:07 +02:00
Samuele Locatelli 0b5d00e4b8 Update flush x scrittura DB Daily (da verificare...) 2026-04-08 17:50:54 +02:00
Samuele Locatelli ccb807d8fc Update conf x flush 2026-04-08 13:17:30 +02:00
Samuele Locatelli 7f825f2a09 ancora update metodi DbFlush 2026-04-08 13:13:40 +02:00
Samuele Locatelli d6d7b9ff61 update CalcService + inizio fix DbService locale 2026-04-08 13:13:32 +02:00
Samuele Locatelli 2279ac009b Esclusione temporanea classe x compilare update x vedere se min/max redis diventano validi 2026-04-08 12:02:10 +02:00
Samuele Locatelli 8bb31472df update parziale DbFlushService 2026-04-08 11:29:45 +02:00
Samuele Locatelli b4291bad33 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-08 11:12:50 +02:00
Samuele Locatelli ec787f5d45 Update logica registrazione dati daily x min/max duration 2026-04-08 11:12:48 +02:00
Samuele E. Locatelli (W11-AI) 4fbc11438b Test update logica Db scan redis 2026-04-08 11:12:24 +02:00
Samuele Locatelli 421a9d769e Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-08 10:21:05 +02:00
Samuele Locatelli 98a11dfaf5 fuix typo in Calc 2026-04-08 10:21:02 +02:00
Samuele E. Locatelli (W11-AI) fe6f0f0e7c Update DbFlushService 2026-04-08 10:20:48 +02:00
Samuele E. Locatelli (W11-AI) 3b3d611962 Continuo fix metriche (maybe) 2026-04-08 10:10:18 +02:00
Samuele E. Locatelli (W11-AI) 5da5639f48 Update metodo di scrittura sul DB dei dati statistiche 2026-04-08 09:47:46 +02:00
Samuele Locatelli f8d5d1820c Update modalità salvataggio daily data IOC 2026-04-08 09:20:40 +02:00
Samuele Locatelli 22ff20584c Cleanup metodi vari 2026-04-08 09:04:41 +02:00
Samuele Locatelli 7728907b67 Update gestione routing dati vs redis x record destination 2026-04-08 08:57:37 +02:00
Samuele Locatelli 831ab1de20 blocco step 2 di gestione datistatistiche da Redis a DB 2026-04-08 08:27:13 +02:00
Samuele Locatelli 1cdac18192 Revisione modello dati + migration, bloccato invio dati al DB per revisione preliminare metodi 2026-04-08 08:26:05 +02:00
Samuele Locatelli db4f5d7d15 Correzione migrations utils stats 2026-04-08 07:02:56 +02:00
Samuele E. Locatelli (W11-AI) 5cb4230156 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-07 18:46:30 +02:00
Samuele E. Locatelli (W11-AI) 6d575da0b7 Modifica upsert dati 2026-04-07 18:46:28 +02:00
Samuele E. Locatelli (W11-AI) f86db5ff41 Update metodi cancellazione 2026-04-07 12:47:55 +02:00
Samuele Locatelli 9966a8335c Correzione progetto STATS x nuova naming convention 2026-04-07 12:42:23 +02:00
Samuele Locatelli 05b771badb Fix commento xu stop dati storici 2026-04-07 12:34:41 +02:00
Samuele Locatelli 45acc78dc9 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-07 12:30:57 +02:00
Samuele Locatelli 4676f96889 Fix chiamata program.cs x servizi scopet/singleton x flushDb 2026-04-07 12:30:55 +02:00
Samuele E. Locatelli (W11-AI) 5d23e63512 recupero key storiche da redis 2026-04-07 12:25:02 +02:00
Samuele E. Locatelli (W11-AI) ee5fe87802 update con log x rimozione valori da redis se scritti sul DB 2026-04-07 12:14:38 +02:00
Samuele Locatelli 6e9bad7247 fix metodi redis x cancellazione e check exists 2026-04-07 11:59:55 +02:00
Samuele E. Locatelli (W11-AI) 76737c5f85 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-07 11:56:08 +02:00
Samuele E. Locatelli (W11-AI) bf57560b30 Update metodi calcolo e flush statistiche 2026-04-07 11:56:06 +02:00
Samuele Locatelli 2d6cdb1a89 Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-07 11:41:43 +02:00
Samuele Locatelli 7014e5d685 Update migration 2026-04-07 11:41:41 +02:00
Samuele E. Locatelli (W11-AI) f7e0dc87fd prima rev x flushService 2026-04-07 11:41:31 +02:00
Samuele Locatelli 3dcbfdac63 correzioni metodi x compilare 2026-04-07 11:32:18 +02:00
Samuele E. Locatelli (W11-AI) d3c22d1b03 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/mes/mapo/mapo-core into develop 2026-04-07 11:27:18 +02:00
Samuele E. Locatelli (W11-AI) f94a105443 Update parziale al metricDbFlushService 2026-04-07 11:27:15 +02:00
Samuele Locatelli f7bb550189 Update x gestioen min/max 2026-04-07 11:26:34 +02:00
Samuele Locatelli 0c6e2f5c99 update conf route x calcolo min/max statistiche 2026-04-07 11:26:32 +02:00
Samuele Locatelli 45cb6b9f59 Fix integrazione preliminare servizi utils.stats x IOC:
- aggiunta migrations
- correzioni versione ef6 da ef8
- correzioni init varie
2026-04-07 10:30:04 +02:00
Samuele Locatelli 31e786b9fd Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2026-04-07 09:31:25 +02:00
Samuele Locatelli 1660919521 update in debug delle chaimate 2026-04-07 09:27:51 +02:00
Samuele E. Locatelli (W11-AI) 9c0dc1ef19 Bozza aggiunta gestione salvataggio DbMetriche (da verificare compilazione) 2026-04-07 07:14:21 +02:00
Samuele E. Locatelli (W11-AI) fb12ccc028 Aggiunta modello dati statistiche e reposiitory/service per implementarli (da validare) 2026-04-04 18:23:52 +02:00
Samuele Locatelli 80b87cad63 Aggiunta version API 2026-04-04 10:15:22 +02:00
Samuele Locatelli bf2d937f48 Update log x intercettare richieste IOC 2026-04-04 10:07:17 +02:00
Samuele Locatelli 566350bc28 Update flush service x statistiche su REDIS 2026-04-04 09:43:20 +02:00
Samuele Locatelli 246776f1a1 Bozza registrazione statistiche routing 2026-04-03 19:01:05 +02:00
Samuele Locatelli b62596fe6f Inizio gestione routing (qualche warning ma funziona) 2026-04-03 18:33:51 +02:00
Samuele Locatelli 8373cbc790 Completo prima release metodi con YARP ma non è ancora ok passaggio chiamate 2026-04-03 11:54:46 +02:00
Samuele Locatelli 0981d2a887 Correzione publish con dotnet 8, fix static landing page (da ripensare?) 2026-04-03 10:04:05 +02:00
Samuele Locatelli 64ed5cffb2 MAPO-IOC: inizio configurazione x porting metodi su nuova classe IOC 2026-04-03 09:40:21 +02:00
Samuele Locatelli 8134102fbc Merge tag 'Spec_FermiRepa_03' into develop
Aggiunta fermi reparto qualificando tipo FermoReparto + inizio/fine
2026-03-23 09:02:50 +01:00
Samuele Locatelli 4a287e9138 Merge branch 'Release/Spec_FermiRepa_03' 2026-03-23 08:50:28 +01:00
Samuele Locatelli 1d78a73def Fix token descrizione evento inizio/fine gestione fermi reparto 2026-03-23 08:49:47 +01:00
Samuele Locatelli 7b275a693b Merge tag 'Spec_FermiRepa_02' into develop
pubbliazione in prod modifiche fermi reparto SPEC
2026-03-20 15:36:23 +01:00
Samuele Locatelli 59f3642477 Merge branch 'Release/Spec_FermiRepa_02' 2026-03-20 15:36:13 +01:00
Samuele Locatelli 6e3a64049a Fix deselezione post update fermate reparto 2026-03-20 15:28:05 +01:00
Samuele Locatelli 7cf9b7c355 Refresh pubblicazione per ritorno stato prec 2026-03-20 12:09:17 +01:00
Samuele Locatelli 0a0c8b557d Abbozata pagina ProdPlanner (SOLO BOZZA!!!) 2026-03-20 07:50:01 +01:00
Samuele Locatelli 7a2ae4c2cd Bozza gestione ripresa stato prec in SPEC (da stop per fermo reparto) 2026-03-20 07:49:09 +01:00
Samuele Locatelli 95ffa4356b Merge tag 'DotNet8_SPEC_TAB3_02' into develop
Update con registrazione info utente hce effettua operazione SPEC  sui
fermi
2026-02-26 12:58:25 +01:00
Samuele Locatelli 6a839bb4a4 Merge branch 'Release/DotNet8_SPEC_TAB3_02' 2026-02-26 12:58:05 +01:00
Samuele Locatelli c72f200cfc Refresh 2026-02-26 12:57:47 +01:00
Samuele Locatelli 1881e6743a Update SPEC con gestione record utente manuale 2026-02-26 11:27:44 +01:00
Samuele Locatelli 9eb40dcca1 Merge tag 'DotNet8_SPEC_TAB3' into develop
Rilascio versioni SPEC e TAB3 in DotNet8.0, da testare come install
2026-02-25 19:52:47 +01:00
Samuele Locatelli c2091623c7 Merge branch 'Release/DotNet8_SPEC_TAB3' 2026-02-25 19:52:30 +01:00
Samuele Locatelli 0a2fd52dec Update target a net8.0 2026-02-25 19:50:13 +01:00
Samuele Locatelli c4a521c81e Fix reset tab3 x Blazored storage 2026-02-25 19:40:38 +01:00
Samuele Locatelli 4890692531 Rimozione Blazored session/local storage, implementazione servizi custom in MP.Data 2026-02-25 19:09:00 +01:00
Samuele Locatelli 5f9dd15b82 Correzione profili pubblicazione x net8 (non basta csproj) 2026-02-25 12:07:21 +01:00
Samuele Locatelli ce3b0df7fe Correzione comportamento timer pausa/resume 2026-02-25 11:51:44 +01:00
Samuele Locatelli eedb0334f5 Fix catena updateisplay NavMenu 2026-02-25 11:41:19 +01:00
Samuele Locatelli 93c2f8ea0c Rrefresh automatico stati Feeder 2026-02-25 11:27:59 +01:00
Samuele Locatelli 7802babd0e SPEC: update dotnet8 (parziale...) 2026-02-25 10:47:53 +01:00
Samuele Locatelli c1eb6d8aa3 Fix IOC build 2026-02-25 10:22:40 +01:00
Samuele Locatelli bf2dbfcc65 Fix recupero dossier: limite a last 1000 2026-02-25 10:13:28 +01:00
Samuele Locatelli 259dd14062 Update metodi x usare tracking con Activity vs stopwatch 2026-02-25 09:59:03 +01:00
Samuele Locatelli f9565c09fb Completata pagina force dichiarazione da SPEC, da testare... 2026-02-24 19:11:58 +01:00
Samuele Locatelli e70d2b1915 Aggiunto display stato MSE 2026-02-24 17:50:28 +01:00
Samuele Locatelli e8999cfb8f Update con testo scrolling 2026-02-24 16:48:39 +01:00
Samuele Locatelli 4f6edcae47 refresh fermate 2026-02-24 16:37:30 +01:00
Samuele Locatelli 39e7a38001 Update gestione macchine/fermi 2026-02-24 15:41:50 +01:00
Samuele Locatelli 3ea3193ba4 Refresh con check setup Staging 2026-02-24 15:07:31 +01:00
Samuele Locatelli e0cd9baf37 Fix proj x inclusione nuget OpenTelemetry 2026-02-24 12:21:30 +01:00
Samuele Locatelli 16df1b04b3 inizio pag rep-stop 2026-02-24 12:13:01 +01:00
Samuele Locatelli cefaee00da Modifica x telemetria Uptrace in DEV 2026-02-24 12:12:31 +01:00
Samuele Locatelli 0232114d18 Merge tag 'UpdateInProdDataOdl' into develop
Update x test IIS03
2025-11-14 16:53:01 +01:00
Samuele Locatelli b70830265e Merge branch 'Release/UpdateInProdDataOdl' 2025-11-14 16:52:28 +01:00
Samuele Locatelli 398a09f3ec Force data TAB3 x inizio ODL da provare 2025-11-13 12:26:09 +01:00
Samuele Locatelli eb521cae22 Merge tag 'FixRedisFlush_02' into develop
Update nuget + flush x IOC, INVE e PROG
2025-09-12 11:39:54 +02:00
Samuele Locatelli f4e35dffbd Merge branch 'Release/FixRedisFlush_02' 2025-09-12 11:39:43 +02:00
Samuele Locatelli e9c45da195 Update progetti meno usati: INVE, IOC, PROG 2025-09-12 11:39:20 +02:00
Samuele Locatelli f0c30514ad Merge tag 'FixRedisFlush_01' into develop
Fix massivo metodi FLuxhRedisCache x ottimizzazione pulizia info
2025-09-12 11:29:02 +02:00
Samuele Locatelli 778fc73c24 Merge branch 'Release/FixRedisFlush_01' 2025-09-12 11:28:26 +02:00
Samuele Locatelli 932e6477d3 Update massivo CORE x gestione REDIS
- nuova gestioen flushPattern redis (solo master e async e con scan + furbo)
- update nuget
2025-09-12 11:27:32 +02:00
Samuele Locatelli 0422946069 Merge tag 'Tab3_FixCloseOdl_01' into develop
Modifica chiamate chiusura ODL forzando dataOra chiusura + delay 50ms
2025-09-10 15:20:37 +02:00
Samuele Locatelli f3e62c82dd Merge branch 'Release/Tab3_FixCloseOdl_01' 2025-09-10 15:19:48 +02:00
Samuele Locatelli 32d370fbd3 Update TAB3:
- inserita dataora forzata x chiusura ODL
- ritardo 50ms prima di procedere
2025-09-10 15:19:21 +02:00
Samuele Locatelli 808e2a0b15 Merge tag 'Tab3_FixMachSel_03' into develop
Fix in prod versione TAB3 x doppia tavola
2025-09-09 17:17:51 +02:00
Samuele Locatelli 9cef93a3e7 Merge branch 'Release/Tab3_FixMachSel_03' 2025-09-09 17:17:42 +02:00
Samuele Locatelli ba0882d4b3 Fix gestione sel doppia tav 2025-09-09 17:14:58 +02:00
Samuele Locatelli 8a06e7bc83 Merge tag 'Tab3_FixMachSel_02' into develop
Completata gestione selezione ODL in storico conferme prod
2025-09-09 12:10:22 +02:00
Samuele Locatelli 58bfb72a9f Merge branch 'Release/Tab3_FixMachSel_02' 2025-09-09 12:10:08 +02:00
Samuele Locatelli a4bb632c22 Fix display odl in conferme produzione 2025-09-09 12:09:51 +02:00
Samuele Locatelli 4c37be68fb Fix catena sel idxMaccSub 2025-09-09 11:49:43 +02:00
Samuele Locatelli 50ddc7eecd Merge tag 'FixPodlKit_01' into develop
Fix PODL kit + fix selettore doppia tavola TAB3 x ODL lunghi
2025-09-08 17:52:00 +02:00
Samuele Locatelli 503a69ed01 Merge branch 'Release/FixPodlKit_01' 2025-09-08 17:51:46 +02:00
Samuele Locatelli c6cb0c487f Fix selettore macchina doppiatavola 2025-09-08 17:49:54 +02:00
Samuele Locatelli 25a6e195f0 Fix servizi message service se MatrOpr missing 2025-09-08 17:49:47 +02:00
Samuele Locatelli 90e4e18ce5 SPEC:
- fix filtro in PODL-KIT
2025-09-02 14:55:49 +02:00
Samuele Locatelli b970eb06a9 Merge tag 'FixChartDisplay_01' into develop
Fix problema chart display: chiamato troppo presto si pianta
2025-08-05 15:47:32 +02:00
Samuele Locatelli 5dc4582118 Merge branch 'Release/FixChartDisplay_01' 2025-08-05 15:47:06 +02:00
Samuele Locatelli fb77bedb4c Fix display chart STATS che si pianta se chiamato troppo presto 2025-08-05 15:46:27 +02:00
Samuele Locatelli 3d0791c4cb Merge tag 'UpdateConfProd_01' into develop
Update ordinamento pag conf prod + fix display post conferma
2025-07-31 17:45:51 +02:00
Samuele Locatelli af535fd526 Merge branch 'Release/UpdateConfProd_01' 2025-07-31 17:45:34 +02:00
Samuele Locatelli 067363a1cb update comportmaneto conferme prod 2025-07-31 09:45:09 +02:00
Samuele Locatelli acd014d01d Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2025-07-31 08:09:11 +02:00
Samuele Locatelli 80bb8214eb Fix reset cache post conferma prod 2025-07-31 08:08:21 +02:00
Samuele E. Locatelli dafbdc452f Merge tag 'UpdateConfProd_02' into develop
Forzato riordinamento filtro conferme x ODL
2025-07-29 09:34:28 +02:00
Samuele E. Locatelli 25413a22c0 Merge branch 'release/UpdateConfProd_02' 2025-07-29 09:34:04 +02:00
Samuele E. Locatelli cf7e669397 Fix ordinamento conferme se filtrate x ODL 2025-07-29 09:33:24 +02:00
Samuele E. Locatelli 459e499863 Merge tag 'UpdateConfProd_01' into develop
Update gestione display info conferma prod x TAB3
2025-07-28 15:08:46 +02:00
Samuele E. Locatelli 89dc659401 Merge branch 'release/UpdateConfProd_01' 2025-07-28 15:08:07 +02:00
Samuele E. Locatelli 2fcbe4c158 Aggiunta opzioni da config x visualizzaione conf pezzi + update su IIS01 2025-07-28 15:07:02 +02:00
Samuele Locatelli 8e36976860 TAB3: review tabella elenco conferme (come controlli) 2025-07-24 17:34:11 +02:00
Samuele Locatelli b4fd22c2e5 Typo reorg 2025-07-24 11:44:10 +02:00
Samuele Locatelli 85a27def5d Fix problema adapter STATS 2025-07-24 11:24:19 +02:00
Samuele Locatelli a4b580f4bd Effettuata riscrittura metodi Dispose sui vari servizi e controller 2025-07-24 10:43:47 +02:00
Samuele Locatelli 6ff1da7c66 Update x evitare derive memoria 2025-07-23 19:52:58 +02:00
Samuele Locatelli 789dce59fe Merge tag 'AddConfProd_01' into develop
Aggiunta gestione elenco conferme prod su TAB3
2025-07-23 19:30:25 +02:00
Samuele Locatelli 960d55ab18 Merge branch 'Release/AddConfProd_01' 2025-07-23 19:29:56 +02:00
Samuele Locatelli 2deb5238b2 TAB3:
- aggiunta pagina elenco conferme prod
2025-07-23 19:29:01 +02:00
Samuele Locatelli b18b770725 Merge tag 'StatTaskAndNumrecFix_03' into develop
Update gestioen task: cache redis da config...
2025-07-16 14:03:12 +02:00
Samuele Locatelli f747844332 Merge branch 'Release/StatTaskAndNumrecFix_03' 2025-07-16 14:02:38 +02:00
Samuele Locatelli 798645cb8d Update gestione task: da conf parametrico se usare redis cache o meno (default: no) 2025-07-16 14:02:16 +02:00
Samuele Locatelli d85ccdc683 Merge tag 'StatTaskAndNumrecFix_02' into develop
Code cleanup
2025-07-16 11:58:29 +02:00
Samuele Locatelli ce3f50910c Merge branch 'Release/StatTaskAndNumrecFix_02' 2025-07-16 11:58:22 +02:00
Samuele Locatelli e6162fa099 Pulizia codice trend analysis + fix wait udpate task 2025-07-16 11:58:02 +02:00
Samuele Locatelli 1b2794c6bb Merge tag 'StatTaskAndNumrecFix_01' into develop
Fix gestione edit task (async) + calcolo num record con corretta
valutazione minimo valori
2025-07-16 11:54:40 +02:00
Samuele Locatelli b1aec45832 Merge branch 'Release/StatTaskAndNumrecFix_01' 2025-07-16 11:54:13 +02:00
Samuele Locatelli c1e0fff1b1 Update gestione TASK con attesa await 2025-07-16 11:53:26 +02:00
Samuele Locatelli 11d90e4194 Merge tag 'AddForceReloadOnOdl_06' into develop
Update a 1000ms cambio sel idxMacchinaSub
2025-07-11 17:42:35 +02:00
Samuele Locatelli 9f4cae384a Merge branch 'Release/AddForceReloadOnOdl_06' 2025-07-11 17:41:18 +02:00
Samuele Locatelli d9ec5c22c5 aumento a 1000ms delay cambio macchina 2025-07-11 17:41:01 +02:00
Samuele Locatelli b0d92a13fa Merge tag 'AddForceReloadOnOdl_05' into develop
Raddoppiata attesa x reload dati testata macchina
2025-07-11 17:14:18 +02:00
Samuele Locatelli 72e6f4a31a Merge branch 'Release/AddForceReloadOnOdl_05' 2025-07-11 17:14:06 +02:00
Samuele Locatelli 4cac30bc26 raddoppiata attesa cambio val tavola selezionata 2025-07-11 17:12:19 +02:00
Samuele Locatelli 8b0f3db2bf Merge tag 'AddForceReloadOnOdl_04' into develop
Fix gestione display conf produzione che non sparisce
2025-07-11 16:45:44 +02:00
Samuele Locatelli bc3851bfa2 Merge branch 'Release/AddForceReloadOnOdl_04' 2025-07-11 16:45:27 +02:00
Samuele Locatelli a88f9d888f Fix conf prod che resta aperto troppo 2025-07-11 16:45:10 +02:00
Samuele Locatelli 63cc08f21d Merge tag 'AddForceReloadOnOdl_03' into develop
Tolto notifica su cambio thread
2025-07-11 11:26:30 +02:00
Samuele Locatelli a526e72817 Merge branch 'Release/AddForceReloadOnOdl_03' 2025-07-11 11:26:12 +02:00
Samuele Locatelli 9233f64868 Tolto notifica dati invalidati 2025-07-11 11:25:56 +02:00
Samuele Locatelli d8f97dce09 Merge tag 'AddForceReloadOnOdl_02' into develop
Update modalità refresh post udpate ODL
2025-07-11 11:13:50 +02:00
Samuele Locatelli 5dcb7c570b Merge branch 'Release/AddForceReloadOnOdl_02' 2025-07-11 11:13:42 +02:00
Samuele Locatelli f84935a7a1 Rimesso pausa lunga + test altra modalità reset dati 2025-07-11 11:13:24 +02:00
Samuele Locatelli 7725573738 Merge tag 'AddForceReloadOnOdl_01' into develop
Aggiunta modalità refresh esplicito ODL
2025-07-11 10:52:23 +02:00
Samuele Locatelli d332431012 Merge branch 'Release/AddForceReloadOnOdl_01' 2025-07-11 10:51:32 +02:00
Samuele Locatelli 38ee9913b1 Update metodi refresh 2025-07-11 10:50:45 +02:00
Samuele Locatelli 60588509c6 Update catena update post conferme ODL 2025-07-11 10:43:58 +02:00
Samuele Locatelli 1769ba2b51 Gestione dati invalidati x setup e display articolo in selettore 2025-07-11 10:33:09 +02:00
Samuele Locatelli c3c3423cd3 Merge tag 'Update202506_12' into develop
Aggiunto delay iniziale x forzare display pagina processing in fase di
conferma pz
2025-07-10 16:18:32 +02:00
Samuele Locatelli 10de735c30 Merge branch 'Release/Update202506_12' 2025-07-10 16:18:16 +02:00
Samuele Locatelli bc68c1578d TAB3:
- aggiunto delay iniziale post conferma pz x mostrare subito pagina esecuzione
2025-07-10 16:17:54 +02:00
Samuele Locatelli 95e9e54921 Merge tag 'Update202506_11' into develop
Update ricerca
2025-07-10 09:00:43 +02:00
Samuele Locatelli 92a9e17d0a Merge branch 'Release/Update202506_11' 2025-07-10 09:00:38 +02:00
Samuele Locatelli 6f889ec557 refresh ricerca 2025-07-10 09:00:21 +02:00
Samuele Locatelli dd7a2e9359 Merge tag 'Update202506_10' into develop
Update display list IOB
2025-07-10 08:38:09 +02:00
Samuele Locatelli f62380d008 Merge branch 'Release/Update202506_10' 2025-07-10 08:37:59 +02:00
Samuele Locatelli 2f45acb487 Update display IOB-INFO 2025-07-09 14:37:28 +02:00
Samuele Locatelli 03d5aee48d Merge tag 'Update202506_09' into develop
Update x tenere filtro energy e trend separati
2025-07-08 18:45:12 +02:00
Samuele Locatelli 3d37dc5771 Merge branch 'Release/Update202506_09' 2025-07-08 18:44:27 +02:00
Samuele Locatelli 4e42e8e03a Fix memoria selezione charts 2025-07-08 18:37:35 +02:00
Samuele Locatelli a9ac59cee4 Typo fix 2025-07-08 18:37:28 +02:00
Samuele Locatelli d1f3de4419 Merge tag 'Update202506_08' into develop
Fix gestore selezione macchina x Energy
2025-07-08 09:27:20 +02:00
Samuele Locatelli 89f2906ffc Merge branch 'Release/Update202506_08' 2025-07-08 09:27:04 +02:00
Samuele Locatelli 87c9f15de4 code cleanup 2025-07-08 09:26:49 +02:00
Samuele Locatelli 430f243e18 Ancora update sel macchine 2025-07-08 09:26:02 +02:00
Samuele Locatelli 2da9e293d9 Update comportamento energy su gestione selezione amcchine 2025-07-08 09:22:48 +02:00
Samuele Locatelli e20648591d Merge tag 'Update202506_07' into develop
Fix condizione ricerca pagina energy
2025-07-07 14:50:44 +02:00
Samuele Locatelli 83aec0d814 Merge branch 'Release/Update202506_07' 2025-07-07 14:50:35 +02:00
Samuele Locatelli 2b0f11cfbd Fix ricerca pagina Energy 2025-07-07 14:50:15 +02:00
Samuele Locatelli 3d9f02d7d7 Merge tag 'Update202506_06' into develop
Review caricamento record trend + possibilità rimozione
2025-07-07 12:02:42 +02:00
Samuele Locatelli f912572404 Merge branch 'Release/Update202506_06' 2025-07-07 12:02:27 +02:00
Samuele Locatelli 7cc8959b21 Aggiunto possibilità rimozione dati caricati da pareto 2025-07-07 12:00:33 +02:00
Samuele Locatelli cba5a35a61 bozza nuova lettura dati macchine 2025-07-07 11:36:46 +02:00
Samuele Locatelli 452e5500c5 Rivisto algoritmo calcolo num record x trend plot 2025-07-07 11:25:58 +02:00
Samuele Locatelli c17125afde Merge tag 'Update202506_05' into develop
Fix gestione max  impianti x trend page
2025-07-07 10:56:14 +02:00
Samuele Locatelli 9c2c1b4dc8 Merge branch 'Release/Update202506_05' 2025-07-07 10:54:56 +02:00
Samuele Locatelli a65ece8f2d Update conf maxDisplay da tabella 2025-07-07 10:54:35 +02:00
Samuele Locatelli 814de375ff Completata prima versione gestione impianti selezionati 2025-07-07 09:58:52 +02:00
Samuele Locatelli d45dd62401 Update comportamento filtro sel macchine 2025-07-07 09:40:45 +02:00
Samuele Locatelli f618891a47 Aggiunta modale selezione macchine (preliminare) 2025-07-07 08:10:14 +02:00
Samuele Locatelli 7f67bc1a39 Bozza aggiunta sel multiplo x macchine 2025-07-05 17:43:15 +02:00
Samuele Locatelli 3acf4e3bcc Merge tag 'Update202506_04' into develop
Aggiornamento FluxLog x connstring errata x calcolo DbInfo
2025-07-04 11:37:48 +02:00
Samuele Locatelli 593ea04ad9 Merge branch 'Release/Update202506_04' 2025-07-04 11:37:33 +02:00
Samuele Locatelli 1211ea8ac9 Fix connection string x FluxLog 2025-07-04 11:37:17 +02:00
Samuele Locatelli 5a361c0bb3 Merge tag 'Update202506_03' into develop
Fix conf IOB e calcolo size DB
2025-07-04 11:22:08 +02:00
Samuele Locatelli fc864a9b00 Merge branch 'Release/Update202506_03' 2025-07-04 11:21:58 +02:00
Samuele Locatelli 90b5681603 Fix calcolo size DB x LAND 2025-07-04 11:21:38 +02:00
Samuele Locatelli 0829144478 Inizio gestione calcolo spazio DB 2025-07-04 10:54:30 +02:00
Samuele Locatelli 4f841a09ad Fix controllo filtro (grafico) 2025-07-04 08:55:14 +02:00
Samuele Locatelli cd0927c281 Update (parziale) sel commesse 2025-07-03 18:57:59 +02:00
Samuele Locatelli 1a483b827d Update x compilazione metodi non Async 2025-07-03 15:58:47 +02:00
Samuele Locatelli da597729a0 Merge tag 'Update202506_02' into develop
Update x gestione nuove view locali stats + fix gestione gruppi in TASK
2025-07-03 15:45:58 +02:00
Samuele Locatelli 73b7c28db2 Merge branch 'Release/Update202506_02' 2025-07-03 15:45:45 +02:00
Samuele Locatelli 1f4b48ac8c TASK:
- Fix gestione Task su multi-gruppo
MacchineEnergy:
- update gestione nuove view
2025-07-03 15:45:23 +02:00
Samuele Locatelli 22668e8a8f Inizio modifiche TaskMan:
- migration x nuovo campo da gestire
- inizio divisione controllo TaskList x avere gestione gruppi
2025-07-03 13:02:10 +02:00
Samuele Locatelli 4662e48d65 Merge tag 'Update202506_01' into develop
Completata raccolta modifiche x versione giugno, con update gestione
dati chart energy + fix vari
2025-07-02 17:52:35 +02:00
Samuele Locatelli 37dad87c2a Merge branch 'Release/Update202506_01' 2025-07-02 17:52:05 +02:00
Samuele Locatelli 658aeaed52 Update gestione stats x macchine energy (filtro e display) 2025-07-02 17:47:00 +02:00
Samuele Locatelli 48e09805d9 Fix grafico multiline (non stepped di default) 2025-07-02 14:10:45 +02:00
Samuele Locatelli c06e995e45 Aggiunta funzionalità downsample dati TREND 2025-07-02 13:31:56 +02:00
Samuele Locatelli 8a7642f238 TAB3:
- in conferma pezzi mostra pannello conferma
2025-07-01 13:54:53 +02:00
Samuele Locatelli bdb2886c36 refresh compoenti razor da lib 2025-07-01 11:15:35 +02:00
Samuele Locatelli 41ef6bc4ae Update x gestione dati extra da RRL x IOB 2025-07-01 11:14:52 +02:00
Samuele Locatelli b4a4246713 Update BaseSrv + update in cascata servizi derivati + inizio DTO x IobList 2025-07-01 09:13:08 +02:00
Samuele Locatelli acb6d78a0f Fix catena selezione cod azienda selezionata SPEC 2025-07-01 09:12:54 +02:00
Samuele Locatelli a84c68ca17 Inizio aggiunta servizio x recupero RemRebLog ultimi eventi 2025-06-30 20:06:46 +02:00
Samuele Locatelli 6890b57b44 Update pagina LAND x display info dettagliate 2025-06-30 15:24:10 +02:00
Samuele Locatelli 6f244c453c Completato fix compilazione con nuovo oggetto MacchineModel 2025-06-30 14:35:32 +02:00
Samuele Locatelli f73c62c3df Fix MacchineModel in proj non ancora ricompilati 2025-06-30 14:33:44 +02:00
Samuele Locatelli 237a770067 Update x display info conf macchine su LAND 2025-06-30 14:12:53 +02:00
Samuele Locatelli 33ff2cb49d Merge branch 'develop' of https://gitlab.steamware.net/steamware/mapo-core into develop 2025-06-30 07:59:32 +02:00
Samuele Locatelli af7998273d fix sync method 2025-06-30 07:59:29 +02:00
Samuele E. Locatelli 58bd716057 Appunti x dett param come accordion (vedi TAB3) 2025-06-28 10:11:08 +02:00
Samuele E. Locatelli 20e6e4b77e Aggiunto appunti x completamento info da RRL x impianti "secondari" 2025-06-28 10:09:41 +02:00
Samuele E. Locatelli bc383bd82a Ancora update display IOB info (mancano ENR senza macchina) 2025-06-28 09:57:02 +02:00
Samuele E. Locatelli baa248e5ad Fix conf x recupero dati display LAND x InfoIOB 2025-06-28 09:40:47 +02:00
Samuele E. Locatelli 10f20ee29a Aggiunta metodo TabDServ x gestione IobInfo come tablet da Redis (tipo, IP, ...) 2025-06-28 09:24:35 +02:00
Samuele E. Locatelli 0306fdc72b update classe messageservice locale di LAND 2025-06-28 09:24:16 +02:00
Samuele E. Locatelli 2d83e27d89 Modifica model macchine 2025-06-28 09:20:48 +02:00
Samuele E. Locatelli 1ec3aa58d4 Bozza pagine x elenco macchine 2025-06-27 17:54:43 +02:00
Samuele E. Locatelli 37e4db9dcd Inizio inserimento pagina IobList 2025-06-27 17:02:42 +02:00
Samuele Locatelli a79c5e87d8 Merge tag 'Tab3_FixParams_01' into develop
Fix problema parametri in TAB3: errore display x deserializzazione float su int
2025-06-12 15:32:31 +02:00
Samuele Locatelli 387a3a9a54 Merge branch 'Hotfix/Tab3_FixParams_01' 2025-06-12 15:32:07 +02:00
Samuele Locatelli 79f9adea19 Merge branch 'develop' into Hotfix/Tab3_FixParams_01 2025-06-12 15:31:40 +02:00
Samuele Locatelli bac4b1c29a TAB3:
- hotfix gestione objItem con valori min/max decimali
2025-06-12 15:30:58 +02:00
Samuele Locatelli e4f304bac6 Merge tag 'Spec_KitMan_13' into develop
Update gestione reset filtro reparto in PODL
2025-06-11 18:36:05 +02:00
Samuele Locatelli ef1e27c0c4 Merge branch 'Release/Spec_KitMan_13' 2025-06-11 18:35:43 +02:00
Samuele Locatelli 3ebfdaeded SPEC:
- review reset filtro in pagina PODL
2025-06-11 18:34:00 +02:00
Samuele Locatelli 8c0e3deb02 Merge tag 'Spec_KitMan_12' into develop
Fix webconfig
2025-06-10 12:43:34 +02:00
Samuele Locatelli 9f36bfbbb5 Merge branch 'Release/Spec_KitMan_12' 2025-06-10 12:43:24 +02:00
Samuele Locatelli 790ea09c2e SPEC:
- fix displaygruppo in PODL
- rimosso edit, clona e delete da KIT
2025-06-10 12:37:50 +02:00
Samuele Locatelli 23e4998948 Merge tag 'Spec_KitMan_11' into develop
Update x display modal dei kit
2025-06-09 17:55:29 +02:00
Samuele Locatelli 5b79a15a3f Merge branch 'Release/Spec_KitMan_11' 2025-06-09 17:55:21 +02:00
Samuele Locatelli c1bf40a38c Update display modale controllo KIT 2025-06-09 17:54:43 +02:00
Samuele Locatelli 6e9795f1c0 Merge tag 'TaskManUpdate_01' into develop
Fix gestione calcolo next exec schedulazione
2025-06-05 09:47:10 +02:00
Samuele Locatelli 019af7b3d9 Merge branch 'Release/TaskManUpdate_01' 2025-06-05 09:46:53 +02:00
Samuele Locatelli f7cdb29a4e Update componente taskScheduler x ricalcolo + corretto 2025-06-05 09:45:54 +02:00
Samuele Locatelli 7b2a51c87f Merge tag 'Spec_KitMan_10' into develop
Update display info KIT anche in prod e installer
2025-05-15 17:16:40 +02:00
Samuele Locatelli f291017645 Merge branch 'Release/Spec_KitMan_10' 2025-05-15 17:16:25 +02:00
Samuele Locatelli 9b65b068fc TAB3:
- Aggiunta ricerca dettaglio KIT x ODL/PODL
2025-05-15 17:13:34 +02:00
Samuele Locatelli 5019dfca60 SPEC:
- Aggiunto filtro lanciati o meno
2025-05-15 16:59:59 +02:00
Samuele Locatelli cbb86cebd3 Test compile 4 WBuild 2025-05-15 16:15:33 +02:00
Samuele Locatelli ced2cd90a3 COdeMaid cleanup 2025-05-15 16:11:21 +02:00
Samuele Locatelli ea66ab89c5 pulizia codice test inutilizzato 2025-05-15 16:06:50 +02:00
Samuele Locatelli 4acdd09ad3 SPEC
- dettaglio PODL kit/originali oltre a struttura KIT
2025-05-15 15:57:42 +02:00
Samuele Locatelli b130acdf25 Merge tag 'UpdateSentinelProxy_01' into develop
Update del sentinel di proxy x applicazioni (NON localhost ma tramite
redis.ufficio)
2025-05-13 12:27:25 +02:00
Samuele Locatelli 42044beae2 Merge branch 'Release/UpdateSentinelProxy_01' 2025-05-13 12:27:06 +02:00
Samuele Locatelli 63c4ce6ad8 REDIS Update
- conf: redis sentinel NON in localhost ma in haproxy redis.ufficio
2025-05-13 12:26:43 +02:00
Samuele Locatelli eb38ede510 Merge tag 'Spec_KitMan_09' into develop
Update ricerca composizione KIT: anche articolo oltre a commesse
2025-05-12 10:15:22 +02:00
Samuele Locatelli 961a6d2533 Merge branch 'Release/Spec_KitMan_09' 2025-05-12 10:14:47 +02:00
Samuele Locatelli a798c9ddaf SPEC:
- aggiunta ricerca commessa/articolo in compoisiozne KIT
2025-05-12 10:14:11 +02:00
Samuele Locatelli 4053db453f Merge tag 'Spec_KitMan_08' into develop
Update gestioen display composizioen KIT x ODL e PODL
2025-05-12 09:14:44 +02:00
Samuele Locatelli 47353bdbf8 Merge branch 'Release/Spec_KitMan_08' 2025-05-12 09:14:29 +02:00
Samuele Locatelli 2754a4a634 Completato display composizione KIT in ODL/POD di spec e in TAB3 2025-05-12 09:14:11 +02:00
Samuele Locatelli aedaf7e0ec Fix display dettaglio KIT x TAB3 2025-05-12 08:59:50 +02:00
Samuele Locatelli 961d707a6d Merge tag 'Spec_KitMan_07' into develop
Update x recupero articoli tipo KIT + display dettaglio da PODL e pag
composizione kit con modale
2025-05-10 17:16:08 +02:00
Samuele Locatelli 8de959ba5c Merge branch 'Release/Spec_KitMan_07' 2025-05-10 17:12:08 +02:00
Samuele Locatelli 45aac2c576 SPEC:
- aggiunta dettaglio composizione KIT
2025-05-10 17:11:47 +02:00
Samuele Locatelli 5edbe0e41b Inizio gestione display dettaglio KIT anche in lista PODL/ODL 2025-05-09 18:59:10 +02:00
Samuele Locatelli 6e638bf5ae Merge tag 'Spec_KitMan_06' into develop
Gestione KIT con rimozione reparto solo se non in composizione + nuova
stored ricerca
2025-05-09 08:55:34 +02:00
Samuele Locatelli c6ad8a8f43 Merge branch 'Release/Spec_KitMan_06' 2025-05-09 08:55:16 +02:00
Samuele Locatelli 7157ba1c10 SPEC:
- compoisiozne kit controlla rimozione reparto
- uso nuova stored
2025-05-09 08:54:21 +02:00
Samuele Locatelli d8d2651892 Merge tag 'Spec_KitMan_05' into develop
fix 4 decimali x display score KIT
2025-05-08 07:13:40 +02:00
Samuele Locatelli e3b2627551 Merge branch 'Release/Spec_KitMan_05' 2025-05-08 07:13:06 +02:00
Samuele Locatelli 99a2aae3ed SPEC:
-riporto a 2 decimali la % affinità/score x KIT
2025-05-08 07:12:47 +02:00
Samuele Locatelli d6ea2ee79a Merge tag 'Spec_KitMan_04' into develop
Correzione stored e display gestione kit compatibili
2025-05-07 19:25:15 +02:00
Samuele Locatelli 24e10a35b4 Merge branch 'Release/Spec_KitMan_04' 2025-05-07 19:25:04 +02:00
Samuele Locatelli b6727a64f5 Ancora fix display % punteggio 2025-05-07 19:24:19 +02:00
Samuele Locatelli 3b61a228eb fix display 2025-05-07 19:23:54 +02:00
Samuele Locatelli e09933cae5 Correzione gestione calcolo punteggio score KIT 2025-05-07 19:23:50 +02:00
Samuele Locatelli f941e6f940 Merge tag 'Spec_KitMan_03' into develop
Gestione KIT: aggiunto dettaglio composizione in fase creazione x capire
differenza tra kit equivalenti (es 1+1 e 3+3)
2025-05-07 18:33:27 +02:00
Samuele Locatelli 70038a082e Merge branch 'Release/Spec_KitMan_03' 2025-05-07 18:33:04 +02:00
Samuele Locatelli da54e538cf SOPEC:
- aggiunto visualizzazione dettaglio KIT
2025-05-07 18:32:50 +02:00
Samuele Locatelli 69880f958d Merge tag 'Spec_KitMan_02' into develop
SPEC: filtro cod parent x nuovo kit o clona, filtro da click cod art
kit/parent
2025-05-07 17:27:34 +02:00
Samuele Locatelli f9ef530fe0 Merge branch 'Release/Spec_KitMan_02' 2025-05-07 17:27:08 +02:00
Samuele Locatelli e107d909de SPEC:
- filtraggio cod art KIT/parent
- filtro parent su nuovo/clona
2025-05-07 17:26:48 +02:00
Samuele Locatelli 05d37e218d Merge tag 'Spec_KitMan_01' into develop
Aggiunta articolo tipo KIT in creazione tempalte KIT
2025-05-07 15:04:37 +02:00
Samuele Locatelli 0381c9a5ef Merge branch 'Release/Spec_KitMan_01' 2025-05-07 15:04:18 +02:00
Samuele Locatelli 5cc3ca11e6 Fix generazione ART x nuovi KIT 2025-05-07 15:02:47 +02:00
Samuele Locatelli b657e01129 SPEC:
- fix stringa conn auth mancante
2025-04-28 10:39:47 +02:00
Samuele Locatelli cb3e30a56c Refresh spazi (typo) 2025-04-28 10:31:20 +02:00
Samuele Locatelli 61e2bcab96 SPEC:
- Aggiunto metodo stored x numero parametri opzioanlmente a output tabella o output parametri calcolati
2025-04-22 10:33:37 +02:00
Samuele Locatelli 9d2041848c Update caricamento info pagina TOP 2025-04-17 08:31:03 +02:00
Samuele Locatelli d37ed44106 SPEC:
- Update gestione cambio titolo automatico
2025-04-16 19:49:11 +02:00
Samuele Locatelli 236ebb6fb0 Merge tag 'SpecAddGroupMan_02' into develop
Update x gestione link menu e permessi su SPEC & co
2025-04-16 17:51:06 +02:00
Samuele Locatelli 38e5327ca0 Merge branch 'Release/SpecAddGroupMan_02' 2025-04-16 17:50:51 +02:00
Samuele Locatelli 94ba39f025 Refresh TAB e IOC x NavModel 2025-04-16 17:49:25 +02:00
Samuele Locatelli 71fc5a81d4 SPEC:
- fix gestione permessi x nagMan + check buttons
2025-04-16 17:44:34 +02:00
Samuele Locatelli 2747e11231 SPEC:
- fix testo add macchine/oper a reparti
-  inizio inserimento AppAuth x gestione permessi x menu nav e pagine
2025-04-16 12:57:59 +02:00
Samuele Locatelli 29079a578f LAND:
- spostamento servizio AppAuth i proj generico
2025-04-16 12:57:21 +02:00
Samuele Locatelli fffd86cb30 Merge tag 'SpecAddGroupMan_01' into develop
Update gestione  reparti con Macchine/Operatori
2025-04-16 11:49:39 +02:00
Samuele Locatelli 0ef3f8b84b Merge branch 'Release/SpecAddGroupMan_01' 2025-04-16 11:47:39 +02:00
Samuele Locatelli 167aa2d98a SPEC:
- completato editing macchine/operatori
2025-04-16 11:47:11 +02:00
Samuele Locatelli 31d8269399 SPEC:
- fix creazione reparti da zero + assegnazioend a zero impianti/operatori
2025-04-16 11:23:45 +02:00
Samuele Locatelli 4d43230a0b SPEC:
- ok preliminare add/remove macchine/reparti
2025-04-16 11:17:31 +02:00
Samuele Locatelli 70d3e50baf SPEC:
- ok Insert/delete amcchina
- manca refresh
2025-04-16 10:12:47 +02:00
Samuele Locatelli da4613bf8c SPEC Reparti:
- OK editing
- ok add
2025-04-16 07:40:41 +02:00
Samuele Locatelli de68e33118 Inizio aggiunta gruppo 2025-04-15 19:43:55 +02:00
Samuele Locatelli 878c241eec SPEC:
- update display gruppi 2 opr/macchine
2025-04-15 17:47:29 +02:00
Samuele Locatelli 72aeca2f13 SPEC:
- ok conteggio amcchine/operatori su gruppi
2025-04-15 17:44:39 +02:00
Samuele Locatelli 78673138c2 SPEC:
- prima vers pagina ricerca gruppi amcchine/operatori
2025-04-15 17:21:42 +02:00
Samuele Locatelli fd314caa86 Merge tag 'SpecAddKitCreation_02' into develop
Fix naming classi Model x CORE app (IOC/SPEC/TAB3/MON)
2025-04-14 18:26:34 +02:00
Samuele Locatelli fe32fcd95a Merge branch 'Release/SpecAddKitCreation_02' 2025-04-14 18:26:18 +02:00
Samuele Locatelli e83ae513a8 Update SPEC x modelli dati 2025-04-14 18:25:13 +02:00
Samuele Locatelli cbd4a90d01 DATA:
- Correzione MSE i MSEModel x naming
- fix e test vari su app CORE (IOC/SPEC/TAB3/MON)
2025-04-14 18:25:00 +02:00
Samuele Locatelli af92264847 Merge tag 'SpecAddKitCreation_01' into develop
SPEC: prima release installabile gestione KIT composti x lavorazioni
2025-04-14 18:10:37 +02:00
Samuele Locatelli bf94c59bef Merge branch 'Release/SpecAddKitCreation_01' 2025-04-14 18:09:09 +02:00
Samuele Locatelli b70133272f Completati step gestione creazione KIT, da testare 2025-04-14 18:06:54 +02:00
Samuele Locatelli 55f6abdd1b SPEC:
- Aggiunto filtro in cascata da selezione pagina x PODL
2025-04-14 15:49:17 +02:00
Samuele Locatelli 959d0f8f5a SPEC: inizio gestione filtro selezione a cascata 2025-04-14 12:17:24 +02:00
Samuele Locatelli 078101ccb4 INserito filtro parametri xDL x creazione PODL/KIT 2025-04-14 11:53:06 +02:00
Samuele Locatelli 4b2a9dbd3e Fix display dopo canc riga temp kit creator 2025-04-14 09:00:38 +02:00
Samuele Locatelli afc3e4039c Reset cod temporaneo KIT post operazioni creazione/cancellazione 2025-04-14 08:02:39 +02:00
Samuele Locatelli 389f3a4289 fix colorazione collapse kit 2025-04-14 07:57:42 +02:00
Samuele Locatelli beb7ebd509 SPEC:
- Test eliminazione kit + test dettaglio kit
- fix display show/hide dettaglio KIT
2025-04-14 07:57:33 +02:00
Samuele Locatelli 3b44311f6a Aggiunta stored da testare x eliminazione IstKIT 2025-04-12 08:27:13 +02:00
Samuele Locatelli f5508bc5c3 SPEC:
- aggiunta gestione show/hide dettaglio ordini
2025-04-12 08:19:27 +02:00
Samuele Locatelli 2cf23d1000 SPEC:
- Inizio gestione tab master/detail di PODL/IstKit
2025-04-12 08:04:41 +02:00
Samuele Locatelli f6864e7c2e SPEC:
- Fix creazione istanze kit con codici PODL parent/child
2025-04-12 07:24:49 +02:00
Samuele Locatelli 5e76d56abe SPEC:
- Fix visualizzazione post update dei vari componenti
2025-04-11 19:47:53 +02:00
Samuele Locatelli 97852fc5bf Ancora update parziale riletture post creazione istanze KIT 2025-04-11 19:40:40 +02:00
Samuele Locatelli 000543148a SPEC:
- fix grafici flow moduli KIT
2025-04-11 18:29:17 +02:00
Samuele Locatelli d627b4c766 Aggiunto filtro KIT già creati hard coded + fix prima versione red kit creati 2025-04-11 18:25:51 +02:00
Samuele Locatelli 0d4b9c9089 SPEC:
- OK gestione creazione KIT preliminare (mancano idxPODL parent/child) fino a crezione con stored OK
2025-04-11 18:12:37 +02:00
Samuele Locatelli 8e0407ae1b Ok verifica su num record TSC x creazione PODL 2025-04-11 07:57:06 +02:00
Samuele Locatelli e07b1d3ad2 Ok gestione prima aprte verifica coerenza score 2025-04-11 07:49:25 +02:00
Samuele Locatelli af6009eb82 Update gest kit: caricamento dati in obj parent 2025-04-11 07:32:43 +02:00
Samuele Locatelli 44c98a29d9 Ancora update x test KIT 2025-04-10 19:51:33 +02:00
Samuele Locatelli d344b49ff0 SPEC:
- continuo implementazione gestione KIT
2025-04-10 19:14:59 +02:00
Samuele Locatelli 62fb0e38b3 SPEC:
- Completo gestione Template KIT
2025-04-10 08:09:11 +02:00
Samuele Locatelli 4049a29407 SPEC:
- fix creazione nuovo record ArtKit fittizionda stored
2025-04-09 19:19:22 +02:00
Samuele Locatelli ef3dad095d SPEC: continuo pagina setup TemplateKit 2025-04-09 19:14:33 +02:00
Samuele Locatelli 18f60cda6d Fix gestione data odierna non confermabile x TAB3 2025-04-09 19:14:24 +02:00
Samuele Locatelli 0d4e4046a6 Continuo implementazione metodi gestione TemplateKIT 2025-04-09 13:17:40 +02:00
Samuele Locatelli 28c4adff0d SPEC:
Aggiunta modello dati x KIT : istanze e template
2025-04-09 13:03:21 +02:00
Samuele Locatelli cfb94906c5 SPEC:
- Inizio pagina gestione KIT
2025-04-09 12:54:42 +02:00
Samuele Locatelli de16144059 TAB3:
- Update x gestione cancellazioni record intermedi giornata
2025-04-09 12:54:23 +02:00
Samuele Locatelli 20eb1c2b62 Merge tag 'MpTab3_18' into develop
Gestione verifica buttons conferma al cambio data senza record
2025-04-09 11:23:07 +02:00
Samuele Locatelli 18b7449149 Merge branch 'Release/MpTab3_18' 2025-04-09 11:22:55 +02:00
Samuele Locatelli 9cbcc5feac TAB3:
- Fix gestione stato button conferma in cambio data senza record
2025-04-09 11:20:32 +02:00
Samuele Locatelli 64d452e41e Merge tag 'MpTab3_17' into develop
Fix mancato refresh TAB3 post ultimo delete o cambio su data odierna
2025-04-09 10:13:43 +02:00
Samuele Locatelli 3269e991dc Merge branch 'Release/MpTab3_17' 2025-04-09 10:13:22 +02:00
Samuele Locatelli c67fa2b2d2 TAB3:
- update mancato refresh dopo ultima eliminaizone o su data odierna
2025-04-09 10:13:05 +02:00
Samuele Locatelli d3dd1427a6 Merge tag 'NugetUpdate_01' into develop
Update di tutti i nuget x fix EgwCoreLib non referenziati in progetti
non aggiornati
2025-04-09 09:04:05 +02:00
Samuele Locatelli 1a659333d6 Merge branch 'Release/NugetUpdate_01' 2025-04-09 09:03:44 +02:00
Samuele Locatelli 9482f06ee8 Fix nuget Egw x
- INVE
- LANT
- PROG
- SPEC
- STATS
2025-04-09 09:03:09 +02:00
Samuele Locatelli 0a4a756a6c Merge tag 'MpTab3_16' into develop
Fix gestioen QRCode + fix calcolo imgbaseUrl
2025-04-09 08:56:29 +02:00
Samuele Locatelli e127246219 Merge branch 'Release/MpTab3_16' 2025-04-09 08:56:09 +02:00
Samuele Locatelli 7ad945d84b TAB3:
- Update gestione urlbase x immagini macchine da conf
2025-04-09 08:55:44 +02:00
Samuele Locatelli 14b9232d65 Update x fix Scanner Barcode 2025-04-09 08:41:19 +02:00
Samuele Locatelli b57eac8bb6 Merge tag 'MpTab3_15' into develop
Fix larghezza conferma freezed day x tab 7"
2025-04-08 19:05:11 +02:00
Samuele Locatelli 20185dcc59 Merge branch 'Release/MpTab3_15' 2025-04-08 19:05:01 +02:00
Samuele Locatelli 605ffedbf6 TAB£:
- Fix larghezza btn data freezed su tab 7"
2025-04-08 19:04:43 +02:00
Samuele Locatelli 0ad38a5bf4 Merge tag 'MpTab3_14' into develop
update modalità aggiornamento progress congelamento giornaliero
2025-04-08 18:56:46 +02:00
Samuele Locatelli 74aea484f8 Merge branch 'Release/MpTab3_14' 2025-04-08 18:56:17 +02:00
Samuele Locatelli 8a94f6ed2d Update display avanzamento freeze day 2025-04-08 18:55:57 +02:00
Samuele Locatelli a95447e355 TAB3:
- blocco display durante freeze update info
2025-04-08 18:27:20 +02:00
Samuele Locatelli 7e91f23ddb Fix primo record giornaliero editabile in orario 2025-04-08 17:45:47 +02:00
Samuele Locatelli e5c53e0c56 Merge tag 'MpTab3_13' into develop
Fix colorazione data odierna
2025-04-08 17:34:18 +02:00
Samuele Locatelli ebe4fe51b1 Merge branch 'Release/MpTab3_13' 2025-04-08 17:34:11 +02:00
Samuele Locatelli 69f9c789a5 TAB3:
- insMan: Fix display today
2025-04-08 17:33:54 +02:00
Samuele Locatelli 4ef29573f5 Merge tag 'MpTab3_12' into develop
Update x cambio mese su insManuali gestito meglio
2025-04-08 17:07:29 +02:00
Samuele Locatelli 7ca436fd80 Merge branch 'Release/MpTab3_12' 2025-04-08 17:07:19 +02:00
Samuele Locatelli d429a9770f Fix reload mensile 2025-04-08 17:07:02 +02:00
Samuele Locatelli bb1823bdf8 Merge tag 'MpTab3_11' into develop
Update gestione sequencer + impedito salva se arriva al giorno
successivo
2025-04-08 16:08:36 +02:00
Samuele Locatelli af938f958c Merge branch 'Release/MpTab3_11' 2025-04-08 16:08:15 +02:00
Samuele Locatelli 928e724f5d TAB3:
- correzioni calcolo periodo
- impedito insert se pezzi /articoli 0/vuoti x work o senza durata x fermata
2025-04-08 16:07:58 +02:00
Samuele Locatelli a88a6db9d9 Merge tag 'MpTab3_10' into develop
Fix calcolo che deve fermarsi a giorno odierno
2025-04-08 13:05:00 +02:00
Samuele Locatelli d673a6f455 Merge branch 'Release/MpTab3_10' 2025-04-08 13:04:27 +02:00
Samuele Locatelli 183845d94f fIX CALCOLO ULTIMO EVENTO SU GIORNO SUCCESSIVO 2025-04-08 13:04:04 +02:00
Samuele Locatelli cc95d7f5b4 Merge tag 'MpTab3_09' into develop
Update x filtro freeze su giornata contanto ore caricate vs 24h
2025-04-08 11:26:27 +02:00
Samuele Locatelli 665c401eca Merge branch 'Release/MpTab3_09' 2025-04-08 11:26:10 +02:00
Samuele Locatelli ba0700c9d2 TAB3:
- Update gestione copertura giornox  evitare freeze
2025-04-08 11:25:48 +02:00
Samuele Locatelli 62b2d33c15 Merge tag 'MpTab3_08' into develop
Update x gestione blocco editing
2025-04-08 11:15:57 +02:00
Samuele Locatelli 6e5d9ed16f Merge branch 'Release/MpTab3_08' 2025-04-08 11:15:40 +02:00
Samuele Locatelli d7f106acb2 TAB3:
- update disabilitazione pulsanti edit post freeze
2025-04-08 11:15:19 +02:00
Samuele Locatelli e723c9b8c1 Merge tag 'MpTab3_07' into develop
Update gestione sequencer insManuali (fix completamento al 100%)
2025-04-07 19:19:04 +02:00
Samuele Locatelli 21542a8492 Merge branch 'Release/MpTab3_07' 2025-04-07 19:18:43 +02:00
Samuele Locatelli b5840ebed8 TAB3:
- Update sequencer x completare 100%
2025-04-07 19:18:23 +02:00
Samuele Locatelli 593fec01f9 Merge tag 'MpTab3_06' into develop
Update x veto modifica dataora se non primo record
2025-04-07 17:55:06 +02:00
Samuele Locatelli 221df16a99 Merge branch 'Release/MpTab3_06' 2025-04-07 17:54:51 +02:00
Samuele Locatelli 6f1049c667 Update colore testo non modificabile 2025-04-07 17:34:22 +02:00
Samuele Locatelli c6e17f32b8 Update gestione tempi: li "tiene attaccati" quando inseriti 2025-04-07 17:33:19 +02:00
Samuele Locatelli 3f7c42f31e Merge tag 'MpTab3_05' into develop
ok modifica gerstione double x edit TCiclo TAB3
2025-04-07 17:07:09 +02:00
Samuele Locatelli 75aa41d365 Merge branch 'Release/MpTab3_05' 2025-04-07 17:06:58 +02:00
Samuele Locatelli c6b838d389 TAB3:
- fix spaziatura caratteri edit TCiclo/pezzi/inizio
2025-04-07 17:03:13 +02:00
Samuele Locatelli 231177614b TAB3:
- Ancora modifica calcolo string --> decimal x TCiclo su IIS01
2025-04-07 16:59:15 +02:00
Samuele Locatelli db0a44b126 TAB3:
- Elenco TCicli come dictionary x evitare errori
2025-04-07 16:53:06 +02:00
Samuele Locatelli 1a55cbe5ee Merge tag 'MpTab3_04' into develop
Aggiunta editing InsMan + freeze stored
2025-04-07 12:14:49 +02:00
Samuele Locatelli 05f0e41cb1 Merge branch 'Release/MpTab3_04' 2025-04-07 12:14:36 +02:00
Samuele Locatelli 2d5ad4234c Update x errore calcolo stato macchina in TAB3 2025-04-07 12:14:01 +02:00
Samuele Locatelli 02247f73cf Aggiunto stored x freeze giorno in TAB3 2025-04-07 12:10:39 +02:00
Samuele Locatelli 258cbf105b Update x fix compilazione SPEC e IOC x modifiche nomi modelli dati AnagArticoli in AnagArticoliModel 2025-04-04 18:44:27 +02:00
Samuele Locatelli 306e83b6d6 Update grafico ricerca articoli: per ora OK 2025-04-04 18:38:36 +02:00
Samuele Locatelli 4d26ad9d4d Prima bozza ricerca ART con char + display 2025-04-04 18:26:07 +02:00
Samuele Locatelli 879ba50542 Update con predisposizione stored freez data 2025-04-03 13:45:32 +02:00
Samuele Locatelli c39831ca5e update con listaEv + traduzione in tab 2025-04-02 19:10:42 +02:00
Samuele Locatelli 07ed5c7632 Update editing insMan 2025-04-02 18:48:12 +02:00
Samuele Locatelli 2c70f3e164 Update colorazione stato fermata 2025-04-02 18:03:23 +02:00
Samuele Locatelli a6e7cc6239 TAB3:
- renaming css colore mese
2025-04-02 16:49:56 +02:00
Samuele Locatelli db42ab3655 TAB3:
- Speedup reload calendario insManuali
2025-04-02 16:23:31 +02:00
Samuele Locatelli 32b3789efc Aggiunta metodi gestione fill e addNew condizionali 2025-04-02 15:46:41 +02:00
Samuele Locatelli 2f900e9d9c Ancora update display post ricalcolo 2025-04-02 12:42:59 +02:00
Samuele Locatelli 583df34487 Fix refresh post inserimento min spegnimento mancanti 2025-04-02 12:27:20 +02:00
Samuele Locatelli f4b5870f06 Update gestione ins manuali 2025-04-02 07:45:01 +02:00
Samuele Locatelli f56a4928c6 Add prima versione sequencer 2025-04-01 16:54:43 +02:00
Samuele Locatelli e8c88b20d4 Aggiunto ricalcolo preliminare giornata 2025-04-01 15:39:06 +02:00
Samuele Locatelli 6eb88851c4 Inizio gestione pagina insManuali 2025-04-01 12:18:43 +02:00
Samuele Locatelli 417e40c87b TAB3:
- Appunti procedura INS manuale
2025-03-31 20:35:16 +02:00
Samuele Locatelli 8c1f2be1f1 TAB3:
- inizio gestione modifiche x caso manuale (con disabilitazione menù e caricamento dato isManual)
2025-03-31 20:23:57 +02:00
Samuele Locatelli 8e2d7871f9 update conf prod su TAB3 2025-03-31 16:17:12 +02:00
Samuele Locatelli 6fc9a883d7 UPDATE land: jumper QR su TAB3 2025-03-31 16:16:54 +02:00
Samuele E. Locatelli 087e6318f6 TAB3 speedup:
- update vari in fase reload: da provare...
- update in reload dati utente la row top
2025-03-29 16:32:23 +01:00
Samuele E. Locatelli 7d077b6576 Update gestione letture sync/async MSE 2025-03-29 15:34:58 +01:00
Samuele Locatelli ed45a5c351 Update x migliorare caricamento iniziale 2025-03-29 09:42:00 +01:00
Samuele Locatelli 7390a01a12 update con log aggregato chiamate frequenti 2025-03-29 09:27:45 +01:00
Samuele Locatelli 26c6900c79 TAB3:
- levati molti metodi async dove non necessari x speedup pagina status-map
2025-03-27 19:54:40 +01:00
Samuele Locatelli 3d4c3017da Modifica navigazione a home senza delay ne reload 2025-03-27 18:24:13 +01:00
Samuele Locatelli 4388c6e540 Merge tag 'MpTab3_03' into develop
Update gestione tab 3 x mostrare ultimi dati confermati a video
2025-03-27 17:51:45 +01:00
Samuele Locatelli 16cfc2bfd5 Merge branch 'Release/MpTab3_03' 2025-03-27 17:51:31 +01:00
Samuele Locatelli 5cbc26981b TAB3:
Update display conferma prod x 4 sec (configurabile)
2025-03-27 17:51:14 +01:00
Samuele Locatelli 36ed3d46ee Merge tag 'MpTab3_02' into develop
Update gestione immagini senza small + fix parentesi appsettings.json
2025-03-27 16:32:58 +01:00
Samuele Locatelli 0dde1e871c Merge branch 'Release/MpTab3_02' 2025-03-27 16:32:46 +01:00
Samuele Locatelli d9b11f6f3f TAB3
Update fix immagini e appsettings
2025-03-27 16:32:19 +01:00
Samuele Locatelli cf53bfcada Correzione parentesi appsettings.json di produzione/staging/develop che sballano x indentazione errata 2025-03-25 16:15:45 +01:00
Samuele Locatelli 5fedb42c96 Merge tag 'MpTab3_01' into develop
Fix gestione immagini con https in server senza certificati OK...
2025-03-25 12:26:40 +01:00
Samuele Locatelli a95810710e Merge branch 'Release/MpTab3_01' 2025-03-25 12:26:26 +01:00
Samuele Locatelli 8a0fb121ae TAB3:
- correzione modalità calcolo immagini con nuova conf
2025-03-25 12:24:01 +01:00
Samuele Locatelli 7ceb6ecab3 Merge tag 'MpMon_14' into develop
Update gestione icone favicon + nomi mancanti
2025-03-21 16:39:40 +01:00
Samuele Locatelli 8acd0ec5be Merge branch 'Release/MpMon_14' 2025-03-21 16:39:26 +01:00
Samuele Locatelli 5e21087eca Ancora update nomi + favicon 2025-03-21 16:39:05 +01:00
Samuele Locatelli 3f881e208a Merge tag 'MpMon_13' into develop
update nomi applicazioni maiuscoli e trattino
2025-03-21 16:24:46 +01:00
Samuele Locatelli c708c98867 Merge branch 'Release/MpMon_13' 2025-03-21 16:24:37 +01:00
Samuele Locatelli 0b5e3d966f Correzione CORE: tutti i nomi pagina maiuscoli con trattino 2025-03-21 16:24:17 +01:00
Samuele Locatelli 7fdfbba0de Merge branch 'master' into develop 2025-03-21 10:21:48 +01:00
Samuele Locatelli 084dc503d2 Merge tag 'MpMon_12' into develop
Aggiornamento MON x fix riconnessione
2025-03-21 10:21:38 +01:00
Samuele Locatelli 390677ff2a Update test riconnessione 2025-03-21 10:21:30 +01:00
Samuele Locatelli 61f6e94c26 Merge branch 'Release/MpMon_12' 2025-03-21 10:19:36 +01:00
Samuele Locatelli e7dcefb069 MON:
- Rivisitazione completa gestione riconnessione blazor 8
- fic logico e grafico
2025-03-21 10:18:45 +01:00
Samuele Locatelli 32d872c0eb Update timer reload in footer 2025-03-20 19:52:03 +01:00
Samuele Locatelli fab446a312 Test boot.js esterno 2025-03-20 19:15:35 +01:00
Samuele Locatelli 2bd73d4601 Merge tag 'MpMon_11' into develop
Vari fix x gestione circuito e test errori visti in Jetco's install
2025-03-20 18:41:20 +01:00
Samuele Locatelli 681977ce83 Merge branch 'Release/MpMon_11' 2025-03-20 18:39:15 +01:00
Samuele Locatelli 35ce8e8066 MON:
- correzioni x gestione reconnect + stabile
- fix vari x condizioni errori visti in Jetco 8da aggiornare anche script PI)
2025-03-20 18:38:56 +01:00
Samuele Locatelli 62edd61246 Merge tag 'MpMon_10' into develop
Update x gestione WASM in MON Jetco con reload
2025-03-19 11:12:17 +01:00
Samuele Locatelli c5c95056c2 Merge branch 'Release/MpMon_10' 2025-03-19 11:11:54 +01:00
Samuele Locatelli 3618581955 Test MON di nuovo WASM 2025-03-19 11:11:32 +01:00
Samuele Locatelli 4cc77d52e0 Reorg componenti in modalità server/client 2025-03-19 11:04:20 +01:00
Samuele Locatelli 813ee7e591 Rimozione componenti da area server x riportare WASM x orologio 2025-03-19 11:04:07 +01:00
Samuele Locatelli 851e2a8b35 Merge branch 'master' into develop 2025-03-19 08:12:43 +01:00
Samuele Locatelli 8c44154ed5 Merge tag 'MpMon_09' into develop
Update modifica pagina app con regole reconnect
2025-03-19 08:12:20 +01:00
Samuele Locatelli f722f99bb0 Modifica modalità reconnect 2025-03-19 08:09:40 +01:00
Samuele Locatelli 8c490c4555 Merge branch 'Release/MpMon_09' 2025-03-19 08:04:06 +01:00
Samuele Locatelli 7cfcdaf7f9 Refresh compilazione MON che da problemi in Jetco 2025-03-19 08:03:44 +01:00
Samuele Locatelli 36ecac7d5e Merge tag 'MpMon_08' into develop
Update x reload pagina MON
2025-03-19 07:42:52 +01:00
Samuele Locatelli 808ccb6d5c Merge branch 'Release/MpMon_08' 2025-03-19 07:40:58 +01:00
Samuele Locatelli 6e2e267c42 Update MON x evitare (si spera) blocco alla rilettura 2025-03-19 07:31:12 +01:00
Samuele Locatelli 7238b73b14 Merge tag 'MpMon_07' into develop
modifica progetto MON: portato a SOLO ServerInteractive perché con WASM
ci sono ancora troppi problemi rimasti
2025-03-18 19:30:33 +01:00
Samuele Locatelli cebe4b13a2 Merge branch 'Release/MpMon_07' 2025-03-18 19:30:13 +01:00
Samuele Locatelli d4526ffdb5 MON:
- convertita in PURAMENTE Server x evitare alla radice i problemi del server Jetco
2025-03-18 19:29:40 +01:00
Samuele Locatelli e3f22ad128 Merge tag 'MpMon_06' into develop
Aggiunta gestione conf MON x cambio dimensioni display & co
2025-03-18 09:43:02 +01:00
Samuele Locatelli c208878f6c Merge branch 'Release/MpMon_06' 2025-03-18 09:42:47 +01:00
Samuele Locatelli 7fd7710e9d Altri update MON x gestione customizzazione dimensioni 2025-03-18 09:42:19 +01:00
Samuele Locatelli 79948d67d7 Merge tag 'MpMon_05' into develop
Aggiunta gestione resize carattere su display grandi e poche macchine +
gestione brightness da css
2025-03-18 08:16:05 +01:00
Samuele Locatelli f8e01399ca Merge branch 'Release/MpMon_05' 2025-03-18 08:15:36 +01:00
Samuele Locatelli e57f664f24 Correzione manifest x deploy installer 2025-03-18 08:15:19 +01:00
Samuele Locatelli be7d31b049 MON: review gestione resize char di base + brightness per forzare visualizzazione + brillante 2025-03-18 08:12:27 +01:00
Samuele Locatelli aab394efce Merge tag 'MpMon_04' into develop
Forzatura a interactiveServer x MON x evitare problemi con CPU datate
(es IIS03)
2025-03-17 17:39:15 +01:00
Samuele Locatelli f64d6cb76d Merge branch 'Release/MpMon_04' 2025-03-17 17:38:53 +01:00
Samuele Locatelli 6c73b51a88 MON: forzato server ovunque x evitare check wasm 2025-03-17 17:38:38 +01:00
Samuele Locatelli ce0f963b9d Forzato interactive server x IIS03 2025-03-17 17:02:07 +01:00
Samuele Locatelli 606a3cf253 Merge tag 'MpMon_03' into develop
Rimozione componenti WASM forzate da server x evitare problemi browser
da CPU vecchie NON SIMD 8es IIS03)
2025-03-17 16:36:09 +01:00
Samuele Locatelli 3ce03226b7 Merge branch 'Release/MpMon_03' 2025-03-17 16:35:41 +01:00
Samuele Locatelli 86293e28ad Eliminato impiego WASM x problemi compatibilità con processori vecchi (es IIS03) 2025-03-17 16:35:21 +01:00
Samuele Locatelli 1219888cad Merge tag 'MpMon_02' into develop
iUpdate gestione tab3 x ODL
2025-03-17 14:22:08 +01:00
Samuele Locatelli 39728fa2fc Merge branch 'Release/MpMon_02' 2025-03-17 14:21:40 +01:00
Samuele Locatelli 699157d7c7 Update gestione chiusura ODL di default 2025-03-17 14:19:28 +01:00
Samuele Locatelli 26a70244de MON:
- fix URL raspi senza /
2025-03-17 11:22:24 +01:00
Samuele Locatelli 0c854ff472 SPEC:
- correzione gestione padding XDL
MON:
- tolto giorno che torna cmq inglese sul raspi
2025-03-17 10:47:40 +01:00
Samuele Locatelli 1c50b03a71 MON:
riporto tutto s server x fix internazionalizzazione
2025-03-17 10:31:43 +01:00
Samuele Locatelli 609d03ce9b MON: eliminato forzatura lingua che si pianta su raspi-pi 2025-03-17 10:27:27 +01:00
Samuele Locatelli 4c0f591de9 Update tab x ODL/PODL a 6 zeri 2025-03-17 10:25:19 +01:00
Samuele Locatelli 69c010a9af MON:
- aggiunta orologio grande in alto
- review pagina in generale
2025-03-17 10:17:03 +01:00
Samuele Locatelli 86c5657d51 Fix sizing dinamico placeholder macchine in TAB3 x statusMap 2025-03-17 09:09:40 +01:00
Samuele Locatelli c1e006c5d1 Merge tag 'MpMon_01' into develop
Correzione gestione testo scorrevole/ridotto da conf
2025-03-15 12:45:18 +01:00
Samuele Locatelli 1d629e802b Merge branch 'Release/MpMon_01' 2025-03-15 12:43:28 +01:00
Samuele Locatelli 049ac1f991 Aggiunto comportamento scroll/reduce text da config 2025-03-15 12:42:57 +01:00
Samuele Locatelli d467cd1f73 refresh display 2025-03-15 12:29:36 +01:00
Samuele Locatelli 60f55b58af Fix profili compilazione missing in git 2025-03-15 12:29:29 +01:00
Samuele Locatelli e85a253e6e Semplificazione gestione stilesheet 2025-03-15 12:23:25 +01:00
Samuele Locatelli c9f054adab Correzione yaml 2025-03-15 12:23:09 +01:00
Samuele Locatelli 8904f179b8 Correzione YAML x deploy IIS 2025-03-15 12:04:59 +01:00
Samuele Locatelli 7a18068078 Test yaml compilazione + deploy MON 2025-03-15 11:59:20 +01:00
Samuele Locatelli d69303ef03 Minor fix finali 2025-03-15 11:58:26 +01:00
Samuele Locatelli c0fec71b5d Reorg progetti MON x fix compilazione 2025-03-15 10:29:46 +01:00
Samuele Locatelli fb3795e38a ancora update, ok forse compila ma NON pubblica 2025-03-14 19:13:36 +01:00
Samuele Locatelli 69dbf46a70 correzione yaml x mON, altro modo x recuperare path multi-livello 2025-03-14 19:09:47 +01:00
Samuele Locatelli e95fc39300 Fix finale yaml x MON e compilazione + deploy vari 2025-03-14 19:02:07 +01:00
Samuele Locatelli 6605028499 Fix x deploy su IIS01 del MON 2025-03-14 19:00:32 +01:00
Samuele Locatelli 5d6a72c7cd Fix yaml x progetto Blazor 8 interactive 2025-03-14 18:55:09 +01:00
Samuele Locatelli e9eaab2577 Correzioni compilazioni TAB3 2025-03-14 18:53:38 +01:00
Samuele Locatelli 33c2221acb Correzione compile 2025-03-14 18:49:27 +01:00
Samuele Locatelli a7d7dfe44e Correzione steps compilazione e versione post build 2025-03-14 18:48:40 +01:00
Samuele Locatelli 47be99a78b refresh gestione versioni 2025-03-14 18:47:27 +01:00
Samuele Locatelli e079f683f3 Inclusione step x compilazione 2025-03-14 18:47:20 +01:00
Samuele Locatelli 6380550300 Rimozione progetto WASM puro monitor 2025-03-14 18:35:48 +01:00
Samuele Locatelli 28992a0310 Update versioni x fix compilazioni incrociate 2025-03-14 18:34:38 +01:00
Samuele Locatelli bce9892a16 Rimozione MON8 server only 2025-03-14 17:40:36 +01:00
Samuele Locatelli 0b643557ba Reord progetto MON:
_ eliminato MON8 server only
- renaming sln
- spostamento publish profile da vecchio MON6 (deprecaturus est)
2025-03-14 17:40:25 +01:00
Samuele Locatelli 8f39806669 Update progetto Interactive WASM/Server x MON (8) 2025-03-14 17:30:34 +01:00
Samuele Locatelli d1bd15569e Merge tag 'MpTab_Controlli_02' into develop
Fix su IIS03
2025-03-14 11:56:48 +01:00
Samuele Locatelli d9c5e8ccce Merge branch 'Release/MpTab_Controlli_02' 2025-03-14 11:56:41 +01:00
Samuele Locatelli 713dc9f191 refresh TAB3 x pubblicazione 2025-03-14 11:56:14 +01:00
Samuele Locatelli d6a27be92e Merge tag 'MpTab_Controlli_01' into develop
Update TAB3 x gestione controlli
2025-03-14 11:14:03 +01:00
Samuele Locatelli 488947216e Merge branch 'Release/MpTab_Controlli_01' 2025-03-14 11:13:51 +01:00
Samuele Locatelli 90804af90b ancora massive update 2025-03-14 11:07:11 +01:00
Samuele Locatelli ab185a5173 TAB3:
- fix gestione effettuare controllo con check continuo
Update massivo:
- nuove EgwCoreLibs
- update compoenti
2025-03-14 11:07:05 +01:00
Samuele Locatelli 7d00b5f850 Update modalità rendermode x codice 2025-03-14 09:18:21 +01:00
Samuele Locatelli 3411cb15a4 Aggiornamento blazor 8 con progetto interactive auto x componenti 2025-03-14 09:13:16 +01:00
Samuele Locatelli b3864d21e3 Spostamento MON --> Mon6 x sviluppare app autorendermode 2025-03-14 09:13:03 +01:00
Samuele Locatelli 3ecea06832 Continuo blazor MON8 (test) 2025-03-13 18:49:47 +01:00
Samuele Locatelli 456104ef3e Aggiunta progetto MON in blazor 8 (test x ora) 2025-03-13 18:49:39 +01:00
Samuele Locatelli 4085feb8db Merge tag 'MpTab_DP_03' into develop
Update x condizioni aggiornamento in fase ODL/PODL
2025-03-13 16:50:58 +01:00
Samuele Locatelli e43c7a5990 Merge branch 'Release/MpTab_DP_03' 2025-03-13 16:48:44 +01:00
Samuele Locatelli b1508cdc1a Fix condizioni chiusura setup ODL con refresh 2025-03-13 16:48:18 +01:00
Samuele Locatelli cb8f5fe531 Update gestione conteggio pezzi tavola e altra x controllo ODL senza conferma pezzi 2025-03-13 16:11:56 +01:00
Samuele Locatelli 08a33a3e7b TAB3: fix invio parametri come Donati 2025-03-13 16:02:06 +01:00
Samuele Locatelli 63e6285c5e Merge tag 'MpTab_DP_02' into develop
Correzione display TAB3 x size caratteri ed indicazione ODL/PODL
2025-03-13 15:07:58 +01:00
Samuele Locatelli 31431308ae Merge branch 'Release/MpTab_DP_02' 2025-03-13 15:07:42 +01:00
Samuele Locatelli b7d5ad5d81 Correzioni TAB3 2025-03-13 15:07:29 +01:00
Samuele Locatelli 872c026dca TAB3:
- fix refresh post controllo  sia su doppia tavola che singola macchina
2025-03-13 14:58:25 +01:00
Samuele Locatelli 8f8e1f1153 Soluzione problem TAB3 su refresh post controllo 2025-03-13 14:50:20 +01:00
Samuele Locatelli 16c2767c09 TAB3: fix dati null
- Update  aggiornamento MSE durante setup ODL inibito
2025-03-13 12:56:45 +01:00
Samuele Locatelli 4e5910b0be Merge tag 'MpTab_DP_01' into develop
Fix errore in setup macchine DP
2025-03-13 12:45:04 +01:00
Samuele Locatelli a12d82a3e8 Merge branch 'Release/MpTab_DP_01' 2025-03-13 12:44:55 +01:00
Samuele Locatelli 757555962b Fix errore sel idxMacc x doppio pallet 2025-03-13 12:44:25 +01:00
Samuele Locatelli c5f2bff11d MON: aggiunta chaive config x display modalità old/new 2025-03-13 06:55:08 +01:00
Samuele Locatelli 4464c90ad4 Update MON x display dimensioni 2025-03-12 19:41:58 +01:00
Samuele Locatelli fe0b2496e7 Affinamento MON x display grandi 2025-03-12 16:34:25 +01:00
Samuele Locatelli 5dc51b41f7 Update scorrimento su MON 2025-03-12 16:25:09 +01:00
Samuele Locatelli 090f875806 MON: lampeggio C101 2025-03-12 15:23:43 +01:00
Samuele Locatelli 293644ac72 TAB£:
- ancora  update dim numeri
2025-03-12 12:33:21 +01:00
Samuele Locatelli 3fad6d7428 Ulteriore cambio risoluazionme font x TAB3 2025-03-12 12:24:58 +01:00
Samuele Locatelli ce8a10b5b8 Update size x TAB3 su dettaglio macchina 2025-03-12 12:21:26 +01:00
Samuele Locatelli 91d7c8598f Update MON 2025-03-12 12:17:16 +01:00
Samuele Locatelli 0daa2de23b Merge tag 'MpStat_03' into develop
Fix sel fluxLog
2025-03-12 10:29:56 +01:00
Samuele Locatelli 281050a55a Merge branch 'Release/MpStat_03' 2025-03-12 10:29:50 +01:00
Samuele Locatelli 5dd304157f update MON + update stats in prod 2025-03-12 08:44:34 +01:00
Samuele Locatelli d07747368a Update selezione filtro tipo flusso in Trend 2025-03-12 07:27:17 +01:00
Samuele Locatelli e2d1a3f63e Merge tag 'MpStat_02' into develop
Gestione Trend Analysis: filtro bloccato su "Energy", da rendere
parametrico
2025-03-11 18:58:39 +01:00
Samuele Locatelli 5bbb674ac5 Merge branch 'Release/MpStat_02' 2025-03-11 18:58:23 +01:00
Samuele Locatelli 574bd7c57c STATS:
- FluxType: aggiunto in modello
- filtro x fluxType gestito
- cablato x analysis il filtro a "Energy"
2025-03-11 18:58:02 +01:00
Samuele Locatelli 29b6757e53 Merge tag 'MpStat_01' into develop
Gestione resize monitor vari
2025-03-11 18:53:34 +01:00
Samuele Locatelli 4fac41e084 Merge branch 'Release/MpStat_01' 2025-03-11 18:53:25 +01:00
Samuele Locatelli 77834c0268 Fix MON x gestione display resized 2025-03-11 18:52:58 +01:00
Samuele Locatelli 1295c593ac Correzione calcolo maxCol 2025-03-11 17:44:54 +01:00
Samuele Locatelli 51d8d563b8 MON:
- Fix paginazione blocchi con metodo come TAB3
2025-03-11 17:44:35 +01:00
Samuele Locatelli 3586a8438c Merge remote-tracking branch 'origin/develop' 2025-03-11 17:39:38 +01:00
Samuele Locatelli 6ca217d76e Inizio update MON 2025-03-11 17:39:29 +01:00
Samuele Locatelli a77d77fcfa STATS: ok display trends 2025-03-11 07:34:11 +01:00
Samuele Locatelli 7c20a7ee8c Grafici trend normalizzati! 2025-03-10 19:10:18 +01:00
Samuele Locatelli 8a808856de Continuo aggiornamenti Trend graph plot 2025-03-10 18:56:44 +01:00
Samuele Locatelli 6b90cd6769 refresh labels 2025-03-10 16:06:15 +01:00
Samuele Locatelli 90742a5815 correzione labels 2025-03-10 16:05:41 +01:00
Samuele Locatelli 3db816c41d Prima bozza trend analysis 2025-03-10 16:03:55 +01:00
Samuele Locatelli dc9ee5bff1 update metodo calcolo prossima esecuzione 2025-03-10 12:52:25 +01:00
Samuele Locatelli 6e49457b88 Messo segnaposto charts 2025-03-10 12:42:15 +01:00
Samuele Locatelli f6496fe162 Fix modello taskeseguiti x scheduler 2025-03-10 12:24:51 +01:00
Samuele Locatelli 6931f499b1 Update stato enabled/disablet task x scheduler 2025-03-10 11:33:25 +01:00
Samuele Locatelli 68dd1c3859 TAB3: fix sizer 2025-03-10 09:17:10 +01:00
Samuele Locatelli 620572e250 Refresh dimensioni testi 2025-03-10 08:57:16 +01:00
Samuele Locatelli 9467a57c5f Review metodo disegno blocchi in status MAP x TAB3 2025-03-10 08:42:36 +01:00
Samuele E. Locatelli 09c12b4cd4 Completato navlink x pagina trends 2025-03-08 11:11:49 +01:00
Samuele E. Locatelli 88edbe763b IOB:
- fix fluxLogModel
2025-03-08 10:49:40 +01:00
Samuele E. Locatelli 57c41c7a60 MP-PROG
- fix naming DbModels
2025-03-08 10:48:56 +01:00
Samuele E. Locatelli bd08659e8c SPEC:
- fix riferimenti FluxLog
2025-03-08 10:47:22 +01:00
Samuele E. Locatelli 50d65eebaa MP.DATA, riorganizzazioni varie:
- renaming classi gestione DbModels in
- spostamento anagrafica flussi da auth a generale
2025-03-08 10:40:09 +01:00
Samuele E. Locatelli f33a17c156 Merge branch 'master' into develop 2025-03-08 09:28:52 +01:00
Samuele E. Locatelli 506bc83006 Update placeholder TAB3 in detail (correzione ovalizzazione) 2025-03-08 09:28:44 +01:00
Samuele E. Locatelli 4711d122d9 Merge branch 'release/FixDP_03' 2025-03-08 09:11:24 +01:00
Samuele E. Locatelli 30e7ad2c5a TAB3:
- ancora code cleanup
2025-03-08 09:10:52 +01:00
Samuele E. Locatelli 8f7ebec2c0 TAB3:
- fix reload post controlli
- typo e refactoring vari
2025-03-08 09:06:27 +01:00
Samuele E. Locatelli f037786163 TAB3:
- Completata correzione placeholders in status map e dettaglio
2025-03-08 08:51:39 +01:00
Samuele E. Locatelli d1f9dc03ab TAB3:
- fix placeholder mappa stato
2025-03-08 08:06:03 +01:00
Samuele E. Locatelli 37424d3ed0 Merge tag 'FixDP_02' into develop
Fix reload TAB3
2025-03-07 22:07:33 +01:00
Samuele E. Locatelli 6f6c134890 Merge branch 'release/FixDP_02' 2025-03-07 22:07:25 +01:00
Samuele E. Locatelli 66f154902b Completo review della rilettura RAB3... da testrare ma sembra OK! 2025-03-07 22:07:01 +01:00
Samuele E. Locatelli a18d91fabb Fix MessageService 2025-03-07 21:42:52 +01:00
Samuele E. Locatelli c800484a5f migliorato svuotamento cache ma NON 100% ok... 2025-03-07 19:22:39 +01:00
Samuele E. Locatelli 5fc45f056a Update refresh pagine in conferma prod + fix status map TAB3 2025-03-07 19:16:33 +01:00
Samuele E. Locatelli 6765e70a76 Update dettaglio richiesta 2025-03-07 17:13:56 +01:00
Samuele E. Locatelli 1db1760be4 Update x ridurre chiamate in pagine dettaglio 2025-03-07 16:31:50 +01:00
Samuele E. Locatelli b456894669 Rimozione doppie letture x blink inutilizzato in basePage 2025-03-07 16:11:03 +01:00
Samuele E. Locatelli cc941b265c Update quantità scarti/rilavorati: scorporati 2025-03-07 15:26:51 +01:00
Samuele E. Locatelli 1b475ddeee fix display articolo PODL/ODL 2025-03-07 15:18:54 +01:00
Samuele E. Locatelli 39df2e6e11 Merge tag 'TAB_FixDP_01' into develop
Fix gestione DP su TAB3
2025-03-07 13:55:40 +01:00
Samuele E. Locatelli eb009e35b3 Merge branch 'release/TAB_FixDP_01' 2025-03-07 13:55:29 +01:00
Samuele E. Locatelli df32e85aab Completato review TAB3 x DP 2025-03-07 13:54:44 +01:00
Samuele E. Locatelli 750745209f Fix errrore detail DP in prod: uso solo CRecMSE su tutta la pagina 2025-03-07 13:16:17 +01:00
Samuele E. Locatelli 8621c5b5cb Fix selezione tavola su DP 2025-03-07 13:00:56 +01:00
Samuele E. Locatelli 70f4f8ce8b inizio fix tab3 x DP 2025-03-07 12:28:07 +01:00
Samuele E. Locatelli 9bb4e1e9a9 Fix alyout fino a 800px 2025-03-07 10:05:49 +01:00
Samuele E. Locatelli c018d096ec Inizio verifica TAB3 x DP 2025-03-07 10:05:41 +01:00
Samuele Locatelli 6c109f3a45 Ancora fix minori x display update in reset pagina TAB3 2025-03-01 10:04:36 +01:00
Samuele Locatelli 3db6e458af Merge tag 'FixMissingPlantError_01' into develop
Fix condizioni errore come cambio reparto/cambio assegnazione impianti
(es tablet ufficio /EV) + aggiunta pagina force-reload richiamabile con
QRCode
2025-02-28 15:13:32 +01:00
Samuele Locatelli 14529e9ad7 Merge branch 'Release/FixMissingPlantError_01' 2025-02-28 15:12:44 +01:00
Samuele Locatelli 60fcf7aa8d TAB3:
- fix condizione errori in caso di cambio reparto/impianti
- aggiunta pagina force-reset che fa cleanup completo dati browser
2025-02-28 15:12:07 +01:00
Samuele Locatelli 3be139fe0a Merge tag 'CambioDisplayPodl_02' into develop
Fix display stato macchina e prod x tutto TAB3
2025-02-24 18:33:54 +01:00
Samuele Locatelli f430dddc82 Merge branch 'Release/CambioDisplayPodl_02' 2025-02-24 18:33:42 +01:00
Samuele Locatelli e1f84a7f4f Update tab3 x display macchina con refresh 2025-02-24 18:33:20 +01:00
Samuele Locatelli 344b2d94df Update appsettings staging e prod con stringa conn vocabolario 2025-02-24 16:55:51 +01:00
Samuele Locatelli f63c290a58 Merge tag 'StatsAddGraph_01' into develop
Update versione stats pubblicata
2025-02-24 16:33:51 +01:00
Samuele Locatelli 1052fe8295 Merge branch 'Release/StatsAddGraph_01' 2025-02-24 16:33:26 +01:00
Samuele Locatelli 01d4cd6255 Update display tab3 in conferma prod e display continuo 2025-02-24 15:52:00 +01:00
Samuele Locatelli bc21756af5 Update display tab con scarti + rilavorati ove presenti 2025-02-24 15:26:19 +01:00
Samuele Locatelli 25aa82adaa Update display info su rilavorati in TAB 2025-02-24 11:40:20 +01:00
Samuele Locatelli 90523ad0ab Merge tag 'SpecAddFL_ConnString_01' into develop
Aggiunta conn string x SPEC x puntare a DB FL separato x FluxLogReduce &
co
2025-02-21 08:00:07 +01:00
Samuele Locatelli ff6878dbd7 Merge branch 'Release/SpecAddFL_ConnString_01' 2025-02-21 07:59:47 +01:00
Samuele Locatelli ce9b41e8c1 Update SPEC x usare DB corretto x reduce FL 2025-02-21 07:59:08 +01:00
Samuele Locatelli 4023c58c35 Merge tag 'CambioDisplayPodl_01' into develop
Update in prod x gestione nuovo TAB e update STATS
2025-02-19 12:40:03 +01:00
Samuele Locatelli 5d876b61d1 Merge branch 'Release/CambioDisplayPodl_01' 2025-02-19 12:38:25 +01:00
Samuele Locatelli dfde08a4ea Refresh 2025-02-19 12:37:51 +01:00
Samuele Locatelli 674cf286b0 TAB3:
- messo btn disabled x scarti/controlli
2025-02-19 10:34:50 +01:00
Samuele Locatelli d8ccf06912 Maybe fix errore reload 2025-02-19 10:13:47 +01:00
Samuele Locatelli b3f2029fff Update x FIX ODL 2025-02-19 10:02:38 +01:00
Samuele Locatelli 538e347923 TAB3:
- Completata review chewron up/down
2025-02-19 09:49:36 +01:00
Samuele Locatelli 95c36a8f3d Update display altri 2 pagine 2025-02-19 09:36:12 +01:00
Samuele Locatelli 7d48f67f02 update gestione PODL display ovunque 2025-02-19 09:09:39 +01:00
Samuele Locatelli b8b3a58b52 Completata prima release display PODL in testata 2025-02-18 19:07:27 +01:00
Samuele Locatelli 0aad875551 TAB3
- inizio modifica x riportare cicli rilavorati
- aggiunta display PODL in machine block
2025-02-18 18:55:21 +01:00
Samuele Locatelli 2d89f401dc Update display charts energy 2025-02-18 16:13:19 +01:00
Samuele Locatelli b32bafda51 Update display linea energy 2025-02-18 15:05:50 +01:00
Samuele Locatelli 256851a0ce STATS
- fix componenti grafici Bootstrap5
- fix filtro azioni UL
2025-02-18 12:51:26 +01:00
Samuele Locatelli 43aae08d1e STATS:
- Update visualizzazione ODL ed Energy
2025-02-18 11:57:06 +01:00
Samuele Locatelli 5bef1602cb Merge tag 'ShowXDL_Attr_01' into develop
Fix gestione visualizzazione PODL in attrezzaggio
2025-02-10 12:47:02 +01:00
Samuele Locatelli d2a77e9dd0 Merge branch 'Release/ShowXDL_Attr_01' 2025-02-10 12:46:48 +01:00
Samuele Locatelli 77653d02c2 TAB3:
- fix visualizzazione ODL/PODL quando ci sono pezzi ed in attrezzaggio
2025-02-10 12:46:24 +01:00
Samuele Locatelli 8b46d7abc8 Merge tag 'ModDbFluxData_01' into develop
Completata review x DB FluxData separato
2025-02-10 12:18:33 +01:00
Samuele Locatelli 27f627aa67 Merge branch 'Release/ModDbFluxData_01' 2025-02-10 12:18:16 +01:00
Samuele Locatelli 5fe1e9ea8f Typo refresh 2025-02-10 12:01:10 +01:00
Samuele Locatelli 5885e8a2cf MOdifica core x nuovo DB x FluxData
- SPEC upgraded
2025-02-10 11:43:24 +01:00
Samuele Locatelli a668ed9cbd Merge tag 'FixPodlRecipeEdit_01' into develop
Fix gestione chiusura su selezione ricetta x PODL (es Fimat tenditalia)
2025-01-31 11:10:59 +01:00
Samuele Locatelli f2a6521229 Merge branch 'Release/FixPodlRecipeEdit_01' 2025-01-31 11:10:41 +01:00
Samuele Locatelli 53ef92a1d4 Fix condizione uscita selezione ricette in PODL 2025-01-31 11:10:12 +01:00
Samuele Locatelli a40ed4496e Merge tag 'AddTab3PodlAlwaysDisp_01' into develop
ggiunta display dei dati ODL/PODL sempre x TAB3
2024-12-23 10:13:14 +01:00
Samuele Locatelli 4c57bc1efb Merge branch 'Release/AddTab3PodlAlwaysDisp_01' 2024-12-23 10:13:01 +01:00
Samuele Locatelli 24b8def4ee Update TAB3: display PODL/ODL detail sempre 2024-12-23 10:12:14 +01:00
Samuele Locatelli fb012082f4 TAB3:
- Modifica condizione visualizzazione notifica email allarmi
2024-12-05 10:29:48 +01:00
Samuele Locatelli 87ceb0a1bb Aggiunto descrizione UM x parametri in TAB3 2024-11-25 19:52:31 +01:00
Samuele Locatelli b1cefb4f3d Merge tag 'SPEC_POdlFixSelArt01' into develop
fix gestione sel articolo in creazione PODL
2024-11-15 15:48:06 +01:00
Samuele Locatelli 352ba1949b Merge branch 'Release/SPEC_POdlFixSelArt01' 2024-11-15 15:47:57 +01:00
Samuele Locatelli a8353a4769 SPEC:
- fix selezione PODL se ci fosse 1 solo articolo...
- config x preselezione numChar ricerca articolo
2024-11-15 15:47:14 +01:00
Samuele Locatelli 08c03bf6b3 Merge tag 'Tab3_FixScartoPostSetup01' into develop
Update x gestione scarti post attrezzaggio: reset conteggio entro 1
blink
2024-11-14 16:09:01 +01:00
Samuele Locatelli 4401907b10 Merge branch 'Release/Tab3_FixScartoPostSetup01' 2024-11-14 16:08:20 +01:00
Samuele Locatelli 9eb3ef6645 TAB3:
- fix reset scarti confermati alla gestione ODL (chiudi/nuovo)
2024-11-14 16:07:44 +01:00
Samuele Locatelli a9f2af1025 Fix commento demo x TAB3 2024-11-12 19:19:51 +01:00
Samuele Locatelli 4d71642dde TAB
- refresh parametri con display green se ok
2024-11-12 09:42:35 +01:00
Samuele Locatelli d14aa1ad8e MON
- Update ordinamento x filtro gruppo
2024-11-12 09:42:25 +01:00
Samuele Locatelli 9718217201 Merge tag 'FixSpec01' into develop
Update gestioen codgruppo se mancante
2024-11-06 10:12:34 +01:00
Samuele Locatelli f9881673b1 Merge branch 'Release/FixSpec01' 2024-11-06 10:12:24 +01:00
Samuele Locatelli 499bdd7348 SPEC
- Update in cascata info di PODL
2024-11-06 10:12:04 +01:00
Samuele Locatelli 69e7f41940 Merge tag 'FixCore01' into develop
Fix recupero ODL/PODL in spec
2024-11-06 08:37:05 +01:00
Samuele Locatelli 4d0600d5ac Merge branch 'Release/FixCore01' 2024-11-06 08:36:55 +01:00
Samuele Locatelli 357e505e87 refresh CORE 2024-11-06 08:36:24 +01:00
Samuele Locatelli dc53265634 Merge tag 'ReduceInstallerSize01' into develop
Riduzione size installers:
- eliminazione CodeAnalysis ove presente
- deploy solo arch Win-x64
2024-11-04 09:00:03 +01:00
Samuele Locatelli bea9ca5cc0 Merge branch 'Release/ReduceInstallerSize01' 2024-11-04 08:59:43 +01:00
Samuele Locatelli 4a41fdbc38 MON + IOC + TAB3
- shrink deploy x solo Win-x64
2024-11-04 08:58:51 +01:00
Samuele Locatelli 0327d8617a STATS - SPEC
- deploy solo Win-x64
- checl deploy ridotto
2024-11-04 08:52:43 +01:00
Samuele Locatelli bd8212fdba test deploy x64 su IIS01/02/03 2024-11-04 08:38:29 +01:00
Samuele Locatelli d05d2e7ae8 LAND:
- test compilazione senza output CodeAnalysis da csproj
- aggiunta SatelliteResourceLanguages
- aggiunta ExcludeAssets="All"  a <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design"
2024-11-04 08:30:18 +01:00
Samuele Locatelli faee11aab2 Merge tag 'LandFixDownload01' into develop
Fix multilang dll + fix download display
2024-11-02 11:42:29 +01:00
Samuele Locatelli 62ba7f2aa7 LAND
- fix multilang dll
2024-11-02 11:42:09 +01:00
Samuele Locatelli f65e914093 Merge branch 'Release/LandFixDownload01' 2024-11-02 11:37:21 +01:00
Samuele Locatelli ec24aa68c1 LAND
- fix display avanzamento download
2024-11-02 11:36:43 +01:00
Samuele Locatelli 82e35f1b70 Merge tag 'SpecAddTas2ExeStartPOdl' into develop
Update SPEC x gestione refresh ODL post avvio/chiusura su IOB
2024-11-02 11:02:00 +01:00
Samuele Locatelli 9bba40c80e Merge branch 'Release/SpecAddTas2ExeStartPOdl' 2024-11-02 11:00:26 +01:00
Samuele Locatelli 800cbaaec4 SPEC, test su FTP
- ok force sync
- ok chiusura ODL
2024-11-02 10:59:57 +01:00
Samuele Locatelli 605d2a16b7 Merge tag 'FixTaskManCache01' into develop
ggiunto path esplicito x redis cache address tra + sw che impiegano
TaskManager
2024-10-31 13:00:44 +01:00
Samuele Locatelli d61b015c87 Merge branch 'Release/FixTaskManCache01' 2024-10-31 12:57:46 +01:00
Samuele Locatelli c56d25139d Fix gestione cache TaskMan che andava a collidere 2024-10-31 12:57:26 +01:00
Samuele Locatelli 62fd1d0ab2 Merge tag 'FixNavMenuToggle' into develop
Update x gestione toggle nav menu sx
2024-10-31 11:10:30 +01:00
Samuele Locatelli c2d70d515f Merge branch 'Release/FixNavMenuToggle' 2024-10-31 11:10:21 +01:00
Samuele Locatelli a00ed182e0 SPEC:
- update tobble nav menu sx
2024-10-31 11:10:00 +01:00
Samuele Locatelli 380f386f91 Fix LAND x menù sx collapsible 2024-10-31 11:04:15 +01:00
Samuele Locatelli 3e65a0dc7b PROG
- fix collapse menu
2024-10-31 10:58:05 +01:00
Samuele Locatelli 882c68ff27 STATS:
- update gestione collassa menù sx
2024-10-31 10:51:47 +01:00
Samuele Locatelli 76d8628b2a Merge tag 'TaskExecMan08' into develop
Fix errore static con db in concorrenza
2024-10-30 11:53:39 +01:00
Samuele Locatelli a0da9dedab Merge branch 'Release/TaskExecMan08' 2024-10-30 11:53:30 +01:00
Samuele Locatelli ec35191b70 Correzione obj statico x db x errori concorrenza 2024-10-30 11:52:59 +01:00
Samuele Locatelli d2c4b7a763 Merge tag 'MinorFix01' into develop
Fix monori x gestione forceReset (STATS) + modalità chiamata stored x
TaskMan
2024-10-30 10:06:37 +01:00
Samuele Locatelli d7612af6a4 Merge branch 'Release/MinorFix01' 2024-10-30 10:06:19 +01:00
Samuele Locatelli 695f6e9152 TaskMan
- fix call esecuzione stored RAW
STATS
- fix pagina ForceReset che non si chiude correttamente
2024-10-30 10:05:49 +01:00
Samuele Locatelli 0870c45137 Merge tag 'TaskExecMan07' into develop
Update gestione calcolo missing
2024-10-29 17:55:04 +01:00
Samuele Locatelli ee2a3e6354 Merge branch 'Release/TaskExecMan07' 2024-10-29 17:54:50 +01:00
Samuele Locatelli 8d0870477b PROG
- fix missing file x IOB (errore in assegnazione modifica pre salvataggio in EFCore)
2024-10-29 17:54:35 +01:00
Samuele Locatelli a66c0fdadf SPEC:
_ aggiunto gestione mimetype coinfigurabile
- fix AppUri base
2024-10-29 17:21:50 +01:00
Samuele Locatelli d1f694da1b Merge tag 'TaskExecMan06' into develop
PROG: Completata review x gestioen delete/archive/revisioni/esclusione file
temp
2024-10-29 10:42:00 +01:00
Samuele Locatelli 9f8910d48e Merge branch 'Release/TaskExecMan06' 2024-10-29 10:41:42 +01:00
Samuele Locatelli f331967417 PROG
- fix esclusione file temp da regexp
- fix gestione delete
- test update/approve da REST
2024-10-29 10:41:30 +01:00
Samuele Locatelli 37e54bc587 PROG
- Fix gerstione revisioni x Del / Appr
2024-10-29 09:04:58 +01:00
Samuele Locatelli c5e433a642 Continuo fix gest approvazione 2024-10-28 20:15:49 +01:00
Samuele Locatelli fc5ec8d92a Merge tag 'TaskExecMan05' into develop
Update Gestione redis condiviso + fix vari gestione AppUrl di base
2024-10-28 16:58:25 +01:00
Samuele Locatelli 2c5f9d9329 Merge branch 'Release/TaskExecMan05' 2024-10-28 16:58:08 +01:00
Samuele Locatelli 2346c67f3a Review AppUrl base x siti CORE
Divisione aree Redis tra app (x TaskMan in particolare)
 Test apertura app
2024-10-28 16:57:52 +01:00
Samuele Locatelli d48ba9deb0 Merge tag 'TaskExecMan04' into develop
Fix migrate in try/catch x TaskMan
2024-10-28 12:07:51 +01:00
Samuele Locatelli d4c48ee62f Merge branch 'Release/TaskExecMan04' 2024-10-28 12:07:39 +01:00
Samuele Locatelli f71517425d TaskList:
- fix migrations init
2024-10-28 12:07:23 +01:00
Samuele Locatelli a329bb4c5b Merge tag 'TaskExecMan03' into develop
Fix compilazione INVE
2024-10-28 11:34:29 +01:00
Samuele Locatelli 0b1273c61f Merge branch 'Release/TaskExecMan03' 2024-10-28 11:34:20 +01:00
Samuele Locatelli be0f1076db Fix compilazione INVE x spsotamento classi TaskMan 2024-10-28 11:34:05 +01:00
Samuele Locatelli 5caad8c1d7 Merge tag 'TaskExecMan02' into develop
Gestione TaskExe su progetto esterno completata x LAND/PROG/STATS
(eventualmente nuget?)
2024-10-28 11:11:23 +01:00
Samuele Locatelli e974be99c5 Merge branch 'Release/TaskExecMan02' 2024-10-28 11:11:02 +01:00
Samuele Locatelli f44c32d501 Fix log TAB3
Fix PROG gestione TaskMan
2024-10-28 11:10:36 +01:00
Samuele Locatelli 1b6d28f2eb FixTaskMan module
- LAND
- STATS
2024-10-28 10:03:03 +01:00
Samuele Locatelli a2a63e283d Continuato cleanup nuget & co 2024-10-26 12:53:07 +02:00
Samuele Locatelli 6ca41ed720 MP.TaskMan +MP. STATS
- eliminazione riferimenti codice escluso da compilazione
- pulizia codice da componenti non impiegati

NON ancora 100% ok pulizia
2024-10-26 12:51:10 +02:00
Samuele Locatelli ffec555e85 MP.TaskMan:
- Completato aggiunta progetto
- porting classi servizi/controlli/db a progetto
- compilazione OK
- manca gestione connString ottimizzata x il DB di origine CORRETTO (LAND/PROG/STATS)
2024-10-26 11:02:26 +02:00
Samuele Locatelli 880df2a180 TaskMan:
- continuo porting (NON ok...)
2024-10-25 19:24:40 +02:00
Samuele Locatelli 9d6f692b4d Inizio bozza aggiunta progetto gestione TaskMan 2024-10-25 19:18:50 +02:00
Samuele Locatelli 5bd120c4fa Merge tag 'TaskExecMan01' into develop
Completata gestione Task x LAND, ora va "scorporata" e riportata x 3
siti: LAND / STATS/ PROG
2024-10-25 19:05:22 +02:00
Samuele Locatelli 7a9da8eedf Merge branch 'Release/TaskExecMan01' 2024-10-25 19:04:26 +02:00
Samuele Locatelli 27b88b3d62 Update pagine LAND 2024-10-25 19:02:53 +02:00
Samuele Locatelli d3c95a9fe1 LAND:
- continuo modifiche x gestione task eseguiti
2024-10-25 16:52:45 +02:00
Samuele Locatelli e4fd85c9cb LAND
- import scheduler da STATS
- ok compilazione (da completare con esecuzione REST call)
2024-10-23 19:21:11 +02:00
Samuele Locatelli b3b81de6a8 PROG
- correzione disabilitazione filtro path file e username
2024-10-23 18:14:55 +02:00
Samuele Locatelli 4ee2ef1eb9 PROG
- ok cancella
- ok metodi API x check + approva salvando senza user
- ok procedure insomnia salvate
2024-10-23 17:56:58 +02:00
Samuele Locatelli 645bc8d695 OK servizio auto approvazione da PROG 2024-10-23 14:06:59 +02:00
Samuele Locatelli b4275d84c8 PROG
- fix display elenco
2024-10-22 19:38:13 +02:00
Samuele Locatelli 18c58522a2 PROG;
- Fix filtro file e username
2024-10-22 19:25:48 +02:00
Samuele Locatelli 417aaa9d28 PROG
- fix gestione display versioni
fix update in selezione
2024-10-22 18:37:30 +02:00
Samuele Locatelli 84d8ea5d97 Merge tag 'UploadLiman03' into develop
LiMan: Folder upload esplicitata per esteso
2024-10-22 15:17:20 +02:00
Samuele Locatelli 1e1d29d187 Merge branch 'Release/UploadLiman03' 2024-10-22 15:17:04 +02:00
Samuele Locatelli 15dc9b4334 LAND
- folder IOB upload esplicitata in config x esteso
2024-10-22 15:16:45 +02:00
Samuele Locatelli 042c57c18c Merge tag 'UploadLiman02' into develop
Update gestione UserAppr
2024-10-22 12:07:02 +02:00
Samuele Locatelli 72c3df8172 Merge branch 'Release/UploadLiman02' 2024-10-22 12:06:42 +02:00
Samuele Locatelli d9fa23b17b PROG:
- Aggiunta preliminare gestione UserName
- verifica gestione auth windows
- update in prod
2024-10-22 12:06:25 +02:00
Samuele Locatelli 76b84f24d3 Aggiunta migrazione x dato UserAppr 2024-10-22 11:03:13 +02:00
Samuele Locatelli f92d2f7f27 Correzione display XML files 2024-10-22 10:28:37 +02:00
Samuele Locatelli 5cea4857dd PROG:
- fix display size
- fix display status
- review modulo DiffView
2024-10-22 10:06:56 +02:00
Samuele Locatelli 9fad86eb17 PROG
- correzione tag extraction
- correzione indentazione json
2024-10-21 20:09:28 +02:00
Samuele Locatelli 3623e0059f Merge tag 'UploadLiman01' into develop
Aggiornamento log x versione LAND con invio su LIMAN
2024-10-21 17:41:50 +02:00
Samuele Locatelli 13682c04a6 Merge branch 'Release/UploadLiman01' 2024-10-21 17:41:28 +02:00
Samuele Locatelli 90a3d685b4 Update LAND x invio zip a LiMan 2024-10-21 17:41:02 +02:00
Samuele Locatelli be16c2ec56 PROG:
- FIx Yaml
- Approvazione in massa
- fix bs-5 vari
- aggiunta componenti da lib Razor EGW
2024-10-21 16:01:21 +02:00
Samuele Locatelli 9613a7f2a1 update path in YAMl x PTOG 2024-10-21 15:22:55 +02:00
Samuele Locatelli 40ae593144 Fix yaml 2024-10-21 15:17:24 +02:00
Samuele Locatelli 3228b95ef7 Refresh num vers 2024-10-21 15:13:12 +02:00
Samuele Locatelli 9ed2faf476 Completo modifiche x test CI/CD nuovo YAML 2024-10-21 15:12:51 +02:00
Samuele Locatelli 35e9be2b76 Fix YAML x testare deploy su IIS04 in prod 2024-10-21 15:12:38 +02:00
Samuele Locatelli 60f983df9b Completato fix setup page + cache redis 2024-10-21 12:05:23 +02:00
Samuele Locatelli ea2f942f94 PROG:
- Inizio modifiche
- porting bootstrap + fontawesome
- inizio editingdirectory
2024-10-21 11:32:50 +02:00
Samuele Locatelli d4708c4bc8 Merge branch 'develop' 2024-10-21 11:32:01 +02:00
Samuele Locatelli 101ac61b14 Fix calcolo AppDir x LAND 2024-10-21 11:31:52 +02:00
Samuele Locatelli bc1364c129 Merge tag 'SpecAddOdlFolder06' into develop
Fix gestione backup tab DB di conf
2024-10-18 18:21:01 +02:00
Samuele Locatelli 6f46ba5232 Merge branch 'Release/SpecAddOdlFolder06' 2024-10-18 18:20:14 +02:00
Samuele Locatelli 6c3cf425f2 COmpletata gestione LAND:
- gestione backup conf app OK
- gestione tab salvate come json OK
- gestione IOB OK
- gestione zip + pwd OK
- gestione upload OK (debug su DEV, poi in prod)
2024-10-18 18:15:54 +02:00
Samuele Locatelli cd1cdb13fc Merge tag 'SpecAddOdlFolder05' into develop
Fix SPEC x nuget
2024-10-18 16:16:46 +02:00
Samuele Locatelli 92771d3257 Merge branch 'Release/SpecAddOdlFolder05' 2024-10-18 16:16:17 +02:00
Samuele Locatelli d9064b6605 refresh proj SPEC 2024-10-18 16:15:44 +02:00
Samuele Locatelli eb2e10ff02 Fix nuget x SPEC 2024-10-18 16:13:17 +02:00
Samuele Locatelli bcac3259d0 Merge tag 'SpecAddOdlFolder04' into develop
fix nuget vari
2024-10-18 15:49:08 +02:00
Samuele Locatelli acc12b187f Merge branch 'Release/SpecAddOdlFolder04' 2024-10-18 15:49:03 +02:00
Samuele Locatelli 522b13ad83 Fix versioni nuget varie
- IOC
- LAND
- MON
- TAB3
2024-10-18 15:48:48 +02:00
Samuele Locatelli f8a3298e36 Merge tag 'SpecAddOdlFolder03' into develop
Fix gestione upload file conf + file IOB
2024-10-18 15:34:59 +02:00
Samuele Locatelli a5774e2bb3 Merge branch 'Release/SpecAddOdlFolder03' 2024-10-18 15:34:48 +02:00
Samuele Locatelli b8e5197bc7 LAND
. fix condizione DEBUG URL x upload (verso LiMan dev locale)
2024-10-18 15:34:25 +02:00
Samuele Locatelli 76708b49fb LAND:
- ok spedizione ZIP
- ok password zip
- ok test in DEV
2024-10-18 15:10:29 +02:00
Samuele Locatelli 7d2dd68344 Reorg codice 2024-10-17 19:42:07 +02:00
Samuele Locatelli 7ce1a7b54e LAND:
- aggiunta recupero files conf
- aggiunta files IOB
- aggiunta zip (no pwd)
2024-10-17 18:57:56 +02:00
Samuele Locatelli d8c8d8dbb9 SPEC
- fix review stats ODL con modulo
- completata ottimizzazione componente display files
2024-10-15 18:52:28 +02:00
Samuele Locatelli a559357005 Merge tag 'SpecAddOdlFolder02' into develop
Fix display fodler x ODL già archiviate
2024-10-15 12:35:32 +02:00
Samuele Locatelli 4381525430 Merge branch 'Release/SpecAddOdlFolder02' 2024-10-15 12:35:24 +02:00
Samuele Locatelli f200f11774 SPEC:
- fix display folder anceh su ODL archiviate
2024-10-15 12:35:10 +02:00
Samuele Locatelli af78e7cbab Merge tag 'SpecAddOdlFolder01' into develop
Aggiunto gestione ODL folder, fix vari TAB + display info avanzate
2024-10-15 11:28:05 +02:00
Samuele Locatelli 541e5ed046 Merge branch 'Release/SpecAddOdlFolder01' 2024-10-15 11:27:50 +02:00
Samuele Locatelli 6806f7ffe5 SPEC:
- Fix gestione paginazione x elenco files
- Fix reload
2024-10-15 11:27:28 +02:00
Samuele Locatelli e6179601fb TAB3:
- Fix display error
2024-10-15 11:16:21 +02:00
Samuele Locatelli 9007a4df85 SPEC:
- inizio gestione display folder ODL
- browse directory locale x documenti
- da verificare metodo refresh modulo browse
2024-10-15 10:12:50 +02:00
Samuele Locatelli 7b5c7afd54 TAB3:
- review pagina info iob
- recupero e display dati da MP-IO x nuove info configu IOB-Macchina
2024-10-14 19:34:20 +02:00
Samuele Locatelli 806b4918cb Merge tag 'FixTab3SetupOdl2MpIo_01' into develop
Fix gestione reset post attrezzaggio/chiusura ODL su TAB3 con invio
aprametri verso IOB-WIN e fix cache redis su MP-IO
2024-10-08 18:31:21 +02:00
Samuele Locatelli ec87d291ad Merge branch 'Release/FixTab3SetupOdl2MpIo_01' 2024-10-08 18:30:53 +02:00
Samuele Locatelli dc8879d7c6 TAB3:
- gestione cache MP-IO che scade su operazioni da tab che riguardano ODL
- fix gestione fine prod con evento inviato a IOB-WIN come task2exe
2024-10-08 18:30:25 +02:00
3945 changed files with 372549 additions and 395181 deletions
+124 -10
View File
@@ -5,6 +5,7 @@ variables:
APP_NAME: 'MP.Stats'
SOL_NAME: 'MP-STATS'
NUGET_PATH: 'C:\Tools\nuget.exe'
DEST: 'install'
# nota: cer creazione rules: https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules
@@ -41,6 +42,20 @@ variables:
echo "Situazione sorgenti FINALE:"
dotnet nuget list source
# helper x fix appsettings config nei casi installer / office
.appsettings-fix: &appsettings-fix
- |
echo "esecuzione FIX appsettings.json"
$srcFile="$env:APP_NAME/appsettings.Production-install.json"
$dstFile="$env:APP_NAME/appsettings.Production.json"
if (($env:DEST -ne 'install')) {
$srcFile="$env:APP_NAME/appsettings.Production-office.json"
}
echo "Copy-Item -Path $srcFile -Destination $dstFile -force"
Copy-Item -Path $srcFile -Destination $dstFile -force
echo "Completata copia file appsettings.json corretto"
# helper creazione hash files x IIS
.hashBuild: &hashBuild
- |
@@ -77,6 +92,7 @@ variables:
}
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "$env:APP_NAME\Resources\manifest.xml" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/manifest.xml
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "$env:APP_NAME\Resources\ChangeLog.html" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/ChangeLog.html
# helper x fix version number
.version-fix: &version-fix
- |
@@ -184,7 +200,7 @@ MON:build:
tags:
- win
variables:
APP_NAME: MP.Mon
APP_NAME: MP.MON
SOL_NAME: MP-MON
rules:
- if: $CI_COMMIT_BRANCH == 'develop'
@@ -269,6 +285,24 @@ IOC:build:
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
RIOC:build:
stage: build
tags:
- win
variables:
APP_NAME: MP.RIOC
SOL_NAME: MP-RIOC
rules:
- if: $CI_COMMIT_BRANCH == 'develop'
- if: $CI_COMMIT_BRANCH == 'master'
- if: $CI_COMMIT_BRANCH =~ /^feature\/IOC.+/
when: always
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
TAB3:build:
stage: build
tags:
@@ -334,8 +368,6 @@ LAND:SDK:deploy:
- '& "$env:NUGET_PATH" setapikey $NUGET_API_KEY -source http://nexus.steamware.net/repository/nuget-hosted'
- '& "$env:NUGET_PATH" push *$env:NUM_DEB.nupkg -Source http://nexus.steamware.net/repository/nuget-hosted'
PROG:IIS01:deploy:
stage: deploy
tags:
@@ -379,7 +411,7 @@ MON:IIS01:deploy:
tags:
- win
variables:
APP_NAME: MP.Mon
APP_NAME: MP.MON
SOL_NAME: MP-MON
before_script:
- *nuget-fix
@@ -469,6 +501,25 @@ IOC:IIS01:deploy:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
RIOC:IIS01:deploy:
stage: deploy
tags:
- win
variables:
APP_NAME: MP.RIOC
SOL_NAME: MP-RIOC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
rules:
- if: $CI_COMMIT_BRANCH == 'develop'
- if: $CI_COMMIT_BRANCH =~ /^feature\/IOC.+/
when: always
needs: ["RIOC:build"]
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
TAB3:IIS01:deploy:
stage: deploy
tags:
@@ -516,11 +567,14 @@ PROG:IIS03:deploy:
variables:
APP_NAME: MP.Prog
SOL_NAME: MP-PROG
DEST: office.egalware.com
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
- *appsettings-fix
rules:
- if: $CI_COMMIT_BRANCH == 'master'
- if: $CI_COMMIT_BRANCH == 'develop'
needs: ["PROG:build"]
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
@@ -550,7 +604,7 @@ MON:IIS03:deploy:
tags:
- win
variables:
APP_NAME: MP.Mon
APP_NAME: MP.MON
SOL_NAME: MP-MON
before_script:
- *nuget-fix
@@ -635,6 +689,24 @@ IOC:IIS03:deploy:
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
RIOC:IIS03:deploy:
stage: deploy
tags:
- win
variables:
APP_NAME: MP.RIOC
SOL_NAME: MP-RIOC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
rules:
- if: $CI_COMMIT_BRANCH == 'master'
needs: ["RIOC:build"]
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
TAB3:IIS03:deploy:
stage: deploy
tags:
@@ -647,7 +719,7 @@ TAB3:IIS03:deploy:
- dotnet restore "$env:SOL_NAME.sln"
rules:
- if: $CI_COMMIT_BRANCH == 'master'
needs: ["IOC:build"]
needs: ["TAB3:build"]
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
@@ -727,7 +799,7 @@ MON:installer:
tags:
- win
variables:
APP_NAME: MP.Mon
APP_NAME: MP.MON
SOL_NAME: MP-MON
NEXUS_PATH: MP-MON
before_script:
@@ -854,6 +926,28 @@ IOC:installer:
- *hashBuild
- *nexusUpload
RIOC:installer:
stage: installer
tags:
- win
variables:
APP_NAME: MP.RIOC
SOL_NAME: MP-RIOC
NEXUS_PATH: MP-RIOC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
rules:
- if: $CI_COMMIT_BRANCH == 'master'
- if: $CI_COMMIT_BRANCH == 'develop'
needs: ["IOC:build"]
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release $env:APP_NAME/$env:APP_NAME.csproj -o:publish -p:verbosity=quiet
# qui il deploy su nexus...
- *hashBuild
- *nexusUpload
# --------------------------------
# RELEASE (tags only + sdk)
# --------------------------------
@@ -878,7 +972,6 @@ LAND:release:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
LAND:SDK:release:
stage: release
tags:
@@ -948,7 +1041,7 @@ MON:release:
tags:
- win
variables:
APP_NAME: MP.Mon
APP_NAME: MP.MON
SOL_NAME: MP-MON
NEXUS_PATH: MP-MON
before_script:
@@ -962,7 +1055,7 @@ MON:release:
- publish/
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
- dotnet publish -c Release -o ./publish $env:APP_NAME.csproj -p:verbosity=quiet
SPEC:release:
stage: release
@@ -1048,3 +1141,24 @@ IOC:release:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
RIOC:release:
stage: release
tags:
- win
variables:
APP_NAME: MP.RIOC
SOL_NAME: MP-RIOC
NEXUS_PATH: MP-RIOC
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
rules:
- if: $CI_COMMIT_TAG
needs: ["IOC:build"]
artifacts:
paths:
- publish/
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
+1 -1
View File
@@ -10,7 +10,7 @@
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/MP.Stats/bin/Debug/net6.0/MP.Stats.dll",
"program": "${workspaceFolder}/MP.Stats/bin/Debug/net8.0/MP.Stats.dll",
"args": [],
"cwd": "${workspaceFolder}/MP.Stats",
"stopAtEntry": false,
+24
View File
@@ -0,0 +1,24 @@
# MAPO-CORE Agent Instructions
## Core Context
- **Primary Goal**: Optimization and refactoring of the `MP-SPEC.sln` solution, focusing on migrating legacy Redis/DB caching to `FusionCache` (Memory + Redis + DB) in `MP.SPEC\Data\MpDataService.cs`.
- **Language**: C# (primary), PowerShell (scripts).
- **Documentation/Comments**: MUST be in **Italiano**.
- **Code Style**: Maintain existing region organization (`#region Public Methods`, etc.).
- **Reference Docs**: See `Refactor_Plan.md` for the current migration status and detailed strategy.
## Development Workflow
- **Build & Verification**:
- Use `./build_all_par.ps1 --agent` to build all solutions silently.
- Always verify that changes do not leave partial traces of old classes that break compilation.
- **Refactoring Strategy (`MpDataService.cs`)**:
- Use `GetOrFetchAsync<T>(string operationName, string cacheKey, Func<Task<T>> fetchFunc, TimeSpan expiration, params string[] tags)` as the standard for all data access.
- Target methods currently using manual `redisDb.StringGetAsync` / `StringSetAsync` patterns.
- **Testing**:
- Check the codebase for existing testing patterns before proposing new ones.
## Architecture Notes
- **Multi-Layer Caching**: The system is transitioning from a dual-layer (Redis + DB) to a triple-layer approach via `IFusionCache`.
- **Service Responsibility**: `MpDataService` is the central hub for data access, interacting with `MpSpecController` (EFCore) and `MpMongoController` (MongoDB).
- **Key Management**: Cache keys are heavily managed via `Utils.redis...` constants. Use these to prevent key mismatches.
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -89,7 +89,7 @@ ExecuteLog "7z x ""$SourceDir\$ZipFile"" "
# step 3 : replica applicazione
Write-Host "START copy step"
ExecuteLog "robocopy '$utilDir\publish\net6.0\' '$DestDir' /MIR /Z /LOG:'$logMirror'"
ExecuteLog "robocopy '$utilDir\publish\net8.0\' '$DestDir' /MIR /Z /LOG:'$logMirror'"
Write-Host "END copy step"
# step 4 : riavvio pool
+57
View File
@@ -0,0 +1,57 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Blazored.LocalStorage" Version="4.5.0" />
<PackageVersion Include="Blazored.SessionStorage" Version="2.4.0" />
<PackageVersion Include="DiffMatchPatch" Version="1.0.3" />
<PackageVersion Include="EgwCoreLib.Razor" Version="1.5.2605.511" />
<PackageVersion Include="EgwCoreLib.Utils" Version="1.5.2605.511" />
<PackageVersion Include="MailKit" Version="4.16.0" />
<PackageVersion Include="Majorsoft.Blazor.Components.Debounce" Version="1.5.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.Http.Connections.Common" Version="8.0.25" />
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.25" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.36" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.36" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.36" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.25" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.1" />
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.17" />
<PackageVersion Include="MongoDB.Driver" Version="2.19.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="NLog" Version="6.1.3" />
<PackageVersion Include="NLog.Targets.OpenTelemetryProtocol" Version="1.2.6" />
<PackageVersion Include="NLog.Web.AspNetCore" Version="6.1.3" />
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.15.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.15.0-beta.1" />
<PackageVersion Include="Snappier" Version="1.3.1" />
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0" />
<PackageVersion Include="RestSharp" Version="112.0.0" />
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
<PackageVersion Include="StackExchange.Redis" Version="2.12.14" />
<PackageVersion Include="System.Data.SqlClient" Version="4.8.6" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.Swagger" Version="6.9.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.9.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.9.0" />
<PackageVersion Include="YamlDotNet" Version="16.1.0" />
<PackageVersion Include="Yarp.ReverseProxy" Version="2.3.0" />
<PackageVersion Include="ZiggyCreatures.FusionCache" Version="2.6.0" />
<PackageVersion Include="ZiggyCreatures.FusionCache.Backplane.StackExchangeRedis" Version="2.6.0" />
<PackageVersion Include="ZiggyCreatures.FusionCache.Serialization.NewtonsoftJson" Version="2.6.0" />
</ItemGroup>
</Project>
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
+37
View File
@@ -0,0 +1,37 @@
using System.Reflection;
namespace Egw.Core
{
public class Utils
{
/// <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)
{
// 1. Recuperiamo le proprietà del tipo T una sola volta (Risolve i problemi di performance)
PropertyInfo[] properties = typeof(T).GetProperties();
var lines = new List<string>();
// 2. Creiamo l'header usando il separatore corretto (Risolve il bug del ";" fisso)
var header = string.Join(separator, properties.Select(p => p.Name));
lines.Add(header);
// 3. Estraiamo i valori gestendo i possibili null (Risolve il tuo warning)
var valueLines = reportData
.Where(row => row != null)
.Select(row => string.Join(separator, properties.Select(p => p.GetValue(row)?.ToString() ?? string.Empty)));
lines.AddRange(valueLines);
// 4. Utilizziamo il metodo di scrittura asincrono nativo di .NET
await File.WriteAllLinesAsync(path, lines);
}
}
}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
{"_type":"export","__export_format":4,"__export_date":"2024-10-23T15:45:49.150Z","__export_source":"insomnia.desktop.app:v2023.5.8","resources":[{"_id":"req_bb23a3e0a78f44999350ddcefebaaf82","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691634502,"created":1729691518776,"url":"{{ _.BASE_URL }}/api/Health","name":"Health","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","parentId":null,"modified":1729691518738,"created":1729691518738,"name":"MAPO-PROG","description":"","scope":"collection","_type":"workspace"},{"_id":"req_2b3ff677e75040ed9dfe30463fb5d408","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729691689274,"created":1729691666872,"url":"{{ _.BASE_URL }}/api/FileChange","name":"FileChange Health","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1729691677997,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_cf0e8b6c31334d67bc421487d31a5540","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691675552,"created":1729691673364,"name":"FileChange","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1680616270148.125,"_type":"request_group"},{"_id":"req_8fa584b2405b4c3588e1da50c6c02cbc","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729691870054,"created":1729691818717,"url":"{{ _.BASE_URL }}/api/FileChange/approve/ALL?numDayPrev=7","name":"FileChange AutoSave","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1726323968489,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_b28dbcb90b9f4a30ae621f46ca80abf1","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729698051601,"created":1729698043734,"url":"{{ _.BASE_URL }}/api/FileChange/check/ALL?numDayPrev=0","name":"FileChange CheckAll","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1724640113735,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_f533a867e5e74bc7a712974eb5185fe2","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518740,"created":1729691518740,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_52975036fdb946749a04bf8b105649dc","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518752,"created":1729691518752,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_034d8153209c43289ef94bb511a381e4","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518782,"created":1729691518757,"fileName":"MAPO-PROG","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_6acd2ea246a54f2fa42dfa7191704e4f","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691571662,"created":1729691518742,"name":"DEV","data":{"BASE_URL":"https://localhost:5001"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_add3f929a9774e949eaacdfef9669698","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691576277,"created":1729691518746,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/PROG"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"},{"_id":"env_78f831742ec84968878b6bb3e2dbbee3","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691592437,"created":1729691579006,"name":"PROD","data":{"BASE_URL":"https://iis01.egalware.com/MP/PROG"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1692979703520,"_type":"environment"}]}
+1 -1
View File
@@ -1 +1 @@
{"_type":"export","__export_format":4,"__export_date":"2023-04-04T15:23:33.215Z","__export_source":"insomnia.desktop.app:v2023.1.0","resources":[{"_id":"req_cd57cb8728854cd5a7d026b9aba60047","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680616613886,"created":1680616613017,"url":"https://localhost:7212/api/Recipe/GetRecipe?idxPODL=1656","name":"New Request","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","parentId":null,"modified":1680615228636,"created":1680615228636,"name":"MAPO-SPEC","description":"","scope":"collection","_type":"workspace"},{"_id":"req_4d233d6fb970485ea929bdffdcfae05a","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621773464,"created":1680615246346,"url":"{{ _.BASE_URL }}/api/Recipe/GetRecipe?idxPODL=1656","name":"GET RECIPE (calc)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680615241541.5,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_278d5f0a6555457e88ad2e58cfdaae23","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621754168,"created":1680615436433,"url":"{{ BASE_URL }}/api/RecipeArchive/GetFile?idxMacc=SIMUL_02&fileName=10002.xml","name":"GET FILE (from archive)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679846511868.4375,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615377532,"created":1680615228640,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228642,"created":1680615228642,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_b61936e963e34a759001c6a22ad8da60","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228637,"created":1680615228637,"fileName":"MAPO-SPEC","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_2757d8ba1b17435987847d0499e9369e","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616993850,"created":1680615301619,"name":"DEV","data":{"BASE_URL":"https://localhost:7212"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_f5b6aef3c2b444aab04c9056404d63f9","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616996428,"created":1680615328099,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/SPEC"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"}]}
{"_type":"export","__export_format":4,"__export_date":"2024-10-23T15:46:09.187Z","__export_source":"insomnia.desktop.app:v2023.5.8","resources":[{"_id":"req_cd57cb8728854cd5a7d026b9aba60047","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680616613886,"created":1680616613017,"url":"https://localhost:7212/api/Recipe/GetRecipe?idxPODL=1656","name":"New Request","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","parentId":null,"modified":1680615228636,"created":1680615228636,"name":"MAPO-SPEC","description":"","scope":"collection","_type":"workspace"},{"_id":"req_4d233d6fb970485ea929bdffdcfae05a","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621773464,"created":1680615246346,"url":"{{ _.BASE_URL }}/api/Recipe/GetRecipe?idxPODL=1656","name":"GET RECIPE (calc)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680615241541.5,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_278d5f0a6555457e88ad2e58cfdaae23","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621754168,"created":1680615436433,"url":"{{ BASE_URL }}/api/RecipeArchive/GetFile?idxMacc=SIMUL_02&fileName=10002.xml","name":"GET FILE (from archive)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679846511868.4375,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615377532,"created":1680615228640,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228642,"created":1680615228642,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_b61936e963e34a759001c6a22ad8da60","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228637,"created":1680615228637,"fileName":"MAPO-SPEC","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_2757d8ba1b17435987847d0499e9369e","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616993850,"created":1680615301619,"name":"DEV","data":{"BASE_URL":"https://localhost:7212"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_f5b6aef3c2b444aab04c9056404d63f9","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616996428,"created":1680615328099,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/SPEC"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"}]}
+4 -4
View File
@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.3.3" />
<PackageReference Include="YamlDotNet" Version="16.1.0" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="NLog" />
<PackageReference Include="YamlDotNet" />
</ItemGroup>
</Project>
+88 -1
View File
@@ -3,6 +3,7 @@ using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
using static IobConf.Core.EnumConf;
using NLog;
using System.Runtime.CompilerServices;
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
@@ -23,6 +24,63 @@ namespace IobConf.Core
Log = LogManager.GetCurrentClassLogger();
}
/// <summary>
/// Init classe configurazione da file
/// </summary>
public IobConfTree(string confFilePath)
{
Log = LogManager.GetCurrentClassLogger();
if (File.Exists(confFilePath))
{
IobConfTree newConfObj = new IobConfTree();
// verifico TIPO file...
string fileExt = Path.GetExtension(confFilePath);
string fileName = Path.GetFileName(confFilePath);
string rawData = File.ReadAllText(confFilePath);
if (!string.IsNullOrEmpty(rawData))
{
// leggo in base al tipo...
switch (fileExt)
{
case "yaml":
case "yml":
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
try
{
newConfObj = deserializer.Deserialize<IobConfTree>(rawData);
}
catch (Exception exc)
{
//lgError($"Eccezione in LoadFromYaml{Environment.NewLine}{exc}");
}
break;
default:
break;
}
if (newConfObj != null)
{
// ora copio in oggetto corrente...
CncData = newConfObj.CncData;
CodIOB = newConfObj.CodIOB;
ConfFileName = fileName;
Customer = newConfObj.Customer;
GeneralCom = newConfObj.GeneralCom;
InputDataProc = newConfObj.InputDataProc;
IobManConf = newConfObj.IobManConf;
IobType = newConfObj.IobType;
Model = newConfObj.Model;
OptPar = newConfObj.OptPar;
ReleaseVers = newConfObj.ReleaseVers;
ServerMES = newConfObj.ServerMES;
TempoCiclo = newConfObj.TempoCiclo;
Vendor = newConfObj.Vendor;
}
}
}
}
/// <summary>
/// Restituisce un oggetto di conf leggendo INI ed effettuando conversione
/// </summary>
@@ -80,7 +138,7 @@ namespace IobConf.Core
newConfObj.ServerMES.Transport = MpIp.StartsWith("https://") ? "https" : "http";
newConfObj.ServerMES.IpAddr = MpIp.Replace($"{newConfObj.ServerMES.Transport}://", ""); // tolgo http/https...
}
// Altro (versione, ...)
newConfObj.ReleaseVers = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Version}";
newConfObj.IobManConf.MinDeltaSec = fIni.ReadInteger("IOB", "MinDeltaSec", 6);
@@ -114,6 +172,35 @@ namespace IobConf.Core
return newConfObj;
}
/// <summary>
/// Restituisce un oggetto di conf deserializzando lo Yaml relativo
/// </summary>
/// <param name="yamlFilePath"></param>
/// <returns></returns>
public static IobConfTree LoadFromYaml(string yamlFilePath)
{
IobConfTree newConfObj = new IobConfTree();
if (File.Exists(yamlFilePath))
{
string rawData = File.ReadAllText(yamlFilePath);
if (!string.IsNullOrEmpty(rawData))
{
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
try
{
newConfObj = deserializer.Deserialize<IobConfTree>(rawData);
}
catch (Exception exc)
{
//lgError($"Eccezione in LoadFromYaml{Environment.NewLine}{exc}");
}
}
}
return newConfObj;
}
#region Logging
/// <summary>
+2 -2
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
@@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
<PackageReference Include="NLog.Web.AspNetCore" />
</ItemGroup>
<ItemGroup>
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
+12
View File
@@ -14,6 +14,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.INVE", "MP.INVE\MP.INVE.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{84B1B205-AAC2-451C-914E-992CE8BA5B58}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{F26867FD-E419-41C5-9AAE-29F40C050EB5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{5728AB68-0D7A-49B7-904A-987AC81B5D69}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -32,6 +36,14 @@ Global
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Release|Any CPU.Build.0 = Release|Any CPU
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Release|Any CPU.Build.0 = Release|Any CPU
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+16 -2
View File
@@ -1,12 +1,18 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33205.214
# Visual Studio Version 18
VisualStudioVersion = 18.4.11620.152
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{A0C7A1E7-6E5F-41BA-8ED0-C4A6C581C1B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.IOC", "MP.IOC\MP.IOC.csproj", "{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{331E8AB2-F712-4F91-8D72-F8A90AA9FFC2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +27,14 @@ Global
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Release|Any CPU.Build.0 = Release|Any CPU
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Release|Any CPU.Build.0 = Release|Any CPU
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+31
View File
@@ -9,24 +9,55 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.AppAuth", "MP.AppAuth\MP
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{D3D348EF-1313-43DF-94FB-28CD38B68212}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{EE871AE5-9B5E-493E-8E59-F77234979AD7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{8BBD39D5-9390-4EBA-979B-954DC8FFC850}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{DE935A48-5E0F-4AD4-953F-8820565BF616}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_LiManDebug|Any CPU = Debug_LiManDebug|Any CPU
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug_LiManDebug|Any CPU
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug_LiManDebug|Any CPU.Build.0 = Debug_LiManDebug|Any CPU
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D949AB45-9B65-4594-A97E-182BC3831707}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D949AB45-9B65-4594-A97E-182BC3831707}.Release|Any CPU.Build.0 = Release|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug_LiManDebug|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug_LiManDebug|Any CPU.Build.0 = Debug_LiManDebug|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Release|Any CPU.Build.0 = Release|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Release|Any CPU.Build.0 = Release|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Release|Any CPU.Build.0 = Release|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Release|Any CPU.Build.0 = Release|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+23 -5
View File
@@ -5,7 +5,13 @@ 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}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.MON", "MP.MON\MP.MON.csproj", "{82FD7CF4-42A2-499C-88FC-46502D166F70}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{4F652F76-AC46-444D-B808-40102F2F05C0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{3447D4AF-13C2-47BB-8C5F-74299A46D063}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.MON.Client", "MP.MON.Client\MP.MON.Client.csproj", "{7038E415-3F9B-A8C6-C92F-32185AD31DBC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -17,10 +23,22 @@ Global
{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
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Release|Any CPU.Build.0 = Release|Any CPU
{4F652F76-AC46-444D-B808-40102F2F05C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4F652F76-AC46-444D-B808-40102F2F05C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F652F76-AC46-444D-B808-40102F2F05C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F652F76-AC46-444D-B808-40102F2F05C0}.Release|Any CPU.Build.0 = Release|Any CPU
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Release|Any CPU.Build.0 = Release|Any CPU
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+14 -2
View File
@@ -1,12 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.31229.75
# Visual Studio Version 17
VisualStudioVersion = 17.11.35327.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Prog", "MP.Prog\MP.Prog.csproj", "{3223DDE4-564E-4D58-8A94-E368B9778C67}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.FileData", "MP.FileData\MP.FileData.csproj", "{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +25,14 @@ Global
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Release|Any CPU.Build.0 = Release|Any CPU
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Release|Any CPU.Build.0 = Release|Any CPU
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+37
View File
@@ -0,0 +1,37 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18
VisualStudioVersion = 18.5.11723.231 stable
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.RIOC", "MP.RIOC\MP.RIOC.csproj", "{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Data", "MP.Data\MP.Data.csproj", "{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Release|Any CPU.Build.0 = Release|Any CPU
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Release|Any CPU.Build.0 = Release|Any CPU
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AEB0B74D-1A03-4D0C-B6B0-8928D097A975}
EndGlobalSection
EndGlobal
+5
View File
@@ -0,0 +1,5 @@
<Solution>
<Project Path="MP.Core/MP.Core.csproj" />
<Project Path="MP.Data/MP.Data.csproj" />
<Project Path="MP.RIOC/MP.RIOC.csproj" />
</Solution>
+26 -2
View File
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32126.317
# Visual Studio Version 18
VisualStudioVersion = 18.3.11520.95
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
EndProject
@@ -12,6 +12,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
.editorconfig = .editorconfig
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{15231E76-5A27-4D4E-982C-17A886A9EEB8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{1887A0C0-679E-4535-90D4-60DAA428D019}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.AppAuth", "MP.AppAuth\MP.AppAuth.csproj", "{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -26,6 +34,22 @@ Global
{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
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Release|Any CPU.Build.0 = Release|Any CPU
{1887A0C0-679E-4535-90D4-60DAA428D019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1887A0C0-679E-4535-90D4-60DAA428D019}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1887A0C0-679E-4535-90D4-60DAA428D019}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1887A0C0-679E-4535-90D4-60DAA428D019}.Release|Any CPU.Build.0 = Release|Any CPU
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Release|Any CPU.Build.0 = Release|Any CPU
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+20 -2
View File
@@ -1,12 +1,18 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.32126.317
# Visual Studio Version 18
VisualStudioVersion = 18.5.11723.231 stable
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Stats", "MP.Stats\MP.Stats.csproj", "{D9901B50-E61C-400C-B62C-FA060CF72C29}"
EndProject
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.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{D334DE4B-1F54-4F30-899B-9ECB79C9F527}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{BC94E319-A622-497C-BEE1-BB3D77170A6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{3E74B94B-82B6-434B-AADA-875845ED193B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +27,18 @@ Global
{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
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Release|Any CPU.Build.0 = Release|Any CPU
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Release|Any CPU.Build.0 = Release|Any CPU
{3E74B94B-82B6-434B-AADA-875845ED193B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E74B94B-82B6-434B-AADA-875845ED193B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E74B94B-82B6-434B-AADA-875845ED193B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E74B94B-82B6-434B-AADA-875845ED193B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
-37
View File
@@ -1,37 +0,0 @@
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-TAB", "MP-TAB\MP-TAB\MP-TAB.csproj", "{9141D627-EE10-4BF6-9A2C-AAC6845E185F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP-TAB.Client", "MP-TAB\MP-TAB.Client\MP-TAB.Client.csproj", "{28559808-58F2-424B-B65C-062AA59839EC}"
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
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Release|Any CPU.Build.0 = Release|Any CPU
{28559808-58F2-424B-B65C-062AA59839EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28559808-58F2-424B-B65C-062AA59839EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28559808-58F2-424B-B65C-062AA59839EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28559808-58F2-424B-B65C-062AA59839EC}.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
+12
View File
@@ -12,6 +12,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP-TAB3", "MP-TAB3\MP-TAB3.csproj", "{E7A7C262-7807-4503-949D-5A6FE3DF4400}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{286528F4-7753-4615-96A7-1F558EE5563B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{D87FBE3B-F95F-47AD-8874-184500CEEC85}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -26,6 +30,14 @@ Global
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Release|Any CPU.Build.0 = Release|Any CPU
{286528F4-7753-4615-96A7-1F558EE5563B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{286528F4-7753-4615-96A7-1F558EE5563B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{286528F4-7753-4615-96A7-1F558EE5563B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{286528F4-7753-4615-96A7-1F558EE5563B}.Release|Any CPU.Build.0 = Release|Any CPU
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+9 -1
View File
@@ -1,5 +1,13 @@
{
"version": 1,
"isRoot": true,
"tools": {}
"tools": {
"dotnet-ef": {
"version": "8.0.10",
"commands": [
"dotnet-ef"
],
"rollForward": false
}
}
}
+8 -2
View File
@@ -49,7 +49,7 @@ else
}
</div>
<div class="px-1">
@if (item.ReqNotify != 0)
@if (item.ReqNotify != 0 || item.Duration > alarmMinDuration)
{
<button class="btn btn-sm btn-primary py-0" @onclick="() => SendNotify(item)">Invia&nbsp;<i class="fa fa-envelope" aria-hidden="true"></i></button>
}
@@ -65,7 +65,13 @@ else
</tr>
}
</tbody>
<tfoot>
<tr>
<td>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
</table>
</div>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
}
+11 -4
View File
@@ -2,7 +2,7 @@ using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MongoDB.Driver.Linq;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using System.Text;
@@ -15,7 +15,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -102,7 +102,8 @@ namespace MP_TAB3.Components
DateTime inizio = fine.AddDays(-8);
CurrPeriodo = new Periodo(inizio, fine);
}
var rawDest = config.GetValue<string>("AlarmDest");
// gestione conf allarmi
var rawDest = config.GetValue<string>("OptConf:AlarmDest");
if (!string.IsNullOrEmpty(rawDest))
{
AlarmsDest = rawDest.Split(",").ToList();
@@ -111,6 +112,7 @@ namespace MP_TAB3.Components
{
AlarmsDest = new List<string>() { "samuele@steamware.net" };
}
alarmMinDuration = config.GetValue<decimal>("OptConf:AlarmMinDuration");
}
protected override async Task OnParametersSetAsync()
@@ -210,13 +212,18 @@ namespace MP_TAB3.Components
private static Logger Log = LogManager.GetCurrentClassLogger();
/// <summary>
/// durata minima allarmi x abilitare invio email di notifica
/// </summary>
private decimal alarmMinDuration = 1;
#endregion Private Fields
#region Private Properties
private Periodo CurrPeriodo { get; set; } = new Periodo();
private string IdxMaccSel { get; set; } = "";
private MappaStatoExpl? lastRecMSE { get; set; } = null;
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
#endregion Private Properties
}
+2 -2
View File
@@ -1,8 +1,8 @@
@if (ShowInsFermata)
{
<button class="btn w-100 btn-lg flashingRed mb-2 p-3 fs-2" @onclick="@GoToFermate"><i class="fa fa-lg fa-exclamation-triangle"></i> DICHIARARE FERMO <i class="fa fa-lg fa-exclamation-triangle"></i></button>
<button class="btn w-100 btn-lg flashingRed mb-2 p-2 fs-3" @onclick="@GoToFermate"><i class="fa fa-lg fa-exclamation-triangle"></i> DICHIARARE FERMO <i class="fa fa-lg fa-exclamation-triangle"></i></button>
}
@if (ShowReqControls)
{
<button class="btn w-100 btn-lg flashingPurple mb-2 p-3 fs-2" @onclick="GoToControls"><i class="fa fa-lg fa-flask"></i> EFFETTUARE CONTROLLO<i class="fa fa-lg fa-flask"></i></button>
<button class="btn w-100 btn-lg flashingPurple mb-2 p-2 fs-3" @onclick="GoToControls"><i class="fa fa-lg fa-flask"></i> EFFETTUARE CONTROLLO<i class="fa fa-lg fa-flask"></i></button>
}
+5 -8
View File
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using MP_TAB3.Shared;
@@ -10,7 +10,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -121,12 +121,9 @@ namespace MP_TAB3.Components
{
if (RecMSE != null)
{
if (MServ.LastIdxMacchina != RecMSE.IdxMacchina)
{
ShowInsFermata = CheckShowInsFermata;
ShowReqControls = await CheckShowReqControls();
MServ.LastIdxMacchina = RecMSE.IdxMacchina;
}
ShowInsFermata = CheckShowInsFermata;
ShowReqControls = await CheckShowReqControls();
MServ.LastIdxMacchina = RecMSE.IdxMacchina;
}
}
+15 -9
View File
@@ -1,4 +1,4 @@
<div class="top-row d-flex justify-content-between text-light">
<div class="top-row d-flex justify-content-between text-light @CssReload">
<div class="col-4 d-flex">
<div class="pe-1">
<button class="btn btn-sm @ResetClass" @onclick="() => ForceReload()" title="Update"><i class="fa-solid fa-rotate"></i></button>
@@ -9,20 +9,26 @@
</div>
</div>
<div class="col-4 text-center d-flex justify-content-center px-0">
<div class="btn btn-outline-info p-1 text-decoration-none text-light" @onclick="()=>backToSM()">
<div class="btn btn-outline-info py-1 px-2 text-decoration-none text-light" @onclick="()=>backToSM()">
<i class="fa-solid fa-house"></i>
MapoTAB3
<img src="images/LogoSteamware.png" style="height: 1.3rem" />
</div>
</div>
<div class="col-4 text-end">
@if (!HideMenu)
{
<div class="row w-100 slideMen">
<div class="p-0">
<SlideMenu MenuItems="@CurrMenuItems"></SlideMenu>
<div class="d-flex flex-row-reverse">
@if (!HideMenu)
{
<div class="px-1 slideMen">
<span class="p-0">
<SlideMenu MenuItems="@CurrMenuItems"></SlideMenu>
</span>
</div>
</div>
}
}
@if (IsReloading)
{
<div class="px-1 text-nowrap">Reloading User Data...</div>
}
</div>
</div>
</div>
+30 -12
View File
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.DTO;
using MP.Data.Services;
using MP_TAB3.Pages;
@@ -14,7 +14,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public List<LinkMenu> CurrMenuItems { get; set; } = new List<LinkMenu>();
public List<LinkMenuModel> CurrMenuItems { get; set; } = new List<LinkMenuModel>();
[Parameter]
public EventCallback<bool> EA_ReloadMStor { get; set; }
@@ -71,20 +71,28 @@ namespace MP_TAB3.Components
protected async Task backToSM()
{
await Task.Delay(1);
if (!NavMan.Uri.Contains("reg-new-device"))
{
await MsgServ.IdxMaccSet("");
NavMan.NavigateTo("status-map", true);
NavMan.NavigateTo("status-map", false);
}
}
private bool IsReloading = false;
private string CssReload
{
get => IsReloading ? "bg-primary bg-gradient" : "";
}
protected async Task ForceReload()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Log.Info("Start ForceReload");
IsReloading = true;
ResetClass = "btn-warning";
MsgServ.IsReloading = true;
await InvokeAsync(StateHasChanged);
var currToken = await MsgServ.GetCurrOperDtoLSAsync();
var lastOpr = await MsgServ.GetLastMatrOprAsync();
@@ -102,14 +110,15 @@ namespace MP_TAB3.Components
await EA_ReloadMStor.InvokeAsync(true);
// calcolo tempo esecuzione
sw.Stop();
int delta = 500 - (int)sw.ElapsedMilliseconds;
delta = delta > 0 ? delta : 50;
int delta = 150 - (int)sw.ElapsedMilliseconds;
delta = delta > 0 ? delta : 10;
await Task.Delay(delta);
ResetClass = "btn-primary";
// await InvokeAsync(StateHasChanged);
MsgServ.IsReloading = false;
IsReloading = false;
Log.Info($"ForceReload completed in {sw.Elapsed.TotalMilliseconds}ms");
// ricarica pagina!
NavMan.NavigateTo("status-map");
NavMan.NavigateTo("status-map", true);
}
protected override async Task OnInitializedAsync()
@@ -160,7 +169,7 @@ namespace MP_TAB3.Components
protected async Task RefreshScadLogIn(string decodValue)
{
bool done = false;
// solo se non è logout!!!
// solo se non logout!!!
if (!NavMan.Uri.Contains("logout"))
{
if (listT2H == null || listT2H.Count == 0)
@@ -177,14 +186,23 @@ namespace MP_TAB3.Components
}
if (done && !string.IsNullOrEmpty(LastOpenedPage))
{
// se è nelle pagine "T2H" lascio proseguire...
// se nelle pagine "T2H" lascio proseguire...
if (listT2H != null && listT2H.Find(x => x.NavigateUrl == LastOpenedPage) != null)
{
NavMan.NavigateTo(LastOpenedPage);
}
else if (!string.IsNullOrEmpty(CurrMacc))
{
NavMan.NavigateTo(LastOpenedPage);
var machMse = await MsgServ.GetMachineMse(CurrMacc);
if (machMse == null)
{
await MsgServ.IdxMaccSet("");
NavMan.NavigateTo("status-map");
}
else
{
NavMan.NavigateTo(LastOpenedPage);
}
}
else
{
@@ -199,7 +217,7 @@ namespace MP_TAB3.Components
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private List<LinkMenu> listT2H = new List<LinkMenu>();
private List<LinkMenuModel> listT2H = new List<LinkMenuModel>();
#endregion Private Fields
+3 -3
View File
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -19,7 +19,7 @@ namespace MP_TAB3.Components
public EventCallback<DateTime> E_DateSel { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
[Parameter]
public string Title { get; set; } = "NA";
@@ -90,7 +90,7 @@ namespace MP_TAB3.Components
// elimino vecchio se c'...
await TabServ.EvListDelete(IdxMacc, DateSel, idxTipoCommento);
// inserisco
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
await TabServ.EvListInsert(newRec, MP.Core.Objects.Enums.tipoInputEvento.barcode);
// reset
DoReset();
ToggleCtrl();
+9 -6
View File
@@ -7,8 +7,8 @@
{
@if (RecMSE != null && RecMSE.IdxOdl > 0)
{
<button class="btn btn-primary btn-lg text-light w-100 mb-1 fs-2 text-uppercase" @onclick="ToggleBtn">
<i class="fa fa-wrench"></i> @ConfTitle
<button class="btn @btnCss btn-lg text-light w-100 mb-1 fs-2 text-uppercase" @onclick="ToggleBtn">
<i class="fa fa-wrench pe-1"></i> @ConfTitle <i class="fa @faCss ps-1"></i>
</button>
}
else
@@ -71,7 +71,6 @@
<div class="bg-secondary p-1 mb-1">
<div class="row">
<div class="col-12">
<table class="table table-dark table-sm table-striped">
<thead>
<tr class="text-start1">
@@ -124,11 +123,15 @@
</tr>
}
</tbody>
<tfoot>
<tr>
<td>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<div class="cad-footer">
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</div>
</div>
+106 -8
View File
@@ -1,12 +1,12 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using static EgwCoreLib.Utils.DtUtils;
namespace MP_TAB3.Components
{
public partial class ControlsMan
public partial class ControlsMan : IDisposable
{
#region Public Properties
@@ -17,12 +17,18 @@ namespace MP_TAB3.Components
public EventCallback<bool> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Public Methods
public void Dispose()
{
ListComplete.Clear();
ListPaged.Clear();
}
/// <summary>
/// Aggiorno valori produzione alla data richiesta...
/// </summary>
@@ -33,7 +39,7 @@ namespace MP_TAB3.Components
await Task.Delay(1);
if (!string.IsNullOrEmpty(IdxMaccSel))
{
ListComplete = await TabDServ.RegControlliFilt(IdxMaccSel, IdxOdl, CurrPeriodo.Inizio, CurrPeriodo.Fine, false);
ListComplete = await TabDServ.RegControlliFiltAsync(IdxMaccSel, IdxOdl, CurrPeriodo.Inizio, CurrPeriodo.Fine, false);
TotalCount = ListComplete.Count;
// esegue paginazione
UpdateTable();
@@ -46,6 +52,11 @@ namespace MP_TAB3.Components
#region Protected Properties
protected string btnCss
{
get => showInsert ? "bt-dark text-primary border-primary border-2" : "btn-primary";
}
protected string ConfTitle
{
get => showInsert ? "Nascondi Controllo" : "Registra Controllo";
@@ -53,6 +64,11 @@ namespace MP_TAB3.Components
protected bool enableControlli { get; set; } = true;
protected string faCss
{
get => showInsert ? "fa-chevron-up" : "fa-chevron-down";
}
protected List<RegistroControlliModel> ListComplete { get; set; } = new List<RegistroControlliModel>();
protected List<RegistroControlliModel> ListPaged { get; set; } = new List<RegistroControlliModel>();
@@ -70,6 +86,26 @@ namespace MP_TAB3.Components
#region Protected Methods
/// <summary>
/// Restituisce il codice IdxMacchina dell'impianto PARENT (se multi) altrimenti la stessa macchina...
/// </summary>
protected string getIdxMaccParent()
{
string answ = IdxMaccSel;
// se fosse multi controllo
if (isMulti)
{
// verifico se SIA una tavola (ha char "#")
int iSharp = IdxMaccSel.IndexOf('#');
if (iSharp > 0)
{
// sistemo nome
answ = IdxMaccSel.Substring(0, iSharp);
}
}
return answ;
}
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
@@ -77,7 +113,7 @@ namespace MP_TAB3.Components
{
enableControlli = SMServ.GetConfBool("enableControlli");
IdxMaccSel = RecMSE.IdxMacchina;
bool isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
if (isMulti)
{
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
@@ -102,6 +138,17 @@ namespace MP_TAB3.Components
showNote = false;
await doUpdate();
await E_Updated.InvokeAsync(false);
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(100);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
Log.Info("Registrazione SaveKo x controllo pezzo");
isProcessing = false;
}
@@ -119,6 +166,17 @@ namespace MP_TAB3.Components
showNote = false;
await doUpdate();
await E_Updated.InvokeAsync(true);
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(100);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
Log.Info("Registrazione SaveOk x controllo pezzo");
isProcessing = false;
}
@@ -134,8 +192,8 @@ namespace MP_TAB3.Components
await Task.Delay(1);
IdxMaccSel = selIdxMacc;
await doUpdate();
isProcessing = false;
await Task.Delay(1);
isProcessing = false;
await E_MachSel.InvokeAsync(selIdxMacc);
}
@@ -188,7 +246,7 @@ namespace MP_TAB3.Components
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private bool isMulti = false;
private bool isProcessing = false;
private string noteKo = "";
@@ -211,8 +269,48 @@ namespace MP_TAB3.Components
private Periodo CurrPeriodo { get; set; } = new Periodo();
private string IdxMaccSel { get; set; } = "";
private string IdxMaccAltra { get; set; } = "";
/// <summary>
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
/// </summary>
private string idxMaccAltraTav
{
get
{
string answ = "";
if (RecMSE != null)
{
try
{
// verifico se SIA una tavola (ha char "#")
int iSharp = IdxMaccMain.IndexOf('#');
if (iSharp > 0)
{
// ora verifico SE ALTRA TAVOLA ha ODL...
string nomeTav = IdxMaccMain.Substring(iSharp);
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
// sistemo nome
answ = IdxMaccMain.Replace(nomeTav, altraTav);
}
}
catch
{ }
}
return answ;
}
}
/// <summary>
/// Macchina selezionata MAIN
/// </summary>
private string IdxMaccMain
{
get => RecMSE != null ? RecMSE.IdxMacchina : "";
}
private string IdxMaccSel { get; set; } = "";
private int IdxOdl { get; set; } = 0;
private string selMessage
+207
View File
@@ -0,0 +1,207 @@
@if (showKitDetail)
{
<MP_TAB3.Components.ProdKIT.KitDetailModal ListTK="@ListKitTemplate" ListPODL="@ListPOdlKit" EC_Close="() => KitToggleDetail(null, 0)"></MP_TAB3.Components.ProdKIT.KitDetailModal>
}
<div class="col-12 my-1">
<div class="card">
<div class="card-header @cssDetailOdl d-flex justify-content-between">
<div>
<h4>@titleOdlDetail</h4>
</div>
@if (IdxPOdlSel == 0)
{
<div class="d-flex text-end">
<div class="form-check form-switch px-2">
<label class="form-check-label">@txtShowXDL</label>
<input class="form-check-input" type="checkbox" @bind="@showPOdlData">
</div>
@if (!InAttr && ShowClose)
{
<div>
<button class="btn btn-dark w-100" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-up"></i> @txtBtnOdlDetail</button>
</div>
}
</div>
}
</div>
<div class="card-body">
<div class="row">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
@if (!showPOdlData)
{
<b>ODL:</b>
}
else
{
<b>P.ODL:</b>
}
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.IdxOdl
}
else
{
@CurrPodl.IdxPromessa
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Rif:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.KeyRichiesta
}
else
{
@CurrPodl.KeyRichiesta
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Cod:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.CodArticolo
}
else
{
@CurrPodl.CodArticolo
}
</div>
</div>
</div>
<div class="row border-top border-bottom border-secondary">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Articolo:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@if (CheckIsKit(CurrOdl.CodArticolo))
{
<button class="mx-1 btn btn-sm btn-outline-dark small" @onclick="() => KitToggleDetail(CurrOdl.CodArticolo, 0)" title="Mostra dettaglio"><i class="fa-solid fa-search"></i></button>
}
@CurrOdl.DescArticolo
}
else
{
@if (CheckIsKit(CurrPodl.CodArticolo))
{
<button class="mx-1 btn btn-sm btn-outline-dark small" @onclick="() => KitToggleDetail(CurrPodl.CodArticolo, CurrPodl.IdxPromessa)" title="Mostra dettaglio"><i class="fa-solid fa-search"></i></button>
}
@CurrPodl.DescArticolo
}
</div>
</div>
</div>
<div class="row">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Pezzi:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.NumPezzi.ToString("N0")
}
else
{
@CurrPodl.NumPezzi.ToString("N0")
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
TCiclo:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData && CurrOdl.Tcassegnato > 0)
{
@CurrOdl.Tcassegnato.ToString("N2")
}
else
{
@CurrPodl.Tcassegnato.ToString("N2")
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Pz/pallet:
</div>
<div class="px-0 text-end fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.PzPallet
}
else
{
@CurrPodl.PzPallet
}
</div>
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col text-start fw-bold">
@if (CurrOdl != null && !showPOdlData)
{
@CurrOdl.Nome
}
else
{
@CurrPodl.Nome
}
</div>
<div class="col d-flex justify-content-between">
@if (!showPOdlData)
{
}
else
{
<div class="px-0 small">
Priorita:
</div>
<div class="px-0 text-end fw-bold">
@CurrPodl.Priorita
</div>
}
</div>
<div class="col d-flex justify-content-between">
@if (CurrOdl != null && !showPOdlData)
{
<div class="px-0 small">
Inizio:
</div>
<div class="px-0 text-end fw-bold">
@($"{CurrOdl.DataInizio:ddd yyyy.MM.dd HH:mm:ss}")
</div>
}
else
{
<div class="px-0 small">
Data:
</div>
<div class="px-0 text-end fw-bold">
@($"{CurrPodl.DueDate:yyyy.MM.dd}")
</div>
}
</div>
</div>
</div>
</div>
</div>
+156
View File
@@ -0,0 +1,156 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DbModels;
using MP.Data.Services;
using System;
namespace MP_TAB3.Components
{
public partial class CurrOdlDetail
{
#region Public Properties
[Parameter]
public ODLExpModel CurrOdl { get; set; } = null!;
[Parameter]
public PODLExpModel CurrPodl { get; set; } = null!;
[Parameter]
public EventCallback<bool> EC_ToggleOdlDetail { get; set; }
[Parameter]
public EventCallback<bool> EC_TogglePOdl { get; set; }
[Parameter]
public bool ForceCloseOdl { get; set; }
[Parameter]
public int IdxPOdlSel { get; set; }
[Parameter]
public bool InAttr { get; set; }
[Parameter]
public bool ShowClose { get; set; } = true;
[Parameter]
public bool ShowOdlDetail { get; set; }
#endregion Public Properties
#region Protected Properties
[Inject]
protected MessageService MsgServ { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TDService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Verifica se sia un articolo di tipo "KIT" x mostrare show dettaglio
/// </summary>
/// <param name="CodArticolo"></param>
/// <returns></returns>
protected bool CheckIsKit(string CodArticolo)
{
bool answ = false;
if (ListArtKit != null && ListArtKit.Count > 0)
{
answ = ListArtKit.Count(x => x.CodArticolo == CodArticolo) > 0;
}
return answ;
}
protected void KitToggleDetail(string? selCodArt, int idxPOdl)
{
if (!string.IsNullOrEmpty(selCodArt))
{
ListKitTemplate = TDService.TemplateKitFilt(selCodArt, "");
}
else
{
ListKitTemplate = null;
}
if (idxPOdl>0)
{
ListPOdlKit = TDService.POdlListByKitParent(idxPOdl);
}
else
{
ListPOdlKit = null;
}
showKitDetail = !showKitDetail;
}
protected override void OnInitialized()
{
// carico elenco KIT
ListArtKit = TDService.ArticoliGetByTipo("KIT", "*");
}
protected async Task ToggleOdlDetail()
{
await EC_ToggleOdlDetail.InvokeAsync(true);
}
protected string Traduci(string lemma)
{
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
}
#endregion Protected Methods
#region Private Fields
/// <summary>
/// Elenco articoli tipo KIT
/// </summary>
private List<AnagArticoliModel>? ListArtKit;
private List<TemplateKitModel>? ListKitTemplate = null;
private List<PODLExpModel>? ListPOdlKit;
private bool showKitDetail = false;
#endregion Private Fields
#region Private Properties
private string baseLang
{
get => MsgServ.UserPrefGet("Lang");
}
private string cssDetailOdl
{
get => IdxPOdlSel > 0 ? "bg-info text-light" : "bg-warning";
}
private bool showPOdlData { get; set; } = true;
private string titleOdlDetail
{
get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : InAttr ? "Parametri PODL in Attrezzaggio" : "Parametri PODL Corrente";
}
private string txtBtnOdlDetail
{
get => ShowOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
}
private string txtShowXDL
{
get => showPOdlData ? "PODL" : "ODL";
}
#endregion Private Properties
}
}
+3 -3
View File
@@ -2,10 +2,10 @@
<div class="p-0">
<div class="row">
<div class="col-12">
<button class="btn btn-lg bg-info text-dark w-100" @onclick="ToggleCtrl">
<i class="fa-solid fa-comments"></i>
&nbsp;
<button class="btn btn-lg @btnCss text-light w-100" @onclick="ToggleCtrl">
<i class="fa-solid fa-comments pe-1"></i>
<span class="fs-4 fw-bold">@Title</span>
<i class="fa @faCss ps-1"></i>
</button>
</div>
</div>
+12 -2
View File
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -28,12 +28,17 @@ namespace MP_TAB3.Components
}
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Protected Properties
protected string btnCss
{
get => ShowDetail ? "bt-dark text-primary border-primary border-2" : "btn-primary";
}
protected string BtnCss
{
get => IsNewRec ? "btn btn-success" : "btn btn-primary";
@@ -56,6 +61,11 @@ namespace MP_TAB3.Components
}
}
protected string faCss
{
get => ShowDetail ? "fa-chevron-up" : "fa-chevron-down";
}
protected List<AnagTagsModel> ListComplete { get; set; } = new List<AnagTagsModel>();
[Inject]
+8 -4
View File
@@ -44,7 +44,7 @@
{
<tr>
<td>
<button class="btn btn-primary" @onclick="()=>SetEdit(item)"><i class="fa-solid fa-pen"></i></button>
<button class="btn btn-primary" @onclick="() => SetEdit(item)"><i class="fa-solid fa-pen"></i></button>
</td>
<td>
<i class="@item.CssClass" aria-hidden="true"></i>
@@ -64,11 +64,15 @@
</tr>
}
</tbody>
<tfoot>
<tr>
<td colspan="6">
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<div>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</div>
</div>
+2 -2
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using Org.BouncyCastle.Asn1.IsisMtt.X509;
@@ -15,7 +15,7 @@ namespace MP_TAB3.Components
public EventCallback<string> E_MachSel { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
+3 -3
View File
@@ -1,14 +1,14 @@
<div class="card text-dark textCondens">
<div class="card-header bg-info text-light">
<h4>@Title</h4>
<h4>@FixTxt(Title)</h4>
</div>
<div class="card-body py-1">
<div class="row">
<div class="col">
<p>
<b>@Subtitle</b>
<b>@FixTxt(Subtitle)</b>
</p>
@Message
@FixTxt(Message)
</div>
</div>
</div>
@@ -16,5 +16,14 @@ namespace MP_TAB3.Components
public string Title { get; set; } = "";
#endregion Public Properties
#region Protected Methods
protected MarkupString FixTxt(string origText)
{
return new MarkupString(origText);
}
#endregion Protected Methods
}
}
+5 -1
View File
@@ -1,5 +1,9 @@
<button class="btn btn-warning w-100" @onclick="toggleFixOdl"><i class="fa fa-check"></i> @txtBtnFixOdl</button>
<button class="btn @btnCss w-100" @onclick="toggleFixOdl">
<i class="fa fa-check pe-1"></i>
<span class="fs-4 fw-bold">@txtBtnFixOdl</span>
<i class="fa @faCss ps-1"></i>
</button>
@if (showFixOdl)
{
<div class="row">
+15 -5
View File
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -8,6 +8,9 @@ namespace MP_TAB3.Components
{
#region Public Properties
[Parameter]
public EventCallback<bool> E_RefreshData { get; set; }
[Parameter]
public string IdxMaccCurr { get; set; } = "";
@@ -24,11 +27,18 @@ namespace MP_TAB3.Components
#region Protected Properties
protected List<ODLModel> ListComplete { get; set; } = new List<ODLModel>();
protected List<ODLModel> ListPaged { get; set; } = new List<ODLModel>();
protected string btnCss
{
get => showFixOdl ? "bg-dark border-warning border-2 text-light" : "btn-warning";
}
[Parameter]
public EventCallback<bool> E_RefreshData { get; set; }
protected string faCss
{
get => showFixOdl ? "fa-chevron-up" : "fa-chevron-down";
}
protected List<ODLExpModel> ListComplete { get; set; } = new List<ODLExpModel>();
protected List<ODLExpModel> ListPaged { get; set; } = new List<ODLExpModel>();
[Inject]
protected MessageService MServ { get; set; } = null!;
+283
View File
@@ -0,0 +1,283 @@
<div class="row my-1 mx-0 rounded-3" style="background-color: #34495E; ">
<div class="col-12 px-1">
<CalendarMonth DtRif="@dtCurr" MainCss="table table-dark table-borderless" DateSelected="DisplayDate" MonthChanged="ReloadMonth" DateCheck="@DateCheck" DateCheckBlock="@DateCFF" SingleWeek="@showDetail" SelDayCss="selDate rounded-top p-2" HeadStyle="color: #E67E22"></CalendarMonth>
</div>
@if (showDetail)
{
<div class="col-12 px-1 bg-gradient py-2">
@if (EditRecord == null)
{
<div class="row">
@if (DayMinTot < 1440)
{
<div class="col-3 my-2 pe-1">
<button class="btn btn-success w-100" @onclick="() => AddNew(true)" title="Inserisci produzione"><i class="fa-solid fa-plus"></i> Prod</button>
</div>
<div class="col-3 my-2 px-1">
<button class="btn btn-warning w-100" @onclick="() => AddNew(false)" title="Inserisci Fermata"><i class="fa-solid fa-plus"></i> Fermata</button>
</div>
<div class="col-3 my-2 px-1">
<button class="btn btn-secondary w-100" @onclick="() => FixMissing()" title="Riempi periodi mancanti"><i class="fa-solid fa-fill-drip"></i> Spenta</button>
</div>
}
else
{
@if (DayImportRatio != 1)
{
<div class="col-3 my-2 pe-1">
@if (Math.Abs(DayMinTot * 60 - 1440 * 60) < 2)
{
<button class="btn btn-success w-100 px-0" @onclick="() => FreezeDay()" title="Conferma giornata"><i class="fa-solid fa-stamp"></i> Conferma</button>
}
else
{
<button class="btn btn-secondary w-100 px-0 disabled" title="Conferma non permessa per copertura errata gioranta"><i class="fa-solid fa-stamp"></i> Errore Durata</button>
}
</div>
<div class="col-6 my-2 px-1">
</div>
}
else
{
<div class="col-6 col-md-5 col-lg-3 my-2">
<div class="rounded-3 py-2 px-3 text-center bg-dark w-100 bg-gradient"><i class="fa-solid fa-square-check text-success"></i> Conferma OK</div>
</div>
<div class="col-3 col-md-4 col-lg-6 my-2 px-1">
</div>
}
}
<div class="col-3 my-2 ps-1">
<button class="btn btn-outline-light w-100 px-0" @onclick="@CloseDet"><i class="fa-solid fa-xmark"></i> Close</button>
</div>
</div>
@if (SeqStatus != null && SeqStatus.Count() > 0)
{
<div class="row">
<div class="col-12">
<div class="d-flex justify-content-between fs-4">
<div class="px-1">Prod: @($"{DayMinLav:N1}") min (@($"{DayOee:P1}"))</div>
<div class="px-1">Copert: @($"{DayMinTot:N0}") min</div>
</div>
</div>
<div class="col-12">
<div class="progress" style="min-height: 3.5rem;">
@foreach (var item in SeqStatus)
{
<div class="progress-bar @item.CssBlock" style="width: @PercWidth(item.ValuePerc);">
@if (item.HasError)
{
<div class="bg-danger text-warning" title="Error!!!">@item.Title</div>
}
else
{
<div>@item.Title</div>
}
<small>@($"{item.Value:N0}min")</small>
</div>
}
</div>
</div>
</div>
}
}
else
{
<div class="row mx-0 bg-dark bg-gradient">
<div class="col-6 mt-2">
<button class="btn btn-warning w-100" @onclick="() => DoCancel()"><i class="fa-solid fa-ban"></i> Cancel</button>
</div>
<div class="col-6 mt-2">
@if (EditRecord.IsWork && (!string.IsNullOrEmpty(EditRecord.CodArticolo) && EditRecord.PzBuoni > 0 && EditRecord.TCiclo > 0) || (!EditRecord.IsWork && EditRecord.MinProd > 0))
{
<button class="btn btn-success w-100" @onclick="() => DoSave()"><i class="fa-solid fa-floppy-disk"></i> Save</button>
}
else
{
<button class="btn btn-secondary disabled w-100"><i class="fa-solid fa-floppy-disk"></i> Save</button>
}
</div>
<div class="col-12 my-2">
@if (EditRecord.IsWork)
{
@if (doSearchArt)
{
<dialog class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog">
<div class="modal-dialog modal-xl">
<div class="modal-content p-2">
<div class="modal-title d-flex justify-content-between">
<div class="px-0">
<h3>Selezione Articoli da ricerca</h3>
</div>
<div class="px-0">
<button class="btn btn-outline-dark" @onclick="() => SearchArtToggle()"><i class="fa-solid fa-xmark"></i></button>
</div>
</div>
<div class="modal-body">
<SelectCodArt SearchMinChar="3" E_CodArt="SetArtSelected"></SelectCodArt>
</div>
</div>
</div>
</dialog>
}
<div class="row">
<div class="col-6 col-lg-3 my-2">
<div class="form-floating">
<input type="text" class="form-control" @bind="@EditRecord.KeyRichiesta"></input>
<label>Commessa</label>
</div>
</div>
<div class="col-6 col-lg-3 my-2">
<div class="input-group">
<div class="form-floating">
<input type="text" class="form-control" @bind="@EditRecord.CodArticolo"></input>
<label>Articolo</label>
</div>
<button class="btn btn-success" @onclick="() => SearchArtToggle()"><i class="fa-brands fa-searchengin fa-2x"></i></button>
</div>
</div>
<div class="col-4 col-lg-2 my-2 pe-0">
<div class="form-floating">
@if (enableEditTime)
{
<input type="time" class="form-control" @bind="@EditRecord.InizioStato"></input>
}
else
{
<input type="time" class="form-control disabled text-secondary" @bind="@EditRecord.InizioStato" disabled></input>
}
<label>Inizio</label>
</div>
</div>
<div class="col-4 col-lg-2 my-2">
<div class="form-floating">
<input type="number" class="form-control" @bind="@EditRecord.PzBuoni" step="1"></input>
<label>Pezzi</label>
</div>
</div>
<div class="col-4 col-lg-2 my-2 ps-0">
<div class="form-floating">
<select @bind="@EditRecord.TCiclo" class="form-select">
@foreach (var item in ListTCiclo)
{
<option value="@item.Key">@item.Value</option>
}
</select>
<label>T.Ciclo</label>
</div>
</div>
</div>
}
else
{
<div class="row">
<div class="col-12">
<div class="form-floating">
<select @bind="@EditRecord.IdxTipoEv" class="form-select">
@foreach (var item in ListEvents)
{
<option value="@item.value">@item.label</option>
}
</select>
<label>Tipo Fermata</label>
</div>
</div>
<div class="col-6 my-2">
<div class="form-floating">
@if (enableEditTime)
{
<input type="time" class="form-control" @bind="@EditRecord.InizioStato"></input>
}
else
{
<input type="time" class="form-control disabled" @bind="@EditRecord.InizioStato" disabled></input>
}
<label>Inizio</label>
</div>
</div>
<div class="col-6 my-2">
<div class="form-floating">
<input type="number" id="minProd" name="minProd" class="form-control" @bind="@EditRecord.MinProd" step="0.1" placeholder="0.0" min="0" max="1440"></input>
<label>Durata (min)</label>
</div>
</div>
</div>
}
</div>
</div>
}
</div>
<div class="col-12 px-1">
<table class="table table-dark table-sm table-striped">
<thead>
<tr>
<th></th>
<th>Macc</th>
<th>Stato</th>
<th>Art.</th>
<th>Ora</th>
<th class="text-end">Pezzi</th>
<th class="text-end">T.Ciclo</th>
<th class="text-end">Minuti</th>
<th class="text-end"></th>
</tr>
</thead>
<tbody>
@if (ListDay == null)
{
<tr>
<td colspan="9">
<div class="alert alert-info fs-6">Nessun dato disponibile</div>
</td>
</tr>
}
else
{
foreach (var item in ListDay)
{
<tr>
<td>
@if (item.Imported == null)
{
<button class="btn btn-sm btn-primary" @onclick="() => DoEdit(item)"><i class="fa-solid fa-pen"></i></button>
}
else
{
<button class="btn btn-sm btn-secondary disabled"><i class="fa-solid fa-pen"></i></button>
}
</td>
<td>@item.IdxMacchina</td>
<td>@(EvDescript(item.IdxTipoEv))</td>
<td>
<div>@item.CodArticolo</div>
@if (!string.IsNullOrEmpty(item.KeyRichiesta))
{
<small>@item.KeyRichiesta</small>
}
</td>
<td title="@($"{item.InizioStato:yyyy.MM.dd HH:mm:ss} --> {item.FineStato:yyyy.MM.dd HH:mm:ss}")">@($"{item.InizioStato:HH:mm}")</td>
<td class="text-end">@item.PzBuoni</td>
<td class="text-end">@($"{item.TCiclo:f2}")</td>
<td class="text-end">@($"{item.MinProd:f2}")</td>
<td class="text-end">
@if (item.Imported == null)
{
<button class="btn btn-sm btn-danger" @onclick="() => DoDelete(item)"><i class="fa-solid fa-trash-can"></i></button>
}
else
{
<button class="btn btn-sm btn-secondary disabled"><i class="fa-solid fa-trash-can"></i></button>
}
</td>
</tr>
}
}
</tbody>
</table>
</div>
}
</div>
@if (showProgress)
{
<ProgressDisplay RefreshInterval="100" Title="@progressTitle" MaxVal="100" CurrVal="@currVal" NextVal="@nextVal" ExpTimeMSec="@expTimeMsec" DisplaySize="ProgressDisplay.ModalSize.Medium"></ProgressDisplay>
}
+618
View File
@@ -0,0 +1,618 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Core.DTO;
using MP.Data.DbModels;
using MP.Data.Services;
using MP_TAB3.Pages;
using NLog;
using System.Globalization;
using System.Net.Security;
using static MP_TAB3.Components.ProdAdvDispl;
namespace MP_TAB3.Components
{
public partial class InsManual
{
#region Public Properties
[Parameter]
public MappaStatoExplModel? RecMSE
{
get => currRecMSE;
set
{
// salvo SOLO SE non sono in conferma
if (!confProdActive)
{
currRecMSE = value;
}
}
}
#endregion Public Properties
#region Protected Properties
protected DateTime dtCurr
{
get => selDtCurr;
set
{
if (selDtCurr != value)
{
selDtCurr = value;
dtMonthStart = new DateTime(value.Year, value.Month, 1);
}
}
}
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
[Inject]
protected MessageService MServ { get; set; } = null!;
[Inject]
protected TabDataService TabDServ { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected void AddNew(bool isWork)
{
if (RecMSE != null)
{
string idxMacc = RecMSE.IdxMacchina;
DateTime startPeriod = dtCurr.Date;
if (ListDay != null)
{
var lastRec = ListDay.LastOrDefault();
if (lastRec != null && lastRec.FineStato.HasValue)
{
startPeriod = lastRec.FineStato.Value;
}
else
{
startPeriod = dtCurr.Date.AddHours(6);
}
enableEditTime = ListDay.Count == 0;
}
else
{
enableEditTime = true;
}
// evento da richiesta: default lavora/spenta
int idxTipo = isWork ? 1 : 12;
// creazione nuovo record ed aggiunta in coda agli esistenti...
EditRecord = new InsManualiModel()
{
IdxMacchina = idxMacc,
InizioStato = startPeriod,
IdxTipoEv = idxTipo,
MatrOpr = MServ.MatrOpr
};
}
}
/// <summary>
/// Annulla editing
/// </summary>
/// <param name="selRec"></param>
protected void DoCancel()
{
doSearchArt = false;
EditRecord = null;
ReloadData();
RecalcDayData(dtCurr);
}
/// <summary>
/// impossta record x eliminazione
/// </summary>
/// <param name="selRec"></param>
protected async Task DoDelete(InsManualiModel selRec)
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler eliminare il record tipo {selRec.IdxTipoEv} | {selRec.InizioStato:yyyy.MM.dd HH:mm} per {selRec.MinProd:N2} min?"))
return;
// esegue eliminazione del record...
await TabDServ.InsManDelete(selRec);
doSearchArt = false;
EditRecord = null;
// rileggo i dati...
ReloadData();
RecalcDayData(dtCurr);
if (!IsTimeInfoOk(dtCurr, true))
{
int numChange = await DoRecalcDay();
}
// rileggo i dati...
ReloadData();
RecalcDayData(dtCurr);
}
/// <summary>
/// imposta record x editing
/// </summary>
/// <param name="selRec"></param>
protected void DoEdit(InsManualiModel? selRec)
{
doSearchArt = false;
if (selRec == null)
{
enableEditTime = false;
}
else
{
enableEditTime = true;
if (ListDay != null && ListDay.Count > 0)
{
var firstRec = ListDay.FirstOrDefault();
if (firstRec != null)
{
enableEditTime = selRec.InizioStato <= firstRec.InizioStato;
}
}
// altrimenti è vuoto x cui è libero
else
{
enableEditTime = true;
}
}
EditRecord = selRec;
}
protected async Task DoSave()
{
doSearchArt = false;
// solo se ho record...
if (EditRecord != null)
{
// sistemo i dati...
var dayElap = EditRecord.InizioStato.Subtract(EditRecord.InizioStato.Date);
EditRecord.MatrOpr = MServ.MatrOpr;
EditRecord.InizioStato = dtCurr.Date.Add(dayElap);
// imposto altri campi secondo il TIPO di record...
if (EditRecord.IsWork)
{
// controllo min pezzi a 1
EditRecord.PzBuoni = EditRecord.PzBuoni > 0 ? EditRecord.PzBuoni : 1;
// calcolo durata
EditRecord.MinProd = EditRecord.TCiclo * EditRecord.PzBuoni;
}
else
{
EditRecord.CodArticolo = "ND";
EditRecord.PzBuoni = 0;
EditRecord.TCiclo = 0;
}
EditRecord.FineStato = EditRecord.InizioStato.AddMinutes((double)EditRecord.MinProd);
// lancio salvataggio sul DB
await TabDServ.InsManUpsert(EditRecord);
// rileggo i dati...
ReloadData();
if (!IsTimeInfoOk(dtCurr, false))
{
int numChange = await DoRecalcDay();
}
// rileggo i dati...
ReloadData();
RecalcDayData(dtCurr);
EditRecord = null;
}
}
/// <summary>
/// traduzione evento da lista...
/// </summary>
/// <param name="idxTipoEv"></param>
/// <returns></returns>
protected string EvDescript(int idxTipoEv)
{
string answ = "-";
if (ListEvents != null)
{
var rSel = ListEvents.FirstOrDefault(x => x.value == idxTipoEv);
if (rSel != null)
{
answ = rSel.label;
}
}
return answ;
}
protected async Task FixMissing()
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler riempire i periodi mancanti?"))
return;
// filtra dati odierni x tab editabile...
if (ListPeriod != null && ListPeriod.Count > 0)
{
// chiamo insert con eventi spenta (12) HardCoded...
int numAdd = await TabDServ.InsManFillMissing(dtCurr, ListDay, 12, MServ.MatrOpr);
// rileggo i dati...
ReloadData();
RecalcDayData(dtCurr);
}
}
protected override async Task OnParametersSetAsync()
{
if (RecMSE != null && RecMSE.IdxMacchina != idxMacc)
{
idxMacc = RecMSE.IdxMacchina;
ReloadData();
}
await Task.Delay(1);
}
#endregion Protected Methods
#region Private Fields
private int currVal = 0;
private Dictionary<DateTime, string> DateCFF = new Dictionary<DateTime, string>();
/// <summary>
/// Lista date + css associato x display calendario
/// </summary>
private Dictionary<DateTime, string> DateCheck = new Dictionary<DateTime, string>();
/// <summary>
/// % record importati
/// </summary>
private double DayImportRatio = 0;
/// <summary>
/// Minuti lavorati (da sequencer)
/// </summary>
private double DayMinLav = 0;
/// <summary>
/// Minuti caricati (da sequencer)
/// </summary>
private double DayMinTot = 0;
/// <summary>
/// OEE giornaliero (ore lav / 24h)
/// </summary>
private double DayOee = 0;
/// <summary>
/// Boolear controllo visualizzazione ricerca articoli
/// </summary>
private bool doSearchArt = false;
private DateTime dtMonthStart = new DateTime(2000, 1, 1);
private InsManualiModel? EditRecord = null;
/// <summary>
/// Abilitazione edit DataOra inizio (solo x primo record, poi devono essere consecutivi...
/// </summary>
private bool enableEditTime = false;
private int expTimeMsec = 1000;
private string idxMacc = "";
private int nextVal = 0;
private string progressTitle = "Approvazione Giornata";
private List<ManualStatusDTO> SeqStatus = new List<ManualStatusDTO>();
private bool showProgress = false;
#endregion Private Fields
#region Private Properties
private bool confProdActive { get; set; } = false;
private MappaStatoExplModel? currRecMSE { get; set; } = null;
private List<InsManualiModel>? ListDay { get; set; } = new List<InsManualiModel>();
private List<InsManDayDto>? ListDTO { get; set; } = new List<InsManDayDto>();
/// <summary>
/// Eventi inseribili come fermate
/// </summary>
private List<vSelEventiBCodeModel> ListEvents { get; set; } = new List<vSelEventiBCodeModel>();
private List<InsManualiModel>? ListPeriod { get; set; } = new List<InsManualiModel>();
/// <summary>
/// Eventi inseribili come fermate
/// </summary>
private Dictionary<decimal, string> ListTCiclo { get; set; } = new Dictionary<decimal, string>();
//
private DateTime selDtCurr { get; set; } = DateTime.Today;
private bool showDetail { get; set; } = false;
#endregion Private Properties
#region Private Methods
private void CloseDet()
{
showDetail = false;
}
private void DisplayDate(DateTime dtSel)
{
dtCurr = dtSel;
showDetail = true;
RecalcDayData(dtSel);
}
/// <summary>
/// Ricalcolo dati giornalieri
/// </summary>
/// <returns></returns>
private async Task<int> DoRecalcDay()
{
int numChange = 0;
// prendo i dati odierni, e uno x uno ciclo e sistemo...
DateTime lastDate = dtCurr.Date;
List<InsManualiModel> ListChange = new List<InsManualiModel>();
if (ListDay != null && ListDay.Count > 0)
{
foreach (var item in ListDay)
{
bool isFirst = lastDate.TimeOfDay == new TimeSpan(0);
if ((item.InizioStato < lastDate && isFirst) || (item.InizioStato != lastDate && !isFirst))
{
item.InizioStato = lastDate;
}
// controllo se la data fine ok...
if (!item.FineStato.HasValue || Math.Abs(item.InizioStato.AddMinutes((double)item.MinProd).Subtract(item.FineStato.Value).TotalMinutes) > 1)
{
item.FineStato = item.InizioStato.AddMinutes((double)item.MinProd);
item.MatrOpr = MServ.MatrOpr;
numChange++;
ListChange.Add(item);
}
lastDate = item.FineStato.Value;
}
// salvo tutto
await TabDServ.InsManUpsert(ListChange);
}
return numChange;
}
/// <summary>
/// Congela la definizione giornaliera di produzione
/// </summary>
/// <returns></returns>
private async Task FreezeDay()
{
if (dtCurr.Date >= DateTime.Today)
{
await JSRuntime.InvokeVoidAsync("alert", $"Impossibile procedere con conferma: la giornata non si è ancora conclusa.");
return;
}
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler confermare gli eventi della giornata? i valori non saranno più modificabili."))
return;
// esegue stored
showProgress = true;
await Task.Delay(10);
bool fatto = false;
progressTitle = "Registrazione conferma giornaliera";
currVal = 0;
nextVal = 90;
await InvokeAsync(StateHasChanged);
if (RecMSE != null)
{
await Task.Delay(10);
await InvokeAsync(StateHasChanged);
await Task.Delay(10);
fatto = await TabDServ.InsManFreezeDay(RecMSE.IdxMacchina, dtCurr);
currVal = 90;
nextVal = 100;
progressTitle = "Ricalcolo Giornata";
await InvokeAsync(StateHasChanged);
EditRecord = null;
ReloadData();
RecalcDayData(dtCurr);
showProgress = false;
}
return;
}
private bool IsTimeInfoOk(DateTime reqDate, bool reloadDay)
{
bool allOk = false;
List<InsManualiModel> myListDay = new List<InsManualiModel>();
if (ListDTO != null)
{
var dayDto = ListDTO.FirstOrDefault(x => x.DataRif == reqDate.Date);
if (dayDto != null && ListDay != null && ListPeriod != null)
{
// se listDay vuoto forzo reload...
if (ListDay.Count == 0)
{
reloadDay = true;
}
if (reloadDay)
{
// calcolo eventi giorno
myListDay = ListPeriod
.Where(x => x.InizioStato.Date == reqDate)
.OrderBy(x => x.InizioStato)
.ThenBy(x => x.IdxInsMan)
.ToList();
}
else
{
myListDay = ListDay;
}
var firstRec = myListDay.OrderBy(x => x.InizioStato).FirstOrDefault();
var lastRec = myListDay.OrderByDescending(x => x.InizioStato).FirstOrDefault();
var deltaMins = lastRec!.FineStato!.Value.Subtract(firstRec!.InizioStato).TotalMinutes;
allOk = Math.Abs(deltaMins - (double)dayDto.MinProdTot) < 1;
}
}
return allOk;
}
/// <summary>
/// Restitusice la % formattata in invariant con "." e senza spazi prima della %
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private string PercWidth(double value)
{
return value.ToString("P2", CultureInfo.InvariantCulture).Replace(" ", "");
}
/// <summary>
/// Ricalcola dati giornalieri
/// </summary>
/// <param name="dtSel"></param>
private void RecalcDayData(DateTime dtSel)
{
ListDay = new List<InsManualiModel>();
SeqStatus = new List<ManualStatusDTO>();
DayMinLav = 0;
DayMinTot = 0;
DayImportRatio = 0;
// filtra dati odierni x tab editabile...
if (ListPeriod != null && ListPeriod.Count > 0)
{
// calcolo eventi giorno
ListDay = ListPeriod
.Where(x => x.InizioStato.Date == dtSel)
.OrderBy(x => x.InizioStato)
.ThenBy(x => x.IdxInsMan)
.ToList();
// ora calcolo il sequencer x mostrare dettaglio orario...
SeqStatus = TabDServ.InsManSeqDayStatus(dtCurr, ListDay);
// calcolo min lavorati odierni
DayMinLav = 0;
var recLav = SeqStatus.FirstOrDefault(x => x.IdxTipo == 1);
if (recLav != null)
{
DayMinLav = recLav.Value;
DayOee = recLav.ValuePerc;
}
// minuti totali come record day...
DayMinTot = (double)ListDay.Sum(x => x.MinProd);
if (dtSel.Date == dtCurr.Date && ListDTO != null)
{
var dayDto = ListDTO.FirstOrDefault(x => x.DataRif == dtSel.Date);
if (dayDto != null)
{
DayImportRatio = dayDto.RatioImport;
}
}
}
}
private void ReloadData()
{
// rileggo dati periodo...
ListDTO = new List<InsManDayDto>();
DateTime oggi = DateTime.Today;
if (RecMSE != null)
{
string IdxMacc = RecMSE.IdxMacchina;
// valori selezionabili x TCiclo
var rawListTCiclo = TabDServ.ListValuesFilt("InsManuali", IdxMacc);
ListTCiclo = new Dictionary<decimal, string>();
foreach (var item in rawListTCiclo)
{
string sKey = item.value.Replace(",", ".");
decimal chiave = 0;
if (decimal.TryParse(sKey, NumberStyles.Any, CultureInfo.InvariantCulture, out chiave))
{
ListTCiclo.Add(chiave, item.label);
}
}
// eventi fermate
var eventsAll = TabDServ.AnagEventiGetByMacch(IdxMacc);
if (eventsAll != null)
{
ListEvents = eventsAll.Where(x => x.EventoTablet).ToList();
}
DateTime MeseStart = new DateTime(dtCurr.Year, dtCurr.Month, 1);
DateTime MeseEnd = MeseStart.AddMonths(1);
ListPeriod = TabDServ.InsManFilt(IdxMacc, MeseStart, MeseEnd);
ListDTO = TabDServ.InsManDayDto(ListPeriod);
DateCheck = new Dictionary<DateTime, string>();
DateCFF = new Dictionary<DateTime, string>();
string cssImport = "bg-success text-light rounded-circle p-2";
string cssOkDay = "bg-success bg-opacity-50 text-light rounded-circle p-2";
string cssPartDay = "bg-info bg-opacity-25 text-light rounded-circle p-2";
string cssHasData = "bg-warning text-light rounded-circle p-2";
string cssToday = " border border-info rounded-circle p-2";
if (ListDTO != null)
{
string currCss = "";
foreach (var item in ListDTO)
{
currCss = "";
// controllo minuti dichiarati...
if (item.RatioImport == 1)
{
currCss = cssImport;
}
else if (IsTimeInfoOk(item.DataRif.Date, true))
{
currCss = item.MinProdTot < 1440 ? cssPartDay : cssOkDay;
}
else
{
currCss = item.MinProdTot == 0 ? "" : cssHasData;
}
DateCheck.Add(item.DataRif, currCss);
}
}
// aggiungo comunque oggi...
if (!DateCheck.ContainsKey(oggi))
{
DateCheck.Add(oggi, cssToday);
}
else
{
DateCheck[oggi] += cssToday;
}
}
}
private async Task ReloadMonth(DateTime dtSel)
{
dtCurr = dtSel;
ReloadData();
await Task.Delay(1);
}
private void SearchArtToggle()
{
doSearchArt = !doSearchArt;
}
/// <summary>
/// Salva selezione articolo
/// </summary>
/// <param name="codArt"></param>
private void SetArtSelected(string codArt)
{
if (EditRecord != null)
{
EditRecord.CodArticolo = codArt;
doSearchArt = false;
}
}
#endregion Private Methods
}
}
+125 -45
View File
@@ -1,54 +1,134 @@
<div class="d-flex justify-content-between flex-wrap mt-2">
<div class="col-6 flex-fill ">
<div class="p-2 h-100">
<div class="cardObj p-2 h-100">
<div class="fs-6 text-secondary">Iob Type</div>
<div class="d-flex justify-content-center flex-wrap align-items-center">
@if(infosIob.iType == MP.Data.Objects.Enums.IobType.rPi)
{
<img src="images/linuxLogo.png" style="height: 7em; width: 7em;" />
}
else if (infosIob.iType == MP.Data.Objects.Enums.IobType.WIN)
{
<img src="images/winLogo.png" style="height: 7em; width: 7em;" />
}
else if (infosIob.iType == MP.Data.Objects.Enums.IobType.ND)
{
<img src="images/pythonLogo.png" style="height: 7em; width: 7em;" />
}
<div class="d-flex justify-content-between flex-wrap align-items-centermt-2">
<div class="col-12 col-lg-6 flex-fill ">
<div class="p-2">
<div class="cardObj w-100 p-2">
<div class="d-flex justify-content-between mb-3 border-bottom border-secondary">
<div class="px-0">
<div class="fs-5 text-secondary">IOB Data</div>
</div>
</div>
<div class="d-flex justify-content-between my-2">
<div class="px-0">
@{
string imgUrl = "images/pythonLogo.png";
if (IobInfo.iType == MP.Core.Objects.Enums.IobType.rPi)
{
imgUrl = "images/linuxLogo.png";
}
else if (IobInfo.iType == MP.Core.Objects.Enums.IobType.WIN)
{
imgUrl = "images/winLogo.png";
}
}
<img src="@imgUrl" style="height: 3em; width: 3em;" />
</div>
<div class="px-0 text-end">
<div class="fs-5 fw-bold">@IobInfo.name</div>
<div class="fs-5 fw-bold">@idxMacch</div>
</div>
</div>
@if (!string.IsNullOrEmpty(MacIobConf("IobType")))
{
<div class="d-flex justify-content-between my-0">
<div class="px-0">
Type:
</div>
<div class="px-0 text-end">
<div class="fs-5 fw-bold">@MacIobConf("IobType")</div>
</div>
</div>
}
<div class="d-flex justify-content-between my-0">
<div class="px-0">
IP addr:
</div>
<div class="px-0 text-end">
<div class="fs-6 fw-bold">@IobInfo.IP</div>
</div>
</div>
@if (!string.IsNullOrEmpty(MacIobConf("IobVersion")))
{
<div class="d-flex justify-content-between my-0">
<div class="px-0">
Vers:
</div>
<div class="px-0 text-end">
<div class="fs-6 fw-bold">@MacIobConf("IobVersion")</div>
</div>
</div>
}
<div class="d-flex justify-content-between">
<div class="px-0">
Abs Counter:
</div>
<div class="px-0 text-end">
@{
string icnCol = IobInfo.CNC_Counter ? "fa-solid fa-thumbs-up text-success" : "fa-solid fa-thumbs-down text-secondary";
}
<i class="@icnCol"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-6 h-100 flex-fill ">
<div class="col-12 col-lg-6 h-100 flex-fill ">
<div class="p-2">
<div class="cardObj w-100 p-2">
<div class="fs-6 text-secondary">Machine Cod</div>
<div class="fs-4 fw-bold">@idxMacch</div>
</div>
</div>
<div class="p-2">
<div class="cardObj w-100 p-2">
<div class="fs-6 text-secondary">Iob Address</div>
<div class="fs-4 fw-bold">@infosIob.IP</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between flex-wrap align-items-centermt-2">
<div class="col-6 flex-fill ">
<div class="p-2">
<div class="cardObj w-100 p-2">
<div class="fs-6 text-secondary">Iob Name</div>
<div class="fs-4 fw-bold">@infosIob.name</div>
</div>
</div>
</div>
<div class="col-6 h-100 flex-fill ">
<div class="p-2">
<div class="cardObj w-100 p-2">
<div class="fs-6 text-secondary">CNC Absolute counter</div>
<div class="fs-4 fw-bold">@infosIob.CNC_Counter</div>
<div class="d-flex justify-content-between mb-1 border-bottom border-secondary">
<div class="px-0">
<div class="fs-5 text-secondary">Machine Data</div>
</div>
</div>
<div class="d-flex justify-content-between mt-2">
<div class="px-0 fs-1">
<i class="fa-solid fa-industry"></i>
</div>
<div class="px-0 text-end">
<div class="fs-5 fw-bold">@MacIobConf("Vendor")</div>
<div class="fs-5 fw-bold">@MacIobConf("Model")</div>
</div>
</div>
<div class="d-flex justify-content-between my-0">
<div class="px-0">
IP Addr:
</div>
<div class="px-0 text-end">
<div class="fs-5 fw-bold">@MacIobConf("MachIp")</div>
</div>
</div>
<div class="d-flex justify-content-between my-0">
<div class="px-0">
Port:
</div>
<div class="px-0 text-end">
<div class="fs-5 fw-bold">@MacIobConf("MachPort")</div>
</div>
</div>
<div class="accordion" id="AccordGrp">
<div class="accordion-item">
<h2 class="accordion-header" id="headingOne">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Show All Opt.Params
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse" aria-labelledby="headingOne" data-bs-parent="#AccordGrp">
<div class="accordion-body">
<ul class="list-group list-group-sm">
@foreach (var item in MachineData)
{
<li class="list-group-item list-group-item-dark">
<div class="d-flex justify-content-between">
<div class="px-0">@item.Key</div>
<div class="px-0 fw-bold">@item.Value</div>
</div>
</li>
}
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
+16 -3
View File
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Components;
using MP.Data.Objects;
using MP.Core.Objects;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -15,7 +15,9 @@ namespace MP_TAB3.Components
#region Protected Properties
protected IOB_data infosIob { get; set; } = new IOB_data();
protected IOB_data IobInfo { get; set; } = new IOB_data();
protected Dictionary<string, string> MachineData { get; set; } = new Dictionary<string, string>();
[Inject]
protected TabDataService TabSrv { get; set; } = null!;
@@ -26,7 +28,18 @@ namespace MP_TAB3.Components
protected override async Task OnParametersSetAsync()
{
infosIob = await TabSrv.IobInfo(idxMacch);
IobInfo = await TabSrv.IobInfoAsync(idxMacch);
MachineData = TabSrv.MachIobConf(idxMacch);
}
public string MacIobConf(string kReq)
{
string answ = "-";
if (MachineData.ContainsKey(kReq))
{
answ = MachineData[kReq];
}
return answ;
}
#endregion Protected Methods
+1 -1
View File
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using System.Data;
using System.Reflection.Metadata;
+1 -1
View File
@@ -2,7 +2,7 @@
{
<div class="input-group">
<span class="input-group-text" id="basic-addon1"><i class="fa-solid fa-building"></i></span>
<select class="form-select form-select-sm" @bind="@IdxMaccSel">
<select class="form-select form-select-sm" value="@idxMaccSel" @onchange="OnSelectionChanged">
@if (ListMacchine == null)
{
<option value="" disabled>No record found</option>
+123 -65
View File
@@ -1,13 +1,13 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using MP_TAB3.Shared;
using System;
using NLog;
using System.Reflection.Metadata;
using static MongoDB.Driver.WriteConcern;
namespace MP_TAB3.Components
{
public partial class MachSel
public partial class MachSel : IDisposable
{
#region Public Properties
@@ -15,39 +15,20 @@ namespace MP_TAB3.Components
public EventCallback<string> E_MachSel { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Protected Properties
#region Public Methods
protected string IdxMaccSel
public void Dispose()
{
get => idxMaccSel;
set
{
if (idxMaccSel != value)
{
idxMaccSel = value;
MsgServ.UserPrefSet(idxMaccCurr, value);
E_MachSel.InvokeAsync(value).ConfigureAwait(false);
}
}
TDataService.DataInvalidated -= TDataService_DataInvalidated;
}
private string idxMaccSel { get; set; } = "";
[Inject]
protected MessageService MsgServ { get; set; } = null!;
#endregion Public Methods
protected Dictionary<string, string>? ListMacchine { get; set; } = null;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
#region Protected Properties
protected string idxMaccCurr
{
@@ -62,59 +43,136 @@ namespace MP_TAB3.Components
}
}
protected override async Task OnParametersSetAsync()
protected string IdxMaccSel
{
// inizilamente riporto machcina corrente da MSE
if (RecMSE == null)
get => idxMaccSel;
set
{
IdxMaccSel = "";
}
else
{
if (string.IsNullOrEmpty(idxMaccSel))
if (idxMaccSel != value)
{
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
{
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
if (isMulti)
{
var listMulti = await TDataService.VMSFDGetAll();
ListMacchine = listMulti
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
if (ListMacchine.Count > 0)
{
// cerco se ho in storage la macchina selezionata...
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
else
{
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
}
}
}
idxMaccSel = value;
MsgServ.UserPrefSet(idxMaccCurr, value);
}
}
await Task.Delay(1);
}
protected Dictionary<string, string>? ListMacchine { get; set; } = null;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TDataService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected override void OnInitialized()
{
//base.OnInitialized();
firstInit = true;
TDataService.DataInvalidated += TDataService_DataInvalidated;
}
protected override async Task OnParametersSetAsync()
{
try
{
// inizilamente riporto macchina corrente da MSE
if (RecMSE == null)
{
IdxMaccSel = "";
Log.Error("Impossibile selezionare: recMSE nullo");
}
else
{
if (string.IsNullOrEmpty(idxMaccSel))
{
await ReloadSelector(false);
}
}
}
catch (Exception exc)
{
Log.Error($"Errore in MachSel.OnParametersSetAsync{Environment.NewLine}{exc}");
}
await Task.Delay(1);
}
#endregion Protected Methods
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private bool firstInit = true;
private bool isMulti = false;
#endregion Private Fields
#region Private Properties
private string idxMaccSel { get; set; } = "";
#endregion Private Properties
#region Private Methods
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var newValue = e.Value?.ToString();
if (newValue != idxMaccSel)
{
IdxMaccSel = newValue;
await E_MachSel.InvokeAsync(newValue);
}
}
private async Task ReloadSelector(bool doReload)
{
if (RecMSE != null && firstInit)
{
firstInit = false;
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
{
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
if (isMulti)
{
var listMulti = await TDataService.VMSFDGetAll(doReload);
ListMacchine = listMulti
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
if (ListMacchine.Count > 0)
{
// cerco se ho in storage la macchina selezionata...
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
await E_MachSel.InvokeAsync(idxMSel);
}
else
{
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
}
}
}
}
}
private async void TDataService_DataInvalidated(object? sender, EventArgs e)
{
await ReloadSelector(true);
}
#endregion Private Methods
}
}
+321 -246
View File
@@ -1,286 +1,361 @@
@if (isLoading)
@if (isLoading || CRecMSE == null)
{
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
<div class="card-body">
<div class="placeholder-glow">
<span class="placeholder col-4"></span>
<span class="placeholder col-7 mb-1"></span>
<span class="placeholder col-12 mb-1 pholderHeight"></span>
<span class="placeholder col-12 mb-1"></span>
<span class="placeholder col-3 mb-1"></span>
<span class="placeholder col-8"></span>
<span class="placeholder col-3"></span>
<span class="placeholder col-7 mb-1"></span>
<span class="placeholder col-3"></span>
<span class="placeholder col-8 mb-1"></span>
</div>
</div>
</div>
}
else
{
@if (RecMSE == null)
@if (FullMode)
{
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
<div class="card-body">
<div class="alert alert-info w-100 fs-3">No data</div>
<div class="placeholder-glow">
<span class="placeholder col-4"></span>
<span class="placeholder col-7 mb-1"></span>
<span class="placeholder col-12 mb-1 pholderHeight"></span>
<span class="placeholder col-12 mb-1"></span>
<span class="placeholder col-3 mb-1"></span>
<span class="placeholder col-8"></span>
<span class="placeholder col-3"></span>
<span class="placeholder col-7 mb-1"></span>
<span class="placeholder col-3"></span>
<span class="placeholder col-8 mb-1"></span>
</div>
</div>
</div>
<PlaceholderStatusMap></PlaceholderStatusMap>
}
else
{
@if (FullMode)
<PlaceholderDetail></PlaceholderDetail>
}
}
else
{
@if (FullMode)
{
if (Width > 640)
{
if (Width > 640)
{
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@RecMSE.CodMacchina">
<div class="bg-black">
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
<div class="labelTop px-2 w-100">
<div class="text-center fs-2 fw-bold">
@RecMSE.Nome
</div>
</div>
</div>
</div>
<div class="card-body rounded-bottom-4 p-0 bg-dark">
<div class="@RecMSE.Semaforo py-0 px-1">
<div class="d-flex justify-content-between fs-5">
<div class="px-0 @cssClassTextDescr">
<span>@RecMSE.DescrizioneStato </span>
</div>
<div class="px-0">
<b>@(FormatDurata(RecMSE.Durata))</b>
</div>
</div>
</div>
<div class="d-flex justify-content-around">
<div class="text-center text-success d-flex justify-content-between">
<div>
<i class="fa-regular fa-circle-check"></i>&nbsp; @($" {RecMSE.PezziConf}") &nbsp;
</div>
<div class="text-danger">
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
@($"(- {datiProdAct.PzConfScarto})")
}
</div>
</div>
<div class="text-center text-warning ">
<div>
<i class="fa-solid fa-layer-group"></i>&nbsp; @($" {RecMSE.PezziProd}")
</div>
</div>
</div>
<div class="d-flex justify-content-between">
<div class="col-4">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-8 py-1" style="line-height: 1.6rem;">
<div class="text-center text-light d-flex justify-content-between">
<div class="px-1"><span>ART:</span></div>
<div class="px-1">@($"{RecMSE.CodArticolo}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">ODL:</div>
<div class="px-1">@($"ODL{RecMSE.IdxOdl:00000000}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">PODL:</div>
<div class="px-1">@($"PODL{RecMSE.IdxPOdl:00000000}")</div>
</div>
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
<div class="bg-black">
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
<div class="labelTop px-2 w-100">
<div class="text-center fs-2 fw-bold">
@CRecMSE.Nome
@if(isManual)
{
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
}
</div>
</div>
</div>
</div>
}
else
{
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@RecMSE.CodMacchina">
<div class="bg-black">
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
<div class="labelTop px-2 py-0 w-100">
<div class="text-center fs-2 fw-bold">
@RecMSE.Nome
</div>
<div class="card-body rounded-bottom-4 p-0 bg-dark">
<div class="@CRecMSE.Semaforo py-0 px-1">
<div class="d-flex justify-content-between fs-5">
<div class="px-0 @cssClassTextDescr">
<span>@CRecMSE.DescrizioneStato </span>
</div>
<div class="px-0">
<b>@(FormatDurata(CRecMSE.Durata))</b>
</div>
</div>
</div>
<div class="card-body rounded-bottom-4 p-0 bg-dark">
<div class="@RecMSE.Semaforo py-0 px-1">
<div class="d-flex justify-content-between fs-5">
<div class="px-0 @cssClassTextDescr">
<span>@RecMSE.DescrizioneStato</span>
</div>
<div class="px-0">
<b>
@(FormatDurata(RecMSE.Durata))
</b>
</div>
<div class="d-flex justify-content-around">
<div class="text-center text-success d-flex justify-content-between">
<div>
<i class="fa-regular fa-circle-check"></i>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</div>
<div class="text-danger">
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
@($"(- {datiProdAct.PzConfScarto})")
}
</div>
</div>
<div class="d-flex justify-content-around">
<div class="text-center text-success d-flex justify-content-between">
<div>
<i class="fa-regular fa-circle-check"></i>&nbsp; @($" {RecMSE.PezziConf}") &nbsp;
</div>
<div class="text-danger">
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
@($"(- {datiProdAct.PzConfScarto})")
}
</div>
</div>
<div class="text-center text-warning ">
<div>
<i class="fa-solid fa-layer-group"></i>&nbsp; @($" {RecMSE.PezziProd}")
</div>
<div class="text-center text-warning ">
<div>
<i class="fa-solid fa-layer-group"></i>&nbsp; @($" {CRecMSE.PezziProd}")
</div>
</div>
<div class="d-flex justify-content-between">
<div class="col-5">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="d-flex justify-content-between">
<div class="col-4">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-8 py-1" style="line-height: 1.6rem;">
<div class="text-center text-light d-flex justify-content-between">
<div class="px-1"><span>ART:</span></div>
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
</div>
<div class="col-7 small py-2" style="line-height: 1.6rem; font-size:0.9rem;">
<div class="text-center text-light d-flex justify-content-between">
<div class="px-1"><span>ART:</span></div>
<div class="px-1">@($"{RecMSE.CodArticolo}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">ODL:</div>
<div class="px-1">@($"ODL{RecMSE.IdxOdl:00000000}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">PODL:</div>
<div class="px-1">@($"PODL{RecMSE.IdxPOdl:00000000}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">ODL:</div>
<div class="px-1">@($"{CRecMSE.IdxOdl:000000}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between small lh-sm">
<div class="px-1">PODL:</div>
<div class="px-1">@($"{CRecMSE.IdxPOdl:000000}")</div>
</div>
</div>
</div>
</div>
}
</div>
}
else
{
<div class="cardObj px-3 py-1 text-sizer">
<div class="text-center d-flex justify-content-between align-items-center ">
<div class="col-4 fs-4">
<div class="lh-1">
<div class="text-end text-success d-flex justify-content-between">
<div class="px-0">
Confermati
@* <i class="fa-regular fa-circle-check"></i> *@
</div>
<div class="px-0">
@($"{RecMSE.PezziConf}")
</div>
</div>
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
<div class="text-end text-danger d-flex justify-content-between">
<div class="px-0">
Scarto
</div>
<div class="px-0">
@($"- {datiProdAct.PzConfScarto}")
</div>
</div>
}
<div class="text-end text-warning d-flex justify-content-between">
<div class="px-0">
Prodotti
@* <i class="fa-solid fa-layer-group"></i> *@
</div>
<div class="px-0">@($"{RecMSE.PezziProd}")</div>
</div>
@if (RecMSE.extraVal > 0)
{
<div class="text-end text-primary d-flex justify-content-between">
<div class="px-0">
Extra
@* <i class="fa-brands fa-stack-overflow"></i> *@
</div>
<div class="px-0">@($"{RecMSE.extraVal}")</div>
</div>
}
</div>
</div>
<div class="col-4" style="max-height: 8rem; max-width: 6rem;">
<h4 class="text-center mb-0 fw-bold">
@RecMSE.Nome
</h4>
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
<div class="w-100">
@if (!string.IsNullOrEmpty(IdxMacchSub))
{
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
@IdxMacchSub
</div>
}
</div>
<div class="w-100 fs-4">
<div class="text-light d-flex justify-content-between small lh-sm">
<div class="px-0">ART</div>
<div class="px-0">@RecMSE.CodArticolo</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="px-0">ODL</div>
<div class="px-0">@RecMSE.IdxOdl</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="px-0">PODL:</div>
<div class="px-0">@RecMSE.IdxPOdl</div>
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
<div class="bg-black">
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
<div class="labelTop px-2 py-0 w-100">
<div class="text-center fs-2 fw-bold">
@CRecMSE.Nome
@if (isManual)
{
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
}
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between mt-1">
<div class="col mb-2 px-2 py-2 @RecMSE.Semaforo rounded" @onclick="ShowDetail">
<div class="d-flex justify-content-center">
<div class="p-0 mr-auto me-1">
@RecMSE.DescrizioneStato
<div class="card-body rounded-bottom-4 p-0 bg-dark">
<div class="@CRecMSE.Semaforo py-0 px-1">
<div class="d-flex justify-content-between fs-5">
<div class="px-0 @cssClassTextDescr">
<span>@CRecMSE.DescrizioneStato</span>
</div>
<div class="p-0">
<b>@(FormatDurata(RecMSE.Durata))</b>
<div class="px-0">
<b>
@(FormatDurata(CRecMSE.Durata))
</b>
</div>
</div>
</div>
@if (enableDisegno)
{
<div class="col-2">
<div class="px-1 w-100">
<button class="btn btn-info py-2 w-100" @onclick="ToggleDraw"><i class="fa-regular fa-file-pdf"></i></button>
<div class="d-flex justify-content-around">
<div class="text-center text-success d-flex justify-content-between">
<div>
<i class="fa-regular fa-circle-check"></i>&nbsp; @($" {CRecMSE.PezziConf}") &nbsp;
</div>
<div class="text-danger">
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
@($"(- {datiProdAct.PzConfScarto})")
}
</div>
</div>
}
<div class="text-center text-warning ">
<div>
<i class="fa-solid fa-layer-group"></i>&nbsp; @($" {CRecMSE.PezziProd}")
</div>
</div>
</div>
<div class="d-flex justify-content-between">
<div class="col-5 px-0">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-7 small py-1 px-0">
<div class="text-center text-light d-flex justify-content-between">
<div class="px-1 small">ART:</div>
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between lh-sm">
<div class="px-1 small">ODL:</div>
<div class="px-1">@($"{CRecMSE.IdxOdl:000000}")</div>
</div>
<div class="text-center text-light d-flex justify-content-between lh-sm">
<div class="px-1 small">PODL:</div>
<div class="px-1">@($"{CRecMSE.IdxPOdl:000000}")</div>
</div>
</div>
</div>
</div>
</div>
}
}
}
@if (enableDisegno && showDraw && RecMSE != null)
{
string docUrl = string.IsNullOrEmpty(RecMSE.Disegno) ? $"disegni/{RecMSE.CodArticolo}.pdf" : $"disegni/{RecMSE.Disegno}.pdf";
<div class="bg-light p-1">
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
</div>
else
{
<div class="cardObj px-3 py-1 text-sizer">
<div class="text-center d-flex justify-content-between align-items-center row">
<div class="col-12">
<h4 class="text-center mb-0 fw-bold">
@CRecMSE.Nome
@if (isManual)
{
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
}
</h4>
</div>
<div class="col-4 fs-4">
<div class="lh-1">
<div class="text-end text-light fw-bold d-flex justify-content-between border-bottom border-secondary">
<div class="px-0">
Cicli Prod
</div>
<div class="px-0 fs-4">
@if (datiProdAct != null)
{
@($"{datiProdAct.PzTotODL}")
}
else
{
@($"{CRecMSE.PezziProd}")
}
</div>
</div>
@if (datiProdAct != null)
{
@if (datiProdAct.Pz2RecTot > 0)
{
<div class="fs-5 text-end text-warning d-flex justify-content-between">
<div class="px-0">
Da Conferm.
</div>
<div class="px-0 fs-5">
@($"{datiProdAct.Pz2RecTot}")
</div>
</div>
}
else
{
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
<div class="px-0">
Da Conferm.
</div>
<div class="px-0 fs-5">
@($"{datiProdAct.Pz2RecTot}")
</div>
</div>
}
@if (NumScartiConf > 0)
{
<div class="fs-5 text-end text-danger d-flex justify-content-between">
<div class="px-0">
Scarti Versati
</div>
<div class="px-0 fs-5">
@($"{NumScartiConf}")
</div>
</div>
}
else
{
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
<div class="px-0">
Scarti Versati
</div>
<div class="px-0 fs-5">
@($"{NumScartiConf}")
</div>
</div>
}
@if (datiProdAct.PzConfRilav > 0)
{
<div class="fs-5 text-end text-info d-flex justify-content-between">
<div class="px-0">
Rilav Versati
</div>
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfRilav}")
</div>
</div>
}
else
{
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
<div class="px-0">
Rilav Versati
</div>
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfRilav}")
</div>
</div>
}
<div class="text-end text-success d-flex justify-content-between">
<div class="px-0">
Buoni Vers.
</div>
<div class="px-0 fs-5">
@($"{datiProdAct.PzConfBuoni}")
</div>
</div>
}
@if (CRecMSE.extraVal > 0 && showQtaExtra)
{
<div class="text-end text-primary d-flex justify-content-between">
<div class="px-0">
Extra
</div>
<div class="px-0 fs-5">@($"{CRecMSE.extraVal}")</div>
</div>
}
</div>
</div>
<div class="col-4" style="max-height: 8rem; max-width: 7rem;">
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
</div>
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
<div class="w-100">
@if (!string.IsNullOrEmpty(IdxMacchSub))
{
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
@IdxMacchSub
</div>
}
</div>
<div class="w-100 fs-4">
<div class="text-light d-flex justify-content-between small lh-sm">
<div class="px-0">ART</div>
<div class="px-0">@CRecMSE.CodArticolo</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="px-0">ODL</div>
<div class="px-0">@($"{CRecMSE.IdxOdl:000000}")</div>
</div>
<div class="text-end text-light d-flex justify-content-between small lh-sm">
<div class="px-0">PODL:</div>
<div class="px-0">@($"{CRecMSE.IdxPOdl:000000}")</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between mt-2 px-0 mx-0">
<div class="col-3">
<div class="px-0 w-100">
@if (showPodl)
{
<button class="btn btn-outline-warning py-2 w-100" @onclick="TogglePOdl" title="Hide ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-up"></i></button>
}
else
{
<button class="btn btn-warning py-2 w-100 @isDisabled(showDraw)" @onclick="TogglePOdl" title="Show ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-down"></i></button>
}
</div>
</div>
<div class="col mb-2 mx-1 py-2 @CRecMSE.Semaforo rounded" @onclick="ShowDetail">
<div class="d-flex justify-content-center">
<div class="p-0 mr-auto me-1">
@CRecMSE.DescrizioneStato
</div>
<div class="p-0">
<b>@(FormatDurata(CRecMSE.Durata))</b>
</div>
</div>
</div>
@if (enableDisegno)
{
<div class="col-3">
<div class="px-0 w-100">
@if (showDraw)
{
<button class="btn btn-outline-info py-2 w-100" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-up"></i></button>
}
else
{
<button class="btn btn-info py-2 w-100 @isDisabled(showPodl)" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
}
</div>
</div>
}
else
{
<div class="col-3">
<div class="px-0 w-100">
<button class="btn btn-secondary py-2 w-100 disabled" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
</div>
</div>
}
</div>
</div>
}
@if (enableDisegno && showDraw)
{
string docUrl = string.IsNullOrEmpty(CRecMSE.Disegno) ? $"disegni/{CRecMSE.CodArticolo}.pdf" : $"disegni/{CRecMSE.Disegno}.pdf";
<div class="bg-light p-1">
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
</div>
}
@if (showPodl)
{
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="0" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="TogglePOdl" ShowClose="false"></CurrOdlDetail>
}
}
+348 -94
View File
@@ -1,23 +1,22 @@
using EgwCoreLib.Razor;
using global::Microsoft.AspNetCore.Components;
using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using System;
namespace MP_TAB3.Components
{
public partial class MachineBlock
public partial class MachineBlock : IDisposable
{
#region Public Properties
public string currIpv4 { get; set; } = "";
[Parameter]
public bool doBlink { get; set; } = false;
/// <summary>
/// True quando in status map, false altrimenti
/// </summary>
[Parameter]
public bool FullMode { get; set; } = true;
@@ -28,13 +27,13 @@ namespace MP_TAB3.Components
public string IdxMacchSub { get; set; } = "";
[Parameter]
public int keepAliveMin { get; set; } = 5;
public int KeepAliveMin { get; set; } = 5;
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
[Parameter]
public bool showCard { get; set; }
public bool ShowCard { get; set; }
[Parameter]
public int Width { get; set; } = 0;
@@ -67,6 +66,15 @@ namespace MP_TAB3.Components
return answ;
}
public void Dispose()
{
innerCircleVals.Clear();
outerCircleVals.Clear();
datiProdAct = null;
LastRecMSE = null;
TabDServ.DataInvalidated -= TabDServ_DataInvalidated;
}
/// <summary>
/// url completo immagine
/// </summary>
@@ -78,7 +86,7 @@ namespace MP_TAB3.Components
{
url = "Steamware.png";
}
string fullPath = Path.Combine(imgBasePath, url);
string fullPath = $"{imgBasePath}/{url}";
return fullPath;
}
@@ -87,15 +95,10 @@ namespace MP_TAB3.Components
#region Protected Fields
protected string baseCss = "sem";
protected int currMaxVal = 1000;
protected int currMaxVal = 888;
protected List<CircleGaugeMulti.CircSegm> innerCircleVals = new List<CircleGaugeMulti.CircSegm>();
protected int kaFactor = 60 / 2;
protected int maxVal = 1000;
protected int maxVal = 999;
protected List<CircleGaugeMulti.CircSegm> outerCircleVals = new List<CircleGaugeMulti.CircSegm>();
#endregion Protected Fields
@@ -185,13 +188,13 @@ namespace MP_TAB3.Components
get
{
ProdAdvDispl.ProdCounter answ = new ProdAdvDispl.ProdCounter();
if (RecMSE != null)
if (CRecMSE != null)
{
answ = new ProdAdvDispl.ProdCounter()
{
numPzConf = (int)RecMSE.PezziConf,
numPzOrd = (int)RecMSE.NumPezzi,
numPzProd = (int)RecMSE.PezziProd
numPzConf = (int)CRecMSE.PezziConf,
numPzOrd = (int)CRecMSE.NumPezzi,
numPzProd = (int)CRecMSE.PezziProd
};
}
return answ;
@@ -199,7 +202,7 @@ namespace MP_TAB3.Components
}
/// <summary>
/// Dati produzioen rilevati
/// Dati produzione rilevati
/// </summary>
protected StatoProdModel? datiProdAct { get; set; } = null;
@@ -209,12 +212,23 @@ namespace MP_TAB3.Components
[Inject]
protected MessageService MServ { get; set; } = null!;
[Inject]
protected SharedMemService MStor { get; set; } = null!;
[Inject]
protected NavigationManager NavMan { get; set; } = null!;
protected int NumScartiConf
{
get => datiProdAct != null ? datiProdAct.PzConfScarto - datiProdAct.PzConfRilav : 0;
}
[Inject]
protected StatusData SDService { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TabDServ { get; set; } = null!;
@@ -222,6 +236,11 @@ namespace MP_TAB3.Components
#region Protected Methods
protected string isDisabled(bool testCond)
{
return testCond ? $"disabled" : "";
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
@@ -235,73 +254,90 @@ namespace MP_TAB3.Components
protected override async Task OnInitializedAsync()
{
TabDServ.DataInvalidated += TabDServ_DataInvalidated;
isLoading = true;
// salvo i parametri precedenti x calcolare variazioni...
saveParams();
// abilitazione disegni...
TabDServ.ConfigGetVal("enableDisegno", ref enableDisegno);
// se configurata uso cartella virtuale... altrimenti cartella processo
var sImgBasePath = config.GetValue<string>("ServerConf:ImgBasePath") ?? (config.GetValue<string>("OptConf:ImgBasePath") ?? "");
if (!string.IsNullOrEmpty(sImgBasePath))
{
imgBasePath = sImgBasePath;
}
else
{
imgBasePath = $"{Environment.CurrentDirectory}/images/";
}
await Task.Delay(1);
TabDServ.ConfigGetVal("TAB_ShowQtaExtra", ref showQtaExtra);
await ReloadXDL(true);
await loadDetails();
detailLoaded = true;
}
protected override async Task OnParametersSetAsync()
{
DateTime adesso = DateTime.Now;
isLoading = RecMSE == null;
// controllo SE ho variazioni così rileggo
if (RecMSE != null)
// controllo variazione parametri...
string lastIMS = LastIdxMacchSub;
if (paramsChanged())
{
if (SDService.MachNumPzGet(RecMSE.IdxMacchina) != RecMSE.PezziProd)
saveParams();
isLoading = RecMSE == null;
// controllo SE ho variazioni cos rileggo
if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null)
{
datiProdAct = await TabDServ.StatoProdMacchina(RecMSE.IdxMacchina, adesso);
SDService.MachProdStSet(RecMSE.IdxMacchina, datiProdAct);
SDService.MachNumPzSet(RecMSE.IdxMacchina, RecMSE.PezziProd);
// solo se cambia macchina forzo da DB
bool doForce = lastIMS != IdxMacchSub;
RecMSESub = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, doForce);
}
else
{
datiProdAct = SDService.MachProdStGet(RecMSE.IdxMacchina);
RecMSESub = RecMSE;
}
}
if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null)
{
RecMSE = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, true);
// carico dettagli
await loadDetails();
}
setGaugeVals();
}
protected void setGaugeVals()
{
if (RecMSE != null)
// se una doppio pallet uso dati MSE
if (string.IsNullOrEmpty(IdxMacchSub) && isMulti)
{
innerCircleVals.Clear();
outerCircleVals.Clear();
currMaxVal = int.Parse(RecMSE.NumPezzi.ToString()!);
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = RecMSE.PezziProd });
if (RecMSE.PezziConf > 0)
if (CRecMSE != null)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = RecMSE.PezziConf });
innerCircleVals.Clear();
outerCircleVals.Clear();
currMaxVal = CRecMSE.NumPezzi;
// int.Parse(CRecMSE.NumPezzi.ToString()!);
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = CRecMSE.PezziProd });
if (CRecMSE.PezziConf > 0)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = CRecMSE.PezziConf });
// se ho scarti aggiungo all'inizio
if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#CD1916", Value = datiProdAct.PzConfScarto });
}
}
if (CRecMSE.extraVal > 0)
{
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = CRecMSE.extraVal });
}
}
}
// altrimenti da dati produzione
else
{
if (datiProdAct != null)
{
innerCircleVals.Clear();
outerCircleVals.Clear();
currMaxVal = datiProdAct.PzRichODL;
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = datiProdAct.PzTotODL });
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = datiProdAct.PzConfAll });
// se ho scarti aggiungo all'inizio
if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
if (datiProdAct.PzConfScarto > 0)
{
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#CD1916", Value = datiProdAct.PzConfScarto });
}
if (CRecMSE != null && CRecMSE.extraVal > 0)
{
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = CRecMSE.extraVal });
}
}
if (RecMSE.extraVal > 0)
{
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = RecMSE.extraVal });
}
//Log.Trace($"MBlock | {RecMSE.IdxMacchina} | 03");
}
else
{
Log.Info("MBlock NO DATA");
}
}
@@ -309,76 +345,294 @@ namespace MP_TAB3.Components
{
// salvo idxMacch
await MServ.IdxMaccSet(RecMSE!.IdxMacchina);
// salvo se sia manuale...
await MServ.LastOpenedPageSet("machine-detail");
// navigo!
NavMan.NavigateTo($"machine-detail");
}
/// <summary>
/// Toggle visibilità button
/// </summary>
protected void ToggleDraw()
{
showDraw = !showDraw;
}
#endregion Protected Methods
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private bool detailLoaded = false;
private bool enableDisegno = false;
private string imgBasePath = "";
private bool forceCloseOdl = true;
private int IdxOdl = 0;
private int IdxOdlAltra = 0;
private bool inAttr = false;
private bool isLoading = false;
private bool isManual = false;
private bool isMulti = false;
private bool LastFullMode = true;
private string LastIdxMacchSub = "";
private int LastKeepAliveMin = 5;
private MappaStatoExplModel? LastRecMSE = null;
private bool LastShowCard = true;
private bool showOdlDetail = false;
private bool showPodl = false;
private bool showQtaExtra = false;
#endregion Private Fields
#region Private Properties
/// <summary>
/// Info correnti secondo tipo selezione
/// </summary>
private MappaStatoExplModel? CRecMSE
{
get
{
MappaStatoExplModel? answ = RecMSE;
if (!string.IsNullOrEmpty(IdxMacchSub))
{
answ = RecMSESub;
}
return answ;
}
}
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
private Dictionary<string, string> heightList { get; set; } = new Dictionary<string, string>() { { "200", "200px" }, { "400", "400px" }, { "600", "600px" }, { "800", "800px" }, { "1000", "1000px" } };
/// <summary>
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
/// </summary>
private string idxMaccAltraTav
{
get
{
string answ = "";
if (CRecMSE != null)
{
try
{
// verifico se SIA una tavola (ha char "#")
int iSharp = IdxMaccMain.IndexOf('#');
if (iSharp > 0)
{
// ora verifico SE ALTRA TAVOLA ha ODL...
string nomeTav = IdxMaccMain.Substring(iSharp);
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
// sistemo nome
answ = IdxMaccMain.Replace(nomeTav, altraTav);
}
}
catch
{ }
}
return answ;
}
}
/// <summary>
/// Macchina corrente (main oppure sub)
/// </summary>
private string IdxMaccCur
{
get => string.IsNullOrEmpty(IdxMacchSub) ? IdxMaccMain : IdxMacchSub;
}
/// <summary>
/// Macchina selezionata MAIN
/// </summary>
private string IdxMaccMain
{
get => CRecMSE != null ? CRecMSE.IdxMacchina : "";
}
private string imgBasePath
{
get => MStor.baseUrlImages;
}
/// <summary>
/// Boolean Mobile vs Desktop
/// </summary>
private bool isMobile { get; set; }
private MappaStatoExplModel? RecMSESub { get; set; } = null;
private bool showDraw { get; set; } = false;
#endregion Private Properties
#region Private Methods
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
/// <summary>
/// Rilettura dettagli
/// </summary>
/// <returns></returns>
private async Task loadDetails()
{
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
string answ = cssStatus(semaforo);
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
// verifico di non essere in reloading e di avere dati...
if (!MServ.IsReloading && CRecMSE != null)
{
answ = $"{baseCss}Ro";
// blink se secondo pari...
DateTime adesso = DateTime.Now;
int resto = 0;
Math.DivRem(adesso.Second, 2, out resto);
if (resto == 0)
bool doForce = false;
if (SDService.MachNumPzGet(IdxMaccCur) != CRecMSE.PezziProd || SDService.MachProdStGet(IdxMaccCur).IdxOdl != CRecMSE.IdxOdl || (datiProdAct != null && datiProdAct.PzTotODL != CRecMSE.PezziProd))
{
answ += "_b";
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccCur, DateTime.Now);
SDService.MachProdStSet(IdxMaccCur, datiProdAct);
SDService.MachNumPzSet(IdxMaccCur, CRecMSE.PezziProd);
doForce = true;
}
else
{
datiProdAct = SDService.MachProdStGet(IdxMaccCur);
}
// fix multi
if (SMServ.DictMacchMulti.ContainsKey(IdxMaccMain))
{
isMulti = SMServ.DictMacchMulti[IdxMaccMain] == 1;
}
else
{
isMulti = false;
}
// fix manual
if (SMServ.DictMacchManual.ContainsKey(IdxMaccMain))
{
isManual = SMServ.DictMacchManual[IdxMaccMain];
}
else
{
isManual = false;
}
// verificare
if (!FullMode || !detailLoaded || doForce)
{
await ReloadXDL(true);
}
}
return answ;
}
private string cssStatus(string codSemaforo)
/// <summary>
/// Verifica variazione parametri
/// </summary>
/// <returns></returns>
private bool paramsChanged()
{
// se vuoto --> mostra nero!
if (string.IsNullOrEmpty(codSemaforo))
{
codSemaforo = "sNe";
}
if (LastFullMode != FullMode)
return true;
if (LastKeepAliveMin != KeepAliveMin)
return true;
if (LastShowCard != ShowCard)
return true;
if (LastIdxMacchSub != IdxMacchSub)
return true;
if (LastRecMSE == null && RecMSE != null)
return true;
if (LastRecMSE != null && RecMSE == null)
return true;
if (LastRecMSE != null && !LastRecMSE.MostlyEquals(RecMSE))
return true;
string codColore = codSemaforo.Substring(1, 2);
string answ = $"{baseCss}{codColore}";
return answ;
return false;
}
private async Task ReloadXDL(bool reloadFromOdl)
{
if (CRecMSE != null)
{
int currIdxPOdl = CRecMSE.IdxPOdl ?? 0;
if (CRecMSE != null)
{
if (reloadFromOdl)
{
currIdxPOdl = CRecMSE.IdxPOdl ?? 0;
}
// se ho PODL valido...
if (currIdxPOdl > 0)
{
currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl);
}
else
{
currPodl = new PODLExpModel()
{
IdxOdl = CRecMSE.IdxOdl ?? 0,
KeyRichiesta = "-",
CodArticolo = CRecMSE.CodArticolo,
DescArticolo = CRecMSE.CodArticolo,
NumPezzi = CRecMSE.NumPezzi,
Tcassegnato = CRecMSE.TCAssegnato
};
}
}
// update a runtime dati ODL se assegnato
if (currPodl.IdxOdl > 0)
{
currOdl = await TabDServ.OdlByIdx(currPodl.IdxOdl, false);
}
if (!string.IsNullOrEmpty(IdxMaccMain))
{
await updateIdxOdl();
}
}
}
private void saveParams()
{
LastIdxMacchSub = IdxMacchSub;
LastRecMSE = RecMSE;
LastFullMode = FullMode;
LastShowCard = ShowCard;
LastKeepAliveMin = KeepAliveMin;
}
private async void TabDServ_DataInvalidated(object? sender, EventArgs e)
{
ReloadEventArgs rea = (ReloadEventArgs)e;
if (rea.ReloadMessage == IdxMaccCur)
{
// se riceve evento relativo a questo impianto --> ricarico dati prod...
detailLoaded = false;
Log.Info("TabDServ_DataInvalidated: Reload Data");
// carico dettagli
await loadDetails();
setGaugeVals();
}
}
/// <summary>
/// Toggle visibilit button
/// </summary>
private void ToggleDraw()
{
showDraw = !showDraw;
}
/// <summary>
/// Toggle visibilit blocco PODL
/// </summary>
private void TogglePOdl()
{
showPodl = !showPodl;
}
private async Task updateIdxOdl()
{
if (CRecMSE != null)
{
// sistemo idxOdl...
var tabOdl = await TabDServ.OdlCurrByMacc(IdxMaccMain, false);
IdxOdl = tabOdl.IdxOdl;
if (isMulti)
{
if (!string.IsNullOrEmpty(idxMaccAltraTav))
{
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, false);
IdxOdlAltra = tabOdlAltra.IdxOdl;
}
}
}
}
#endregion Private Methods
+1 -8
View File
@@ -136,18 +136,11 @@
height: 10rem;
object-fit: cover;
}
.pholderHeight {
height: 7rem;
object-fit: cover;
}
@media (max-width: 640.98px) {
@media (max-width: 639.98px) {
.imgFitToSize {
height: 7.5rem;
}
.card-body {
background-color: transparent;
}
.pholderHeight {
height: 5rem;
}
}
+1 -10
View File
@@ -152,7 +152,6 @@
--bs-shadow-rgb: var(--bs-dark-rgb);
}
.card-body {
background-color: currentColor;
background-image: linear-gradient(121deg, rgba(255, 255, 255, 0.20) -0.71%, rgba(255, 255, 255, 0.05) 97.66%);
@@ -163,21 +162,13 @@
object-fit: cover;
}
.pholderHeight {
height: 7rem;
object-fit: cover;
}
@media (max-width: 640.98px){
@media (max-width: 639.98px){
.imgFitToSize{
height: 7.5rem;
}
.card-body{
background-color: transparent;
}
.pholderHeight {
height: 5rem;
}
}
+1 -1
View File
@@ -1 +1 @@
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}.pholderHeight{height:7rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}.pholderHeight{height:5rem;}}
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}@media(max-width:639.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}}
+15 -12
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -14,17 +14,8 @@ namespace MP_TAB3.Components
[Parameter]
public string IdxMacchina { get; set; } = "";
#endregion Public Properties
#region Protected Fields
protected bool isProcessing = false;
#endregion Protected Fields
#region Protected Properties
protected int IdxOdlSel
[Parameter]
public int IdxOdlSel
{
get => idxOdlSel;
set
@@ -37,6 +28,18 @@ namespace MP_TAB3.Components
}
}
#endregion Public Properties
#region Protected Fields
protected bool isProcessing = false;
#endregion Protected Fields
#region Protected Properties
protected List<vSelOdlModel> ListODL { get; set; } = new();
protected int NumRec
+3 -3
View File
@@ -15,7 +15,7 @@ using MP_TAB3;
using MP_TAB3.Shared;
using MP_TAB3.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.DTO;
using MP.Data.Services;
using Newtonsoft.Json;
@@ -55,7 +55,7 @@ namespace MP_TAB3.Components
public EventCallback<bool> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
[Parameter]
public string Title { get; set; } = "NA";
@@ -141,7 +141,7 @@ namespace MP_TAB3.Components
if (!string.IsNullOrEmpty(UserComment))
{
// inserisco
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.commento);
await TabServ.EvListInsert(newRec, MP.Core.Objects.Enums.tipoInputEvento.commento);
}
// reset
await E_relData.InvokeAsync(true);
+34 -40
View File
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.DTO;
using MP.Data.Services;
using NLog.LayoutRenderers.Wrappers;
@@ -9,15 +9,28 @@ namespace MP_TAB3.Components
{
public partial class NotesMan
{
#region Private Fields
private int durataMinCurr = 5;
private int durataMinLast = 0;
private int numGiorniCurr = 3;
private int numGiorniLast = 0;
#endregion Private Fields
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Protected Properties
protected CommentiModel? currComm { get; set; } = null;
protected EventListModel? currEv { get; set; } = null;
protected int DurataMin
@@ -43,11 +56,6 @@ namespace MP_TAB3.Components
[Inject]
protected MessageService MsgServ { get; set; } = null!;
#if false
[Inject]
protected NavigationManager NavMan { get; set; } = null!;
#endif
protected int NumGiorni
{
get => numGiorniCurr;
@@ -88,27 +96,6 @@ namespace MP_TAB3.Components
await ReloadData();
}
protected async Task reloadAfterDelOrUpd(bool rel)
{
if (rel)
{
await ReloadData();
currComm = null;
await InvokeAsync(StateHasChanged);
}
}
protected CommentiModel? currComm { get; set; } = null;
protected async Task setCurrComm(CommentiModel _CurrComm)
{
await Task.Delay(1);
if(_CurrComm != null)
{
currComm = _CurrComm;
}
}
protected async Task EditRec(CommentiModel currRec)
{
await Task.Delay(1);
@@ -129,20 +116,27 @@ namespace MP_TAB3.Components
}
}
protected async Task reloadAfterDelOrUpd(bool rel)
{
if (rel)
{
await ReloadData();
currComm = null;
await InvokeAsync(StateHasChanged);
}
}
protected async Task setCurrComm(CommentiModel _CurrComm)
{
await Task.Delay(1);
if (_CurrComm != null)
{
currComm = _CurrComm;
}
}
#endregion Protected Methods
#region Private Fields
private int durataMinCurr = 5;
private int durataMinLast = 0;
private int numGiorniCurr = 3;
private int numGiorniLast = 0;
#endregion Private Fields
#region Private Methods
private async Task DoUpdate(bool forceReload)
+36 -170
View File
@@ -1,7 +1,6 @@
<div class="row">
<div class="col-12">
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
<ShowProcessing IsProcessing="@isProcessing"></ShowProcessing>
</div>
@if (isProcessing)
@@ -11,6 +10,9 @@
}
else
{
<div class="col-12">
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
</div>
@if (isSlave)
{
<div class="col-12 my-2">
@@ -52,9 +54,18 @@
<div class="px-2">
Pezzi NC: <b>@numPz2Conf</b>
</div>
<div class="px-2">
Scarti NC: <b>@numSca2Conf</b>
</div>
@if (numSca2Conf > 0)
{
<div class="px-2">
Scarti NC: <b>@numSca2Conf</b>
</div>
}
@if (numRil2Conf > 0)
{
<div class="px-2">
Cicli Rilav NC: <b>@numRil2Conf</b>
</div>
}
</div>
</div>
</button>
@@ -65,6 +76,18 @@
<FixOdl IdxMaccCurr="@IdxMaccSel" E_RefreshData="refreshAfterFixOdl"></FixOdl>
</div>
}
@* @if (!inAttr && !showOdlDetail)
{
<div class="col-12 my-1">
<button class="btn btn-lg btn-warning w-100" disabled="@inAttr" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-down"></i> @txtBtnOdlDetail</button>
</div>
} *@
if (showOdlDetail || inAttr)
{
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="@IdxPOdlSel" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="ToggleOdlDetail"></CurrOdlDetail>
}
}
else
{
@@ -95,173 +118,9 @@
</div>
}
@if (!inAttr && !showOdlDetail)
{
<div class="col-12 my-1">
<button class="btn btn-lg btn-warning w-100" disabled="@inAttr" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-down"></i> @txtBtnOdlDetail</button>
</div>
}
@if (showOdlDetail || inAttr)
{
<div class="col-12 my-1">
<div class="card">
<div class="card-header @cssDetailOdl d-flex justify-content-between">
<div>
<h4>@titleOdlDetail</h4>
</div>
@if (idxPOdlSel == 0)
{
<div class="d-flex text-end">
<div class="form-check form-switch px-2">
<label class="form-check-label">@txtShowXDL</label>
<input class="form-check-input" type="checkbox" @bind="@showPOdlData">
</div>
@if (!inAttr)
{
<div>
<button class="btn btn-dark w-100" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-up"></i> @txtBtnOdlDetail</button>
</div>
}
</div>
}
</div>
<div class="card-body">
<div class="row">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
@if (!showPOdlData)
{
<b>ODL:</b>
}
else
{
<b>P.ODL:</b>
}
</div>
<div class="px-0 text-end fw-bold">
@if (currOdl != null && !showPOdlData)
{
@currOdl.IdxOdl
}
else
{
@currPodl.IdxPromessa
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Rif:
</div>
<div class="px-0 text-end fw-bold">
@currPodl.KeyRichiesta
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Cod:
</div>
<div class="px-0 text-end fw-bold">
@currPodl.CodArticolo
</div>
</div>
</div>
<div class="row border-top border-bottom border-secondary">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Articolo:
</div>
<div class="px-0 text-end fw-bold">
@currPodl.DescArticolo
</div>
</div>
</div>
<div class="row">
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Pezzi:
</div>
<div class="px-0 text-end fw-bold">
@currPodl.NumPezzi.ToString("N0")
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
TCiclo:
</div>
<div class="px-0 text-end fw-bold">
@if (currOdl != null && currOdl.Tcassegnato > 0 && !showPOdlData)
{
@currOdl.Tcassegnato.ToString("N2")
}
else
{
@currPodl.Tcassegnato.ToString("N2")
}
</div>
</div>
<div class="col d-flex justify-content-between">
<div class="px-0 small">
Pz/pallet:
</div>
<div class="px-0 text-end fw-bold">
@if (currOdl != null && !showPOdlData)
{
@currOdl.PzPallet
}
else
{
@currPodl.PzPallet
}
</div>
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col text-start fw-bold">
@if (currOdl != null && !showPOdlData)
{
@currOdl.Nome
}
else
{
@currPodl.Nome
}
</div>
<div class="col d-flex justify-content-between">
@if (!showPOdlData)
{
}
else
{
<div class="px-0 small">
Priorita:
</div>
<div class="px-0 text-end fw-bold">
@currPodl.Priorita
</div>
}
</div>
<div class="col d-flex justify-content-between">
@if (!showPOdlData)
{
}
else
{
<div class="px-0 small">
Data:
</div>
<div class="px-0 text-end fw-bold">
@($"{currPodl.DueDate:yyyy.MM.dd}")
</div>
}
</div>
</div>
</div>
</div>
</div>
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="@IdxPOdlSel" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="ToggleOdlDetail"></CurrOdlDetail>
}
@if (!inAttr && !showSplitOdlRiattr)
@@ -331,7 +190,14 @@
{
<div class="col-12 col-md-6 my-2">
<div class="form-check form-switch fs-3">
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl">
@if (enableSplitODL)
{
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl">
}
else
{
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl" disabled>
}
<label class="form-check-label">@txtForceCloseOdl</label>
</div>
</div>
+286 -139
View File
@@ -1,12 +1,12 @@
using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Core.Objects;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.Objects;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using System.Text;
using static MP.Data.Objects.Enums;
using static MP.Core.Objects.Enums;
namespace MP_TAB3.Components
{
@@ -21,16 +21,16 @@ namespace MP_TAB3.Components
/// Post update restituisco nuova lista dati
/// </summary>
[Parameter]
public EventCallback<List<MappaStatoExpl>> E_Updated { get; set; }
public EventCallback<List<MappaStatoExplModel>> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE
public MappaStatoExplModel? RecMSE
{
get => currRecMSE;
set
{
// salvo SOLO SE non sono in conferma
if (!setupActive)
if (!setupActive && !isProcessing)
{
currRecMSE = value;
}
@@ -102,9 +102,6 @@ namespace MP_TAB3.Components
[Inject]
protected MailService MailServ { get; set; } = null!;
[Inject]
protected StatusData SDService { get; set; } = null!;
[Inject]
protected MessageService MsgServ { get; set; } = null!;
@@ -119,6 +116,9 @@ namespace MP_TAB3.Components
get => IdxOdl > 0;
}
[Inject]
protected StatusData SDService { get; set; } = null!;
protected string SearchPodl
{
get => searchPodl;
@@ -195,10 +195,6 @@ namespace MP_TAB3.Components
protected async Task CheckAttr()
{
#if false
// rileggo ODL
await updateIdxOdl();
#endif
// verifico attrezzaggio su macchina corrente o se multi su parent
string idxMacc2check = isMulti ? IdxMaccParent : IdxMaccSel;
StatoMacchineModel rigaStato = TabDServ.StatoMacchina(idxMacc2check);
@@ -260,11 +256,11 @@ namespace MP_TAB3.Components
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
// preparo gestione progress display
MaxVal = 10;
isProcessing = true;
int currStep = 0;
await advStep(currStep);
@@ -281,29 +277,30 @@ namespace MP_TAB3.Components
await advStep(currStep++);
// processo x macchina selezionata
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel);
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel, DateTime.Now);
await Task.Delay(50);
await advStep(currStep++);
string evText = "Registrata ANNULLAMENTO ATTREZZAGGIO per ODL {0}";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODLCurr));
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr);
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr, DateTime.Now);
await advStep(currStep++);
// resetta PODL e rimuove ODL x poi TOGLIERE info di setup su macchina corrente
await TabDServ.OdlClearSetup(idxODLCurr, IdxMaccSel);
await advStep(currStep++);
// se è multi processo ANCHE x altra tavola...
if (isMulti)
{
sb.AppendLine("---");
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
int idxOdlAltra = tabOdlAltra.IdxOdl;
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
await Task.Delay(50);
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, DateTime.Now);
sb.AppendLine(String.Format(evText, idxOdlAltra));
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
// resetta PODL e rimuove ODL x poi TOGLIERE info di setup su macchina corrente
await TabDServ.OdlClearSetup(idxOdlAltra, idxMaccAltraTav);
@@ -311,7 +308,6 @@ namespace MP_TAB3.Components
}
await advStep(currStep++);
// se è master --> chiamo update child!
if (isMaster)
{
@@ -333,6 +329,18 @@ namespace MP_TAB3.Components
await RefreshData();
await CheckAttr();
await advStep(currStep++);
await FlushMpIoOdlCache();
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
isProcessing = false;
await InvokeAsync(StateHasChanged);
}
@@ -348,12 +356,12 @@ namespace MP_TAB3.Components
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
MaxVal = 3;
int currStep = 0;
await advStep(currStep);
isProcessing = true;
// chiamo stored x riprendere ODL (toglie data chiusura...)
var rowRes = await TabDServ.OdlReopenOdlMacc(IdxMaccSel);
if (rowRes != null && rowRes.IdxOdl > 0)
@@ -373,8 +381,21 @@ namespace MP_TAB3.Components
await RefreshData();
await CheckAttr();
await advStep(currStep++);
await FlushMpIoOdlCache();
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
// chiudo update...
isProcessing = false;
await InvokeAsync(StateHasChanged);
}
/// <summary>
@@ -388,12 +409,12 @@ namespace MP_TAB3.Components
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
MaxVal = 3;
int currStep = 0;
await advStep(currStep);
isProcessing = true;
// se ho ODL su altra macchina...
if (IdxOdlAltra > 0)
{
@@ -413,8 +434,21 @@ namespace MP_TAB3.Components
await RefreshData();
await CheckAttr();
await advStep(currStep++);
await FlushMpIoOdlCache();
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
// chiudo update...
isProcessing = false;
await InvokeAsync(StateHasChanged);
}
/// <summary>
@@ -429,11 +463,14 @@ namespace MP_TAB3.Components
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"PODL: {currPodl.IdxPromessa}{Environment.NewLine}Art: [{currPodl.CodArticolo}] {currPodl.DescArticolo}{Environment.NewLine}Pezzi: {currPodl.NumPezzi} * TCiclo: {tcRichAttr:N3}min{Environment.NewLine}Tempo stimato: {stima}{Environment.NewLine}{Environment.NewLine}Confermi la chiusura della fase di attrezzaggio?"))
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
// preparo gestione progress display
MaxVal = 8;
int currStep = 0;
await advStep(currStep);
isProcessing = true;
await confermaProdOdl(true);
await advStep(currStep++);
// se vedesse TCRich a zero lo reimposta a quello assegnato...
@@ -464,7 +501,7 @@ namespace MP_TAB3.Components
string evText = "Registrata inizio produzione per ODL {0}";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODLStart));
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLStart);
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLStart, DateTime.Now);
// indico INIZIO SETUP su REDIS come EXE della macchina...
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
TabDServ.addTask4Machine(IdxMaccSel, taskType.stopSetup, $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}");
@@ -476,7 +513,7 @@ namespace MP_TAB3.Components
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
int idxOdlAltra = tabOdlAltra.IdxOdl;
sb.AppendLine(String.Format(evText, idxOdlAltra));
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
// invio su seconda tavola
TabDServ.addTask4Machine(idxMaccAltraTav, taskType.stopSetup, $"TS:{ts}|MATR: {MatrOpr}| Master Machine: {IdxMaccSel}");
}
@@ -493,7 +530,7 @@ namespace MP_TAB3.Components
// invio chiusura attrezzaggio
ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}";
await processaEvento(machine.IdxMacchinaSlave, idxEvento, sb.ToString(), idxODLStart);
await processaEvento(machine.IdxMacchinaSlave, idxEvento, sb.ToString(), idxODLStart, DateTime.Now);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData);
}
@@ -521,6 +558,18 @@ namespace MP_TAB3.Components
await RefreshData();
await CheckAttr();
await advStep(currStep++);
await FlushMpIoOdlCache();
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
// chiudo update...
isProcessing = false;
await InvokeAsync(StateHasChanged);
@@ -540,12 +589,15 @@ namespace MP_TAB3.Components
/***************************************************
* comprende gestione machineSlave x fix ODL master --> slave
*
***************************************************/
// preparo gestione progress display
MaxVal = 11;
MaxVal = 10;
int currStep = 0;
// elimino dati status...
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
SDService.MachProdStRem(IdxMaccParent);
if (isMulti)
{
@@ -559,7 +611,6 @@ namespace MP_TAB3.Components
{ }
}
await advStep(currStep);
isProcessing = true;
DateTime adesso = DateTime.Now;
await advStep(currStep++);
// proseguo
@@ -623,49 +674,13 @@ namespace MP_TAB3.Components
string evText = "Registrato inizio attrezzaggio per ODL {0}";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODL_curr));
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr);
DateTime dtEvAttr = DateTime.Now;
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr, dtEvAttr);
await advStep(currStep++);
// indico INIZIO SETUP su REDIS come EXE della macchina...
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}";
// aggiungo articolo, commessa, richiesta pezzi...
try
{
var datiODL = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
string setArtVal = $"{datiODL.CodArticolo}";
string setPzCommVal = $"{datiODL.NumPezzi}";
string setCommVal = $"ODL{datiODL.IdxOdl:00000000}";
// FIXME TODO: scrivere come sotto? testare valvital x linea LASCO
TabDServ.addTask4Machine(IdxMaccSel, taskType.startSetup, outData);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setArt, setArtVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setComm, setCommVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setPzComm, setPzCommVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "setArt", setArtVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate");
await advStep(currStep++);
// li aggiungo ANCHE sui PLC slave se ci sono...
if (isMaster)
{
// calcolo gli slave...
var slaveList = SMServ.ListM2S
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
.ToList();
foreach (var machine in slaveList)
{
outData = $"TS:{ts}|MATR:{MatrOpr}|Master Machine: {IdxMaccSel}";
// invio chiusura attrezzaggio
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.startSetup, outData);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setArt", setArtVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setComm", setCommVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setPzComm", setPzCommVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate");
}
}
await DoSendTaskOdl(idxODL_curr);
await advStep(currStep++);
}
catch (Exception exc)
@@ -693,10 +708,12 @@ namespace MP_TAB3.Components
if (idxOdlAltra > 0)
{
sb.AppendLine("---");
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, dtEvAttr);
//await Task.Delay(50);
evText = $"Registrato inizio attrezzaggio per ODL {idxOdlAltra} (setup seconda tavola)";
sb.AppendLine(evText);
await processaEvento(idxMaccAltraTav, idxEvento, evText, idxOdlAltra);
// attrezzo con ritardo
await processaEvento(idxMaccAltraTav, idxEvento, evText, idxOdlAltra, dtEvAttr.AddMilliseconds(50));
}
lblOut = sb.ToString().Replace("---", "<br/>");
}
@@ -728,11 +745,23 @@ namespace MP_TAB3.Components
await TabDServ.FlushOdlCache();
IdxPOdlSel = 0;
RecMSE = null;
await FlushMpIoOdlCache();
await InvokeAsync(StateHasChanged);
await RefreshData();
await CheckAttr();
inAttr = true;
tcRichAttr = tmpTCR;
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
isProcessing = false;
await InvokeAsync(StateHasChanged);
}
@@ -763,7 +792,7 @@ namespace MP_TAB3.Components
protected override async Task OnParametersSetAsync()
{
if (!setupActive)
if (!setupActive && !isProcessing)
{
if (RecMSE != null && !RecMSE.MostlyEquals(lastRecMSE))
{
@@ -782,7 +811,7 @@ namespace MP_TAB3.Components
}
IdxMaccParent = getIdxMaccParent();
checkAll();
// verifica stato inAttr
// verifica stato InAttr
await CheckAttr();
//salvo lastRec...
lastRecMSE = RecMSE;
@@ -790,26 +819,30 @@ namespace MP_TAB3.Components
}
}
// verifica conferma produzione
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, DateTime.Now);
checkConfProd();
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, DateTime.Now);
await checkConfProd();
}
/// <summary>
/// Chiusura produzione ODL corrente
/// </summary>
/// <returns></returns>
protected async Task ProdEnd()
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi fine produzione?"))
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
// preparo gestione progress display
MaxVal = 7;
isProcessing = true;
int currStep = 0;
await advStep(currStep);
// leggo idxOdl da ultimo odl attivo x macchina
var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false);
SDService.MachProdStRem(IdxMaccSel);
int idxODLCurr = currOdl.IdxOdl;
int idxEvento = 7;
// !!!HARD CODED confermo prod vecchio ODL
@@ -824,11 +857,12 @@ namespace MP_TAB3.Components
try
{
// processo x macchina selezionata
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel);
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel, DateTime.Now);
await Task.Delay(50);
string evText = "Registrata fine produzione per ODL {0}";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODLCurr));
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr);
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr, DateTime.Now);
await advStep(currStep++);
// se è multi processo ANCHE x altra tavola...
if (isMulti)
@@ -836,9 +870,10 @@ namespace MP_TAB3.Components
sb.AppendLine("---");
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
int idxOdlAltra = tabOdlAltra.IdxOdl;
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, DateTime.Now);
await Task.Delay(50);
sb.AppendLine(String.Format(evText, idxOdlAltra));
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
}
await advStep(currStep++);
// se è master --> chiamo update child!
@@ -866,7 +901,7 @@ namespace MP_TAB3.Components
// effettuo split su nuovo ODL
await TabDServ.OdlSplit(idxODLCurr, MatrOpr, IdxMaccSel, currOdl.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxODLCurr}, generato residuo con pari TCiclo: {currOdl.Tcassegnato}", false, 0);
// processo chiusura setup
await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr);
await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr, DateTime.Now);
await advStep(currStep++);
// se è multi processo ANCHE x altra tavola...
@@ -877,7 +912,7 @@ namespace MP_TAB3.Components
// effettuo split su nuovo ODL
await TabDServ.OdlSplit(idxOdlAltra, MatrOpr, idxMaccAltraTav, tabOdlAltra.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxOdlAltra}, generato residuo con pari TCiclo: {tabOdlAltra.Tcassegnato}", false, 0);
// processo chiusura setup
await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra);
await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra, DateTime.Now);
}
await advStep(currStep++);
// se è master --> chiamo update child!
@@ -895,7 +930,22 @@ namespace MP_TAB3.Components
NavMan.NavigateTo($"machine-detail");
}
}
// aggiunto esplicita endProd
TabDServ.addTask4Machine(IdxMaccSel, taskType.endProd, "");
if (isMaster)
{
// calcolo gli slave...
var slaveList = SMServ.ListM2S
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
.ToList();
foreach (var machine in slaveList)
{
// invio task x end produzione...
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.endProd, "");
}
}
await advStep(currStep++);
await FlushMpIoOdlCache();
// faccio refresh e riporto
IdxPOdlSel = 0;
RecMSE = null;
@@ -908,6 +958,17 @@ namespace MP_TAB3.Components
await RefreshData();
await CheckAttr();
await advStep(currStep++);
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
isProcessing = false;
await InvokeAsync(StateHasChanged);
}
@@ -964,6 +1025,9 @@ namespace MP_TAB3.Components
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi invio FIX chiusura attrezzaggio ad impianto?"))
return;
// prima di tutto svuoto dati prod
SDService.MachProdStRem(IdxMaccSel);
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}";
TabDServ.addTask4Machine(IdxMaccSel, taskType.fixStopSetup, outData);
@@ -1041,16 +1105,23 @@ namespace MP_TAB3.Components
}
}
/// <summary>
/// Esegue split ODL corrente
/// </summary>
/// <returns></returns>
protected async Task SplitOdl()
{
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi richiesta riattrezzaggio ODL, con conseguente chiusura ODL corrente + split nuovo ODL con TC {tcRichAttr:N3}?"))
return;
// prima di tutto svuoto dati prod
isProcessing = true;
SDService.MachProdStRem(IdxMaccSel);
// preparo gestione progress display
MaxVal = 9;
MaxVal = 10;
int currStep = 0;
await advStep(currStep);
isProcessing = true;
// se vedesse TCRich a zero lo reimposta a quello assegnato...
if (tcRichAttr == 0)
@@ -1081,7 +1152,7 @@ namespace MP_TAB3.Components
string evText = "Registrato Riattrezzaggio ODL (old :{0})";
StringBuilder sb = new StringBuilder();
sb.AppendLine(String.Format(evText, idxODLSplit));
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLSplit);
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLSplit, DateTime.Now);
await advStep(currStep++);
// update buttons...
checkAll();
@@ -1096,6 +1167,23 @@ namespace MP_TAB3.Components
await advStep(currStep++);
showSplitOdlRiattr = false;
await ReloadXDL(true);
// invio richiesta reset NUOVO ODL...
if (IdxOdl > 0)
{
await DoSendTaskOdl(IdxOdl);
}
await advStep(currStep++);
// notifica...
if (isMulti)
{
await E_MachSel.InvokeAsync(idxMaccAltraTav);
await Task.Delay(delayUpd);
}
else
{
TabDServ.NotifyDataInvalidated(IdxMaccSel);
}
await E_MachSel.InvokeAsync(IdxMaccSel);
// chiudo update...
isProcessing = false;
await InvokeAsync(StateHasChanged);
@@ -1121,13 +1209,15 @@ namespace MP_TAB3.Components
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private bool approvTCEnabled = false;
private bool confRett = true;
private double currVal = 0;
/// <summary>
/// Tempo di delay x simulare cambio idxMaccSub
/// </summary>
private int delayUpd = 1000;
private List<string> emailAdmDest = new List<string>();
private bool enableAnnullaSetup = false;
@@ -1196,17 +1286,6 @@ namespace MP_TAB3.Components
#region Private Properties
private string baseLang
{
get => MsgServ.UserPrefGet("Lang");
}
private bool cancelSetupEnabled
{
//get => inAttr && enableSchedaTecnica && enableAnnullaSetup;
get => inAttr && enableAnnullaSetup;
}
private bool annullaSetupVisible
{
get
@@ -1224,7 +1303,7 @@ namespace MP_TAB3.Components
// var pUpd = Task.Run(async () =>
// {
// // controllo ANCHE che la tav correntemente selezionata NON abbia pezzi da confermare
// datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, adesso);
// datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccMain, adesso);
// answ = datiProdAct.PzConfBuoni == 0 && datiProdAct.Pz2RecScarto == 0;
// });
// pUpd.Wait();
@@ -1233,16 +1312,22 @@ namespace MP_TAB3.Components
}
}
private string cssDetailOdl
private string baseLang
{
get => IdxPOdlSel > 0 ? "bg-info text-light" : "bg-warning";
get => MsgServ.UserPrefGet("Lang");
}
private bool cancelSetupEnabled
{
//get => InAttr && enableSchedaTecnica && enableAnnullaSetup;
get => inAttr && enableAnnullaSetup;
}
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
private MappaStatoExpl? currRecMSE { get; set; } = null;
private MappaStatoExplModel? currRecMSE { get; set; } = null;
/// <summary>
/// Verifica se l'ALTRA macchina NON abbia ODL valido (== 0)
@@ -1286,7 +1371,7 @@ namespace MP_TAB3.Components
private bool isLoading { get; set; } = false;
private MappaStatoExpl? lastRecMSE { get; set; } = null;
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
private string lblWarnBody
{
@@ -1322,6 +1407,19 @@ namespace MP_TAB3.Components
}
}
private int numRil2Conf
{
get
{
int answ = -1;
if (datiProdAct != null)
{
answ = datiProdAct.Pz2RecRilav;
}
return answ;
}
}
private int numSca2Conf
{
get
@@ -1372,8 +1470,8 @@ namespace MP_TAB3.Components
catch
{ }
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE ALTRA
// TAVOLA ha ODL...
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE
// ALTRA TAVOLA ha ODL...
if (dtChiusura.AddMinutes(gPeriodReopenOdlTav) > adesso)
{
answ = showReopenOdlTav;
@@ -1416,11 +1514,6 @@ namespace MP_TAB3.Components
private decimal tcRichAttr { get; set; } = 0;
private string titleOdlDetail
{
get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : inAttr ? "Parametri PODL in Attrezzaggio" : "Parametri PODL Corrente";
}
private string txtBtnOdlDetail
{
get => showOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
@@ -1431,11 +1524,6 @@ namespace MP_TAB3.Components
get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL");
}
private string txtShowXDL
{
get => showPOdlData ? "PODL" : "ODL";
}
#endregion Private Properties
#region Private Methods
@@ -1455,13 +1543,20 @@ namespace MP_TAB3.Components
}
}
private void checkConfProd()
private async Task checkConfProd()
{
// calcolo conferma prod...
needConfProd = RecMSE != null && datiProdAct != null;
if (datiProdAct != null)
{
needConfProd = (datiProdAct.Pz2RecTot > 0 || datiProdAct.Pz2RecScarto != 0) && !isSlave;
needConfProd = (datiProdAct.Pz2RecTot > 0 || datiProdAct.Pz2RecScarto > 0 || datiProdAct.Pz2RecRilav > 0) && !isSlave;
// se è multi controllo anche altra tavola...
if (isMulti && !needConfProd)
{
// verifica conferma produzione
var datiProdAltra = await TabDServ.StatoProdMacchinaAsync(idxMaccAltraTav, DateTime.Now);
needConfProd = (datiProdAltra.Pz2RecTot > 0 || datiProdAltra.Pz2RecScarto > 0 || datiProdAltra.Pz2RecRilav > 0) && !isSlave;
}
if (needConfProd)
{
StateHasChanged();
@@ -1496,15 +1591,10 @@ namespace MP_TAB3.Components
else // se NON sono in setup verifico se ho pz da confermare
{
// recupero pz da confermare
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, adesso);
#if false
var rawData = await TabDServ.PezziProdMacchina(IdxMaccSel);
prodMacchina = rawData.FirstOrDefault() ?? new PzProdModel();
#endif
checkConfProd();
#if false
if (prodMacchina.pezziNonConfermati > 0)
#endif
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, adesso);
await checkConfProd();
if (datiProdAct.Pz2RecTot > 0)
{
// confermo produzione ZERO pezzi (in setup)
@@ -1512,16 +1602,10 @@ namespace MP_TAB3.Components
{
// confermo al netto dei pezzi lasciati...
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, datiProdAct.Pz2RecTot, 0, 0, adesso, MatrOpr);
#if false
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, 0, adesso, MatrOpr);
#endif
}
else
{
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, datiProdAct.Pz2RecTot, 0, adesso, MatrOpr);
#if false
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, adesso, MatrOpr);
#endif
}
}
}
@@ -1564,6 +1648,57 @@ namespace MP_TAB3.Components
}
}
/// <summary>
/// Invio set informazioni x segnalare setupODL
/// </summary>
/// <param name="idxODL_curr"></param>
/// <returns></returns>
private async Task DoSendTaskOdl(int idxODL_curr)
{
// indico INIZIO SETUP su REDIS come EXE della macchina...
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}";
var datiODL = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
string setArtVal = $"{datiODL.CodArticolo}";
string setPzCommVal = $"{datiODL.NumPezzi}";
string setCommVal = $"ODL{datiODL.IdxOdl:00000000}";
// FIXME TODO: scrivere come sotto? testare valvital x linea LASCO
TabDServ.addTask4Machine(IdxMaccSel, taskType.startSetup, outData);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setArt, setArtVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setComm, setCommVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.setPzComm, setPzCommVal);
TabDServ.addTask4Machine(IdxMaccSel, taskType.forceResetPzCount, "0");
TabDServ.MachineParamUpdate(IdxMaccSel, "setArt", setArtVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal);
TabDServ.MachineParamUpdate(IdxMaccSel, "forceResetPzCount", "0");
TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate");
//await advStep(currStep++);
// li aggiungo ANCHE sui PLC slave se ci sono...
if (isMaster)
{
// calcolo gli slave...
var slaveList = SMServ.ListM2S
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
.ToList();
foreach (var machine in slaveList)
{
outData = $"TS:{ts}|MATR:{MatrOpr}|Master Machine:{IdxMaccSel}";
// invio chiusura attrezzaggio
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.startSetup, outData);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal);
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.forceResetPzCount, "0");
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setArt", setArtVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setComm", setCommVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setPzComm", setPzCommVal);
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "forceResetPzCount", "0");
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate");
}
}
}
private void fixTcNotePzPallet(bool reloadFromOdl)
{
if (tcRichAttr == 0 || string.IsNullOrEmpty(noteAttr) || PzPallet == 0)
@@ -1574,6 +1709,19 @@ namespace MP_TAB3.Components
}
}
/// <summary>
/// Flush cache relativa a MP-IO x dati ODL
/// </summary>
/// <returns></returns>
private async Task FlushMpIoOdlCache()
{
// svuoto dalla cache REDIS del server IO...
await TabDServ.ResetIoCache("CurrODL");
await TabDServ.ResetIoCache("CurrOdlRow");
await TabDServ.ResetIoCache("CurrStatoMacc");
await TabDServ.ResetIoCache("DtMac");
}
/// <summary>
/// processa evento richiesto
/// </summary>
@@ -1581,11 +1729,10 @@ namespace MP_TAB3.Components
/// <param name="idxEvento"></param>
/// <param name="userMsg"></param>
/// <param name="idxODL"></param>
private async Task processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL)
private async Task processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL, DateTime adesso)
{
inputComandoMapo inCmd;
inputComandoMapo inCmd2;
DateTime adesso = DateTime.Now;
var rigaStato = TabDServ.StatoMacchina(idxMaccCurr);
// processo evento...
EventListModel newRec = new EventListModel()
@@ -1638,9 +1785,9 @@ namespace MP_TAB3.Components
}
if (!string.IsNullOrEmpty(IdxMaccSel))
{
//2024.04.11 passo macchina selezionata SE multi... era "IdxMaccParent"
// 2024.04.11 passo macchina selezionata SE multi... era "IdxMaccParent"
ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccSel, ShowAll, numDayOdl);
//ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccParent, ShowAll, numDayOdl);
// ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccParent, ShowAll, numDayOdl);
if (string.IsNullOrEmpty(SearchPodl))
{
ListODL = ListODLAll;
@@ -1655,8 +1802,8 @@ namespace MP_TAB3.Components
if (!isMulti || (isMulti && IdxMaccSel.IndexOf("#") > 0))
{
var rawData = await TabDServ.PezziProdMacchina(IdxMaccSel);
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, DateTime.Now);
checkConfProd();
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, DateTime.Now);
await checkConfProd();
Log.Trace("OdlMan.ReloadData | check checkConfProd done");
}
}
+30 -14
View File
@@ -44,7 +44,7 @@
<td>
<div class="row">
<div class="col text-start">
<div class="fw-bold text-uppercase">
<div class="text-uppercase fw-bold">
@item.description
</div>
<div class="smaller lh-sm">
@@ -66,17 +66,33 @@
</div>
}
<div class="col-12">
<div class="fw-bold">
@item.value &nbsp;
<div class="">
<span class="fw-bold">@item.value</span>
@if (!string.IsNullOrEmpty(item.UM))
{
<span class="small">&nbsp;(@item.UM)</span>
}
</div>
</div>
</div>
<div class="row" runat="server" id="divRequest" visible='<%# !string.IsNullOrEmpty(Eval("reqValue").ToString()) %>'>
<div class="row">
<div class="col-12">
<div class="fw-bold text-primary small text-nowrap">
<i class="fa fa-hand-o-right" aria-hidden="true"></i>
@item.reqValue
</div>
@if (!string.IsNullOrEmpty(item.reqValue))
{
<div class="fw-bold text-primary small text-nowrap">
<i class="fa-solid fa-angles-right"></i>
@item.reqValue
</div>
}
else
{
if (!string.IsNullOrEmpty(item.value))
{
<div class="fw-bold text-success small text-nowrap">
<i class="fa-solid fa-circle-check small"></i>
</div>
}
}
</div>
</div>
</td>
@@ -114,12 +130,12 @@
{
@if (isSelected(item.uid))
{
@* <div class="col-12">
<div class="input-group">
<button class="btn btn-success" @onclick="() => DoSave()"><i class="fa-solid fa-check"></i></button>
<button class="btn btn-danger" @onclick="() => ResetReq()"><i class="fa-solid fa-ban"></i></button>
</div>
</div> *@
@* <div class="col-12">
<div class="input-group">
<button class="btn btn-success" @onclick="() => DoSave()"><i class="fa-solid fa-check"></i></button>
<button class="btn btn-danger" @onclick="() => ResetReq()"><i class="fa-solid fa-ban"></i></button>
</div>
</div> *@
}
else
{
+5 -5
View File
@@ -1,17 +1,17 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DTO;
using MP.Core.DTO;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
namespace MP_TAB3.Components
{
public partial class ParamsMan : IDisposable
public partial class ParamsMan : ComponentBase, IDisposable
{
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -159,7 +159,7 @@ namespace MP_TAB3.Components
private ObjItemDTO? currItem { get; set; } = null;
private string IdxMaccSel { get; set; } = "";
private MappaStatoExpl? lastRecMSE { get; set; } = null;
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
#endregion Private Properties
@@ -0,0 +1,35 @@
<div class="card shadow bg-dark p-0 m-0">
<div class="card-body rounded rounded-3 py-2 px-3">
<div class="row">
<div class="col-12 placeholder-glow text-center mb-1">
<span class="placeholder col-3 fs-1 bg-light"></span>
</div>
<div class="col-4 placeholder-glow my-1">
<span class="placeholder text-light col-12"></span>
<span class="placeholder text-warning placeholder-sm col-9"></span>
<span class="placeholder text-warning placeholder-sm col-2"></span>
<span class="placeholder text-success placeholder-sm col-9"></span>
<span class="placeholder text-success placeholder-sm col-2"></span>
<span class="placeholder text-primary placeholder-sm col-9"></span>
<span class="placeholder text-primary placeholder-sm col-2"></span>
</div>
<div class="col-4 placeholder-glow text-center py-2 my-1">
<span class="placeholder col-6 bg-secondary rounded-circle h-100"></span>
</div>
<div class="col-4 placeholder-glow my-1">
<span class="placeholder col-12"></span>
<span class="placeholder text-light col-9"></span>
<span class="placeholder text-light col-2"></span>
<span class="placeholder text-light col-9"></span>
<span class="placeholder text-light col-2"></span>
<span class="placeholder text-light col-9"></span>
<span class="placeholder text-light col-2"></span>
</div>
<div class="col-12 placeholder-glow text-center my-1">
<span class="placeholder placeholder-lg fs-1 col-2 bg-warning"></span>
<span class="placeholder placeholder-lg fs-1 col-7 bg-primary"></span>
<span class="placeholder placeholder-lg fs-1 col-2 bg-info"></span>
</div>
</div>
</div>
</div>
@@ -0,0 +1,4 @@
.pholderHeight {
height: 5rem;
object-fit: cover;
}
@@ -0,0 +1,6 @@
.pholderHeight {
height: 5rem;
object-fit: cover;
}
+1
View File
@@ -0,0 +1 @@
.pholderHeight{height:5rem;object-fit:cover;}
@@ -0,0 +1,31 @@
<div class="cardObj card shadow bg-dark border border-3 border-secondary p-0 rounded rounded-4">
<div class="card-body p-0">
<div class="row">
<div class="col-12 placeholder-glow text-center my-0 lh-lg">
<span class="placeholder col-12 fs-1 bg-secondary"></span>
</div>
<div class="col-12 placeholder-glow text-center my-0">
<span class="placeholder col-12 fs-3 bg-light pholderHeight"></span>
</div>
<div class="col-12 placeholder-glow text-center">
<span class="placeholder col-12 fs-2 bg-success"></span>
</div>
<div class="col-12 placeholder-glow text-center my-0">
<span class="placeholder placeholder-lg col-4 bg-success"></span>
<span class="placeholder placeholder-lg col-3 bg-danger"></span>
<span class="placeholder placeholder-lg col-4 bg-warning"></span>
</div>
<div class="col-4 p-2 placeholder-glow text-center mb-1">
<span class="placeholder col-12 bg-success fs-1 h-100 rounded-circle my-1 mx-2"></span>
</div>
<div class="col-8 placeholder-glow mb-1">
<span class="placeholder small text-light col-9"></span>
<span class="placeholder small text-light col-2"></span>
<span class="placeholder small text-light col-9"></span>
<span class="placeholder small text-light col-2"></span>
<span class="placeholder small text-light col-9"></span>
<span class="placeholder small text-light col-2"></span>
</div>
</div>
</div>
</div>
@@ -0,0 +1,29 @@
.pholderHeight {
height: 5.1rem;
object-fit: cover;
}
@media (min-width: 430px) {
.pholderHeight {
height: 6rem;
}
}
@media (min-width: 600px) {
.pholderHeight {
height: 5.2rem;
}
}
@media (min-width: 768px) {
.pholderHeight {
height: 7.8rem;
}
}
@media (min-width: 800px) {
.pholderHeight {
height: 8.5rem;
}
}
@media (min-width: 1025px) {
.pholderHeight {
height: 7.3rem;
}
}
@@ -0,0 +1,35 @@
.pholderHeight {
height: 5.1rem;
object-fit: cover;
}
@media (min-width: 430px) {
.pholderHeight {
height: 6.0rem;
}
}
@media (min-width: 600px) {
.pholderHeight {
height: 5.2rem;
}
}
@media (min-width: 768px) {
.pholderHeight {
height: 7.8rem;
}
}
@media (min-width: 800px) {
.pholderHeight {
height: 8.5rem;
}
}
@media (min-width: 1025px) {
.pholderHeight {
height: 7.3rem;
}
}
+1
View File
@@ -0,0 +1 @@
.pholderHeight{height:5.1rem;object-fit:cover;}@media(min-width:430px){.pholderHeight{height:6rem;}}@media(min-width:600px){.pholderHeight{height:5.2rem;}}@media(min-width:768px){.pholderHeight{height:7.8rem;}}@media(min-width:800px){.pholderHeight{height:8.5rem;}}@media(min-width:1025px){.pholderHeight{height:7.3rem;}}
+1 -1
View File
@@ -1,5 +1,5 @@
<div class="textCondens mb-1">
<a runat="server" href="@navUrl" target="_blank" class="btn btn-lg btn-primary w-100 py-2 px-4">MAG &nbsp;<i class="fa-solid fa-print"></i></a>
<a runat="server" href="@navUrl" target="_blank" class="btn btn-lg btn-info w-100 py-2 px-4">MAG &nbsp;<i class="fa-solid fa-print"></i></a>
</div>
+3 -3
View File
@@ -1,5 +1,5 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -9,7 +9,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -59,7 +59,7 @@ namespace MP_TAB3.Components
{
await FixQtyUdc();
var currUrl = NavMan.Uri;
string baseUrl = config.GetValue<string>("ServerConf:BaseUrlTab") ?? (config.GetValue<string>("OptConf:BaseUrlTab") ?? "");
string baseUrl = config.GetValue<string>("SpecialConf:AppUrl") ?? (config.GetValue<string>("OptConf:AppUrl") ?? "");
string UrlTabJumpMag = SMServ.GetConf("UrlTabJumpMag");
if (string.IsNullOrEmpty(UrlTabJumpMag))
{
+141
View File
@@ -0,0 +1,141 @@
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
<ShowProcessing Message="Caricamento" IsProcessing="@isProcessing"></ShowProcessing>
<div class="cardObj p-2 mt-2">
<div class="mb-1 fs-6">
<div class="row">
<div class="col-6">
<h2>Tipo Selezione</h2>
</div>
<div class="col-6">
<div class="form-check form-switch fs-3">
<input class="form-check-input" type="checkbox" @bind="@UseOdl">
<label class="form-check-label">@selMessage</label>
</div>
</div>
</div>
@if (useOdl)
{
<MachineSelOdl IdxMacchina="@IdxMaccSel" E_OdlSel="SetOdl" IdxOdlSel="@IdxOdl"></MachineSelOdl>
}
else
{
<EgwCoreLib.Razor.PeriodoSel CurrPeriodo="CurrPeriodo" E_PeriodoSel="SetPeriodo"></EgwCoreLib.Razor.PeriodoSel>
}
</div>
<div class="bg-secondary p-1 mb-1">
<div class="row">
<div class="col-12">
<table class="table table-dark table-sm table-striped">
<thead>
<tr>
<th class="row">
<div class="col-4">
Art/ODL
</div>
<div class="col-4 text-end text-nowrap">
<div class="row">
<div class="col px-0"># Buoni</div>
<div class="col px-0"># Scarto</div>
@if (ShowRilav)
{
<div class="col px-0"># Rilav</div>
}
</div>
</div>
<div class="col-4 text-end">Operatore</div>
</th>
@* <th>Art/ODL</th>
<th class="text-end"># Buoni</th>
<th class="text-end"># Scarto</th>
@if (ShowRilav)
{
<th class="text-end"># Rilav</th>
}
<th class="text-end">Operatore</th> *@
</tr>
</thead>
<tbody>
@foreach (var item in ListPaged)
{
var actOdl = ActiveOdl(item.DataTo);
<tr>
<td class="row">
<div class="col-4 text-nowrap">
<div>Art: <b>@actOdl.CodArticolo</b></div>
<div>ODL: <b>@($"ODL{actOdl.IdxOdl:000000000}")</b></div>
</div>
<div class="col-4 text-end text-nowrap">
<div class="row">
<div class="col fs-4 fw-bold">@item.PezziConf</div>
<div class="col fs-4 fw-bold">@item.PezziScar</div>
@if (ShowRilav)
{
<div class="col fs-4 fw-bold">@item.PezziDaRilav</div>
}
</div>
</div>
<div class="col-4 text-end">
<div>@($"{item.DataOraConf:ddd yyyy-MM-dd HH:mm:ss}")</div>
<div><b>@OperDto(item.MatrApp)</b> <i class="fa fa-user" aria-hidden="true"></i></div>
</div>
@if (ShowExtCode || ShowArtDescr)
{
<div class="col-12 col-sm-6">
@if (ShowExtCode)
{
<div class="px-1">@item.CommessaEsterna</div>
}
</div>
<div class="col-12 col-sm-6 text-end">
@if (ShowArtDescr)
{
<div class="px-0 ps-1 d-flex flex-row-reverse">
<div class="text-truncate small" style="max-width: 15rem;" title="@actOdl.DescArticolo">@actOdl.DescArticolo</div>
</div>
}
</div>
}
</td>
@* <td class="text-nowrap">
<div>Art: <b>@actOdl.CodArticolo</b></div>
<div>ODL: <b>@($"ODL{actOdl.IdxOdl:000000000}")</b></div>
@if (ShowExtCode)
{
<div class="px-1">@item.CommessaEsterna</div>
}
</td>
<td class="fs-4 fw-bold text-end">@item.PezziConf</td>
<td class="fs-4 fw-bold text-end">@item.PezziScar</td>
@if (ShowRilav)
{
<td class="fs-4 fw-bold text-end">@item.PezziDaRilav</td>
}
<td class="text-end">
<div>@($"{item.DataOraConf:ddd yyyy-MM-dd HH:mm:ss}")</div>
<div><b>@OperDto(item.MatrApp)</b> <i class="fa fa-user" aria-hidden="true"></i></div>
@if (ShowArtDescr)
{
<div class="px-0 ps-1 d-flex flex-row-reverse">
<div class="text-truncate small" style="max-width: 12rem;" title="@actOdl.DescArticolo">@actOdl.DescArticolo</div>
</div>
}
</td> *@
</tr>
}
</tbody>
<tfoot>
<tr>
<td colspan="5">
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SetPage" numRecordChanged="SetNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
</div>
+389
View File
@@ -0,0 +1,389 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using static EgwCoreLib.Utils.DtUtils;
namespace MP_TAB3.Components
{
public partial class ProdConfMan : IDisposable
{
#region Public Properties
[Parameter]
public EventCallback<string> E_MachSel { get; set; }
[Parameter]
public EventCallback<bool> E_Updated { get; set; }
[Parameter]
public string IdxMacchSub { get; set; } = "";
[Parameter]
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Public Methods
public void Dispose()
{
ListComplete.Clear();
ListPaged.Clear();
ListaOdl.Clear();
ListaOper.Clear();
DictOpr.Clear();
}
#endregion Public Methods
#region Protected Properties
protected List<ElencoConfermeProdModel> ListComplete { get; set; } = new List<ElencoConfermeProdModel>();
protected List<ElencoConfermeProdModel> ListPaged { get; set; } = new List<ElencoConfermeProdModel>();
[Inject]
protected MessageService MServ { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
[Inject]
protected TabDataService TabDServ { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
InitConfig();
await ReloadBaseList();
if (RecMSE != null)
{
IdxMaccSel = RecMSE.IdxMacchina;
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
if (isMulti)
{
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
}
await setupPeriodo();
await ReloadData();
}
}
protected async Task SetMacc(string selIdxMacc)
{
isProcessing = true;
await Task.Delay(1);
IdxMaccSel = selIdxMacc;
await ReloadData();
await Task.Delay(1);
isProcessing = false;
await E_MachSel.InvokeAsync(selIdxMacc);
}
protected void SetNumRec(int newNum)
{
NumRecPage = newNum;
UpdateTable();
}
protected async Task SetOdl(int selIdxOdl)
{
isProcessing = true;
IdxOdl = selIdxOdl;
// se ho odl --> imposto periodo
if (IdxOdl > 0)
{
var recOdl = GetOdl(IdxOdl);
if (recOdl != null && recOdl.IdxOdl == IdxOdl)
{
DateTime fine = DateTime.Today.AddDays(1);
DateTime inizio = fine.AddMonths(-1);
CurrPeriodo = new Periodo(recOdl.DataInizio ?? inizio.AddDays(-1), recOdl.DataFine ?? fine);
}
}
// altrimenti reset..
else
{
await setupPeriodo();
}
await ReloadData();
isProcessing = false;
//await Task.Delay(1);
}
protected void SetPage(int newNum)
{
PageNum = newNum;
UpdateTable();
}
protected async Task SetPeriodo(Periodo newPeriodo)
{
CurrPeriodo = newPeriodo;
await ReloadData();
}
protected void UpdateTable()
{
// esegue paginazione
if (TotalCount > NumRecPage)
{
ListPaged = ListComplete
.OrderByDescending(x => x.DataTo)
.Skip((PageNum - 1) * NumRecPage)
.Take(NumRecPage)
.ToList();
}
else
{
ListPaged = ListComplete
.OrderByDescending(x => x.DataTo)
.ToList();
}
}
#endregion Protected Methods
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private Dictionary<int, string> DictOpr = new Dictionary<int, string>();
private bool isMulti = false;
private bool isProcessing = false;
private List<ODLExpModel> ListaOdl = new List<ODLExpModel>();
private List<AnagOperatoriModel> ListaOper = new List<AnagOperatoriModel>();
private int NumRecPage = 10;
private int PageNum = 1;
/// <summary>
/// Indica se mostrare descrizione articolo su 3° riga
/// </summary>
private bool ShowArtDescr = false;
/// <summary>
/// Indica se mostrare CodExt (commessa) su 3° riga
/// </summary>
private bool ShowExtCode = false;
/// <summary>
/// Indica se partire da ultimo ODL x definire ultimo periodo...
/// </summary>
private bool ShowLastOdl = false;
/// <summary>
/// Indica se mostrare rilavorati in conferma produzione
/// </summary>
private bool ShowRilav = false;
private int TotalCount = 0;
private bool useOdl = false;
#endregion Private Fields
#region Private Properties
private Periodo CurrPeriodo { get; set; } = new Periodo();
private string IdxMaccAltra { get; set; } = "";
/// <summary>
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
/// </summary>
private string idxMaccAltraTav
{
get
{
string answ = "";
if (RecMSE != null)
{
try
{
// verifico se SIA una tavola (ha char "#")
int iSharp = IdxMaccMain.IndexOf('#');
if (iSharp > 0)
{
// ora verifico SE ALTRA TAVOLA ha ODL...
string nomeTav = IdxMaccMain.Substring(iSharp);
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
// sistemo nome
answ = IdxMaccMain.Replace(nomeTav, altraTav);
}
}
catch
{ }
}
return answ;
}
}
/// <summary>
/// Macchina selezionata MAIN
/// </summary>
private string IdxMaccMain
{
get => RecMSE != null ? RecMSE.IdxMacchina : "";
}
private string IdxMaccSel { get; set; } = "";
private int IdxOdl { get; set; } = 0;
private string selMessage
{
get => useOdl ? "Periodo da ODL" : "Periodo Libero";
}
private bool UseOdl
{
get => useOdl;
set
{
useOdl = value;
if (!value)
{
IdxOdl = 0;
}
}
}
#endregion Private Properties
#region Private Methods
private ODLExpModel ActiveOdl(DateTime dtRif)
{
var recOdl = ListaOdl
.Where(x => x.DataInizio <= dtRif && (x.DataFine >= dtRif || x.DataFine == null))
.OrderByDescending(x => x.DataInizio)
.FirstOrDefault();
return recOdl ?? new ODLExpModel();
}
private ODLExpModel GetOdl(int idxOdl)
{
var recOdl = ListaOdl
.Where(x => x.IdxOdl == idxOdl)
.FirstOrDefault();
return recOdl ?? new ODLExpModel();
}
/// <summary>
/// Init da valori configurazione
/// </summary>
private void InitConfig()
{
TabDServ.ConfigGetVal("TAB_confProdPeriodLastODL", ref ShowLastOdl);
TabDServ.ConfigGetVal("TAB_confProdShowRilav", ref ShowRilav);
TabDServ.ConfigGetVal("TAB_confProdShowArtDescr", ref ShowArtDescr);
TabDServ.ConfigGetVal("TAB_confProdShowExtCode", ref ShowExtCode);
}
private string OperDto(int matr)
{
string answ = $"[{matr}]";
// cerco in dizionario
if (DictOpr.ContainsKey(matr))
{
answ = DictOpr[matr];
}
else
{
// altrimenti cerco da lista e inserisco in dizionario
var recOpr = ListaOper.Where(x => x.MatrOpr == matr).FirstOrDefault();
if (recOpr != null)
{
answ = $"{recOpr.Cognome} {recOpr.Nome}";
}
DictOpr.Add(matr, answ);
}
return answ;
}
/// <summary>
/// Rileggo anagrafiche di base
/// </summary>
/// <returns></returns>
private async Task ReloadBaseList()
{
ListaOper = await TabDServ.ElencoOperatori();
}
/// <summary>
/// Aggiorno valori produzione alla data richiesta...
/// </summary>
/// <param name="newDate"></param>
private async Task ReloadData()
{
isProcessing = true;
await Task.Delay(1);
DateTime dtEnd = DateTime.Today.AddDays(1);
DateTime dtStart = dtEnd.AddMonths(-3);
if (!string.IsNullOrEmpty(IdxMaccSel))
{
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
// se vuoto prendo 1 anno...
int maxTry = 3;
while (ListaOdl.Count < 1 && maxTry > 0)
{
dtStart = dtStart.AddMonths(-3);
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
maxTry--;
}
ListComplete = await TabDServ.ElencoConfProdFiltAsync(IdxMaccSel, CurrPeriodo.Inizio, CurrPeriodo.Fine);
TotalCount = ListComplete.Count;
// esegue paginazione
UpdateTable();
}
isProcessing = false;
}
private async Task setupPeriodo()
{
bool doSet = true;
if (ShowLastOdl)
{
UseOdl = true;
var LastODL = await TabDServ.VSOdlGetLastByMacc(IdxMaccSel, 1);
if (LastODL != null)
{
var recOdl = LastODL
.Where(x => x.value > 0)
.FirstOrDefault();
if (recOdl != null)
{
var idxOdlLast = recOdl.value;
await SetOdl(idxOdlLast);
doSet = false;
}
}
}
// controllo di nuovo se impostare priodo
if (doSet)
{
DateTime fine = DateTime.Today.AddDays(1);
DateTime inizio = fine.AddMonths(-1);
CurrPeriodo = new Periodo(inizio, fine);
}
}
#endregion Private Methods
}
}
+239 -117
View File
@@ -1,21 +1,21 @@
<div class="col-12 mt-1">
<div class="mt-1">
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
</div>
<div class="col-12 mt-3">
<div class="mt-2">
<div class="row">
@if (enableMagPrint)
{
<div class="col-6 pe-1">
<div class="col-6 pe-2">
<PrintMag RecMSE="RecMSE"></PrintMag>
</div>
}
@if (odlOk)
{
<div class="@ConfCssWidth ps-1">
<button class="btn btn-lg @ConfBg py-2 px-2 text-nowrap text-truncate" style="width: 100%" @onclick="()=>ToggleConfProd()">
<i class="fa-solid fa-check pe-1"></i><span>@ConfTitle</span>
<div class="@ConfCssWidth">
<button class="btn btn-lg @ConfBg py-2 px-2 text-nowrap text-truncate" style="width: 100%" @onclick="() => ToggleConfProd()">
<span>@ConfTitle</span><i class="fa-solid @ConfTitleIcon ps-1"></i>
</button>
</div>
}
@@ -26,153 +26,273 @@
</div>
</div>
@if (confProdActive)
@if (showConfirmResult)
{
<div class="cardBg p-2 mt-2">
<div class="d-flex justify-content-between">
<div class="border border-info border-2 rounded-3 my-2 p-2">
<div class="row">
<div class="col-6">
<div class="p-1">
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz Prodotti CONFERMATI</div>
<div class="rounded">
<input class="form-control border-0 fw-bold" style="font-size: 1.5rem; background-color: #fff3cd; color: #000" aria-label="Floating label select example" @bind="numPzProdotti2Rec" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
</div>
</div>
<div class="p-1">
@if (enablePzProdLasciati)
<b>Conferma Produzione</b> effettuata alle @($"{lastConfProd:HH:mm:ss}")
</div>
<div class="col-6">
<div class="d-flex justify-content-between lh-sm text-success">
@if (lastPzBuoni > 0)
{
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz Prodotti LASCIATI</div>
<div class="bg-secondary rounded">
<input class="form-control text-light bg-secondary border-0" style="font-size: 1.5rem;" aria-label="Floating label select example" @bind="numPzLasciati" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
</div>
<span>Pz Buoni</span>
<span class="fw-bold">@lastPzBuoni</span>
}
else
{
<label class="btn btn-dark text-light btn-lg w-100" Visible="false">&nbsp;</label>
<span class="text-secondary">Pz Buoni</span>
<span class="text-secondary">@lastPzBuoni</span>
}
</div>
<div class="d-flex justify-content-between lh-sm text-danger">
@if (lastPzScarto > 0)
{
<span>Pz scarto</span>
<span>@lastPzScarto</span>
}
else
{
<span class="text-secondary">Pz scarto</span>
<span class="text-secondary">@lastPzScarto</span>
}
</div>
<div class="d-flex justify-content-between lh-sm text-info">
@if (lastPzRilav > 0)
{
<span>Cicli Rilav.</span>
<span>@lastPzRilav</span>
}
else
{
<span class="text-secondary">Cicli Rilav.</span>
<span class="text-secondary">@lastPzRilav</span>
}
</div>
</div>
<div class="col-6">
<div style="display: flex; flex-direction: column; justify-content: space-between; height: 100%;">
<div class="p-1" style="font-size: 1.5rem">
<div class="d-flex justify-content-between">
<span class="text-success">Pz Buoni</span>
<span>@lblPz2RecBuoni</span>
</div>
</div>
}
@if (confProdActive)
{
<div class="cardBg bg-dark bg-gradient p-2 mt-2 border border-success border-2">
<div class="d-flex justify-content-between">
@if (isProcessing)
{
<div class="col-12">
<LoadingData Title="Processing Dati Conferma" DisplayMode="LoadingData.SpinMode.BounceLine" DisplaySize="LoadingData.CtrlSize.Large"></LoadingData>
</div>
}
else
{
<div class="col-6">
<div class="p-1">
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz CONFERMATI <small>(prod. tot.)</small></div>
<div class="rounded">
<input class="form-control border-0 fw-bold" style="font-size: 1.5rem; background-color: #fff3cd; color: #000" aria-label="Floating label select example" @bind="numPzProdotti2Rec" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
</div>
<div class="d-flex justify-content-between">
<span class="text-danger">Pz scarto</span>
<span>@lblPz2RecScarto</span>
</div>
</div>
<div class="text-center h-100 d-flex flex-column align-items-center flex-nowrap justify-content-end">
@($"{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}")
</div>
<div class="p-1">
@if (showConfirm && lblPz2RecBuoni >= 0)
@if (enablePzProdLasciati)
{
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
}
else if (showConfirm && lblPz2RecBuoni < 0 && !chkPzBuoniNeg)
{
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
}
else if (showConfirm && lblPz2RecBuoni < 0 && chkPzBuoniNeg)
{
<div class="btn btn-danger btn-lg text-light fw-bold text-center w-100 h-100">Pezzi buoni negativi!</div>
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz LASCIATI <small>(prodotti)</small></div>
<div class="bg-secondary rounded">
<input class="form-control text-light bg-secondary border-0" style="font-size: 1.5rem;" aria-label="Floating label select example" @bind="numPzLasciati" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
</div>
}
else
{
<btn class="btn btn-info btn-lg w-100 h-100" disabled>Completare le modifiche!</btn>
<label class="btn btn-dark text-light btn-lg w-100" Visible="false">&nbsp;</label>
}
</div>
</div>
</div>
<div class="col-6">
<div style="display: flex; flex-direction: column; justify-content: space-between; height: 100%;">
<div class="p-1" style="font-size: 1.4rem">
<div class="d-flex justify-content-between lh-sm text-success">
@if (lblPz2RecBuoni > 0)
{
<span>Pz Buoni</span>
<span class="fw-bold">@lblPz2RecBuoni</span>
}
else
{
<span class="text-secondary">Pz Buoni</span>
<span class="text-secondary">@lblPz2RecBuoni</span>
}
</div>
<div class="d-flex justify-content-between lh-sm text-danger">
@if (lblPz2RecScarto > 0)
{
<span>Pz scarto</span>
<span>@lblPz2RecScarto</span>
}
else
{
<span class="text-secondary">Pz scarto</span>
<span class="text-secondary">@lblPz2RecScarto</span>
}
</div>
<div class="d-flex justify-content-between lh-sm text-info">
@if (lblCicliRilavorati > 0)
{
<span>Cicli Rilav.</span>
<span>@lblCicliRilavorati</span>
}
else
{
<span class="text-secondary">Cicli Rilav.</span>
<span class="text-secondary">@lblCicliRilavorati</span>
}
</div>
</div>
<div class="text-center h-100 d-flex flex-column align-items-center flex-nowrap justify-content-end">
@($"{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}")
</div>
<div class="p-1">
@if (showConfirm && lblPz2RecBuoni >= 0)
{
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
}
else if (showConfirm && lblPz2RecBuoni < 0 && !chkPzBuoniNeg)
{
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
}
else if (showConfirm && lblPz2RecBuoni < 0 && chkPzBuoniNeg)
{
<div class="btn btn-danger btn-lg text-light fw-bold text-center w-100 h-100">Pezzi buoni negativi!</div>
}
else
{
<btn class="btn btn-info btn-lg w-100 h-100" disabled>Completare le modifiche!</btn>
}
</div>
</div>
</div>
}
</div>
</div>
}
<div class="row textCondens mt-2 px-2">
<div class="col-12 py-0 text-start text-uppercase lh-1 fw-bold">
Dati Globali ODL
</div>
<div class="col-6 col-sm-3 p-1">
<div class="text-center h-100 px-2 shadows" style=" background-color: #fff3cd; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small">[A] NUOVI Pz.Prod</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-spinner span"></i>
}
else
{
<span class="fw-bold fs-2">@numPzProdotti2Rec</span>
}
<div class="col-12">
<div class="row textCondens mt-2 px-2">
<div class="col-12 py-0 text-start text-uppercase lh-1 fw-bold">
Dati Globali ODL
</div>
<div class="col-6 col-sm p-1">
<div class="text-center text-light h-100 px-2 border border-light" style=" background-color: #363636; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="small">Cicli Prod <b>(ABCD)</b></span>
</div>
<div class="d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
}
else
{
<span class="fw-bold fs-2">@numPzProdotti</span>
}
</div>
</div>
</div>
</div>
<div class="col-6 col-sm-3 p-1">
<div class="text-center h-100 px-2" style=" background-color: #cff4fc; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small">Pz Prodotti TOT [A+B+C]</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-spinner span"></i>
}
else
{
<span class="fw-bold fs-2">@numPzProdotti</span>
}
<div class="col-6 col-sm p-1">
<div class="text-center h-100 px-2 shadows" style=" background-color: #fff3cd; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small"><b>[A]</b> Da Conf.</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
}
else
{
<span class="fw-bold fs-2">@numPzProdotti2Rec</span>
}
</div>
</div>
</div>
</div>
<div class="col-6 col-sm-3 p-1">
<div class="text-center h-100 px-2" style=" background-color: #f8d7da; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small">[B] Scarti VERS.</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-spinner span"></i>
}
else
{
<span class="fw-bold fs-2">@numPzScaConf</span>
}
<div class="col-6 col-sm p-1">
<div class="text-center h-100 px-2" style=" background-color: #f8abcd; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small"><b>[B]</b> Scarti Vers.</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
}
else
{
<span class="fw-bold fs-2">@numPzScaConf</span>
}
</div>
</div>
</div>
</div>
<div class="col-6 col-sm-3 p-1">
<div class="text-center h-100 px-2" style=" background-color: #d1e7dd; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small">[C] Pz Buoni VERS.</span>
<div class="col-6 col-sm p-1">
<div class="text-center h-100 px-2" style=" background-color: #cff4fc; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small"><b>[C]</b> Rilav Vers.</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
}
else
{
<span class="fw-bold fs-2">@numPzRilavConf</span>
}
</div>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-spinner span"></i>
}
else
{
<span class="fw-bold fs-2">@numPzBuoniConf</span>
}
</div>
<div class="col-6 col-sm p-1">
<div class="text-center h-100 px-2" style=" background-color: #d1e7dd; border-radius: .5rem;">
<div class="text-truncate lh-sm pt-1">
<span class="text-dark small"><b>[D]</b> Buoni Vers.</span>
</div>
<div class="text-dark d-flex align-items-center text-center justify-content-center">
@if (isProcessing)
{
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
}
else
{
<span class="fw-bold fs-2">@numPzBuoniConf</span>
}
</div>
</div>
</div>
</div>
</div>
@if (!confProdActive)
{
<div class="row textCondens mt-1 py-1">
<div class="col-6 pe-1">
<a class="btn btn-lg btn-info w-100 py-2 px-1 " style="min-width: 6rem;" href="scrap"><i class="fa fa-bug"></i> Reg. SCARTI</a>
<div class="col-12">
<div class="row textCondens mt-1 py-1">
<div class="col-6 pe-1">
<a class="btn btn-lg btn-primary w-100 py-2 px-1 " style="min-width: 6rem;" href="scrap"><i class="fa fa-bug pe-1"></i>SCARTI</a>
</div>
<div class=" col-6 ps-1">
<a class="btn btn-lg btn-primary w-100 py-2 px-1" style="min-width: 6rem;" href="controls"><i class="fa fa-wrench pe-1"></i>CONTROLLI</a>
</div>
</div>
<div class=" col-6 ps-1">
<a class="btn btn-lg btn-primary w-100 py-2 px-1" style="min-width: 6rem;" href="controls"><i class="fa fa-wrench"></i> Reg. CONTROLLI</a>
</div>
}
else
{
<div class="col-12">
<div class="row textCondens mt-1 py-1">
<div class="col-6 pe-1">
<a class="btn btn-lg btn-secondary w-100 py-2 px-1 disabled" style="min-width: 6rem;"><i class="fa fa-bug pe-1"></i> SCARTI</a>
</div>
<div class=" col-6 ps-1">
<a class="btn btn-lg btn-secondary w-100 py-2 px-1 disabled" style="min-width: 6rem;"><i class="fa fa-wrench pe-1"></i> CONTROLLI</a>
</div>
</div>
</div>
}
@@ -184,7 +304,9 @@
</div>
</div>
}
<ShowProcessing IsProcessing="@isProcessing"></ShowProcessing>
@if (!confProdActive)
{
<div style="font-size: 1.1rem;">
+142 -45
View File
@@ -1,12 +1,11 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using NLog.Fluent;
namespace MP_TAB3.Components
{
public partial class ProdConfirm
public partial class ProdConfirm : IDisposable
{
#region Public Properties
@@ -29,10 +28,10 @@ namespace MP_TAB3.Components
/// Post update restituisco nuova lista dati
/// </summary>
[Parameter]
public EventCallback<List<MappaStatoExpl>> E_Updated { get; set; }
public EventCallback<List<MappaStatoExplModel>> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE
public MappaStatoExplModel? RecMSE
{
get => currRecMSE;
set
@@ -47,11 +46,22 @@ namespace MP_TAB3.Components
#endregion Public Properties
#region Public Methods
public void Dispose()
{
datiProdAct = null;
confTimer.Elapsed -= ConfTimer_Elapsed;
confTimer.Close();
}
#endregion Public Methods
#region Protected Properties
protected string ConfBg
{
get => confProdActive ? "bg-warning text-dark" : "bg-success text-light";
get => confProdActive ? "bg-dark text-success border border-success" : "bg-success text-light";
}
protected string ConfCssWidth
@@ -64,13 +74,17 @@ namespace MP_TAB3.Components
get => confProdActive ? "Nascondi conferma" : "Mostra conferma";
}
protected string ConfTitleIcon
{
get => confProdActive ? "fa-chevron-up" : "fa-chevron-down";
}
/// <summary>
/// Dati produzione rilevati
/// </summary>
protected StatoProdModel? datiProdAct { get; set; } = null;
protected DateTime dtFine { get; set; } = DateTime.Today.AddMonths(-1);
protected DateTime dtInizio { get; set; } = DateTime.Today.AddMonths(-2);
/// <summary>
@@ -101,6 +115,11 @@ namespace MP_TAB3.Components
}
}
protected int lblCicliRilavorati
{
get => numPzRilav2Rec;
}
protected int lblPz2RecBuoni
{
get => numPzConfermati - numPzLasciati;
@@ -108,14 +127,13 @@ namespace MP_TAB3.Components
protected int lblPz2RecScarto
{
get => numPzScarto2Rec;
get => numPzScarto2Rec - numPzRilav2Rec;
}
[Inject]
protected MessageService MsgServ { get; set; } = null!;
protected int numPz2Rec { get; set; } = 0;
protected int numPzBuoniConf { get; set; } = 0;
/// <summary>
@@ -142,11 +160,10 @@ namespace MP_TAB3.Components
}
protected int numPzProdotti { get; set; } = 0;
protected int numPzProdotti2Rec { get; set; } = 0;
protected int numPzRilav2Rec { get; set; } = 0;
protected int numPzRilavConf { get; set; } = 0;
protected int numPzScaConf { get; set; } = 0;
protected int numPzScarto2Rec { get; set; } = 0;
/// <summary>
@@ -156,29 +173,33 @@ namespace MP_TAB3.Components
{
get
{
bool answ = (RecMSE != null && RecMSE.IdxOdl > 0);
if (isMulti && (!answ && RecMSE != null && IdxMaccSel != RecMSE?.IdxMacchina))
bool answ = false;
if (RecMSE != null)
{
int idxOdlSel = 0;
try
answ = (RecMSE.IdxOdl > 0);
if (isMulti && (RecMSE != null && IdxMaccSel != RecMSE?.IdxMacchina))
{
var pUpd = Task.Run(async () =>
int idxOdlSel = 0;
try
{
var tabOdlSel = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
idxOdlSel = tabOdlSel.IdxOdl;
});
pUpd.Wait();
answ = idxOdlSel > 0;
var pUpd = Task.Run(async () =>
{
var tabOdlSel = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
idxOdlSel = tabOdlSel.IdxOdl;
});
pUpd.Wait();
answ = idxOdlSel > 0;
}
catch (Exception exc)
{
Log.Error($"Errore Durante recupero idxOdlSel {Environment.NewLine}{exc}");
}
}
catch (Exception exc)
else
{
Log.Error($"Errore Durante recupero idxOdlSel {Environment.NewLine}{exc}");
answ = (RecMSE != null && RecMSE.IdxOdl > 0);
}
}
else
{
answ = (RecMSE != null && RecMSE.IdxOdl > 0);
}
return answ;
}
}
@@ -204,13 +225,15 @@ namespace MP_TAB3.Components
{
isProcessing = true;
await Task.Delay(1);
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, dtReqUpdate);
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, dtReqUpdate);
// aggiorno visualizzazione...
numPzProdotti = datiProdAct.PzTotODL;
numPz2Rec = datiProdAct.Pz2RecTot;
numPzScaConf = datiProdAct.PzConfScarto;
numPzBuoniConf = datiProdAct.PzConfBuoni;
numPzRilavConf = datiProdAct.PzConfRilav;
numPzScaConf = datiProdAct.PzConfScarto - datiProdAct.PzConfRilav;
numPzProdotti2Rec = datiProdAct.Pz2RecTot;
numPzRilav2Rec = datiProdAct.Pz2RecRilav;
numPzScarto2Rec = datiProdAct.Pz2RecScarto;
dtInizio = RecMSE?.DataInizioOdl ?? DateTime.Today.AddMonths(-2);
dtFine = dtReqUpdate;
@@ -225,6 +248,11 @@ namespace MP_TAB3.Components
confRett = SMServ.GetConfBool("confRett");
enableMagPrint = SMServ.GetConfBool("enableMagPrint");
modoConfProd = SMServ.GetConfInt("modoConfProd");
tOutConfProd = SMServ.GetConfInt("TAB_TimeOutConfProd");
// petto periodo a 100ms x controllare scadenze
confTimer = new System.Timers.Timer(100);
//confTimer = new System.Timers.Timer(tOutConfProd);
confTimer.Elapsed += ConfTimer_Elapsed;
}
protected override async Task OnParametersSetAsync()
@@ -237,21 +265,24 @@ namespace MP_TAB3.Components
{
numPzLasciati = 0;
}
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
if (!confDone)
{
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
IdxMaccSel = RecMSE.IdxMacchina;
if (isMulti)
{
var idxMSel = MsgServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
// verifico se la macchina sia configurata tra le MSFD...
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
{
IdxMaccSel = idxMSel;
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
}
IdxMaccSel = RecMSE.IdxMacchina;
if (isMulti)
{
var idxMSel = MsgServ.UserPrefGet(IdxMaccSel);
if (!string.IsNullOrEmpty(idxMSel))
{
IdxMaccSel = idxMSel;
}
}
}
//salvo lastRec...
// salvo lastRec...
lastRecMSE = RecMSE;
dtReqUpdate = DateTime.Now.AddMilliseconds(100);
await DoUpdate();
@@ -261,9 +292,12 @@ namespace MP_TAB3.Components
protected async Task SalvaConfPz()
{
isProcessing = true;
await Task.Delay(10);
// effettua conferma con conf da DB del tipo (giorni / turni / periodo
bool fatto = effettuaConfermaProd();
await TabDServ.FlushCache("StatoProd");
await TabDServ.FlushCache("ODL");
await TabDServ.FlushCache("ElConfProd");
// refresh tabella dati tablet...
await TabDServ.RicalcMse(IdxMaccSel, 0);
// rileggo e salvo..
@@ -277,6 +311,11 @@ namespace MP_TAB3.Components
}
// mostro output
lblOut = $"Confermata produzione {numPzConfermati - numPzLasciati} pezzi (+{numPzLasciati} pz lasciati, +{numPzScarto2Rec} pz scarto) |{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}";
// salvo ultimi valori conferma...
lastPzBuoni = numPzConfermati - numPzLasciati;
lastPzRilav = numPzRilav2Rec;
lastPzScarto = numPzScarto2Rec;
lastConfProd = DateTime.Now;
// cambio button conferma...
confProdActive = false;
numPzLasciati = 0;
@@ -284,8 +323,13 @@ namespace MP_TAB3.Components
// azzero cache pezzi conf
SDService.MachNumPzSet(IdxMaccSel, -1);
await DoUpdate();
await Task.Delay(1);
await RefreshData();
// imposto visualizzazione conferma effettuata
showConfirmResult = true;
// imposto timeout display + avvio timer x nascondere...
scadConfPezzi = dtReqUpdate.AddMilliseconds(tOutConfProd);
confTimer.Start();
TabDServ.NotifyDataInvalidated(IdxMaccSel);
isProcessing = false;
}
@@ -326,24 +370,57 @@ namespace MP_TAB3.Components
#region Private Fields
private static Logger Log = LogManager.GetCurrentClassLogger();
private bool chkPzBuoniNeg = false;
private bool confDone = false;
private bool confRett = false;
/// <summary>
/// Timer 3 sec x mostrare conferma
/// </summary>
private System.Timers.Timer confTimer = new System.Timers.Timer(3000);
private bool enableMagPrint = false;
private bool enablePzProdLasciati = false;
private bool isMulti = false;
private bool isSlave = false;
private DateTime lastConfProd = DateTime.Now;
private int lastPzBuoni = 0;
private int lastPzRilav = 0;
private int lastPzScarto = 0;
private string lblOut = "";
private int modoConfProd = 0;
private DateTime scadConfPezzi = DateTime.Today;
private bool showConfirmResult = false;
private int tOutConfProd = 2000;
#endregion Private Fields
#region Private Properties
private bool confProdActive { get; set; } = false;
private MappaStatoExpl? currRecMSE { get; set; } = null;
private MappaStatoExplModel? currRecMSE { get; set; } = null;
private DateTime dtReqUpdate { get; set; } = DateTime.Now;
private string IdxMaccSel { get; set; } = "";
private bool isProcessing { get; set; } = false;
private MappaStatoExpl? lastRecMSE { get; set; } = null;
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
private int MatrOpr
{
@@ -358,6 +435,26 @@ namespace MP_TAB3.Components
#region Private Methods
/// <summary>
/// Timer visualizzazione esito conferma pezzi: deve nascondere...
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ConfTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
DateTime adesso = DateTime.Now;
// controllo se sia ascaduto il periodo di display
if (adesso > scadConfPezzi)
{
confTimer.Stop();
showConfirmResult = false;
// resetto
lastPzBuoni = 0;
lastPzRilav = 0;
lastPzScarto = 0;
}
}
/// <summary>
/// Registra conferma produzione in modalita nuova (con rettifica pezzi lasciati) o legacy
/// (con anticipo periodo)
@@ -379,7 +476,7 @@ namespace MP_TAB3.Components
private async Task RefreshData()
{
List<MappaStatoExpl> ListMSE = await SDService.MseGetAll(true);
List<MappaStatoExplModel> ListMSE = await SDService.MseGetAll(true);
await MsgServ.SaveMse(ListMSE);
await E_Updated.InvokeAsync(ListMSE);
}
@@ -0,0 +1,140 @@
<dialog class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog">
<div class="modal-dialog shadow shadow-lg">
<div class="modal-content p-2">
<div class="modal-title d-flex justify-content-between">
<div class="px-0">
<h3>Dettaglio KIT</h3>
</div>
<div class="px-0">
<button class="btn btn-outline-dark" @onclick="() => ReqClose()"><i class="fa-solid fa-xmark"></i></button>
</div>
</div>
<div class="modal-body px-1">
@if (ListTK == null && ListPODL == null)
{
<LoadingData></LoadingData>
}
else if (numIstKit == 0)
{
<div class="alert alert-warning text-center display-4">
Nessun record trovato
</div>
}
else
{
if (ListPODL != null)
{
<div class="text-center">
<h4>PODL KIT &rarr; Ordini</h4>
</div>
<table class="table table-sm table-striped">
<thead>
<tr>
<th><i class="fa-solid fa-key"></i> PODL</th>
<th><i class="fa-solid fa-object-group"></i> Cod Ord</th>
<th><i class="fa-solid fa-sitemap"></i> Cod Art</th>
<th class="text-end"><i class="fa-solid fa-hashtag"></i> Qty</th>
</tr>
</thead>
<tbody>
@foreach (var record in ListPODL)
{
<tr>
<td>
<div>@record.IdxPromessa</div>
</td>
<td>
<div>@record.KeyRichiesta</div>
</td>
<td>
<div>@record.CodArticolo</div>
</td>
<td class="text-end">
<div>@record.NumPezzi</div>
</td>
</tr>
}
</tbody>
</table>
}
}
</div>
<div class="modal-footer d-flex justify-content-between px-0">
@if (numTempKit == 0)
{
<div class="alert alert-warning text-center display-4">
Nessun record trovato
</div>
}
else
{
<div class="text-center">
<b>Template KIT</b>
</div>
<table class="table table-success table-sm opacity-75 table-striped small">
<thead>
<tr>
<th><i class="fa-solid fa-sitemap"></i> Cod Kit (Parent)</th>
<th><i class="fa-solid fa-file"></i> Articolo (Child)</th>
<th class="text-end"><i class="fa-solid fa-hashtag"></i> Art/Kit Qty</th>
</tr>
</thead>
<tbody>
@if (ListTK == null)
{
<tr>
<td colspan="3">
<div class="alert alert-info fs-6">Nessun dato disponibile</div>
</td>
</tr>
}
else
{
foreach (var record in ListTK)
{
<tr>
<td>
@record.CodArtParent
</td>
<td>
@record.CodArtChild
</td>
<td class="text-end">
<div>@record.Qty</div>
</td>
</tr>
}
}
</tbody>
</table>
}
</div>
</div>
</div>
</dialog>
@code {
[Parameter]
public EventCallback<bool> EC_Close { get; set; }
[Parameter]
public List<PODLExpModel>? ListPODL { get; set; } = null;
[Parameter]
public List<TemplateKitModel>? ListTK { get; set; } = null;
protected override void OnParametersSet()
{
numTempKit = ListTK != null ? ListTK.Count() : 0;
numIstKit = ListPODL != null ? ListPODL.Count() : 0;
}
protected async void ReqClose()
{
await EC_Close.InvokeAsync(true);
}
private int numTempKit = 0;
private int numIstKit = 0;
}
+7 -3
View File
@@ -1,16 +1,20 @@
<div class="row mt-2">
<div class="col-6">
<div class="d-flex justify-content-between mt-2">
<div class="px-2 flex-grow-1">
<h4>Piano Produzione - PODL</h4>
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
</div>
<div class="col-6">
<div class="px-2">
<h4>&nbsp;</h4>
<div class="form-check form-switch fs-6">
<input class="form-check-input" type="checkbox" @bind="@OnlyDirect">
<label class="form-check-label">Solo Assegnazione Diretta</label>
</div>
</div>
</div>
<div>
<ShowProcessing Message="Caricamento" IsProcessing="@isProcessing"></ShowProcessing>
</div>
@if (isProcessing)
{
<EgwCoreLib.Razor.LoadingData></EgwCoreLib.Razor.LoadingData>
+11 -4
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -9,7 +9,13 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
[Parameter]
public string IdxMacchSub { get; set; } = "";
[Parameter]
public EventCallback<string> E_MachSel { get; set; }
#endregion Public Properties
@@ -76,11 +82,12 @@ namespace MP_TAB3.Components
protected async Task SetMacc(string selIdxMacc)
{
isProcessing = true;
await Task.Delay(10);
await Task.Delay(1);
IdxMaccSel = selIdxMacc;
await Task.Delay(1);
await doUpdate();
isProcessing = false;
await Task.Delay(10);
await E_MachSel.InvokeAsync(selIdxMacc);
}
protected string TCMinSec(object _TC)
+2 -2
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
namespace MP_TAB3.Components
{
@@ -8,7 +8,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
+4 -4
View File
@@ -1,10 +1,10 @@
<div class="fs-6">
<div class="row">
<div class="col-12">
<button class="btn btn-lg bg-info w-100" @onclick="ToggleCtrl">
<i class="fa-solid fa-bug"></i>
&nbsp;
<span class="fw-bold" style="font-size: 1rem;">@Title</span>
<button class="btn btn-lg @btnCss w-100" @onclick="ToggleCtrl">
<i class="fa-solid fa-bug pe-1"></i>
<span class="fs-4 fw-bold">@Title</span>
<i class="fa @faCss ps-1"></i>
</button>
</div>
</div>
+19 -3
View File
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -13,12 +13,17 @@ namespace MP_TAB3.Components
public EventCallback<bool> E_Updated { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
#region Protected Properties
protected string btnCss
{
get => ShowDetail ? "bt-dark border-primary border-2" : "btn-primary";
}
protected DateTime DateSel
{
get => dateSel.Round(TimeSpan.FromSeconds(1));
@@ -32,6 +37,12 @@ namespace MP_TAB3.Components
}
protected string errMsg { get; set; } = "";
protected string faCss
{
get => ShowDetail ? "fa-chevron-up" : "fa-chevron-down";
}
protected List<vSelCauScartoModel> listCauScarto { get; set; } = new List<vSelCauScartoModel>();
[Inject]
@@ -52,6 +63,9 @@ namespace MP_TAB3.Components
}
}
[Inject]
protected StatusData SDService { get; set; } = null!;
[Inject]
protected SharedMemService SMServ { get; set; } = null!;
@@ -105,6 +119,8 @@ namespace MP_TAB3.Components
{
// reset
DoReset();
// prima di tutto svuoto dati prod
SDService.MachProdStRem(IdxMaccSel);
errMsg = "";
await E_Updated.InvokeAsync(true);
await ReloadData();
@@ -174,7 +190,7 @@ namespace MP_TAB3.Components
private int numPz { get; set; } = 1;
private bool ShowDetail { get; set; } = true;
private bool ShowDetail { get; set; } = false;
private string userComment { get; set; } = "";
+1 -1
View File
@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
+9 -5
View File
@@ -84,13 +84,13 @@
<sub class="pe-1">&times;</sub>
@if (item.KitSplit)
{
<button class="btn btn-info" @onclick="()=>ShowKitDetail(item)" title="KIT esploso" style="max-width: 2.5rem;display: flex;justify-content: center;min-height: 2.375rem;align-items: center;">
<button class="btn btn-info" @onclick="() => ShowKitDetail(item)" title="KIT esploso" style="max-width: 2.5rem;display: flex;justify-content: center;min-height: 2.375rem;align-items: center;">
<i class="fa-solid fa-box-open"></i>
</button>
}
else
{
<button class="btn btn-secondary" @onclick="()=>ShowKitDetail(item)" title="KIT non esploso">
<button class="btn btn-secondary" @onclick="() => ShowKitDetail(item)" title="KIT non esploso">
<i class="fa-solid fa-box"></i>
</button>
}
@@ -136,11 +136,15 @@
}
}
</tbody>
<tfoot>
<tr>
<td>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
<div>
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</div>
</div>
+5 -3
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
using NLog;
using static EgwCoreLib.Utils.DtUtils;
@@ -14,7 +14,10 @@ namespace MP_TAB3.Components
public EventCallback<string> E_MachSel { get; set; }
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public string IdxMacchSub { get; set; } = "";
[Parameter]
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -115,7 +118,6 @@ namespace MP_TAB3.Components
IdxMaccSel = selIdxMacc;
await ReloadData();
isProcessing = false;
await Task.Delay(1);
await E_MachSel.InvokeAsync(selIdxMacc);
}
+59 -65
View File
@@ -54,14 +54,6 @@ namespace MP_TAB3.Components
[Parameter]
public timeControlMode modoControllo { get; set; } = timeControlMode.testo;
#if false
/// <summary>
/// modalit controllo tempo
/// </summary>
[Parameter]
public timeMode modoTempo { get; set; } = timeMode.MC;
#endif
/// <summary>
/// Valore tempo (centesimale)
/// </summary>
@@ -88,15 +80,12 @@ namespace MP_TAB3.Components
[Inject]
protected MessageService MsgServ { get; set; } = null!;
/// <summary>
/// tempo selezionato in formato Minuti Secondi
/// </summary>
protected DateTime selTempoMS
protected int selMin
{
get => DateTime.Today.Add(TempoMS);
get => TempoMS.Minutes;
set
{
TempoMS = value.Subtract(value.Date);
TempoMS = new TimeSpan(selOre, value, selSec);
E_TCRich.InvokeAsync(TempoMC);
}
}
@@ -110,15 +99,7 @@ namespace MP_TAB3.Components
E_TCRich.InvokeAsync(TempoMC);
}
}
protected int selMin
{
get => TempoMS.Minutes;
set
{
TempoMS = new TimeSpan(selOre,value, selSec);
E_TCRich.InvokeAsync(TempoMC);
}
}
protected int selSec
{
get => TempoMS.Seconds;
@@ -129,6 +110,19 @@ namespace MP_TAB3.Components
}
}
/// <summary>
/// tempo selezionato in formato Minuti Secondi
/// </summary>
protected DateTime selTempoMS
{
get => DateTime.Today.Add(TempoMS);
set
{
TempoMS = value.Subtract(value.Date);
E_TCRich.InvokeAsync(TempoMC);
}
}
protected bool ShowMS { get; set; } = true;
[Inject]
@@ -162,48 +156,6 @@ namespace MP_TAB3.Components
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// conversione da tempo minuti centesimali a minuti/secondi
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected TimeSpan minCent2Sec(decimal valore)
{
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
return answ;
}
/// <summary>
/// conversione da tempo minuti/secondi a minuti centesimali
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected decimal minSec2Cent(TimeSpan valore)
{
decimal answ = 0;
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
return answ;
}
protected override void OnInitialized()
{
//baseLang = SMServ.GetConf("baseLang");
}
protected override void OnParametersSet()
{
showControls();
}
protected string Traduci(string lemma)
{
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
}
#endregion Protected Methods
#region Private Properties
private string _baseLang { get; set; } = "IT";
@@ -278,6 +230,48 @@ namespace MP_TAB3.Components
#endregion Private Properties
#region Protected Methods
/// <summary>
/// conversione da tempo minuti centesimali a minuti/secondi
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected TimeSpan minCent2Sec(decimal valore)
{
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
return answ;
}
/// <summary>
/// conversione da tempo minuti/secondi a minuti centesimali
/// </summary>
/// <param name="valore"></param>
/// <returns></returns>
protected decimal minSec2Cent(TimeSpan valore)
{
decimal answ = 0;
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
return answ;
}
protected override void OnInitialized()
{
//baseLang = SMServ.GetConf("baseLang");
}
protected override void OnParametersSet()
{
showControls();
}
protected string Traduci(string lemma)
{
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
}
#endregion Protected Methods
#region Private Methods
/// <summary>
+37
View File
@@ -0,0 +1,37 @@
<div class="row">
<div class="col-12 col-lg-6 col-xl-4 mb-2">
<div class="row">
<div class="col-8 col-md-9 pe-0">
<div class="form-floating small">
<input type="text" class="form-control" @bind="SearchVal">
<label><i class="fa-solid fa-magnifying-glass"></i> Articolo (3+ char)</label>
</div>
</div>
<div class="col-4 col-md-3 ps-0">
<div class="form-floating small">
<input type="number" class="form-control text-end" @bind="Num2Displ">
<label># Displ</label>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 col-xl-8 mb-2">
<div class="form-floating">
<select class="form-select form-select-sm" disabled="@ListArtDisabled" @bind="@CodArtSel">
<option value="" selected>-- Nessuno --</option>
@if (ListArticoli == null)
{
<option value="" disabled>No record found</option>
}
else
{
@foreach (var item in ListArticoli)
{
<option value="@item.Key">@item.Value</option>
}
}
</select>
<label for="floatingSelect">Selezione Articolo (@DisplayCount / <b>@TotalCount</b>)</label>
</div>
</div>
</div>
+140
View File
@@ -0,0 +1,140 @@
using Microsoft.AspNetCore.Components;
using MP.Data.Services;
using NLog;
namespace MP_TAB3.Components
{
public partial class SelectCodArt
{
#region Public Properties
[Parameter]
public EventCallback<string> E_CodArt { get; set; }
[Parameter]
public int SearchMinChar { get; set; }
#endregion Public Properties
#region Protected Properties
protected string CodArtSel
{
get => codArtSel;
set
{
if (codArtSel != value)
{
codArtSel = value;
E_CodArt.InvokeAsync(CodArtSel).ConfigureAwait(false);
}
}
}
protected int DisplayCount { get; set; } = 0;
protected bool ListArtDisabled { get => string.IsNullOrEmpty(SearchVal) || SearchVal.Length < SearchMinChar; }
protected Dictionary<string, string>? ListArticoli { get; set; } = null;
protected Dictionary<string, string> ListArticoliAll { get; set; } = new Dictionary<string, string>();
[Inject]
protected ListSelectDataSrv MDataService { get; set; } = null!;
protected int Num2Displ
{
get => num2Displ;
set
{
if (num2Displ != value)
{
num2Displ = value;
FiltArticoli();
}
}
}
protected string SearchVal
{
get => searchVal;
set
{
if (searchVal != value)
{
searchVal = value;
var pUpd = Task.Run(async () =>
{
await ReloadArticoli();
});
pUpd.Wait();
}
}
}
protected int TotalCount { get; set; } = 0;
#endregion Protected Properties
#region Protected Methods
protected void FiltArticoli()
{
bool done = false;
if (!ListArtDisabled)
{
if (ListArticoliAll != null)
{
TotalCount = ListArticoliAll.Count;
ListArticoli = ListArticoliAll.Take(Num2Displ).ToDictionary(x => x.Key, x => x.Value);
DisplayCount = ListArticoli.Count;
done = true;
}
}
if (!done)
{
TotalCount = 0;
ListArticoli = new Dictionary<string, string>();
DisplayCount = 0;
}
}
protected async Task GetArticoli()
{
if (!ListArtDisabled)
{
Log.Debug("START GetArticoli");
var rawData = await MDataService.ArticoliGetSearch(10000,"*", "*", searchVal);
// trasformo!
if (rawData != null)
{
ListArticoliAll = rawData.ToDictionary(x => x.CodArticolo, x => $"{x.CodArticolo} | {x.DescArticolo} | {x.Disegno}");
}
Log.Debug("END GetArticoli");
}
}
protected async Task ReloadArticoli()
{
await GetArticoli();
FiltArticoli();
}
#endregion Protected Methods
#region Private Fields
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Private Properties
private string codArtSel { get; set; } = "";
private int num2Displ { get; set; } = 20;
private string searchVal { get; set; } = "";
#endregion Private Properties
}
}
+12 -1
View File
@@ -28,7 +28,15 @@
<div class="list-group">
@foreach (var item in MenuItems)
{
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover" @onclick="() => SetPage(item.NavigateUrl)" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.icona pe-2"></i> @item.Testo</button>
@* if (IsManual && item.ordine > 20) *@
if (IsManual && item.Ordine > 40)
{
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover disabled" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.Icona pe-2"></i> @item.Testo</button>
}
else
{
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover" @onclick="() => SetPage(item.NavigateUrl)" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.Icona pe-2"></i> @item.Testo</button>
}
}
</div>
</div>
@@ -51,6 +59,9 @@
</div>
</div>
</div>
<div class="my-5">
<a href="force-reset" type="button" class="btn btn-danger w-100" aria-label="Reset">Reset Cache</a>
</div>
</div>
</div>
+20 -2
View File
@@ -1,5 +1,5 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -9,7 +9,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public List<LinkMenu> MenuItems { get; set; } = new List<LinkMenu>();
public List<LinkMenuModel> MenuItems { get; set; } = new List<LinkMenuModel>();
#endregion Public Properties
@@ -18,6 +18,9 @@ namespace MP_TAB3.Components
[Inject]
protected MessageService MsgServ { get; set; } = null!;
[Inject]
protected SharedMemService MStor { get; set; } = null!;
[Inject]
protected NavigationManager navManager { get; set; } = null!;
@@ -30,6 +33,19 @@ namespace MP_TAB3.Components
return navManager.Uri.Contains(currUri) ? "bg-dark text-light" : "";
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
idxMaccSel = await MsgServ.IdxMaccGet();
if (!string.IsNullOrEmpty(idxMaccSel) && MStor.DictMacchManual.ContainsKey(idxMaccSel))
{
IsManual = MStor.DictMacchManual[idxMaccSel];
}
else
{
IsManual = false;
}
}
protected override void OnInitialized()
{
var rawVers = typeof(Program).Assembly.GetName().Version;
@@ -51,6 +67,8 @@ namespace MP_TAB3.Components
#region Private Fields
private string idxMaccSel = "";
private bool IsManual = false;
private Version version = null!;
#endregion Private Fields
+1 -1
View File
@@ -137,7 +137,7 @@ namespace MP_TAB3.Components
if (!ListArtDisabled)
{
Log.Debug("START GetArticoli");
var rawData = await MDataService.ArticoliGetSearch(10000, "*", searchVal);
var rawData = await MDataService.ArticoliGetSearch(10000,"*", "*", searchVal);
// trasformo!
if (rawData != null)
{
+3 -3
View File
@@ -1,6 +1,6 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -10,7 +10,7 @@ namespace MP_TAB3.Components
#region Public Properties
[Parameter]
public MappaStatoExpl? RecMSE { get; set; } = null;
public MappaStatoExplModel? RecMSE { get; set; } = null;
#endregion Public Properties
@@ -74,7 +74,7 @@ namespace MP_TAB3.Components
private string IdxMaccSel { get; set; } = "";
private int IdxOdl { get; set; } = 0;
private MappaStatoExpl? lastRecMSE { get; set; } = null;
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
#endregion Private Properties
@@ -15,7 +15,7 @@ using MP_TAB3;
using MP_TAB3.Shared;
using MP_TAB3.Components;
using MP.Data;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data.DTO;
using MP.Data.Services;
using Newtonsoft.Json;
@@ -1,6 +1,6 @@
using global::Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.Objects;
using MP.Core.Objects;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components
@@ -1,7 +1,7 @@
using global::Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using MP.Data.DatabaseModels;
using MP.Data.Objects;
using MP.Core.Objects;
using MP.Data.DbModels;
using MP.Data.Services;
namespace MP_TAB3.Components

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