278 Commits

Author SHA1 Message Date
Emmanuele Sassi 9ad019b6fd Merge remote-tracking branch 'origin/develop' into EmmanueleVersion 2023-05-17 13:18:39 +02:00
Emmanuele Sassi 4f862b2c8d - migliorie restart 2023-05-17 13:11:12 +02:00
zaccaria.majid c4f16804e7 fix clone 2023-05-17 13:08:00 +02:00
zaccaria.majid 1d171adcb4 fix scrittura file conf 2023-05-17 13:07:36 +02:00
zaccaria.majid af2fa72743 fix clone oggetti 2023-05-17 13:07:21 +02:00
zaccaria.majid 3c63d0c093 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-17 12:27:31 +02:00
zaccaria.majid 33aae7dba3 ok refresh on add + fix gestione instance number 2023-05-17 12:27:24 +02:00
zaccaria.majid 876504ebee ok componente nuovo svg 2023-05-17 11:52:48 +02:00
zaccaria.majid 4c31a1bd60 aggiunta funzione exec flush by keyword 2023-05-17 11:52:36 +02:00
zaccaria.majid dd4363ba34 ok pagina utils 2023-05-17 11:52:13 +02:00
zaccaria.majid f0d2ccddea fix oggetti svg 2023-05-17 11:52:06 +02:00
Samuele Locatelli 813a1733dd Fix processo startup threads 2023-05-17 10:48:30 +02:00
Emmanuele Sassi 9808f32544 Merge branch 'EmmanueleVersion' into develop 2023-05-17 10:15:33 +02:00
Emmanuele Sassi 47a63d5d60 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-17 10:15:20 +02:00
zaccaria.majid 92fa6ea474 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-17 10:14:24 +02:00
zaccaria.majid eb08eeb7d8 ok bulk gen richieste ddf 2023-05-17 10:13:40 +02:00
Samuele Locatelli e00987e96c Fix click plus/minus x door 2023-05-17 10:10:54 +02:00
Emmanuele Sassi 84c7d075b3 Merge remote-tracking branch 'origin/develop' into EmmanueleVersion 2023-05-17 09:54:25 +02:00
Emmanuele Sassi caaa2c602a - migliorie alla stabilità 2023-05-17 09:53:58 +02:00
Samuele Locatelli b8770953f6 Prima release HwSvgObj x testing 2023-05-17 09:31:21 +02:00
Samuele Locatelli e7eb191ef4 Fix png loghi 2023-05-17 08:04:47 +02:00
Samuele Locatelli 3e6c76aec5 cambio opacity x rect plus/minus 2023-05-16 20:54:29 +02:00
Samuele Locatelli fe475c1910 update cache a 7 gg x svg 2023-05-16 20:44:13 +02:00
Samuele Locatelli 4ff5f4eb7f Load porta a prima apertura da REDIS 2023-05-16 20:42:44 +02:00
Samuele Locatelli 499df2e116 Fix gradiente x preview immagine 2023-05-16 20:39:11 +02:00
Samuele Locatelli 1f3d60afa8 Ancora update doorImgController 2023-05-16 19:59:23 +02:00
Samuele Locatelli 35804905af OK recupero img da REDIS 2023-05-16 19:37:11 +02:00
Samuele Locatelli 79822237a7 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-16 16:38:25 +02:00
Samuele Locatelli 5dd78c5b0f update test webdoor 2023-05-16 16:38:23 +02:00
Samuele Locatelli 4714bb6034 update insomnia 2023-05-16 16:38:13 +02:00
zaccaria.majid c1a4e26f52 inizio gestione aggiunta istantanea porte 2023-05-16 15:52:24 +02:00
zaccaria.majid f7548ef074 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-16 12:53:41 +02:00
zaccaria.majid 2e8555c9a4 spostata gestione nuova istanza hw in hardwarenewpanel 2023-05-16 12:53:36 +02:00
Samuele Locatelli ce3cad0fc3 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-16 12:32:36 +02:00
Samuele Locatelli e231234afe WDC, HW door:
- modifica componente x avere plus/minus sull'hw porta
2023-05-16 12:32:33 +02:00
zaccaria.majid a9ba01a178 ok aggiornamento post clone/delete 2023-05-16 10:25:34 +02:00
zaccaria.majid 4d1f06cfbe "ok" aggiornamento post conferma 2023-05-16 10:09:01 +02:00
zaccaria.majid 8d0f7bb3fa spostato aggiornamento automatico nel componente hardwarenewpanel 2023-05-16 09:42:40 +02:00
Samuele Locatelli 23727217df Spostato a singleton i RefreshService 2023-05-15 17:30:19 +02:00
Emmanuele Sassi 0dfe90ec95 - aggiunto stato corrente dei thread 2023-05-15 17:29:14 +02:00
Samuele Locatelli 2701c951a8 Update gestione eventi x refresh post confirm 2023-05-15 16:49:04 +02:00
Samuele Locatelli 594d1c7095 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-15 14:59:58 +02:00
Samuele Locatelli 05bf416ca1 modifica da testare x gestione numRev calcolo 2023-05-15 14:59:53 +02:00
Samuele Locatelli 10d5330cb9 Update x autorestart (dubbio se vada...) 2023-05-15 14:59:40 +02:00
zaccaria.majid ea550f37b6 fix grafici 2023-05-15 14:32:25 +02:00
zaccaria.majid d6e7c0dcd6 fix default sorting 2023-05-15 10:02:25 +02:00
zaccaria.majid 6508d1dd2a Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-15 09:59:31 +02:00
zaccaria.majid ee45a5fb42 fix filtri + serializzazione + prova refresh 2023-05-15 09:59:24 +02:00
Samuele Locatelli 06e8f910d8 update modello stats 2023-05-15 09:53:45 +02:00
Samuele Locatelli e07d7d8d37 WebCamSrv:
- Update gestione thread in chiusura
- update stats con csv export
2023-05-15 09:53:39 +02:00
Samuele Locatelli 8df04e2760 Update x statistiche SIM multi-thread 2023-05-13 12:40:14 +02:00
Samuele Locatelli 3246f62dc4 Aggiutna statistiche 2023-05-12 19:53:31 +02:00
Samuele Locatelli 9dec436896 Minor re-layout 2023-05-12 19:07:02 +02:00
Samuele Locatelli 2e9c948da5 Rest client in using x evitare eccessivo consumo RAM 2023-05-12 18:41:18 +02:00
Samuele Locatelli 1d3e4cac06 fix colori buttons start/stop 2023-05-12 18:38:51 +02:00
Samuele Locatelli 86147cbfb0 Correzione x riavvio threads 2023-05-12 18:15:03 +02:00
Samuele Locatelli e47906eb4a Ok con gestione riavvio threads se cambiano/calano 2023-05-12 18:09:40 +02:00
Samuele Locatelli b6fd3f15f4 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 16:51:16 +02:00
Samuele Locatelli 949958c9b3 Update progetto CamSrv 2023-05-12 16:51:14 +02:00
Samuele Locatelli 15a8759574 Update gestione coda x evitare concorrenza lettura 2023-05-12 16:51:04 +02:00
Samuele Locatelli 7cccfe66fc Completo rename 2023-05-12 16:03:06 +02:00
Samuele Locatelli d7f34df0f6 Ancora update x rename 2023-05-12 16:01:37 +02:00
zaccaria.majid 759d9be118 fix catena di aggiornamenti 2023-05-12 15:56:04 +02:00
Samuele Locatelli 8b13765bfc Inizio rename progetto 2023-05-12 15:55:55 +02:00
Samuele Locatelli 59d6bc1205 Fix check errori presenti 2023-05-12 15:07:02 +02:00
Samuele Locatelli a510e9196a Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 14:36:24 +02:00
Samuele Locatelli 4b94420a9f update gestione coda x reset errori su ricezione 2023-05-12 14:36:22 +02:00
zaccaria.majid 6b9b5cc8fc controllo errore prima di tutto 2023-05-12 13:14:41 +02:00
zaccaria.majid 1029d8522c Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-12 13:03:15 +02:00
zaccaria.majid 1f6f7bc78a fix messaggio di errore 2023-05-12 13:03:09 +02:00
Samuele Locatelli 7dfebf08bd Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 12:42:27 +02:00
Samuele Locatelli 56dc492d0b update ancora display app 2023-05-12 12:40:48 +02:00
Samuele Locatelli 266b252b27 Rimozione da elenco errori su richiesta calcolo 2023-05-12 12:40:41 +02:00
zaccaria.majid c83add7d37 ok show errore 2023-05-12 12:20:59 +02:00
Samuele Locatelli 04b358c7bd typo codemaid 2023-05-12 11:43:50 +02:00
Samuele Locatelli c9a7f9f903 Fix rilettura errori ed SVG 2023-05-12 11:40:50 +02:00
Samuele Locatelli 8da18ef306 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 11:25:43 +02:00
Samuele Locatelli f63e969f69 riportato 1 solo thread x debug 2023-05-12 11:25:22 +02:00
zaccaria.majid aa685839cd gestione err 2023-05-12 11:23:24 +02:00
zaccaria.majid eff48abdb9 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-12 11:15:18 +02:00
zaccaria.majid c2d79f5f3a inizio gestione errori 2023-05-12 11:15:09 +02:00
Samuele Locatelli 14e6c4c85e API:
- cambio metodo recupero richieste in coda
- gestioen corretta limite
2023-05-12 10:46:48 +02:00
Samuele Locatelli 07e9a0237d Update gestione return errori 2023-05-12 10:36:52 +02:00
Samuele Locatelli 8e1f21f417 Aggiunta gestione code errori 2023-05-12 10:36:32 +02:00
Samuele Locatelli 6895a0f192 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 10:05:15 +02:00
Samuele Locatelli 3666354194 Update gestione errori 2023-05-12 10:04:59 +02:00
Samuele Locatelli 6a0787335e Update API x gestione errori 2023-05-12 10:04:57 +02:00
zaccaria.majid e8b02d6578 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-12 09:48:39 +02:00
zaccaria.majid 525569b04e ok aggiornamento template senza conferma iniziale obbligatoria 2023-05-12 09:48:32 +02:00
Samuele Locatelli 4111d559b4 Aggiunramento metodi stato code 2023-05-12 09:31:15 +02:00
Samuele Locatelli d3adaaf968 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-12 09:13:04 +02:00
Samuele Locatelli dca0e3f843 Fix gestione risposta esecuzioni fatte 2023-05-12 09:13:02 +02:00
zaccaria.majid 0cb5def602 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-12 09:00:20 +02:00
zaccaria.majid ce120f3e67 fix minori 2023-05-12 09:00:12 +02:00
Samuele Locatelli 2bd6b441ea update API x gestione reset task DONE 2023-05-12 08:54:25 +02:00
Emmanuele Sassi 2dceeda6b1 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-11 19:59:06 +02:00
Emmanuele Sassi ae05935402 - Migliorie processi 2023-05-11 19:59:03 +02:00
Samuele Locatelli 806eef6d6f Merge tag 'TestDeployYaml' into develop
Update x testare YAML master
2023-05-11 18:10:57 +02:00
Samuele Locatelli 4064906ae5 Merge branch 'release/TestDeployYaml' 2023-05-11 17:54:13 +02:00
Samuele Locatelli 1129cf4b0d Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-11 17:38:08 +02:00
Samuele Locatelli 36a03fe9d5 update YAML x release/installer 2023-05-11 17:38:06 +02:00
Samuele Locatelli 2aced5e705 Ancora updatre pubxml 2023-05-11 17:37:58 +02:00
zaccaria.majid ca8a805d18 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-11 17:30:15 +02:00
zaccaria.majid 7e1cfef511 OK Ordinamento giusto componenti nel ddf +
fix fieldname shape o template
2023-05-11 17:30:07 +02:00
Samuele Locatelli 162a08e120 Update pubxml x deploy 2023-05-11 17:27:41 +02:00
Samuele Locatelli d0652c52c5 YAML:
- aggiunta pubblicazione UI
2023-05-11 12:54:26 +02:00
Samuele Locatelli f61a671661 Aggiunta yaml x pubblicazione API 2023-05-11 12:52:44 +02:00
Samuele Locatelli cda8063358 update yaml di build 2023-05-11 12:31:33 +02:00
Samuele Locatelli 89894fd242 Aggiunta vari try/catch metodi WDC.cs in SDK 2023-05-11 12:29:05 +02:00
Samuele Locatelli 1cd82ef617 Merge remote-tracking branch 'origin/develop' into develop 2023-05-11 12:23:01 +02:00
Emmanuele Sassi 0cf477ad54 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-11 12:22:40 +02:00
Emmanuele Sassi eabf5ba12e - bozza thread di esecuzione processi
- try su funzioni Db
2023-05-11 12:22:37 +02:00
Samuele Locatelli d2a3c54eba update pubxml 2023-05-11 12:04:31 +02:00
zaccaria.majid 0878d7efc4 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-11 11:58:30 +02:00
zaccaria.majid 149061a689 inizio fix ddf 2023-05-11 11:57:41 +02:00
Samuele Locatelli 0169d9d8d1 Update gestione coda invio/ricezione messaggi 2023-05-11 11:55:10 +02:00
zaccaria.majid b4f3891a85 ok hero sec 2023-05-10 17:01:38 +02:00
Samuele Locatelli ad06acd392 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-10 15:59:44 +02:00
Samuele Locatelli 6df0db4e1b Fix home page component 2023-05-10 15:59:40 +02:00
zaccaria.majid 1c30ccf024 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-10 15:41:00 +02:00
zaccaria.majid 89d479c356 ok componente report 2023-05-10 15:40:44 +02:00
Samuele Locatelli 4c5ac0ada4 Versione parametrica home placard OK 2023-05-10 15:23:51 +02:00
Samuele Locatelli 59b3a48732 Start parametrizzazione componente 2023-05-10 15:02:09 +02:00
Samuele Locatelli 6161f4d52b Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-10 14:20:43 +02:00
Samuele Locatelli 2f410275c4 Completata prima review home box 2023-05-10 14:20:40 +02:00
Samuele Locatelli edff91caed Update homecard bezier 2023-05-10 13:30:14 +02:00
zaccaria.majid b3c1abd32c Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-10 12:29:28 +02:00
zaccaria.majid 8a7be62f1b ok sorter pagina oridini 2023-05-10 12:29:17 +02:00
Samuele Locatelli 081e54d85d Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-05-10 12:06:23 +02:00
Samuele Locatelli 52bd4eb785 inizio gestione homeCard 2023-05-10 12:06:21 +02:00
zaccaria.majid b771e3dc65 ok filtro x order stat 2023-05-10 10:24:46 +02:00
zaccaria.majid aef9d6a2f9 ok stato ordine "tradotto" 2023-05-10 10:17:44 +02:00
zaccaria.majid b07aa8f9c2 fix nav manager top 2023-05-10 09:59:31 +02:00
zaccaria.majid 2dd307b0f1 fix componente nav menu 2023-05-09 17:14:10 +02:00
Samuele Locatelli c964089fc9 UPDATE SELETTORE DROPDOWN 2023-05-09 16:26:11 +02:00
zaccaria.majid 998e092f69 INSERITO DROP DOWN 2023-05-09 16:18:51 +02:00
zaccaria.majid b719150999 DoorDef hw:
- ok buttons cancel save
- ok tot componenti x hw
2023-05-09 15:58:15 +02:00
zaccaria.majid a87542d37a fix componenti svg 2023-05-09 15:57:14 +02:00
zaccaria.majid 0084a77030 ok gestione file pdf e conferma 2023-05-09 14:18:51 +02:00
zaccaria.majid 226247f8be DoorDefinition:
- ok revisione testata
- ok aggiunta bottone richiesta 3D
2023-05-09 10:47:42 +02:00
zaccaria.majid 7cfedd2e56 fix grafico 2023-05-09 10:32:13 +02:00
zaccaria.majid e24e0143f5 DoorDefinition:
-ok conteggio modifiche
-ok bottoni cancel save
2023-05-09 10:12:27 +02:00
zaccaria.majid 97d582e733 OrderDetails:
- SEMI_ok button cambio stato
- ok paginatore
- ok button add new
2023-05-09 09:53:25 +02:00
zaccaria.majid 38b3814f22 fix gestione esecuzione funzioni passate come parametro + cambio stato 2023-05-09 08:41:16 +02:00
zaccaria.majid be33cdfd25 mod documento 2023-05-08 17:48:47 +02:00
zaccaria.majid 08980f110d ok ordinamento x data e codice 2023-05-08 17:47:44 +02:00
zaccaria.majid d8e189489a order stastus homepage:
-ok paginatore
 -SEMI_ok stato ordine
 -ok filtri per:
   -periodo
   -generico (order code || order desc)
   -order status
2023-05-08 17:27:27 +02:00
zaccaria.majid 8fdde6b7ee order stastus homepage:
-ok paginatore
 -SEMI_ok stato ordine
 -ok filtri per:
   -periodo
   -generico (order code || order desc)
   -order status
2023-05-08 17:24:48 +02:00
zaccaria.majid 983194d2fb aggiunto paginatore orders home page 2023-05-08 16:15:13 +02:00
Samuele Locatelli 7bb3de466b Aggiunta elenco todo attuali 2023-05-08 15:25:48 +02:00
zaccaria.majid 28888dd085 fix grafici 2023-05-08 14:58:51 +02:00
zaccaria.majid 994fe22e22 prova dix aggiornamento bottone DDF 2023-05-08 13:14:37 +02:00
Samuele Locatelli a392723b01 Fix gestione refresh cancel/save btn 2023-05-08 10:32:47 +02:00
zaccaria.majid bb578cb856 Fix gestione bulk upodate 2023-05-08 09:59:12 +02:00
zaccaria.majid 609ecbf2ae pulizie varie 2023-05-08 09:44:01 +02:00
zaccaria.majid 9d8ab51420 fix warning 2023-05-08 09:43:06 +02:00
zaccaria.majid 594b7b925d fix metodo update doorop 2023-05-08 09:42:51 +02:00
zaccaria.majid 845095ec6c ok aggiunta gestione finiture 2023-05-05 16:43:11 +02:00
zaccaria.majid 04c1aca268 fix grafici 2023-05-05 12:52:42 +02:00
zaccaria.majid 5f31052bde fix scrittura ddf 2023-05-05 12:52:11 +02:00
zaccaria.majid cac6ef4499 aggiunta gestione tipo di legno 2023-05-04 17:36:36 +02:00
Samuele Locatelli 22fbd0153f Fix action --> EventCallback 2023-05-04 15:29:56 +02:00
zaccaria.majid 6d1b5c2806 fix grafici + passaggio funzione come parametro 2023-05-04 15:24:36 +02:00
zaccaria.majid 09776ab2d1 spostato metodo creazione porta in dataservice 2023-05-04 11:55:09 +02:00
zaccaria.majid 236bb47f17 ancora fix grafica door definition 2023-05-04 10:30:52 +02:00
zaccaria.majid fa98ed495b fix grafica door definition 2023-05-04 10:30:39 +02:00
Samuele Locatelli a7831be194 Pulizia codice x arrow 2023-05-03 18:19:09 +02:00
Samuele Locatelli e95650bfdf Fix display testo in obj svg 2023-05-03 18:10:50 +02:00
Samuele Locatelli 1f96279c91 Update obj svg 2023-05-03 17:23:10 +02:00
Samuele Locatelli 96c4b3078b Fix blocchi dei filtri ordini 2023-05-03 17:11:33 +02:00
zaccaria.majid 9ff6025061 continuop pagina gestione porte 2023-05-03 16:49:43 +02:00
zaccaria.majid 7b018b0f5e Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-03 09:57:48 +02:00
zaccaria.majid 888e7c52ac ok gestione colore background dato lo stato 2023-05-03 09:57:44 +02:00
Samuele Locatelli 81dfe6be4a Componente ArrowStep usabile 2023-05-03 09:57:00 +02:00
Samuele Locatelli 10645b3fb0 Bozza componente StepArrow + TestPage 2023-05-03 09:50:03 +02:00
Samuele Locatelli e31528769b refresh componente svg 2023-05-03 08:51:30 +02:00
Samuele Locatelli 1826963054 Fix componente disegno obj svg delle porte 2023-05-02 19:42:35 +02:00
zaccaria.majid 0239acea9a inizio gestione doorlist 2023-05-02 16:44:41 +02:00
zaccaria.majid 0a66cb3e53 ok gestione e display stati 2023-05-02 15:29:36 +02:00
zaccaria.majid 6adf3f386c fix gestione order status (Spostato in listvalues) 2023-05-02 15:29:06 +02:00
zaccaria.majid 33747b9eab Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-05-02 11:50:26 +02:00
zaccaria.majid 31b10c2593 inizio gestione step ordini 2023-05-02 11:49:53 +02:00
Samuele Locatelli ced194d513 update enum + favicon 2023-05-02 10:23:25 +02:00
zaccaria.majid 9a144a95ff prova fix bottone 2023-05-02 09:20:20 +02:00
zaccaria.majid 1ba31b7c59 inizio gestione notifica via servizio x modifica parametri 2023-04-28 17:02:12 +02:00
zaccaria.majid 2ac6bd94eb fix gestione estensione files 2023-04-28 13:02:56 +02:00
zaccaria.majid 9c4e82108c spostata gestione clone in modello dati + pulizia vari IF FALSE 2023-04-28 12:24:28 +02:00
zaccaria.majid 7ddf9cfab0 ok controllo dati differenti 2023-04-28 11:39:27 +02:00
Samuele Locatelli 186191e6c1 Merge tag 'UpdateMainInterface' into develop
Update interfaccia
2023-04-28 11:03:19 +02:00
Samuele Locatelli 0e910df132 Merge branch 'release/UpdateMainInterface' 2023-04-28 11:02:11 +02:00
Samuele Locatelli cbadcd9f96 Merge tag 'AddSvgDynamicRefresh' into develop
Chiusura feature refresh svg con update importanti interfaccia
2023-04-28 11:01:24 +02:00
Samuele Locatelli aaeddc7e54 Ancora update gestione refresh dati 2023-04-28 10:59:58 +02:00
Samuele Locatelli e9116e9904 Rimozione commenti 2023-04-28 10:49:48 +02:00
Samuele Locatelli f96ea5bd62 OK gestione update grafico 2023-04-28 10:44:23 +02:00
Samuele Locatelli eec4608919 update x gestione selezione termplate 2023-04-28 09:08:39 +02:00
Samuele Locatelli 086f46eb62 bozza update da selezione template 2023-04-27 19:42:51 +02:00
Samuele Locatelli 3429f4fa31 Update x gestione selezione template vs modifica record 2023-04-27 18:12:52 +02:00
Samuele Locatelli 196869d631 Fix refresh display selezione tendina 2023-04-27 17:29:28 +02:00
zaccaria.majid d7621a2639 fix templating 2023-04-27 17:06:30 +02:00
zaccaria.majid 9f8fbab059 fix gestione default graphic paramaeters 2023-04-27 16:39:09 +02:00
zaccaria.majid ef916c4aa2 fix grafixo + fix popolamento 2023-04-27 15:24:03 +02:00
zaccaria.majid 371eab4f65 fix scrittura ddf di profiles width w swing leggendo da db 2023-04-27 11:57:45 +02:00
zaccaria.majid c8b7826a0c fix clear oggetto da serializzare 2023-04-27 09:15:29 +02:00
zaccaria.majid d70b286940 ok gestione scrittura dati di size giusta x door op 2023-04-27 09:12:33 +02:00
zaccaria.majid 7a04a6ef57 ok salvataggio modifiche x blocco 2023-04-26 18:08:33 +02:00
zaccaria.majid ba9149be80 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-26 16:52:05 +02:00
Samuele Locatelli 28a51631ca Fix report modifica a monte 2023-04-26 16:26:35 +02:00
Samuele Locatelli 27e1fa5c0a Fix decodifica opzioni selettori a tendina 2023-04-26 15:21:01 +02:00
Samuele Locatelli 842849b35b update x deserializzazione degli oggertti DOORS 2023-04-26 15:07:59 +02:00
Samuele Locatelli 895337468d Spostato su BaseParamList 2023-04-26 13:01:24 +02:00
zaccaria.majid ae684a121d inizio prova gestione salvataggio ogni cambio 2023-04-26 12:13:17 +02:00
zaccaria.majid b474606de0 fix step hw esegue reset lista hw 2023-04-26 11:31:28 +02:00
Samuele Locatelli e35282f8cd minor typo 2023-04-26 10:12:55 +02:00
zaccaria.majid 2cd21b3efd inizio fix gestione params iniziali 2023-04-21 17:25:09 +02:00
zaccaria.majid d1fca97d25 fix lettura e deserializzazione parametri di base 2023-04-21 13:02:46 +02:00
zaccaria.majid 45f33bb6c7 fix scrittura ddf con spaziatura hw 2023-04-21 09:43:33 +02:00
zaccaria.majid 0ef69bb675 inizio gestione separazione con linee vuote 2023-04-20 17:46:51 +02:00
zaccaria.majid e7d7783d29 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-20 16:14:12 +02:00
zaccaria.majid 50c961408c fix scrittura gestione valore di default params di base 2023-04-20 16:14:06 +02:00
Samuele Locatelli 55d1dbf6ef Aggiunto check solo stato code 2023-04-20 10:24:53 +02:00
Samuele Locatelli be3ff6e861 Fix reset coda processing 2023-04-20 10:23:08 +02:00
Samuele Locatelli 0ea1c28424 update x metodo reset Queue 2023-04-20 09:18:48 +02:00
Samuele Locatelli 10f8108393 Update x reset da testare 2023-04-19 18:28:27 +02:00
Samuele Locatelli d33bb2110c Completato demo servizio con chiamata reset code 2023-04-19 18:09:06 +02:00
Samuele Locatelli 38f8febe60 Preparazione bozza struttura chiamate e risposta 2023-04-19 17:40:32 +02:00
Samuele Locatelli c6ae31c80d Update SDK x demoVB 2023-04-19 17:24:25 +02:00
Samuele Locatelli c0a8785b28 Update demo VB 2023-04-19 17:24:19 +02:00
Samuele Locatelli 995aff5bf9 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-04-19 15:02:28 +02:00
Samuele Locatelli 72a2bc53da Ancora update gestione controller queue 2023-04-19 15:02:25 +02:00
Samuele Locatelli a0f30600b4 Riorganizzaizone API 2023-04-19 14:55:46 +02:00
zaccaria.majid 4bd65555a1 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-19 13:52:57 +02:00
zaccaria.majid 9896afb7c8 continuo fix gestione params di base 2023-04-19 13:52:28 +02:00
Samuele Locatelli 7b61d49767 Completata review recupero SVG e display 2023-04-19 13:39:38 +02:00
Samuele Locatelli 7995436689 Ok salvataggio SVG su redis 2023-04-19 13:31:31 +02:00
Samuele Locatelli 3f0c0e2b93 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-04-19 13:19:04 +02:00
Samuele Locatelli f704525053 Salvataggio su REDIS dei vari DDF generati 2023-04-19 13:19:01 +02:00
zaccaria.majid b0fd6fc28a Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-19 12:18:07 +02:00
zaccaria.majid 278c8d2dba fix autoconferma 2023-04-19 12:16:52 +02:00
Samuele Locatelli 0bcc18a1d3 Merge branch 'develop' of https://gitlab.steamware.net/egalware/webdoorcreator into develop 2023-04-19 12:07:34 +02:00
Samuele Locatelli de2e831a70 Update gestione DTO x serializzazione 2023-04-19 12:05:22 +02:00
Samuele Locatelli e11dae3a9c Completato renaming servizi gestione code redis 2023-04-19 11:17:26 +02:00
Samuele Locatelli 5b6ccd560d WDC.UI:
- spostato servizi da WDCDataService a servizio in Data
- inizio modifica comportamento invio richieste calcolo e risposte
2023-04-19 11:15:37 +02:00
zaccaria.majid c3a1b73256 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-19 10:43:12 +02:00
zaccaria.majid 04f0044b36 fix disegno parametri iniziali 2023-04-19 10:42:56 +02:00
Samuele Locatelli 91641a8936 Spostamento REDIS server x dev/debug su nkcredis 2023-04-19 09:19:06 +02:00
Samuele Locatelli f78fb92d52 Ancora update x metodi accesso e gestione code 2023-04-19 08:49:27 +02:00
Samuele Locatelli b031dd0bec Estensione metodi di lettura QUEUE 2023-04-19 08:26:17 +02:00
Samuele Locatelli 33a43ce370 Iniziati metodi x recuperare da redis le richieste 2023-04-18 20:58:06 +02:00
Samuele Locatelli a1955d56ee Reorg codice classe accesso dati 2023-04-18 20:18:45 +02:00
Samuele Locatelli 96fdf85b27 Update webAPI:
- Riorganizzazione costanti
- aggiunta metodi a progetto
- aggiunta pacchetti nuget
2023-04-18 20:18:22 +02:00
zaccaria.majid cc08f30647 inizio fix gestione sizing 2023-04-18 17:49:13 +02:00
zaccaria.majid 6a8274171a fix:
- serializzazione yaml con indentazione giusta
- oggetto contenitore x size
- listvalues fix nomi vari tabelle
2023-04-18 16:51:18 +02:00
Samuele Locatelli 7508b118fe refresh webAPI 2023-04-17 20:01:10 +02:00
Samuele Locatelli 3e79d95d60 Ancora update x API accesso servizi.... 2023-04-17 20:01:04 +02:00
Samuele Locatelli 8e99ac071e Aggiunta preliminare demo dotNet framework 2023-04-17 19:32:41 +02:00
Samuele Locatelli ab9438d590 Aggiunta preliminare progetti SRV-API 2023-04-17 19:32:33 +02:00
Samuele Locatelli 6230fa3512 Fix preliminare deploy su IIS01 x WDC/UI 2023-04-17 19:32:21 +02:00
Samuele Locatelli d2a8f78b5f OK serializzazione!!! 2023-04-17 17:52:44 +02:00
Samuele Locatelli 3a0fc194a6 Fix serializzazione vers 2 2023-04-17 17:38:10 +02:00
Samuele Locatelli 4ed79e89f7 fix salvataggio con reinit obj 2023-04-17 15:37:33 +02:00
Samuele Locatelli 67549e8bb3 Spostamento file conf 2023-04-17 15:29:47 +02:00
zaccaria.majid 118c32c7c5 gesptione yal 2023-04-17 15:22:39 +02:00
zaccaria.majid 973417edcc continuo serializzazione PORTA 2023-04-14 17:48:37 +02:00
zaccaria.majid 952014c8f6 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-14 09:34:51 +02:00
zaccaria.majid 3b1af14aa9 continuo generalizzazione doorSizing 2023-04-14 09:33:36 +02:00
Samuele Locatelli fa32c7d3b9 modifica test x steplist a freccia 2023-04-14 09:31:24 +02:00
zaccaria.majid 37c00cd31f inizio gestione ddf cambio parametri sizing 2023-04-13 18:10:52 +02:00
zaccaria.majid 6838723e50 gestione avanzamento step 2023-04-13 17:59:06 +02:00
zaccaria.majid 3895594bf6 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/special/webdoorcreator into develop 2023-04-13 17:09:21 +02:00
zaccaria.majid 13fb31d51c fix grafico hwSI 2023-04-13 17:09:15 +02:00
Samuele Locatelli 28c55f9746 Completata review UserIdentity x duplicazioni call 2023-04-13 16:46:44 +02:00
Samuele Locatelli 65c07b4777 Ancora eliminate letture multiple dati user inutili 2023-04-13 14:30:06 +02:00
Samuele Locatelli 0c60ce2746 Eliminato inutile doppione currUser / UserId in nav top 2023-04-13 14:26:27 +02:00
Samuele Locatelli f03aa8dad5 Merge branch 'release/AddSvgDynamicRefresh' 2023-04-13 13:13:26 +02:00
Samuele Locatelli a074c05faf Aggiunta gestione preliminare channels redis x SVG 2023-04-13 13:13:10 +02:00
Samuele Locatelli 47d800c08e Merge branch 'feature/HardwareParameterMod' into develop 2023-04-13 11:22:48 +02:00
Samuele Locatelli 38a6f0c8e9 Merge branch 'develop' 2022-11-10 09:44:35 +01:00
Samuele Locatelli deb25ae326 Merge commit '6f2cdbe4b501f5d4ad3e5ca0875190fd40b91eaa' 2022-11-09 10:56:14 +01:00
227 changed files with 19794 additions and 1735 deletions
+229
View File
@@ -0,0 +1,229 @@
variables:
VERS_MAIN: '0.9'
NEW_REL: ''
APP_NAME: 'WDC.UI'
SOL_NAME: 'WebDoorCreator.UI'
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
.nuget-fix: &nuget-fix
- |
echo "esecuzione Nuget FIX steps"
dotnet nuget list source
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus Proxy"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source "`"Steamware Nexus Proxy`""
}
$hasSource = dotnet nuget list source | Select-String -Pattern "Steamware Nexus"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source "`"Steamware Nexus`""
}
$hasSource = dotnet nuget list source | Select-String -Pattern "nexus-proxy-v3"
if (! [String]::IsNullOrWhiteSpace($hasSource)) {
dotnet nuget remove source nexus-proxy-v3
}
dotnet nuget add source https://nexus.steamware.net/repository/nuget-group-3/index.json -n "Steamware Nexus" -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
echo "Steamware Nexus Source added"
# helper creazione hash files x IIS
.hashBuild: &hashBuild
- |
$Target = $env:APP_NAME + "\bin\publish\" + $env:APP_NAME + ".zip"
$MD5 = Get-FileHash $Target -Algorithm MD5
$SHA1 = Get-FileHash $Target -Algorithm SHA1
New-Item $Target".md5"
New-Item $Target".sha1"
$MD5.Hash | Set-Content -Path $Target".md5"
$SHA1.Hash | Set-Content -Path $Target".sha1"
echo "Created HASH files for $Target"
# helper x send su NEXUS x pack
.nexusUpload: &nexusUpload
- |
Set-Alias mCurl C:\Windows\system32\curl.exe
$fileVers = $env:APP_NAME + "\Resources\VersNum.txt"
$VersNumb = Get-Content $fileVers
echo "Curr Version: $VersNumb"
if($CI_COMMIT_BRANCH -eq "master")
{
$version = "stable"
}
else
{
$version = "unstable"
}
$File2Send = Get-ChildItem($env:APP_NAME + "\bin\publish\*")
ForEach ($File in $File2Send) {
$FileName = Split-Path $File -leaf
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/$FileName
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file $File https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/ARCHIVE/$VersNumb/$FileName
}
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "$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
stages:
- build
- staging
- deploy
- release
# ---------- BUILD ----------
WDC.Api:build:
stage: build
tags:
- win
variables:
APP_NAME: WebDoorCreator.API
SOL_NAME: WebDoorCreator.UI
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
WDC.UI:build:
stage: build
tags:
- win
variables:
APP_NAME: WebDoorCreator.UI
SOL_NAME: WebDoorCreator.UI
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# ---------- STAGING ----------
WDC.Api:staging:
stage: staging
tags:
- win
variables:
APP_NAME: WebDoorCreator.API
SOL_NAME: WebDoorCreator.UI
only:
- develop
needs: ["WDC.Api:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
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
WDC.UI:staging:
stage: staging
tags:
- win
environment:
name: staging
url: https://iis01.egalware.com/GPW/WDC.UI
variables:
APP_NAME: WebDoorCreator.UI
SOL_NAME: WebDoorCreator.UI
only:
- develop
needs: ["WDC.UI:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
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
# ---------- DEPLOY ----------
WDC.Api:deploy:
stage: deploy
tags:
- win
environment:
name: production
url: https://seriate.egalware.com/GPW/WDC.UI
variables:
APP_NAME: WebDoorCreator.API
SOL_NAME: WebDoorCreator.UI
only:
- main
needs: ["WDC.Api:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# IIS 02
- dotnet publish -p:PublishProfile=IIS02.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
# IIS PROD
- dotnet publish -p:PublishProfile=IIS-PROD.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
WDC.UI:deploy:
stage: deploy
tags:
- win
variables:
APP_NAME: WebDoorCreator.UI
SOL_NAME: WebDoorCreator.UI
only:
- main
needs: ["WDC.UI:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
script:
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
# IIS EXT
- dotnet publish -p:PublishProfile=IIS02.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
# IIS INT
- dotnet publish -p:PublishProfile=IIS-PROD.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
# ---------- RELEASE ----------
WDC.Api:release:
stage: release
tags:
- win
variables:
APP_NAME: WebDoorCreator.API
SOL_NAME: WebDoorCreator.UI
only:
- main
except:
- branches
needs: ["WDC.Api:build"]
before_script:
- *nuget-fix
- dotnet restore "$env:SOL_NAME.sln"
artifacts:
paths:
- publish/
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
# script:
# - dotnet publish -c Release -o ./publish GPW.WDC.Api/GPW.WDC.Api.csproj
WDC.UI:release:
stage: release
tags:
- win
variables:
APP_NAME: WebDoorCreator.UI
SOL_NAME: WebDoorCreator.UI
only:
- main
except:
- branches
needs: ["WDC.UI:build"]
artifacts:
paths:
- publish/
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
# script:
# - dotnet publish -c Release -o ./publish GPW.CORE.WRKLOG/GPW.CORE.WRKLOG.csproj
+68
View File
@@ -0,0 +1,68 @@
# Elenco ToDo
## Framework
Traduzione OVUNQUE x ogni termine/etichetta/button
## Pagine
### HOME page
... non saprei, forse link a
- help
- sito web generale DCA
- sito egalware
- statistiche...
### Orders Home page
Per completare
- <del>aggiunta paginatore</del>
- <del>aggiunta stato ordine</del>
- <del>aggiunta filtri ricerca
- periodo da-a
- search generico
- stato ordine</del>
- <del>ordinamento</del>
### DCA Order Man
FORSE la Orders home Page NON VA bene x gli utenti backoffice, oppure va estesa, perché x confermare quotazione, indicare avanzamento ordini gli operatori ABH/DCA devono avere una pagina operativa...
### OrderDetails
Per completare:
- <del>aggiunta button x il cambio stato da end-user</del>
- <del>sistemare con paginatore max 3 righe x 4 porte</del>
- <del>fix button verde add-new</del>
### DoorDefinition BaseParams
- <del>conteggio num modifiche da salvare</del>
- <del>armonizzare il cancel/save nella pagina</del>
- <del>revisione testata fino al btn del salva generale</del>
- <del>sostituire il salva generale con 2 buttons:
- salva, o meglio RECALC PNG = update PNG, potrebbe andare in automatico DOPO i vari SALVA nella pagina (opzione x auto-recalc?!?)
- get 3D obj (in new window/tab)</del>
### DoorDefinition Hardware
Sistemare:
- <del>da implementare davvero lettura pdf (da cartella pdf di esempi)</del>
- <del>fix cancel/save: globale x Hardware oppure x ognuno con icona?</del>
- verificare perché NON si aggiorna al salvataggio pagina dei 18 hw
- <del>mancano il totale componenti x ogni hw attivato</del>
#### Report
<del>Va inserita una lista dei componenti + elenco quote.</del>
Va pensato esportabile in pdf, comprensivo di "check pdf fatto da tizio alle ..."
## Componenti
### Top
Da sistemare
- <del>btn effettivi</del>
- <del>dinamico da user-role?</del>
- <del>fix responsive</del>
Binary file not shown.
+4
View File
@@ -297,6 +297,10 @@ During standard user process the task of time/cost estimation (based on actual D
In particular we expect to have some data auto-calculated (ex time from CAM), while other data will be required to external system (ex: materials cost, availability date for materials or machine time, cost markup to define final user price, custom discount based on customer special agreements...)
<div style="page-break-after: always; visibility: hidden"></div>
<div style="page-break-after: always; visibility: hidden"></div>
# 6. Document Revision
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
{
"version": 1,
"isRoot": true,
"tools": {}
}
@@ -0,0 +1,24 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace WebDoorCreator.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AliveController : ControllerBase
{
// GET: api/Alive
[HttpGet]
public string Get()
{
return "OK";
}
//// GET: api/Alive/Clock
//[HttpGet("Clock")]
//public string GetClock(string id)
//{
// return DateTime.Now.ToString($"yyyy-MM-dd HH:mm:ss.fff - ID: {id}");
//}
}
}
@@ -0,0 +1,149 @@
using Microsoft.AspNetCore.Mvc;
using NLog;
using WebDoorCreator.Data.DTO;
using WebDoorCreator.Data.Services;
namespace WebDoorCreator.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class QueueController : ControllerBase
{
#region Public Constructors
public QueueController(IConfiguration configuration, QueueDataService DataService)
{
Log.Info("Starting QueueController");
_configuration = configuration;
QDataServ = DataService;
Log.Info("Avviato QueueController");
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Lunghezza coda in fase di processing
/// </summary>
/// <returns></returns>
[HttpGet("ActLenght")]
public async Task<Dictionary<string, long>> ActLenght()
{
Dictionary<string, long> answ = new Dictionary<string, long>();
var actPend = await QDataServ.NumRequestPending();
answ.Add("pending", actPend);
var actProc = await QDataServ.NumRequestProcessing();
answ.Add("processing", actProc);
var actErr = await QDataServ.NumRequestErrors();
answ.Add("errors", actErr);
var actDone = await QDataServ.NumRequestDone();
answ.Add("done", actDone);
return answ;
}
/// <summary>
/// Cleanup dati delle code di calcolo
/// </summary>
/// <param name="passPhrase">Chiave x auth di reset</param>
/// <returns></returns>
[HttpPost("DCCacheCleanup")]
public async Task<string> DCCacheCleanup(string passPhrase)
{
string answ = "NA";
bool fatto = false;
if (passPhrase == "bbbBirdIsTheWord")
{
fatto = await QDataServ.DoorCalcCacheCleanup();
}
answ = fatto ? "OK" : "NO";
return answ;
}
/// <summary>
/// Reset delle code di chiamata x ripetere simulazione
/// </summary>
/// <param name="passPhrase">Chiave x auth di reset</param>
/// <returns></returns>
[HttpPost("ResetQueue")]
public async Task<string> ResetQueue(string passPhrase)
{
string answ = "NA";
bool fatto = false;
if (passPhrase == "bbbBirdIsTheWord")
{
fatto = await QDataServ.ResetQueue();
}
answ = fatto ? "OK" : "NO";
return answ;
}
/// <summary>
/// Invio elenco risultati elaborazioni (modalità boolean di esecuzione corretta)
/// </summary>
/// <param name="calcResults">Risultati elaborazioni in formato CalcResultDTO</param>
/// <returns></returns>
[HttpPost("SaveProcResult")]
public async Task<string> SaveProcResult(List<CalcResultDTO> calcResults)
{
string answ = "NA";
bool fatto = await QDataServ.SaveProcessingResult(calcResults);
answ = fatto ? "OK" : "NO";
return answ;
}
/// <summary>
/// Elenco richieste raggruppate x stato
/// </summary>
/// <returns></returns>
[HttpGet("StatusList")]
public async Task<Dictionary<string, Dictionary<string, string>>> StatusList()
{
Dictionary<string, Dictionary<string, string>> answ = new Dictionary<string, Dictionary<string, string>>();
var actPend = await QDataServ.RequestPending();
answ.Add("pending", actPend);
var actProc = await QDataServ.RequestProcessing();
answ.Add("processing", actProc);
var actErr = await QDataServ.RequestErr();
answ.Add("errors", actErr);
var actDone = await QDataServ.RequestDone();
answ.Add("done", actDone);
return answ;
}
/// <summary>
/// Chiede un numero massimo di items dalla coda NB:
/// - verranno tolti dalla coda FIFO richieste
/// - verranno messi nella coda FIFO processing
/// </summary>
/// <returns></returns>
[HttpGet("TakeNextItems")]
public async Task<Dictionary<string, string>> TakeProcessingItems(int numItems = 10)
{
var actQueue = await QDataServ.TakeProcessingItems(numItems);
return actQueue;
}
#endregion Public Methods
#region Private Fields
private static IConfiguration _configuration = null!;
private static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Private Properties
private QueueDataService QDataServ { get; set; } = null!;
#endregion Private Properties
}
}
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="myvar" value="myvalue" />
<!--
See https://github.com/nlog/nlog/wiki/Configuration-file
for information on customizing logging rules and outputs.
-->
<targets>
<!--
add your targets here
See https://github.com/nlog/NLog/wiki/Targets for possible targets.
See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
-->
<!--
Write events to a file with the date in the filename.
<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
-->
<target xsi:type="File" name="fileTarget" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=false} | ${message}" />
<target xsi:type="ColoredConsole" name="consoleTarget" layout="${longdate} | ${uppercase:${level}} | ${logger:shortName=true}| ${message}" />
</targets>
<rules>
<!-- add your logging rules here -->
<!--
Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
<logger name="*" minlevel="Debug" writeTo="f" />
-->
<logger name="*" minlevel="Trace" writeTo="consoleTarget" />
<!--<logger name="Microsoft.*" maxlevel="Info" final="true" />-->
<logger name="*" minlevel="Info" writeTo="fileTarget" />
</rules>
</nlog>
+93
View File
@@ -0,0 +1,93 @@
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Localization;
using StackExchange.Redis;
using StackExchange.Redis.Extensions.Core.Configuration;
using StackExchange.Redis.Extensions.Newtonsoft;
using System.Globalization;
using System.Text.Json.Serialization;
using WebDoorCreator.Data;
using WebDoorCreator.Data.Services;
var builder = WebApplication.CreateBuilder(args);
// configuration setup
ConfigurationManager configuration = builder.Configuration;
// Redis
var connStringRedis = configuration.GetConnectionString("Redis");
string redisSrvAddr = connStringRedis.Substring(0, connStringRedis.IndexOf(":"));
// avvio oggetto shared x redis...
var redisMultiplexer = ConnectionMultiplexer.Connect(connStringRedis);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// abilitazione x email management con MailKit
//builder.Services.AddTransient<IEmailSender, MailKitEmailSender>();
builder.Services.AddSingleton<IEmailSender, MailKitEmailSender>();
builder.Services.Configure<MailKitEmailSenderOptions>(options =>
{
options.Host_Address = configuration["ExternalProviders:MailKit:SMTP:Address"] ?? "";
options.Host_Port = Convert.ToInt32(configuration["ExternalProviders:MailKit:SMTP:Port"] ?? "");
options.Host_Username = configuration["ExternalProviders:MailKit:SMTP:Account"] ?? "";
options.Host_Password = configuration["ExternalProviders:MailKit:SMTP:Password"] ?? "";
options.Sender_EMail = configuration["ExternalProviders:MailKit:SMTP:SenderEmail"] ?? "";
options.Sender_Name = configuration["ExternalProviders:MailKit:SMTP:SenderName"] ?? "";
});
// aggiunta servizi x accesso dati...
builder.Services.AddControllers()
.AddJsonOptions(c => c.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve);
builder.Services.AddStackExchangeRedisExtensions<NewtonsoftSerializer>((options) =>
{
List<RedisConfiguration> newConf = new List<RedisConfiguration>();
var currConf = configuration.GetSection("Redis").Get<RedisConfiguration>();
if (currConf != null)
{
newConf.Add(currConf);
}
return newConf;
//return configuration.GetSection("Redis").Get<RedisConfiguration>();
});
builder.Services.AddSingleton<QueueDataService>();
builder.Services.AddSingleton<IConnectionMultiplexer>(redisMultiplexer);
var app = builder.Build();
// Configure the HTTP request pipeline.
// abilitato temporaneamente anche in iis01...
if (app.Environment.IsDevelopment() || app.Environment.IsStaging())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//// cultura IT...
//var supportedCultures = new[]{
// new CultureInfo("it-IT")
// };
//app.UseRequestLocalization(new RequestLocalizationOptions
//{
// DefaultRequestCulture = new RequestCulture("it-IT"),
// SupportedCultures = supportedCultures,
// FallBackToParentCultures = false
//});
//CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("it-IT");
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://iis04.egalware.com/WDC/SRV/swagger/index.html</SiteUrlToLaunchAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>c2109e71-4eae-4167-9052-175123ccc2bc</ProjectGuid>
<SelfContained>false</SelfContained>
<MSDeployServiceURL>https://iis04.egalware.com:8172/MsDeploy.axd</MSDeployServiceURL>
<DeployIisAppPath>Default Web Site/WDC/SRV</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>false</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>true</EnableMSDeployBackup>
<EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TimeStampOfAssociatedLegacyPublishXmlFile />
<EncryptedPassword>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAk75miMJLMkCTEelQutKpbwAAAAACAAAAAAADZgAAwAAAABAAAAB43BVhUmznhAu3pUfV1IfOAAAAAASAAACgAAAAEAAAAEV8hgbujDFfsMjS77NS2oYYAAAAUHPGFaVWgRqQPDU4wk5KGABmVHKko4/9FAAAANtaROBOcPHljx4RnmQHj5aHdtYk</EncryptedPassword>
<History>True|2023-05-11T15:35:09.5858697Z;True|2022-01-27T10:34:09.2346456+01:00;True|2022-01-27T10:13:36.3080675+01:00;True|2022-01-27T10:05:45.6649507+01:00;True|2022-01-26T14:34:16.5263189+01:00;True|2022-01-26T13:04:22.2336648+01:00;False|2022-01-26T13:04:06.0677616+01:00;True|2021-11-08T09:03:37.7855257+01:00;True|2021-11-08T09:03:34.8263479+01:00;True|2021-11-08T09:03:31.8889390+01:00;True|2021-10-29T16:19:33.6539408+02:00;True|2021-10-29T16:19:28.2082360+02:00;True|2021-10-26T16:12:11.7740950+02:00;True|2021-10-26T16:11:56.2014641+02:00;True|2021-10-26T16:11:22.2897842+02:00;False|2021-10-26T16:10:58.3733037+02:00;False|2021-10-26T16:10:29.4793991+02:00;True|2021-10-21T17:35:11.9761128+02:00;True|2021-10-18T20:22:00.9305399+02:00;True|2021-10-18T18:32:29.4558070+02:00;True|2021-10-18T18:32:22.8950294+02:00;True|2021-10-18T18:16:13.7563877+02:00;True|2021-10-18T18:15:48.5678387+02:00;True|2021-10-18T12:45:45.7228681+02:00;True|2021-10-18T12:14:22.3221605+02:00;True|2021-10-18T12:14:15.7373530+02:00;True|2021-10-18T12:10:43.8607301+02:00;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://iis01.egalware.com/WDC/SRV/swagger/index.html</SiteUrlToLaunchAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>c2109e71-4eae-4167-9052-175123ccc2bc</ProjectGuid>
<SelfContained>false</SelfContained>
<MSDeployServiceURL>https://iis01.egalware.com:8172/MsDeploy.axd</MSDeployServiceURL>
<DeployIisAppPath>Default Web Site/WDC/SRV</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>false</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>true</EnableMSDeployBackup>
<EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>https://iis02.egalware.com/WDC/SRV/swagger/index.html</SiteUrlToLaunchAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>c2109e71-4eae-4167-9052-175123ccc2bc</ProjectGuid>
<SelfContained>false</SelfContained>
<MSDeployServiceURL>https://iis02.egalware.com:8172/MsDeploy.axd</MSDeployServiceURL>
<DeployIisAppPath>Default Web Site/WDC/SRV</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>false</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>true</EnableMSDeployBackup>
<EnableMsDeployAppOffline>true</EnableMsDeployAppOffline>
<UserName>jenkins</UserName>
<_SavePWD>true</_SavePWD>
<_TargetId>IISWebDeploy</_TargetId>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<WebPublishMethod>Package</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
<ExcludeApp_Data>false</ExcludeApp_Data>
<ProjectGuid>c2109e71-4eae-4167-9052-175123ccc2bc</ProjectGuid>
<DesktopBuildPackageLocation>bin\publish\WDC.API.zip</DesktopBuildPackageLocation>
<PackageAsSingleFile>true</PackageAsSingleFile>
<DeployIisAppPath>Default Web Site/WDC/SRV</DeployIisAppPath>
<_TargetId>IISWebDeployPackage</_TargetId>
</PropertyGroup>
</Project>
@@ -0,0 +1,31 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:33043",
"sslPort": 44387
}
},
"profiles": {
"WebDoorCreator.API": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7043;http://localhost:5240",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
@@ -0,0 +1,35 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS-PROD.pubxml" />
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS01.pubxml" />
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IIS02.pubxml" />
<_WebToolingArtifacts Remove="Properties\PublishProfiles\IISProfile.pubxml" />
</ItemGroup>
<ItemGroup>
<None Include="Properties\PublishProfiles\IIS-PROD.pubxml.user" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="NLog" Version="5.1.2" />
<PackageReference Include="StackExchange.Redis" Version="2.6.96" />
<PackageReference Include="StackExchange.Redis.Extensions.AspNetCore" Version="9.1.0" />
<PackageReference Include="StackExchange.Redis.Extensions.Core" Version="9.1.0" />
<PackageReference Include="StackExchange.Redis.Extensions.Newtonsoft" Version="9.1.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WebDoorCreator.Core\WebDoorCreator.Core.csproj" />
<ProjectReference Include="..\WebDoorCreator.Data\WebDoorCreator.Data.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
+30
View File
@@ -0,0 +1,30 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Redis": "nkcredis.steamware.net:6379, DefaultDatabase=11, connectTimeout=5000, syncTimeout=5000, asyncTimeout=5000, abortConnect=false, ssl=false, password=BtN9Py1wtLfLRvmzWnOPJ7RytDM+CLiVsJ/16zduNTlV8IOPGNrtzJSXPUnImA5PqmUMhKaUqo9NdHIG",
"WDC.DB": "Server=SQL2016DEV;Database=WebDoorCreator; User ID=sa;Password=keyhammer16; integrated security=False; MultipleActiveResultSets=True; App=WebDoorCreator.UI;"
},
"ExternalProviders": {
"MailKit": {
"SMTP": {
"Address": "smtp-mail.outlook.com",
"Port": "587",
"Account": "steamwarebot@outlook.it",
"Password": "siamoInViaNazionale93",
"SenderEmail": "steamwarebot@outlook.it",
"SenderName": "Steamware Email BOT"
}
}
},
"MailDest": {
"Admin": "samuele@steamware.net",
"ProjCheck": "samuele.locatelli@egalware.com,mara.baroni@egalware.com",
"TimbCheck": "samuele.locatelli@egalware.com,mara.baroni@egalware.com"
}
}
+31
View File
@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.33530.505
MinimumVisualStudioVersion = 10.0.40219.1
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WebDoorCreator.CamSrv", "WebDoorCreator.CamSrv\WebDoorCreator.CamSrv.vbproj", "{96266312-9739-4F12-A6C2-16C1CAFDDA6E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebDoorCreator.SDK", "WebDoorCreator.SDK\WebDoorCreator.SDK.csproj", "{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{96266312-9739-4F12-A6C2-16C1CAFDDA6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{96266312-9739-4F12-A6C2-16C1CAFDDA6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{96266312-9739-4F12-A6C2-16C1CAFDDA6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{96266312-9739-4F12-A6C2-16C1CAFDDA6E}.Release|Any CPU.Build.0 = Release|Any CPU
{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {A4FC2F6F-69CF-4644-81BC-1C3B546DA61F}
EndGlobalSection
EndGlobal
+15
View File
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<probing privatePath="lib;libs" xmlns="" />
</assemblyBinding>
</runtime>
</configuration>
+38
View File
@@ -0,0 +1,38 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.WebDoorCreator.CamSrv.ProcMan
End Sub
End Class
End Namespace
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<MySubMain>true</MySubMain>
<MainForm>MainForm</MainForm>
<SingleInstance>false</SingleInstance>
<ShutdownMode>0</ShutdownMode>
<EnableVisualStyles>true</EnableVisualStyles>
<AuthenticationMode>0</AuthenticationMode>
<SaveMySettingsOnExit>true</SaveMySettingsOnExit>
<HighDpiMpde>false</HighDpiMpde>
</MyApplicationData>
@@ -0,0 +1,35 @@
Imports System
Imports System.Reflection
Imports System.Runtime.InteropServices
' General Information about an assembly is controlled through the following
' set of attributes. Change these attribute values to modify the information
' associated with an assembly.
' Review the values of the assembly attributes
<Assembly: AssemblyTitle("WebDoorCreator.CamSrv")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("EgalWare")>
<Assembly: AssemblyProduct("WebDoorCreator.CamSrv")>
<Assembly: AssemblyCopyright("Copyright © 2023")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
'The following GUID is for the ID of the typelib if this project is exposed to COM
<Assembly: Guid("eecac567-5d92-49de-a5e5-9da43bfde795")>
' Version information for an assembly consists of the following four values:
'
' Major Version
' Minor Version
' Build Number
' Revision
'
' You can specify all the values or you can default the Build and Revision Numbers
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("1.0.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
+63
View File
@@ -0,0 +1,63 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Imports System
Namespace My.Resources
'This class was auto-generated by the StronglyTypedResourceBuilder
'class via a tool like ResGen or Visual Studio.
'To add or remove a member, edit your .ResX file then rerun ResGen
'with the /str option, or rebuild your VS project.
'''<summary>
''' A strongly-typed resource class, for looking up localized strings, etc.
'''</summary>
<Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0"), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
Friend Module Resources
Private resourceMan As Global.System.Resources.ResourceManager
Private resourceCulture As Global.System.Globalization.CultureInfo
'''<summary>
''' Returns the cached ResourceManager instance used by this class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
Get
If Object.ReferenceEquals(resourceMan, Nothing) Then
Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WebDoorCreator.CamSrv.Resources", GetType(Resources).Assembly)
resourceMan = temp
End If
Return resourceMan
End Get
End Property
'''<summary>
''' Overrides the current thread's CurrentUICulture property for all
''' resource lookups using this strongly typed resource class.
'''</summary>
<Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Friend Property Culture() As Global.System.Globalization.CultureInfo
Get
Return resourceCulture
End Get
Set
resourceCulture = value
End Set
End Property
End Module
End Namespace
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+73
View File
@@ -0,0 +1,73 @@
'------------------------------------------------------------------------------
' <auto-generated>
' This code was generated by a tool.
' Runtime Version:4.0.30319.42000
'
' Changes to this file may cause incorrect behavior and will be lost if
' the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------
Option Strict On
Option Explicit On
Namespace My
<Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.5.0.0"), _
Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
#Region "My.Settings Auto-Save Functionality"
#If _MyType = "WindowsForms" Then
Private Shared addedHandler As Boolean
Private Shared addedHandlerLockObject As New Object
<Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
If My.Application.SaveMySettingsOnExit Then
My.Settings.Save()
End If
End Sub
#End If
#End Region
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.WebDoorCreator.CamSrv.My.MySettings
Get
Return Global.WebDoorCreator.CamSrv.My.MySettings.Default
End Get
End Property
End Module
End Namespace
@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
+404
View File
@@ -0,0 +1,404 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class ProcMan
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ProcMan))
Me.btnTestPing = New System.Windows.Forms.Button()
Me.lblpingTest = New System.Windows.Forms.Label()
Me.lblTestAlive = New System.Windows.Forms.Label()
Me.btnTestAlive = New System.Windows.Forms.Button()
Me.btnResetQueue = New System.Windows.Forms.Button()
Me.txtOut = New System.Windows.Forms.TextBox()
Me.btnQueueStatus = New System.Windows.Forms.Button()
Me.StartProcess = New System.Windows.Forms.Button()
Me.StopProcess = New System.Windows.Forms.Button()
Me.StatusStrip1 = New System.Windows.Forms.StatusStrip()
Me.tsProgBar = New System.Windows.Forms.ToolStripProgressBar()
Me.txtQueue = New System.Windows.Forms.TextBox()
Me.Label1 = New System.Windows.Forms.Label()
Me.txtNumThread = New System.Windows.Forms.TextBox()
Me.lblRunning = New System.Windows.Forms.Label()
Me.TimerUI = New System.Windows.Forms.Timer(Me.components)
Me.TimerProgBar = New System.Windows.Forms.Timer(Me.components)
Me.LISTThreadStatus = New System.Windows.Forms.ListView()
Me.chThread = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.chTime = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.chOther = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.ThreadCurrentStatusList = New System.Windows.Forms.ListView()
Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.chkStatAggr = New System.Windows.Forms.CheckBox()
Me.btnExportStats = New System.Windows.Forms.Button()
Me.chkAutoRestart = New System.Windows.Forms.CheckBox()
Me.TimerCheck = New System.Windows.Forms.Timer(Me.components)
Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.StatusStrip1.SuspendLayout()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
'
'btnTestPing
'
Me.btnTestPing.Location = New System.Drawing.Point(17, 16)
Me.btnTestPing.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.btnTestPing.Name = "btnTestPing"
Me.btnTestPing.Size = New System.Drawing.Size(100, 28)
Me.btnTestPing.TabIndex = 0
Me.btnTestPing.Text = "Test Ping"
Me.btnTestPing.UseVisualStyleBackColor = True
'
'lblpingTest
'
Me.lblpingTest.AutoSize = True
Me.lblpingTest.Location = New System.Drawing.Point(153, 22)
Me.lblpingTest.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0)
Me.lblpingTest.Name = "lblpingTest"
Me.lblpingTest.Size = New System.Drawing.Size(28, 16)
Me.lblpingTest.TabIndex = 1
Me.lblpingTest.Text = "???"
'
'lblTestAlive
'
Me.lblTestAlive.AutoSize = True
Me.lblTestAlive.Location = New System.Drawing.Point(365, 22)
Me.lblTestAlive.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0)
Me.lblTestAlive.Name = "lblTestAlive"
Me.lblTestAlive.Size = New System.Drawing.Size(28, 16)
Me.lblTestAlive.TabIndex = 3
Me.lblTestAlive.Text = "???"
'
'btnTestAlive
'
Me.btnTestAlive.Location = New System.Drawing.Point(229, 16)
Me.btnTestAlive.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.btnTestAlive.Name = "btnTestAlive"
Me.btnTestAlive.Size = New System.Drawing.Size(100, 28)
Me.btnTestAlive.TabIndex = 2
Me.btnTestAlive.Text = "Test Alive"
Me.btnTestAlive.UseVisualStyleBackColor = True
'
'btnResetQueue
'
Me.btnResetQueue.Location = New System.Drawing.Point(17, 201)
Me.btnResetQueue.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.btnResetQueue.Name = "btnResetQueue"
Me.btnResetQueue.Size = New System.Drawing.Size(100, 28)
Me.btnResetQueue.TabIndex = 6
Me.btnResetQueue.Text = "Reset Q"
Me.btnResetQueue.UseVisualStyleBackColor = True
'
'txtOut
'
Me.txtOut.BackColor = System.Drawing.SystemColors.ControlDarkDark
Me.txtOut.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.txtOut.ForeColor = System.Drawing.Color.Yellow
Me.txtOut.Location = New System.Drawing.Point(16, 240)
Me.txtOut.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.txtOut.MinimumSize = New System.Drawing.Size(79, 147)
Me.txtOut.Multiline = True
Me.txtOut.Name = "txtOut"
Me.txtOut.Size = New System.Drawing.Size(99, 173)
Me.txtOut.TabIndex = 7
Me.txtOut.Text = "---"
'
'btnQueueStatus
'
Me.btnQueueStatus.Location = New System.Drawing.Point(17, 79)
Me.btnQueueStatus.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.btnQueueStatus.Name = "btnQueueStatus"
Me.btnQueueStatus.Size = New System.Drawing.Size(100, 28)
Me.btnQueueStatus.TabIndex = 8
Me.btnQueueStatus.Text = "Stato Queue"
Me.btnQueueStatus.UseVisualStyleBackColor = True
'
'StartProcess
'
Me.StartProcess.Location = New System.Drawing.Point(17, 23)
Me.StartProcess.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.StartProcess.Name = "StartProcess"
Me.StartProcess.Size = New System.Drawing.Size(100, 28)
Me.StartProcess.TabIndex = 9
Me.StartProcess.Text = "Start"
Me.StartProcess.UseVisualStyleBackColor = True
'
'StopProcess
'
Me.StopProcess.Location = New System.Drawing.Point(325, 22)
Me.StopProcess.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.StopProcess.Name = "StopProcess"
Me.StopProcess.Size = New System.Drawing.Size(100, 28)
Me.StopProcess.TabIndex = 10
Me.StopProcess.Text = "Stop"
Me.StopProcess.UseVisualStyleBackColor = True
'
'StatusStrip1
'
Me.StatusStrip1.ImageScalingSize = New System.Drawing.Size(20, 20)
Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.tsProgBar})
Me.StatusStrip1.Location = New System.Drawing.Point(0, 526)
Me.StatusStrip1.Name = "StatusStrip1"
Me.StatusStrip1.Padding = New System.Windows.Forms.Padding(1, 0, 19, 0)
Me.StatusStrip1.Size = New System.Drawing.Size(736, 22)
Me.StatusStrip1.TabIndex = 11
Me.StatusStrip1.Text = "StatusStrip1"
'
'tsProgBar
'
Me.tsProgBar.Name = "tsProgBar"
Me.tsProgBar.Size = New System.Drawing.Size(133, 14)
Me.tsProgBar.Step = 1
'
'txtQueue
'
Me.txtQueue.BackColor = System.Drawing.SystemColors.ControlDarkDark
Me.txtQueue.Font = New System.Drawing.Font("Microsoft Sans Serif", 7.0!)
Me.txtQueue.ForeColor = System.Drawing.SystemColors.Window
Me.txtQueue.Location = New System.Drawing.Point(17, 114)
Me.txtQueue.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.txtQueue.Multiline = True
Me.txtQueue.Name = "txtQueue"
Me.txtQueue.Size = New System.Drawing.Size(99, 78)
Me.txtQueue.TabIndex = 12
Me.txtQueue.Text = "Q Status:"
'
'Label1
'
Me.Label1.AutoSize = True
Me.Label1.Location = New System.Drawing.Point(132, 30)
Me.Label1.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(35, 16)
Me.Label1.TabIndex = 13
Me.Label1.Text = "num:"
'
'txtNumThread
'
Me.txtNumThread.Location = New System.Drawing.Point(171, 26)
Me.txtNumThread.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.txtNumThread.Name = "txtNumThread"
Me.txtNumThread.Size = New System.Drawing.Size(41, 22)
Me.txtNumThread.TabIndex = 14
Me.txtNumThread.Text = "1"
Me.txtNumThread.TextAlign = System.Windows.Forms.HorizontalAlignment.Right
'
'lblRunning
'
Me.lblRunning.AutoSize = True
Me.lblRunning.Location = New System.Drawing.Point(221, 30)
Me.lblRunning.Margin = New System.Windows.Forms.Padding(4, 0, 4, 0)
Me.lblRunning.MinimumSize = New System.Drawing.Size(100, 0)
Me.lblRunning.Name = "lblRunning"
Me.lblRunning.Size = New System.Drawing.Size(100, 16)
Me.lblRunning.TabIndex = 15
Me.lblRunning.Text = "running: -"
Me.lblRunning.TextAlign = System.Drawing.ContentAlignment.MiddleCenter
'
'TimerUI
'
Me.TimerUI.Interval = 800
'
'TimerProgBar
'
'
'LISTThreadStatus
'
Me.LISTThreadStatus.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.chThread, Me.chTime, Me.chOther})
Me.LISTThreadStatus.HideSelection = False
Me.LISTThreadStatus.Location = New System.Drawing.Point(17, 59)
Me.LISTThreadStatus.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.LISTThreadStatus.Name = "LISTThreadStatus"
Me.LISTThreadStatus.Size = New System.Drawing.Size(536, 173)
Me.LISTThreadStatus.TabIndex = 16
Me.LISTThreadStatus.UseCompatibleStateImageBehavior = False
Me.LISTThreadStatus.View = System.Windows.Forms.View.Details
'
'chThread
'
Me.chThread.Text = "Thread"
Me.chThread.Width = 100
'
'chTime
'
Me.chTime.Text = "Time"
Me.chTime.Width = 100
'
'chOther
'
Me.chOther.Text = "Other"
Me.chOther.Width = 100
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.ThreadCurrentStatusList)
Me.GroupBox1.Controls.Add(Me.chkStatAggr)
Me.GroupBox1.Controls.Add(Me.LISTThreadStatus)
Me.GroupBox1.Controls.Add(Me.lblRunning)
Me.GroupBox1.Controls.Add(Me.txtNumThread)
Me.GroupBox1.Controls.Add(Me.StopProcess)
Me.GroupBox1.Controls.Add(Me.Label1)
Me.GroupBox1.Controls.Add(Me.StartProcess)
Me.GroupBox1.Location = New System.Drawing.Point(157, 79)
Me.GroupBox1.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Padding = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.GroupBox1.Size = New System.Drawing.Size(563, 438)
Me.GroupBox1.TabIndex = 17
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Threads"
'
'ThreadCurrentStatusList
'
Me.ThreadCurrentStatusList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader4, Me.ColumnHeader3})
Me.ThreadCurrentStatusList.HideSelection = False
Me.ThreadCurrentStatusList.Location = New System.Drawing.Point(17, 257)
Me.ThreadCurrentStatusList.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.ThreadCurrentStatusList.Name = "ThreadCurrentStatusList"
Me.ThreadCurrentStatusList.Size = New System.Drawing.Size(536, 173)
Me.ThreadCurrentStatusList.TabIndex = 18
Me.ThreadCurrentStatusList.UseCompatibleStateImageBehavior = False
Me.ThreadCurrentStatusList.View = System.Windows.Forms.View.Details
'
'ColumnHeader1
'
Me.ColumnHeader1.Text = "Thread"
Me.ColumnHeader1.Width = 100
'
'ColumnHeader2
'
Me.ColumnHeader2.Text = "Thread Status"
Me.ColumnHeader2.Width = 100
'
'chkStatAggr
'
Me.chkStatAggr.AutoSize = True
Me.chkStatAggr.Checked = True
Me.chkStatAggr.CheckState = System.Windows.Forms.CheckState.Checked
Me.chkStatAggr.Location = New System.Drawing.Point(435, 26)
Me.chkStatAggr.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.chkStatAggr.Name = "chkStatAggr"
Me.chkStatAggr.Size = New System.Drawing.Size(91, 20)
Me.chkStatAggr.TabIndex = 17
Me.chkStatAggr.Text = "Aggr Stats"
Me.chkStatAggr.UseVisualStyleBackColor = True
'
'btnExportStats
'
Me.btnExportStats.Location = New System.Drawing.Point(612, 16)
Me.btnExportStats.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.btnExportStats.Name = "btnExportStats"
Me.btnExportStats.Size = New System.Drawing.Size(100, 28)
Me.btnExportStats.TabIndex = 18
Me.btnExportStats.Text = "Export Stats"
Me.btnExportStats.UseVisualStyleBackColor = True
'
'chkAutoRestart
'
Me.chkAutoRestart.AutoSize = True
Me.chkAutoRestart.Location = New System.Drawing.Point(465, 21)
Me.chkAutoRestart.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.chkAutoRestart.Name = "chkAutoRestart"
Me.chkAutoRestart.Size = New System.Drawing.Size(99, 20)
Me.chkAutoRestart.TabIndex = 19
Me.chkAutoRestart.Text = "AutoRestart"
Me.chkAutoRestart.UseVisualStyleBackColor = True
'
'TimerCheck
'
Me.TimerCheck.Interval = 30000
'
'ColumnHeader3
'
Me.ColumnHeader3.DisplayIndex = 2
Me.ColumnHeader3.Text = "Process Status"
Me.ColumnHeader3.Width = 100
'
'ColumnHeader4
'
Me.ColumnHeader4.DisplayIndex = 3
Me.ColumnHeader4.Text = "Thread Phase"
Me.ColumnHeader4.Width = 100
'
'ProcMan
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(736, 548)
Me.Controls.Add(Me.chkAutoRestart)
Me.Controls.Add(Me.btnExportStats)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.txtQueue)
Me.Controls.Add(Me.StatusStrip1)
Me.Controls.Add(Me.btnQueueStatus)
Me.Controls.Add(Me.txtOut)
Me.Controls.Add(Me.btnResetQueue)
Me.Controls.Add(Me.lblTestAlive)
Me.Controls.Add(Me.btnTestAlive)
Me.Controls.Add(Me.lblpingTest)
Me.Controls.Add(Me.btnTestPing)
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4)
Me.Name = "ProcMan"
Me.Text = "MainForm"
Me.StatusStrip1.ResumeLayout(False)
Me.StatusStrip1.PerformLayout()
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents btnTestPing As Button
Friend WithEvents lblpingTest As Label
Friend WithEvents lblTestAlive As Label
Friend WithEvents btnTestAlive As Button
Friend WithEvents btnResetQueue As Button
Friend WithEvents txtOut As TextBox
Friend WithEvents btnQueueStatus As Button
Friend WithEvents StartProcess As Button
Friend WithEvents StopProcess As Button
Friend WithEvents StatusStrip1 As StatusStrip
Friend WithEvents tsProgBar As ToolStripProgressBar
Friend WithEvents txtQueue As TextBox
Friend WithEvents Label1 As Label
Friend WithEvents txtNumThread As TextBox
Friend WithEvents lblRunning As Label
Friend WithEvents TimerUI As Timer
Friend WithEvents TimerProgBar As Timer
Friend WithEvents LISTThreadStatus As ListView
Friend WithEvents GroupBox1 As GroupBox
Friend WithEvents chThread As ColumnHeader
Friend WithEvents chTime As ColumnHeader
Friend WithEvents chOther As ColumnHeader
Friend WithEvents chkStatAggr As CheckBox
Friend WithEvents btnExportStats As Button
Friend WithEvents chkAutoRestart As CheckBox
Friend WithEvents TimerCheck As Timer
Friend WithEvents ThreadCurrentStatusList As ListView
Friend WithEvents ColumnHeader1 As ColumnHeader
Friend WithEvents ColumnHeader2 As ColumnHeader
Friend WithEvents ColumnHeader3 As ColumnHeader
Friend WithEvents ColumnHeader4 As ColumnHeader
End Class
File diff suppressed because it is too large Load Diff
+946
View File
@@ -0,0 +1,946 @@
Imports System.IO
Imports System.Net.NetworkInformation
Imports System.Text
Imports System.Threading
Imports WebDoorCreator.SDK
Public Class ProcMan
#Region "Public Constructors"
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
synchronizationContext = SynchronizationContext.Current
m_bStopProcess = True
SetMaxCamInstances(1)
StartUiThread()
' preparo lista thread...
LISTThreadStatus.BeginUpdate()
LISTThreadStatus.Items.Clear()
LISTThreadStatus.Items.Add(New ListViewItem(New String() {"init", "waiting", "-"}))
LISTThreadStatus.EndUpdate()
' verifico SE avviare
If chkAutoRestart.Checked Then
startAllThreads()
End If
CheckStartAutoRestart()
End Sub
#End Region
#Region "Private Fields"
Private ReadOnly synchronizationContext As SynchronizationContext
' caricamento del NEXT STACK da redis (come oggetto) PROD http : https://iis01.egalware.com/WDC/SRV/
' DEV: https : https://localhost:7043/
Dim baseIp As String = "iis01.egalware.com"
Dim baseUrl As String = "https://iis01.egalware.com/WDC/SRV/"
Dim codPost As String = "WRK001"
' nome macchina calcolo
Dim currWDC As WDC = New WDC(baseIp, baseUrl, codPost)
Dim idxSim As Integer = 0
Dim m_bExecutionThreadStoped As Boolean = False
Dim m_bStopProcess As Boolean = False
Dim m_ExecutionThread As Thread
'Private m_MaxCamInstances As Integer = 8
Private m_MaxCamInstances As Integer = 1
Dim risultatoPing As PingReply = Nothing
Dim ThreadList As Thread()
Dim ThreadDataList As ThreadData()
#End Region
Enum ThreadOperations As Integer
WaitingData = 1
FoundRequest = 2
WritingDdf = 3
ProcessingDdf = 4
ReadingSvg = 5
SendResult = 6
Closed = 10
End Enum
Private Class ThreadData
Private m_ThreadOperation As ThreadOperations
Public ReadOnly Property ThreadOperation As ThreadOperations
Get
Return m_ThreadOperation
End Get
End Property
Friend Sub SetThreadOperation(value As ThreadOperations)
m_ThreadOperation = value
End Sub
Private m_Process As Process
Public ReadOnly Property Process As Process
Get
Return m_Process
End Get
End Property
Friend Sub SetProcess(value As Process)
m_Process = value
End Sub
End Class
#Region "Private Methods"
Private Sub UpdateThreadCurrentStatus()
synchronizationContext.Post(New SendOrPostCallback(
Sub(o)
ThreadCurrentStatusList.BeginUpdate()
ThreadCurrentStatusList.Items.Clear()
If Not IsNothing(ThreadList) Then
For ThreadIndex = 0 To ThreadList.Count - 1
If Not IsNothing(ThreadList(ThreadIndex)) Then
Dim ThreadProcessState As String = "Nothing"
'If Not IsNothing(ThreadDataList(ThreadIndex)) AndAlso Not IsNothing(ThreadDataList(ThreadIndex).Process) AndAlso
'Not IsNothing(ThreadDataList(ThreadIndex).Process.HasExited) Then
' ThreadProcessState = ThreadDataList(ThreadIndex).Process.HasExited
'End If
ThreadCurrentStatusList.Items.Add(New ListViewItem(New String() {ThreadIndex,
ThreadList(ThreadIndex).ThreadState.ToString(),
ThreadProcessState,
ThreadDataList(ThreadIndex).ThreadOperation.ToString()}))
Else
ThreadCurrentStatusList.Items.Add(New ListViewItem(New String() {ThreadIndex,
"nothing"}))
End If
Next
End If
ThreadCurrentStatusList.EndUpdate()
End Sub), "")
End Sub
Private Sub btnQueueStatus_Click(sender As Object, e As EventArgs) Handles btnQueueStatus.Click
DisplayQueueStatus()
End Sub
Private Sub btnResetQueue_Click(sender As Object, e As EventArgs) Handles btnResetQueue.Click
currWDC.ResetQueue()
txtOut.Text = "Queue Resetted!"
End Sub
Private Sub btnTestAlive_Click(sender As Object, e As EventArgs) Handles btnTestAlive.Click
Dim answ As String = ""
If (currWDC.testAlive) Then
lblTestAlive.Text = "Server Alive!!!"
Else
lblTestAlive.Text = "Alive test failed!"
End If
End Sub
Private Sub btnTestPing_Click(sender As Object, e As EventArgs) Handles btnTestPing.Click
' chiamo test ping...
risultatoPing = currWDC.testPing
lblpingTest.Text = risultatoPing.Status.ToString()
End Sub
Private Sub DisplayQueueStatus()
Dim queueStatus As New Dictionary(Of String, Long)
queueStatus = currWDC.queueStatus
Dim sb As StringBuilder
sb = New StringBuilder
For Each item As KeyValuePair(Of String, Long) In queueStatus
sb.AppendLine($"{item.Key}: {item.Value}")
Next
sb.AppendLine()
txtQueue.Text = sb.ToString()
txtQueue.Invalidate()
End Sub
Private Sub ExecutionProcess()
' recupero Id dei DDF
Dim sDdfRoot As String = "c:\EgtData\WebDoor\Ddf"
Dim sCurrDdfDir As String = ""
Dim nDdfId As Integer = 1
Dim bStopMainProcess As Boolean = False
Dim n30SecCounter As Integer = 0
While Not bStopMainProcess
bStopMainProcess = m_bStopProcess
Dim bOk As Boolean = False
While Not bOk
' ogni 30 secondi
If n30SecCounter = 30 OrElse n30SecCounter = 0 Then
' verifica connessione
Dim risultatoPing As PingReply = currWDC.testPing
bOk = risultatoPing.Status = IPStatus.Success
If bOk Then
bOk = currWDC.testAlive
End If
Else
bOk = True
End If
' se connessione non ok o processo fermato, fermo i thread
If Not bOk OrElse bStopMainProcess Then
If Not IsNothing(ThreadList) AndAlso ThreadList.Count > 0 AndAlso Not IsNothing(ThreadList(0)) Then
' li fermo
m_bStopProcess = True
' verifico siano terminati
Dim bOneNotEnded As Boolean = True
While bOneNotEnded
bOneNotEnded = False
For Each Thread In ThreadList
If Not IsNothing(Thread) Then
If Thread.IsAlive Then
bOneNotEnded = True
End If
End If
Next
End While
' pulisco la lista
For ThreadIndex = 0 To ThreadList.Count - 1
ThreadList(ThreadIndex) = Nothing
Next
End If
If bStopMainProcess Then
m_bExecutionThreadStoped = True
Return
End If
End If
If Not bOk Then Thread.Sleep(10)
End While
If bOk AndAlso (IsNothing(ThreadList) OrElse ThreadList.Count = 0 OrElse IsNothing(ThreadList(0))) Then
ThreadList = New Thread(m_MaxCamInstances - 1) {}
ThreadDataList = New ThreadData(m_MaxCamInstances - 1) {}
For nThreadIndex = 0 To m_MaxCamInstances - 1
Dim ThreadId As Integer = nThreadIndex
ThreadList(nThreadIndex) = New Thread(Sub()
ThreadFunction(ThreadId)
End Sub)
ThreadList(nThreadIndex).SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
ThreadList(nThreadIndex).Start()
Thread.Sleep(10)
Next
End If
' se qualche processo in stop, lo faccio ripartire
For ThreadIndex = 0 To ThreadList.Count - 1
Dim Thread = ThreadList(ThreadIndex)
If Thread.ThreadState = ThreadState.Stopped AndAlso Thread.ThreadState = ThreadState.Aborted AndAlso
Thread.ThreadState = ThreadState.Suspended Then
Thread.Abort()
Dim ThreadId As Integer = ThreadIndex
Thread = New Thread(Sub()
ThreadFunction(ThreadId)
End Sub)
End If
Next
If n30SecCounter <= 30 Then
n30SecCounter += 1
Else
n30SecCounter = 1
End If
Thread.Sleep(1000)
End While
End Sub
Private Function GetFileContent(ByVal filePath As String, ByRef fileContent As String) As Boolean
Dim bOk As Boolean = File.Exists(filePath)
If bOk Then
Try
fileContent = File.ReadAllText(filePath)
Catch ex As Exception
bOk = False
fileContent = ""
End Try
End If
Return bOk
End Function
Private Sub performBarAdvance()
synchronizationContext.Post(New SendOrPostCallback(
Sub(o)
tsProgBar.PerformStep()
If tsProgBar.Value >= tsProgBar.Maximum Then
tsProgBar.Value = 0
End If
tsProgBar.Invalidate()
End Sub
), "")
End Sub
Private Sub performUpdateUI()
synchronizationContext.Post(New SendOrPostCallback(
Sub(o)
'verifico thread attivi e se calano --> riavvia..
If ThreadCount() <> m_MaxCamInstances And Not m_bStopProcess Then
stopAllThreads()
Thread.Sleep(100)
startAllThreads()
End If
lblRunning.Text = $"threads: {ThreadCount()}/{m_MaxCamInstances}"
lblRunning.Invalidate()
DisplayQueueStatus()
' colore btn start / stop...
If m_bStopProcess Then
StartProcess.BackColor = ButtonBase.DefaultBackColor
StartProcess.ForeColor = ButtonBase.DefaultForeColor
StopProcess.BackColor = Color.Green
StopProcess.ForeColor = Color.White
Else
StartProcess.BackColor = Color.Green
StartProcess.ForeColor = Color.White
StopProcess.BackColor = ButtonBase.DefaultBackColor
StopProcess.ForeColor = ButtonBase.DefaultForeColor
End If
End Sub
), "")
End Sub
Private Sub SetMaxCamInstances(value As Integer)
' Numero di core logici da utilizzare (minimo tra presenti sul PC e imposti da INI)
Dim nMaxThread As Integer = Math.Min(Environment.ProcessorCount, value)
m_MaxCamInstances = nMaxThread
End Sub
Private Sub startAllThreads()
m_bStopProcess = False
m_ExecutionThread = New Thread(Sub()
ExecutionProcess()
End Sub)
m_ExecutionThread.SetApartmentState(ApartmentState.STA)
' avvio thread di gestione della macchina che avvia la connessione
m_ExecutionThread.Start()
#If False Then
'' recupero Id dei DDF
'Dim sDdfRoot As String = "c:\EgtData\WebDoor\Ddf"
'Dim sCurrDdfDir As String = ""
'Dim nDdfId As Integer = 1
'' Numero di core logici da utilizzare (minimo tra presenti sul PC e imposti da INI)
'Dim nMaxThread As Integer = Math.Min(Environment.ProcessorCount, m_MaxCamInstances)
'Dim bStopMainProcess As Boolean = False
'Dim n30SecCounter As Integer = 0
'While Not bStopMainProcess
' bStopMainProcess = m_bStopProcess
' Dim bOk As Boolean = False
' While Not bOk
' ' ogni 30 secondi
' If n30SecCounter = 30 OrElse n30SecCounter = 0 Then
' ' verifica connessione
' Dim risultatoPing As PingReply = currWDC.testPing
' bOk = risultatoPing.Status = IPStatus.Success
' If bOk Then
' bOk = currWDC.testAlive
' End If
' Else bOk = True
' End If
' ' se connessione non ok o processo fermato, fermo i thread
' If Not bOk OrElse bStopMainProcess Then
' If Not IsNothing(ThreadList) AndAlso ThreadList.Count > 0 Then
' ' li fermo
' m_bStopProcess = True
' ' verifico siano terminati
' Dim bOneNotEnded As Boolean = True
' While bOneNotEnded
' bOneNotEnded = False
' For Each Thread In ThreadList
' If Thread.IsAlive Then
' bOneNotEnded = True
' Exit For
' End If
' Next
' End While
' ' pulisco la lista
' For Each Thread In ThreadList
' Thread = Nothing
' Next
' End If
' If bStopMainProcess Then Return
' End If
' If Not bOk Then Thread.Sleep(10)
' End While
' If bOk AndAlso (IsNothing(ThreadList) OrElse ThreadList.Count = 0) Then
' ThreadList = New Thread(nMaxThread - 1) {}
' For nThreadIndex = 0 To nMaxThread - 1
' ThreadList(nThreadIndex) = New Thread(Sub()
' ThreadFunction()
' End Sub)
' ThreadList(nThreadIndex).SetApartmentState(ApartmentState.STA)
' ' avvio thread di gestione della macchina che avvia la connessione
' ThreadList(nThreadIndex).Start()
' Next
' End If
' If n30SecCounter <= 30 Then
' n30SecCounter += 1
' Else
' n30SecCounter = 1
' End If
' Thread.Sleep(1000)
'End While
'Dim DdfDirs As String() = Directory.GetDirectories(sDdfRoot)
'If DdfDirs.Count = 0 Then
' sCurrDdfDir = sDdfRoot & "\0"
' Directory.CreateDirectory(sCurrDdfDir)
' nDdfId = 0
'Else
' nDdfId = Directory.EnumerateFiles(DdfDirs(DdfDirs.Count - 1)).Max(Of Integer)(Function(x)
' Dim nDirId As Integer = 0
' If Integer.TryParse(x, nDirId) Then
' Return nDirId
' Else
' Return 0
' End If
' End Function)
' If (nDdfId + 1) Mod 100 = 0 Then
' sCurrDdfDir = sDdfRoot & "\" & nDdfId + 1
' Directory.CreateDirectory(sCurrDdfDir)
' nDdfId = 0
' End If
'End If
' ' Lancio in parallelo più processi (senza superare il numero di core logici presenti) Dim
' vProc As MyProc() = New MyProc(nMaxThread - 1) {} For j As Integer = 0 To nMaxThread - 1
' vProc(j).nBar = -1 vProc(j).bEnable = True Next
' While Not m_bStopProcess
' For j As Integer = 0 To nMaxThread - 1 If Not vProc(j).bEnable Then Continue For Dim bDone
' As Boolean = False
' If vProc(j).nBar = -1 Then
' ' se c'e' qualcosa da processare If currWDC.numTask2proc > 0 Then
' Dim LastRequest As Dictionary(Of String, String) = currWDC.queueList(1)
' If vBar(nCurrBar).bBarOk Then vProc(j).Proc = New Process()
' vProc(j).Proc.StartInfo.FileName = ExePath If bIsEdit Then
' vProc(j).Proc.StartInfo.Arguments = """" & vBar(nCurrBar).sBarPath & """" Else
' vProc(j).Proc.StartInfo.Arguments = """" & vBar(nCurrBar).sBarPath & """ " & """" &
' vBar(nCurrBar).nProjType & """ " & """" & vBar(nCurrBar).nMachineName & """ " &
' vBar(nCurrBar).nCmdType End If vProc(j).Proc.StartInfo.UseShellExecute = False
' If vProc(j).Proc.Start() Then vProc(j).nBar = nCurrBar nCurrBar += 1 nActProc += 1 End If
' Else If vBar(nCurrBar).nCmdType = CmdTypes.CHECK OrElse vBar(nCurrBar).nCmdType =
' CmdTypes.CHECKGEN Then RaiseEvent Calc_ProcessResult(Nothing, New
' CalcResultEventArgs(vBar(nCurrBar))) 'ProcessResults(vBar(nCurrBar)) ElseIf
' vBar(nCurrBar).nCmdType = CmdTypes.GENERATE Then RaiseEvent Calc_ProcessResult(Nothing,
' New CalcResultEventArgs(vBar(nCurrBar))) 'ProcessResults(vBar(nCurrBar)) 'RaiseEvent
' Calc_ProcessEnd(Nothing, New CalcProcessEndEventArgs(vBar(nCurrBar)))
' 'ProcessResults(vBar(nCurrBar)) End If bDone = True nCurrBar += 1 End If End If Else
' If vProc(j).Proc.HasExited Then ' se terminato con successo If vProc(j).Proc.ExitCode = 0
' Then ' salvo il risultato If vBar(vProc(j).nBar).nCmdType = CmdTypes.CHECK OrElse
' vBar(vProc(j).nBar).nCmdType = CmdTypes.CHECKGEN Then RaiseEvent
' Calc_ProcessResult(Nothing, New CalcResultEventArgs(vBar(vProc(j).nBar))) '
' ProcessResults(vBar(vProc(j).nBar)) ElseIf vBar(vProc(j).nBar).nCmdType =
' CmdTypes.GENERATE Then RaiseEvent Calc_ProcessResult(Nothing, New
' CalcResultEventArgs(vBar(vProc(j).nBar))) ' ProcessResults(vBar(vProc(j).nBar))
' 'RaiseEvent Calc_ProcessEnd(Nothing, New CalcProcessEndEventArgs(vBar(vProc(j).nBar)))
' 'ProcessResults(vBar(nCurrBar)) End If bDone = True vProc(j).nBar = -1 nActProc -= 1 ' se
' superato il numero di processi eseguibili in parallelo ElseIf vProc(j).Proc.ExitCode = 1
' Then ' aggiungo il pezzo in coda If numBars + nShiftBar < numBars + nMaxThread Then
' vBar(numBars + nShiftBar) = vBar(vProc(j).nBar) nShiftBar += 1 End If ' disabilito il
' processo vProc(j).bEnable = False vProc(j).nBar = -1 nActProc -= 1 ' altrimenti (errore
' generico di esecuzione) Else ' salvo il risultato If vBar(vProc(j).nBar).nCmdType =
' CmdTypes.CHECK OrElse vBar(vProc(j).nBar).nCmdType = CmdTypes.CHECKGEN Then RaiseEvent
' Calc_ProcessResult(Nothing, New CalcResultEventArgs(vBar(vProc(j).nBar))) '
' ProcessResults(vBar(vProc(j).nBar)) ElseIf vBar(vProc(j).nBar).nCmdType =
' CmdTypes.GENERATE Then RaiseEvent Calc_ProcessResult(Nothing, New
' CalcResultEventArgs(vBar(vProc(j).nBar))) ' ProcessResults(vBar(vProc(j).nBar))
' 'RaiseEvent Calc_ProcessEnd(Nothing, New CalcProcessEndEventArgs(vBar(vProc(j).nBar)))
' 'ProcessResults(vBar(nCurrBar)) End If bDone = True vProc(j).nBar = -1 nActProc -= 1 End
' If Else vProc(j).Proc.Refresh() End If End If
' If bDone Then ' se sono in simulazione If bIsSimulation Then Dim sOriPath As String =
' Path.ChangeExtension(vBar(0).sBarPath, ".ori.bwe") ' se file modificato a mano If
' File.GetLastWriteTime(sOriPath) < File.GetLastWriteTime(vBar(0).sBarPath) Then ' aggiorno
' progetto If File.Exists(vBar(0).sBarPath) Then File.Copy(vBar(0).sBarPath, sOriPath, True)
' ' messaggio di lancio verifica callback(50, "Verifying modifications...", bCancel) '
' lancio verifica System.Threading.Thread.Sleep(500)
' Dim Proc As New Process()
' Proc.StartInfo.FileName = ExePath
' Proc.StartInfo.Arguments = """" & vBar(0).sBarPath & """ " &
' """" & vBar(0).nProjType & """ " &
'"""" & vBar(0).nMachineName & """ " & CmdTypes.CHECKGEN
' Proc.StartInfo.UseShellExecute = False
' If Proc.Start() Then Dim ProgressValue As Integer = 50 While Not Proc.HasExited
' Proc.Refresh() If ProgressValue < 90 Then ProgressValue += 0.001 callback(ProgressValue,
' "Verifying modifications...", bCancel) Thread.Sleep(1) End While ' se terminato con
' successo If Proc.ExitCode = 0 Then ' salvo il risultato RaiseEvent
' Calc_ProcessResult(Nothing, New CalcResultEventArgs(vBar(0))) Thread.Sleep(500) End If End
' If End If ' messaggio di completamento simulazione callback(0, "Simulation closing",
' bCancel) ElseIf bIsEdit Then ' ricarico il progetto Dim Result As CalcEndEventArgs.Results
' If bAllKO Then Result = CalcEndEventArgs.Results.ERROR_ ElseIf bIsEdit Then Result =
' CalcEndEventArgs.Results.EDIT Else Result = CalcEndEventArgs.Results.OK End If RaiseEvent
' Calc_Ended(Nothing, New CalcEndEventArgs(CmdTypes.EDIT, Result)) Return Else ' Dialog con
' Progress Bar nDoneBar += 1 dProgress = 1 / numBars * nDoneBar Dim sProg As String =
' (dProgress * 100).ToString("F1", CultureInfo.InvariantCulture) callback(dProgress, "
' Progress: " & sProg & "% Count: " & nDoneBar & " / " & numBars, bCancel) End If If bCancel
' Then ' fine callback(1, "", bCancel) ' riabilito interfaccia RaiseEvent
' Calc_Ended(Nothing, New CalcEndEventArgs(CmdTypes.CHECKGEN, CalcEndEventArgs.Results.OK))
' Return End If nPgsCurrBar = 0 nPgsClock = 0 Else ' se non sono in simulazione If Not
' bIsSimulation AndAlso Not bIsEdit Then ' aggiorno conteggio If nPgsClock >= 100 AndAlso
' nPgsCurrBar < 149 Then nPgsCurrBar += 1 dProgress = 1 / numBars * nDoneBar + 1 / numBars /
' 150 * nPgsCurrBar Dim sProg As String = (dProgress * 100).ToString("F1",
' CultureInfo.InvariantCulture) callback(dProgress, " Progress: " & sProg & "% Count: " &
' nDoneBar & " / " & numBars, bCancel) nPgsClock = 0 End If End If End If nPgsClock += 1
' Thread.Sleep(1) Next
' End While
' m_bStopProcess = False
' Dim num2proc As Integer Dim queueStatus As New Dictionary(Of String, Long) Dim queueList
' As New Dictionary(Of String, String) Dim procResults As New List(Of CalcResultDTO) Dim
' respPut As String Dim fileName As String Dim fileCont As String
' queueStatus = currWDC.queueStatus Dim sb As StringBuilder sb = New StringBuilder
' sb.Append(txtOut.Text) sb.AppendLine("----------------------------") For Each item As
' KeyValuePair(Of String, Long) In queueStatus sb.AppendLine($"{item.Key} | Found
' {item.Value} items") Next sb.AppendLine("----------------------------") sb.AppendLine()
' txtOut.Text = sb.ToString()
' ' recupero numero da processare num2proc = currWDC.numTask2proc If (num2proc > 0) Then
' sb.AppendLine("----------------------------") ' mi prendo la lista dei primi 10 max e
' processo... queueList = currWDC.queueList(10) For Each item As KeyValuePair(Of String,
' String) In queueList fileCont = "" idxSim = idxSim + 1 If (idxSim > 3) Then idxSim = 0 End
' If fileName = Path.Combine("temp", $"Logo{idxSim:00}.svg") If (File.Exists(fileName)) Then
' fileCont = File.ReadAllText(fileName) End If
' ' mi limito a mostrare codice + contenuto DDF... dovrebbe processare invero...
' sb.AppendLine("--------------------------------------------------------")
' sb.AppendLine($"DoorId.Vers: {item.Key}") sb.AppendLine("DDF:") sb.AppendLine("--------")
' sb.AppendLine(item.Value)
' sb.AppendLine("--------------------------------------------------------") sb.AppendLine()
' ' scrivo ddf File.WriteAllText(sCurrDdfDir & "\" & nDdfId, item.Value)
' ' eseguo calcolo
' ' costruisco risposta finta di processing con esito true + SVG Dim currRes As New
' CalcResultDTO currRes.Validated = True currRes.DoorIdVers = item.Key currRes.SvgGen =
' fileCont procResults.Add(currRes) Next sb.AppendLine("----------------------------") sb.AppendLine()
' ' rendo la risposta... respPut = currWDC.SendProcResults(procResults) sb.AppendLine()
' sb.AppendLine("----------------------------") sb.AppendLine("Esito invio risposta al
' server:") sb.AppendLine() sb.AppendLine(respPut) sb.AppendLine("----------------------------")
' txtOut.Text = sb.ToString()
' End If
#End If
End Sub
Private Sub StartProcess_Click(sender As Object, e As EventArgs) Handles StartProcess.Click
startAllThreads()
End Sub
Private Sub StartUiThread()
' avvio timer progBar
TimerUI.Enabled = True
TimerUI.Start()
' avvio il timer di refresh
TimerProgBar.Enabled = True
TimerProgBar.Start()
End Sub
Private Sub stopAllThreads()
m_bStopProcess = True
While Not m_bExecutionThreadStoped
Thread.Sleep(20)
End While
m_ExecutionThread = Nothing
' fix timer
TimerProgBar.Enabled = False
TimerProgBar.Stop()
End Sub
Private Sub StopProcess_Click(sender As Object, e As EventArgs) Handles StopProcess.Click
stopAllThreads()
End Sub
Private Function ThreadCount() As Integer
Dim numCount = 0
If Not IsNothing(ThreadList) Then
' conto i NON nulli
For Each Thread In ThreadList
If Not IsNothing(Thread) Then
numCount += 1
End If
Next
End If
' rendo
Return numCount
End Function
Private Sub ThreadFunction(ThreadIndex As Integer)
Dim MyThreadData As New ThreadData
ThreadDataList(ThreadIndex) = MyThreadData
Dim sExePath As String = "c:\EgtProg\EgtEngine\EgtEngineR32.exe"
Dim sCurrDdfDir As String = "c:\EgtData\WebDoor\Ddf"
Dim stopWatch As New Stopwatch()
Dim lExeTime As Long = 0
Dim lOtherTime As Long = 0
While Not m_bStopProcess
MyThreadData.SetThreadOperation(ThreadOperations.WaitingData)
' se c'e' qualcosa da processare
If currWDC.numTask2proc > 0 Then
Dim LastRequest As Dictionary(Of String, String) = currWDC.queueList(1)
If LastRequest.Count > 0 Then
MyThreadData.SetThreadOperation(ThreadOperations.FoundRequest)
Dim Item As KeyValuePair(Of String, String) = LastRequest.First()
Dim bOk As Boolean = Not IsNothing(Item)
If bOk Then
' avvio cronometro
'stopWatch.Reset()
stopWatch.Restart()
' svuoto vecchio set file della porta richiesta
Dim fileList As String() = Directory.GetFiles(sCurrDdfDir, Item.Key + ".*")
' elimino vecchi
If Not IsNothing(fileList) Then
For Each sFile In fileList
File.Delete(sFile)
Next
End If
' scrivo ddf
MyThreadData.SetThreadOperation(ThreadOperations.WritingDdf)
Dim sDdfPath As String = sCurrDdfDir & "\" & Item.Key & ".ddf"
Try
File.WriteAllText(sDdfPath, Item.Value)
Catch ex As Exception
bOk = False
End Try
If bOk Then
MyThreadData.SetThreadOperation(ThreadOperations.ProcessingDdf)
' eseguo calcolo
Dim Proc As Process = New Process()
MyThreadData.SetProcess(Proc)
Proc.StartInfo.FileName = sExePath
Proc.StartInfo.Arguments = """C:\EgtData\WebDoor\Main.lua""" & " """ & sDdfPath & """"
Proc.StartInfo.UseShellExecute = False
If Proc.Start() Then
While Not Proc.HasExited
Thread.Sleep(1)
End While
MyThreadData.SetProcess(Nothing)
' salvo exe time...
stopWatch.Stop()
lExeTime = stopWatch.ElapsedMilliseconds
stopWatch.Restart()
Dim procResults As New List(Of CalcResultDTO)
Dim currRes As New CalcResultDTO
Dim fContent As String = ""
MyThreadData.SetThreadOperation(ThreadOperations.ReadingSvg)
' verifico esistenza file svg e lo carico
bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "svg"), fContent)
' invio risposta
currRes.Validated = Proc.ExitCode = 0 AndAlso bOk
currRes.DoorIdVers = Item.Key
' se NON fosse validato --> messo il messaggio...
If (currRes.Validated) Then
currRes.SvgGen = fContent
Else
bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "txt"), fContent)
currRes.ErrorMsg = fContent
End If
MyThreadData.SetThreadOperation(ThreadOperations.SendResult)
procResults.Add(currRes)
Dim respPut As String = currWDC.SendProcResults(procResults)
stopWatch.Stop()
lOtherTime = stopWatch.ElapsedMilliseconds
' aggiorno thread display...
UpdateThreadList(Item.Key, lExeTime, lOtherTime)
' cambio nomi file generati in old
Dim OldSvg As String = Path.ChangeExtension(sDdfPath, "svg")
Dim NewSvg As String = Path.GetDirectoryName(sDdfPath) & "\" & Path.GetFileNameWithoutExtension(sDdfPath) & "_old.svg"
Try
File.Delete(NewSvg)
Catch ex As Exception
End Try
Try
File.Delete(Path.ChangeExtension(NewSvg, "txt"))
Catch ex As Exception
End Try
Try
File.Delete(Path.ChangeExtension(NewSvg, "log"))
Catch ex As Exception
End Try
Try
File.Delete(Path.ChangeExtension(NewSvg, "nge"))
Catch ex As Exception
End Try
Try
File.Delete(Path.ChangeExtension(NewSvg, "ddf"))
Catch ex As Exception
End Try
Try
File.Move(OldSvg, NewSvg)
Catch ex As Exception
End Try
Try
File.Move(Path.ChangeExtension(OldSvg, "txt"), Path.ChangeExtension(NewSvg, "txt"))
Catch ex As Exception
End Try
Try
File.Move(Path.ChangeExtension(OldSvg, "log"), Path.ChangeExtension(NewSvg, "log"))
Catch ex As Exception
End Try
Try
File.Move(Path.ChangeExtension(OldSvg, "nge"), Path.ChangeExtension(NewSvg, "nge"))
Catch ex As Exception
End Try
Try
File.Move(Path.ChangeExtension(OldSvg, "ddf"), Path.ChangeExtension(NewSvg, "ddf"))
Catch ex As Exception
End Try
End If
stopWatch.Stop()
End If
End If
End If
End If
End While
MyThreadData.SetThreadOperation(ThreadOperations.Closed)
End Sub
Private Sub TimerProgBar_Tick(sender As Object, e As EventArgs) Handles TimerProgBar.Tick
' esegue refresh prog bar
performBarAdvance()
End Sub
Private Sub TimerUI_Tick(sender As Object, e As EventArgs) Handles TimerUI.Tick
' effettuo refresh code e status thread
performUpdateUI()
UpdateThreadCurrentStatus()
End Sub
Private Sub txtNumThread_TextChanged(sender As Object, e As EventArgs) Handles txtNumThread.TextChanged
Dim numReq As Integer = 1
Integer.TryParse(txtNumThread.Text, numReq)
' controllo se cambiato il num thread
If numReq <> m_MaxCamInstances Then
stopAllThreads()
Thread.Sleep(100)
SetMaxCamInstances(numReq)
'startAllThreads()
End If
End Sub
Private isUpdatingThreads As Boolean = False
''' <summary>
''' Esecuzione update display lista stato threads
''' </summary>
Private Sub UpdateThreadList(tId As String, tExeCam As Long, tOther As Long)
synchronizationContext.Post(New SendOrPostCallback(
Sub(o)
If Not isUpdatingThreads Then
isUpdatingThreads = True
ProcStats.RecordData(m_MaxCamInstances, tExeCam, tOther)
ProcStats.RecordList.Enqueue((tId, tExeCam, tOther))
'Begin the update
LISTThreadStatus.BeginUpdate()
LISTThreadStatus.Items.Clear()
' compilo in base al tipo di stat richiesta
If (chkStatAggr.Checked) Then
' statistiche di sintesi
Dim sorted = From pair In ProcStats.ExeCumSum
Order By pair.Key
For Each item In sorted
LISTThreadStatus.Items.Add(
New ListViewItem(New String() {item.Key,
$"{item.Value.NumRec} x {item.Value.ExeTime / item.Value.NumRec:N2} ms",
$"{item.Value.NumRec} x {item.Value.OthTime / item.Value.NumRec:N2} ms"
}))
Next
Else
' formato log
Dim maxItems As Integer = 15
While ProcStats.RecordList.Count > maxItems
Dim oldItem As (String, Long, Long) = ("", 0, 0)
ProcStats.RecordList.TryDequeue(oldItem)
End While
For Each item As (String, Long, Long) In ProcStats.RecordList.Reverse
LISTThreadStatus.Items.Add(New ListViewItem(New String() {
item.Item1,
$"{item.Item2} ms",
$"{item.Item3} ms"
}))
Next
End If
'End the update
LISTThreadStatus.EndUpdate()
isUpdatingThreads = False
End If
End Sub
), "")
End Sub
#End Region
#If False Then
'Private Sub btnFullTest_Click(sender As Object, e As EventArgs) Handles btnFullTest.Click
' Dim num2proc As Integer Dim queueStatus As New Dictionary(Of String, Long) Dim queueList As
' New Dictionary(Of String, String) Dim procResults As New List(Of CalcResultDTO) Dim respPut As
' String Dim fileName As String Dim fileCont As String
' queueStatus = currWDC.queueStatus Dim sb As StringBuilder sb = New StringBuilder
' sb.AppendLine("----------------------------") For Each item As KeyValuePair(Of String, Long)
' In queueStatus sb.AppendLine($"{item.Key} | Found {item.Value} items") Next
' sb.AppendLine("----------------------------") sb.AppendLine() txtOut.Text = sb.ToString() '
' recupero numero da processare num2proc = currWDC.numTask2proc If (num2proc > 0) Then
' sb.AppendLine("----------------------------") ' mi prendo la lista dei primi 10 max e
' processo... queueList = currWDC.queueList(10) For Each item As KeyValuePair(Of String, String)
' In queueList fileCont = "" idxSim = idxSim + 1 If (idxSim > 3) Then idxSim = 0 End If fileName
' = Path.Combine("temp", $"Logo{idxSim:00}.svg") If (File.Exists(fileName)) Then fileCont =
' File.ReadAllText(fileName) End If
' ' mi limito a mostrare codice + contenuto DDF... dovrebbe processare invero...
' sb.AppendLine("--------------------------------------------------------")
' sb.AppendLine($"DoorId.Vers: {item.Key}") sb.AppendLine("DDF:") sb.AppendLine("--------")
' sb.AppendLine(item.Value)
' sb.AppendLine("--------------------------------------------------------") sb.AppendLine()
' ' costruisco risposta finta di processing con esito true + SVG Dim currRes As New
' CalcResultDTO currRes.Validated = True currRes.DoorIdVers = $"{item.Key}.{item.Value}"
' currRes.SvgGen = fileCont procResults.Add(currRes) Next
' sb.AppendLine("----------------------------") sb.AppendLine()
' ' rendo la risposta... respPut = currWDC.SendProcResults(procResults) sb.AppendLine()
' sb.AppendLine("----------------------------") sb.AppendLine("Esito invio risposta al server:")
' sb.AppendLine() sb.AppendLine(respPut) sb.AppendLine("----------------------------")
' txtOut.Text = sb.ToString() End If
'End Sub
#End If
#Region "Private Structs"
Private Structure MyProc
#Region "Public Fields"
Public bEnable As Boolean
Public nBar As Integer
Public Proc As Process
Public Thread As Thread
#End Region
End Structure
''' <summary>
''' Esportazione statistiche attuali esecuzione
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
Private Sub btnExportStats_Click(sender As Object, e As EventArgs) Handles btnExportStats.Click
' statistiche di sintesi
Dim sorted = From pair In ProcStats.ExeCumSum
Order By pair.Key
' preparo il file export...
Dim fileName As String
Dim adesso As DateTime = DateTime.Now
fileName = Path.Combine("C:\Temp\", $"WDC_Stats_{adesso:yyyyMMdd-HHmmss}.csv")
Dim sb As StringBuilder = New StringBuilder
sb.AppendLine("Threads;Samples;ExeTime;OtherTime;FullTime")
For Each item In sorted
' preparo la linea CSV...
sb.AppendLine($"{item.Key};{item.Value.NumRec};{item.Value.ExeTime / item.Value.NumRec:N2};{item.Value.OthTime / item.Value.NumRec:N2};{(item.Value.ExeTime + item.Value.OthTime) / item.Key:N2}")
Next
' scrivo!
File.WriteAllText(fileName, sb.ToString())
End Sub
Private Sub ProcMan_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
' forzo chiusura threads!
stopAllThreads()
End Sub
Private Sub chkAutoRestart_CheckedChanged(sender As Object, e As EventArgs) Handles chkAutoRestart.CheckedChanged
CheckStartAutoRestart()
End Sub
Private Sub CheckStartAutoRestart()
TimerCheck.Enabled = chkAutoRestart.Checked
If chkAutoRestart.Checked Then
If m_ExecutionThread.ThreadState = ThreadState.Aborted OrElse m_ExecutionThread.ThreadState = ThreadState.Stopped OrElse
m_ExecutionThread.ThreadState = ThreadState.Suspended Then
stopAllThreads()
Thread.Sleep(200)
m_ExecutionThread.Abort()
Thread.Sleep(200)
startAllThreads()
End If
TimerCheck.Start()
Else
TimerCheck.Stop()
End If
End Sub
Private Sub TimerCheck_Tick(sender As Object, e As EventArgs) Handles TimerCheck.Tick
restartAll()
End Sub
Private Sub restartAll()
' eseguo riavvio forzato ogni 30 sec!
stopAllThreads()
Task.Delay(500)
startAllThreads()
End Sub
#End Region
End Class
Binary file not shown.

After

Width:  |  Height:  |  Size: 273 KiB

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{96266312-9739-4F12-A6C2-16C1CAFDDA6E}</ProjectGuid>
<OutputType>WinExe</OutputType>
<StartupObject>WebDoorCreator.CamSrv.My.MyApplication</StartupObject>
<RootNamespace>WebDoorCreator.CamSrv</RootNamespace>
<AssemblyName>WebDoorCreator.CamSrv</AssemblyName>
<FileAlignment>512</FileAlignment>
<MyType>WindowsForms</MyType>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineDebug>true</DefineDebug>
<DefineTrace>true</DefineTrace>
<OutputPath>bin\Debug\</OutputPath>
<DocumentationFile>WebDoorCreator.CamSrv.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<DefineDebug>false</DefineDebug>
<DefineTrace>true</DefineTrace>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DocumentationFile>WebDoorCreator.CamSrv.xml</DocumentationFile>
<NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
</PropertyGroup>
<PropertyGroup>
<OptionExplicit>On</OptionExplicit>
</PropertyGroup>
<PropertyGroup>
<OptionCompare>Binary</OptionCompare>
</PropertyGroup>
<PropertyGroup>
<OptionStrict>Off</OptionStrict>
</PropertyGroup>
<PropertyGroup>
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Resources\Temp.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\DemoServer\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup>
<Import Include="Microsoft.VisualBasic" />
<Import Include="System" />
<Import Include="System.Collections" />
<Import Include="System.Collections.Generic" />
<Import Include="System.Data" />
<Import Include="System.Drawing" />
<Import Include="System.Diagnostics" />
<Import Include="System.Windows.Forms" />
<Import Include="System.Linq" />
<Import Include="System.Xml.Linq" />
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="ProcMan.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="ProcMan.Designer.vb">
<DependentUpon>ProcMan.vb</DependentUpon>
<SubType>Form</SubType>
</Compile>
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="My Project\Settings.Designer.vb">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="ProcMan.resx">
<DependentUpon>ProcMan.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="My Project\Resources.resx">
<Generator>VbMyResourcesResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.vb</LastGenOutput>
<CustomToolNamespace>My.Resources</CustomToolNamespace>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="My Project\Application.myapp">
<Generator>MyApplicationCodeGenerator</Generator>
<LastGenOutput>Application.Designer.vb</LastGenOutput>
</None>
<None Include="My Project\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<CustomToolNamespace>My</CustomToolNamespace>
<LastGenOutput>Settings.Designer.vb</LastGenOutput>
</None>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Resources\Temp.ico" />
<Content Include="temp\Logo00.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="temp\Logo01.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="temp\Logo02.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="temp\Logo03.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\WebDoorCreator.SDK\WebDoorCreator.SDK.csproj">
<Project>{4a07adfc-ca24-4135-ba97-3b8e5d49bc09}</Project>
<Name>WebDoorCreator.SDK</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<Target Name="AfterBuild">
<ItemGroup>
<MoveToLibFolder Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
</ItemGroup>
</Target>
</Project>
+12
View File
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
<package id="System.Text.Encodings.Web" version="7.0.0" targetFramework="net472" />
<package id="System.Text.Json" version="7.0.2" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
</packages>
+49
View File
@@ -0,0 +1,49 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#010202;}
.st1{fill:none;}
.st2{fill:#B0C5D6;}
.st3{fill:#3C89C9;}
.st4{fill:#FFFFFF;}
</style>
<g id="Livello_1">
</g>
<g id="Livello_2">
</g>
<g id="Livello_3">
<g>
<g>
<path d="M33.6,158.2H47v3.6h-9.7v7.9h6.2l-1.1,3.5h-5.2v9.8h9.6v3.3H33.6V158.2z"/>
<path d="M62,188.5v-3.2c-0.3,0.5-0.8,0.8-1.5,1.1c-0.7,0.3-1.5,0.4-2.5,0.4c-2.3,0-4.2-0.6-5.5-1.9c-1.3-1.3-2-3.2-2-5.6v-6
c0-2.4,0.7-4.2,2.1-5.5c1.4-1.3,3.2-2,5.5-2c0.9,0,1.7,0.1,2.4,0.4c0.7,0.3,1.2,0.6,1.5,1l0.5-1.1h3.1V189c0,1.8-0.4,3.2-1.3,4.1
c-0.9,1-2.3,1.6-4.3,1.7l-0.9-2.9C61.1,191.8,62,190.6,62,188.5z M61,170.5c-0.7-0.7-1.7-1-3-1c-1.2,0-2.1,0.4-2.8,1.1
c-0.7,0.7-1,1.7-1,3v5.5c0,1.3,0.3,2.4,0.9,3.2c0.6,0.8,1.6,1.2,2.9,1.2c1.4,0,2.4-0.5,3-1.4c0.7-0.9,1-2.3,1-4.1v-4.5
C62,172.1,61.7,171.1,61,170.5z"/>
<path d="M77.9,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4c0.9-0.4,1.9-0.6,3.1-0.6
c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6c2.6,0,4.4,0.4,5.7,1.2
c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C81.3,186.7,79.2,186.8,77.9,186.8z M78,174.4c-1-0.3-1.9-0.5-2.8-0.5
c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7C79.8,175.1,79,174.8,78,174.4z"/>
<path d="M88.7,158.2h3.6v28.2h-3.6V158.2z"/>
<path d="M108.9,173.7l-3.3,12.7h-3.9l-6.3-20.2h4l4.2,14.3l3.7-14.3h3.5l3.7,14.3l4-14.3h3.9l-6.4,20.2h-3.8L108.9,173.7z"/>
<path d="M131.8,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4c0.9-0.4,1.9-0.6,3.1-0.6
c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6c2.6,0,4.4,0.4,5.7,1.2
c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C135.1,186.7,133.1,186.8,131.8,186.8z M131.9,174.4c-1-0.3-1.9-0.5-2.8-0.5
c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7C133.7,175.1,132.8,174.8,131.9,174.4z"/>
<path d="M141.9,166.2h3.4l0.2,0.6c1.1-0.6,2.4-0.9,3.8-0.9c1,0,2.1,0.1,3.4,0.4l-0.9,3.5c-0.7-0.3-1.5-0.5-2.3-0.5
c-1.1,0-2,0.3-2.8,0.8c-0.8,0.6-1.1,1.3-1.1,2.3v13.9h-3.6V166.2z"/>
<path d="M163.7,186.4c-1.2,0.3-2.5,0.5-3.7,0.5c-2,0-3.5-0.5-4.7-1.5c-1.2-1-1.7-2.5-1.7-4.4v-8.3c0-2.2,0.7-3.9,2-5.1
c1.3-1.2,3.1-1.8,5.3-1.8c2.2,0,3.9,0.6,5.2,1.8c1.2,1.2,1.9,2.9,1.9,5v5.8l-10.7,0.6v1.6c0,0.9,0.3,1.7,0.8,2.2
c0.5,0.5,1.3,0.7,2.3,0.7c1.5,0,3.2-0.5,5.2-1.6l1.4,3.1C166,185.6,164.9,186.1,163.7,186.4z M163.2,170.1
c-0.7-0.5-1.5-0.8-2.4-0.8c-1.1,0-2,0.3-2.7,0.9c-0.6,0.6-1,1.5-1,2.5v2.8l7-0.4v-2.6C164.3,171.5,163.9,170.7,163.2,170.1z"/>
</g>
<polygon class="st1" points="98.9,32.9 61.4,32.8 98.9,32.9 "/>
<polygon class="st1" points="75.7,91.3 90.7,69.8 75.7,91.3 "/>
<polygon class="st2" points="167.9,111.6 61.5,111.6 61.4,32.8 98.9,32.9 118.9,4.6 32.7,4.6 33.1,140.8 167.9,140.6 "/>
<polygon class="st3" points="102.4,52.9 90.7,69.8 75.7,91.3 167.9,91.2 167.9,4.6 148.2,4.6 114.6,52.8 "/>
<polygon class="st4" points="148.2,4.6 148.2,4.6 118.9,4.6 135.9,4.6 "/>
<polygon class="st4" points="75.7,91.3 75.7,91.3 90.7,69.8 102.4,52.9 114.6,52.8 148.2,4.6 135.9,4.6 118.9,4.6 98.9,32.9
98.9,32.9 61.4,32.8 61.5,111.6 167.9,111.6 167.9,91.2 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

+52
View File
@@ -0,0 +1,52 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#010202;}
.st1{fill:none;}
.st2{fill:#B0C5D6;}
.st3{fill:#3C89C9;}
.st4{fill:#FFFFFF;}
</style>
<g id="Livello_1">
</g>
<g id="Livello_2">
</g>
<g id="Livello_3">
<g>
<g>
<path class="st2" d="M33.6,158.2H47v3.6h-9.7v7.9h6.2l-1.1,3.5h-5.2v9.8h9.6v3.3H33.6V158.2z"/>
<path class="st2" d="M62,188.5v-3.2c-0.3,0.5-0.8,0.8-1.5,1.1c-0.7,0.3-1.5,0.4-2.5,0.4c-2.3,0-4.2-0.6-5.5-1.9s-2-3.2-2-5.6v-6
c0-2.4,0.7-4.2,2.1-5.5c1.4-1.3,3.2-2,5.5-2c0.9,0,1.7,0.1,2.4,0.4s1.2,0.6,1.5,1l0.5-1.1h3.1V189c0,1.8-0.4,3.2-1.3,4.1
c-0.9,1-2.3,1.6-4.3,1.7l-0.9-2.9C61.1,191.8,62,190.6,62,188.5z M61,170.5c-0.7-0.7-1.7-1-3-1c-1.2,0-2.1,0.4-2.8,1.1
c-0.7,0.7-1,1.7-1,3v5.5c0,1.3,0.3,2.4,0.9,3.2c0.6,0.8,1.6,1.2,2.9,1.2c1.4,0,2.4-0.5,3-1.4c0.7-0.9,1-2.3,1-4.1v-4.5
C62,172.1,61.7,171.1,61,170.5z"/>
<path class="st2" d="M77.9,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4
c0.9-0.4,1.9-0.6,3.1-0.6c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6
c2.6,0,4.4,0.4,5.7,1.2c1.2,0.8,2,1.8,2.2,2.9s0.4,2.6,0.4,4.4v12C81.3,186.7,79.2,186.8,77.9,186.8z M78,174.4
c-1-0.3-1.9-0.5-2.8-0.5c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.2,5.3,4.2c0.9,0,1.8-0.1,2.8-0.2v-7.7
C79.8,175.1,79,174.8,78,174.4z"/>
<path class="st2" d="M88.7,158.2h3.6v28.2h-3.6V158.2z"/>
<path class="st2" d="M108.9,173.7l-3.3,12.7h-3.9l-6.3-20.2h4l4.2,14.3l3.7-14.3h3.5l3.7,14.3l4-14.3h3.9l-6.4,20.2h-3.8
L108.9,173.7z"/>
<path class="st2" d="M131.8,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4
c0.9-0.4,1.9-0.6,3.1-0.6c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6
c2.6,0,4.4,0.4,5.7,1.2c1.2,0.8,2,1.8,2.2,2.9s0.4,2.6,0.4,4.4v12C135.1,186.7,133.1,186.8,131.8,186.8z M131.9,174.4
c-1-0.3-1.9-0.5-2.8-0.5c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.2,5.3,4.2c0.9,0,1.8-0.1,2.8-0.2v-7.7
C133.7,175.1,132.8,174.8,131.9,174.4z"/>
<path class="st2" d="M141.9,166.2h3.4l0.2,0.6c1.1-0.6,2.4-0.9,3.8-0.9c1,0,2.1,0.1,3.4,0.4l-0.9,3.5c-0.7-0.3-1.5-0.5-2.3-0.5
c-1.1,0-2,0.3-2.8,0.8c-0.8,0.6-1.1,1.3-1.1,2.3v13.9h-3.6V166.2z"/>
<path class="st2" d="M163.7,186.4c-1.2,0.3-2.5,0.5-3.7,0.5c-2,0-3.5-0.5-4.7-1.5c-1.2-1-1.7-2.5-1.7-4.4v-8.3
c0-2.2,0.7-3.9,2-5.1c1.3-1.2,3.1-1.8,5.3-1.8s3.9,0.6,5.2,1.8c1.2,1.2,1.9,2.9,1.9,5v5.8l-10.7,0.6v1.6c0,0.9,0.3,1.7,0.8,2.2
c0.5,0.5,1.3,0.7,2.3,0.7c1.5,0,3.2-0.5,5.2-1.6l1.4,3.1C166,185.6,164.9,186.1,163.7,186.4z M163.2,170.1
c-0.7-0.5-1.5-0.8-2.4-0.8c-1.1,0-2,0.3-2.7,0.9c-0.6,0.6-1,1.5-1,2.5v2.8l7-0.4v-2.6C164.3,171.5,163.9,170.7,163.2,170.1z"/>
</g>
<polygon class="st1" points="98.9,32.9 61.4,32.8 98.9,32.9 "/>
<polygon class="st1" points="75.7,91.3 90.7,69.8 75.7,91.3 "/>
<polygon class="st2" points="167.9,111.6 61.5,111.6 61.4,32.8 98.9,32.9 118.9,4.6 32.7,4.6 33.1,140.8 167.9,140.6 "/>
<polygon class="st2" points="102.4,52.9 90.7,69.8 75.7,91.3 167.9,91.2 167.9,4.6 148.2,4.6 114.6,52.8 "/>
<polygon class="st4" points="148.2,4.6 148.2,4.6 118.9,4.6 135.9,4.6 "/>
<polygon class="st4" points="75.7,91.3 75.7,91.3 90.7,69.8 102.4,52.9 114.6,52.8 148.2,4.6 135.9,4.6 118.9,4.6 98.9,32.9
98.9,32.9 61.4,32.8 61.5,111.6 167.9,111.6 167.9,91.2 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

+50
View File
@@ -0,0 +1,50 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#010202;}
.st1{fill:none;}
.st2{fill:#B0C5D6;}
.st3{fill:#3C89C9;}
.st4{fill:#FFFFFF;}
</style>
<g id="Livello_1">
</g>
<g id="Livello_2">
</g>
<g id="Livello_3">
<g>
<path class="st3" d="M33.6,158.2H47v3.6h-9.7v7.9h6.2l-1.1,3.5h-5.2v9.8h9.6v3.3H33.6V158.2z"/>
<path class="st3" d="M62,188.5v-3.2c-0.3,0.5-0.8,0.8-1.5,1.1c-0.7,0.3-1.5,0.4-2.5,0.4c-2.3,0-4.2-0.6-5.5-1.9
c-1.3-1.3-2-3.2-2-5.6v-6c0-2.4,0.7-4.2,2.1-5.5c1.4-1.3,3.2-2,5.5-2c0.9,0,1.7,0.1,2.4,0.4c0.7,0.3,1.2,0.6,1.5,1l0.5-1.1h3.1
V189c0,1.8-0.4,3.2-1.3,4.1c-0.9,1-2.3,1.6-4.3,1.7l-0.9-2.9C61.1,191.8,62,190.6,62,188.5z M61,170.5c-0.7-0.7-1.7-1-3-1
c-1.2,0-2.1,0.4-2.8,1.1c-0.7,0.7-1,1.7-1,3v5.5c0,1.3,0.3,2.4,0.9,3.2c0.6,0.8,1.6,1.2,2.9,1.2c1.4,0,2.4-0.5,3-1.4
c0.7-0.9,1-2.3,1-4.1v-4.5C62,172.1,61.7,171.1,61,170.5z"/>
<path class="st3" d="M77.9,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4
c0.9-0.4,1.9-0.6,3.1-0.6c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6
c2.6,0,4.4,0.4,5.7,1.2c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C81.3,186.7,79.2,186.8,77.9,186.8z M78,174.4
c-1-0.3-1.9-0.5-2.8-0.5c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7
C79.8,175.1,79,174.8,78,174.4z"/>
<path class="st3" d="M88.7,158.2h3.6v28.2h-3.6V158.2z"/>
<path class="st3" d="M108.9,173.7l-3.3,12.7h-3.9l-6.3-20.2h4l4.2,14.3l3.7-14.3h3.5l3.7,14.3l4-14.3h3.9l-6.4,20.2h-3.8
L108.9,173.7z"/>
<path class="st3" d="M131.8,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4
c0.9-0.4,1.9-0.6,3.1-0.6c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6
c2.6,0,4.4,0.4,5.7,1.2c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C135.1,186.7,133.1,186.8,131.8,186.8z M131.9,174.4
c-1-0.3-1.9-0.5-2.8-0.5c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7
C133.7,175.1,132.8,174.8,131.9,174.4z"/>
<path class="st3" d="M141.9,166.2h3.4l0.2,0.6c1.1-0.6,2.4-0.9,3.8-0.9c1,0,2.1,0.1,3.4,0.4l-0.9,3.5c-0.7-0.3-1.5-0.5-2.3-0.5
c-1.1,0-2,0.3-2.8,0.8c-0.8,0.6-1.1,1.3-1.1,2.3v13.9h-3.6V166.2z"/>
<path class="st3" d="M163.7,186.4c-1.2,0.3-2.5,0.5-3.7,0.5c-2,0-3.5-0.5-4.7-1.5c-1.2-1-1.7-2.5-1.7-4.4v-8.3
c0-2.2,0.7-3.9,2-5.1c1.3-1.2,3.1-1.8,5.3-1.8c2.2,0,3.9,0.6,5.2,1.8c1.2,1.2,1.9,2.9,1.9,5v5.8l-10.7,0.6v1.6
c0,0.9,0.3,1.7,0.8,2.2c0.5,0.5,1.3,0.7,2.3,0.7c1.5,0,3.2-0.5,5.2-1.6l1.4,3.1C166,185.6,164.9,186.1,163.7,186.4z M163.2,170.1
c-0.7-0.5-1.5-0.8-2.4-0.8c-1.1,0-2,0.3-2.7,0.9c-0.6,0.6-1,1.5-1,2.5v2.8l7-0.4v-2.6C164.3,171.5,163.9,170.7,163.2,170.1z"/>
</g>
<polygon class="st1" points="98.9,32.9 61.4,32.8 98.9,32.9 "/>
<polygon class="st1" points="75.7,91.3 90.7,69.8 75.7,91.3 "/>
<polygon class="st3" points="167.9,111.6 61.5,111.6 61.4,32.8 98.9,32.9 118.9,4.6 32.7,4.6 33.1,140.8 167.9,140.6 "/>
<polygon class="st3" points="102.4,52.9 90.7,69.8 75.7,91.3 167.9,91.2 167.9,4.6 148.2,4.6 114.6,52.8 "/>
<polygon class="st4" points="148.2,4.6 148.2,4.6 118.9,4.6 135.9,4.6 "/>
<polygon class="st4" points="75.7,91.3 75.7,91.3 90.7,69.8 102.4,52.9 114.6,52.8 148.2,4.6 135.9,4.6 118.9,4.6 98.9,32.9
98.9,32.9 61.4,32.8 61.5,111.6 167.9,111.6 167.9,91.2 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

+49
View File
@@ -0,0 +1,49 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#010202;}
.st1{fill:none;}
.st2{fill:#B0C5D6;}
.st3{fill:#3C89C9;}
.st4{fill:#FFFFFF;}
</style>
<g id="Livello_1">
</g>
<g id="Livello_2">
</g>
<g id="Livello_3">
<g>
<g>
<path d="M33.6,158.2H47v3.6h-9.7v7.9h6.2l-1.1,3.5h-5.2v9.8h9.6v3.3H33.6V158.2z"/>
<path d="M62,188.5v-3.2c-0.3,0.5-0.8,0.8-1.5,1.1c-0.7,0.3-1.5,0.4-2.5,0.4c-2.3,0-4.2-0.6-5.5-1.9c-1.3-1.3-2-3.2-2-5.6v-6
c0-2.4,0.7-4.2,2.1-5.5c1.4-1.3,3.2-2,5.5-2c0.9,0,1.7,0.1,2.4,0.4c0.7,0.3,1.2,0.6,1.5,1l0.5-1.1h3.1V189c0,1.8-0.4,3.2-1.3,4.1
c-0.9,1-2.3,1.6-4.3,1.7l-0.9-2.9C61.1,191.8,62,190.6,62,188.5z M61,170.5c-0.7-0.7-1.7-1-3-1c-1.2,0-2.1,0.4-2.8,1.1
c-0.7,0.7-1,1.7-1,3v5.5c0,1.3,0.3,2.4,0.9,3.2c0.6,0.8,1.6,1.2,2.9,1.2c1.4,0,2.4-0.5,3-1.4c0.7-0.9,1-2.3,1-4.1v-4.5
C62,172.1,61.7,171.1,61,170.5z"/>
<path d="M77.9,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4c0.9-0.4,1.9-0.6,3.1-0.6
c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6c2.6,0,4.4,0.4,5.7,1.2
c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C81.3,186.7,79.2,186.8,77.9,186.8z M78,174.4c-1-0.3-1.9-0.5-2.8-0.5
c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7C79.8,175.1,79,174.8,78,174.4z"/>
<path d="M88.7,158.2h3.6v28.2h-3.6V158.2z"/>
<path d="M108.9,173.7l-3.3,12.7h-3.9l-6.3-20.2h4l4.2,14.3l3.7-14.3h3.5l3.7,14.3l4-14.3h3.9l-6.4,20.2h-3.8L108.9,173.7z"/>
<path d="M131.8,186.8c-2.8,0-5-0.5-6.7-1.6c-1.7-1-2.5-2.9-2.5-5.7v-3.3c0-2.7,0.9-4.4,2.8-5.4c0.9-0.4,1.9-0.6,3.1-0.6
c1.1,0,2.1,0.2,3.2,0.5c1.1,0.3,2,0.7,2.6,1.1c0-1.1-0.4-2-1.3-2.5c-0.9-0.6-2.1-0.8-3.7-0.8l0.3-2.6c2.6,0,4.4,0.4,5.7,1.2
c1.2,0.8,2,1.8,2.2,2.9c0.3,1.1,0.4,2.6,0.4,4.4v12C135.1,186.7,133.1,186.8,131.8,186.8z M131.9,174.4c-1-0.3-1.9-0.5-2.8-0.5
c-1.9,0-2.8,0.9-2.8,2.7v2.7c0,2.8,1.8,4.1,5.3,4.1c0.9,0,1.8-0.1,2.8-0.2v-7.7C133.7,175.1,132.8,174.8,131.9,174.4z"/>
<path d="M141.9,166.2h3.4l0.2,0.6c1.1-0.6,2.4-0.9,3.8-0.9c1,0,2.1,0.1,3.4,0.4l-0.9,3.5c-0.7-0.3-1.5-0.5-2.3-0.5
c-1.1,0-2,0.3-2.8,0.8c-0.8,0.6-1.1,1.3-1.1,2.3v13.9h-3.6V166.2z"/>
<path d="M163.7,186.4c-1.2,0.3-2.5,0.5-3.7,0.5c-2,0-3.5-0.5-4.7-1.5c-1.2-1-1.7-2.5-1.7-4.4v-8.3c0-2.2,0.7-3.9,2-5.1
c1.3-1.2,3.1-1.8,5.3-1.8c2.2,0,3.9,0.6,5.2,1.8c1.2,1.2,1.9,2.9,1.9,5v5.8l-10.7,0.6v1.6c0,0.9,0.3,1.7,0.8,2.2
c0.5,0.5,1.3,0.7,2.3,0.7c1.5,0,3.2-0.5,5.2-1.6l1.4,3.1C166,185.6,164.9,186.1,163.7,186.4z M163.2,170.1
c-0.7-0.5-1.5-0.8-2.4-0.8c-1.1,0-2,0.3-2.7,0.9c-0.6,0.6-1,1.5-1,2.5v2.8l7-0.4v-2.6C164.3,171.5,163.9,170.7,163.2,170.1z"/>
</g>
<polygon class="st1" points="98.9,32.9 61.4,32.8 98.9,32.9 "/>
<polygon class="st1" points="75.7,91.3 90.7,69.8 75.7,91.3 "/>
<polygon class="st0" points="167.9,111.6 61.5,111.6 61.4,32.8 98.9,32.9 118.9,4.6 32.7,4.6 33.1,140.8 167.9,140.6 "/>
<polygon class="st0" points="102.4,52.9 90.7,69.8 75.7,91.3 167.9,91.2 167.9,4.6 148.2,4.6 114.6,52.8 "/>
<polygon class="st4" points="148.2,4.6 148.2,4.6 118.9,4.6 135.9,4.6 "/>
<polygon class="st4" points="75.7,91.3 75.7,91.3 90.7,69.8 102.4,52.9 114.6,52.8 148.2,4.6 135.9,4.6 118.9,4.6 98.9,32.9
98.9,32.9 61.4,32.8 61.5,111.6 167.9,111.6 167.9,91.2 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

+53
View File
@@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.Core
{
//// <Auto-Generated>
//// This is here so CodeMaid doesn't reorganize this document
//// </Auto-Generated>
public class Constants
{
// dati conf REDIS Cache
public static readonly string BASE_HASH = "WDC";
public static readonly string BASE_PATH = Directory.GetCurrentDirectory();
// REDIS KEY Dati correnti x QueueMan
public static readonly string LAST_CALC_REQ_KEY = $"{BASE_HASH}:Current:LastCalcReq";
public static readonly string LAST_CALC_DONE_KEY = $"{BASE_HASH}:Current:LastCalcDone";
public static readonly string LAST_DOOR_REFR_KEY = $"{BASE_HASH}:Current:LastDoorRefr";
public static readonly string CALC_REQ_DONE = $"{BASE_HASH}:CalcRequests:Completed";
public static readonly string CALC_REQ_ERRS = $"{BASE_HASH}:CalcRequests:Errors";
public static readonly string CALC_REQ_PEND = $"{BASE_HASH}:CalcRequests:Pending";
public static readonly string CALC_REQ_PROC = $"{BASE_HASH}:CalcRequests:Processing";
public static readonly string CALC_REQ_DDF_CACHE = $"{BASE_HASH}:CalcRequests:CacheDDF";
public static readonly string CALC_REQ_SVG_CACHE = $"{BASE_HASH}:CalcRequests:CacheSVG";
// REDIS Channels messaggi x QueueMan (verso UI/srv)
public static readonly string CALC_REQ_QUEUE = $"CalcRequest";
public static readonly string CALC_DONE_QUEUE = $"CalcCompleted";
public const string passPhrase = "9eb4660f-8753-46bc-b23b-08759ba03fe9";
// classi utilità x cache REDIS dati DB
public const string redisBaseAddr = "WDC";
public const string rKeyCompany = $"{redisBaseAddr}:Cache:Company";
public const string rKeyDoor = $"{redisBaseAddr}:Cache:Door";
public const string rKeyDoorOp = $"{redisBaseAddr}:Cache:DoorOp";
public const string rKeyDoorOpType = $"{redisBaseAddr}:Cache:DoorOpType";
public const string rKeyGraphicParameters = $"{redisBaseAddr}:Cache:GraphicParameters";
public const string rKeyListValues = $"{redisBaseAddr}:Cache:ListValues";
public const string rKeyOrderDetail = $"{redisBaseAddr}:Cache:OrderDetail";
public const string rKeyOrderStatus = $"{redisBaseAddr}:Cache:OrderStatus";
public const string rKeyRoles = $"{redisBaseAddr}:Cache:Roles";
public const string rKeyUsers = $"{redisBaseAddr}:Cache:Users";
public const string rKeyUsersView = $"{redisBaseAddr}:Cache:UsersView";
public const string rKeyVocLemma = $"{redisBaseAddr}:Cache:VocLemma";
public const string rKeyLanguage = $"{redisBaseAddr}:Cache:Languages";
}
}
+11 -10
View File
@@ -4,15 +4,7 @@
{
#region Public Enums
public enum OrderStatus
{
NA = 0,
DoorDef,
Sent,
ApprovedByMaker,
ApprovedByCustomer,
InProduction
}
public enum UserLevel
{
@@ -28,7 +20,16 @@
{
Door = 0,
Hardware,
report
Report
}
public enum orderTypeEnum
{
none = 1,
DateAscending,
DateDescending,
CodeAscending,
CodeDescending
}
#endregion Public Enums
@@ -10,6 +10,7 @@
<PackageReference Include="EntityFrameworkCore.SqlServer.HierarchyId" Version="3.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.14" />
<PackageReference Include="NLog" Version="5.1.2" />
<PackageReference Include="YamlDotNet" Version="13.1.0" />
</ItemGroup>
</Project>
@@ -278,6 +278,35 @@ namespace WebDoorCreator.Data.Controllers
}
return dbResult;
}
/// <summary>
/// Retrieving current door operations by id
/// </summary>
/// <returns></returns>
public DoorOpModel DoorOpGetById(int doorOpId)
{
DoorOpModel dbResult = new DoorOpModel();
using (WDCDataContext localDbCtx = new WDCDataContext(_configuration))
{
try
{
// extracting entire set
var temp = localDbCtx
.DbSetDoorOp
.Where(x => x.DoorOpId == doorOpId)
.FirstOrDefault();
if(temp != null)
{
dbResult = temp;
}
}
catch (Exception exc)
{
Log.Error($"Error in DoorOpGetById:{Environment.NewLine}{exc}");
}
}
return dbResult;
}
/// <summary>
/// Adding door's OP
@@ -309,23 +338,28 @@ namespace WebDoorCreator.Data.Controllers
/// </summary>
/// <param name="modOpRec">Records to add</param>
/// <returns></returns>
public async Task<bool> DoorOpUpdate(DoorOpModel modOpRec)
public async Task<bool> DoorOpUpdate(List<DoorOpModel> modOpRec)
{
bool fatto = false;
using (WDCDataContext localDbCtx = new WDCDataContext(_configuration))
{
try
{
var currRec = localDbCtx
.DbSetDoorOp
.Where(x => x.DoorId == modOpRec.DoorId && x.DoorOpId == modOpRec.DoorOpId)
.FirstOrDefault();
if (currRec != null) //if is not null edit the record found
foreach (var item in modOpRec)
{
currRec.JsoncActVal = modOpRec.JsoncActVal;
currRec.userConfirm = modOpRec.userConfirm;
currRec.DtConfirm = modOpRec.DtConfirm;
localDbCtx.Entry(currRec).State = EntityState.Modified;
var currRec = localDbCtx
.DbSetDoorOp
.Where(x => x.DoorId == item.DoorId && x.DoorOpId == item.DoorOpId)
.FirstOrDefault();
if (currRec != null) //if is not null edit the record found
{
currRec.JsoncActVal = item.JsoncActVal;
currRec.JsoncConfigVal = item.JsoncConfigVal;
currRec.userConfirm = item.userConfirm;
currRec.DtConfirm = item.DtConfirm;
localDbCtx.Entry(currRec).State = EntityState.Modified;
}
}
await localDbCtx.SaveChangesAsync();
fatto = true;
@@ -373,6 +407,33 @@ namespace WebDoorCreator.Data.Controllers
return fatto;
}
/// <summary>
/// Delete doorOp list
/// </summary>
/// <param name="modOpRec">Record to delete</param>
/// <returns></returns>
public async Task<bool> DoorOpDeleteRange(List<DoorOpModel> listOpRec)
{
bool fatto = false;
using (WDCDataContext localDbCtx = new WDCDataContext(_configuration))
{
try
{
localDbCtx
.DbSetDoorOp
.RemoveRange(listOpRec);
await localDbCtx.SaveChangesAsync();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante DoorOpDeleteRange: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Adding a new DoorOpType
/// </summary>
@@ -675,7 +736,41 @@ namespace WebDoorCreator.Data.Controllers
}
catch (Exception exc)
{
Log.Error($"Eccezione durante OrderAd: {Environment.NewLine}{exc}");
Log.Error($"Eccezione durante OrderAdd: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Updating an order status
/// </summary>
/// <param name="orderId"></param>
/// <param name="newStatus"></param>
/// <returns></returns>
public async Task<bool> OrderUpdate(int orderId, int newStatus)
{
bool fatto = false;
using (WDCDataContext localDbCtx = new WDCDataContext(_configuration))
{
try
{
var currRec = localDbCtx
.DbSetOrders
.Where(x => x.OrderId == orderId)
.FirstOrDefault();
//if is not null edit the record found
if (currRec != null)
{
currRec.Status = newStatus;
localDbCtx.Entry(currRec).State = EntityState.Modified;
}
await localDbCtx.SaveChangesAsync();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione durante OrderUpdate: {Environment.NewLine}{exc}");
}
}
return fatto;
+162
View File
@@ -0,0 +1,162 @@
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Newtonsoft.Json;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.Data.DTO;
namespace WebDoorCreator.Data.DDF
{
public class Converter
{
#region Public Constructors
/// <summary>
/// Init del convertitore secondo impostazioni standard
/// </summary>
/// <param name="vers"></param>
/// <param name="remDoorOp"></param>
/// <param name="headRows"></param>
/// <param name="footRows"></param>
public Converter(string vers, bool remDoorOp, List<string> headRows, List<string> footRows)
{
FormatVers = vers;
RemDoorOp = remDoorOp;
HeadRows = headRows;
FootRows = footRows;
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Fornisce il DDF corrispondente all'elenco OP inviato, seocndo la conf del convertitore
/// </summary>
/// <param name="listOp"></param>
/// <returns></returns>
public string GetSerialized(List<DoorOpModel> listOp)
{
string outDdf = "";
try
{
DoorOpsDTO CurrentDoorOp = new DoorOpsDTO();
EdgesDto CurrentEdges = new EdgesDto();
SizeDto CurrentSize = new SizeDto();
SwingDto CurrentSwing = new SwingDto();
PropertiesDto CurrentProperties = new PropertiesDto();
FinishingDto CurrentFinishing = new FinishingDto();
DDFDto CurrentConf = new DDFDto();
ListValuesModel CurrentCompoOrder = new ListValuesModel();
// per prima cosa popolo gli oggetti di appoggio...
dictDoorOP = new Dictionary<string, List<Dictionary<string, string>>>();
var i = 0;
foreach (var item in listOp.Where(x=>x.ObjectId != "Size" && x.ObjectId != "Profiles" && x.ObjectId != "Swing" && x.ObjectId != "Properties" && x.ObjectId != "Finishing"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, string>>(item.JsoncActVal!);
if (deserialized != null)
{
if (dictDoorOP.ContainsKey(item.ObjectId))
{
var actList = dictDoorOP[item.ObjectId];
actList.Add(deserialized.Where(x => x.Key != "Folder").ToDictionary(x => x.Key, x => x.Value));
//actList.Add(new Dictionary<string, string>() { ["Separator"] = " "});
dictDoorOP[item.ObjectId] = actList;
}
else
{
var currList = new List<Dictionary<string, string>>();
currList.Add(deserialized.Where(x => x.Key != "Folder").ToDictionary(x => x.Key, x => x.Value));
//currList.Add(new Dictionary<string, string>() { ["Separator"] = " " });
dictDoorOP.Add(item.ObjectId, currList);
var sep = new List<Dictionary<string, string>>();
dictDoorOP.Add($"Separator_{i}", sep);
}
}
i++;
}
CurrentDoorOp.hardware = dictDoorOP;
string doorOpSer = CurrentDoorOp.GetSerialized(RemDoorOp);
dictBaseDoorOp.Clear();
foreach (var item in listOp.Where(x => x.ObjectId == "Properties"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(item.JsoncActVal!);
if (deserialized != null)
{
dictBaseDoorOp = deserialized;
}
i++;
}
CurrentProperties.Properties = dictBaseDoorOp;
string WTSer = CurrentProperties.GetSerialized(RemDoorOp);
dictBaseDoorOp.Clear();
foreach (var item in listOp.Where(x => x.ObjectId == "Finishing"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(item.JsoncActVal!);
if (deserialized != null)
{
dictBaseDoorOp = deserialized;
}
i++;
}
CurrentFinishing.finishing = dictBaseDoorOp;
string FinishingSer = CurrentFinishing.GetSerialized(RemDoorOp);
dictBaseDoorOp.Clear();
foreach (var item in listOp.Where(x => x.ObjectId == "Profiles"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(item.JsoncActVal!);
if (deserialized != null)
{
dictBaseDoorOp = deserialized;
}
i++;
}
// ora popolo l'oggetto DTO principale
CurrentEdges.profiles = dictBaseDoorOp;
string edgesSer = CurrentEdges.GetSerialized(RemDoorOp);
dictBaseDoorOp.Clear();
foreach (var item in listOp.Where(x => x.ObjectId == "Size"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(item.JsoncActVal!);
if (deserialized != null)
{
dictBaseDoorOp = deserialized;
}
i++;
}
CurrentSize.size = dictBaseDoorOp;
string sizeSer = CurrentSize.GetSerialized(RemDoorOp);
//dictBaseDoorOp.Clear();
foreach (var item in listOp.Where(x => x.ObjectId == "Swing"))
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(item.JsoncActVal!);
if (deserialized != null)
{
dictBaseSwing = deserialized;
}
i++;
}
CurrentSwing.swing = dictBaseSwing;
string swingSer = CurrentSwing.GetSerialized(RemDoorOp);
CurrentConf.version = FormatVers;
outDdf = CurrentConf.GetSerialized(HeadRows, FootRows, doorOpSer, edgesSer, sizeSer, swingSer, WTSer, FinishingSer);
}
catch
{ }
return outDdf;
}
#endregion Public Methods
#region Protected Properties
protected Dictionary<string, List<Dictionary<string, string>>> dictDoorOP { get; set; } = new Dictionary<string, List<Dictionary<string, string>>>();
protected Dictionary<string, Dictionary<string, string>> dictBaseDoorOp { get; set; } = new Dictionary<string, Dictionary<string, string>>();
protected Dictionary<string, Dictionary<string, string>> dictBaseSwing { get; set; } = new Dictionary<string, Dictionary<string, string>>();
protected List<string> FootRows { get; set; } = new List<string>();
protected string FormatVers { get; set; } = "0";
protected List<string> HeadRows { get; set; } = new List<string>();
protected List<Dictionary<string, string>> listDictDoorOP { get; set; } = new List<Dictionary<string, string>>();
protected bool RemDoorOp { get; set; } = false;
#endregion Protected Properties
}
}
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.Data.DTO
{
/// <summary>
/// Oggetto contenitore esiti calcolo
/// </summary>
public class CalcResultDTO
{
/// <summary>
/// UID (DoorId.Version)
/// </summary>
public string DoorIdVers { get; set; } = "";
/// <summary>
/// Validated = true / error found = false
/// </summary>
public bool Validated { get; set; } = true;
/// <summary>
/// Error message (optional)
/// </summary>
public string ErrorMsg { get; set; } = "";
/// <summary>
/// SVG generated
/// </summary>
public string SvgGen { get; set; } = "";
/// <summary>
/// Articat path (ex 3d zip/pack)
/// </summary>
public string artifactPath { get; set; } = "";
}
}
+133
View File
@@ -0,0 +1,133 @@
using System.Text;
using WebDoorCreator.Data.DbModels;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class DDFDto
{
#region Public Constructors
public DDFDto()
{ }
#endregion Public Constructors
#region Public Properties
public string version { get; set; } = "0";
public bool produce { get; set; } = true;
public string measures { get; set; } = "inches";
public string code { get; set; } = "0015943";
public OrderDto order { get; set; } = new OrderDto();
public DateTime date { get; set; } = DateTime.Today.Date;
public string piece { get; set; } = "DO_1";
#endregion Public Properties
#region Public Methods
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
/// <summary>
/// Scrive conf serializzata in formato YAML
/// </summary>
/// <param name="headRows"></param>
/// <param name="footRows"></param>
/// <param name="serialDoorOps"></param>
/// <param name="serialEdges"></param>
/// <param name="serialSize"></param>
/// <param name="serialSwing"></param>
/// <param name="serialProperties"></param>
/// <returns></returns>
public string GetSerialized(List<string> headRows, List<string> footRows, string serialDoorOps, string serialEdges, string serialSize, string serialSwing, string serialProperties, string serialFinishing)
{
string fullData = "";
StringBuilder sb = new StringBuilder();
try
{
// header!
if (headRows != null && headRows.Count > 0)
{
sb = new StringBuilder();
foreach (var row in headRows)
{
sb.AppendLine(row);
}
fullData = sb.ToString();
}
// obj principale
var currYaml = GetObjYaml();
fullData += currYaml;
#if false
// aggiungo la parte woodType come yaml reale/striped...
if (!string.IsNullOrEmpty(serialProperties))
{
fullData += serialProperties;
}
// aggiungo la parte finishing come yaml reale/striped...
if (!string.IsNullOrEmpty(serialFinishing))
{
fullData += serialFinishing;
}
#endif
// aggiungo la parte size come yaml reale/striped...
if (!string.IsNullOrEmpty(serialSize))
{
fullData += serialSize;
}
// aggiungo la parte swing come yaml reale/striped...
if (!string.IsNullOrEmpty(serialSwing))
{
fullData += serialSwing;
}
// aggiungo la parte profiles come yaml reale/striped...
if (!string.IsNullOrEmpty(serialEdges))
{
fullData += serialEdges;
}
// aggiungo la parte doorOp come yaml reale/striped...
if (!string.IsNullOrEmpty(serialDoorOps))
{
fullData += serialDoorOps;
}
// footer!
if (footRows != null && footRows.Count > 0)
{
sb = new StringBuilder();
foreach (var row in footRows)
{
sb.AppendLine(row);
}
fullData += sb.ToString();
}
}
catch
{ }
return fullData;
}
#endregion Public Methods
}
}
+66
View File
@@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class DoorOpsDTO
{
public Dictionary<string, List<Dictionary<string, string>>> hardware { get; set; } = new Dictionary<string, List<Dictionary<string, string>>>();
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item.Length > 2 && !item.Contains("Separator"))
{
sb.AppendLine(item);
}
if (item.Contains("Separator"))
{
//sb.Remove(item);
sb.AppendLine(" ");
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+65
View File
@@ -0,0 +1,65 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class EdgesDto
{
public Dictionary<string, Dictionary<string, string>> profiles { get; set; } = new Dictionary<string, Dictionary<string, string>>();
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item.Length > 2 && !item.Contains("Separator"))
{
sb.AppendLine(item);
}
if (item.Contains("Separator"))
{
//sb.Remove(item);
sb.AppendLine(" ");
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+79
View File
@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
using System.Diagnostics;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class FinishingDto
{
public Dictionary<string, Dictionary<string, string>> finishing { get; set; } = new Dictionary<string, Dictionary<string, string>>();
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item != "")
{
if (item.Split(":")[1] != "")
{
if (item.StartsWith(" "))
{
sb.AppendLine($"{char.ToLower(item.Substring(4)[0])}{item.Substring(5)}");
}
else
{
sb.AppendLine(item);
}
}
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
//public static string? FirstCharToLowerCase(this string? str)
//{
// if (!string.IsNullOrEmpty(str) && char.IsUpper(str[0]))
// return str.Length == 1 ? char.ToLower(str[0]).ToString() : char.ToLower(str[0]) + str[1..];
// return str;
//}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+18
View File
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.Data.DTO
{
public class OrderDto
{
public string customer { get; set; } = null!;
public string elevation { get; set; } = null!;
public string project { get; set; } = null!;
public string PO { get; set; } = null!;
public string Line { get; set; } = null!;
}
}
+69
View File
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
using System.Diagnostics;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class SizeDto
{
public Dictionary<string, Dictionary<string, string>> size { get; set; } = new Dictionary<string, Dictionary<string, string>>();
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item.Length > 2 && !item.Contains("Size") && !item.Contains("Properties"))
{
if (item.StartsWith(" "))
{
//sb.AppendLine(item.Substring(2));
sb.AppendLine($" {char.ToLower(item.Substring(4)[0])}{item.Substring(5)}");
}
else
{
sb.AppendLine(item);
}
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+81
View File
@@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
using System.Diagnostics;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class SwingDto
{
public Dictionary<string, Dictionary<string, string>> swing { get; set; } = new Dictionary<string, Dictionary<string, string>>();
public string secure { get; set; } = "UP";
public string material { get; set; } = "wood";
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item != "")
{
if (item.Split(":")[1] != "")
{
if (item.StartsWith(" "))
{
sb.AppendLine($"{char.ToLower(item.Substring(4)[0])}{item.Substring(5)}");
}
else
{
sb.AppendLine(item);
}
}
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
//public static string? FirstCharToLowerCase(this string? str)
//{
// if (!string.IsNullOrEmpty(str) && char.IsUpper(str[0]))
// return str.Length == 1 ? char.ToLower(str[0]).ToString() : char.ToLower(str[0]) + str[1..];
// return str;
//}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+79
View File
@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization;
using System.Diagnostics;
namespace WebDoorCreator.Data.DTO
{
[Serializable]
public class PropertiesDto
{
public Dictionary<string, Dictionary<string, string>> Properties { get; set; } = new Dictionary<string, Dictionary<string, string>>();
/// <summary>
/// Recupera oggetto serializzato YAML oppure "semplificato"
/// </summary>
/// <param name="removeDoorOps"></param>
/// <returns></returns>
public string GetSerialized(bool removeDoorOps)
{
string answ = "";
StringBuilder sb = new StringBuilder();
List<string> outLines = new List<string>();
string rawData = GetObjYaml();
if (removeDoorOps)
{
var lines = rawData.Split(Environment.NewLine);
foreach (var item in lines)
{
if (item != "")
{
if (item.Split(":")[1] != "")
{
if (item.StartsWith(" "))
{
sb.AppendLine($"{char.ToLower(item.Substring(4)[0])}{item.Substring(5)}");
}
else
{
sb.AppendLine(item);
}
}
}
}
answ = sb.ToString();
}
else
{
answ = rawData;
}
return answ;
}
//public static string? FirstCharToLowerCase(this string? str)
//{
// if (!string.IsNullOrEmpty(str) && char.IsUpper(str[0]))
// return str.Length == 1 ? char.ToLower(str[0]).ToString() : char.ToLower(str[0]) + str[1..];
// return str;
//}
/// <summary>
/// Restituisce conf serializzata in formato YAML
/// </summary>
/// <returns></returns>
public string GetObjYaml()
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithIndentedSequences()
.Build();
var rawdata = serializer.Serialize(this);
return rawdata;
}
}
}
+25
View File
@@ -5,6 +5,8 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Runtime.CompilerServices;
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
@@ -91,5 +93,28 @@ namespace WebDoorCreator.Data.DbModels
[ForeignKey("TypeId")]
public virtual DoorTypeModel? TypeNav { get; set; }
public DoorModel ObjClone(string userId)
{
DateTime adesso = DateTime.Now;
DoorModel answ = new DoorModel()
{
MeasureUnit = MeasureUnit,
OrderId = OrderId,
TypeId = TypeId,
DoorExtCode = DoorExtCode,
DateIns = adesso,
UserIdIns = userId,
DateMod = adesso,
UserIdMod = userId,
DoorDescript = DoorDescript,
Quantity = Quantity,
UnitCost = UnitCost,
DateLockExpiry = DateLockExpiry,
UserIdLock = UserIdLock
};
return answ;
}
}
}
+117
View File
@@ -5,6 +5,7 @@ using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
@@ -81,5 +82,121 @@ namespace WebDoorCreator.Data.DbModels
//[ForeignKey("DoorOpTypId")]
//public virtual DoorOpTypeModel? DoorOpTypeNav { get; set; }
[NotMapped]
public Dictionary<string, string> CurrVals
{
get
{
Dictionary<string, string> answ = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(JsoncActVal))
{
try
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, string>>(JsoncActVal);
answ = deserialized ?? new Dictionary<string, string>();
}
catch
{ }
}
return answ;
}
set
{
JsoncActVal = JsonConvert.SerializeObject(value);
}
}
[NotMapped]
public Dictionary<string, List<string>> GraphicParams
{
get
{
Dictionary<string, List<string>> answ = new Dictionary<string, List<string>>();
if (!string.IsNullOrEmpty(JsoncConfigVal))
{
try
{
var deserialized = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(JsoncConfigVal);
answ = deserialized ?? new Dictionary<string, List<string>>();
}
catch
{ }
}
return answ;
}
set
{
JsoncConfigVal = JsonConvert.SerializeObject(value);
}
}
/// <summary>
/// COmparazione tra il dizionario currVal corrente e quello ricevuto
/// </summary>
/// <param name="newDict">Dizionario x comparazione</param>
/// <returns></returns>
public bool JsoncActValEquals(Dictionary<string, string> newDict)
{
string JsonNewVal = JsonConvert.SerializeObject(newDict);
bool answ = JsoncActVal.Equals(JsonNewVal);
return answ;
}
/// <summary>
/// Comparazione tra il dizionario configurazioni corrente e quello ricevuto
/// </summary>
/// <param name="newDict">Dizionario x comparazione</param>
/// <returns></returns>
public bool JsoncConfigValEquals(Dictionary<string, List<string>> newDict)
{
string JsonNewVal = JsonConvert.SerializeObject(newDict);
bool answ = JsoncConfigVal.Equals(JsonNewVal);
return answ;
}
/// <summary>
/// Clone oggetto
/// </summary>
/// <param name="userId"></param>
/// <returns></returns>
public DoorOpModel ObjClone(string userId, int doorId)
{
DoorOpModel answ = new DoorOpModel();
DateTime adesso = DateTime.Now;
if (doorId == 0)
{
answ = new DoorOpModel()
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = userId,
UserIdMod = userId,
ObjectId = ObjectId,
DoorId = DoorId,
JsoncConfigVal = JsoncConfigVal,
JsoncActVal = JsoncActVal,
userConfirm = userConfirm,
DtConfirm = DtConfirm
};
}
else
{
answ = new DoorOpModel()
{
DateIns = adesso,
DateMod = adesso,
UserIdIns = userId,
UserIdMod = userId,
ObjectId = ObjectId,
DoorId = doorId,
JsoncConfigVal = JsoncConfigVal,
JsoncActVal = JsoncActVal,
userConfirm = userConfirm,
DtConfirm = DtConfirm
};
}
return answ;
}
}
}
@@ -72,14 +72,6 @@ namespace WebDoorCreator.Data.DbModels
/// </summary>
public int ParentDoorOpId { get; set; } = 0;
#if false
/// <summary>
/// Codice tipo treeView
/// </summary>
public string TreeCode { get; set; } = "";
#endif
/// <summary>
/// Idx univoco dell'elemento parent (se 0 = root)
/// </summary>
@@ -129,10 +121,5 @@ namespace WebDoorCreator.Data.DbModels
/// Numero massimo associabile a singola Door
/// </summary>
public int MaxAllowed { get; set; } = 1;
#if false
[ForeignKey("ParentDoorOpId")]
public virtual DoorOpModel? ParentNav { get; set; }
#endif
}
}
+5 -4
View File
@@ -3,14 +3,15 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebDoorCreator.Data.DTO;
namespace WebDoorCreator.Data.DbModels
{
public class Edges
{
public string lockEdge { get; set; } = "BV";
public string hingeEdge { get; set; } = "BV";
public string topEdge { get; set; } = "SQ";
public string bottomEdge { get; set; } = "SQ";
public EdgesDto lockedge { get; set; } = new EdgesDto();
public EdgesDto hingeedge { get; set; } = new EdgesDto();
public EdgesDto top { get; set; } = new EdgesDto();
public EdgesDto bottom { get; set; } = new EdgesDto();
}
}
@@ -12,33 +12,18 @@ namespace WebDoorCreator.Data.DbModels
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
[Table("ListValues")]
public partial class ListValuesModel
[Table("SerializedDoors")]
public partial class SerializedDoorsModel
{
#region Public Properties
[MaxLength(50)]
public string TableName { get; set; }
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DoorTmpId { get; set; }
[MaxLength(50)]
public string FieldName { get; set; }
public string DoorSerVal { get; set; }
[MaxLength(50)]
public string Value { get; set; }
[MaxLength(50)]
public string Label { get; set; }
public int Ordinal { get; set; }
[MaxLength(50)]
public string InputType{ get; set; }
[MaxLength(100)]
public string DefaultVal { get; set; }
[MaxLength(5)]
public bool isSerializable { get; set; }
public bool Lock { get; set; }
#endregion Public Properties
}
+1 -1
View File
@@ -54,7 +54,7 @@ namespace WebDoorCreator.Data.DbModels
/// <summary>
/// Stato globale dell'ordine
/// </summary>
public OrderStatus Status { get; set; } = OrderStatus.NA;
public int Status { get; set; } = 10;
/// <summary>
/// Descrizione
@@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.Data.DbModels
{
#nullable disable
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
[Table("ListValues")]
public partial class ListValuesModel
{
#region Public Properties
[MaxLength(50)]
public string TableName { get; set; }
[MaxLength(50)]
public string FieldName { get; set; }
[MaxLength(50)]
public string Value { get; set; }
[MaxLength(50)]
public string Label { get; set; }
public int Ordinal { get; set; }
[MaxLength(50)]
public string InputType{ get; set; }
[MaxLength(100)]
public string DefaultVal { get; set; }
[MaxLength(5)]
public bool isSerializable { get; set; }
#endregion Public Properties
}
}
@@ -39,15 +39,5 @@ namespace WebDoorCreator.Data.DbModels
/// Name from AspNetRole table
/// </summary>
public string RoleName { get; set; } = "";
#if false
/// <summary>
/// ClaimType from AspNetUserClaims table
/// </summary>
public string ClaimType { get; set; } = "";
/// <summary>
/// ClaimValue from AspNetUserClaims table
/// </summary>
public string ClaimValue { get; set; } = "";
#endif
}
}
+147
View File
@@ -0,0 +1,147 @@
using NLog;
using StackExchange.Redis;
using System.Diagnostics;
namespace WebDoorCreator.Data
{
public class MessagePipe
{
#region Public Constructors
public MessagePipe(IConnectionMultiplexer redisConn, string channelName, bool enableLog = false)
{
_channel = channelName;
redis = redisConn;
redisDb = redis.GetDatabase();
this.enableLog = enableLog;
// aggiungo sottoscrittore
setupSubscriber();
}
#endregion Public Constructors
#region Public Events
public event EventHandler EA_NewMessage = delegate { };
#endregion Public Events
#region Public Methods
public bool saveAndSendMessage(string memKey, string message)
{
bool answ = false;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
// invio notifica tramite il canale richiesto
answ = sendMessage(message);
if (redisDb != null)
{
redisDb.StringSetAsync(memKey, message);
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
if (numSent.ContainsKey(memKey))
{
numSent[memKey]++;
}
else
{
numSent.Add(memKey, 1);
}
if (enableLog || numSent[memKey] > 30)
{
Log.Info($"saveAndSendMessage| mKey {memKey} x {numSent[memKey]} | {message.Length} size | {ts.TotalMilliseconds} ms");
numSent[memKey] = 0;
}
return answ;
}
/// <summary>
/// Invio messaggio sul canale
/// </summary>
/// <param name="newMess"></param>
/// <returns></returns>
public bool sendMessage(string newMess)
{
bool answ = false;
ISubscriber sub = redis.GetSubscriber();
sub.Publish(_channel, newMess);
return answ;
}
#endregion Public Methods
#region Protected Fields
protected static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Protected Fields
#region Private Fields
private bool enableLog = false;
private Dictionary<string, int> numSent = new Dictionary<string, int>();
private IConnectionMultiplexer redis;
private IDatabase? redisDb;
#endregion Private Fields
#region Private Properties
/// <summary>
/// Canale associato al gestore pipeline messaggi
/// </summary>
private string _channel { get; set; } = "";
#endregion Private Properties
#region Private Methods
private void setupSubscriber()
{
ISubscriber sub = redis.GetSubscriber();
//Subscribe to the channel named messages
sub.Subscribe(_channel, (channel, message) =>
{
Log.Trace($"ch {channel} | {message}");
// messaggio
PubSubEventArgs mea = new PubSubEventArgs(message);
// se qualcuno ascolta sollevo evento nuovo valore...
if (EA_NewMessage != null)
{
EA_NewMessage(this, mea);
}
});
Log.Info($"Subscribed {_channel}");
}
#endregion Private Methods
/// <summary>
/// Invio messaggio sul canale + salvataggio in cache REDIS
/// </summary>
/// <param name="memKey">Chiave REDIS x salvare valore</param>
/// <param name="message"></param>
}
public class PubSubEventArgs : EventArgs
{
#region Public Constructors
public PubSubEventArgs(string messaggio)
{
this.newMessage = messaggio;
}
#endregion Public Constructors
#region Public Properties
public string newMessage { get; set; } = "";
#endregion Public Properties
}
}
@@ -0,0 +1,869 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using WebDoorCreator.Data;
#nullable disable
namespace WebDoorCreator.Data.Migrations.WDCData
{
[DbContext(typeof(WDCDataContext))]
[Migration("20230414135021_AddSerializedDoorsModel")]
partial class AddSerializedDoorsModel
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.UseCollation("Latin1_General_CI_AS")
.HasAnnotation("ProductVersion", "6.0.14")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetRoles", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("AspNetRoles", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUsers", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedUserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("PasswordHash")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("AspNetUsers", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.CompanyModel", b =>
{
b.Property<int>("CompanyId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("CompanyId"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("City")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("CompanyExtCode")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("CompanyName")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<string>("CompanyToken")
.IsRequired()
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("PrivateNote")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<string>("State")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("VAT")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("ZipCode")
.HasColumnType("int");
b.HasKey("CompanyId");
b.ToTable("Company");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b =>
{
b.Property<int>("DoorId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorId"), 1L, 1);
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateLockExpiry")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("DoorDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("DoorExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("MeasureUnit")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("OrderId")
.HasColumnType("int");
b.Property<int>("Quantity")
.HasColumnType("int");
b.Property<int>("TypeId")
.HasColumnType("int");
b.Property<decimal>("UnitCost")
.HasColumnType("decimal(18,2)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdLock")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("DoorId");
b.HasIndex("OrderId");
b.HasIndex("TypeId");
b.ToTable("Door");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b =>
{
b.Property<int>("DoorOpId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorOpId"), 1L, 1);
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("DoorId")
.HasColumnType("int");
b.Property<DateTime?>("DtConfirm")
.HasColumnType("datetime2");
b.Property<string>("JsoncActVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("JsoncConfigVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ObjectId")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("userConfirm")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("DoorOpId");
b.HasIndex("DoorId");
b.ToTable("DoorOp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpTypeModel", b =>
{
b.Property<int>("DoorOpTypId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorOpTypId"), 1L, 1);
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("DisplayUrl")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<HierarchyId>("DoorOpIdPathFromPatriarch")
.HasColumnType("hierarchyid");
b.Property<string>("ExtDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ExtOpCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("FPath")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("HasHw")
.HasColumnType("bit");
b.Property<string>("HwCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("HwDescription")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsConcrete")
.HasColumnType("bit");
b.Property<bool>("IsDefault")
.HasColumnType("bit");
b.Property<string>("JsoncConfig")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("MaxAllowed")
.HasColumnType("int");
b.Property<string>("OpCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ParentDoorOpId")
.HasColumnType("int");
b.Property<string>("Rev")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ValidFrom")
.HasColumnType("datetime2");
b.Property<DateTime>("ValidUntil")
.HasColumnType("datetime2");
b.HasKey("DoorOpTypId");
b.ToTable("DoorOpType");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorTypeModel", b =>
{
b.Property<int>("TypeId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("TypeId"), 1L, 1);
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("TypeCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("TypeId");
b.ToTable("DoorType");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.GraphicParamsModel", b =>
{
b.Property<int>("GraphicParamId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("GraphicParamId"), 1L, 1);
b.Property<int>("compoId")
.HasColumnType("int");
b.Property<string>("graphicParamAlias")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamDefaultVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamKey")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamsN")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("GraphicParamId");
b.ToTable("GraphicParams");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.HardwareModel", b =>
{
b.Property<int>("HardwareId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("HardwareId"), 1L, 1);
b.Property<string>("compoAlias")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("compoLayerName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("compoName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("compoTemplateIsActive")
.HasColumnType("bit");
b.HasKey("HardwareId");
b.ToTable("Hardware");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.LanguageModel", b =>
{
b.Property<string>("CodLingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("DescrizioneLingua")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("CodLingua");
b.ToTable("Languages");
b.HasData(
new
{
CodLingua = "EN",
DescrizioneLingua = "English"
},
new
{
CodLingua = "IT",
DescrizioneLingua = "Italiano"
});
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesModel", b =>
{
b.Property<string>("TableName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("FieldName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Value")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("DefaultVal")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("InputType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Label")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("Ordinal")
.HasColumnType("int");
b.Property<bool>("isSerializable")
.HasMaxLength(5)
.HasColumnType("bit");
b.HasKey("TableName", "FieldName", "Value");
b.ToTable("ListValues");
b.HasData(
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "LH",
Label = "Left Handed",
Ordinal = 1,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "RH",
Label = "Right Handed",
Ordinal = 2,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "LHR",
Label = "Left Handed Reverse",
Ordinal = 3,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "RHR",
Label = "Right Handed Reverse",
Ordinal = 4,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "BV",
Label = "Bevel",
Ordinal = 1,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "SQ",
Label = "Squared",
Ordinal = 2,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "1B",
Label = "Bull Nose 1",
Ordinal = 3,
isSerializable = false
});
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesTempModel", b =>
{
b.Property<string>("TableName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("FieldName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Value")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("DefaultVal")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("InputType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Label")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("Ordinal")
.HasColumnType("int");
b.Property<bool>("isSerializable")
.HasMaxLength(5)
.HasColumnType("bit");
b.HasKey("TableName", "FieldName", "Value");
b.ToTable("ListValuesTemp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b =>
{
b.Property<int>("OrderId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("OrderId"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("OrderDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("OrderExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("OrderId");
b.HasIndex("CompanyId");
b.ToTable("Order");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderStatusViewModel", b =>
{
b.Property<int>("OrderId")
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("OrderId"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<int>("NumDoors")
.HasColumnType("int");
b.Property<int>("NumType")
.HasColumnType("int");
b.Property<string>("OrderDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("OrderExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("OrderStatus")
.HasColumnType("int");
b.Property<decimal>("TotCost")
.HasColumnType("decimal(18,2)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("OrderId");
b.ToView("OrderStatusViewModel");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.SerializedDoorsModel", b =>
{
b.Property<int>("DoorTmpId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorTmpId"), 1L, 1);
b.Property<string>("DoorSerVal")
.HasColumnType("nvarchar(max)");
b.Property<bool>("Lock")
.HasColumnType("bit");
b.HasKey("DoorTmpId");
b.ToTable("SerializedDoors");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.UsersViewModel", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "RoleId");
b.ToView("UsersViewModel");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyModel", b =>
{
b.Property<string>("Lingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Lemma")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Traduzione")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.HasKey("Lingua", "Lemma");
b.ToTable("Vocabulary");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyTempModel", b =>
{
b.Property<string>("Lingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Lemma")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Traduzione")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.HasKey("Lingua", "Lemma");
b.ToTable("VocabularyTemp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.AspNetRoles", "RolesNav")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("WebDoorCreator.Data.DbModels.AspNetUsers", "UsersNav")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("RolesNav");
b.Navigation("UsersNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.OrderModel", "OrderNav")
.WithMany()
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("WebDoorCreator.Data.DbModels.DoorTypeModel", "TypeNav")
.WithMany()
.HasForeignKey("TypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("OrderNav");
b.Navigation("TypeNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.DoorModel", "DoorNav")
.WithMany()
.HasForeignKey("DoorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("DoorNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.CompanyModel", "CompanyNav")
.WithMany()
.HasForeignKey("CompanyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CompanyNav");
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,32 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace WebDoorCreator.Data.Migrations.WDCData
{
public partial class AddSerializedDoorsModel : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "SerializedDoors",
columns: table => new
{
DoorTmpId = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DoorSerVal = table.Column<string>(type: "nvarchar(max)", nullable: true),
Lock = table.Column<bool>(type: "bit", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_SerializedDoors", x => x.DoorTmpId);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "SerializedDoors");
}
}
}
@@ -0,0 +1,869 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using WebDoorCreator.Data;
#nullable disable
namespace WebDoorCreator.Data.Migrations.WDCData
{
[DbContext(typeof(WDCDataContext))]
[Migration("20230502100541_orderStatusTypeChange")]
partial class orderStatusTypeChange
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.UseCollation("Latin1_General_CI_AS")
.HasAnnotation("ProductVersion", "6.0.14")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1);
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetRoles", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("nvarchar(450)");
b.Property<string>("ConcurrencyStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("AspNetRoles", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.HasKey("UserId", "RoleId");
b.HasIndex("RoleId");
b.ToTable("AspNetUserRoles", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUsers", b =>
{
b.Property<string>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("nvarchar(450)");
b.Property<int>("AccessFailedCount")
.HasColumnType("int");
b.Property<string>("ConcurrencyStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("EmailConfirmed")
.HasColumnType("bit");
b.Property<bool>("LockoutEnabled")
.HasColumnType("bit");
b.Property<DateTimeOffset?>("LockoutEnd")
.HasColumnType("datetimeoffset");
b.Property<string>("NormalizedEmail")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("NormalizedUserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("PasswordHash")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("PhoneNumber")
.HasColumnType("nvarchar(max)");
b.Property<bool>("PhoneNumberConfirmed")
.HasColumnType("bit");
b.Property<string>("SecurityStamp")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("TwoFactorEnabled")
.HasColumnType("bit");
b.Property<string>("UserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("AspNetUsers", null, t => t.ExcludeFromMigrations());
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.CompanyModel", b =>
{
b.Property<int>("CompanyId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("CompanyId"), 1L, 1);
b.Property<string>("Address")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("City")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("CompanyExtCode")
.IsRequired()
.HasMaxLength(250)
.HasColumnType("nvarchar(250)");
b.Property<string>("CompanyName")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<string>("CompanyToken")
.IsRequired()
.HasMaxLength(150)
.HasColumnType("nvarchar(150)");
b.Property<string>("PrivateNote")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.Property<string>("State")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("VAT")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("ZipCode")
.HasColumnType("int");
b.HasKey("CompanyId");
b.ToTable("Company");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b =>
{
b.Property<int>("DoorId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorId"), 1L, 1);
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateLockExpiry")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("DoorDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("DoorExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("MeasureUnit")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("OrderId")
.HasColumnType("int");
b.Property<int>("Quantity")
.HasColumnType("int");
b.Property<int>("TypeId")
.HasColumnType("int");
b.Property<decimal>("UnitCost")
.HasColumnType("decimal(18,2)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdLock")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("DoorId");
b.HasIndex("OrderId");
b.HasIndex("TypeId");
b.ToTable("Door");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b =>
{
b.Property<int>("DoorOpId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorOpId"), 1L, 1);
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("DoorId")
.HasColumnType("int");
b.Property<DateTime?>("DtConfirm")
.HasColumnType("datetime2");
b.Property<string>("JsoncActVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("JsoncConfigVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ObjectId")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("userConfirm")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("DoorOpId");
b.HasIndex("DoorId");
b.ToTable("DoorOp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpTypeModel", b =>
{
b.Property<int>("DoorOpTypId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorOpTypId"), 1L, 1);
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("DisplayUrl")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<HierarchyId>("DoorOpIdPathFromPatriarch")
.HasColumnType("hierarchyid");
b.Property<string>("ExtDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ExtOpCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("FPath")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("HasHw")
.HasColumnType("bit");
b.Property<string>("HwCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("HwDescription")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("IsConcrete")
.HasColumnType("bit");
b.Property<bool>("IsDefault")
.HasColumnType("bit");
b.Property<string>("JsoncConfig")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("MaxAllowed")
.HasColumnType("int");
b.Property<string>("OpCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("ParentDoorOpId")
.HasColumnType("int");
b.Property<string>("Rev")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ValidFrom")
.HasColumnType("datetime2");
b.Property<DateTime>("ValidUntil")
.HasColumnType("datetime2");
b.HasKey("DoorOpTypId");
b.ToTable("DoorOpType");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorTypeModel", b =>
{
b.Property<int>("TypeId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("TypeId"), 1L, 1);
b.Property<string>("Description")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("TypeCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("TypeId");
b.ToTable("DoorType");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.GraphicParamsModel", b =>
{
b.Property<int>("GraphicParamId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("GraphicParamId"), 1L, 1);
b.Property<int>("compoId")
.HasColumnType("int");
b.Property<string>("graphicParamAlias")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamDefaultVal")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamKey")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamType")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("graphicParamsN")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("GraphicParamId");
b.ToTable("GraphicParams");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.HardwareModel", b =>
{
b.Property<int>("HardwareId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("HardwareId"), 1L, 1);
b.Property<string>("compoAlias")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("compoLayerName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("compoName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<bool>("compoTemplateIsActive")
.HasColumnType("bit");
b.HasKey("HardwareId");
b.ToTable("Hardware");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.LanguageModel", b =>
{
b.Property<string>("CodLingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("DescrizioneLingua")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("CodLingua");
b.ToTable("Languages");
b.HasData(
new
{
CodLingua = "EN",
DescrizioneLingua = "English"
},
new
{
CodLingua = "IT",
DescrizioneLingua = "Italiano"
});
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesModel", b =>
{
b.Property<string>("TableName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("FieldName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Value")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("DefaultVal")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("InputType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Label")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("Ordinal")
.HasColumnType("int");
b.Property<bool>("isSerializable")
.HasMaxLength(5)
.HasColumnType("bit");
b.HasKey("TableName", "FieldName", "Value");
b.ToTable("ListValues");
b.HasData(
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "LH",
Label = "Left Handed",
Ordinal = 1,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "RH",
Label = "Right Handed",
Ordinal = 2,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "LHR",
Label = "Left Handed Reverse",
Ordinal = 3,
isSerializable = false
},
new
{
TableName = "Opening",
FieldName = "Swing",
Value = "RHR",
Label = "Right Handed Reverse",
Ordinal = 4,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "BV",
Label = "Bevel",
Ordinal = 1,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "SQ",
Label = "Squared",
Ordinal = 2,
isSerializable = false
},
new
{
TableName = "Edges",
FieldName = "EdgeType",
Value = "1B",
Label = "Bull Nose 1",
Ordinal = 3,
isSerializable = false
});
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.ListValuesTempModel", b =>
{
b.Property<string>("TableName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("FieldName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Value")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("DefaultVal")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("InputType")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Label")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<int>("Ordinal")
.HasColumnType("int");
b.Property<bool>("isSerializable")
.HasMaxLength(5)
.HasColumnType("bit");
b.HasKey("TableName", "FieldName", "Value");
b.ToTable("ListValuesTemp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b =>
{
b.Property<int>("OrderId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("OrderId"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<DateTime>("DateMod")
.HasColumnType("datetime2");
b.Property<string>("OrderDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("OrderExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("OrderId");
b.HasIndex("CompanyId");
b.ToTable("Order");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderStatusViewModel", b =>
{
b.Property<int>("OrderId")
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("OrderId"), 1L, 1);
b.Property<int>("CompanyId")
.HasColumnType("int");
b.Property<DateTime>("DateIns")
.HasColumnType("datetime2");
b.Property<int>("NumDoors")
.HasColumnType("int");
b.Property<int>("NumType")
.HasColumnType("int");
b.Property<string>("OrderDescript")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("OrderExtCode")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("OrderStatus")
.HasColumnType("int");
b.Property<decimal>("TotCost")
.HasColumnType("decimal(18,2)");
b.Property<string>("UserIdIns")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserIdMod")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("OrderId");
b.ToView("OrderStatusViewModel");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.SerializedDoorsModel", b =>
{
b.Property<int>("DoorTmpId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorTmpId"), 1L, 1);
b.Property<string>("DoorSerVal")
.HasColumnType("nvarchar(max)");
b.Property<bool>("Lock")
.HasColumnType("bit");
b.HasKey("DoorTmpId");
b.ToTable("SerializedDoors");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.UsersViewModel", b =>
{
b.Property<string>("UserId")
.HasColumnType("nvarchar(450)");
b.Property<string>("RoleId")
.HasColumnType("nvarchar(450)");
b.Property<string>("Email")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("RoleName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("UserName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("UserId", "RoleId");
b.ToView("UsersViewModel");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyModel", b =>
{
b.Property<string>("Lingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Lemma")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Traduzione")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.HasKey("Lingua", "Lemma");
b.ToTable("Vocabulary");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.VocabularyTempModel", b =>
{
b.Property<string>("Lingua")
.HasMaxLength(5)
.HasColumnType("nvarchar(5)");
b.Property<string>("Lemma")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("Traduzione")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("nvarchar(500)");
b.HasKey("Lingua", "Lemma");
b.ToTable("VocabularyTemp");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.AspNetUserRoles", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.AspNetRoles", "RolesNav")
.WithMany()
.HasForeignKey("RoleId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("WebDoorCreator.Data.DbModels.AspNetUsers", "UsersNav")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("RolesNav");
b.Navigation("UsersNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.OrderModel", "OrderNav")
.WithMany()
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("WebDoorCreator.Data.DbModels.DoorTypeModel", "TypeNav")
.WithMany()
.HasForeignKey("TypeId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("OrderNav");
b.Navigation("TypeNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.DoorOpModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.DoorModel", "DoorNav")
.WithMany()
.HasForeignKey("DoorId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("DoorNav");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.OrderModel", b =>
{
b.HasOne("WebDoorCreator.Data.DbModels.CompanyModel", "CompanyNav")
.WithMany()
.HasForeignKey("CompanyId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("CompanyNav");
});
#pragma warning restore 612, 618
}
}
}
@@ -0,0 +1,19 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace WebDoorCreator.Data.Migrations.WDCData
{
public partial class orderStatusTypeChange : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
@@ -718,6 +718,25 @@ namespace WebDoorCreator.Data.Migrations.WDCData
b.ToView("OrderStatusViewModel");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.SerializedDoorsModel", b =>
{
b.Property<int>("DoorTmpId")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("DoorTmpId"), 1L, 1);
b.Property<string>("DoorSerVal")
.HasColumnType("nvarchar(max)");
b.Property<bool>("Lock")
.HasColumnType("bit");
b.HasKey("DoorTmpId");
b.ToTable("SerializedDoors");
});
modelBuilder.Entity("WebDoorCreator.Data.DbModels.UsersViewModel", b =>
{
b.Property<string>("UserId")
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -75,6 +75,7 @@ namespace WebDoorCreator.Data
public virtual DbSet<VocabularyModel> DbSetVocabulary { get; set; } = null!;
public virtual DbSet<VocabularyTempModel> DbSetVocabularyTemp { get; set; } = null!;
public virtual DbSet<LanguageModel> DbSetLanguages { get; set; } = null!;
public virtual DbSet<SerializedDoorsModel> DbSetSerializedDoors { get; set; } = null!;
#endregion Public Properties
@@ -143,8 +144,6 @@ namespace WebDoorCreator.Data
// gestione onCascade DoorOp <--> parent
//modelBuilder.Entity<DoorOpTypeModel>().HasOne<DoorOpModel>(e => e.ParentNav).WithOne().OnDelete(DeleteBehavior.NoAction);
#if false
#endif
// verifico SE devo eseguire la migration del DB IDENT...
bool disableMigrate = false;
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
@@ -23,7 +23,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="NLog" Version="5.1.2" />
<PackageReference Include="StackExchange.Redis" Version="2.6.96" />
<PackageReference Include="YamlDotNet" Version="13.1.0" />
</ItemGroup>
<ItemGroup>
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.SDK
{
/// <summary>
/// Oggetto contenitore esiti calcolo
/// </summary>
public class CalcResultDTO
{
/// <summary>
/// UID (DoorId.Version)
/// </summary>
public string DoorIdVers { get; set; } = "";
/// <summary>
/// Validated = true / error found = false
/// </summary>
public bool Validated { get; set; } = true;
/// <summary>
/// Error message (optional)
/// </summary>
public string ErrorMsg { get; set; } = "";
/// <summary>
/// SVG generated
/// </summary>
public string SvgGen { get; set; } = "";
/// <summary>
/// Articat path (ex 3d zip/pack)
/// </summary>
public string artifactPath { get; set; } = "";
}
}
+61
View File
@@ -0,0 +1,61 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebDoorCreator.SDK
{
public class ProcStats
{
private static ConcurrentDictionary<string, long> Counter = new ConcurrentDictionary<string, long>();
private static ConcurrentDictionary<string, long> Timers = new ConcurrentDictionary<string, long>();
internal static void UpdateStat(string functionName, long timer)
{
if (!Timers.ContainsKey(functionName))
Timers.TryAdd(functionName, timer);
else
Timers[functionName] += timer;
if (!Counter.ContainsKey(functionName))
Counter.TryAdd(functionName, 1);
else
Counter[functionName]++;
}
internal volatile static Dictionary<string, string> RunningThreadStatus = new Dictionary<string, string>();
public static ConcurrentQueue<(string, long, long)> RecordList = new ConcurrentQueue<(string, long, long)>();
public static ConcurrentDictionary<int, CumSumData> ExeCumSum = new ConcurrentDictionary<int, CumSumData>();
public static bool RecordData(int numThread , long exeTime, long othTime)
{
bool fatto = false;
if (ExeCumSum.ContainsKey(numThread))
{
ExeCumSum[numThread].NumRec++;
ExeCumSum[numThread].ExeTime += exeTime;
ExeCumSum[numThread].OthTime += othTime;
}
else
{
ExeCumSum.TryAdd(numThread, new CumSumData(1, exeTime, othTime));
}
return fatto;
}
public class CumSumData
{
public CumSumData(long nrec, long eTime, long oTime)
{
NumRec = nrec;
ExeTime = eTime;
OthTime = oTime;
}
public long NumRec { get; set; } = 0;
public long ExeTime { get; set; } = 0;
public long OthTime { get; set; } = 0;
}
}
}
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebDoorCreator.SDK")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("EgalWare")]
[assembly: AssemblyProduct("WebDoorCreator.SDK")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4a07adfc-ca24-4135-ba97-3b8e5d49bc09")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+367
View File
@@ -0,0 +1,367 @@
using Newtonsoft.Json;
using RestSharp;
using System.Collections.Generic;
using System.Net.NetworkInformation;
namespace WebDoorCreator.SDK
{
public class WDC
{
#region Public Constructors
/// <summary>
/// Classe per effettuare comunicazioni con NKC
/// </summary>
/// <param name="baseIp">IP di base x ping</param>
/// <param name="baseUrl">URL di base x chiamate REST</param>
/// <param name="wksCode">Codice workstation di calcolo</param>
public WDC(string baseIp, string baseUrl, string wksCode)
{
_baseIp = baseIp;
apiUrl = baseUrl;
_wksCode = wksCode;
}
#endregion Public Constructors
#region Public Properties
/// <summary>
/// Numero di chiamate in coda da processare
/// </summary>
public int numTask2proc
{
get
{
int answ = 0;
try
{
var rawData = callUrlGet(urlActLenght);
if (rawData != "ERR")
{
var returnData = JsonConvert.DeserializeObject<Dictionary<string, long>>(rawData);
// rendo!
if (returnData.ContainsKey(pendQueue))
{
answ = (int)returnData[pendQueue];
}
}
}
catch { }
return answ;
}
}
/// <summary>
/// Effettua test alive all'indirizzo del server
/// </summary>
public bool testAlive
{
get
{
bool answ = false;
try
{
var rawData = callUrlGet(urlAlive);
string returnData = JsonConvert.DeserializeObject<string>(rawData);
answ = returnData == "OK";
}
catch
{ }
// rendo!
return answ;
}
}
/// <summary>
/// Effettua test ping all'indirizzo del server
/// </summary>
public PingReply testPing
{
get
{
Ping myPing = new Ping();
// timeout a 1 sec!
PingReply answ = myPing.Send(_baseIp, 1000);
// rendo!
return answ;
}
}
#endregion Public Properties
#region Public Methods
public static PingReply testPingDevice(string address)
{
Ping myPing = new Ping();
// timeout a 1 sec!
PingReply answ = myPing.Send(address, 2000);
// rendo!
return answ;
}
/// <summary>
/// Elenco degli item da processare, nel formato DoorId, Vers
/// </summary>
public Dictionary<string, string> queueList(int maxNum)
{
Dictionary<string, string> returnData = new Dictionary<string, string>();
Dictionary<string, string> parList = new Dictionary<string, string>()
{
{ "numItems", $"{maxNum}" }
};
var rawData = callUrlGet(urlTakeNextItems, parList);
if (!string.IsNullOrEmpty(rawData) && rawData != "ERR")
{
returnData = JsonConvert.DeserializeObject<Dictionary<string, string>>(rawData);
}
return returnData;
}
/// <summary>
/// Status delle code chiamate
/// </summary>
public Dictionary<string, long> queueStatus()
{
Dictionary<string, long> returnData = new Dictionary<string, long>();
var rawData = callUrlGet(urlActLenght);
if (rawData != "ERR")
{
returnData = JsonConvert.DeserializeObject<Dictionary<string, long>>(rawData);
}
return returnData;
}
/// <summary>
/// Reset delel code di processing
/// </summary>
/// <returns></returns>
public string ResetQueue()
{
Dictionary<string, string> parList = new Dictionary<string, string>
{
{ "passPhrase", "bbbBirdIsTheWord" }
};
var rawData = callUrlPost(urlResetQueue, "", parList);
return rawData;
}
/// <summary>
/// Restitusice l'elenco degli esiti di processing
/// </summary>
/// <param name="calcResults"></param>
/// <returns></returns>
public string SendProcResults(List<CalcResultDTO> calcResults)
{
string payload = JsonConvert.SerializeObject(calcResults);
var rawData = callUrlPost(urlSaveProcRes, payload);
return rawData;
}
#endregion Public Methods
#region Protected Fields
protected const string pendQueue = "pending";
protected const string urlActLenght = "api/Queue/ActLenght";
protected const string urlAlive = "/api/Alive";
protected const string urlResetQueue = "api/Queue/ResetQueue";
protected const string urlSaveProcRes = "api/Queue/SaveProcResult";
protected const string urlStatusList = "api/Queue/StatusList";
protected const string urlTakeNextItems = "api/Queue/TakeNextItems";
#endregion Protected Fields
#region Protected Properties
/// <summary>
/// DnsName/IP di base x chaimate
/// </summary>
protected string _baseIp { get; set; } = "seriate.steamware.net";
/// <summary>
/// Cod Workstation che effettua i calcoli
/// </summary>
protected string _wksCode { get; set; } = "";
/// <summary>
/// URL di base per la comunicazione
///
/// PROD: https://iis01.egalware.com/WDC/SRV/
/// DEV: https://localhost:7043/
/// </summary>
protected string apiUrl { get; set; } = @"https://iis01.egalware.com/WDC/SRV/";
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Effettua chiamata URL GET e restituisce risultato
/// </summary>
/// <param name="URL"></param>
/// <returns></returns>
protected string callUrlGet(string URL)
{
string answ = "";
// cerco online
using (RestClient client = new RestClient(apiUrl))
{
var request = new RestRequest(URL);
try
{
var response = client.Get(request);
// controllo status code risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// deserializzo risposta
answ = response.Content;
}
else
{
answ = "KO";
}
}
catch
{
answ = "ERR";
}
}
// restituisco valore!
return answ;
}
/// <summary>
/// Effettua chiamata URL GET con parametri e restituisce risultato
/// </summary>
/// <param name="URL"></param>
/// <param name="paramsList"></param>
/// <returns></returns>
protected string callUrlGet(string URL, Dictionary<string, string> paramsList)
{
string answ = "";
// cerco online
using (RestClient client = new RestClient(apiUrl))
{
// compongo
string paramsQuery = "";
foreach (var item in paramsList)
{
paramsQuery += $"{item.Key}={item.Value}";
}
var request = new RestRequest($"{URL}?{paramsQuery}");
try
{
var response = client.Get(request);
// controllo status code risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// deserializzo risposta
answ = response.Content;
}
else
{
answ = "KO";
}
}
catch
{
answ = "ERR";
}
}
// restituisco valore!
return answ;
}
/// <summary>
/// Effettua chiamata URL GET con parametri e restituisce risultato
/// </summary>
/// <param name="URL"></param>
/// <param name="payload"></param>
/// <returns></returns>
protected string callUrlPost(string URL, string payload)
{
string answ = "";
// cerco online
using (RestClient client = new RestClient(apiUrl))
{
var request = new RestRequest(URL);
request.AddJsonBody(payload);
try
{
var response = client.Post(request);
// controllo status code risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// deserializzo risposta
answ = response.Content;
}
else
{
answ = "KO";
}
}
catch
{
answ = "ERR";
}
}
// restituisco valore!
return answ;
}
/// <summary>
/// Effettua chiamata URL POST con parametri (opzionali) e payload (opzionale) e restituisce risultato
/// </summary>
/// <param name="URL"></param>
/// <param name="payload"></param>
/// <param name="paramsList"></param>
/// <returns></returns>
protected string callUrlPost(string URL, string payload, Dictionary<string, string> paramsList)
{
string answ = "";
// cerco online
using (RestClient client = new RestClient(apiUrl))
{
var request = new RestRequest(URL);
// compongo
string paramsQuery = "";
if (paramsList != null && paramsList.Count > 0)
{
foreach (var item in paramsList)
{
paramsQuery += $"{item.Key}={item.Value}";
}
request = new RestRequest($"{URL}?{paramsQuery}");
}
if (!string.IsNullOrEmpty(payload))
{
request.AddJsonBody(payload);
}
try
{
var response = client.Post(request);
// controllo status code risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// deserializzo risposta
answ = response.Content;
}
else
{
answ = "KO";
}
}
catch
{
answ = "ERR";
}
}
// restituisco valore!
return answ;
}
#endregion Protected Methods
}
}
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4A07ADFC-CA24-4135-BA97-3B8E5D49BC09}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebDoorCreator.SDK</RootNamespace>
<AssemblyName>WebDoorCreator.SDK</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="RestSharp, Version=110.2.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.110.2.0\lib\net471\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Encodings.Web, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encodings.Web.7.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=7.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.7.0.2\lib\net462\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CalcResultDTO.cs" />
<Compile Include="ProcStats.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="WDC.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl.AsyncInterfaces" version="7.0.0" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
<package id="RestSharp" version="110.2.0" targetFramework="net472" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
<package id="System.Text.Encodings.Web" version="7.0.0" targetFramework="net472" />
<package id="System.Text.Json" version="7.0.2" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
</packages>
+6
View File
@@ -9,6 +9,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebDoorCreator.Core", "WebD
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebDoorCreator.Data", "WebDoorCreator.Data\WebDoorCreator.Data.csproj", "{26466C0D-8946-466B-A38C-C1A9603DA2DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebDoorCreator.API", "WebDoorCreator.API\WebDoorCreator.API.csproj", "{2DFE8045-2F56-43E2-9D2F-1180EF7AD721}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
{26466C0D-8946-466B-A38C-C1A9603DA2DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{26466C0D-8946-466B-A38C-C1A9603DA2DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{26466C0D-8946-466B-A38C-C1A9603DA2DC}.Release|Any CPU.Build.0 = Release|Any CPU
{2DFE8045-2F56-43E2-9D2F-1180EF7AD721}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2DFE8045-2F56-43E2-9D2F-1180EF7AD721}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2DFE8045-2F56-43E2-9D2F-1180EF7AD721}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2DFE8045-2F56-43E2-9D2F-1180EF7AD721}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -0,0 +1,5 @@
{
"version": 1,
"isRoot": true,
"tools": {}
}
@@ -1,13 +1,58 @@
<div>
@if (change)
@if (B_doorOpUpd || true)
{
<button class="btn btn-success"><i class="fa-solid fa-floppy-disk fa-bounce"></i></button>
<button class="btn btn-success" @onclick="() => doSave()"><i class="fa-solid fa-floppy-disk"></i></button>
<a class="btn btn-warning" href="https://iis01.egalware.com/Test3D/Doors041122/EXB_0267100040/EXB_0267100040.html" target="_blank"><i class="fa-solid fa-cube"></i></a>
@if (IsErr)
{
<button class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#errListModal"><i class="fa-solid fa-triangle-exclamation"></i></button>
}
}
else
{
<button class="btn btn-secondary"><i class="fa-solid fa-floppy-disk"></i></button>
<button class="btn btn-secondary"><i class="fa-solid fa-cube"></i></button>
}
<button class="btn btn-success" @onclick="() => toOrderPage()">Return to Order <b>@idOrd</b></button>
@*<button class="btn btn-success" @onclick="() => toOrderPage()">Return to Order <b>@idOrd</b></button>*@
</div>
<!-- Modal Order -->
<div class="modal fade" id="errListModal" tabindex="-1" aria-labelledby="errListModalLabel" aria-hidden="true">
<div class="modal-dialog" style=" overflow-y: initial ">
<div class="modal-content">
<div class="modal-header d-flex justify-content-between">
<h1 class="modal-title fs-5" id="errListModalLabel">Current error</h1>
<i class="fa-solid fa-triangle-exclamation text-danger fs-5"></i>
</div>
<div class="modal-body" style="max-height: 80vh; overflow-y: auto;">
<div class="w-100 text-start">
@ErrCode
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Modal Order -->
<div class="modal fade" id="errListModal" tabindex="-1" aria-labelledby="errListModalLabel" aria-hidden="true">
<div class="modal-dialog" style=" overflow-y: initial ">
<div class="modal-content">
<div class="modal-header d-flex justify-content-between">
<h1 class="modal-title fs-5" id="errListModalLabel">Current error</h1>
<i class="fa-solid fa-triangle-exclamation text-danger fs-5"></i>
</div>
<div class="modal-body" style="max-height: 80vh; overflow-y: auto;">
<div class="w-100 text-start">
@ErrCode
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
@@ -1,23 +1,146 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Newtonsoft.Json;
using System.Configuration;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.Data.DTO;
using WebDoorCreator.Data.Services;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.Buttons
{
public partial class ButtonsDoorDef
{
[Parameter]
public bool paramsChanged { get; set; }
[CascadingParameter]
public bool B_doorOpUpd { get; set; }
[CascadingParameter]
public string ErrCode { get; set; } = "ERROREEEEE";
[CascadingParameter]
public int idDoor { get; set; } = 0;
[Parameter]
public int idOrd { get; set; } = 0;
[CascadingParameter]
public bool IsErr { get; set; } = false;
protected Dictionary<string, string> a { get; set; } = new Dictionary<string, string>();
protected bool change
{
get => WDCRService.isDoorOpUpd;
}
[Inject]
protected IConfiguration config { get; set; } = null!;
protected WebDoorCreator.Data.DDF.Converter currDdfConv { get; set; } = null!;
protected DDFDto CurrentConf { get; set; } = new DDFDto();
protected DoorOpsDTO CurrentDoorOp { get; set; } = new DoorOpsDTO();
protected Dictionary<string, List<Dictionary<string, string>>> dictDoorOP { get; set; } = new Dictionary<string, List<Dictionary<string, string>>>();
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
protected List<Dictionary<string, string>> listDictDoorOP { get; set; } = new List<Dictionary<string, string>>();
protected List<DoorOpModel>? listDoorOp { get; set; }
[Inject]
protected NavigationManager NavManager { get; set; } = null!;
protected bool change { get;set; }
protected List<string> ordListVal { get; set; } = new List<string>();
[Inject]
protected QueueDataService QDataServ { get; set; } = null!;
[Inject]
protected WDCRefreshService WDCRService { get; set; } = null!;
[Inject]
protected WebDoorCreatorService WDCService { get; set; } = null!;
[Inject]
protected WDCUserService WDCUService { get; set; } = null!;
public async Task SaveYaml(string ddfContent)
{
await Task.Delay(1);
string fileName = Path.Combine("temp", $"Conf.yaml");
if (File.Exists(fileName))
{
File.Delete(fileName);
}
// scrivo!
File.WriteAllText(fileName, ddfContent);
}
/// <summary>
/// Effettua Richiesta visione porta 3D
/// </summary>
/// <returns></returns>
protected async Task doReq3D()
{
await Task.Delay(1);
}
/// <summary>
/// Effettua salvataggio record e generazione DDF
/// </summary>
/// <returns></returns>
protected async Task doSave()
{
List<DoorOpModel>? listOpAll = await WDCService.DoorOpGetByDoorId(idDoor);
if (listOpAll != null)
{
List<DoorOpModel> listOp = listOpAll.Where(x => x.userConfirm != "" && x.DtConfirm != null).ToList();
if (listOp != null)
{
// chiamo metodo x avewre DDF serializzato
//var list2Ord = ;
var CurrentCompoOrder = await WDCService.ListValuesGetAll("*", "Hardware");
if (CurrentCompoOrder != null)
{
foreach (var item in CurrentCompoOrder.OrderBy(x => x.Ordinal).ToList())
{
ordListVal.Add(item.TableName);
}
}
listOp = listOp.OrderBy(d => ordListVal.IndexOf(d.ObjectId)).ToList();
string currDdf = currDdfConv.GetSerialized(listOp);
// FIXME TODO: si potrebbe eliminare in futuro che va su REDIS
//await SaveYaml(currDdf);
// versione corrente del DDF generato
int currVers = await QDataServ.SendCalcReq(idDoor, currDdf);
if(currVers > 0)
{
IsErr = false;
}
}
}
}
protected override void OnInitialized()
{
base.OnInitialized();
string vers = config.GetValue<string>("ConfDDF:VersNumber");
bool remDoorOp = config.GetValue<bool>("ConfDDF:RemoveDoorOps");
var headRows = config.GetSection("ConfDDF:Header").Get<List<string>>();
var footRows = config.GetSection("ConfDDF:Footer").Get<List<string>>();
currDdfConv = new WebDoorCreator.Data.DDF.Converter(vers, remDoorOp, headRows, footRows);
WDCRService.EA_UpdDoorOp += WDCRService_EA_UpdDoorOp;
}
protected override async Task OnParametersSetAsync()
{
await Task.Delay(1);
//change = paramsChanged;
}
protected async Task toOrderPage()
{
@@ -27,11 +150,12 @@ namespace WebDoorCreator.UI.Components.Buttons
await Task.Delay(1);
NavManager.NavigateTo($"OrderDetails?idOrd={idOrd}");
}
protected override async Task OnParametersSetAsync()
private async void WDCRService_EA_UpdDoorOp()
{
await Task.Delay(1);
change = paramsChanged;
await InvokeAsync(() =>
{
StateHasChanged();
});
}
}
}
@@ -0,0 +1,60 @@
@if (CurrBaseDoorOp == null)
{
<EgwCoreLib.Razor.LoadingData></EgwCoreLib.Razor.LoadingData>
}
else
{
<div class="row">
<div class="row mb-1">
<div class="col-4">
@if (DoorOp2Save != null)
{
<div>Pending changes: <b>@DoorOp2Save.Count()</b></div>
}
</div>
<div class="col-4"></div>
@if (paramsChanged)
{
<div class="col-4">
<div class="btn-group w-100">
<button class="btn btn-outline-danger" style="cursor: pointer;" @onclick="()=>resetEdit()">
CANCEL
</button>
<button class="btn btn-outline-success" style="cursor: pointer;" @onclick="()=>doSaveDoorOp()">
SAVE
</button>
</div>
</div>
}
else
{
<div class="col-4">
<div class="btn-group w-100">
<button class="btn btn-outline-secondary" style="cursor: default;" disabled>
CANCEL
</button>
<button class="btn btn-outline-secondary" style="cursor: default;" disabled>
SAVE
</button>
</div>
</div>
}
</div>
@foreach (var item in CurrBaseDoorOp)
{
@if (item.ObjectId == "Size" || item.ObjectId == "Swing" || item.ObjectId == "Finishing" || item.ObjectId == "Properties")
{
<div class="col-6 border">
<DoorDataBlock E_doorOp2Save="doSetDoorOp2Save" BlockDoorOp="@item"></DoorDataBlock>
</div>
}
else
{
<div class="col-12 border">
<DoorDataBlock E_doorOp2Save="doSetDoorOp2Save" BlockDoorOp="@item"></DoorDataBlock>
</div>
}
}
</div>
}
@@ -0,0 +1,84 @@
using Microsoft.AspNetCore.Components;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.DoorDef
{
public partial class BaseParamList
{
#region Public Properties
/// <summary>
/// Elenco parametri di base
/// </summary>
[Parameter]
public List<DoorOpModel>? CurrBaseDoorOp { get; set; } = null;
[Parameter]
public EventCallback<bool> E_DoorOpReqRel { get; set; }
#endregion Public Properties
#region Protected Properties
protected List<DoorOpModel> DoorOp2Save { get; set; } = new List<DoorOpModel>();
protected bool paramsChanged { get; set; } = false;
/// <summary>
/// Lingua utente (FixMe !!!)
/// </summary>
protected string userLang { get; set; } = "EN";
[Inject]
protected WebDoorCreatorService WDService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected async Task doSaveDoorOp()
{
if (DoorOp2Save != null)
{
var done = await WDService.DoorOpUpdate(DoorOp2Save);
if (done)
{
DoorOp2Save = new List<DoorOpModel>();
paramsChanged = false;
await Task.Delay(50);
await InvokeAsync(StateHasChanged);
}
}
}
protected async Task doSetDoorOp2Save(DoorOpModel savingDoorOp)
{
await Task.Delay(50);
if (savingDoorOp != null)
{
var doorOp2Rem = DoorOp2Save.Where(x => x.DoorOpId == savingDoorOp.DoorOpId).FirstOrDefault();
if (doorOp2Rem != null)
{
DoorOp2Save.Remove(doorOp2Rem);
}
DoorOp2Save.Add(savingDoorOp);
paramsChanged = DoorOp2Save.Count > 0;
}
await Task.Delay(50);
await InvokeAsync(StateHasChanged);
}
protected async Task resetEdit()
{
// resetto elenco modifiche
DoorOp2Save = new List<DoorOpModel>();
paramsChanged = false;
await Task.Delay(50);
await InvokeAsync(StateHasChanged);
await E_DoorOpReqRel.InvokeAsync(true);
}
#endregion Protected Methods
}
}
@@ -0,0 +1,40 @@
@if (bdoList != null)
{
<div class="row my-2">
<div class="col-12">
<div class="text-center d-flex justify-content-between">
<div>
<h5>@BlockDoorOp.ObjectId</h5>
</div>
@if (paramsChanged)
{
<div class="circle pulse blue"></div>
}
else
{
<div class="circle grey"></div>
}
</div>
<div class="row">
@foreach (var item in bdoList)
{
if (BlockDoorOp.ObjectId == "Profiles")
{
<div class="col-5 m-1">
<DoorDefSizingSI Lingua="@userLang" currValRef="@item.Value" paramsConfig="@getParamsConfig(item.Key)" HwCode="@item.Key" E_ItemChanged="@doSaveBlock"></DoorDefSizingSI>
</div>
}
else
{
<div class="col-12 m-1">
<DoorDefSizingSI Lingua="@userLang" currValRef="@item.Value" paramsConfig="@getParamsConfig(item.Key)" HwCode="@item.Key" E_ItemChanged="@doSaveBlock"></DoorDefSizingSI>
</div>
}
}
</div>
@*<hr />*@
</div>
</div>
}
@@ -0,0 +1,131 @@
using Microsoft.AspNetCore.Components;
using Newtonsoft.Json;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.DoorDef
{
public partial class DoorDataBlock
{
#region Public Properties
/// <summary>
/// Blocco parametri di base
/// </summary>
[Parameter]
public DoorOpModel BlockDoorOp { get; set; } = null!;
/// <summary>
/// Evento per salvataggio oggetto serializzato
/// </summary>
[Parameter]
public EventCallback<DoorOpModel> E_doorOp2Save { get; set; }
#endregion Public Properties
#region Public Methods
public void setupCurrValues()
{
//currVal = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(BlockDoorOp.JsoncActVal))
{
var rawObj = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, string>>>(BlockDoorOp.JsoncActVal!);
if (rawObj != null)
{
bdoList = rawObj;
}
}
}
public void setupParamConfig()
{
var rawObj = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, List<string>>>>(BlockDoorOp.JsoncConfigVal!);
if (rawObj != null)
{
bdoConfiglist = rawObj;
}
}
#endregion Public Methods
#region Protected Properties
/// <summary>
/// Lista delle conf assocaite alle BlockDoorOp
/// </summary>
protected Dictionary<string, Dictionary<string, List<string>>> bdoConfiglist { get; set; } = new Dictionary<string, Dictionary<string, List<string>>>();
/// <summary>
/// Lista delle BlockDoorOp da passare
/// </summary>
protected Dictionary<string, Dictionary<string, string>> bdoList { get; set; } = new Dictionary<string, Dictionary<string, string>>();
[Parameter]
public bool paramsChanged { get; set; } = false;
protected string userLang { get; set; } = "EN";
#endregion Protected Properties
#region Protected Methods
[Inject]
protected WDCRefreshService WDCRService { get; set; } = null!;
protected async Task doSaveBlock(Dictionary<string, Dictionary<string, string>> updSet)
{
await Task.Delay(1);
if (updSet != null && updSet.Count > 0)
{
KeyValuePair<string, Dictionary<string, string>> currSet = updSet.FirstOrDefault();
if (bdoList.ContainsKey(currSet.Key))
{
bdoList[currSet.Key] = currSet.Value;
paramsChanged = true;
// serializzo e salvo, rimandando evento ad obj contenitore
var serVal2Save = JsonConvert.SerializeObject(bdoList);
if (serVal2Save != null)
{
BlockDoorOp.JsoncActVal = serVal2Save;
await E_doorOp2Save.InvokeAsync(BlockDoorOp);
WDCRService.isDoorOpUpd = true;
//showCirc = true;
await InvokeAsync(StateHasChanged);
}
// FixMe ToDo !!!
}
}
}
protected bool showCirc { get; set; } = false;
protected Dictionary<string, List<string>> getParamsConfig(string paramName)
{
Dictionary<string, List<string>> answ = new Dictionary<string, List<string>>();
if (bdoConfiglist.Count > 0)
{
if (bdoConfiglist.ContainsKey(paramName))
{
answ = bdoConfiglist[paramName];
}
}
return answ;
}
/// <summary>
/// spacchetto componenti
/// </summary>
protected override void OnParametersSet()
{
setupCurrValues();
setupParamConfig();
}
#endregion Protected Methods
}
}
@@ -0,0 +1,28 @@
body {
height: 100vh;
overflow: hidden;
}
.blue {
background: #3652D9;
}
.grey {
background: #7F8C8D;
opacity: 50%;
}
.circle {
width: 1rem;
height: 1rem;
border-radius: 50%;
box-shadow: 0px 0px 1px 1px #0000001a;
}
.pulse {
animation: pulse-animation 2s infinite;
}
@keyframes pulse-animation {
0% {
box-shadow: 0 0 0 0px rgba(0, 0, 0, 0.2);
}
100% {
box-shadow: 0 0 0 20px rgba(0, 0, 0, 0);
}
}
@@ -0,0 +1,35 @@
body {
height: 100vh;
overflow: hidden;
}
.blue {
background: #3652D9;
}
.grey {
background: #7F8C8D;
opacity: 50%;
}
.circle {
width: 1rem;
height: 1rem;
border-radius: 50%;
box-shadow: 0px 0px 1px 1px #0000001a;
}
.pulse {
animation: pulse-animation 2s infinite;
}
@keyframes pulse-animation {
0% {
box-shadow: 0 0 0 0px rgba(0, 0, 0, 0.2);
}
100% {
box-shadow: 0 0 0 20px rgba(0, 0, 0, 0);
}
}
@@ -0,0 +1 @@
body{height:100vh;overflow:hidden;}.blue{background:#3652d9;}.grey{background:#7f8c8d;opacity:50%;}.circle{width:1rem;height:1rem;border-radius:50%;box-shadow:0 0 1px 1px #0000001a;}.pulse{animation:pulse-animation 2s infinite;}@keyframes pulse-animation{0%{box-shadow:0 0 0 0 rgba(0,0,0,.2);}100%{box-shadow:0 0 0 20px rgba(0,0,0,0);}}
@@ -1,4 +0,0 @@
@if(ListGraphicParams != null){
}
@@ -1,21 +0,0 @@
using Microsoft.AspNetCore.Components;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.DoorDef
{
public partial class DoorDefHwStep
{
[Inject]
protected WebDoorCreatorService WDService { get; set; } = null!;
List<GraphicParamsModel>? ListGraphicParams { get; set; } = null;
protected async override Task OnInitializedAsync()
{
ListGraphicParams = await WDService.ParamGetByHwId(6);
}
}
}
@@ -1,22 +1,24 @@
@if (currOrderStatus != null)
{
<div class="d-flex justify-content-between mb-3 bg-info p-3">
<div>
<div class="badge rounded-pilll bg-dark text-light">Insert Date</div>
<div>@currOrderStatus.DateIns</div>
<div class="d-flex justify-content-between px-2 py-2" style="background-color: @bgColor">
<div class="d-flex justify-content-between">
@*<div class="badge rounded-pilll bg-dark text-light">Insert Date</div>*@
<div>Insert Date: <b>@currOrderStatus.DateIns</b></div>
</div>
<div>
<div class="badge rounded-pilll bg-dark text-light">Order External Code</div>
<div>@currOrderStatus.OrderExtCode</div>
<div class="d-flex justify-content-between">
@*<div class="badge rounded-pilll bg-dark text-light">Order External Code</div>*@
<div>Order External Code: <b>@currOrderStatus.OrderExtCode</b></div>
</div>
<div>
<div class="badge rounded-pilll bg-dark text-light">Models Number</div>
<div class="text-center">@currOrderStatus.NumType</div>
<div class="d-flex justify-content-between">
@*<div class="badge rounded-pilll bg-dark text-light">Models Number</div>*@
<div class="text-center">Models Number: <b>@currOrderStatus.NumType</b></div>
</div>
<div>
<div class="badge rounded-pilll bg-dark text-light">Doors Number</div>
<div class="text-center">@currOrderStatus.NumDoors</div>
<div class="d-flex justify-content-between">
@*<div class="badge rounded-pilll bg-dark text-light">Doors Number</div>*@
<div class="text-center">Doors Number: <b>@currOrderStatus.NumDoors</b></div>
</div>
<div style="background: #AFCFD1; text-align: end">
<ButtonsDoorDef></ButtonsDoorDef>
</div>
</div>
}
@@ -8,5 +8,8 @@ namespace WebDoorCreator.UI.Components.DoorDef
[Parameter]
public OrderStatusViewModel? currOrderStatus { get; set; } = null;
[Parameter]
public string bgColor { get; set; } = "";
}
}
@@ -0,0 +1,48 @@
@if (currVal == null)
{
<EgwCoreLib.Razor.LoadingDataSmall></EgwCoreLib.Razor.LoadingDataSmall>
}
else
{
<div class="d-flex justify-content-between small">
<div style="width: 90%">
<div style="width: 90%;">
<div class="row my-1">
<b>@HwCode</b>
</div>
@doCheckVal()
@foreach (var item in currVal)
{
@if (isCombo(item.Key))
{
<div class="row my-1">
<div class="col-4 d-flex flex-wrap align-items-center">
<span>@translate(item.Key)</span>
</div>
<select class="col-7" @bind="@currVal[item.Key]">
@foreach (var param in comboSet(item.Key))
{
<option value="@param">
@param
</option>
}
</select>
</div>
}
else
{
<div class="row my-1">
<div class="col-4 d-flex flex-wrap align-items-center">
<span>@translate(item.Key)</span>
</div>
<input type="text" class="col-7" @bind="@currVal[item.Key]" />
</div>
}
}
</div>
</div>
</div>
}
@@ -0,0 +1,169 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Newtonsoft.Json;
using WebDoorCreator.Data.Services;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.DoorDef
{
public partial class DoorDefSizingSI
{
#region Public Properties
/// <summary>
/// Array dati x comparazione
/// </summary>
[Parameter]
public Dictionary<string, string> currValRef { get; set; } = new Dictionary<string, string>();
[Parameter]
public int DoorId { get; set; } = 0;
[Parameter]
public EventCallback<Dictionary<string, Dictionary<string, string>>> E_ItemChanged { get; set; }
[Parameter]
public string HwCode { get; set; } = "";
[Parameter]
public string Lingua { get; set; } = "EN";
/// <summary>
/// parametri di configurazione oggetto
/// </summary>
[Parameter]
public Dictionary<string, List<string>> paramsConfig { get; set; } = new Dictionary<string, List<string>>();
[CascadingParameter]
public string userId { get; set; } = "";
#endregion Public Properties
#region Protected Properties
Dictionary<string, string> _currVal = new Dictionary<string, string>();
/// <summary>
/// Array dati effettivo x gestione modifiche
/// </summary>
protected Dictionary<string, string> currVal
{
get => _currVal;
set
{
_currVal = value;
}
}
[Inject]
protected IJSRuntime JSRuntime { get; set; } = null!;
[Inject]
protected QueueDataService QDataServ { get; set; } = null!;
[Inject]
protected WebDoorCreatorService WDCService { get; set; } = null!;
[Inject]
protected WDCVocabularyService WDVService { get; set; } = null!;
#endregion Protected Properties
#region Protected Methods
protected List<string> comboSet(string pKey)
{
List<string> answ = new List<string>();
if (paramsConfig.ContainsKey(pKey))
{
answ = paramsConfig[pKey].ToList();
}
return answ;
}
protected async Task doCancel()
{
await FullReloadData(true);
}
protected bool doCheckVal()
{
bool answ = false;
if (currValRef != null)
{
foreach (var k in currVal)
{
if (currValRef != null)
{
if (k.Value != currValRef[k.Key])
{
answ = true;
if (answ)
{
Task.Run(async () => await doSave());
}
}
}
}
}
return answ;
}
protected async Task doSave()
{
await Task.Delay(1);
// preparo i dati...
Dictionary<string, Dictionary<string, string>> updSet = new Dictionary<string, Dictionary<string, string>>();
updSet.Add(HwCode, currVal);
// solleva evento con dizionario contentente chiave + valori current
await E_ItemChanged.InvokeAsync(updSet);
}
protected bool isCombo(string pKey)
{
bool answ = false;
if (paramsConfig.ContainsKey(pKey))
{
answ = paramsConfig[pKey].Count > 1;
}
return answ;
}
protected override async Task OnParametersSetAsync()
{
await FullReloadData(true);
}
protected string translate(string lemma)
{
string answ = "";
answ = WDVService.Traduci(Lingua, lemma);
return answ;
}
#endregion Protected Methods
#region Private Methods
private async Task FullReloadData(bool isFirst)
{
// serializzo e deserializzo i valori current da quelli di riferimento
string serObj = JsonConvert.SerializeObject(currValRef);
if (!string.IsNullOrEmpty(serObj))
{
var newObj = JsonConvert.DeserializeObject<Dictionary<string, string>>(serObj);
if (newObj != null)
{
currVal = newObj;
}
}
await Task.Delay(1);
}
#endregion Private Methods
}
}
@@ -0,0 +1,96 @@
.btnGen {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
}
.btnDelete {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
background: #B71C1C;
transform: translate(25px, -12px);
}
.btnClone {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
background: #FFF;
transform: translate(1.6rem, -1rem);
}
.btnPDFSuccess {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
background: #8E44AD;
transform: translate(25px, 12px);
}
.btnPDFPending {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
background: #F1C40F;
transform: translate(25px, 12px);
}
.btnHighlight {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
background: #03A9F4;
transform: translate(1.6rem, 1rem);
}
.btnHeadTail {
width: 100%;
padding: 0.8rem 0 0.8rem 0;
background: none;
border: none;
}
.btnConfirm {
width: 100%;
padding: 0.8rem 0 0.8rem 0;
background: none;
border: none;
border-bottom: 3px solid black;
}
.btnHead {
width: 100%;
padding: 0.8rem 0 0.8rem 0;
background: none;
border: none;
}
.borderTop {
border-top: 7px solid #00838F;
}
.borderBottom {
border-bottom: 7px solid #00838F;
width: 100%;
}
.modal-dialog {
overflow-y: initial !important;
}
.modal-body {
height: 18.75rem;
overflow-y: auto;
}
.testata {
width: 100%;
}
select,
input {
border: none;
border-bottom: 2px solid black;
background: none;
height: 2rem;
}
i {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
font-size: 1.1rem;
}
@@ -0,0 +1,95 @@
@xDelta: 25px;
@yDelta: 12px;
.btnGen {
border-radius: 50%;
width: 3.5rem;
height: 3.5rem;
border: 5px solid #00838F;
}
.btnDelete {
.btnGen;
background: #B71C1C;
transform: translate(@xDelta, -@yDelta);
}
.btnClone {
.btnGen;
background: #FFF;
transform: translate(1.6rem, -1rem);
}
.btnPDFSuccess {
.btnGen;
background: #8E44AD;
transform: translate(@xDelta, @yDelta);
}
.btnPDFPending {
.btnGen;
background: #F1C40F;
transform: translate(@xDelta, @yDelta);
}
.btnHighlight {
.btnGen;
background: #03A9F4;
transform: translate(1.6rem, 1rem);
}
.btnHeadTail {
width: 100%;
padding: 0.8rem 0 0.8rem 0;
background: none;
border: none;
}
.btnConfirm {
.btnHeadTail;
border-bottom: 3px solid black;
}
.btnHead {
.btnHeadTail;
}
.borderTop {
border-top: 7px solid #00838F;
}
.borderBottom {
border-bottom: 7px solid #00838F;
width: 100%;
}
.modal-dialog {
overflow-y: initial !important
}
.modal-body {
height: 18.75rem;
overflow-y: auto;
}
.testata {
//position: absolute;
width: 100%
}
select, input {
border: none;
border-bottom: 2px solid black;
background: none;
height: 2rem;
}
i {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
font-size: 1.1rem;
}
@@ -0,0 +1 @@
.btnGen{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;}.btnDelete{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;background:#b71c1c;transform:translate(25px,-12px);}.btnClone{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;background:#fff;transform:translate(1.6rem,-1rem);}.btnPDFSuccess{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;background:#8e44ad;transform:translate(25px,12px);}.btnPDFPending{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;background:#f1c40f;transform:translate(25px,12px);}.btnHighlight{border-radius:50%;width:3.5rem;height:3.5rem;border:5px solid #00838f;background:#03a9f4;transform:translate(1.6rem,1rem);}.btnHeadTail{width:100%;padding:.8rem 0 .8rem 0;background:none;border:0;}.btnConfirm{width:100%;padding:.8rem 0 .8rem 0;background:none;border:0;border-bottom:3px solid #000;}.btnHead{width:100%;padding:.8rem 0 .8rem 0;background:none;border:0;}.borderTop{border-top:7px solid #00838f;}.borderBottom{border-bottom:7px solid #00838f;width:100%;}.modal-dialog{overflow-y:initial!important;}.modal-body{height:18.75rem;overflow-y:auto;}.testata{width:100%;}select,input{border:0;border-bottom:2px solid #000;background:none;height:2rem;}i{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;font-size:1.1rem;}
@@ -0,0 +1,26 @@
<div class="containerAll row text-light" style="background-color: #34495E;">
@if (currListDoorDefStatus != null)
{
@foreach (var item in currListDoorDefStatus)
{
<div class="col px-0" @onclick="()=>changeStep(int.Parse(item.Value))">
@if (int.Parse(item.Value) == CurrDoorDefStatus)
{
<StepArrow ObjId="@int.Parse(item.Value)" StepText="@item.Label" BlockStyle="@($"fill:{item.DefaultVal};")" StrokeColors="@listBord01" TipAngle="90" ObjW="650" ObjH="100"></StepArrow>
}
else
{
@if (int.Parse(item.Value) < CurrDoorDefStatus)
{
<StepArrow ObjId="@int.Parse(item.Value)" StepText="@($"{item.Label} ✓")" BlockStyle="@($"fill:{item.DefaultVal};")" ObjW="650" ObjH="100" TipAngle="90"></StepArrow>
}
else
{
<StepArrow ObjId="@int.Parse(item.Value)" StepText="@item.Label" BlockStyle="@($"fill:transparent;")" ObjW="650" ObjH="100" TipAngle="90"></StepArrow>
}
}
</div>
}
}
</div>
@@ -0,0 +1,66 @@
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
using WebDoorCreator.Data.DbModels;
using WebDoorCreator.UI.Data;
namespace WebDoorCreator.UI.Components.DoorDef
{
public partial class DoorDefStepList
{
[Inject]
protected WebDoorCreatorService WDService { get; set; } = null!;
[Parameter]
public int CurrDoorDefStatus { get; set; } = 10;
[Parameter]
public EventCallback<int> E_CurrStep { get; set; }
protected override async Task OnParametersSetAsync()
{
await Task.Delay(1);
}
protected async Task doChangeStep(string actDoorDefStep)
{
await Task.Delay(1);
//await E_StepChanged.InvokeAsync(actDoorDefStep);
}
protected List<ListValuesModel>? currListDoorDefStatus { get; set; } = null;
protected string currColor { get; set; } = "";
protected override async Task OnInitializedAsync()
{
await Task.Delay(1);
currListDoorDefStatus = await WDService.ListValuesGetAll("All", "DoorDefStep");
if (currListDoorDefStatus != null)
{
var stat2Display = currListDoorDefStatus.Where(x => x.Value == CurrDoorDefStatus.ToString()).FirstOrDefault();
if (stat2Display != null)
{
currColor = stat2Display.DefaultVal;
}
}
listBord01 = new();
listBord01.Add("White");
listBord01.Add("White");
listBord01.Add("White");
listBord01.Add("White");
}
protected List<string> listBord01 { get; set; } = new();
protected async Task changeStep(int step)
{
await E_CurrStep.InvokeAsync(step);
StateHasChanged();
}
}
}

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