Compare commits

...

1081 Commits

Author SHA1 Message Date
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
3893 changed files with 367533 additions and 390952 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,
+94
View File
@@ -0,0 +1,94 @@
# CI to Local Workflow Guide
This document describes how the GitLab CI pipeline in this repository translates to local commands that can be run on your machine. It also contains helper scripts and environment variables used by the CI.
## Environment Variables
All variables listed below are interpolated in the CI templates. When running locally you can set them in a PowerShell profile or via `dotnet` arguments.
| Variable | Description | Typical value |
|----------|--------------|---------------|
| `SOL_NAME` | Solution name to restore | **MP-STATS.sln** |
| `PROJ_PATH` | Directory containing the main project | **MP.Stats** |
| `APP_NAME` | Main project file name (without `.csproj`) | **MP.Stats** |
| `NUGET_PATH` | NuGet credential file | **`C:\\Users\\samuele.steamw\AppData\Roaming\NuGet\Credentials.config`** |
| `NEXUS_PATH` | Nexus host URL | **https://nexus.steamware.net** |
| `DEST` | Artifacts output folder | **bin\publish** |
| `VERS_MAIN`, `VERS_MAIN_APP`, `VERSSUB` | Version strings used in packaging | **1.0.0** /
| `NEXUS_PASSWD` | Nexus password (secure via CI secret) | *Secret* |
## Build Pipeline (`buildjob`) Local Equivalent
The CI first restores NuGet packages and then builds the solution for the selected `APP_NAME`.
```powershell
# 1. Restore
#$env:SOL_NAME.sln is resolved by the .nuget-fix script
# In PowerShell: dotnet restore "MP-STATS.sln"
# 2. Build
# $env:APP_NAME/$env:APP_NAME.csproj points to the project file
# In PowerShell: dotnet build "MP.Stats/MP.Stats.csproj"
```
### Helper: `.nuget-fix`
The `.nuget-fix` PowerShell script removes any stale NuGet sources that conflict with the Nexus proxy and readds the latest proxy source with credentials. Ensure this script runs *before* `dotnet restore`.
## Deploy Pipeline (`deployjob`) Local Equivalent
Deployment in CI rebuilds the project, publishes it, hashes the output, and uploads it to Nexus. The same steps can be executed locally.
```powershell
# 1. Rebuild (same as Build)
# dotnet build "MP.Stats/MP.Stats.csproj"
# 2. Publish to a local folder
# The `dotnet publish` command mimics the CI publish step. The `-c Release` ensures a Release build.
# In PowerShell:
# dotnet publish "MP.Stats/MP.Stats.csproj" -c Release -o publish
# 3. Create hashes (MD5 & SHA1)
# The .hashBuild template generates .md5 and .sha1 files alongside the ZIP. A simple replacement can be
# 1. Zip the folder: `Compress-Archive -Path publish -DestinationPath $(APP_NAME).zip`
# 2. Generate hashes:
# (Get-FileHash -Algorithm MD5 "$(APP_NAME).zip").Hash | Out-File "$(APP_NAME).md5"
# (Get-FileHash -Algorithm SHA1 "$(APP_NAME).zip").Hash | Out-File "$(APP_NAME).sha1"
# 4. Upload to Nexus (requires `curl`)
# Example curl command (CI uses `nexus-curl` script):
# $curl -u $(NUGET_USER):$(NEXUS_PASSWD) "$(NEXUS_PATH)/repository/$(APP_NAME)" -T "$(APP_NAME).zip"
```
## Installer & Release
The **installer** template copies the published artifacts to a staging folder and optionally creates installers. The **release** template bumps version numbers, updates the `nuspec`, generates a changelog, and pushes the packages to Nexus.
Generally these steps are CIonly, but you can repeat the same `dotnet pack` / `nuget push` commands locally if needed.
## Common Issues & Fixes
* _NuGet authentication errors_: Run `.nuget-fix` to reset the sources.
* _Missing SDK_: Verify `dotnet --list-sdks` includes at least one SDK.
* _Hashes not matching_: Ensure the ZIP file is identical to the one CI produced (same path, no hidden files).
## Quick Start
```powershell
# Restore
.\.nuget-fix
# Build
dotnet restore "MP-STATS.sln"
dotnet build "MP.Stats/MP.Stats.csproj"
# Publish & run
dotnet publish "MP.Stats/MP.Stats.csproj" -c Release -o publish
dotnet run --project "MP.Stats/MP.Stats.csproj"
# For hotreload during development
dotnet watch run --project "MP.Stats/MP.Stats.csproj"
```
---
Feel free to adjust paths or environment variable names if your local setup differs.
+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="10.0.7" />
<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>
+32
View File
@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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)
{
var lines = new List<string>();
IEnumerable<PropertyDescriptor> props = TypeDescriptor.GetProperties(typeof(T)).OfType<PropertyDescriptor>();
var header = string.Join(";", props.ToList().Select(x => x.Name));
lines.Add(header);
var valueLines = reportData.Select(row => string.Join(separator, header.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
//var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
lines.AddRange(valueLines);
await Task.Run(() => File.WriteAllLines(path, lines.ToArray()));
}
}
}
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
+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
+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
+28 -20
View File
@@ -1,13 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<Version>6.16.2409.408</Version>
<Version>8.16.2604.2718</Version>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>MP_TAB3</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Controllers\**" />
<Compile Remove="Data\**" />
<Content Remove="Controllers\**" />
<Content Remove="Data\**" />
<EmbeddedResource Remove="Controllers\**" />
<EmbeddedResource Remove="Data\**" />
<None Remove="Controllers\**" />
<None Remove="Data\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Components\MseSampler.razor.cs" />
</ItemGroup>
@@ -25,29 +36,26 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2408.2710" />
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2408.2710" />
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.33" />
<PackageReference Include="NLog" Version="5.3.3" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
<PackageReference Include="StackExchange.Redis" Version="2.8.0" />
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Controllers\" />
<Folder Include="Data\" />
<PackageReference Include="EgwCoreLib.Razor" />
<PackageReference Include="EgwCoreLib.Utils" />
<PackageReference Include="Microsoft.AspNetCore.Components" />
<PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" />
<PackageReference Include="NLog" />
<PackageReference Include="NLog.Targets.OpenTelemetryProtocol" />
<PackageReference Include="NLog.Web.AspNetCore" />
<PackageReference Include="OpenTelemetry.Exporter.Console" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.SqlClient" />
<PackageReference Include="OpenTelemetry.Instrumentation.StackExchangeRedis" />
<PackageReference Include="StackExchange.Redis" />
<PackageReference Include="System.Text.Encodings.Web" />
</ItemGroup>
<ItemGroup>
<None Include="compilerconfig.json" />
<None Include="Properties\PublishProfiles\IIS01.pubxml.user" />
<None Include="wwwroot\css\fonts\lato-v17-latin-regular.svg" />
<None Include="wwwroot\css\fonts\lato-v17-latin-regular.woff2" />
<None Include="wwwroot\css\fonts\roboto-condensed-v19-latin-regular.svg" />
<None Include="wwwroot\css\fonts\roboto-condensed-v19-latin-regular.woff2" />
<None Include="wwwroot\css\fonts\roboto-v27-latin-regular.svg" />
<None Include="wwwroot\css\fonts\roboto-v27-latin-regular.woff2" />
</ItemGroup>
<ItemGroup>
+49 -40
View File
@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Components;
using MP.Data.DatabaseModels;
using MP.Data.DbModels;
using MP.Data;
using MP.Data.Services;
using Newtonsoft.Json;
using NLog.Fluent;
using MP_TAB3.Components;
namespace MP_TAB3.Pages
{
@@ -17,12 +17,7 @@ namespace MP_TAB3.Pages
/// <summary>
/// Dato di dettaglio MSE per macchina
/// </summary>
public MappaStatoExpl? CurrMSE { get; set; } = null;
/// <summary>
/// Macchina selezionata
/// </summary>
public string IdxMacc { get; set; } = "";
public MappaStatoExplModel? CurrMSE { get; set; } = null;
[Inject]
public MessageService MsgServ { get; set; } = null!;
@@ -42,11 +37,33 @@ namespace MP_TAB3.Pages
IdxMacc = "";
CurrMSE = null;
TDFeeder.dataPipe.EA_NewMessage -= DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage -= BlinkPipe_EA_NewMessage;
}
#endregion Public Methods
#region Protected Fields
/// <summary>
/// IdxMacchinaSub (tavola)
/// </summary>
protected string IdxMaccSubSel = "";
#endregion Protected Fields
#region Protected Properties
/// <summary>
/// Macchina selezionata
/// </summary>
protected string IdxMacc { get; set; } = "";
protected bool IsManual { get; set; } = false;
[Inject]
protected SharedMemService MStor { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
/// <summary>
@@ -57,7 +74,6 @@ namespace MP_TAB3.Pages
{
await base.OnInitializedAsync();
TDFeeder.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage;
TDFeeder.blinkPipe.EA_NewMessage += BlinkPipe_EA_NewMessage;
}
protected override async Task OnParametersSetAsync()
@@ -70,7 +86,7 @@ namespace MP_TAB3.Pages
/// </summary>
/// <param name="ListMSE"></param>
/// <returns></returns>
protected async Task RefreshData(List<MappaStatoExpl> ListMSE)
protected async Task RefreshData(List<MappaStatoExplModel> ListMSE)
{
// se vecchio salvo sul browser...
if (DateTime.Now.Subtract(lastSave).TotalSeconds > 5)
@@ -117,8 +133,29 @@ namespace MP_TAB3.Pages
{
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
}
if (!string.IsNullOrEmpty(IdxMacc) && MStor.DictMacchManual.ContainsKey(IdxMacc))
{
IsManual = MStor.DictMacchManual[IdxMacc];
}
else
{
IsManual = false;
}
}
/// <summary>
/// Selezione macchina SUB
/// </summary>
/// <param name="selIdxMacc"></param>
protected void SetMacc(string selIdxMacc)
{
IdxMaccSubSel = selIdxMacc;
}
/// <summary>
/// Variabile caricamento
/// </summary>
protected bool IsLoading = false;
#endregion Protected Methods
#region Private Fields
@@ -134,34 +171,6 @@ namespace MP_TAB3.Pages
#region Private Methods
/// <summary>
/// Ricezione evento blink
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BlinkPipe_EA_NewMessage(object? sender, EventArgs e)
{
PubSubEventArgs currArgs = (PubSubEventArgs)e;
// conversione on-the-fly List<string> --> allarmi
if (!string.IsNullOrEmpty(currArgs.newMessage))
{
try
{
var dataRaw = JsonConvert.DeserializeObject<string>(currArgs.newMessage);
if (dataRaw != null)
{
bool.TryParse($"{dataRaw}", out doBlink);
}
}
catch
{ }
InvokeAsync(() =>
{
StateHasChanged();
});
}
}
/// <summary>
/// Ricevuto nuovi dati da mostrare!
/// </summary>
@@ -176,7 +185,7 @@ namespace MP_TAB3.Pages
{
try
{
List<MappaStatoExpl>? dataList = JsonConvert.DeserializeObject<List<MappaStatoExpl>>(currArgs.newMessage);
List<MappaStatoExplModel>? dataList = JsonConvert.DeserializeObject<List<MappaStatoExplModel>>(currArgs.newMessage);
if (dataList != null)
{
InvokeAsync(() => RefreshData(dataList));
+1 -30
View File
@@ -2,22 +2,12 @@ namespace MP_TAB3.Pages
{
public partial class Controls
{
#region Public Methods
#endregion Public Methods
#region Protected Properties
#endregion Protected Properties
#region Protected Methods
protected async Task ForceReload()
{
IsLoading = true;
await Task.Delay(50);
await Task.Delay(5);
IsLoading = false;
}
@@ -27,25 +17,6 @@ namespace MP_TAB3.Pages
await ReloadData();
}
protected void SetMacc(string selIdxMacc)
{
IdxMaccSubSel = selIdxMacc;
}
#endregion Protected Methods
#region Private Fields
private string IdxMaccSubSel = "";
private bool IsLoading = false;
#endregion Private Fields
#region Private Methods
#endregion Private Methods
}
}

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