Compare commits

...

327 Commits

Author SHA1 Message Date
Emmanuele Sassi 8c5d4db3e8 - inizio prove comunicazione Siemens HMI 2024-07-04 13:54:27 +02:00
Emmanuele Sassi 8d94ce6d80 - correzione log su Db
- correzione tipo messaggio per Siemens
2024-07-04 13:51:55 +02:00
Emmanuele Sassi cc30fe7bf4 - correzione lettura tipo di progetto per caricamento materiali 2024-07-04 11:38:38 +02:00
Emmanuele Sassi 0c1061e6f4 - correzione errore di merge 2024-07-02 17:41:16 +02:00
Emmanuele Sassi e3872881f6 Merge branch 'feature/CommSharp7' into feature/NewWarehouseSiemens 2024-07-02 17:23:25 +02:00
Emmanuele Sassi c02397efd5 Merge remote-tracking branch 'gitlab.seriate/master' into feature/NewWarehouseSiemens 2024-07-02 17:21:12 +02:00
Emmanuele Sassi b9dc343dc8 - correzione materiale
- sincronizzazione progetti
- aggiunta verifica su qty warehouse
- aggiunto salvataggio magazzino prima di sincronizzazione
2024-07-02 17:18:39 +02:00
Emmanuele Sassi cfabbc6eff - correzione su creazione Id delle lavorazioni
- gestione sezione ruotata
- corretto visibilita' colonna materiale
- migliorata gestione materiale nullo
- migliorata conversione file warehouse su Db
2024-07-02 10:55:48 +02:00
Emmanuele Sassi 43b89de822 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-29 12:21:09 +02:00
Samuele Locatelli 912c3370fc Aggiunto metodo esplicito ProjSendProg 2024-06-29 12:20:04 +02:00
Samuele Locatelli 5f7ddbfb1e Ancora update proxy avanzamento progetti 2024-06-29 12:13:17 +02:00
Samuele Locatelli 9e7f25dba0 Update nuget x MagMan controller
- aggiunto nuovo metodo x sync progresso del proj online
2024-06-29 10:49:28 +02:00
Samuele Locatelli 54f5e599b5 Modifica conf di default x export DB 2024-06-28 18:53:03 +02:00
Emmanuele Sassi 7e296f37b0 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-28 15:35:40 +02:00
Samuele Locatelli 2bddb280ee prova hex blob da testare.. 2024-06-28 15:34:46 +02:00
Samuele Locatelli 942fb1de9a Ancora cleanup, all ok 2024-06-28 08:30:47 +02:00
Samuele Locatelli e854d97b74 Fix con correzione tab migration 2024-06-28 07:24:34 +02:00
Samuele Locatelli f12b98a3c3 update ulteriore modello Migrations 2024-06-27 18:51:31 +02:00
Emmanuele Sassi 14a4fe5841 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-27 18:49:18 +02:00
Samuele Locatelli 8293b71c5e update mapping Migrations 2024-06-27 18:48:41 +02:00
Emmanuele Sassi b8aa5ceea2 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-27 18:45:10 +02:00
Samuele Locatelli 768897e507 Aggiunto metodo controllo livello minimo migrations x applicare refresh viste 2024-06-27 18:42:05 +02:00
Emmanuele Sassi 35feb72c76 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-27 18:27:48 +02:00
Samuele Locatelli ab55298847 Merge branch 'feature/NewWarehouseTest' into DataLayer 2024-06-27 18:22:01 +02:00
Samuele Locatelli e7467b19d0 Fix refresh view: spostata in try/catch 2024-06-27 18:20:45 +02:00
Emmanuele Sassi cd6e98a59c Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-26 18:15:50 +02:00
Samuele Locatelli 92d465fd77 Update dipendenza proxy Egw 2024-06-26 17:43:37 +02:00
Emmanuele Sassi df9ee8bdb4 - correzione messaggi CALC se non trovo feature o pezzi
- eliminazione verisone 64 bit
2024-06-12 17:24:29 +02:00
Samuele Locatelli a6ce521f47 Update procedure caricamento 2024-06-08 12:31:06 +02:00
Emmanuele Sassi 114255bb87 Merge branch 'feature/DuploCorrection' 2024-06-04 15:11:18 +02:00
Dario Sassi 4499a042f8 EgtBEAMWALL 2.6f1 :
- correzioni a gestione riferimento di feature entrando in modifica Freecontour.
2024-06-03 18:19:24 +02:00
Emmanuele Sassi 386b253115 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-06-03 15:20:02 +02:00
Emmanuele Sassi f9f0d90334 - modifiche alla creazione PrId su Duplo 2024-06-03 15:15:23 +02:00
Emmanuele Sassi 3ba550c124 - introdotta tolleranza di ricerca delle barre - master panel 2024-06-03 11:51:58 +02:00
Samuele Locatelli 7e442efc5f Correzione di 2 migrations.. 2024-05-31 11:19:41 +02:00
Samuele Locatelli 85763bc747 Update readme 2024-05-31 09:46:16 +02:00
Samuele Locatelli f62ad2b019 FIX mysqlData v 8.4
- va aggioungo file .exe.config con i binding redirect dov c'è exe
- a quel punto vede i nuovi file secondo bind e FUNZIONA!!!!
2024-05-30 19:22:15 +02:00
Samuele Locatelli dcee1f0438 Test update EF6 MySql
- vers 8.0.32 --> OK!
2024-05-30 12:58:04 +02:00
Samuele Locatelli 3192bdf419 Test update EF6 MySql
- vers 8.0.31 --> OK!
2024-05-29 17:21:52 +02:00
Samuele Locatelli 8899b245d6 Test update EF6 MySql
- vers 8.0.29 --> OK!
2024-05-29 17:15:05 +02:00
Samuele Locatelli 13cfef1437 Test update EF6 Mysql
- vers 8.0.22 --> OK!
2024-05-29 17:08:13 +02:00
Samuele Locatelli 9d66e95ca9 Fix chewck username tra caso locale/rete 2024-05-29 16:31:04 +02:00
Samuele Locatelli 9d3d5ef273 Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-05-29 15:41:38 +02:00
Emmanuele Sassi 8ed0c450ed - aggiunta path per dati aggiuntivi warehouse 2024-05-29 15:02:22 +02:00
Samuele Locatelli e07c961508 Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-05-28 15:22:28 +02:00
Emmanuele Sassi 3282db3824 Update riferimento progetti mysql 8.0.21 2024-05-28 15:18:18 +02:00
Emmanuele Sassi d2647c142e riportato mysqkl a 8.0.21 2024-05-28 15:16:37 +02:00
Emmanuele Sassi ad490d0e91 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-05-28 12:10:18 +02:00
Samuele Locatelli 0b14efd595 Update migrations x errori aggiornamento 2024-05-28 11:28:43 +02:00
Samuele Locatelli 6c498e1857 Update conversione a decimal con round 2024-05-28 11:28:34 +02:00
Samuele Locatelli cf047a84fb Fix ultime 2 migrations 2024-05-23 18:52:58 +02:00
Samuele Locatelli f21b0b8a17 Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-05-23 17:18:13 +02:00
Emmanuele Sassi f544ea0eae - aggiunto nuovo MachLogType 2024-05-23 17:17:22 +02:00
Samuele Locatelli d2045f8c0d Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-05-23 17:14:27 +02:00
Emmanuele Sassi dc4b79f1c3 - aggiunto campo Application 2024-05-23 17:13:32 +02:00
Samuele Locatelli 38f9c80d93 Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-05-23 17:02:13 +02:00
Samuele Locatelli e551461f49 Update appunti connstring DB x testing 2024-05-23 17:01:41 +02:00
Samuele Locatelli c6c721240d DataLayer:
- aggiunta record avvio app + chiusura se necessario
- fix dbCtxname
- check sync logMachine
2024-05-10 15:52:06 +02:00
Emmanuele Sassi 95bdf3b5e7 - aggiunto evento in log di apertura e chiusura supervisore
- verificate chiamate magazzino web solo quando attivo
- commentato AddSectionXMaterial (da eliminare)
- aggiunti messaggi
- aggiunti Id e WarehouseMaterial su Part
- sincronizzato Db rete in chiusura
- gestita visibilita' bottone cancellazione barre in magazzino
2024-05-07 19:53:42 +02:00
Emmanuele Sassi 63dd00e512 - eliminata infoWarehouseMaterial 2024-05-02 14:51:46 +02:00
Emmanuele Sassi f4a55298f7 - rimosso warehouse material da RawPart e Part
- aggiunta modalita' che salva stima nesting sul salvataggio
- gestito upload della stima nesting
2024-04-30 17:06:45 +02:00
Emmanuele Sassi c6d75c4418 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-30 15:32:19 +02:00
Samuele Locatelli afd5d7e4f7 Aggiunto metodo force upload x alias 2024-04-30 15:31:34 +02:00
Emmanuele Sassi 96dd57eba6 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-29 19:16:08 +02:00
Samuele Locatelli 0332d47e56 Aggiunta logica x tryFix dati sul DB 2024-04-29 19:14:58 +02:00
Emmanuele Sassi f5f0b268d8 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-29 18:50:21 +02:00
Samuele Locatelli 088bae8052 DataLayer:
- fix id prod/projCloudId
2024-04-29 18:25:11 +02:00
Emmanuele Sassi 5942c8dc04 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-29 18:13:32 +02:00
Samuele Locatelli 9a57d0df03 Update sync x proj (all) 2024-04-29 18:12:06 +02:00
Samuele Locatelli 67a2701b16 Typo minori 2024-04-29 16:54:20 +02:00
Samuele Locatelli 894372b8be Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-04-29 16:52:56 +02:00
Emmanuele Sassi 62e71947ef - introduzione ProdId su log macchina e correzzioni 2024-04-29 16:15:11 +02:00
Emmanuele Sassi b2671c97c5 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-29 15:19:38 +02:00
Samuele Locatelli 0296830d3b Fix creazione LogModel 2024-04-29 15:19:14 +02:00
Samuele Locatelli 7d2d0db7d3 Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-04-29 15:16:27 +02:00
Emmanuele Sassi 93a50e226c - aggiornato MachLog 2024-04-29 15:16:13 +02:00
Emmanuele Sassi 2af9d633f0 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-29 15:00:39 +02:00
Samuele Locatelli 0f67fcdef4 Update x metodi creazione LogEvent nuovo 2024-04-29 14:38:45 +02:00
Samuele Locatelli dce37f0be5 Bozza modifica metodi 2024-04-29 11:11:27 +02:00
Samuele Locatelli f30c2aac3b - Update struttura tab LogMachine
- Aggiunte migrations
2024-04-29 11:10:57 +02:00
Samuele Locatelli 3d87675d77 Update tab LOG macchina
- migrazioni
-metodi accesso DB
- bozza sync verso cloud
2024-04-26 18:55:50 +02:00
Samuele Locatelli 7abd9feb72 DataLayer: modifiche LogMachine:
- Inizio modifiche tracciato dati tab LOG
- Migrations x DB
2024-04-26 16:51:57 +02:00
Samuele Locatelli d514bfe40c Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-04-26 16:33:59 +02:00
Emmanuele Sassi 38c0cc3fee - correzione tipo enum 2024-04-26 16:26:35 +02:00
Samuele Locatelli e28d32fbad Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-04-26 16:15:56 +02:00
Emmanuele Sassi 1c5359eb7d - aggiunto valore null a machlog 2024-04-26 16:06:38 +02:00
Samuele Locatelli 89dce20add Merge remote-tracking branch 'origin/feature/NewWarehouseTest' into DataLayer 2024-04-26 15:38:39 +02:00
Samuele Locatelli 6ea61efc76 Fix nota 2024-04-26 15:38:33 +02:00
Emmanuele Sassi 17cf56ada2 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-19 09:50:21 +02:00
Samuele Locatelli 1ec81f1359 Aggiunta eliminazione stime precedenti se non inviate 2024-04-17 11:31:54 +02:00
Emmanuele Sassi a78d146550 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-17 10:16:54 +02:00
Samuele Locatelli 8b5d024feb Aggiunto metodo check risorse (da testare) 2024-04-15 20:24:11 +02:00
Samuele Locatelli 0c7018b2d3 update nuget comunicazione x magman:
- fino a 5 tentativi se ping KO
- 200ms di pausa nei tentativi
2024-04-10 11:13:07 +02:00
Emmanuele Sassi 9a85978461 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-05 11:50:41 +02:00
Samuele Locatelli a2544d7334 Aggiunta alias "originale" in caso di insert materiale 2024-04-05 11:16:22 +02:00
Samuele Locatelli f49c92d96c update specifica note comando ricerca alias 2024-04-05 09:50:46 +02:00
Emmanuele Sassi afd264a5ca Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-04 13:03:50 +02:00
Samuele Locatelli a31bb77889 Fix metodo delete 2024-04-04 13:01:47 +02:00
Emmanuele Sassi 1bd2939e84 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouseTest 2024-04-04 12:47:54 +02:00
Samuele Locatelli cae404e4f1 Gestione eliminazione locale alias cancellati + syncro 2024-04-04 12:31:53 +02:00
Emmanuele Sassi 8b02512c63 - aggiunta lettura materialM su creazione BTLPartVM
- migliorata ricerca materiale da Db
- eliminata info WarehouseMaterial da progetto nge
2024-03-28 15:31:49 +01:00
Emmanuele Sassi 97c69c79db - versione di test 2024-03-28 09:15:44 +01:00
Emmanuele Sassi 687e38d88c Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-27 16:43:47 +01:00
Samuele Locatelli 8dc2b6d1ce MagManController:
- Aggiunta try/catch x tutte le chaimate di sync
2024-03-26 16:09:49 +01:00
Emmanuele Sassi c74919a59b Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-26 11:17:43 +01:00
Emmanuele Sassi 54cf4d11e9 - Update pacchetti 2024-03-26 11:16:38 +01:00
Samuele Locatelli 8cae935899 Fix syncro con dtReq x risorse (track) 2024-03-26 11:14:05 +01:00
Emmanuele Sassi 76deea81c4 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-26 10:40:54 +01:00
Samuele Locatelli 91754b4df7 Aggiunta metodi x resync dati non inviati in cloud 2024-03-25 19:52:44 +01:00
Emmanuele Sassi c74e5e3b39 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-19 17:36:52 +01:00
Samuele Locatelli 2d0ace0def Fix nuget + procedura sync 2024-03-19 17:32:45 +01:00
Samuele Locatelli acd4592345 MagManController update:
- syncro permessa se zero barre (ma NON per null)
- aggiunto metodo mockup x forzare syncro (ForceSyncroSend)
2024-03-19 15:18:18 +01:00
Emmanuele Sassi ee2c21b3b9 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-15 12:36:50 +01:00
Samuele Locatelli 71925e3ea1 Ancora fix init 2024-03-15 12:36:24 +01:00
Samuele Locatelli 55e6dd62a6 Fix invio materiale locale/cloud 2024-03-15 12:34:40 +01:00
Samuele Locatelli 79588172a7 Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-03-15 12:34:13 +01:00
Emmanuele Sassi 33925d68b3 - aggiornate classi core 2024-03-15 12:33:25 +01:00
Samuele Locatelli bf2644768e Aggiunta metodi get/set dell'ultimo RawItem usato 2024-03-15 11:43:21 +01:00
Samuele Locatelli 44a9430d0d Update valori default LastSync su DB MySql 2024-03-12 09:52:06 +01:00
Emmanuele Sassi f817daded5 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-12 09:23:44 +01:00
Samuele Locatelli ab9346af02 Fix save aprametro sync track x tipo send da recuperare 2024-03-12 09:06:46 +01:00
Samuele Locatelli 864d929ea6 Aggiunta controllers x
- gestione sync in blocco
- salvataggio dati su tab Sync
2024-03-12 09:05:04 +01:00
Samuele Locatelli 0ed6719508 Aggiunta modelli + migrations 2024-03-12 09:04:31 +01:00
Emmanuele Sassi a269ad0fda Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-11 18:16:10 +01:00
Samuele Locatelli dbbfef35a9 Fix overwrite useQty 2024-03-11 18:15:34 +01:00
Emmanuele Sassi 4132212605 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-03-11 17:22:30 +01:00
Samuele Locatelli a26b93f8a9 Fix commento invio sync stima consumi 2024-03-11 17:11:49 +01:00
Samuele Locatelli 7efd7c353a Aggiunta metodo CloudSyncro 2024-03-11 16:59:56 +01:00
Emmanuele Sassi 98cc52e84f Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-29 16:25:58 +01:00
Samuele Locatelli 65db8b285c Update sync: su PROD e non su PROJ 2024-02-29 16:23:56 +01:00
Emmanuele Sassi e69f6f37d4 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-29 14:49:32 +01:00
Samuele Locatelli 8a49d500a4 Completato metodi send consumi/stime 2024-02-29 14:48:07 +01:00
Samuele Locatelli 3991db50c4 Abbozzato invio consumi RawItems 2024-02-29 13:07:34 +01:00
Samuele Locatelli 9714631b68 Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-02-29 12:32:20 +01:00
Emmanuele Sassi fdd4bfec6e Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-29 12:13:44 +01:00
Samuele Locatelli a8900568f6 ulteriore fix in prodController 2024-02-29 11:59:23 +01:00
Samuele Locatelli 6aefdb8b84 Inizio merge verso CoreModels 2024-02-29 11:52:24 +01:00
Emmanuele Sassi 10e2f5a341 - reso ProjCloudId opzionale 2024-02-29 11:51:24 +01:00
Samuele Locatelli e338412abb Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-02-29 11:47:19 +01:00
Emmanuele Sassi ef08937e05 - aggiornate classi per ProjCloudId 2024-02-29 11:46:55 +01:00
Emmanuele Sassi 37ca0b1ae2 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-29 11:33:52 +01:00
Samuele Locatelli bcc7af3acd Update syncro x gestione invio proj (da testare) 2024-02-29 11:33:11 +01:00
Samuele Locatelli 71f5cf1ec6 Aggiunta migration x ProjCloudId 2024-02-29 08:17:24 +01:00
Emmanuele Sassi eaab42ee14 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-23 12:40:23 +01:00
Samuele Locatelli b3a9cbbfd8 Fix alias upsert 2024-02-23 12:40:01 +01:00
Samuele Locatelli 417d857547 Fix ricerca alias senza family 2024-02-23 12:33:25 +01:00
Samuele Locatelli 56ad2003ac Eliminazione metodi duplicati get/find x materiali 2024-02-21 10:05:43 +01:00
Emmanuele Sassi 51bbdb6d24 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-21 09:57:10 +01:00
Samuele Locatelli 194fd34c34 Aggiunta metodi vari x ricerca materiale ed esito (err/Alias/Materiale) 2024-02-20 19:45:49 +01:00
Samuele Locatelli 3ec507a967 Aggiunta metodi gestione Alias + syncro Alias 2024-02-20 19:15:53 +01:00
Emmanuele Sassi fcfc9f0da2 - aggiunto flag di utilizzo magazzino in rete
- aggiunta ultima sincronizzazione
- aggiunto update RawPart per sincronizzazione
- aggiunta gestione quantita' infinita grezzi per nesting
- aggiunto bottone sincronizza in warehouse
- aggiunta colonna check quantita' infinita in warehouse
2024-02-20 10:54:03 +01:00
Emmanuele Sassi e1de69babd Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-19 12:12:14 +01:00
Samuele Locatelli 51fb7ad34e Fix sync x materiali (3 metodi) 2024-02-19 10:55:37 +01:00
Emmanuele Sassi ad775341ad Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-19 10:15:10 +01:00
Samuele Locatelli 5df2e5e314 sync x tutti gli item (non solo missing) 2024-02-19 07:48:59 +01:00
Emmanuele Sassi 410b2155da Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-16 16:49:45 +01:00
Samuele Locatelli ebb16b6136 update con esito OK se non ci sono mat da sincronizzare 2024-02-16 16:22:55 +01:00
Emmanuele Sassi fef8aaaa2f Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-16 16:14:40 +01:00
Samuele Locatelli 9fac681033 modifica comportamento udpate di useQty 2024-02-16 10:54:48 +01:00
Emmanuele Sassi 19732e091b Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-15 15:43:03 +01:00
Samuele Locatelli 739205f972 fix sync con materiale senza rawItems 2024-02-15 15:37:30 +01:00
Emmanuele Sassi 06da8c6b48 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-15 15:13:28 +01:00
Samuele Locatelli 672ec76955 aggiunta matNav x costruttore da DB lettura RawItem 2024-02-15 15:11:45 +01:00
Emmanuele Sassi 12dc64eb15 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-14 19:11:21 +01:00
Samuele Locatelli 356c6b6f85 Fix dato MatLocalId anche x rawItem 2024-02-14 19:10:32 +01:00
Emmanuele Sassi 8e0aa7ba0c Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-14 19:08:08 +01:00
Samuele Locatelli 6047080f37 fix decodifica materiali locali 2024-02-14 19:07:20 +01:00
Emmanuele Sassi 5d2daaf7cd Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-14 18:32:13 +01:00
Samuele Locatelli a6b10d57b7 Aggiunta migration in proj 2024-02-14 15:04:47 +01:00
Emmanuele Sassi 68a6a3ff1b Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-14 11:05:31 +01:00
Samuele Locatelli 2109fbd65e Aggiuntagestione UseQty su DB + migrazione e converters vari 2024-02-14 11:04:13 +01:00
Samuele Locatelli 01c00226bd Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-02-14 10:57:33 +01:00
Emmanuele Sassi f1578bfe4b - aggiunta colonna UseQty
- aggiunto flag di attivazione connessione
- sincronizzazione tra magazzino locale e remoto
- lettura materiali da Db
- aggiunto caricamento dei materiali e grezzi in file di magazzino su db
- aggiunto bottone diretto di uso grezzi da magazzino
2024-02-14 10:24:32 +01:00
Emmanuele Sassi d245421d52 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-09 18:48:37 +01:00
Samuele Locatelli aab825d4fc Completo modirifa x gestione errori su sync 2024-02-09 18:47:49 +01:00
Samuele Locatelli 3b33c1a34d inizio modifiche x restituire esito sync con enum 2024-02-09 17:37:48 +01:00
Emmanuele Sassi 1f2e7ce0f6 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-09 15:23:28 +01:00
Samuele Locatelli 692c9e707b Aggiunta metodo ResourcesForceSyncAll x recupero di TUTTI i materiali da syncare 2024-02-09 14:50:40 +01:00
Emmanuele Sassi 6d920a2453 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-09 11:53:25 +01:00
Samuele Locatelli 67e8b2af54 Corretta conversione RawItem a Model da Core (x dati nulli) 2024-02-09 11:52:03 +01:00
Emmanuele Sassi 803670f5e8 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-09 11:31:58 +01:00
Samuele Locatelli 35272d7460 Modifica metodo sync risorse (da provare) 2024-02-09 11:30:28 +01:00
Emmanuele Sassi 6f91af6546 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-09 09:55:43 +01:00
Samuele Locatelli 8dceab40f3 Fix update su DB info x RawItem da material x sync 2024-02-06 19:48:58 +01:00
Emmanuele Sassi 84f76348ad Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 17:14:33 +01:00
Samuele Locatelli b445a17280 Fix modalità update/upsert... 2024-02-06 17:10:13 +01:00
Emmanuele Sassi 9d957975d0 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 16:57:06 +01:00
Samuele Locatelli f85cc1bd33 Update metodi syncDB post cloud-sync 2024-02-06 16:54:03 +01:00
Emmanuele Sassi 89d75a36cf Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 16:27:33 +01:00
Samuele Locatelli d8d16a7972 Update messaggi successo download/upload 2024-02-06 16:27:07 +01:00
Emmanuele Sassi dd67130eb5 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 15:59:51 +01:00
Samuele Locatelli f66fe0cb1c Update con nuova gestione timeout 2024-02-06 15:56:51 +01:00
Emmanuele Sassi 3dbc5dfb38 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 15:05:11 +01:00
Samuele Locatelli 28a1a3d828 Update detalayer: metodi sync/async 2024-02-06 15:03:13 +01:00
Emmanuele Sassi 155da598fa Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 11:10:21 +01:00
Samuele Locatelli cff9bbc5c7 Update nuget DataSyncro + refresh metodi sync su DataLayer 2024-02-06 10:18:56 +01:00
Emmanuele Sassi e06614fd60 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-06 08:47:30 +01:00
Samuele Locatelli 734d155d3d Update nuget dataSyncro 2024-02-06 08:46:53 +01:00
Samuele Locatelli 3b9bc051dd Aggiunta sync Items dato elenco MatId 2024-02-05 19:24:48 +01:00
Emmanuele Sassi 8df4e74a56 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-05 15:54:32 +01:00
Samuele Locatelli beb025984e fix syncro class 2024-02-05 15:54:04 +01:00
Emmanuele Sassi 10d7ef179a Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-05 15:48:00 +01:00
Samuele Locatelli ec13ba8257 Split upsert materiali in insert + update 2024-02-05 15:47:13 +01:00
Emmanuele Sassi f896f59bcc Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-02 17:32:34 +01:00
Samuele Locatelli 43de071280 Aggiunta include materiali x rawItem 2024-02-02 17:32:05 +01:00
Emmanuele Sassi 2bab549ab7 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-02-02 09:36:34 +01:00
Samuele Locatelli 988e91630b Fix recupero id post upsert 2024-02-01 08:14:09 +01:00
Emmanuele Sassi 940ddae3e0 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-01-31 19:01:06 +01:00
Samuele Locatelli be241f04d2 fix controllo valori > 0 in upsert mat e rawItem + save posticipato 2024-01-31 19:00:03 +01:00
Samuele Locatelli 3873d468e7 Return int chiave post insert item magazzino 2024-01-31 18:44:37 +01:00
Emmanuele Sassi 318bb6d3d9 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-01-31 12:17:07 +01:00
Samuele Locatelli 62d692dc32 Aggiunta conversioni Core/Model x RawPart 2024-01-31 11:21:58 +01:00
Samuele Locatelli 228994e1e9 Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-01-31 11:01:53 +01:00
Emmanuele Sassi 1de156f0a3 - aggiunto id ai costruttori di MaterialM e RawPartM 2024-01-31 11:01:07 +01:00
Emmanuele Sassi d97fda4a83 - aggiungto id a MaterialM e RawPartM 2024-01-31 10:55:18 +01:00
Samuele Locatelli 9270fed036 Aggiunta gestione conversioni Core/Model x materials 2024-01-31 10:43:26 +01:00
Samuele Locatelli 4a477df49d Merge remote-tracking branch 'origin/feature/NewWarehouse' into DataLayer 2024-01-31 10:13:24 +01:00
Emmanuele Sassi dc52e06160 - Creata classe RawPartM 2024-01-31 10:06:22 +01:00
Samuele Locatelli 1b0162ea53 Update metodi gestione MagMan 2024-01-31 09:31:10 +01:00
Samuele Locatelli 1cde6e7e58 Aggiunta modello dati e migrations 2024-01-31 09:30:42 +01:00
Emmanuele Sassi 45ad346924 - aggiunta classe Material in core
- aggiunto MaterialController
2024-01-30 18:50:12 +01:00
Samuele Locatelli 5c7b5c677d Aggiunto sync x risorse, inventario, ... 2024-01-29 17:59:56 +01:00
Samuele Locatelli a9f526af15 Bozza sync materiali 2024-01-29 15:06:56 +01:00
Samuele Locatelli 467010dc13 Aggiunto controller x Alias 2024-01-29 14:22:46 +01:00
Emmanuele Sassi ba13697dda Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewWarehouse 2024-01-29 10:06:30 +01:00
Emmanuele Sassi 6a51eae198 Merge remote-tracking branch 'gitlab.seriate/develop' into feature/NewWarehouse 2024-01-29 10:06:23 +01:00
Emmanuele Sassi f18f13dac4 Merge branch 'master' into feature/NewWarehouse 2024-01-29 10:06:12 +01:00
Samuele Locatelli 825412e81a Update pacchetto 2024-01-29 10:03:47 +01:00
Samuele Locatelli 464c22f743 Aggunta controller materiali e rawItems (grezzi) 2024-01-23 10:50:34 +01:00
Samuele Locatelli 91524932f4 Aggiunta prima versione pacchetto nuget x MagMan 2024-01-23 09:37:29 +01:00
Samuele Locatelli a464c989c3 Merge branch 'DataLayer' into develop 2024-01-18 16:35:59 +01:00
Samuele Locatelli 559206cd70 Fix migrazioni e naming 2024-01-18 16:35:04 +01:00
Samuele Locatelli 819928805f Fix model names 2024-01-18 16:24:38 +01:00
Samuele Locatelli 24300e8805 Aggiunta migration x Alias 2024-01-18 15:31:30 +01:00
Samuele Locatelli 5896862614 Aggiunta migrazione 2024-01-18 13:08:33 +01:00
Samuele Locatelli 70078533d2 Modifiche modelli x creazione migrations 2024-01-18 13:07:08 +01:00
Samuele Locatelli 07b7ad6ee3 Aggiunta datamodel x Materiali e grezzi (barre, pareti) 2024-01-18 12:45:35 +01:00
Samuele Locatelli fc1ce2ce53 Merge branch 'develop' into DataLayer 2024-01-18 12:15:47 +01:00
Dario Sassi 958421f4f5 EgtBeamWall :
- aggiornate dll da cui dipende.
2024-01-17 17:19:08 +01:00
Demetrio Cassarino ef59f66c67 -correzione dulo ghost
-correzione deleteduplo
2023-12-21 08:48:39 +01:00
Dario Sassi 14bf36ed68 EgtBEAMWALL :
- aggiornamento EgtUILib e EgtWPFLib5
- piccola miglioria per SpecialPanel
- correzione calcolo numero pezzi inseriti in barre grazie a nuova funzione EgtDuploInRawCount.
2023-12-14 20:31:52 +01:00
Dario Sassi 06bac914ef Merge commit '625f12a1e8df19e094d02b068f3bb988602a7c04' 2023-12-14 12:52:12 +01:00
Dario Sassi 1b956580c9 EgtBEAMWALL 2.5l2 :
- ricompilazione con aggiornamento versione.
2023-12-14 12:51:47 +01:00
Demetrio Cassarino 625f12a1e8 - creato nuovo pulsante dump per la visualizzazione file lua 2023-12-14 11:11:50 +01:00
Emmanuele Sassi 63f0412065 - aggiunto inizio gestione messaggi
- aggiunti messaggi di debug
- aggiunto reset step se ripartenza dopo apertura pinze
- nascosti assi e altri dati assenti su siemens
- gestita ripartenza
- correzione invio programmi su SendNextProgram
- nascoste pagine input e output
2023-12-11 10:12:08 +01:00
Emmanuele Sassi 6eb51e8feb - letto stato e modalita' cn
- gestito reset step
2023-12-01 10:46:03 +01:00
Emmanuele Sassi 19557d6e05 - gestione resetstep per Siemens 2023-11-28 09:56:46 +01:00
Emmanuele Sassi 84dffd8966 - aggiunta gestione modi controllo in caso di nuovo controllo
- aggiunto refresh sort su lista supervisore
2023-11-08 09:27:21 +01:00
Emmanuele Sassi 113ad8bcf6 - aggiornata lettura/scrittura variabili
- correzioni per funzionamento supervisore con lettura/scrittura variabili corrette
2023-11-06 10:36:33 +01:00
Emmanuele Sassi 58acf21f52 - versione sperimentale 2023-10-24 21:45:59 +02:00
Samuele Locatelli c32715a4b5 fix ricerca contains 2023-10-02 09:43:46 +02:00
Samuele Locatelli a83752e565 Aggiunta ulteriore metodo con filtro completo x
- BtlName
- ListName
- Machine
- tipo data
2023-09-30 10:36:50 +02:00
Samuele Locatelli ec2ce96b3b Aggiunta in coda dei proj "orfani" 2023-09-29 17:48:11 +02:00
Samuele Locatelli d131e0b42d Merge remote-tracking branch 'origin/feature/NewOpenWindow' into DataLayer 2023-09-29 17:38:40 +02:00
Emmanuele Sassi efea14db89 - aggiunto metodo per creare ProItem con solo ProjFileM 2023-09-29 17:33:29 +02:00
Emmanuele Sassi c09d8a6b0f Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewOpenWindow 2023-09-29 17:15:09 +02:00
Samuele Locatelli 946ad1d29c Modifica output: Prod --> prodItem list 2023-09-29 17:13:53 +02:00
Emmanuele Sassi c5f1d1669f Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewOpenWindow 2023-09-29 16:38:06 +02:00
Samuele Locatelli 689e81219b Modifica x gestione lettura proj insieme a prod (da testare) 2023-09-29 16:37:25 +02:00
Samuele Locatelli 05ec565f84 Merge remote-tracking branch 'origin/feature/NewOpenWindow' into DataLayer 2023-09-29 15:57:27 +02:00
Samuele Locatelli 0e7866922d Merge branch 'master' into DataLayer 2023-09-29 15:57:13 +02:00
Samuele Locatelli fb92f9faea typo 2023-09-29 15:56:26 +02:00
Emmanuele Sassi f65d07ab22 - aggiunta lista ProjFileM in ProdFileM 2023-09-29 15:53:47 +02:00
Emmanuele Sassi f140b6df54 - correzione funzionamento OpenProject su BTL aggiunti direttamente a Prod 2023-09-29 11:44:50 +02:00
Emmanuele Sassi 441ddc4397 Merge branch 'master' into feature/NewOpenWindow 2023-09-27 18:14:45 +02:00
Emmanuele Sassi 9f16294994 - cambiato giorni del mese da 30 o 31 a sempre 30.5
- aggiunta gestione sempre tra i filtri temporali NewOpenDialog
2023-09-27 18:14:27 +02:00
Emmanuele Sassi fd4e961b39 - correzione eliminazione nuovo prod non salvato 2023-09-18 16:02:06 +02:00
Dario Sassi 7156ca93d0 EgtBEAMWALL 2.5h1 :
- correzioni per data finale in filtro apertura file
- aggiornamento versione e codici di protezione.
2023-08-31 12:11:59 +02:00
Samuele Locatelli 8c42493382 Merge remote-tracking branch 'origin/HEAD' into DataLayer 2023-08-31 08:57:41 +02:00
Emmanuele Sassi 7a6eebcdab - correzioni 2023-08-30 19:28:39 +02:00
Emmanuele Sassi e1b4dc52cb - correzione 2023-08-29 07:11:53 +02:00
Emmanuele Sassi 99ea410056 Merge branch 'feature/SupervisorDataGridSort' into develop 2023-08-29 07:03:11 +02:00
Emmanuele Sassi ae19eae94d Merge commit '88b9226bcbbc1f91d5a3f8c0d10eb0f8fc7b96f7' into develop 2023-08-29 06:57:31 +02:00
Emmanuele Sassi 5f321fba3a - aggiunta modifica nome progetto
- migliorata gestione archiviazione
- migliorata gestione cancellazione
2023-08-28 18:36:42 +02:00
Emmanuele Sassi 3401bb7557 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewOpenWindow 2023-08-25 11:53:17 +02:00
Emmanuele Sassi b7a127c1cd - aggiunta gestione archiviazione progetti 2023-08-25 11:53:04 +02:00
Samuele Locatelli 8f6eaf5a53 Merge remote-tracking branch 'origin/feature/NewOpenWindow' into DataLayer 2023-08-25 11:05:30 +02:00
Samuele Locatelli 80150b508a Reorg codice prod 2023-08-25 11:05:22 +02:00
Samuele Locatelli 34089f946f - update in cascata x archived (prod --> proj)
- filtro archived x proj
2023-08-25 11:01:27 +02:00
Samuele Locatelli 7bc58a74e1 Aggiunta colonna x proj + migration 2023-08-25 10:57:07 +02:00
Emmanuele Sassi 92f347cd7e Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewOpenWindow 2023-08-25 09:08:50 +02:00
Samuele Locatelli 1817870dfe Prod controlelr:
- Aggiunto parametro (opzionale) x mostrare anche archiviati su ricerca
2023-08-25 08:45:26 +02:00
Emmanuele Sassi 7def088b9d - correzione magazzino per pareti 2023-08-24 19:17:21 +02:00
Samuele Locatelli 810a61ea0d Update nuovi metodi cancellazione + refresh 2023-08-24 18:07:37 +02:00
Samuele Locatelli 70cbef0efb DataLayer Update:
- aggiunta nuovi campi
- migration relative
2023-08-24 17:19:10 +02:00
Emmanuele Sassi ec6c44d036 - aggiunta gestione nome progetto
- miglioramenti filtri data
2023-08-24 11:27:02 +02:00
Emmanuele Sassi 5d42576da1 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/NewOpenWindow 2023-08-23 15:00:03 +02:00
Samuele Locatelli 227ded2e88 - aggiunta prod method: update description
- typo per proj method
2023-08-23 10:18:02 +02:00
Emmanuele Sassi 1c81e7fdb4 Merge remote-tracking branch 'gitlab.seriate/master' into feature/NewOpenWindow 2023-08-23 10:11:27 +02:00
Emmanuele Sassi d37014272f - inizio modifica nome del progetto 2023-08-23 10:11:02 +02:00
Emmanuele Sassi dc8fcae112 - introduzione nuova finestra di apertura progetto
- gestita visibilita' filtri finestra di apertura progetto
- corretta scrittura e lettura dati dei filtri
2023-08-22 19:21:51 +02:00
Emmanuele Sassi 3e84659fca -aggiunta gestione backup all'uscita programma
- aggiunta gestione stato durante backup e restore
2023-08-21 11:38:43 +02:00
Emmanuele Sassi 638461a4e3 - gestione backup e ripristino
- aggiornamento pacchetto ionic.zip con dotnetzip
2023-07-31 09:59:05 +02:00
Emmanuele Sassi bf1dd1d526 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/Backup&Restore 2023-07-27 12:47:08 +02:00
Emmanuele Sassi 7d121b2bd5 - aggiunta grafica 2023-07-27 12:46:28 +02:00
Emmanuele Sassi 0fc7d826a8 Modifiche per campo Description 2023-07-27 12:45:16 +02:00
Samuele Locatelli dfb3e1f74a COmpletato metodi con
- password zip
- gestione temp folder
- ripristino altri DB
2023-07-27 12:23:53 +02:00
Samuele Locatelli 8980da46be Aggiunti esempi e conf x testare opzioni export/import 2023-07-27 09:16:21 +02:00
Samuele Locatelli 531da47cbc MySQL backup/Restore:
- nota sui parametri da impiegare
- update eseguibili x call default
- stopwatch esempio tempi esecuzione
2023-07-27 08:50:59 +02:00
Samuele Locatelli b279a287ec test backup & restore 2023-07-27 07:53:00 +02:00
DarioS 79db35220b EgtBEAMWALL :
- corretto riconoscimento parametri macchina modificati.
2023-07-26 10:11:25 +02:00
DarioS d7ba34527f EgtBEAMWALL :
- corretta indicazione versione 2.5g1
- conservazione riferimento di feature anche quando ERROR Impossibile creare una feature con questi valori.
2023-07-24 09:37:26 +02:00
DarioS 7622117281 EgtBEAMWALL 2.5g1 :
- corretto mancato aggiornamento pezzi a caduta in ottimizzazione.
2023-07-10 11:54:15 +02:00
DarioS b331126f8a EgtBeamWall :
- aggiornamento ExtLibs (inutile complicazione che crea problemi e perdita di tempo).
2023-06-19 08:38:04 +02:00
Emmanuele Sassi 8b6c9b38cc Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/ModificheDaDB 2023-06-16 15:06:30 +02:00
Emmanuele Sassi 3133c1d78c - Aggiunto parametro Description a ProjFileVM
- Modificati filtri apertura file
2023-06-16 15:06:18 +02:00
Samuele Locatelli 2ae08165f4 PROD:
- Aggiunta metodo recupero dati filtrati periodo e attivi
2023-06-16 13:23:50 +02:00
Samuele Locatelli f77ea8309c Modifica migration x valore default IsActive 2023-06-16 13:23:34 +02:00
Samuele Locatelli 3a9e8651e7 DataLayer / ProjController:
- Aggiunto metodo x recupero dati per export date
2023-06-16 09:30:50 +02:00
Emmanuele Sassi eddd7b93ca Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/ModificheDaDB 2023-06-15 13:00:10 +02:00
Samuele Locatelli 1d9182f96d Merge remote-tracking branch 'origin/feature/ModificheDaDB' into DataLayer 2023-06-15 12:58:53 +02:00
Samuele Locatelli c3916dcf41 Aggiunta metodo filtro periodo progetti 2023-06-15 12:58:47 +02:00
Emmanuele Sassi 15bfc1bc15 Merge remote-tracking branch 'gitlab.seriate/DataLayer' into feature/ModificheDaDB 2023-06-15 10:27:00 +02:00
Emmanuele Sassi cee4375ea3 - correzione isreadonly su PosZ 2023-06-15 10:20:19 +02:00
Emmanuele Sassi 5b04080f35 EgtBEAMWALL 2.5f2 :
- aggiornamento versioni
2023-06-13 12:21:08 +02:00
Emmanuele Sassi 0d7cc99a2d Merge branch 'fix/UpdatePriorityInProd' 2023-06-13 12:15:16 +02:00
Emmanuele Sassi d48deed9e0 - gestione presenza Priority da flag su WallData 2023-06-12 12:50:26 +02:00
DarioS 4d8f0d6411 EgtBeamWall :
- aggiornata libreria esterna EgtUILib.dll.
2023-06-12 10:37:54 +02:00
Emmanuele Sassi 88b9226bcb - gestione log macchina con timer
- aggiornamento log macchina durante produzione pezzi
2023-06-12 09:13:30 +02:00
Emmanuele Sassi df3b6ae657 - gestito update del priority su pezzi in ottimizzazione
- resettato stato calc su modifica priority
2023-06-08 19:32:22 +02:00
Samuele Locatelli 668a37c6da update lettura ultimi Proj 2023-06-08 18:06:43 +02:00
Samuele Locatelli f4b18d962d Update readme 2023-06-08 17:18:35 +02:00
Samuele Locatelli eaa43c6209 Fix gestione cancellazione logica x ricerche 2023-06-08 17:17:15 +02:00
Samuele Locatelli 99dd1b6807 Update conversioni + metodi x NUOVI campi:
- Projdescription (modificabile)
- IsActive (per cancellazione logica)
2023-06-08 17:10:39 +02:00
Samuele Locatelli 5b6f719349 Update modello dati + migrazioni 2023-06-08 17:10:17 +02:00
Emmanuele Sassi dd2f75abf1 - migliorata gestione sort MachGroupList in Supervisor 2023-06-07 10:48:43 +02:00
Emmanuele Sassi 2922c0e6ef - aggiunta gestione sort su RawPartList del supervisor 2023-06-06 11:40:31 +02:00
217 changed files with 16725 additions and 2192 deletions
+1 -1
View File
@@ -554,7 +554,7 @@ Public Class BTLFeatureM
' Impossibile creare una feature con questi valori - ERRORE
MessageBox.Show(EgtMsg(61852), EgtMsg(30007))
nFeatureId = EgtBeamModifyProcess(Me.nFeatureId, Me.nSelGRP, Me.nPRC, Me.nSelSIDE, "", Me.nPRID,
New Frame3d(), vPar, sPar, vParQ, nCrvId, nCrv2Id)
Me.frFRAME, vPar, sPar, vParQ, nCrvId, nCrv2Id)
SetFeatureId(nFeatureId)
bOk = False
End If
+12 -1
View File
@@ -178,6 +178,16 @@ Public Class BTLPartM
End Set
End Property
Public m_MaterialM As MaterialM
Public Property MaterialM As MaterialM
Get
Return m_MaterialM
End Get
Set(value As MaterialM)
m_MaterialM = value
End Set
End Property
Public m_sTIMBERGRADE As String
Public Property sTIMBERGRADE As String
Get
@@ -587,7 +597,7 @@ Public Class BTLPartM
Public ReadOnly Property nINPROD As Integer
Get
Dim INPROD As Integer = 0
EgtDuploCount(m_nPartId, INPROD)
EgtDuploInRawCount(m_nPartId, INPROD)
Return INPROD
End Get
End Property
@@ -922,6 +932,7 @@ Public Class BTLPartM
NewBTLPart.m_nINVERTED = 0
End If
EgtGetInfo(nPartId, BTL_PRT_MATERIAL, NewBTLPart.m_sMATERIAL)
' EgtGetInfo(nPartId, BTL_PRT_WAREHOUSEMATERIAL, NewBTLPart.m_sWAREHOUSEMATERIAL)
If Not EgtGetInfo(nPartId, LOCK_ROT, NewBTLPart.m_bLockRotation) Then
NewBTLPart.m_bLockRotation = False
End If
@@ -593,4 +593,13 @@ Public Class ProcessResult
m_nTIME = TIME
End Sub
Public Sub ResetTypeFeature()
m_Type = ProcessResultTypes.PART
m_nTASKID = 0
End Sub
Public Sub ResetTypePart()
m_Type = ProcessResultTypes.BAR
m_nCUTID = 0
End Sub
End Class
+1
View File
@@ -302,6 +302,7 @@
Public Const BTLFILENAME As String = "BTLFILENAME"
Public Const EXP_PART As String = "ImportExport"
Public Const EXP_MACHINE As String = "Machine"
Public Const EXP_CLOUDID As String = "CloudId"
' parametro che indica se il progetto e' stato appena importato e quindi bisogna riverificare i MachGroup
Public Const IMP_VERIFYMACHGROUP As String = "VerifyMachGroup"
@@ -17,5 +17,13 @@
Public Const COL_DESCRIPTION As String = "colDESCRIPTION"
Public Const COL_SUPERVISORID As String = "colSUPERVISORID"
Public Const COL_PRIORITY As String = "colPRIORITY"
Public Const COL_NAME As String = "colNAME"
Public Const COL_H As String = "colH"
Public Const COL_MATERIAL As String = "colMATERIAL"
Public Const COL_WAREHOUSEMATERIAL As String = "colWAREHOUSEMATERIAL"
Public Const COL_USAGE As String = "colUSAGE"
Public Const COL_WASTE As String = "colWASTE"
Public Const COL_ARCHIVED As String = "colARCHIVED"
Public Const COL_USEQTY As String = "colUSEQTY"
End Module
@@ -5,6 +5,7 @@
Public Const S_FEATURELIST As String = "DG_FeatureList"
Public Const S_OPENPROJFILEDLG_PROJ As String = "DG_OpenProjectFileDialog_PROJ"
Public Const S_OPENPROJFILEDLG_PROD As String = "DG_OpenProjectFileDialog_PROD"
Public Const S_NEWOPENPROJFILEDLG_PROD As String = "DG_NewOpenProjectFileDialog_PROD"
Public Const S_RAWPARTLIST_BEAM As String = "DG_RawPartList_BEAM"
Public Const S_RAWPARTLIST_WALL As String = "DG_RawPartList_WALL"
Public Const S_PARTINRAWPARTLIST_BEAM As String = "DG_PartInRawPartList_BEAM"
+19
View File
@@ -46,6 +46,8 @@ Public Module ConstIni
Public Const K_ENABLEEDIT As String = "EnableEdit"
Public Const K_FASTPRODUCE As String = "FastProduce"
Public Const K_ADDPROJ As String = "AddProj"
Public Const K_PROJECTMODE As String = "ProjectMode"
Public Const K_NETWAREHOUSE As String = "NetWarehouse"
'Public Const S_LANGUAGES As String = "Languages"
'Public Const K_LANGUAGE As String = "Language"
@@ -127,6 +129,9 @@ Public Module ConstIni
Public Const K_STARTDATE As String = "StartDate"
Public Const K_ENDDATE As String = "EndDate"
Public Const S_OPENFILEDIALOG As String = "OpenFileDialog"
Public Const K_VIEWARCHIVED As String = "ViewArchived"
'Public Const S_NEST As String = "Nest"
Public Const K_NESTEXEC As String = "NestExec"
Public Const K_FLIPROT As String = "FlipRot"
@@ -158,5 +163,19 @@ Public Module ConstIni
Public Const S_WAREHOUSE As String = "Warehouse"
Public Const K_TYPE As String = "Type"
Public Const K_DEFAULTQUANTITY As String = "DefaultQuantity"
Public Const K_LASTSYNCHRONIZATION As String = "LastSynchronization"
Public Const K_USENETWAREHOUSE As String = "UseNetWarehouse"
Public Const K_SHOWWAREHOUSEMATERIAL As String = "ShowWarehouseMaterial"
Public Const K_NETADDRESS As String = "NetAddress"
Public Const K_AUTHTOKEN As String = "AuthToken"
Public Const K_SENDESTIMONSAVE As String = "SendEstimOnSave"
Public Const S_BACKUPANDRESTORE As String = "Backup&Restore"
Public Const K_EXTERNALBACKUPACTIVE As String = "ExternalBackupActive"
Public Const K_EXTERNALFILEPATH As String = "ExternalFilePath"
Public Const K_REMINDERFREQUENCY As String = "ReminderFrequency"
Public Const S_SPECIAL As String = "Special"
Public Const K_SPECIALENABLE As String = "SpecialEnable"
End Module
+11
View File
@@ -112,6 +112,11 @@
<DependentUpon>LoadingWndV.xaml</DependentUpon>
</Compile>
<Compile Include="LoadingWnd\LoadingWndVM.vb" />
<Compile Include="NewOpenProjectFileDialog\NewOpenProjectFileDialogV.xaml.vb">
<DependentUpon>NewOpenProjectFileDialogV.xaml</DependentUpon>
</Compile>
<Compile Include="NewOpenProjectFileDialog\NewOpenProjectFileDialogVM.vb" />
<Compile Include="ProjectFileVM\ProdItem.vb" />
<Compile Include="Utility\DimensionsIniFile.vb" />
<Compile Include="Utility\Enum.vb" />
<Compile Include="MachGroupPanel\MyMachGroupPanelVM.vb" />
@@ -141,6 +146,7 @@
<Compile Include="Lib\MachGroupPanelM.vb" />
<Compile Include="MachGroupModel\MyMachGroupPanelM.vb" />
<Compile Include="Utility\ManageWindow.vb" />
<Compile Include="Utility\RawPart.vb" />
<Compile Include="Utility\MyMachine.vb" />
<Compile Include="OpenProjectFileDialog\OpenProjectFileDialogV.xaml.vb">
<DependentUpon>OpenProjectFileDialogV.xaml</DependentUpon>
@@ -153,6 +159,7 @@
<Compile Include="ProjectManager\ProjectFileVM.vb" />
<Compile Include="ProjectManager\ProjFileVM.vb" />
<Compile Include="ProjectFileVM\ProjFileM.vb" />
<Compile Include="Utility\Material.vb" />
<Compile Include="Utility\SectionXMaterial.vb" />
<Compile Include="Utility\BTLIniFile.vb" />
<Compile Include="Utility\CoreMap.vb" />
@@ -190,6 +197,10 @@
<SubType>Designer</SubType>
<Generator>XamlIntelliSenseFileGenerator</Generator>
</Page>
<Page Include="NewOpenProjectFileDialog\NewOpenProjectFileDialogV.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="OpenProjectFileDialog\OpenProjectFileDialogV.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -12,6 +12,8 @@ Imports EgtWPFLib5
Public Class EgtDataGrid
Public Event ResetSort()
' vecchio indice da salvare per il Reorder delle colonne
Public OldIndex As Integer = 0
' indice header su cui è aperto il ContextMenu per gestione check/uncheck LockTable
@@ -361,12 +363,14 @@ Public Class EgtDataGrid
' resetto graficamente anche l'header della colonna
CurrDataGrid.Columns(column.DisplayIndex).SortDirection = Nothing
Next
RaiseEvent ResetSort()
End If
End Sub
End Class
Public Class EgtDataGridColumn
Inherits VMBase
Private m_dgColumn As DataGridColumn
@@ -438,6 +442,9 @@ Public Class EgtDataGridColumn
End If
End Set
End Property
Public Sub ResetToOrigIsReadOnly()
IsReadOnly = m_OrigIsReadOnly
End Sub
Friend OldCanUserReorder As Boolean?
Private m_CanUserReorder As Boolean
@@ -501,7 +508,7 @@ Public Class EgtDataGridColumn
Private m_ColumnVisibility As Visibility
Public Property ColumnVisibility As Visibility
Get
Return If(m_Visible, Visibility.Visible, Visibility.Collapsed)
Return If(m_ColumnVisibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_ColumnVisibility = value
@@ -521,6 +528,9 @@ Public Class EgtDataGridColumn
End If
End Set
End Property
Public Sub SetColumnVisibility(value As Visibility)
ColumnVisibility = value
End Sub
Private m_CanUserEditVisible As Boolean
Public Property CanUserEditVisible As Boolean
@@ -16,6 +16,8 @@ Public Module LoadingWndHelper
CHANGEPARAM = 10
CREATINGPDF = 11
CHANGEMATERIAL = 12
BACKUP = 13
RESTORE = 14
End Enum
Dim m_MainWindow As Windows.Window
@@ -113,6 +113,26 @@ Public Class MyMachGroupM
End Set
End Property
Protected m_sWAREHOUSEMATERIAL As String
Public Property sWAREHOUSEMATERIAL As String
Get
Return m_sWAREHOUSEMATERIAL
End Get
Set(value As String)
m_sWAREHOUSEMATERIAL = value
End Set
End Property
Protected m_RawPartM As RawPartM
Public Property RawPartM As RawPartM
Get
Return m_RawPartM
End Get
Set(value As RawPartM)
m_RawPartM = value
End Set
End Property
' lista dei pezzi che sono nel grezzo
Protected m_PartMList As New List(Of PartM)
Public Property PartMList As List(Of PartM)
@@ -186,7 +186,13 @@ Public Class MyMachGroupPanelM
While nOutlineId <> GDB_ID.NULL
' verifico che sia feature
If EgtExistsInfo(nOutlineId, MGR_FTR_PRC) Then
If EgtExistsInfo(nOutlineId, MGR_FTR_PRID) Then
Dim nCurrPrId As Integer = GDB_ID.NULL
If EgtGetInfo(nOutlineId, MGR_FTR_PRID, nCurrPrId) AndAlso nCurrPrId <> GDB_ID.NULL Then
If nCurrPrId < nPRId Then
EgtSetInfo(nOutlineId, MGR_FTR_PRID, nPRId)
nPRId += 1
End If
nPRId = Math.Max(nPRId - 1, nCurrPrId) + 1
nOutlineId = EgtGetNext(nOutlineId)
Continue While
Else
@@ -215,20 +221,46 @@ Public Class MyMachGroupPanelM
If nBWType = BWType.WALL Then
' salvo parametri Q
QArray(Duploindex) = New Dictionary(Of String, Dictionary(Of String, String))
' ciclo sulle feature
Dim nGlobPRId As Integer = 1
Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS)
If nFeatureLayer <> GDB_ID.NULL Then
Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer)
While nFeatureId <> GDB_ID.NULL
' verifico che sia feature
Dim nPRC As Integer
If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then
nPRId = 0
EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId)
If nPRId > nGlobPRId Then nGlobPRId = nPRId
Dim sKey As String = nPRId & "." & nPRC
QArray(Duploindex).Add(sKey, New Dictionary(Of String, String))
For QIndex = 1 To 10
Dim QKey As String = "Q" & QIndex.ToString("D2")
Dim QValue As Integer = 0
If EgtGetInfo(nFeatureId, QKey, QValue) Then
QArray(Duploindex)(sKey).Add(QKey, QValue)
End If
Next
End If
nFeatureId = EgtGetNext(nFeatureId)
End While
End If
' ciclo sugli outline
nOutlineLayer = EgtGetFirstNameInGroup(DuploArray(Duploindex), OUTLINE)
If nOutlineLayer <> GDB_ID.NULL Then
Dim nGlobPRId As Integer = 1
Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayer)
While nOutlineId <> GDB_ID.NULL
' verifico che sia feature
Dim nPRC As Integer
If EgtGetInfo(nOutlineId, MGR_FTR_PRC, nPRC) Then
nPRId = 0
If Not EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) Then
If Not EgtGetInfo(nOutlineId, MGR_FTR_PRID, nPRId) OrElse nPRId < nGlobPRId Then
nGlobPRId += 1
EgtSetInfo(nOutlineId, MGR_FTR_PRID, nGlobPRId)
nPRId = nGlobPRId
nGlobPRId += 1
Else
If nPRId > nGlobPRId Then nGlobPRId = nPRId
End If
Dim sKey As String = nPRId & "." & nPRC
QArray(Duploindex).Add(sKey, New Dictionary(Of String, String))
@@ -243,29 +275,6 @@ Public Class MyMachGroupPanelM
nOutlineId = EgtGetNext(nOutlineId)
End While
End If
' ciclo sulle feature
Dim nFeatureLayer As Integer = EgtGetFirstNameInGroup(DuploArray(Duploindex), PROCESSINGS)
If nFeatureLayer <> GDB_ID.NULL Then
Dim nFeatureId As Integer = EgtGetFirstInGroup(nFeatureLayer)
While nFeatureId <> GDB_ID.NULL
' verifico che sia feature
Dim nPRC As Integer
If EgtGetInfo(nFeatureId, MGR_FTR_PRC, nPRC) Then
nPRId = 0
EgtGetInfo(nFeatureId, MGR_FTR_PRID, nPRId)
Dim sKey As String = nPRId & "." & nPRC
QArray(Duploindex).Add(sKey, New Dictionary(Of String, String))
For QIndex = 1 To 10
Dim QKey As String = "Q" & QIndex.ToString("D2")
Dim QValue As Integer = 0
If EgtGetInfo(nFeatureId, QKey, QValue) Then
QArray(Duploindex)(sKey).Add(QKey, QValue)
End If
Next
End If
nFeatureId = EgtGetNext(nFeatureId)
End While
End If
End If
Next
' aggiornamento dei Duplo
+10
View File
@@ -210,6 +210,16 @@ Public Class PartM
End Set
End Property
Public m_MaterialM As MaterialM
Public Property MaterialM As MaterialM
Get
Return m_MaterialM
End Get
Set(value As MaterialM)
m_MaterialM = value
End Set
End Property
Public m_sSTOREY As String
Public Property sSTOREY As String
Get
@@ -116,6 +116,18 @@ Public MustInherit Class MyMachGroupVM
End Set
End Property
Public ReadOnly Property sWAREHOUSEMATERIAL As String
Get
Return MyMachGroupM.RawPartM.Material.sWarehouseMaterial
End Get
End Property
Public ReadOnly Property RawPartM As RawPartM
Get
Return MyMachGroupM.RawPartM
End Get
End Property
Public ReadOnly Property sUnitTime As String
Get
Return TimeSpan.FromSeconds(nCALC_TIME).ToString()
@@ -130,7 +142,7 @@ Public MustInherit Class MyMachGroupVM
Public ReadOnly Property Section As SectionXMaterial
Get
Return New SectionXMaterial(dW, dH, dL, MyMachGroupM.sMATERIAL)
Return New SectionXMaterial(dW, dH, dL, MyMachGroupM.RawPartM.Material.sMaterial, MyMachGroupM.sWAREHOUSEMATERIAL)
End Get
End Property
+15 -1
View File
@@ -162,6 +162,19 @@ Public MustInherit Class PartVM
End Set
End Property
Public ReadOnly Property sWAREHOUSEMATERIAL As String
Get
Return m_PartM.MaterialM.sWarehouseMaterial
End Get
End Property
Public ReadOnly Property MaterialM As MaterialM
Get
Return m_PartM.MaterialM
End Get
End Property
Public ReadOnly Property sSTOREY As String
Get
Return m_PartM.sSTOREY
@@ -562,8 +575,9 @@ Public MustInherit Class PartVM
Public Sub CalcFallUpdate(FALL As Integer)
EgtSetInfo(nPartId, ITG_PROD_FALL, FALL, True)
m_PartM.nCALC_FALL = 0
m_PartM.nCALC_FALL = FALL
NotifyPropertyChanged(NameOf(nCALC_FALL))
NotifyPropertyChanged(NameOf(CALC_FALL_Visibility))
End Sub
' funzione che aggiorna lo stato e gli errori dopo calcolo
+3 -3
View File
@@ -16,7 +16,7 @@ Imports System.Runtime.InteropServices
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("Egalware s.r.l.")>
<Assembly: AssemblyProduct("EgtBEAMWALL.Core")>
<Assembly: AssemblyCopyright("Copyright © 2020-2023 by Egalware s.r.l.")>
<Assembly: AssemblyCopyright("Copyright © 2020-2024 by Egalware s.r.l.")>
<Assembly: AssemblyTrademark("")>
<Assembly: ComVisible(False)>
@@ -35,5 +35,5 @@ Imports System.Runtime.InteropServices
' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.5.6.1")>
<Assembly: AssemblyFileVersion("2.5.6.1")>
<Assembly: AssemblyVersion("2.6.6.1")>
<Assembly: AssemblyFileVersion("2.6.6.1")>
@@ -0,0 +1,249 @@
<EgtWPFLib5:EgtCustomWindow x:Class="NewOpenProjectFileDialogV"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
xmlns:EgtBEAMWALL="clr-namespace:EgtBEAMWALL.Core"
Title="{Binding Title}"
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
WindowStyle="None" ResizeMode="NoResize" TitleBarHeight="30" IsResizable="True"
IsMinimizable="False" WindowStartupLocation="CenterScreen" ShowInTaskbar="False"
IsClosable="False"
MinHeight="500" MinWidth="500"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<EgtWPFLib5:EgtCustomWindow.Resources>
<EgtWPFLib5:FileNameConverter x:Key="FileNameConverter"/>
</EgtWPFLib5:EgtCustomWindow.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="5*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<GroupBox Header="{Binding Filters_Msg}"
Margin="5"
Visibility="{Binding Filters_Visibility}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ComboBox ItemsSource="{Binding BTLDateTypeList}"
SelectedIndex="{Binding SelBTLDateType}"
Width="105"
Margin="5"
Style="{StaticResource FeatureComboBox}"/>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<ComboBox ItemsSource="{Binding DayTypeList}"
SelectedIndex="{Binding SelDayType}"
Width="105"
Margin="0,0,2.5,0"
Style="{StaticResource PartParam_ComboBox}"/>
<StackPanel Orientation="Horizontal" Visibility="{Binding Date_Visibility}">
<TextBlock Text="{Binding From_Msg}"
Style="{StaticResource Filter_TextBlock}"/>
<DatePicker SelectedDate="{Binding dtStartDate}"
Style="{StaticResource Filter_DatePicker}"/>
<TextBlock Text="{Binding To_Msg}"
Style="{StaticResource Filter_TextBlock}"/>
<DatePicker SelectedDate="{Binding dtEndDate}"
Style="{StaticResource Filter_DatePicker}"/>
</StackPanel>
</StackPanel>
<CheckBox Grid.Column="2"
IsChecked="{Binding bViewArchived}"
Content="{Binding ViewArchived_Msg}"
VerticalAlignment="Center"/>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ComboBox ItemsSource="{Binding FilterTypeList}"
SelectedItem="{Binding SelFilterType}"
Width="105"
Margin="5"
Style="{StaticResource FeatureComboBox}"/>
<EgtWPFLib5:EgtTextBox Grid.Column="1"
Text="{Binding SearchText}"
Margin="5"
Visibility="{Binding SearchText_Visibility}"/>
<StackPanel Grid.Column="2"
Orientation="Horizontal">
<TextBlock Text="{Binding Rows_Msg}"
Style="{StaticResource OptionTextBlock}"/>
<ComboBox ItemsSource="{Binding RowQuantityList}"
SelectedIndex="{Binding SelRowQuantity}"
Style="{StaticResource FeatureComboBox}"/>
</StackPanel>
</Grid>
</Grid>
</GroupBox>
<EgtBEAMWALL:EgtDataGrid x:Name="MainDataGrid"
Grid.Row="1"
ItemsSource="{Binding ProjectList}"
SelectedItem="{Binding SelProject}"
CanUserAddRows="False"
AutoGenerateColumns="False"
CanUserResizeRows="False"
SelectionMode="Single"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
Margin="5"
RowDetailsVisibilityMode="Visible"
CellEditEnding="MainDataGrid_CellEditEnding"
BindingColumns="{Binding ProdColumns}">
<DataGrid.Resources>
<!-- ProdId -->
<DataGridTextColumn x:Key="colPRODID" Binding="{Binding sProdId}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.Id_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<!--Name-->
<DataGridTextColumn x:Key="colNAME" Binding="{Binding sName}">
<DataGridTextColumn.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=DataContext.Name_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
<ToggleButton Grid.Column="1"
Margin="5,0,0,0"
IsChecked="{Binding Path=DataContext.bIsEditNameActive,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"
Style="{StaticResource ToolBar_SmallToggleButton}">
<Image Source="\Resources\CalcPanel\Edit.png"
Style="{StaticResource LockImage}"/>
</ToggleButton>
</Grid>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<!-- Creation date -->
<DataGridTextColumn x:Key="colCRTDATE" Binding="{Binding dtCreateDate}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.CreateDate_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<!-- Machine -->
<DataGridTextColumn x:Key="colMACHINE" Binding="{Binding sMachine}">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.Machine_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<!-- Archived -->
<DataGridTemplateColumn x:Key="colARCHIVED">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="\Resources\OpenProjectFileDialog\Archived.png"
Visibility="{Binding Archived_Visibility}"
Height="15"
Width="15"
Stretch="UniformToFill"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.Header>
<TextBlock Text="{Binding Path=DataContext.Archived_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
</DataGridTemplateColumn.Header>
</DataGridTemplateColumn>
</DataGrid.Resources>
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="FontWeight" Value="DemiBold"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<EventSetter Event="MouseDoubleClick" Handler="ProjectList_MouseDoubleClick"/>
</Style>
</DataGrid.RowStyle>
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding ProjFileList}"
BorderThickness="0"
Margin="0,-1,0,0"
Padding="0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid TextBlock.FontSize="12"
TextBlock.FontWeight="Normal">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=DataContext.ProdColumns[0].ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0"
Grid.ColumnSpan="2"
Background="Gray"
Margin="40,0,40,0"/>
<Grid Grid.Column="1"
Grid.Row="1"
Margin="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Path=DataContext.BTLFileName_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"
Style="{StaticResource OpenWnd_TextBlock}"/>
<TextBlock Grid.Column="1"
Text="{Binding sBTLFileName}"/>
<TextBlock Grid.Row="1"
Text="{Binding Path=DataContext.ListName_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"
Style="{StaticResource OpenWnd_TextBlock}"/>
<TextBlock Grid.Column="1"
Grid.Row="1"
Text="{Binding sListName}"/>
<TextBlock Grid.Column="2"
Text="{Binding Path=DataContext.ExportDate_Msg, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:NewOpenProjectFileDialogV}}}"
Style="{StaticResource OpenWnd_TextBlock}"/>
<TextBlock Grid.Column="3"
Text="{Binding dtExportDate}"/>
</Grid>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</EgtBEAMWALL:EgtDataGrid>
<UniformGrid Columns="4" Grid.Row="2" Margin="0,0,0,5">
<Button IsDefault="True" Name="OpenBtn"
Content="{Binding Open_Msg}"
Style="{DynamicResource EgtWPFLib5_InputButton}"/>
<Button Content="{Binding Archive_Msg}"
Command="{Binding Archive_Command}"
IsEnabled="{Binding bArchived_IsEnabled}"
Style="{DynamicResource EgtWPFLib5_InputButton}"/>
<Button Content="{Binding Delete_Msg}"
Command="{Binding Delete_Command}"
IsEnabled="{Binding bDelete_IsEnabled}"
Style="{DynamicResource EgtWPFLib5_InputButton}"/>
<Button Command="{Binding Cancel_Command}"
Content="{Binding Cancel_Msg}"
Style="{DynamicResource EgtWPFLib5_InputButton}"/>
</UniformGrid>
</Grid>
</EgtWPFLib5:EgtCustomWindow>
@@ -0,0 +1,86 @@
Imports System.ComponentModel
Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input
Imports EgtBEAMWALL.Core.ConstBeam
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtBEAMWALL
Imports System.Windows.Media
Public Class NewOpenProjectFileDialogV
Private WithEvents m_OpenProjFileDialogVM As NewOpenProjectFileDialogVM
#Region "CONSTRUCTOR"
Sub New(Owner As Window, OpenProjFileDialogVM As NewOpenProjectFileDialogVM)
' Funzione che interpreta l'xaml
InitializeComponent()
Me.Owner = Owner
Me.DataContext = OpenProjFileDialogVM
' Assegno al riferimento locale al VM il VM preso dal DataContext
m_OpenProjFileDialogVM = OpenProjFileDialogVM
AddHandler Me.Loaded, AddressOf OpenProjectFileDialog_Loaded
AddHandler Me.Closing, AddressOf OpenProjectFileDialog_Closing
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Public Function EgtShowDialog(ProjectType As ProjectType) As Boolean?
m_OpenProjFileDialogVM.Init(ProjectType)
' mostro la finestra di dialogo
Return Me.ShowDialog()
End Function
Public Function EgtShowDialog(ProjectType As ProjectType, ProjectList As List(Of ProjectFileVM)) As Boolean?
m_OpenProjFileDialogVM.Init(ProjectType, ProjectList)
' mostro la finestra di dialogo
Return Me.ShowDialog()
End Function
Public Function EgtShowDialog(ProjectType As ProjectType, GoToProd As Boolean) As Boolean?
m_OpenProjFileDialogVM.Init(ProjectType, Nothing, GoToProd)
' mostro la finestra di dialogo
Return Me.ShowDialog()
End Function
Private Sub OpenProjectFileDialog_Loaded(sender As Object, e As RoutedEventArgs)
' Carico e imposto posizione finestra
WinPosFromIniToWindow(S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE, Me)
End Sub
Private Sub OpenProjectFileDialog_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs)
If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then
e.Cancel = True
Return
End If
' Salvo posizione finestra (se non minimizzata)
WinPosFromWindowToIni(Me, S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE)
End Sub
#End Region ' METHODS
#Region "EVENTS"
Private Sub ProjectList_MouseDoubleClick(sender As Object, e As MouseButtonEventArgs)
m_OpenProjFileDialogVM.ProjDoubleClick()
End Sub
#End Region ' EVENTS
Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click
DialogResult = m_OpenProjFileDialogVM.VerifySelected()
End Sub
Private Sub CloseWindow(bDialogResult As Boolean) Handles m_OpenProjFileDialogVM.m_CloseWindow
Me.DialogResult = bDialogResult
End Sub
Private Sub MainDataGrid_CellEditEnding(sender As Object, e As DataGridCellEditEndingEventArgs)
'm_OpenProjFileDialogVM.SetIsEditNameActive(False)
End Sub
End Class
@@ -0,0 +1,781 @@
Imports System.Collections.ObjectModel
Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Input
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.Core.ConstBeam
Imports EgtUILib
Imports EgtWPFLib5
Public MustInherit Class NewOpenProjectFileDialogVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Public Enum BTLDateTypes As Integer
CREATEDATE = 0
EXPORTDATE = 1
End Enum
Private Enum FilterTypes As Integer
NULL = 0
ID = 1
BTLFILENAME = 2
LISTNAME = 3
MACHINE = 4
End Enum
Public Enum DayTypes As Integer
LASTMONTH = 0
LAST3MONTHS = 1
LAST6MONTHS = 2
PERIOD = 3
ALWAYS = 4
End Enum
Public Enum RowQuantities As Integer
FIFTY = 0
HUNDRED = 1
HUNDREDANDFIFTY = 2
End Enum
Friend Event m_CloseWindow(bDialogResult As Boolean)
Protected m_ProdColumns As New ObservableCollection(Of EgtDataGridColumn)
Public Property ProdColumns As ObservableCollection(Of EgtDataGridColumn)
Get
Return m_ProdColumns
End Get
Set(value As ObservableCollection(Of EgtDataGridColumn))
m_ProdColumns = value
End Set
End Property
Private m_colProdFile_Name As EgtDataGridColumn
Public ReadOnly Property colProdFile_Name As EgtDataGridColumn
Get
Return m_colProdFile_Name
End Get
End Property
Private m_colArchived_Name As EgtDataGridColumn
Public ReadOnly Property colArchived_Name As EgtDataGridColumn
Get
Return m_colArchived_Name
End Get
End Property
Protected m_ProjColumns As New ObservableCollection(Of EgtDataGridColumn)
Public Property ProjColumns As ObservableCollection(Of EgtDataGridColumn)
Get
Return m_ProjColumns
End Get
Set(value As ObservableCollection(Of EgtDataGridColumn))
m_ProjColumns = value
End Set
End Property
Protected m_ProjectType As ProjectType
Protected m_sFilter As String
Public Property Filter As String
Get
Return m_sFilter
End Get
Set(value As String)
m_sFilter = value
End Set
End Property
Protected m_sFileNameFilter As Predicate(Of String)
Public Property FileNameFilter As Predicate(Of String)
Get
Return m_sFileNameFilter
End Get
Set(value As Predicate(Of String))
m_sFileNameFilter = value
End Set
End Property
Protected m_sExtensions As New List(Of String)
Public ReadOnly Property Extensions As List(Of String)
Get
Return m_sExtensions
End Get
End Property
Public m_ProjectList_View As CollectionView = Nothing
Protected m_ProjectList As New ObservableCollection(Of ProdItem)
Public ReadOnly Property ProjectList As ObservableCollection(Of ProdItem)
Get
Return m_ProjectList
End Get
End Property
Private m_nSelProjIndex As Integer
Public ReadOnly Property nSelProjIndex As Integer
Get
Return m_nSelProjIndex
End Get
End Property
Protected m_SelProject As ProdItem
Public Property SelProject As ProdItem
Get
Return m_SelProject
End Get
Set(value As ProdItem)
m_SelProject = value
' verifico se abilitare il bottone Delete
If IsNothing(m_SelProject) Then
SetDeleteIsEnabled(False)
SetArchivedIsEnabled(False)
ElseIf IsNothing(m_SelProject.ProdFileVM) Then
SetDeleteIsEnabled(True)
SetArchivedIsEnabled(False)
Else
SetDeleteIsEnabled(Not SelProject.ProdFileVM.bIsProduced)
SetArchivedIsEnabled(True)
End If
NotifyPropertyChanged(NameOf(Archive_Msg))
End Set
End Property
Protected m_FileName As String
Public Property FileName As String
Get
Return m_FileName
End Get
Set(value As String)
m_FileName = value
End Set
End Property
Private m_bFixedProjectList As Boolean
Public ReadOnly Property bFixedProjectList As Boolean
Get
Return m_bFixedProjectList
End Get
End Property
Public Sub SetFixedProjectList(bValue As Boolean)
m_bFixedProjectList = bValue
NotifyPropertyChanged(NameOf(Filters_Visibility))
End Sub
Public ReadOnly Property Filters_Visibility As Visibility
Get
Return If(m_bFixedProjectList, Visibility.Collapsed, Visibility.Visible)
End Get
End Property
Protected m_BTLDateTypeList As New List(Of String)
Public ReadOnly Property BTLDateTypeList As List(Of String)
Get
Return m_BTLDateTypeList
End Get
End Property
Protected m_SelBTLDateType As BTLDateTypes = Nothing
Public Property SelBTLDateType As Integer
Get
Return m_SelBTLDateType
End Get
Set(value As Integer)
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_DayTypeList As New List(Of String)({EgtMsg(62532), EgtMsg(62533), EgtMsg(62534), EgtMsg(62531)})
Public Overridable ReadOnly Property DayTypeList As List(Of String)
Get
Return m_DayTypeList
End Get
End Property
Protected m_SelDayType As DayTypes = DayTypes.LASTMONTH
Public Property SelDayType As Integer
Get
Return m_SelDayType
End Get
Set(value As Integer)
Dim PrevSelDayType As DayTypes = m_SelDayType
m_SelDayType = value
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_DAYTYPE, Convert.ToInt32(m_SelDayType))
m_Date_Visibility = If(m_SelDayType = DayTypes.PERIOD, Visibility.Visible, Visibility.Collapsed)
If m_SelDayType = DayTypes.PERIOD Then
Select Case PrevSelDayType
Case DayTypes.LASTMONTH
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5)
Case DayTypes.LAST3MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 3)
Case DayTypes.LAST6MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 6)
Case DayTypes.ALWAYS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = New DateTime(2020, 1, 1)
End Select
NotifyPropertyChanged(NameOf(dtStartDate))
NotifyPropertyChanged(NameOf(dtEndDate))
End If
NotifyPropertyChanged(NameOf(Date_Visibility))
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_dtStartDate As DateTime = DateTime.Today
Public Property dtStartDate As DateTime
Get
Return m_dtStartDate
End Get
Set(value As DateTime)
m_dtStartDate = value
Dim lStartDate As Long = m_dtStartDate.ToFileTimeUtc()
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_STARTDATE, lStartDate.ToString())
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_dtEndDate As DateTime = DateTime.Today
Public Property dtEndDate As DateTime
Get
Return m_dtEndDate
End Get
Set(value As DateTime)
m_dtEndDate = value
Dim lEndDate As Long = m_dtEndDate.ToFileTimeUtc()
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_ENDDATE, lEndDate.ToString())
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_Date_Visibility As Visibility = Visibility.Collapsed
Public ReadOnly Property Date_Visibility As Visibility
Get
Return m_Date_Visibility
End Get
End Property
Private m_RowQuantityList As New List(Of String)({50, 100, 150})
Public ReadOnly Property RowQuantityList As List(Of String)
Get
Return m_RowQuantityList
End Get
End Property
Private m_SelRowQuantity As RowQuantities
Public Property SelRowQuantity As Integer
Get
Return m_SelRowQuantity
End Get
Set(value As Integer)
m_SelRowQuantity = value
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
' lista campi per ricerca testuale e con datepicker
Protected m_FilterTypeList As New ObservableCollection(Of IdNameStruct)
Public ReadOnly Property FilterTypeList As ObservableCollection(Of IdNameStruct)
Get
Return m_FilterTypeList
End Get
End Property
Protected m_SelFilterType As IdNameStruct = Nothing
Public Property SelFilterType As IdNameStruct
Get
Return m_SelFilterType
End Get
Set(value As IdNameStruct)
' resetto il contenuto della barra di ricerca testuale
m_SearchText = ""
NotifyPropertyChanged(NameOf(SearchText))
' resetto le selezioni sul calendario
If Not IsNothing(SearchDate) Then SearchDate.Clear()
' setto il Tipo Filtro a NULL e refresho la lista dei progetti (in modo da averli visibili tutti)
m_SelFilterType = m_FilterTypeList(0)
m_ProjectList_View.Refresh()
' ora setto il valore scelto come Tipo Filtro
m_SelFilterType = value
Select Case m_SelFilterType.Id
Case FilterTypes.ID, FilterTypes.BTLFILENAME, FilterTypes.LISTNAME, FilterTypes.MACHINE
SearchText_Visibility = Visibility.Visible
SearchDate_Visibility = Visibility.Collapsed
Case BTLDateTypes.EXPORTDATE, BTLDateTypes.CREATEDATE
SearchText_Visibility = Visibility.Collapsed
SearchDate_Visibility = Visibility.Visible
Case Else
SearchText_Visibility = Visibility.Collapsed
SearchDate_Visibility = Visibility.Collapsed
End Select
End Set
End Property
Protected m_SearchText As String = ""
Public Property SearchText As String
Get
Return m_SearchText
End Get
Set(value As String)
m_SearchText = value
m_ProjectList_View.Refresh()
End Set
End Property
Friend m_SearchDate As SelectedDatesCollection = Nothing
Public ReadOnly Property SearchDate As SelectedDatesCollection
Get
Return m_SearchDate
End Get
End Property
Protected m_SearchText_Visibility As Visibility = Visibility.Collapsed
Public Property SearchText_Visibility As Visibility
Get
Return m_SearchText_Visibility
End Get
Set(value As Visibility)
m_SearchText_Visibility = value
NotifyPropertyChanged(NameOf(SearchText_Visibility))
End Set
End Property
Protected m_SearchDate_Visibility As Visibility = Visibility.Collapsed
Public Property SearchDate_Visibility As Visibility
Get
Return m_SearchDate_Visibility
End Get
Set(value As Visibility)
m_SearchDate_Visibility = value
NotifyPropertyChanged(NameOf(SearchDate_Visibility))
End Set
End Property
Public Property bIsEditNameActive As Boolean
Get
Return Not m_colProdFile_Name.IsReadOnly
End Get
Set(value As Boolean)
If Not IsNothing(m_colProdFile_Name) Then
m_colProdFile_Name.IsReadOnly = Not value
End If
End Set
End Property
Public Sub SetIsEditNameActive(value As Boolean)
If Not IsNothing(m_colProdFile_Name) Then
m_colProdFile_Name.IsReadOnly = Not value
End If
NotifyPropertyChanged(NameOf(bIsEditNameActive))
End Sub
Private m_bViewArchived As Boolean
Public Property bViewArchived As Boolean
Get
Return m_bViewArchived
End Get
Set(value As Boolean)
m_bViewArchived = value
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_VIEWARCHIVED, If(bViewArchived, 1, 0))
If Not IsNothing( m_colArchived_Name) Then
m_colArchived_Name.Visible = value
RefreshProjectList()
End If
End Set
End Property
Private m_bArchived_IsEnabled As Boolean
Public ReadOnly Property bArchived_IsEnabled As Boolean
Get
Return m_bArchived_IsEnabled
End Get
End Property
Public Sub SetArchivedIsEnabled(bValue As Boolean)
m_bArchived_IsEnabled = bValue
NotifyPropertyChanged(NameOf(bArchived_IsEnabled))
End Sub
Private m_bDelete_IsEnabled As Boolean
Public ReadOnly Property bDelete_IsEnabled As Boolean
Get
Return m_bDelete_IsEnabled
End Get
End Property
Public Sub SetDeleteIsEnabled(bValue As Boolean)
m_bDelete_IsEnabled = bValue
NotifyPropertyChanged(NameOf(bDelete_IsEnabled))
End Sub
Protected m_ChangeOpenedProjectOnCancel As Boolean = False
#Region "Messages"
Public ReadOnly Property Title As String
Get
Return EgtMsg(61986)
End Get
End Property
Public ReadOnly Property Filters_Msg As String
Get
Return EgtMsg(61985)
End Get
End Property
Public ReadOnly Property FilterType_Msg As String
Get
Return EgtMsg(61836)
End Get
End Property
Public ReadOnly Property Search_Msg As String
Get
Return EgtMsg(61837)
End Get
End Property
Public ReadOnly Property Id_Msg As String
Get
Return EgtMsg(61815)
End Get
End Property
Public ReadOnly Property BTLFileName_Msg As String
Get
Return EgtMsg(61819)
End Get
End Property
Public ReadOnly Property ListName_Msg As String
Get
Return EgtMsg(61820)
End Get
End Property
Public ReadOnly Property ExportDate_Msg As String
Get
Return EgtMsg(61821)
End Get
End Property
Public ReadOnly Property CreateDate_Msg As String
Get
Return EgtMsg(61822)
End Get
End Property
Public ReadOnly Property Machine_Msg As String
Get
Return EgtMsg(61886)
End Get
End Property
Public ReadOnly Property Name_Msg As String
Get
Return EgtMsg(61808)
End Get
End Property
Public ReadOnly Property Open_Msg As String
Get
Return EgtMsg(30006)
End Get
End Property
Public ReadOnly Property Archived_Msg As String
Get
Return EgtMsg(61983)
End Get
End Property
Public ReadOnly Property Archive_Msg As String
Get
If Not IsNothing(m_SelProject) AndAlso m_SelProject.bIsArchived Then
Return EgtMsg(61984)
Else
Return EgtMsg(61981)
End If
End Get
End Property
Public ReadOnly Property Delete_Msg As String
Get
Return EgtMsg(61823)
End Get
End Property
Public ReadOnly Property Cancel_Msg As String
Get
Return EgtMsg(30002)
End Get
End Property
Public ReadOnly Property From_Msg As String
Get
Return EgtMsg(62523)
End Get
End Property
Public ReadOnly Property To_Msg As String
Get
Return EgtMsg(62524)
End Get
End Property
Public ReadOnly Property ViewArchived_Msg As String
Get
Return EgtMsg(61982)
End Get
End Property
Public ReadOnly Property Rows_Msg As String
Get
Return EgtMsg(61995)
End Get
End Property
#End Region
' Definizione comandi
Private m_cmdProjectDoubleClick As ICommand
Private m_cmdDelete As ICommand
Private m_cmdArchive As ICommand
Private m_cmdCancel As ICommand
#End Region ' FIELDS & PROPERTIES
Sub New()
' assegno delegato a elementi lista
ProdItem.m_delIsModifiedSetUp = AddressOf SetIsEditNameActive
' carico colonne
LoadColumns()
m_colProdFile_Name = m_ProdColumns.FirstOrDefault(Function(x) x.Name = COL_NAME)
m_colArchived_Name = m_ProdColumns.FirstOrDefault(Function(x) x.Name = COL_ARCHIVED)
' leggo valori per filtri
m_SelDayType = GetMainPrivateProfileInt(S_OPENFILEDIALOG, K_DAYTYPE, 0)
Select Case m_SelDayType
Case DayTypes.LASTMONTH
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5)
Case DayTypes.LAST3MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 3)
Case DayTypes.LAST6MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 6)
Case DayTypes.PERIOD
Dim sStartDate As String = "0"
Dim lStartDate As Long = 0
GetMainPrivateProfileString(S_OPENFILEDIALOG, K_STARTDATE, 0, sStartDate)
Long.TryParse(sStartDate, lStartDate)
m_dtStartDate = If(lStartDate > 0, DateTime.FromFileTimeUtc(lStartDate), DateTime.Today)
Dim sEndDate As String = "0"
Dim lEndDate As Long = 0
GetMainPrivateProfileString(S_OPENFILEDIALOG, K_ENDDATE, 0, sEndDate)
Long.TryParse(sEndDate, lEndDate)
m_dtEndDate = If(lEndDate > 0, DateTime.FromFileTimeUtc(lEndDate), DateTime.Today)
m_Date_Visibility = Visibility.Visible
End Select
m_bViewArchived = GetMainPrivateProfileInt(S_OPENFILEDIALOG, K_VIEWARCHIVED, 0) <> 0
End Sub
#Region "METHODS"
Public MustOverride Function Init(ProjectType As ProjectType, Optional CurrProjectList As List(Of ProjectFileVM) = Nothing, Optional GoToProd As Boolean = False) As Boolean?
Public Overridable Sub RefreshProjectList(Optional GoToProd As Boolean = False)
End Sub
Protected Sub LoadColumns()
'If ProjectType = ProjectType.PROJ Then
' carico le colonne della datagrid
' GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROJ, ProjColumns)
' ' carico campi su cui eseguire il filtro di ricerca
' m_BTLDateTypeList = New List(Of String)({CreateDate_Msg, ExportDate_Msg})
' m_SelBTLDateType = BTLDateTypes.CREATEDATE
' NotifyPropertyChanged(NameOf(BTLDateTypeList))
' NotifyPropertyChanged(NameOf(SelBTLDateType))
' m_FilterTypeList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(FilterTypes.NULL, ""),
' New IdNameStruct(FilterTypes.ID, Id_Msg),
' New IdNameStruct(FilterTypes.BTLFILENAME, BTLFileName_Msg),
' New IdNameStruct(FilterTypes.LISTNAME, ListName_Msg),
' New IdNameStruct(FilterTypes.MACHINE, Machine_Msg)})
' m_SelFilterType = m_FilterTypeList.FirstOrDefault(Function(x) x.Id = FilterTypes.NULL)
' NotifyPropertyChanged(NameOf(SelFilterType))
'ElseIf ProjectType = ProjectType.PROD Then
' carico le colonne della datagrid
GetPrivateProfileColumns(S_NEWOPENPROJFILEDLG_PROD, ProdColumns)
' carico campi su cui eseguire il filtro di ricerca
m_BTLDateTypeList = New List(Of String)({CreateDate_Msg})
m_SelBTLDateType = BTLDateTypes.CREATEDATE
NotifyPropertyChanged(NameOf(BTLDateTypeList))
NotifyPropertyChanged(NameOf(SelBTLDateType))
m_FilterTypeList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(FilterTypes.NULL, ""),
New IdNameStruct(FilterTypes.BTLFILENAME, BTLFileName_Msg),
New IdNameStruct(FilterTypes.LISTNAME, ListName_Msg),
New IdNameStruct(FilterTypes.MACHINE, Machine_Msg)})
m_SelFilterType = m_FilterTypeList.FirstOrDefault(Function(x) x.Id = FilterTypes.NULL)
NotifyPropertyChanged(NameOf(SelFilterType))
'End If
' setto la visibilità delle colonne delle EgtDataGrid
For Each col In ProjColumns
col.ColumnVisibility = If(col.Visible, Visibility.Visible, Visibility.Collapsed)
Next
For Each col In ProdColumns
col.ColumnVisibility = If(col.Visible, Visibility.Visible, Visibility.Collapsed)
Next
End Sub
Friend Function VerifySelected() As Boolean
If IsNothing(SelProject) Then Return False
Dim AllFilesInDir As IEnumerable(Of String) = Nothing
If m_ProjectType = Core.ConstBeam.ProjectType.PROJ Then
If Not IsNothing(SelProject.ProdFileVM) Then
If String.IsNullOrWhiteSpace(SelProject.ProdFileVM.sProdDirPath) OrElse Not Directory.Exists(SelProject.ProdFileVM.sProdDirPath) Then Return False
AllFilesInDir = Directory.EnumerateFiles(SelProject.ProdFileVM.sProdDirPath)
ElseIf SelProject.ProjFileList.Count > 0 Then
If String.IsNullOrWhiteSpace(SelProject.ProjFileList(0).sProjDirPath) OrElse Not Directory.Exists(SelProject.ProjFileList(0).sProjDirPath) Then Return False
AllFilesInDir = Directory.EnumerateFiles(SelProject.ProjFileList(0).sProjDirPath)
Else Return False
End If
ElseIf m_ProjectType = Core.ConstBeam.ProjectType.PROD Then
If String.IsNullOrWhiteSpace(SelProject.ProdFileVM.sProdDirPath) OrElse Not Directory.Exists(SelProject.ProdFileVM.sProdDirPath) Then Return False
AllFilesInDir = Directory.EnumerateFiles(SelProject.ProdFileVM.sProdDirPath)
Else
Return False
End If
Return AllFilesInDir.Any(Function(x) Path.GetExtension(x).ToLower() = ".nge")
End Function
Protected Function ProjectFilter(Proj As Object) As Boolean
Dim bProjectOk As Boolean = True
'If TypeOf Proj Is ProjFileVM Then
Dim CurrProj As ProdItem = DirectCast(Proj, ProdItem)
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
(m_SelFilterType.Id = BTLDateTypes.EXPORTDATE AndAlso Not CurrProj.ProjFileList.Any(Function(x) SearchDate.Contains(DirectCast(x, ProjFileVM).dtExportDate.Date))) OrElse
(m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
(m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.ProjFileList.Any(Function(x) DirectCast(x, ProjFileVM).sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
(m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso CurrProj.ProjFileList.Any(Function(x) DirectCast(x, ProjFileVM).sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) OrElse
(m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
'ElseIf TypeOf Proj Is ProdFileVM Then
' Dim CurrProj As ProdFileVM = DirectCast(Proj, ProdFileVM)
' If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
' (m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
' If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
' (m_SelFilterType.Id = FilterTypes.ID AndAlso CurrProj.sProdId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
' (m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
' (m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
'End If
Return bProjectOk
End Function
Protected Sub CloseWindow(bDialogResult As Boolean)
RaiseEvent m_CloseWindow(bDialogResult)
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "ProjectDoubleClick"
''' <summary>
''' Returns a command that do New.
''' </summary>
Public ReadOnly Property ProjectDoubleClick_Command As ICommand
Get
If m_cmdProjectDoubleClick Is Nothing Then
m_cmdProjectDoubleClick = New Command(AddressOf ProjDoubleClick)
End If
Return m_cmdProjectDoubleClick
End Get
End Property
''' <summary>
''' Execute the New. This method is invoked by the NewCommand.
''' </summary>
Friend Sub ProjDoubleClick()
' verifico se non e' attivo edit del nome
If bIsEditNameActive Then Return
' verifico validita' selezionato
If VerifySelected() Then
RaiseEvent m_CloseWindow(True)
End If
End Sub
#End Region ' ProjectDoubleClick
#Region "Archive"
''' <summary>
''' Returns a command that do New.
''' </summary>
Public ReadOnly Property Archive_Command As ICommand
Get
If m_cmdArchive Is Nothing Then
m_cmdArchive = New Command(AddressOf Archive)
End If
Return m_cmdArchive
End Get
End Property
''' <summary>
''' Execute the New. This method is invoked by the NewCommand.
''' </summary>
Public Overridable Sub Archive()
End Sub
#End Region ' Archive
#Region "Delete"
''' <summary>
''' Returns a command that do New.
''' </summary>
Public ReadOnly Property Delete_Command As ICommand
Get
If m_cmdDelete Is Nothing Then
m_cmdDelete = New Command(AddressOf Delete)
End If
Return m_cmdDelete
End Get
End Property
''' <summary>
''' Execute the New. This method is invoked by the NewCommand.
''' </summary>
Public Overridable Sub Delete()
End Sub
#End Region ' Delete
#Region "Cancel"
''' <summary>
''' Returns a command that do New.
''' </summary>
Public ReadOnly Property Cancel_Command As ICommand
Get
If m_cmdCancel Is Nothing Then
m_cmdCancel = New Command(AddressOf Cancel)
End If
Return m_cmdCancel
End Get
End Property
''' <summary>
''' Execute the New. This method is invoked by the NewCommand.
''' </summary>
Public Overridable Sub Cancel()
End Sub
#End Region ' Cancel
#End Region ' Commands
End Class
@@ -5,9 +5,9 @@
xmlns:EgtBEAMWALL="clr-namespace:EgtBEAMWALL.Core"
Title="{Binding Title}"
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
WindowStyle="None" ResizeMode="NoResize" TitleBarHeight="30" IsResizable="False"
WindowStyle="None" ResizeMode="NoResize" TitleBarHeight="30" IsResizable="True"
IsMinimizable="False" WindowStartupLocation="CenterScreen" ShowInTaskbar="False"
Height="500" Width="500" Topmost="True"
MinHeight="500" MinWidth="500"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<EgtWPFLib5:EgtCustomWindow.Resources>
@@ -21,42 +21,106 @@
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<StackPanel>
<Grid Grid.Row="0" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<GroupBox Header="Filters"
Margin="5"
Visibility="{Binding Filters_Visibility}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ComboBox ItemsSource="{Binding BTLDateTypeList}"
SelectedIndex="{Binding SelBTLDateType}"
Width="105"
Margin="5"
Style="{StaticResource FeatureComboBox}"/>
<StackPanel Grid.Column="1" Orientation="Horizontal">
<ComboBox ItemsSource="{Binding DayTypeList}"
SelectedIndex="{Binding SelDayType}"
Width="105"
Margin="0,0,2.5,0"
Style="{StaticResource PartParam_ComboBox}"/>
<StackPanel Orientation="Horizontal" Visibility="{Binding Date_Visibility}">
<TextBlock Text="{Binding From_Msg}"
Style="{StaticResource Filter_TextBlock}"/>
<DatePicker SelectedDate="{Binding dtStartDate}"
Style="{StaticResource Filter_DatePicker}"/>
<TextBlock Text="{Binding To_Msg}"
Style="{StaticResource Filter_TextBlock}"/>
<DatePicker SelectedDate="{Binding dtEndDate}"
Style="{StaticResource Filter_DatePicker}"/>
</StackPanel>
</StackPanel>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ComboBox ItemsSource="{Binding FilterTypeList}"
SelectedItem="{Binding SelFilterType}"
Width="105"
Margin="5"
Style="{StaticResource FeatureComboBox}"/>
<EgtWPFLib5:EgtTextBox Grid.Column="1"
Text="{Binding SearchText}"
Margin="5"
Visibility="{Binding SearchText_Visibility}"/>
<StackPanel Grid.Column="2"
Orientation="Horizontal">
<TextBlock Text="Rows"
Style="{StaticResource OptionTextBlock}"/>
<ComboBox ItemsSource="{Binding RowQuantityList}"
SelectedIndex="{Binding SelRowQuantity}"
Style="{StaticResource FeatureComboBox}"/>
</StackPanel>
</Grid>
</Grid>
</GroupBox>
<TextBlock Text="{Binding FilterType_Msg}"
<!--<StackPanel>
<Grid Grid.Row="0" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding FilterType_Msg}"
Grid.Row="0" Grid.Column="0"
Style="{StaticResource OptionTextBlock}"/>
<ComboBox ItemsSource="{Binding SearchColumnList}"
<ComboBox ItemsSource="{Binding SearchColumnList}"
SelectedItem="{Binding SelSearchColumn}"
Width="Auto"
Margin="5"
Grid.Row="0" Grid.Column="1"
Style="{StaticResource FeatureComboBox}"/>
<TextBlock Text="{Binding Search_Msg}"
<TextBlock Text="{Binding Search_Msg}"
Margin="0,5,0,0"
Grid.Row="1" Grid.Column="0"
Style="{StaticResource OptionTextBlock}"/>
<EgtWPFLib5:EgtTextBox Text="{Binding SearchText}"
<EgtWPFLib5:EgtTextBox Text="{Binding SearchText}"
Margin="5"
Grid.Row="1" Grid.Column="1"
Visibility="{Binding SearchText_Visibility}"/>
<Calendar SelectedDatesChanged="Calendar_SelectedDatesChanged"
<Calendar SelectedDatesChanged="Calendar_SelectedDatesChanged"
SelectionMode="MultipleRange"
Grid.Row="1" Grid.Column="1"
Visibility="{Binding SearchDate_Visibility}"/>
</Grid>
</StackPanel>
</Grid>
</StackPanel>-->
<EgtBEAMWALL:EgtDataGrid Grid.Row="1"
<EgtBEAMWALL:EgtDataGrid Grid.Row="1"
ItemsSource="{Binding ProjectList}"
SelectedItem="{Binding SelProject}"
CanUserAddRows="False"
@@ -85,6 +149,14 @@
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<!-- Project Name -->
<DataGridTextColumn x:Key="colPROJNAME" Binding="{Binding sDescription}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.BTLFileName_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:OpenProjectFileDialogV}}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<!-- BTL FileName -->
<DataGridTextColumn x:Key="colBTLNAME" Binding="{Binding sBTLFileName}">
<DataGridTextColumn.HeaderTemplate>
@@ -5,6 +5,8 @@ Imports System.Windows.Controls
Imports System.Windows.Input
Imports EgtBEAMWALL.Core.ConstBeam
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtBEAMWALL
Public Class OpenProjectFileDialogV
@@ -19,6 +21,8 @@ Public Class OpenProjectFileDialogV
Me.DataContext = OpenProjFileDialogVM
' Assegno al riferimento locale al VM il VM preso dal DataContext
m_OpenProjFileDialogVM = OpenProjFileDialogVM
AddHandler Me.Loaded, AddressOf OpenProjectFileDialog_Loaded
AddHandler Me.Closing, AddressOf OpenProjectFileDialog_Closing
End Sub
#End Region ' CONSTRUCTOR
@@ -42,6 +46,20 @@ Public Class OpenProjectFileDialogV
Return Me.ShowDialog()
End Function
Private Sub OpenProjectFileDialog_Loaded(sender As Object, e As RoutedEventArgs)
' Carico e imposto posizione finestra
WinPosFromIniToWindow(S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE, Me)
End Sub
Private Sub OpenProjectFileDialog_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs)
If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then
e.Cancel = True
Return
End If
' Salvo posizione finestra (se non minimizzata)
WinPosFromWindowToIni(Me, S_OPENFILEDIALOG, K_VIEWOPTIMWINPLACE)
End Sub
#End Region ' METHODS
#Region "EVENTS"
@@ -60,10 +78,4 @@ Public Class OpenProjectFileDialogV
Me.DialogResult = bDialogResult
End Sub
Private Sub Calendar_SelectedDatesChanged(sender As Object, e As SelectionChangedEventArgs)
Dim cal As System.Windows.Controls.Calendar = sender
m_OpenProjFileDialogVM.m_SearchDate = cal.SelectedDates
m_OpenProjFileDialogVM.m_ProjectList_View.Refresh()
End Sub
End Class
@@ -14,8 +14,36 @@ Public MustInherit Class OpenProjectFileDialogVM
#Region "FIELDS & PROPERTIES"
Public Enum BTLDateTypes As Integer
CREATEDATE = 0
EXPORTDATE = 1
End Enum
Private Enum FilterTypes As Integer
NULL = 0
ID = 1
BTLFILENAME = 2
LISTNAME = 3
MACHINE = 4
End Enum
Public Enum DayTypes As Integer
LASTMONTH = 0
LAST3MONTHS = 1
LAST6MONTHS = 2
PERIOD = 3
End Enum
Public Enum RowQuantities As Integer
FIFTY = 0
HUNDRED = 1
HUNDREDANDFIFTY = 2
End Enum
Friend Event m_CloseWindow(bDialogResult As Boolean)
Protected m_GoToProd As Boolean = False
Protected m_ProjectColumns As New ObservableCollection(Of EgtDataGridColumn)
Public Property ProjectColumns As ObservableCollection(Of EgtDataGridColumn)
Get
@@ -83,18 +111,148 @@ Public MustInherit Class OpenProjectFileDialogVM
End Set
End Property
' lista campi per ricerca testuale e con datepicker
Protected m_SearchColumnList As New ObservableCollection(Of IdNameStruct)
Public ReadOnly Property SearchColumnList As ObservableCollection(Of IdNameStruct)
Private m_bFixedProjectList As Boolean
Public ReadOnly Property bFixedProjectList As Boolean
Get
Return m_SearchColumnList
Return m_bFixedProjectList
End Get
End Property
Public Sub SetFixedProjectList(bValue As Boolean)
m_bFixedProjectList = bValue
NotifyPropertyChanged(NameOf(Filters_Visibility))
End Sub
Public ReadOnly Property Filters_Visibility As Visibility
Get
Return If(m_bFixedProjectList, Visibility.Collapsed, Visibility.Visible)
End Get
End Property
Protected m_SelSearchColumn As IdNameStruct = Nothing
Public Property SelSearchColumn As IdNameStruct
Protected m_BTLDateTypeList As New List(Of String)
Public ReadOnly Property BTLDateTypeList As List(Of String)
Get
Return m_SelSearchColumn
Return m_BTLDateTypeList
End Get
End Property
Protected m_SelBTLDateType As BTLDateTypes = Nothing
Public Property SelBTLDateType As Integer
Get
Return m_SelBTLDateType
End Get
Set(value As Integer)
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_DayTypeList As New List(Of String)({EgtMsg(62532), EgtMsg(62533), EgtMsg(62534), EgtMsg(62531)})
Public ReadOnly Property DayTypeList As List(Of String)
Get
Return m_DayTypeList
End Get
End Property
Protected m_SelDayType As DayTypes = DayTypes.LASTMONTH
Public Property SelDayType As Integer
Get
Return m_SelDayType
End Get
Set(value As Integer)
Dim PrevSelDayType As DayTypes = m_SelDayType
m_SelDayType = value
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_DAYTYPE, Convert.ToInt32(m_SelDayType))
m_Date_Visibility = If(m_SelDayType = DayTypes.PERIOD, Visibility.Visible, Visibility.Collapsed)
If m_SelDayType = DayTypes.PERIOD Then
Select Case PrevSelDayType
Case DayTypes.LASTMONTH
m_dtStartDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtEndDate = m_dtStartDate - TimeSpan.FromDays(30.5)
Case DayTypes.LAST3MONTHS
Case DayTypes.LAST6MONTHS
End Select
NotifyPropertyChanged(NameOf(dtStartDate))
NotifyPropertyChanged(NameOf(dtEndDate))
End If
NotifyPropertyChanged(NameOf(Date_Visibility))
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_dtStartDate As DateTime = DateTime.Today
Public Property dtStartDate As DateTime
Get
Return m_dtStartDate
End Get
Set(value As DateTime)
m_dtStartDate = value
Dim lStartDate As Long = m_dtStartDate.ToFileTimeUtc()
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_STARTDATE, lStartDate.ToString())
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_dtEndDate As DateTime = DateTime.Today
Public Property dtEndDate As DateTime
Get
Return m_dtEndDate
End Get
Set(value As DateTime)
m_dtEndDate = value
Dim lEndDate As Long = m_dtEndDate.ToFileTimeUtc()
WriteMainPrivateProfileString(S_OPENFILEDIALOG, K_ENDDATE, lEndDate.ToString())
' aggiorno lista da Db
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
Private m_Date_Visibility As Visibility = Visibility.Collapsed
Public ReadOnly Property Date_Visibility As Visibility
Get
Return m_Date_Visibility
End Get
End Property
Private m_RowQuantityList As New List(Of String)({50, 100, 150})
Public ReadOnly Property RowQuantityList As List(Of String)
Get
Return m_RowQuantityList
End Get
End Property
Private m_SelRowQuantity As RowQuantities
Public Property SelRowQuantity As Integer
Get
Return m_SelRowQuantity
End Get
Set(value As Integer)
m_SelRowQuantity = value
RefreshProjectList()
m_ProjectList_View.Refresh()
End Set
End Property
' lista campi per ricerca testuale e con datepicker
Protected m_FilterTypeList As New ObservableCollection(Of IdNameStruct)
Public ReadOnly Property FilterTypeList As ObservableCollection(Of IdNameStruct)
Get
Return m_FilterTypeList
End Get
End Property
Protected m_SelFilterType As IdNameStruct = Nothing
Public Property SelFilterType As IdNameStruct
Get
Return m_SelFilterType
End Get
Set(value As IdNameStruct)
' resetto il contenuto della barra di ricerca testuale
@@ -103,15 +261,15 @@ Public MustInherit Class OpenProjectFileDialogVM
' resetto le selezioni sul calendario
If Not IsNothing(SearchDate) Then SearchDate.Clear()
' setto il Tipo Filtro a NULL e refresho la lista dei progetti (in modo da averli visibili tutti)
m_SelSearchColumn = m_SearchColumnList(0)
m_SelFilterType = m_FilterTypeList(0)
m_ProjectList_View.Refresh()
' ora setto il valore scelto come Tipo Filtro
m_SelSearchColumn = value
Select Case m_SelSearchColumn.Id
Case OpenProjFileColumn.ID, OpenProjFileColumn.BTLFILENAME, OpenProjFileColumn.LISTNAME, OpenProjFileColumn.MACHINE
m_SelFilterType = value
Select Case m_SelFilterType.Id
Case FilterTypes.ID, FilterTypes.BTLFILENAME, FilterTypes.LISTNAME, FilterTypes.MACHINE
SearchText_Visibility = Visibility.Visible
SearchDate_Visibility = Visibility.Collapsed
Case OpenProjFileColumn.EXPORTDATE, OpenProjFileColumn.CREATEDATE
Case BTLDateTypes.EXPORTDATE, BTLDateTypes.CREATEDATE
SearchText_Visibility = Visibility.Collapsed
SearchDate_Visibility = Visibility.Visible
Case Else
@@ -161,18 +319,13 @@ Public MustInherit Class OpenProjectFileDialogVM
End Set
End Property
Public Enum OpenProjFileColumn As Integer
NULL = 0
ID = 1
BTLFILENAME = 2
LISTNAME = 3
EXPORTDATE = 4
CREATEDATE = 5
MACHINE = 6
End Enum
#Region "Messages"
Public ReadOnly Property Title As String
Get
Return "Open Project"
End Get
End Property
Public ReadOnly Property FilterType_Msg As String
Get
Return EgtMsg(61836)
@@ -236,6 +389,18 @@ Public MustInherit Class OpenProjectFileDialogVM
End Get
End Property
Public ReadOnly Property From_Msg As String
Get
Return EgtMsg(62523)
End Get
End Property
Public ReadOnly Property To_Msg As String
Get
Return EgtMsg(62524)
End Get
End Property
#End Region
' Definizione comandi
@@ -244,31 +409,70 @@ Public MustInherit Class OpenProjectFileDialogVM
#End Region ' FIELDS & PROPERTIES
Sub New()
' leggo valori per filtri
m_SelDayType = GetMainPrivateProfileInt(S_OPENFILEDIALOG, K_DAYTYPE, 0)
Select Case m_SelDayType
Case DayTypes.LASTMONTH
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5)
Case DayTypes.LAST3MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 3)
Case DayTypes.LAST6MONTHS
m_dtEndDate = DateTime.Today + TimeSpan.FromDays(1)
m_dtStartDate = m_dtEndDate - TimeSpan.FromDays(30.5 * 6)
Case DayTypes.PERIOD
Dim sStartDate As String = "0"
Dim lStartDate As Long = 0
GetMainPrivateProfileString(S_OPENFILEDIALOG, K_STARTDATE, 0, sStartDate)
Long.TryParse(sStartDate, lStartDate)
m_dtStartDate = If(lStartDate > 0, DateTime.FromFileTimeUtc(lStartDate), DateTime.Today)
Dim sEndDate As String = "0"
Dim lEndDate As Long = 0
GetMainPrivateProfileString(S_OPENFILEDIALOG, K_ENDDATE, 0, sEndDate)
Long.TryParse(sEndDate, lEndDate)
m_dtEndDate = If(lEndDate > 0, DateTime.FromFileTimeUtc(lEndDate), DateTime.Today)
m_Date_Visibility = Visibility.Visible
End Select
End Sub
#Region "METHODS"
Public MustOverride Function Init(ProjectType As ProjectType, Optional CurrProjectList As List(Of ProjectFileVM) = Nothing, Optional GoToProd As Boolean = False) As Boolean?
Public Overridable Sub RefreshProjectList()
End Sub
Protected Sub LoadColumns(ProjectType As ProjectType)
If ProjectType = ProjectType.PROJ Then
' carico le colonne della datagrid
GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROJ, ProjectColumns)
' carico campi su cui eseguire il filtro di ricerca
m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""),
New IdNameStruct(OpenProjFileColumn.ID, Id_Msg),
New IdNameStruct(OpenProjFileColumn.BTLFILENAME, BTLFileName_Msg),
New IdNameStruct(OpenProjFileColumn.LISTNAME, ListName_Msg),
New IdNameStruct(OpenProjFileColumn.EXPORTDATE, ExportDate_Msg),
New IdNameStruct(OpenProjFileColumn.CREATEDATE, CreateDate_Msg),
New IdNameStruct(OpenProjFileColumn.MACHINE, Machine_Msg)})
m_BTLDateTypeList = New List(Of String)({CreateDate_Msg, ExportDate_Msg})
m_SelBTLDateType = BTLDateTypes.CREATEDATE
NotifyPropertyChanged(NameOf(BTLDateTypeList))
NotifyPropertyChanged(NameOf(SelBTLDateType))
m_FilterTypeList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(FilterTypes.NULL, ""),
New IdNameStruct(FilterTypes.ID, Id_Msg),
New IdNameStruct(FilterTypes.BTLFILENAME, BTLFileName_Msg),
New IdNameStruct(FilterTypes.LISTNAME, ListName_Msg),
New IdNameStruct(FilterTypes.MACHINE, Machine_Msg)})
m_SelFilterType = m_FilterTypeList.FirstOrDefault(Function(x) x.Id = FilterTypes.NULL)
NotifyPropertyChanged(NameOf(SelFilterType))
ElseIf ProjectType = ProjectType.PROD Then
' carico le colonne della datagrid
GetPrivateProfileColumns(S_OPENPROJFILEDLG_PROD, ProjectColumns)
' carico campi su cui eseguire il filtro di ricerca
m_SearchColumnList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(OpenProjFileColumn.NULL, ""),
New IdNameStruct(OpenProjFileColumn.ID, Id_Msg),
New IdNameStruct(OpenProjFileColumn.BTLFILENAME, BTLFileName_Msg),
New IdNameStruct(OpenProjFileColumn.CREATEDATE, CreateDate_Msg),
New IdNameStruct(OpenProjFileColumn.MACHINE, Machine_Msg)})
m_BTLDateTypeList = New List(Of String)({CreateDate_Msg})
m_SelBTLDateType = BTLDateTypes.CREATEDATE
NotifyPropertyChanged(NameOf(BTLDateTypeList))
NotifyPropertyChanged(NameOf(SelBTLDateType))
m_FilterTypeList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(FilterTypes.NULL, ""),
New IdNameStruct(FilterTypes.ID, Id_Msg),
New IdNameStruct(FilterTypes.BTLFILENAME, BTLFileName_Msg),
New IdNameStruct(FilterTypes.MACHINE, Machine_Msg)})
m_SelFilterType = m_FilterTypeList.FirstOrDefault(Function(x) x.Id = FilterTypes.NULL)
NotifyPropertyChanged(NameOf(SelFilterType))
End If
' setto la visibilità delle colonne delle EgtDataGrid
For Each col In ProjectColumns
@@ -301,22 +505,22 @@ Public MustInherit Class OpenProjectFileDialogVM
Dim bProjectOk As Boolean = True
If m_ProjectType = ProjectType.PROJ Then
Dim CurrProj As ProjFileVM = DirectCast(Proj, ProjFileVM)
If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso (
(m_SelSearchColumn.Id = OpenProjFileColumn.EXPORTDATE AndAlso Not SearchDate.Contains(CurrProj.dtExportDate.Date)) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso m_SearchText <> String.Empty AndAlso (
(m_SelSearchColumn.Id = OpenProjFileColumn.ID AndAlso CurrProj.sProjId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.LISTNAME AndAlso CurrProj.sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
(m_SelFilterType.Id = BTLDateTypes.EXPORTDATE AndAlso Not SearchDate.Contains(CurrProj.dtExportDate.Date)) OrElse
(m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
(m_SelFilterType.Id = FilterTypes.ID AndAlso CurrProj.sProjId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelFilterType.Id = FilterTypes.LISTNAME AndAlso CurrProj.sListName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
ElseIf m_ProjectType = ProjectType.PROD Then
Dim CurrProj As ProdFileVM = DirectCast(Proj, ProdFileVM)
If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso (
(m_SelSearchColumn.Id = OpenProjFileColumn.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
If m_SelSearchColumn.Id <> OpenProjFileColumn.NULL AndAlso m_SearchText <> String.Empty AndAlso (
(m_SelSearchColumn.Id = OpenProjFileColumn.ID AndAlso CurrProj.sProdId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelSearchColumn.Id = OpenProjFileColumn.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso (
(m_SelFilterType.Id = BTLDateTypes.CREATEDATE AndAlso Not SearchDate.Contains(CurrProj.dtCreateDate.Date))) Then bProjectOk = False
If m_SelFilterType.Id <> FilterTypes.NULL AndAlso m_SearchText <> String.Empty AndAlso (
(m_SelFilterType.Id = FilterTypes.ID AndAlso CurrProj.sProdId.ToString.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelFilterType.Id = FilterTypes.BTLFILENAME AndAlso CurrProj.sBTLFileName.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0) OrElse
(m_SelFilterType.Id = FilterTypes.MACHINE AndAlso CurrProj.sMachine.IndexOf(SearchText, StringComparison.InvariantCultureIgnoreCase) < 0)) Then bProjectOk = False
End If
Return bProjectOk
End Function
+54 -2
View File
@@ -14,11 +14,41 @@ Public Class ProdFileM
m_nProjIdList = value
End Sub
Protected m_ProjMList As List(Of ProjFileM)
Public ReadOnly Property ProjMList As List(Of ProjFileM)
Get
Return m_ProjMList
End Get
End Property
Protected m_sName As String
Public ReadOnly Property sName As String
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Protected m_bIsProduced As Boolean
Public Property bIsProduced As Boolean
Get
Return m_bIsProduced
End Get
Set(value As Boolean)
m_bIsProduced = value
End Set
End Property
Protected m_nProjCloudId As Integer
Public Property nProjCloudId As Integer
Get
Return m_nProjCloudId
End Get
Set(value As Integer)
m_nProjCloudId = value
End Set
End Property
#Region "CONSTRUCTORS"
@@ -31,7 +61,7 @@ Public Class ProdFileM
End Function
Public Shared Function CreateProdFileM(nProdId As Integer, nProjIdList As List(Of Integer), dtCreateProjDate As DateTime, sName As String, nType As BWType,
sMachine As String, sLockedBy As String, dtLock As DateTime) As ProdFileM
sMachine As String, sLockedBy As String, dtLock As DateTime, bIsActive As Boolean, bIsProduced As Boolean, bIsArchived As Boolean, Optional nProjCloudId As Integer = 0) As ProdFileM
Dim NewProjectFileM As New ProdFileM
NewProjectFileM.m_nProdId = nProdId
NewProjectFileM.m_nProjIdList = nProjIdList
@@ -41,6 +71,28 @@ Public Class ProdFileM
NewProjectFileM.m_sMachine = sMachine
NewProjectFileM.m_sLockedBy = sLockedBy
NewProjectFileM.m_dtLock = dtLock
NewProjectFileM.m_bIsActive = bIsActive
NewProjectFileM.m_bIsProduced = bIsProduced
NewProjectFileM.m_bIsArchived = bIsArchived
NewProjectFileM.m_nProjCloudId = nProjCloudId
Return NewProjectFileM
End Function
Public Shared Function CreateProdFileM(nProdId As Integer, nProjIdList As List(Of Integer), dtCreateProjDate As DateTime, sName As String, nType As BWType,
sMachine As String, sLockedBy As String, dtLock As DateTime, bIsActive As Boolean, bIsProduced As Boolean, bIsArchived As Boolean, ProjMList As List(Of ProjFileM)) As ProdFileM
Dim NewProjectFileM As New ProdFileM
NewProjectFileM.m_nProdId = nProdId
NewProjectFileM.m_nProjIdList = nProjIdList
NewProjectFileM.m_dtCreateDate = dtCreateProjDate
NewProjectFileM.m_sName = sName
NewProjectFileM.m_nType = nType
NewProjectFileM.m_sMachine = sMachine
NewProjectFileM.m_sLockedBy = sLockedBy
NewProjectFileM.m_dtLock = dtLock
NewProjectFileM.m_bIsActive = bIsActive
NewProjectFileM.m_bIsProduced = bIsProduced
NewProjectFileM.m_bIsArchived = bIsArchived
NewProjectFileM.m_ProjMList = ProjMList
Return NewProjectFileM
End Function
+116
View File
@@ -0,0 +1,116 @@
Imports EgtWPFLib5
Imports System.Windows
Public Class ProdItem
Inherits VMBase
Public Shared m_delIsModifiedSetUp As Action(Of Boolean)
Protected m_ProdFileVM As ProdFileVM
Public ReadOnly Property ProdFileVM As ProdFileVM
Get
Return m_ProdFileVM
End Get
End Property
Private m_ProjFileList As New List(Of ProjectFileVM)
Public ReadOnly Property ProjFileList As List(Of ProjectFileVM)
Get
Return m_ProjFileList
End Get
End Property
Public ReadOnly Property sProdId As String
Get
Return If(Not IsNothing(m_ProdFileVM), m_ProdFileVM.sProdId, "")
End Get
End Property
Public Overridable Property sName As String
Get
Return If(Not IsNothing(m_ProdFileVM), m_ProdFileVM.sName, "")
End Get
Set(value As String)
If Not IsNothing(m_ProdFileVM) Then
m_ProdFileVM.sName = value
End If
End Set
End Property
Public ReadOnly Property dtCreateDate As Date
Get
Return If(Not IsNothing(m_ProdFileVM), {m_ProdFileVM.dtCreateDate, m_ProjFileList.Min(Function(x) x.dtCreateDate)}.Min(), m_ProjFileList.Min(Function(x) x.dtCreateDate))
End Get
End Property
Public ReadOnly Property sCreateDate As String
Get
Return dtCreateDate.ToString()
End Get
End Property
Public ReadOnly Property sMachine As String
Get
If Not IsNothing(m_ProdFileVM) Then
Return m_ProdFileVM.sMachine
ElseIf Not IsNothing(m_ProjFileList(0)) Then
Return m_ProjFileList(0).sMachine
Else Return ""
End If
End Get
End Property
Public ReadOnly Property bIsArchived As Boolean
Get
If Not IsNothing(m_ProdFileVM) Then
Return m_ProdFileVM.bIsArchived
ElseIf Not IsNothing(m_ProjFileList(0)) Then
Return m_ProjFileList(0).bIsArchived
Else
Return True
End If
End Get
End Property
Public ReadOnly Property Archived_Visibility As Visibility
Get
Return If(bIsArchived, Visibility.Visible, Visibility.Collapsed)
End Get
End Property
Sub New(ProdFileVM As ProdFileVM, ProjFileVM As ProjFileVM)
m_ProdFileVM = ProdFileVM
m_ProjFileList.Add(ProjFileVM)
End Sub
Sub New(ProjFileVM As ProjFileVM)
m_ProjFileList = New List(Of ProjectFileVM)({ProjFileVM})
End Sub
Sub New(ProdFileVM As ProjectFileVM, ProjFileVMList As List(Of ProjectFileVM))
m_ProdFileVM = ProdFileVM
m_ProjFileList = ProjFileVMList
End Sub
Public Shared Function CreateProdItem(nProdId As Integer, nProjIdList As List(Of Integer), dtCreateProjDate As DateTime, sName As String, nType As BWType,
sMachine As String, sLockedBy As String, dtLock As DateTime, bIsActive As Boolean, bIsProduced As Boolean, bIsArchived As Boolean, ProjMList As List(Of ProjFileM)) As ProdItem
Dim NewProdFileM = ProdFileM.CreateProdFileM(nProdId, nProjIdList, dtCreateProjDate, sName, nType, sMachine, sLockedBy, dtLock, bIsActive, bIsProduced, bIsArchived)
Dim NewProdFileVM = New ProdFileVM(NewProdFileM)
Dim NewProjFileVM As IEnumerable(Of ProjectFileVM)
NewProjFileVM = ProjMList.Select(Of ProjFileVM)(Function(j) New ProjFileVM(j)).ToList
Dim NewProdItem = New ProdItem(NewProdFileVM, NewProjFileVM.ToList)
Return NewProdItem
End Function
Public Shared Function CreateProdItem(ProjFileM As ProjFileM) As ProdItem
Dim NewProdItem = New ProdItem(New ProjFileVM(ProjFileM))
Return NewProdItem
End Function
End Class
+28 -5
View File
@@ -19,12 +19,32 @@ Public Class ProjFileM
End Property
Protected m_sBTLFileName As String = String.Empty
Public Property sBTLFileName As String
Public Property sBTLFileName As String
Get
Return m_sBTLFileName
End Get
Set(value As String)
m_sBTLFileName = value
End Set
End Property
Protected m_sDescription As String = String.Empty
Public Property sDescription As String
Get
Return m_sBTLFileName
Return m_sDescription
End Get
Set(value As String)
m_sBTLFileName = value
m_sDescription = value
End Set
End Property
Protected m_nProjCloudId As Integer
Public Property nProjCloudId As Integer
Get
Return m_nProjCloudId
End Get
Set(value As Integer)
m_nProjCloudId = value
End Set
End Property
@@ -37,8 +57,7 @@ Public Class ProjFileM
Return New ProjFileM
End Function
Public Shared Function CreateProjFileM(nProjId As Integer, nProdId As Integer, dtCreateProjDate As DateTime, dtExportDate As DateTime, sListName As String,
sBTLFileName As String, IsNew As Boolean, IsLocked As Boolean, nType As BWType, sMachine As String) As ProjFileM
Public Shared Function CreateProjFileM(nProjId As Integer, nProdId As Integer, dtCreateProjDate As DateTime, dtExportDate As DateTime, sListName As String, sBTLFileName As String, sDescription As String, IsNew As Boolean, IsLocked As Boolean, nType As BWType, sMachine As String, bIsActive As Boolean, bIsArchived As Boolean, Optional nProjCloudId As Integer = 0) As ProjFileM
Dim NewProjectFileM As New ProjFileM
NewProjectFileM.m_nProjId = nProjId
NewProjectFileM.m_nProdId = nProdId
@@ -46,10 +65,14 @@ Public Class ProjFileM
NewProjectFileM.m_dtExportDate = dtExportDate
NewProjectFileM.m_sListName = sListName
NewProjectFileM.m_sBTLFileName = sBTLFileName
NewProjectFileM.m_sDescription = sDescription
NewProjectFileM.m_bIsNew = IsNew
NewProjectFileM.m_bIsLocked = IsLocked
NewProjectFileM.m_nType = nType
NewProjectFileM.m_sMachine = sMachine
NewProjectFileM.m_bIsActive = bIsActive
NewProjectFileM.m_bIsArchived = bIsArchived
NewProjectFileM.m_nProjCloudId = nProjCloudId
Return NewProjectFileM
End Function
@@ -94,6 +94,26 @@ Public Class ProjectFileM
End Set
End Property
Protected m_bIsActive As Boolean
Public Property bIsActive As Boolean
Get
Return m_bIsActive
End Get
Set(value As Boolean)
m_bIsActive = value
End Set
End Property
Protected m_bIsArchived As Boolean
Public Property bIsArchived As Boolean
Get
Return m_bIsArchived
End Get
Set(value As Boolean)
m_bIsArchived = value
End Set
End Property
#Region "CONSTRUCTORS"
#End Region ' CONSTRUCTORS
+10 -1
View File
@@ -47,10 +47,13 @@ Public Class ProdFileVM
End Set
End Property
Public ReadOnly Property sName As String
Public Property sName As String
Get
Return ProdFileM.sName
End Get
Set(value As String)
ProdFileM.sName = value
End Set
End Property
Private m_sBTLFileName As String
@@ -63,6 +66,12 @@ Public Class ProdFileVM
m_sBTLFileName = value
End Sub
Public ReadOnly Property bIsProduced As Boolean
Get
Return ProdFileM.bIsProduced
End Get
End Property
#Region "CONSTRUCTORS"
Sub New(ProdFileM As ProdFileM)
@@ -68,6 +68,12 @@ Public Class ProjFileVM
End Get
End Property
Public ReadOnly Property sDescription As String
Get
Return ProjFileM.sDescription
End Get
End Property
Public ReadOnly Property sListName As String
Get
Return ProjFileM.sListName
@@ -117,6 +117,18 @@ Public Class ProjectFileVM
End Get
End Property
Public ReadOnly Property bIsActive As Boolean
Get
Return m_ProjectFileM.bIsActive
End Get
End Property
Public ReadOnly Property bIsArchived As Boolean
Get
Return m_ProjectFileM.bIsArchived
End Get
End Property
#Region "Messages"
Public ReadOnly Property Id_Msg As String
+22
View File
@@ -0,0 +1,22 @@
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtBEAMWALL.Core
Imports EgtBEAMWALL.ViewerOptimizer
Public Module DbControllers
Public m_MaterialsController As DataLayer.Controllers.MaterialsController
Public m_RawItemsController As DataLayer.Controllers.RawItemsController
Sub Init()
End Sub
Sub New()
End Sub
Sub LoadControllers(MaterialsController As DataLayer.Controllers.MaterialsController, RawItemsController As DataLayer.Controllers.RawItemsController)
m_MaterialsController = MaterialsController
m_RawItemsController = RawItemsController
End Sub
End Module
+17 -98
View File
@@ -3,6 +3,7 @@
#Region "Private Fields"
Public Enum MachLogTypes
NULL = 0
PART_STATUS = 1
MACHGROUP_STATUS = 2
MACHINE_MODE = 3
@@ -13,20 +14,13 @@
ALARM = 8
OPERATOR_MSG = 9
PROGRAM_SEND = 10
APPLICATION = 11
End Enum
Private m_AlarmCode As String
Private m_AlarmDateTime As DateTime
Private m_AlarmMessage As String
Private m_AlarmOperation As Integer
Private m_AlarmType As Integer
Private m_CommandExecutedCorrectly As Boolean
Private m_CommandState As CommandStates
Private m_CommandType As LogCommandTypes
Private m_Description As String
Private m_newOpState As Integer
Private m_ResultType As ResultTypes
Private m_VarAddress As String
Private m_nProdId As Integer
Private m_ResultType As MachLogTypes
Private m_SupervisorId As String
Private m_VarValue As String
' variabili del log macchina
@@ -87,7 +81,6 @@
Public ReadOnly Property sPROD As String
Get
Return m_VarValue
End Get
End Property
@@ -97,18 +90,10 @@
#Region "Protected Constructors"
Protected Sub New()
m_AlarmCode = ""
m_AlarmDateTime = DateTime.MinValue
m_AlarmMessage = ""
m_AlarmOperation = 0
m_AlarmType = 0
m_CommandExecutedCorrectly = False
m_CommandState = CommandStates.NULL
m_CommandType = LogCommandTypes.NULL
m_Description = ""
m_newOpState = 0
m_nProdId = 0
m_ResultType = ResultTypes.NULL
m_VarAddress = ""
m_SupervisorId = ""
m_VarValue = ""
End Sub
@@ -116,63 +101,15 @@
#Region "Public Properties"
Public ReadOnly Property AlarmCode As String
Get
Return m_AlarmCode
End Get
End Property
Public ReadOnly Property AlarmDateTime As Date
Get
Return m_AlarmDateTime
End Get
End Property
Public ReadOnly Property AlarmMessage As String
Public ReadOnly Property ProdId As Integer
Get
Return m_AlarmMessage
End Get
End Property
Public ReadOnly Property AlarmOperation As Integer
Get
Return m_AlarmOperation
End Get
End Property
Public ReadOnly Property AlarmType As Integer
Get
Return m_AlarmType
End Get
End Property
Public ReadOnly Property CommandExecutedCorrectly As Boolean
Get
Return m_CommandExecutedCorrectly
End Get
End Property
Public ReadOnly Property CommandState As CommandStates
Get
Return m_CommandState
End Get
End Property
Public ReadOnly Property CommandType As LogCommandTypes
Get
Return m_CommandType
End Get
End Property
Public ReadOnly Property Description As String
Get
Return m_Description
End Get
End Property
Public ReadOnly Property newOpState As Integer
Get
Return m_newOpState
Return m_nProdId
End Get
End Property
@@ -184,7 +121,7 @@
Public ReadOnly Property VarAddress As String
Get
Return m_VarAddress
Return m_SupervisorId
End Get
End Property
@@ -200,28 +137,20 @@
Public Shared Function CreateAlarmLog(AlarmOperation As Integer, AlarmType As Integer, AlarmMessage As String, AlarmCode As String, AlarmDateTime As String)
Dim NewMachLog As New MachLog
NewMachLog.m_CommandType = LogCommandTypes.ALARM
NewMachLog.m_AlarmOperation = AlarmOperation
NewMachLog.m_AlarmType = AlarmType
NewMachLog.m_AlarmMessage = AlarmMessage
NewMachLog.m_AlarmCode = AlarmCode
DateTime.TryParse(AlarmDateTime, NewMachLog.m_AlarmDateTime)
Return NewMachLog
End Function
Public Shared Function CreateOPStateLog(newOpState As Integer)
Dim NewMachLog As New MachLog
NewMachLog.m_CommandType = LogCommandTypes.NEWOP
NewMachLog.m_newOpState = newOpState
NewMachLog.m_nProdId = newOpState
NewMachLog.m_AlarmDateTime = DateTime.Now()
Return NewMachLog
End Function
Public Shared Function CreateReadLog(CommandExecutedCorrectly As Boolean, VarAddress As String, VarValue As String)
Dim NewMachLog As New MachLog
NewMachLog.m_CommandType = CommandTypes.READ_TPA
NewMachLog.m_CommandExecutedCorrectly = CommandExecutedCorrectly
NewMachLog.m_VarAddress = VarAddress
NewMachLog.m_SupervisorId = VarAddress
NewMachLog.m_VarValue = VarValue
NewMachLog.m_AlarmDateTime = DateTime.Now()
Return NewMachLog
@@ -229,20 +158,18 @@
Public Shared Function CreateResultLog(CommandType As LogCommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Description As String)
Dim NewMachLog As New MachLog
NewMachLog.m_CommandType = CommandType
NewMachLog.m_CommandState = CommandState
NewMachLog.m_ResultType = ResultType
NewMachLog.m_Description = Description
NewMachLog.m_AlarmDateTime = DateTime.Now()
Return NewMachLog
End Function
Public Shared Function CreateMachLog(EventType As MachLogTypes, EventDateTime As DateTime, Value As String, SupervisorID As String)
Public Shared Function CreateMachLog(EventType As MachLogTypes, EventDateTime As DateTime, Value As String, nProdId As Integer, SupervisorID As String)
Dim NewMachEvent As New MachLog
NewMachEvent.m_ResultType = EventType
NewMachEvent.m_AlarmDateTime = EventDateTime
NewMachEvent.m_VarValue = Value
NewMachEvent.m_VarAddress = SupervisorID
NewMachEvent.m_nProdId = nProdId
NewMachEvent.m_SupervisorId = SupervisorID
Return NewMachEvent
End Function
@@ -253,18 +180,10 @@
Public Shared Function CreateMachLog(AlarmCode As String, AlarmDateTime As Date, AlarmMessage As String, AlarmOperation As Integer, AlarmType As Integer, CommandExecutedCorrectly As Boolean, CommandState As CommandStates, CommandType As LogCommandTypes, Description As String, newOpState As Integer, ResultType As ResultTypes, VarAddress As String, VarValue As String) As MachLog
Dim NewMachLog As New MachLog
NewMachLog.m_AlarmCode = AlarmCode
NewMachLog.m_AlarmDateTime = AlarmDateTime
NewMachLog.m_AlarmMessage = AlarmMessage
NewMachLog.m_AlarmOperation = AlarmOperation
NewMachLog.m_AlarmType = AlarmType
NewMachLog.m_CommandExecutedCorrectly = CommandExecutedCorrectly
NewMachLog.m_CommandState = CommandState
NewMachLog.m_CommandType = CommandType
NewMachLog.m_Description = Description
NewMachLog.m_newOpState = newOpState
NewMachLog.m_nProdId = newOpState
NewMachLog.m_ResultType = ResultType
NewMachLog.m_VarAddress = VarAddress
NewMachLog.m_SupervisorId = VarAddress
NewMachLog.m_VarValue = VarValue
Return NewMachLog
+111
View File
@@ -0,0 +1,111 @@
Imports System.Windows
Imports EgtUILib
Imports EgtWPFLib5
Public Class MaterialM
Protected m_nId As Integer = 0
Public ReadOnly Property nId As Integer
Get
Return m_nId
End Get
End Property
Public Sub SetId(nId As Integer)
m_nId = nId
End Sub
Protected m_sMaterial As String
Public ReadOnly Property sMaterial As String
Get
Return m_sMaterial
End Get
End Property
Public Sub SetMaterial(sMaterial As String)
m_sMaterial = sMaterial
End Sub
Protected m_sWarehouseMaterial As String
Public ReadOnly Property sWarehouseMaterial As String
Get
Return m_sWarehouseMaterial
End Get
End Property
Public Sub SetWarehouseMaterial(sWarehouseMaterial As String)
m_sWarehouseMaterial = sWarehouseMaterial
End Sub
Protected m_dW As Double = 0
Public ReadOnly Property dW As Double
Get
Return m_dW
End Get
End Property
Protected m_dH As Double = 0
Public ReadOnly Property dH As Double
Get
Return m_dH
End Get
End Property
Protected m_dL As Double = 0
Public ReadOnly Property dL As Double
Get
Return m_dL
End Get
End Property
Shared Operator =(ByVal S1 As MaterialM, ByVal S2 As MaterialM) As Boolean
If IsNothing(S1) OrElse IsNothing(S2) Then Return False
Return (Math.Abs(S1.m_dH - S2.m_dH) < 100 * EPS_SMALL AndAlso
Math.Abs(S1.m_dW - S2.m_dW) < 100 * EPS_SMALL AndAlso
Math.Abs(S1.m_dL - S2.m_dL) < 100 * EPS_SMALL AndAlso
S1.m_sWarehouseMaterial = S2.m_sWarehouseMaterial)
End Operator
Shared Operator <>(ByVal S1 As MaterialM, ByVal S2 As MaterialM) As Boolean
Return Not S1 = S2
End Operator
Public Overrides Function Equals(ByVal obj As Object) As Boolean
If TypeOf obj Is MaterialM Then
Return Me = DirectCast(obj, MaterialM) '(m_dH = obj.dH AndAlso m_dW = obj.dW AndAlso m_dL = obj.dL AndAlso m_Material.Any(Function(x) DirectCast(obj.sMaterial, List(Of String)).Any(Function(y) y = x)))
End If
Return False
End Function
Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String)
m_dW = dW
m_dH = dH
m_dL = dL
m_sMaterial = sMaterial
End Sub
Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String, sWarehouseMaterial As String)
m_dW = dW
m_dH = dH
m_dL = dL
m_sMaterial = sMaterial
m_sWarehouseMaterial = sWarehouseMaterial
End Sub
' costruttore per DataLayer
Sub New(nId As Integer, dW As Double, dH As Double, dL As Double, sMaterial As String, sWarehouseMaterial As String)
m_nId = nId
m_dW = dW
m_dH = dH
m_dL = dL
m_sMaterial = sMaterial
m_sWarehouseMaterial = sWarehouseMaterial
End Sub
Public Sub Update(dW As Double, dH As Double, dL As Double, sMaterial As String)
m_dW = dW
m_dH = dH
m_dL = dL
m_sMaterial = sMaterial
End Sub
End Class
+121
View File
@@ -0,0 +1,121 @@
Imports EgtWPFLib5
Public Class RawPartM
Inherits VMBase
Protected m_nId As Integer
Public ReadOnly Property nId As Integer
Get
Return m_nId
End Get
End Property
Public Sub SetId(nId As Integer)
m_nId = nId
End Sub
Private m_bActive As Boolean
Public Property bActive As Boolean
Get
Return m_bActive
End Get
Set(value As Boolean)
m_bActive = value
End Set
End Property
Private m_Material As MaterialM
Public Property Material As MaterialM
Get
Return m_Material
End Get
Set(value As MaterialM)
m_Material = value
End Set
End Property
Private m_dW As Double
Public Property dW As Double
Get
Return m_dW
End Get
Set(value As Double)
m_dW = value
End Set
End Property
Private m_dL As Double
Public Property dL As Double
Get
Return m_dL
End Get
Set(value As Double)
m_dL = value
End Set
End Property
Private m_nQuantity As Integer
Public Property nQuantity As Integer
Get
Return m_nQuantity
End Get
Set(value As Integer)
m_nQuantity = value
End Set
End Property
Private m_bUseQuantity As Boolean
Public Property bUseQuantity As Boolean
Get
Return m_bUseQuantity
End Get
Set(value As Boolean)
m_bUseQuantity = value
End Set
End Property
Sub New(Material As MaterialM, W As Double, L As Double, Qty As Integer, Active As Boolean)
m_Material = Material
m_dW = W
m_dL = L
m_nQuantity = Qty
m_bActive = Active
End Sub
Sub New(nId As Integer, Material As MaterialM, W As Double, L As Double, Qty As Integer, bUseQty As Boolean, Active As Boolean)
m_nId = nId
m_Material = Material
m_dW = W
m_dL = L
m_nQuantity = Qty
m_bUseQuantity = bUseQty
m_bActive = Active
End Sub
Sub New(Material As MaterialM, W As Double, L As Double)
m_Material = Material
m_dW = W
m_dL = L
m_nQuantity = 0
m_bUseQuantity = False
m_bActive = False
End Sub
Public Sub Update(RawPart As RawPartM)
m_Material = RawPart.m_Material
m_dW = RawPart.dW
m_dL = RawPart.dL
m_nQuantity = RawPart.m_nQuantity
m_bUseQuantity = RawPart.m_bUseQuantity
m_bActive = RawPart.m_bActive
End Sub
Public Sub Update(W As Double, L As Double)
m_dW = W
m_dL = L
End Sub
Public Function Copy() As RawPartM
Return New RawPartM(m_nId, m_Material, m_dW, m_dL, m_nQuantity, bUseQuantity, bActive)
End Function
End Class
+142 -140
View File
@@ -15,77 +15,91 @@ Public Class SectionXMaterial
m_nType = nType
End Sub
Protected m_Material As List(Of String)
Public ReadOnly Property sMaterial As List(Of String)
Public ReadOnly Property sMaterial As String
Get
Return m_Material
Return m_MaterialM.sMaterial
End Get
End Property
Protected m_MaterialForSameSection_List As New List(Of String)
Public Property MaterialForSameSection_List As List(Of String)
Public ReadOnly Property sWarehouseMaterial As String
Get
Return m_MaterialForSameSection_List
Return m_MaterialM.sWarehouseMaterial
End Get
Set(value As List(Of String))
m_MaterialForSameSection_List = value
End Set
End Property
Protected m_SelMaterialForSameSection As String
Public Property SelMaterialForSameSection As String
'Protected m_MaterialForSameSection_List As New List(Of String)
'Public Property MaterialForSameSection_List As List(Of String)
' Get
' Return m_MaterialForSameSection_List
' End Get
' Set(value As List(Of String))
' m_MaterialForSameSection_List = value
' End Set
'End Property
'Protected m_SelMaterialForSameSection As String
'Public Property SelMaterialForSameSection As String
' Get
' Return m_SelMaterialForSameSection
' End Get
' Set(value As String)
' m_SelMaterialForSameSection = value
' End Set
'End Property
Protected m_MaterialM As MaterialM
Public ReadOnly Property MaterialM As MaterialM
Get
Return m_SelMaterialForSameSection
Return m_MaterialM
End Get
Set(value As String)
m_SelMaterialForSameSection = value
End Set
End Property
Protected m_dW As Double = 0
Public ReadOnly Property dW As Double
Get
Return m_dW
Return m_MaterialM.dW
End Get
End Property
Protected m_dH As Double = 0
Public ReadOnly Property dH As Double
Get
Return m_dH
Return m_MaterialM.dH
End Get
End Property
Protected m_dL As Double = 0
Public ReadOnly Property dL As Double
Get
Return m_dL
Return m_MaterialM.dL
End Get
End Property
Public ReadOnly Property sSectionXMaterial As String
Get
Dim sAlias As String = String.Empty
For Each sMatItem In sMaterial
sAlias &= sMatItem & ";"
Next
sAlias = sAlias.TrimEnd(";")
If Me = Empty Then
Return ""
ElseIf m_nType = MachineType.BEAM Then
Return LenToString(m_dW, 3) & " x " & LenToString(m_dH, 3) & " " & sAlias
Return LenToString(m_MaterialM.dW, 3) & " x " & LenToString(m_MaterialM.dH, 3) & " " & If(GetMainPrivateProfileInt(S_WAREHOUSE, K_SHOWWAREHOUSEMATERIAL, 0) = 1, sWarehouseMaterial, sMaterial)
ElseIf m_nType = MachineType.WALL Then
Return LenToString(m_dH, 3) & " " & sAlias
Return LenToString(m_MaterialM.dH, 3) & " " & If(GetMainPrivateProfileInt(S_WAREHOUSE, K_SHOWWAREHOUSEMATERIAL, 0) = 1, sWarehouseMaterial, sMaterial)
Else Return ""
End If
End Get
End Property
Public ReadOnly Property sWarehouseSectionXMaterial As String
Get
If Me = Empty Then
Return ""
ElseIf m_nType = MachineType.BEAM Then
Return LenToString(m_MaterialM.dW, 3) & " x " & LenToString(m_MaterialM.dH, 3) & " " & sWarehouseMaterial
ElseIf m_nType = MachineType.WALL Then
Return LenToString(m_MaterialM.dH, 3) & " " & sWarehouseMaterial
Else Return ""
End If
End Get
End Property
Shared Operator =(ByVal S1 As SectionXMaterial, ByVal S2 As SectionXMaterial) As Boolean
Return (Math.Abs( S1.m_dH - S2.m_dH) < 100 * EPS_SMALL AndAlso
Math.Abs( S1.m_dW - S2.m_dW) < 100 * EPS_SMALL AndAlso
Math.Abs( S1.m_dL - S2.m_dL) < 100 * EPS_SMALL AndAlso
S1.m_Material.Any(Function(x) S2.m_Material.Any(Function(y) y = x)))
Return S1.m_MaterialM = S2.m_MaterialM
End Operator
Shared Operator <>(ByVal S1 As SectionXMaterial, ByVal S2 As SectionXMaterial) As Boolean
@@ -99,122 +113,110 @@ Public Class SectionXMaterial
Return False
End Function
Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String)
Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String, sWarehouseMaterial As String)
If m_nType = BWType.BEAM Then
m_dW = dW
m_dH = dH
m_MaterialM = New MaterialM(dW, dH, 0, sMaterial, sWarehouseMaterial)
ElseIf m_nType = BWType.WALL Then
m_dH = dH
m_MaterialM = New MaterialM(0, dH, 0, sMaterial, sWarehouseMaterial)
Else
m_dW = dW
m_dH = dH
m_dL = dL
m_MaterialM = New MaterialM(dW, dH, dL, sMaterial, sWarehouseMaterial)
End If
m_Material = New List(Of String)
Dim sMaterialArray() As String = Split(sMaterial, ";")
For Each sMatItem In sMaterialArray
m_Material.Add(sMatItem)
Next
End Sub
Public Shared Empty As New SectionXMaterial(-1, -1, -1, "")
#Region "Import BTL <-> Warehouse"
Private m_dNewW As Double
Public Property dNewW As Double
Get
Return m_dNewW
End Get
Set(value As Double)
m_dNewW = value
End Set
End Property
Private m_dNewL As Double
Public Property dNewL As Double
Get
Return m_dNewL
End Get
Set(value As Double)
m_dNewL = value
End Set
End Property
Private m_nQuantity As Integer
Public Property nQuantity As Integer
Get
Return m_nQuantity
End Get
Set(value As Integer)
m_nQuantity = value
End Set
End Property
Private m_Alias_IsEnabled As Boolean
Public Property Alias_IsEnabled As Boolean
Get
Return m_Alias_IsEnabled
End Get
Set(value As Boolean)
m_Alias_IsEnabled = value
End Set
End Property
Private m_Alias_IsChecked As Boolean
Public Overridable Property Alias_IsChecked As Boolean
Get
Return m_Alias_IsChecked
End Get
Set(value As Boolean)
m_Alias_IsChecked = value
End Set
End Property
Public ReadOnly Property L_Msg As String
Get
Return EgtMsg(61604)
End Get
End Property
Public ReadOnly Property W_Msg As String
Get
Return EgtMsg(61605)
End Get
End Property
Public ReadOnly Property H_Msg As String
Get
Return EgtMsg(61606)
End Get
End Property
Public ReadOnly Property Quantity_Msg As String
Get
Return EgtMsg(61774)
End Get
End Property
Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String, nQuantity As Integer)
If m_nType = BWType.BEAM Then
m_dW = dW
m_dH = dH
ElseIf m_nType = BWType.WALL Then
m_dH = dH
Else
m_dW = dW
m_dH = dH
m_dL = dL
End If
m_Material = New List(Of String)
Dim sMaterialArray() As String = Split(sMaterial, ";")
For Each sMatItem In sMaterialArray
m_Material.Add(sMatItem)
Next
m_nQuantity = nQuantity
Sub New(MaterialM As MaterialM)
m_MaterialM = MaterialM
End Sub
#End Region ' Import BTL <-> Warehouse
Public Shared Empty As New SectionXMaterial(-1, -1, -1, "", "")
'#Region "Import BTL <-> Warehouse"
' Private m_dNewW As Double
' Public Property dNewW As Double
' Get
' Return m_dNewW
' End Get
' Set(value As Double)
' m_dNewW = value
' End Set
' End Property
' Private m_dNewL As Double
' Public Property dNewL As Double
' Get
' Return m_dNewL
' End Get
' Set(value As Double)
' m_dNewL = value
' End Set
' End Property
' Private m_nQuantity As Integer
' Public Property nQuantity As Integer
' Get
' Return m_nQuantity
' End Get
' Set(value As Integer)
' m_nQuantity = value
' End Set
' End Property
' Private m_Alias_IsEnabled As Boolean
' Public Property Alias_IsEnabled As Boolean
' Get
' Return m_Alias_IsEnabled
' End Get
' Set(value As Boolean)
' m_Alias_IsEnabled = value
' End Set
' End Property
' Private m_Alias_IsChecked As Boolean
' Public Overridable Property Alias_IsChecked As Boolean
' Get
' Return m_Alias_IsChecked
' End Get
' Set(value As Boolean)
' m_Alias_IsChecked = value
' End Set
' End Property
' Public ReadOnly Property L_Msg As String
' Get
' Return EgtMsg(61604)
' End Get
' End Property
' Public ReadOnly Property W_Msg As String
' Get
' Return EgtMsg(61605)
' End Get
' End Property
' Public ReadOnly Property H_Msg As String
' Get
' Return EgtMsg(61606)
' End Get
' End Property
' Public ReadOnly Property Quantity_Msg As String
' Get
' Return EgtMsg(61774)
' End Get
' End Property
' Sub New(dW As Double, dH As Double, dL As Double, sMaterial As String, nQuantity As Integer, sWarehouseMaterial As String)
' If m_nType = BWType.BEAM Then
' m_MaterialM = New MaterialM(dW, dH, 0, sMaterial, sWarehouseMaterial)
' ElseIf m_nType = BWType.WALL Then
' m_MaterialM = New MaterialM(0, dH, 0, sMaterial, sWarehouseMaterial)
' Else
' m_MaterialM = New MaterialM(dW, dH, dL, sMaterial, sWarehouseMaterial)
' End If
' m_nQuantity = nQuantity
' End Sub
'#End Region ' Import BTL <-> Warehouse
End Class
+78 -46
View File
@@ -1,49 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d">
</provider>
</providers>
</entityFramework>
<connectionStrings>
<add name="DefaultConnection" connectionString="server=localhost;port=3306;User Id=steamware;password=Egalware_24068!;Persist Security Info=True;database=EgtBwDb_000470;SslMode=none" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.21.0" newVersion="8.0.21.0" />
</dependentAssembly>
<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>
<dependentAssembly>
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.21.9.0" newVersion="3.21.9.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="K4os.Compression.LZ4.Streams" publicKeyToken="2186fa9121ef231d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.5.0" newVersion="1.3.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.9.0.0" newVersion="1.9.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<!--<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.EntityFramework" />-->
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
<connectionStrings>
<add name="DefaultConnection" connectionString="server=localhost;port=3306;User Id=steamware;password=steamware_password;Persist Security Info=True;database=EgtBwDb_000470;SslMode=none" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.8.9.0" newVersion="1.8.9.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Google.Protobuf" publicKeyToken="a7d26565bac4d604" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.27.0.0" newVersion="3.27.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="K4os.Compression.LZ4" publicKeyToken="2186fa9121ef231d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.5.0" newVersion="1.2.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="K4os.Compression.LZ4.Streams" publicKeyToken="2186fa9121ef231d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.3.8.0" newVersion="1.3.8.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="K4os.Hash.xxHash" publicKeyToken="32cd54395057cec3" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.8.0" newVersion="1.0.8.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.32.0" newVersion="8.0.32.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<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>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.3" newVersion="8.0.0.3" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="RestSharp" publicKeyToken="598062e77f915f75" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-111.2.0.0" newVersion="111.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ZstdSharp" publicKeyToken="8d151af33a4ad5cf" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-0.8.1.0" newVersion="0.8.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
@@ -0,0 +1,270 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
namespace EgtBEAMWALL.DataLayer.Controllers
{
/// <summary>
/// Gestione Alias su DB (es: materiali da BTL e su DB)
/// </summary>
public class AliasController : IDisposable
{
#region Public Constructors
public AliasController()
{
}
#endregion Public Constructors
#if false
/// <summary>
/// Conversion of DB model class to base class
/// </summary>
/// <param name="coreMat"></param>
/// <returns></returns>
public static Core.AliasM ConvToCore(AliasModel dbRec)
{
Core.AliasM answ = new Core.AliasM(dbRec.ValueOriginal, dbRec.ValueAlias);
return answ;
}
#endif
#region Public Methods
/// <summary>
/// Helper conversione a DTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static AliasDTO ConvToDto(AliasModel currRec)
{
AliasDTO answ = new AliasDTO()
{
ValOrig = currRec.ValueOriginal,
ValAlias = currRec.ValueAlias,
IsActive = true
};
return answ;
}
/// <summary>
/// Helper conversione da DTO
/// </summary>
/// <param name="currRec"></param>
/// <param name="family"></param>
/// <returns></returns>
public static AliasModel ConvToModel(AliasDTO currRec, string family)
{
AliasModel answ = new AliasModel()
{
Family = family,
ValueOriginal = currRec.ValOrig,
ValueAlias = currRec.ValAlias
};
return answ;
}
/// <summary>
/// Delete by key
/// </summary>
/// <param name="Family"></param>
/// <param name="ValueOriginal"></param>
/// <returns></returns>
public bool DeleteByKey(string Family, string ValueOriginal)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var items2del = localDbCtx
.AliasList
.Where(x => x.Family == Family && x.ValueOriginal == ValueOriginal);
try
{
// Add to database
localDbCtx.AliasList.RemoveRange(items2del);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Alias.DeleteByKey: {Environment.NewLine}{exc}");
}
}
return done;
}
public void Dispose()
{
}
/// <summary>
/// Ricerca record da chiave (=valore ALIAS)
/// </summary>
/// <param name="ValueOriginal">Valore ALIAS cercato</param>
/// <param name="Family">Famiglia alias cercato (MatCode se non specificato)</param>
/// <returns></returns>
public AliasModel FindByDbId(string ValueOriginal, string Family = "MatCode")
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
return localDbCtx
.AliasList
.Where(x => x.Family == Family && x.ValueOriginal.ToLower() == ValueOriginal.ToLower())
.SingleOrDefault();
}
}
/// <summary>
/// Elenco Alias x famiglia
/// </summary>
/// <param name="Family">se "" restituisce tutti</param>
/// <returns></returns>
public List<AliasModel> GetFilt(string Family)
{
// retrieve
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
return localDbCtx
.AliasList
.Where(x => x.Family == Family)
.OrderBy(x => x.ValueOriginal)
.ToList();
}
}
/// <summary>
/// Update or insert Alias record
/// </summary>
/// <param name="updItem"></param>
/// <returns></returns>
public bool Upsert(AliasModel updItem)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.AliasList
.Where(x => x.Family == updItem.Family && x.ValueOriginal.Equals(updItem.ValueOriginal, StringComparison.InvariantCulture))
.SingleOrDefault();
if (item2update != null)
{
// update, vers 1...
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
}
else
{
localDbCtx.AliasList.Add(updItem);
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Alias.Upsert: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Update or insert Alias record list
/// </summary>
/// <param name="updList"></param>
/// <returns></returns>
public bool UpsertList(List<AliasModel> updList)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
foreach (var updItem in updList)
{
var item2update = localDbCtx
.AliasList
.Where(x => x.Family == updItem.Family && x.ValueOriginal.ToLower() == updItem.ValueOriginal.ToLower())
.SingleOrDefault();
if (item2update != null)
{
if (item2update.ValueAlias.ToLower() != updItem.ValueAlias.ToLower())
{
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
}
}
else
{
localDbCtx.AliasList.Add(updItem);
}
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Alias.UpsertList: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Eliminazione eventuali record Alias nella lista (se presenti)
/// </summary>
/// <param name="updList"></param>
/// <returns></returns>
public bool DeleteList(List<AliasModel> updList)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
foreach (var updItem in updList)
{
var item2del = localDbCtx
.AliasList
.Where(x => x.Family == updItem.Family && x.ValueOriginal.ToLower() == updItem.ValueOriginal.ToLower())
.SingleOrDefault();
if (item2del != null)
{
localDbCtx.AliasList.Remove(item2del);
}
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Alias.DeleteList: {Environment.NewLine}{exc}");
}
}
return fatto;
}
#endregion Public Methods
#region Private Fields
/// <summary>
/// Istanza logger
/// </summary>
private Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
@@ -1,7 +1,9 @@
using NLog;
using System;
using System.Linq;
using System.Runtime.Remoting.Contexts;
using System.Threading;
using System.Threading.Tasks;
namespace EgtBEAMWALL.DataLayer.Controllers
{
@@ -41,7 +43,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
bool answ = false;
string domain = isNetwork ? "%" : "localhost";
answ = doCheckCreate(username, pwd, answ, domain, false);
answ = doCheckCreate(username, pwd, domain, false);
if (answ)
{
doGrantPriv(username, domain, "ALL ON *.*");
@@ -76,36 +78,67 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
bool answ = false;
// in primis refresh delle view
string sqlCommand = @"CREATE OR REPLACE VIEW v_expProdRaw AS
SELECT DbId, AlarmDtEvent AS DtEvent, VarValue,
try
{
// migrazione minima x eseguire refresh viste
string minMigration = "202404261445205_UpdateLogMachineTable";
//// cerco se ho la migration minima per proseguire...
//var numRec = dbCtx
// .MigrList
// .Where(x => x.MigrationId == minMigration)
// .ToList()
// .Count;
//string sqlQuery = $"SELECT 'Migration' AS TableName, COUNT(*) AS Count FROM __MigrationHistory WHERE MigrationId = '{minMigration}' LIMIT 1;";
//var table = dbCtx
// .DbSetCounts
// .SqlQuery(sqlQuery)
// .AsNoTracking()
//.ToList();
string sqlQuery = $"SELECT COUNT(*) AS Count FROM __MigrationHistory WHERE MigrationId = '{minMigration}' LIMIT 1;";
var total = dbCtx.Database.SqlQuery<int>(sqlQuery).Single();
//if (table != null && table.Count > 0)
if (total > 0)
{
// in primis refresh delle view
string sqlCommand = @"CREATE OR REPLACE VIEW v_expProdRaw AS
SELECT DbId, DtEvent, VarValue,
SUBSTRING_INDEX(VarValue, ';', 1) AS Prod,
SUBSTRING_INDEX(SUBSTRING_INDEX(VarValue, ';', 2), ';', -1) AS MachGroupId,
SUBSTRING_INDEX(SUBSTRING_INDEX(VarValue, ';', -2), ';', 1) AS PartId,
SUBSTRING_INDEX(VarValue, ';', -1) AS Status
FROM logmachine
WHERE ResultType = 1
AND VarAddress = 1;
WHERE EvType = 1
AND SupervId = 1;
CREATE OR REPLACE VIEW v_expProd AS
SELECT vp.DtEvent, vp.Prod, mgl.Name AS mgName, pl.PDN, vp.`Status`
FROM v_expProdRaw AS vp
INNER JOIN MachGroupList mgl ON vp.MachGroupId = mgl.Id
INNER JOIN partlist pl ON vp.PartId = pl.Id;";
dbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
dbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
// ora setup parametri x utente
string domain = "%";
// ora setup parametri x utente
string domain = "%";
// ora controllo utente con diritti
answ = doCheckCreate(username, pwd, answ, domain, true);
if (answ)
{
doGrantPriv(username, domain, "USAGE ON *.*");
doGrantPriv(username, domain, $"SELECT ON {dbName}.v_expProd");
// ora controllo utente con diritti
answ = doCheckCreate(username, pwd, domain, true);
if (answ)
{
doGrantPriv(username, domain, "USAGE ON *.*");
doGrantPriv(username, domain, $"SELECT ON {dbName}.v_expProd");
}
}
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on DbController.refreshViews: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
return answ;
}
@@ -157,43 +190,49 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// </summary>
/// <param name="username"></param>
/// <param name="pwd"></param>
/// <param name="answ"></param>
/// <param name="domain"></param>
/// <param name="force">Force = esegue un drop prima...</param>
/// <returns></returns>
private bool doCheckCreate(string username, string pwd, bool answ, string domain, bool force)
private bool doCheckCreate(string username, string pwd, string domain, bool force)
{
// ricerca utente...
var numUser = adbCtx
.UserList
.Where(x => x.User == username)
.ToList()
.Count;
if (numUser > 0)
bool answ = false;
try
{
answ = true;
}
if (!answ)
{
// creo utente
string sqlCommand = $"DROP USER IF EXISTS {username};";
if (force)
// ricerca utente...
var numUser = adbCtx
.UserList
.Where(x => x.User == username && x.Host == domain)
.ToList()
.Count;
if (numUser > 0)
{
answ = true;
}
if (!answ)
{
// creo utente
string sqlCommand = $"DROP USER IF EXISTS {username};";
if (force)
{
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
}
sqlCommand = "FLUSH PRIVILEGES;";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
sqlCommand = $"CREATE USER '{username}'@'{domain}' IDENTIFIED BY '{pwd}';";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
sqlCommand = "FLUSH PRIVILEGES;";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
answ = true;
}
sqlCommand = "FLUSH PRIVILEGES;";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
sqlCommand = $"CREATE USER '{username}'@'{domain}' IDENTIFIED BY '{pwd}';";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
sqlCommand = "FLUSH PRIVILEGES;";
adbCtx.Database.ExecuteSqlCommand(System.Data.Entity.TransactionalBehavior.DoNotEnsureTransaction, sqlCommand);
Thread.Sleep(100);
answ = true;
}
catch (Exception exc)
{
Log.Error($"Eccezione in doCheckCreate:{Environment.NewLine}{exc}");
}
return answ;
}
@@ -1,4 +1,5 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
@@ -18,6 +19,24 @@ namespace EgtBEAMWALL.DataLayer.Controllers
#region Public Methods
/// <summary>
/// Helper conversione a LogMachineDTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static LogMachineDTO ConvToItemDto(LogMachineModel currRec)
{
LogMachineDTO answ = new LogMachineDTO()
{
DtEvent = currRec.DtEvent,
EvType = (EgwProxy.MagMan.MachLogTypes)currRec.EvType,
ProjCloudId = currRec.ProjCloudId,
SupervId = currRec.SupervId,
VarValue = currRec.VarValue
};
return answ;
}
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
@@ -25,24 +44,29 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <returns></returns>
public LogMachineModel ConvertFromCore(Core.MachLog coreMacLog)
{
int projCloudId = 0;
// calcolo projCloudId da ProdId...
using (var localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// Add to database
var projRec = localDbCtx.ProdList.Where(x => x.ProdId == coreMacLog.ProdId).FirstOrDefault();
if (projRec != null)
{
projCloudId = projRec.ProjCloudId;
}
}
// converto!
LogMachineModel answ = new LogMachineModel();
if (coreMacLog != null)
{
answ = new LogMachineModel()
{
AlarmCode = coreMacLog.AlarmCode,
AlarmDatetime = coreMacLog.AlarmDateTime,
AlarmMessage = coreMacLog.AlarmMessage,
AlarmOperation = coreMacLog.AlarmOperation,
AlarmType = coreMacLog.AlarmType,
CommandExecutedCorrectly = coreMacLog.CommandExecutedCorrectly,
CommandState = coreMacLog.CommandState,
CommandType = coreMacLog.CommandType,
Description = coreMacLog.Description,
NewOpState = coreMacLog.newOpState,
ResultType = coreMacLog.ResultType,
VarAddress = coreMacLog.VarAddress,
VarValue = coreMacLog.VarValue
EvType = coreMacLog.EventType,
DtEvent = coreMacLog.AlarmDateTime,
SupervId = coreMacLog.VarAddress,
VarValue = coreMacLog.VarValue,
ProdId = coreMacLog.ProdId,
ProjCloudId = projCloudId
};
}
return answ;
@@ -55,7 +79,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <returns></returns>
public Core.MachLog ConvertToCore(LogMachineModel dbLog)
{
var newRecord = Core.MachLog.CreateMachLog(dbLog.AlarmCode, dbLog.AlarmDatetime, dbLog.AlarmMessage, dbLog.AlarmOperation, dbLog.AlarmType, dbLog.CommandExecutedCorrectly, dbLog.CommandState, dbLog.CommandType, dbLog.Description, dbLog.NewOpState, dbLog.ResultType, dbLog.VarAddress, dbLog.VarValue);
var newRecord = (Core.MachLog)Core.MachLog.CreateMachLog(dbLog.EvType, dbLog.DtEvent, dbLog.VarValue, dbLog.ProdId, dbLog.SupervId);
return newRecord;
}
@@ -66,38 +90,36 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <returns></returns>
public bool Create(LogMachineModel newLogMac)
{
bool fatto = false;
bool done = false;
try
{
try
using (var locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
using (var locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// Add to database
locallocalDbCtx.LogMachineList.Add(newLogMac);
// Commit changes
locallocalDbCtx.SaveChanges();
}
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on LogMachine.Create: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
// Add to database
locDbCtx.LogMachineList.Add(newLogMac);
// Commit changes
locDbCtx.SaveChanges();
done = true;
}
}
catch
{ }
return fatto;
catch (Exception exc)
{
string errMessage = $"EXCEPTION on LogMachine.Create: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
return done;
}
/// <summary>
/// Create machine LOG record (da modello dati CORE)
/// </summary>
/// <param name="newLogMac"></param>
/// <param name="newLogMac">Record Log</param>
/// <param name="projDbId">ProjID da DB (locale)</param>
/// <returns></returns>
public bool Create(Core.MachLog newMachLog)
{
// converto record
var dbLogModel = ConvertFromCore(newMachLog);
return Create(dbLogModel);
}
@@ -147,9 +169,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
return localDbCtx
.LogMachineList
.Where(x => x.LogDbId == LogDbId)
.SingleOrDefault();
.LogMachineList
.Where(x => x.LogDbId == LogDbId)
.SingleOrDefault();
}
}
@@ -165,10 +187,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// retrieve
return localDbCtx
.LogMachineList
.Where(x => x.AlarmDatetime >= dtStart && x.AlarmDatetime <= dtEnd)
.OrderBy(x => x.AlarmDatetime)
.ToList();
.LogMachineList
.Where(x => x.DtEvent >= dtStart && x.DtEvent <= dtEnd)
.OrderBy(x => x.DtEvent)
.ToList();
}
}
@@ -210,13 +232,195 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
// retrieve
return localDbCtx
.LogMachineList
.Where(x => x.AlarmDatetime >= dtStart && x.AlarmDatetime <= dtEnd)
.OrderByDescending(x => x.AlarmDatetime)
.ToList();
.LogMachineList
.Where(x => x.DtEvent >= dtStart && x.DtEvent <= dtEnd)
.OrderByDescending(x => x.DtEvent)
.ToList();
}
}
/// <summary>
/// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato
/// </summary>
/// <param name="numMax"></param>
/// <returns></returns>
public List<LogMachineModel> GetUnsentAsc(int numMax)
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
return localDbCtx
.LogMachineList
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && x.ProjCloudId > 0)
.OrderBy(x => x.DtEvent)
.Take(numMax)
.ToList();
}
}
/// <summary>
/// Creazione LOG record di avvio programma
/// </summary>
/// <returns></returns>
public bool RecordAppStartup()
{
bool done = false;
try
{
using (var locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// cerco ultimo record registrato
var lastRec = locDbCtx
.LogMachineList
.OrderByDescending(x => x.DtEvent)
.FirstOrDefault();
// cerco ultimo evento chiusura
var lastRecClose = locDbCtx
.LogMachineList
.Where(x => x.EvType == Core.MachLog.MachLogTypes.APPLICATION
&& x.VarValue == "0")
.OrderByDescending(x => x.DtEvent)
.FirstOrDefault();
// preparo nuovo record avvio!
LogMachineModel recStartApp = new LogMachineModel()
{
DtEvent = DateTime.Now.AddSeconds(-1),
EvType = Core.MachLog.MachLogTypes.APPLICATION,
VarValue = "1",
ProdId = lastRec != null ? lastRec.ProdId : 0,
ProjCloudId = lastRec != null ? lastRec.ProjCloudId : 0,
SupervId = lastRec != null ? lastRec.SupervId : "1"
};
// verifico esistenza record chiusura...
if (lastRecClose != null && lastRec != null)
{
// se l'ultimo record registrato NON fosse di chiusura... lo genero!
if (lastRecClose.DtEvent < lastRec.DtEvent)
{
var recCloseApp = new LogMachineModel()
{
DtEvent = lastRec.DtEvent.AddSeconds(1),
EvType = recStartApp.EvType,
VarValue = "0",
ProdId = lastRec != null ? lastRec.ProdId : 0,
ProjCloudId = lastRec != null ? lastRec.ProjCloudId : 0,
SupervId = lastRec != null ? lastRec.SupervId : "1"
};
// aggiungo rec chiusura
locDbCtx.LogMachineList.Add(recCloseApp);
}
}
// aggiungo rec avvio
locDbCtx.LogMachineList.Add(recStartApp);
// salvataggio
locDbCtx.SaveChanges();
done = true;
}
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on LogMachine.RecordAppStartup: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
return done;
}
/// <summary>
/// Aggiorna i record indicati inserendo dataora corrente x DtSent
/// </summary>
/// <param name="rec2upd"></param>
/// <returns></returns>
public bool SetDtSent(List<LogMachineModel> rec2upd)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
DateTime adesso = DateTime.Now;
foreach (var item in rec2upd)
{
var currRec = localDbCtx
.LogMachineList
.Where(x => (x.DtSent == null || x.DtSent < x.DtEvent) && x.LogDbId == item.LogDbId)
.FirstOrDefault();
if (currRec != null)
{
currRec.DtSent = adesso;
// indico modificato
localDbCtx.Entry(currRec).State = System.Data.Entity.EntityState.Modified;
}
}
// Salvataggio finale
localDbCtx.SaveChanges();
}
return done;
}
/// <summary>
/// Cerca di sistemare gli ID di Prod e ProjCloud mancanti
/// </summary>
/// <returns></returns>
public bool TryFixProjCloudId()
{
// init vars
bool fatto = false;
int prodId = 0;
// vado sul DB
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
var list2proc = localDbCtx
.LogMachineList
.Where(x => x.ProjCloudId == 0 && (x.EvType == Core.MachLog.MachLogTypes.PART_STATUS || x.EvType == Core.MachLog.MachLogTypes.MACHGROUP_STATUS))
.OrderBy(x => x.DtEvent)
.ToList();
// se ci sono...
if (list2proc != null && list2proc.Count > 0)
{
// recupero elenco PROD
List<ProdModel> prodList = localDbCtx
.ProdList
.AsNoTracking()
.ToList();
foreach (var item in list2proc)
{
prodId = 0;
// cerco valore
string[] dataList = item.VarValue.Split(';');
if (dataList != null && dataList.Count() > 0)
{
int.TryParse(dataList[0], out prodId);
// se trovato
if (prodId > 0)
{
// salvo il valore prodId
item.ProdId = prodId;
// cerco il projCloudId in elenco
var projRec = prodList.Where(x => x.ProdId == prodId).FirstOrDefault();
if (projRec != null)
{
item.ProjCloudId = projRec.ProjCloudId;
}
// indico modificato
localDbCtx.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
}
}
// salvo
localDbCtx.SaveChanges();
// registro
fatto = true;
}
}
// risultato
return fatto;
}
/// <summary>
/// Update single LogMachineModel
/// </summary>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,291 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
namespace EgtBEAMWALL.DataLayer.Controllers
{
/// <summary>
/// Gestione MagmanSync su DB (registrazione operazioni di sync con MagMan online)
/// </summary>
public class MagmanSyncController : IDisposable
{
#region Public Constructors
public MagmanSyncController()
{
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Purge dei record inviati oltre periodo di giorni indicato
/// </summary>
/// <param name="NumDayMax">Num gg max da mantenere in registro</param>
/// <returns></returns>
public bool DeleteOlder(int NumDayMax)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
DateTime adesso = DateTime.Now;
var items2del = localDbCtx
.SyncList
.Where(x => x.DtExe != null && adesso.Subtract(x.DtReq).TotalDays > NumDayMax);
try
{
// Add to database
localDbCtx.SyncList.RemoveRange(items2del);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.DeleteOlder | NumDayMax: {NumDayMax}{Environment.NewLine}{exc}");
}
}
return done;
}
/// <summary>
/// Purge dei record NON INVIATI date condizioni filtro
/// </summary>
/// <param name="ProjCloudId">Id progetto x cui filtrare</param>
/// <param name="SyncType">Tipo di record da cercare</param>
/// <param name="DtLimit">DataOra limite (max) x cui cercare record non inviati</param>
/// <returns></returns>
public bool DeleteUnsentFilt(int ProjCloudId, string SyncType, DateTime DtLimit)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// cercl candidati
var items2del = localDbCtx
.SyncList
.Where(x => x.DtExe == null && x.CloudId == ProjCloudId && x.SyncType == SyncType && x.DtReq <= DtLimit);
// se ne ho trovato...
if (items2del != null && items2del.Count() > 0)
{
try
{
// Add to database
localDbCtx.SyncList.RemoveRange(items2del);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.DeleteUnsentFilt | ProjCloudId: {ProjCloudId} | SyncType: {SyncType} | DtLimit: {DtLimit}{Environment.NewLine}{exc}");
}
}
}
return done;
}
public void Dispose()
{
}
/// <summary>
/// Lista record filtrati
/// </summary>
/// <param name="SyncType">Tipo di record richiesti, se "" = tutti</param>
/// <param name="DtMax">Data-Ora limite per recupero ordinato DESC</param>
/// <param name="NumMax">num max di record da restituire</param>
/// <returns></returns>
public List<MagmanSyncModel> GetFilt(string SyncType, DateTime DtMax, int NumMax)
{
List<MagmanSyncModel> dbResult = new List<MagmanSyncModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
dbResult = localDbCtx
.SyncList
.Where(x => (string.IsNullOrEmpty(SyncType) || x.SyncType == SyncType) && x.DtReq <= DtMax)
.OrderByDescending(x => x.DtReq)
.Take(NumMax)
.ToList();
}
return dbResult;
}
/// <summary>
/// Lista record NON inviati filtrati x tipo e num max
/// </summary>
/// <param name="SyncType">Tipo di record richiesti, se "" = tutti</param>
/// <param name="DtMax">Data-Ora limite per recupero ordinato ASC</param>
/// <param name="NumMax">num max di record da restituire</param>
/// <returns></returns>
public List<MagmanSyncModel> GetUnsentFilt(string SyncType, DateTime DtMax, int NumMax)
{
List<MagmanSyncModel> dbResult = new List<MagmanSyncModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
dbResult = localDbCtx
.SyncList
.Where(x => x.DtExe == null && (string.IsNullOrEmpty(SyncType) || x.SyncType == SyncType) && x.DtReq <= DtMax)
.OrderBy(x => x.DtReq)
.Take(NumMax)
.ToList();
}
return dbResult;
}
/// <summary>
/// Insert record MagmanSync
/// </summary>
/// <param name="newRec"></param>
/// <returns>ID record inserito</returns>
public int Insert(MagmanSyncModel newRec)
{
int newId = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
// inserisco record
localDbCtx.SyncList.Add(newRec);
// Commit changes
localDbCtx.SaveChanges();
newId = newRec.SyncId;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.Insert: {Environment.NewLine}{exc}");
}
}
return newId;
}
/// <summary>
/// Update con indicazione DtExt di completamento
/// </summary>
/// <param name="SyncId">ID record</param>
/// <param name="DtExe">Data-Ora exe</param>
/// <returns></returns>
public bool SetCompleted(int SyncId, DateTime DtExe)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.SyncList
.Where(x => x.SyncId == SyncId)
.SingleOrDefault();
if (item2update != null)
{
// update
item2update.DtExe = DtExe;
localDbCtx.Entry(item2update).State = System.Data.Entity.EntityState.Modified;
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.SetCompleted: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Update or insert record MagmanSync
/// </summary>
/// <param name="updItem"></param>
/// <returns></returns>
public bool Upsert(MagmanSyncModel updItem)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.SyncList
.Where(x => x.SyncId == updItem.SyncId)
.SingleOrDefault();
if (item2update != null)
{
// update, vers 1...
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
}
else
{
localDbCtx.SyncList.Add(updItem);
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.Upsert: {Environment.NewLine}{exc}");
}
}
return fatto;
}
/// <summary>
/// Update or insert Alias record list
/// </summary>
/// <param name="updList"></param>
/// <returns></returns>
public bool UpsertList(List<MagmanSyncModel> updList)
{
bool fatto = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
foreach (var updItem in updList)
{
var item2update = localDbCtx
.SyncList
.Where(x => x.SyncId == updItem.SyncId)
.SingleOrDefault();
if (item2update != null)
{
localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
}
else
{
localDbCtx.SyncList.Add(updItem);
}
}
// Commit changes
localDbCtx.SaveChanges();
fatto = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on MagmanSync.UpsertList: {Environment.NewLine}{exc}");
}
}
return fatto;
}
#endregion Public Methods
#region Private Fields
/// <summary>
/// Istanza logger
/// </summary>
private Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
@@ -0,0 +1,529 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using static EgtBEAMWALL.DataLayer.Controllers.MaterialsController.SearchResult;
namespace EgtBEAMWALL.DataLayer.Controllers
{
/// <summary>
/// Gestione Materiali su DB (= magazzino locale)
/// </summary>
public class MaterialsController : IDisposable
{
#region Public Constructors
public MaterialsController()
{
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Conversion of DB model class to base class
/// </summary>
/// <param name="coreMat"></param>
/// <returns></returns>
public static Core.MaterialM ConvToCore(MaterialModel dbRec)
{
Core.MaterialM answ = new Core.MaterialM(dbRec.MatId, (double)dbRec.WMm, (double)dbRec.HMm, (double)dbRec.LMm, "", dbRec.MatCode);
return answ;
}
/// <summary>
/// Helper conversione a DTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static MaterialDTO ConvToDto(MaterialModel currRec)
{
MaterialDTO answ = new MaterialDTO()
{
MatCloudId = currRec.MatCloudId,
MatLocalId = currRec.MatId,
MatCode = currRec.MatCode,
MatDesc = currRec.MatDesc,
HMm = currRec.HMm,
LMm = currRec.LMm,
WMm = currRec.WMm
};
return answ;
}
/// <summary>
/// Helper conversione da DTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static MaterialModel ConvToModel(MaterialDTO currRec)
{
MaterialModel answ = new MaterialModel()
{
MatCloudId = currRec.MatCloudId,
MatId = currRec.MatLocalId,
MatCode = currRec.MatCode,
MatDesc = currRec.MatDesc,
HMm = currRec.HMm,
LMm = currRec.LMm,
WMm = currRec.WMm
};
return answ;
}
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
/// <param name="coreRec"></param>
/// <returns></returns>
public static MaterialModel ConvToModel(Core.MaterialM coreRec)
{
MaterialModel answ = new MaterialModel();
if (coreRec != null)
{
answ = new MaterialModel()
{
MatId = coreRec.nId,
MatCode = coreRec.sWarehouseMaterial,
HMm = (decimal)Math.Round(coreRec.dH,2),
LMm = (decimal)Math.Round(coreRec.dL,2),
WMm = (decimal)Math.Round(coreRec.dW,2),
};
}
return answ;
}
/// <summary>
/// Delete by key
/// </summary>
/// <param name="MatId"></param>
/// <returns></returns>
public bool DeleteByKey(int MatId)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var items2del = localDbCtx
.MaterialsList
.Where(x => x.MatId == MatId);
try
{
// Add to database
localDbCtx.MaterialsList.RemoveRange(items2del);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.DeleteByKey: {Environment.NewLine}{exc}");
}
}
return done;
}
public void Dispose()
{
}
/// <summary>
/// Get record by Key
/// </summary>
/// <param name="MatId"></param>
/// <returns></returns>
public Core.MaterialM FindByDbId(int MatId)
{
Core.MaterialM result = new Core.MaterialM(0, 0, 0, "", "");
var rawData = FindByDbIdModel(MatId);
if (rawData != null)
{
result = ConvToCore(rawData);
}
return result;
}
/// <summary>
/// Get record by Key in formato Model
/// </summary>
/// <param name="MatId"></param>
/// <returns></returns>
public MaterialModel FindByDbIdModel(int MatId)
{
MaterialModel result = new MaterialModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
result = localDbCtx
.MaterialsList
.Where(x => x.MatId == MatId)
.SingleOrDefault();
}
return result;
}
/// <summary>
/// Get Material (filtro x MatId) in formato Core
/// </summary>
/// <param name="MatCode">se "" restituisce tutti</param>
/// <returns></returns>
public List<Core.MaterialM> GetFilt(string MatCode)
{
// recupero e converto
List<Core.MaterialM> result = new List<Core.MaterialM>();
var rawData = GetFiltModel(MatCode);
if (rawData != null)
{
result = rawData.Select(x => ConvToCore(x)).ToList();
}
return result;
}
/// <summary>
/// Get Material (filtro x MatId) in formato Model
/// </summary>
/// <param name="MatCode">se "" restituisce tutti</param>
/// <returns></returns>
public List<MaterialModel> GetFiltModel(string MatCode)
{
List<MaterialModel> result = new List<MaterialModel>();
// retrieve
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
result = localDbCtx
.MaterialsList
.Where(x => string.IsNullOrEmpty(MatCode) || x.MatCode == MatCode)
.OrderBy(x => x.MatDesc)
.ToList();
}
return result;
}
/// <summary>
/// Insert Material record from CoreM if missing or return existing (for Id)
/// </summary>
/// <param name="coreItem"></param>
/// <returns>MatId (existing or new)</returns>
public int Insert(Core.MaterialM coreItem)
{
int newIdx = 0;
// converto
MaterialModel updItem = ConvToModel(coreItem);
newIdx = Insert(updItem);
return newIdx;
}
/// <summary>
/// Insert Material record
/// </summary>
/// <param name="updItem"></param>
/// <returns>MatId (existing or new)</returns>
public int Insert(MaterialModel updItem)
{
int newIdx = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.MaterialsList
.Where(x => (updItem.MatId > 0 && x.MatId == updItem.MatId)
|| (updItem.MatCloudId > 0 && x.MatCloudId == updItem.MatCloudId)
|| (x.MatCode == updItem.MatCode && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
.SingleOrDefault();
if (item2update != null)
{
newIdx = item2update.MatId;
}
else
{
localDbCtx.MaterialsList.Add(updItem);
// verifico se c'è già "alias original"
var aliasOrig = localDbCtx
.AliasList
.Where(x => x.ValueOriginal == updItem.MatCode)
.FirstOrDefault();
if (aliasOrig == null || string.IsNullOrEmpty(aliasOrig.ValueOriginal) || aliasOrig.ValueOriginal != updItem.MatCode)
{
// inserisco alias!
localDbCtx.AliasList.Add(new AliasModel() { Family = "MatCode", ValueOriginal = updItem.MatCode, ValueAlias = updItem.MatCode });
}
// Commit changes
localDbCtx.SaveChanges();
newIdx = updItem.MatId;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.Insert: {Environment.NewLine}{exc}");
}
}
return newIdx;
}
/// <summary>
/// Get Last RawItem used for Material
/// </summary>
/// <param name="updItem"></param>
/// <returns>Returns 0 if not found</returns>
public int LastRawItemGet(int MatId)
{
int RawItemIdLast = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.MaterialsList
.Where(x => (MatId > 0 && x.MatId == MatId))
.SingleOrDefault();
if (item2update != null)
{
RawItemIdLast = item2update.RawItemIdLast;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.LastRawItemGet: {Environment.NewLine}{exc}");
}
}
return RawItemIdLast;
}
/// <summary>
/// Update Last RawItem used for Material record
/// </summary>
/// <param name="MatId">Id locale materiale</param>
/// <param name="RawItemIdLast">Id del RawItem</param>
/// <returns>Returns true if updated</returns>
public bool LastRawItemSet(int MatId, int RawItemIdLast)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.MaterialsList
.Where(x => (MatId > 0 && x.MatId == MatId))
.SingleOrDefault();
if (item2update != null)
{
item2update.RawItemIdLast = RawItemIdLast;
localDbCtx.Entry(item2update).State = System.Data.Entity.EntityState.Modified;
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.LastRawItemSet: {Environment.NewLine}{exc}");
}
}
return done;
}
/// <summary>
/// Restituisce il primo materiale (se esiste) per MatCode (diretto o tramite Alias)
/// </summary>
/// <param name="MatCode">Non accetta ""</param>
/// <returns></returns>
public SearchResult SearchFilt(string MatCode)
{
// init valori esito ricerca + risultato
TypeFound esito = string.IsNullOrEmpty(MatCode) ? TypeFound.MISSING_CODE : TypeFound.NOT_FOUND;
List<Core.MaterialM> result = new List<Core.MaterialM>();
// solo se ho una VERA ricerca x MatCode
if (!string.IsNullOrEmpty(MatCode))
{
// cerco nei materiali
var rawData = GetFiltModel(MatCode);
if (rawData != null && rawData.Count > 0)
{
// ...e converto
result = rawData.Select(x => ConvToCore(x)).ToList();
esito = TypeFound.MATERIAL;
}
else
{
// cerco negli alias...
using (AliasController aliasDbContr = new AliasController())
{
var aliasRec = aliasDbContr.FindByDbId(MatCode);
if (aliasRec != null)
{
rawData = GetFiltModel(aliasRec.ValueAlias);
if (rawData != null && rawData.Count > 0)
{
// ...e converto
result = rawData.Select(x => ConvToCore(x)).ToList();
esito = TypeFound.ALIAS;
}
}
}
}
}
// compongo risposta!
SearchResult answ = new SearchResult()
{
Tipo = esito,
Result = result
};
return answ;
}
/// <summary>
/// Update Material record from CoreM
/// </summary>
/// <param name="coreItem"></param>
/// <returns>Returns 0 if not found</returns>
public int Update(Core.MaterialM coreItem)
{
int newIdx = 0;
// converto
MaterialModel updItem = ConvToModel(coreItem);
newIdx = Update(updItem);
return newIdx;
}
/// <summary>
/// Update Material record
/// </summary>
/// <param name="updItem"></param>
/// <returns>Returns 0 if not found</returns>
public int Update(MaterialModel updItem)
{
int newIdx = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.MaterialsList
.Where(x => (updItem.MatId > 0 && x.MatId == updItem.MatId)
|| (updItem.MatCloudId > 0 && x.MatCloudId == updItem.MatCloudId)
|| (x.MatCode == updItem.MatCode && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
.SingleOrDefault();
if (item2update != null)
{
//// update, vers 1...
//localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
item2update.MatCloudId = updItem.MatCloudId;
item2update.MatDesc = updItem.MatDesc;
localDbCtx.Entry(item2update).State = System.Data.Entity.EntityState.Modified;
// Commit changes
localDbCtx.SaveChanges();
newIdx = item2update.MatId;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.Update: {Environment.NewLine}{exc}");
}
}
return newIdx;
}
/// <summary>
/// Upsert Material record
/// </summary>
/// <param name="updItem"></param>
/// <returns>MatId (existing or new)</returns>
public int Upsert(MaterialModel updItem)
{
int newIdx = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.MaterialsList
.Where(x => (updItem.MatId > 0 && x.MatId == updItem.MatId)
|| (updItem.MatCloudId > 0 && x.MatCloudId == updItem.MatCloudId)
|| (x.MatCode == updItem.MatCode && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
.SingleOrDefault();
if (item2update != null)
{
//// update, vers 1...
//localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);
item2update.MatCloudId = updItem.MatCloudId;
item2update.MatDesc = updItem.MatDesc;
localDbCtx.Entry(item2update).State = System.Data.Entity.EntityState.Modified;
// Commit changes
localDbCtx.SaveChanges();
newIdx = item2update.MatId;
}
else
{
localDbCtx.MaterialsList.Add(updItem);
// Commit changes
localDbCtx.SaveChanges();
newIdx = updItem.MatId;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on Materials.Insert: {Environment.NewLine}{exc}");
}
}
return newIdx;
}
#endregion Public Methods
#region Public Classes
/// <summary>
/// Risultato ricerca materiali
/// </summary>
public class SearchResult
{
#region Public Enums
/// <summary>
/// Enum del risultato della ricerca materiali
/// </summary>
public enum TypeFound
{
MISSING_CODE = 0,
NOT_FOUND,
ALIAS,
MATERIAL
}
#endregion Public Enums
#region Public Properties
/// <summary>
/// Materiali trovati
/// </summary>
public List<Core.MaterialM> Result { get; set; } = new List<Core.MaterialM>();
/// <summary>
/// Tipologia oggetto trovato
/// </summary>
public TypeFound Tipo { get; set; } = TypeFound.MISSING_CODE;
#endregion Public Properties
}
#endregion Public Classes
#region Private Fields
/// <summary>
/// Istanza logger
/// </summary>
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
@@ -203,9 +203,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public PartModel FindByPartId(int ProdId, int PartId)
{
PartModel answ = null;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
answ = locallocalDbCtx
answ = locDbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.PartId == PartId)
.FirstOrDefault();
@@ -221,10 +221,10 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public bool Update(PartModel updItem)
{
bool done = false;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var myStatusMapCtrl = new StatusMapController();
var item2upd = locallocalDbCtx
var item2upd = locDbCtx
.PartList
.Where(x => x.PartDbId == updItem.PartDbId)
.SingleOrDefault();
@@ -233,14 +233,14 @@ namespace EgtBEAMWALL.DataLayer.Controllers
try
{
// update, vers 1...
locallocalDbCtx.Entry(item2upd).CurrentValues.SetValues(updItem);
locDbCtx.Entry(item2upd).CurrentValues.SetValues(updItem);
//// update, vers 2
//localDbCtx.PartList.Remove(item2del);
//localDbCtx.PartList.Add(updItem);
// Commit changes
locallocalDbCtx.SaveChanges();
locDbCtx.SaveChanges();
done = true;
// aggiorno info sullo status
myStatusMapCtrl.UpdateAction("", updItem.MachGroup.Prod.ProdId, updItem.PartId, Core.StatusMapItemType.Part, Core.StatusMapOpType.MachGroupMod, "");
@@ -271,13 +271,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public bool UpdateEnd(int ProdId, int MachGroupId, int PartId, DateTime DtEnd)
{
bool done = false;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var myStatusMapCtrl = new StatusMapController();
try
{
// aggiorno
var item2upd = locallocalDbCtx
var item2upd = locDbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault();
@@ -286,7 +286,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
item2upd.DtEnd = DtEnd;
// Commit changes
locallocalDbCtx.SaveChanges();
locDbCtx.SaveChanges();
done = true;
// aggiorno info sullo status
myStatusMapCtrl.UpdateAction("", ProdId, PartId, Core.StatusMapItemType.Part, DtEnd == DateTime.MinValue ? Core.StatusMapOpType.ResetPartEnd : Core.StatusMapOpType.PartEnd, "");
@@ -317,13 +317,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public bool UpdateStart(int ProdId, int MachGroupId, int PartId, DateTime DtStart)
{
bool done = false;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var myStatusMapCtrl = new StatusMapController();
try
{
// aggiorno
var item2upd = locallocalDbCtx
var item2upd = locDbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault();
@@ -331,7 +331,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
item2upd.DtStart = DtStart;
// Commit changes
locallocalDbCtx.SaveChanges();
locDbCtx.SaveChanges();
done = true;
// aggiorno info sullo status
myStatusMapCtrl.UpdateAction("", ProdId, PartId, Core.StatusMapItemType.Part, DtStart == DateTime.MinValue ? Core.StatusMapOpType.ResetPartStart : Core.StatusMapOpType.PartStart, "");
@@ -363,13 +363,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
public bool UpdateStatus(int ProdId, int MachGroupId, int PartId, Core.ItemState newState)
{
bool done = false;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var myStatusMapCtrl = new StatusMapController();
try
{
// aggiorno
var item2upd = locallocalDbCtx
var item2upd = locDbCtx
.PartList
.Where(x => x.MachGroup.Prod.ProdId == ProdId && x.MachGroup.MachGroupId == MachGroupId && x.PartId == PartId)
.FirstOrDefault();
@@ -377,7 +377,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
item2upd.State = newState;
// Commit changes
locallocalDbCtx.SaveChanges();
locDbCtx.SaveChanges();
done = true;
// aggiorno info sullo status
myStatusMapCtrl.UpdateAction("", ProdId, PartId, Core.StatusMapItemType.Part, newState == Core.ItemState.Scrapped ? Core.StatusMapOpType.SetPartScrapped : Core.StatusMapOpType.MachGroupMod, "");
@@ -405,7 +405,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
#region Protected Methods
/// <summary>
/// Get BtlPartDBId by ProjId + PDN
/// Get BtlPartDBId by ProdId + PDN
/// </summary>
/// <param name="ProjId"></param>
/// <param name="PDN"></param>
@@ -414,9 +414,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
int BtlPartDbId = 0;
using (DatabaseContext locallocalDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
using (DatabaseContext locDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var btlPart = locallocalDbCtx
var btlPart = locDbCtx
.BTLPartList
.Where(x => x.Project.ProjId == ProjId && x.PDN == PDN)
.SingleOrDefault();
@@ -430,7 +430,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
/// <summary>
/// Get BtlPartDBId by ProjId + BtlPartId
/// Get BtlPartDBId by ProdId + BtlPartId
/// </summary>
/// <param name="ProjId"></param>
/// <param name="BtlPartId"></param>
@@ -1,8 +1,9 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using NLog.LayoutRenderers;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using static EgtBEAMWALL.Core.ConstBeam;
@@ -58,10 +59,84 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return done;
}
public bool DeleteProd(int ProdId)
/// <summary>
/// Helper conversione a ProjectDTO
/// </summary>
/// <param name="currRec">record in formato ProdModel</param>
/// <returns></returns>
public static ProjectDTO ConvToDto(ProdModel currRec)
{
// ho valori mancanti che saranno calcolati dal cloud e valori messi a zero di default
ProjectDTO answ = new ProjectDTO()
{
ProjCloudId = currRec.ProjCloudId,
ProjLocalId = currRec.ProdDbId,
ProjExtId = currRec.ProdId,
// è calcolato sul cloud, da token --> machine ID
MachineCloudId = 0,
// è calcolato sul cloud, da token --> KeyNum
KeyNum = 0,
// disponibile solo su PROJ
BTLFileName = "",
PType = (EgwProxy.MagMan.BWType)currRec.PType,
Machine = currRec.Machine,
ProjDescription = currRec.Description,
DtCreated = currRec.DtCreated,
DtLastAction = DateTime.MinValue,
DtSchedule = DateTime.MinValue,
DtStartProd = DateTime.MinValue,
// disponibile solo su PROJ
ListName = "",
ProcTimeEst = 0,
ProcTimeReal = 0,
IsActive = currRec.IsActive,
IsArchived = currRec.IsArchived
};
return answ;
}
/// <summary>
/// Helper conversione modelli verso Core.ProdItem
/// </summary>
/// <param name="currProd"></param>
/// <returns></returns>
public Core.ProdItem ConvToCore(ProdModel currProd)
{
Core.ProdItem answ = Core.ProdItem.CreateProdItem(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived, currProd.ProjListNav.Select(j => Core.ProjFileM.CreateProjFileM(j.ProjId, currProd.ProdId, j.DtCreated, j.DtExported, j.ListName, j.BTLFileName, j.ProjDescription, j.IsNew, j.Locked, j.PType, j.Machine, j.IsActive, j.IsActive, j.ProjCloudId)).ToList());
return answ;
}
/// <summary>
/// Helper conversione modelli verso Core.ProdItem
/// </summary>
/// <param name="currProd"></param>
/// <returns></returns>
public Core.ProdItem ConvToCore(ProjModel currProj)
{
Core.ProdItem answ = Core.ProdItem.CreateProdItem(Core.ProjFileM.CreateProjFileM(currProj.ProjId, 0, currProj.DtCreated, currProj.DtExported, currProj.ListName, currProj.BTLFileName, currProj.ProjDescription, currProj.IsNew, currProj.Locked, currProj.PType, currProj.Machine, currProj.IsActive, currProj.IsActive, currProj.ProjCloudId));
return answ;
}
/// <summary>
/// Helper conversione modelli
/// </summary>
/// <param name="currProd"></param>
/// <returns></returns>
public Core.ProdFileM ConvToCoreFile(ProdModel currProd)
{
Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived, currProd.ProjCloudId);
//Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived, currProd.ProjListNav.Select(j => Core.ProjFileM.CreateProjFileM(j.ProdId, currProd.ProdId, j.DtCreated, j.DtExported, j.ListName, j.BTLFileName, j.ProjDescription, j.IsNew, j.Locked, j.PType, j.Machine, j.IsActive, j.IsActive)).ToList());
return answ;
}
/// <summary>
/// Delete Prod(+proj...) logically / on DB by ProdId
/// </summary>
/// <param name="ProjId"></param>
/// <param name="IsLogical"></param>
/// <returns></returns>
public bool DeleteProd(int ProdId, bool IsLogical)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var currProd = localDbCtx
@@ -69,50 +144,78 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
// sel dei proj da aggiornare...
var proj2update = localDbCtx
.ProjList
.Where(x => x.ProdDbId == currProd.ProdDbId)
.ToList();
// sel dei MachGroup da prod
var machGroup2del = localDbCtx
.MachGroupList
.Where(x => x.ProdDbId == currProd.ProdDbId)
.ToList();
// selezione dei part da machgroup
var part2del = localDbCtx
.PartList
.Where(x => x.MachGroup.ProdDbId == currProd.ProdDbId)
.ToList();
try
// procedo SOLO SE NON è stato prodotto (se è stato prodotto --> NON permetto la
// cancellazione ed esco con false...)
if (!currProd.IsProduced)
{
// update proj...
foreach (var item in proj2update)
// sel dei proj da aggiornare...
var proj2update = localDbCtx
.ProjList
.Where(x => x.ProdDbId == currProd.ProdDbId)
.ToList();
// se richiesta cancellazione logica o cmq se fosse stato taggato come prodotto
if (IsLogical)
{
item.ProdDbId = null;
try
{
// segno eliminazione logica al/ai PROJ...
foreach (var item in proj2update)
{
item.IsActive = false;
}
// segno eliminazione logica al prod
currProd.IsActive = false;
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.DeleteProd (logical only): {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
// sel dei MachGroup da prod
var machGroup2del = localDbCtx
.MachGroupList
.Where(x => x.ProdDbId == currProd.ProdDbId)
.ToList();
// selezione dei part da machgroup
var part2del = localDbCtx
.PartList
.Where(x => x.MachGroup.ProdDbId == currProd.ProdDbId)
.ToList();
try
{
// update proj...
foreach (var item in proj2update)
{
item.ProdDbId = null;
}
// remove from database
localDbCtx.PartList.RemoveRange(part2del);
//// salvo
//localDbCtx.SaveChanges();
localDbCtx.MachGroupList.RemoveRange(machGroup2del);
//// salvo
//localDbCtx.SaveChanges();
localDbCtx.ProdList.Remove(currProd);
// salvo
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.DeleteProd: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
//// salvo
//localDbCtx.SaveChanges();
// remove from database
localDbCtx.PartList.RemoveRange(part2del);
//// salvo
//localDbCtx.SaveChanges();
localDbCtx.MachGroupList.RemoveRange(machGroup2del);
//// salvo
//localDbCtx.SaveChanges();
localDbCtx.ProdList.Remove(currProd);
// salvo
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.DeleteProd: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return done;
@@ -170,20 +273,263 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
return null;
}
return Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate);
return Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate, currProd.IsActive, currProd.IsProduced, currProd.IsArchived, currProd.ProjCloudId);
}
/// <summary>
/// Elenco progetti
/// Elenco prod
/// </summary>
/// <param name="numRecord"></param>
/// <param name="NumRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo con ALMENO 1 PROJ attivo (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProdFileM> GetLastDesc(int numRecord)
public List<Core.ProdFileM> GetLastDesc(int NumRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProdFileM> result = new List<Core.ProdFileM>();
var dbResult = GetLastDbModelDesc(numRecord);
//List<ProdModel> dbResult = GetLastDbModelDesc(numRecord);
List<ProdModel> dbResult = new List<ProdModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (NumRecord == 0)
{
NumRecord = localDbCtx.ProdList.Count();
}
// retrieve
dbResult = localDbCtx
.ProdList
.Where(x => (!x.IsArchived || ShowArchived))
// condizione join sui PROJ
.Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive),
p => p.ProdDbId,
e => e.ProdDbId,
(p, e) => p)
.Distinct()
.OrderByDescending(x => x.ProdId)
.Take(NumRecord)
.ToList();
}
// conversione
result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description, x.PType, x.Machine, x.LockedBy, x.LockDate)).ToList();
result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description, x.PType, x.Machine, x.LockedBy, x.LockDate, x.IsActive, x.IsProduced, x.IsArchived, x.ProjCloudId)).ToList();
return result;
}
/// <summary>
/// Elenco prod
/// </summary>
/// <param name="DtStart">Inizio periodo estrazione</param>
/// <param name="DtEnd">Fine periodo estrazione</param>
/// <param name="NumRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo con ALMENO 1 PROJ attivo (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProdFileM> GetLastDesc(DateTime DtStart, DateTime DtEnd, int NumRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProdFileM> result = new List<Core.ProdFileM>();
//List<ProdModel> dbResult = GetLastDbModelDesc(numRecord);
List<ProdModel> dbResult = new List<ProdModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (NumRecord == 0)
{
NumRecord = localDbCtx.ProdList.Count();
}
// retrieve
dbResult = localDbCtx
.ProdList
.Where(x => x.DtCreated >= DtStart && x.DtCreated <= DtEnd && (!x.IsArchived || ShowArchived))
// condizione join sui PROJ
.Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive),
p => p.ProdDbId,
e => e.ProdDbId,
(p, e) => p)
.Distinct()
.OrderByDescending(x => x.ProdId)
.Take(NumRecord)
.ToList();
}
// conversione
result = dbResult.Select(x => Core.ProdFileM.CreateProdFileM(x.ProdId, ProjIdByProd(x.ProdId), x.DtCreated, x.Description, x.PType, x.Machine, x.LockedBy, x.LockDate, x.IsActive, x.IsProduced, x.IsArchived, x.ProjCloudId)).ToList();
return result;
}
/// <summary>
/// Elenco prod
/// </summary>
/// <param name="NumRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo con ALMENO 1 PROJ attivo (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProdItem> GetLastDescFull(int NumRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProdItem> result = new List<Core.ProdItem>();
// elenco prod completi
List<ProdModel> dbResultProd = new List<ProdModel>();
// elenco proj "orfani"
List<ProjModel> dbResultProj = new List<ProjModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (NumRecord == 0)
{
NumRecord = localDbCtx.ProdList.Count();
}
// recupero PROD + proj relativi
dbResultProd = localDbCtx
.ProdList
.Where(x => (!x.IsArchived || ShowArchived))
//.Include(j => j.)
// condizione join sui PROJ
.Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive),
p => p.ProdDbId,
e => e.ProdDbId,
(p, e) => p)
.Distinct()
.Include(j => j.ProjListNav)
.OrderByDescending(x => x.ProdId)
.Take(NumRecord)
.ToList();
// recupero i proj "orfani"
dbResultProj = localDbCtx
.ProjList
.Where(x => (x.IsActive || !OnlyActive) && x.Prod == null)
.OrderByDescending(x => x.ProjId)
.Take(NumRecord)
.ToList();
}
// conversione
result = dbResultProd.Select(x => ConvToCore(x)).ToList();
var resProj = dbResultProj.Select(x => ConvToCore(x)).ToList();
// sommo i risultati
result.AddRange(resProj);
return result;
}
/// <summary>
/// Elenco prod
/// </summary>
/// <param name="DtStart">Inizio periodo estrazione</param>
/// <param name="DtEnd">Fine periodo estrazione</param>
/// <param name="NumRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo con ALMENO 1 PROJ attivo (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProdItem> GetLastDescFull(DateTime DtStart, DateTime DtEnd, int NumRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProdItem> result = new List<Core.ProdItem>();
// elenco prod completi
List<ProdModel> dbResultProd = new List<ProdModel>();
// elenco proj "orfani"
List<ProjModel> dbResultProj = new List<ProjModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (NumRecord == 0)
{
NumRecord = localDbCtx.ProdList.Count();
}
// retrieve
dbResultProd = localDbCtx
.ProdList
.Where(x => x.DtCreated >= DtStart && x.DtCreated <= DtEnd && (!x.IsArchived || ShowArchived))
// condizione join sui PROJ
.Join(localDbCtx.ProjList.Where(x => x.IsActive || !OnlyActive),
p => p.ProdDbId,
e => e.ProdDbId,
(p, e) => p)
.Distinct()
.Include(j => j.ProjListNav)
.OrderByDescending(x => x.ProdId)
.Take(NumRecord)
.ToList();
// recupero i proj "orfani"
dbResultProj = localDbCtx
.ProjList
.Where(x => (x.IsActive || !OnlyActive) && x.Prod == null && (x.DtCreated >= DtStart && x.DtCreated <= DtEnd))
.OrderByDescending(x => x.ProjId)
.Take(NumRecord)
.ToList();
}
// conversione
result = dbResultProd.Select(x => ConvToCore(x)).ToList();
var resProj = dbResultProj.Select(x => ConvToCore(x)).ToList();
// sommo i risultati
result.AddRange(resProj);
return result;
}
/// <summary>
/// Elenco prod
/// </summary>
/// <param name="DtStart">Inizio periodo estrazione</param>
/// <param name="DtEnd">Fine periodo estrazione</param>
/// <param name="DtIsCreation">Ture: usa data creazione / False: usa data export</param>
/// <param name="NumRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo con ALMENO 1 PROJ attivo (senza cancellazione logica)</param>
/// <param name="Machine">Nome Macchina (default vuoto = non usato)</param>
/// <param name="BtlFileName">Nome file BTL (default vuoto = non usato)</param>
/// <param name="ListName">Nome List (default vuoto = non usato)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProdItem> GetLastDescFull(DateTime DtStart, DateTime DtEnd, bool DtIsCreation, int NumRecord, bool OnlyActive, string Machine = "", string BtlFileName = "", string ListName = "", bool ShowArchived = false)
{
List<Core.ProdItem> result = new List<Core.ProdItem>();
List<ProdModel> dbResultProd = new List<ProdModel>();
// elenco proj "orfani"
List<ProjModel> dbResultProj = new List<ProjModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (NumRecord == 0)
{
NumRecord = localDbCtx.ProdList.Count();
}
// retrieve
dbResultProd = localDbCtx
.ProdList
.Where(x => (!x.IsArchived || ShowArchived))
// condizione join sui PROJ
.Join(localDbCtx.ProjList.Where(x =>
(x.IsActive || !OnlyActive)
&& (string.IsNullOrEmpty(Machine) || x.Machine.ToLower().Contains(Machine.ToLower()))
&& (string.IsNullOrEmpty(BtlFileName) || x.BTLFileName.ToLower().Contains(BtlFileName.ToLower()))
&& (string.IsNullOrEmpty(ListName) || x.ListName.ToLower().Contains(ListName.ToLower()))
&& ((DtIsCreation && (x.DtCreated >= DtStart && x.DtCreated <= DtEnd)) || (!DtIsCreation && (x.DtExported >= DtStart && x.DtExported <= DtEnd)))
),
p => p.ProdDbId,
e => e.ProdDbId,
(p, e) => p)
.Distinct()
.Include(j => j.ProjListNav)
.OrderByDescending(x => x.ProdId)
.Take(NumRecord)
.ToList();
// recupero i proj "orfani"
dbResultProj = localDbCtx
.ProjList
.Where(x =>
(x.IsActive || !OnlyActive)
&& x.Prod == null
&& (string.IsNullOrEmpty(Machine) || x.Machine.ToLower().Contains(Machine.ToLower()))
&& (string.IsNullOrEmpty(BtlFileName) || x.BTLFileName.ToLower().Contains(BtlFileName.ToLower()))
&& (string.IsNullOrEmpty(ListName) || x.ListName.ToLower().Contains(ListName.ToLower()))
&& ((DtIsCreation && (x.DtCreated >= DtStart && x.DtCreated <= DtEnd)) || (!DtIsCreation && (x.DtExported >= DtStart && x.DtExported <= DtEnd))))
.OrderByDescending(x => x.ProjId)
.Take(NumRecord)
.ToList();
}
// conversione
result = dbResultProd.Select(x => ConvToCore(x)).ToList();
var resProj = dbResultProj.Select(x => ConvToCore(x)).ToList();
// sommo i risultati
result.AddRange(resProj);
return result;
}
@@ -240,6 +586,25 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return nextId;
}
/// <summary>
/// Recupero i dati NON sincronizzati in ordine crescente fino al num max indicato
/// </summary>
/// <param name="dtStart"></param>
/// <param name="dtEnd"></param>
/// <returns></returns>
public List<ProdModel> GetUnsentAsc()
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
return localDbCtx
.ProdList
.Where(x => x.ProjCloudId == 0)
.OrderBy(x => x.ProdDbId)
.ToList();
}
}
/// <summary>
/// Verifica prod assegnato a supervisor: ...se c'e' anche un solo machgroup del prod
/// assegnato ad un supervisor o in stato 0 (dovrebbe essere la stessa cosa?)
@@ -385,6 +750,163 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return done;
}
/// <summary>
/// Update record su DB x campo IsArchived
/// </summary>
/// <param name="ProdId"></param>
/// <param name="IsArchived"></param>
/// <returns></returns>
public bool UpdateArchived(int ProdId, bool IsArchived)
{
bool fatto = false;
// cerco specifico Prod
ProdModel currData = new ProdModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
currData = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
if (currData != null)
{
// sel dei proj da aggiornare...
var proj2update = localDbCtx
.ProjList
.Where(x => x.ProdDbId == currData.ProdDbId)
.ToList();
try
{
// aggiorno valore descrizione
currData.IsArchived = IsArchived;
// update dei proj relativi
foreach (var item in proj2update)
{
item.IsArchived = IsArchived;
}
// Commit changes
localDbCtx.SaveChanges();
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.UpdateArchived:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Prod.UpdateArchived: req item was not found | ProdId {ProdId} | IsArchived {IsArchived}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return fatto;
}
/// <summary>
/// Update record su DB x ProjectCloudId
/// </summary>
/// <param name="ProdId"></param>
/// <param name="Description"></param>
/// <returns></returns>
public Core.ProdFileM UpdateCloudId(int ProdId, int ProjCloudId)
{
// cerco specifico Proj
ProdModel currData;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
currData = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
if (currData != null)
{
try
{
// aggiorno valore BTL
currData.ProjCloudId = ProjCloudId;
// salvo record PROD
localDbCtx.SaveChanges();
// cerco se ci siano projects collegati ed aggiorno pure loro...
var projList = localDbCtx
.ProjList
.Where(x => x.ProdDbId == currData.ProdDbId)
.ToList();
if (projList != null)
{
foreach (var item in projList)
{
item.ProjCloudId = ProjCloudId;
}
// salvo modifihce ai PROJ
localDbCtx.SaveChanges();
}
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.UpdateCloudId:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Prod.UpdateCloudId: req item was not found | ProdId {ProdId} | ProjCloudId {ProjCloudId}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return ConvToCoreFile(currData);
}
/// <summary>
/// Update record su DB x Description
/// </summary>
/// <param name="ProdId"></param>
/// <param name="Description"></param>
/// <returns></returns>
public bool UpdateDescription(int ProdId, string Description)
{
bool fatto = false;
// cerco specifico Prod
ProdModel currData = new ProdModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
currData = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
if (currData != null)
{
try
{
// aggiorno valore descrizione
currData.Description = Description;
// Commit changes
localDbCtx.SaveChanges();
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.UpdateDescription:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Prod.UpdateDescription: req item was not found | ProdId {ProdId} | Description {Description}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return fatto;
}
/// <summary>
/// Update record su DB x elenco MachGroup:
/// - NON vengono eliminati record (se ce ne son altri sul DB non saranno toccati)
@@ -408,7 +930,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.OrderBy(n => n.PartCount);
// controllo: nell'elenco delle barre MachGroupList NON devono esserci duplicati per
// l'ID (esterno) che deve essere univoco...
// l'ID (esterno) che deve essere univoco...
testOk = listaCheck.Where(x => x.PartCount > 1).Count() == 0;
if (testOk)
{
@@ -610,7 +1132,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
Log.Error(errMessage);
}
}
return coreConv(currData);
return ConvToCoreFile(currData);
}
/// <summary>
@@ -632,7 +1154,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.SingleOrDefault();
if (currData != null)
{
// aggiorno valore BTL
// aggiorno valore tipo
currData.PType = PType;
// Commit changes
@@ -652,7 +1174,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
Log.Error(errMessage);
}
}
return coreConv(currData);
return ConvToCoreFile(currData);
}
/// <summary> Return User Code/Key that Locks by ProdId (proj & prod) </summary> <param
@@ -705,40 +1227,6 @@ namespace EgtBEAMWALL.DataLayer.Controllers
#region Protected Methods
/// <summary>
/// Helper conversione modelli
/// </summary>
/// <param name="currProd"></param>
/// <returns></returns>
protected Core.ProdFileM coreConv(ProdModel currProd)
{
Core.ProdFileM answ = Core.ProdFileM.CreateProdFileM(currProd.ProdId, ProjIdByProd(currProd.ProdId), currProd.DtCreated, currProd.Description, currProd.PType, currProd.Machine, currProd.LockedBy, currProd.LockDate);
return answ;
}
/// <summary>
/// Get LAST paginated data from DB (DESC ordered)
/// </summary>
/// <param name="numRecord"></param>
/// <returns></returns>
protected List<ProdModel> GetLastDbModelDesc(int numRecord)
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (numRecord == 0)
{
numRecord = localDbCtx.ProdList.Count();
}
// retrieve
return localDbCtx
.ProdList
.OrderByDescending(x => x.ProdId)
.Take(numRecord)
.ToList();
}
}
protected List<int> ProjIdByProd(int ProdId)
{
var ProjCtr = new ProjController();
@@ -756,5 +1244,54 @@ namespace EgtBEAMWALL.DataLayer.Controllers
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
#region Private Methods
/// <summary>
/// Update record su DB x campo IsProduced lasciato private se servisse in futuro x ora NON
/// esposto e fatto implicitamente in StatusMapController.StartProd
/// </summary>
/// <param name="ProdId"></param>
/// <param name="IsProduced"></param>
/// <returns></returns>
private bool UpdateProduced(int ProdId, bool IsProduced)
{
bool fatto = false;
// cerco specifico Prod
ProdModel currData = new ProdModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
currData = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
if (currData != null)
{
try
{
// aggiorno valore descrizione
currData.IsProduced = IsProduced;
// Commit changes
localDbCtx.SaveChanges();
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.UpdateProduced:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Prod.UpdateProduced: req item was not found | ProdId {ProdId} | IsProduced {IsProduced}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return fatto;
}
#endregion Private Methods
}
}
@@ -1,4 +1,5 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
@@ -19,9 +20,75 @@ namespace EgtBEAMWALL.DataLayer.Controllers
#region Public Methods
/// <summary>
/// Helper conversione a ProjectDTO
/// </summary>
/// <param name="currRec">record in formato ProjModel</param>
/// <returns></returns>
public static ProjectDTO ConvToDto(ProjModel currRec)
{
// ho valori mancanti che saranno calcolati dal cloud e valori messi a zero di default
ProjectDTO answ = new ProjectDTO()
{
ProjCloudId = currRec.ProjCloudId,
ProjLocalId = currRec.ProjDbId,
ProjExtId = currRec.ProjId,
// è calcolato sul cloud, da token --> machine ID
MachineCloudId = 0,
// è calcolato sul cloud, da token --> KeyNum
KeyNum = 0,
BTLFileName = currRec.BTLFileName,
PType = (EgwProxy.MagMan.BWType)currRec.PType,
Machine = currRec.Machine,
ProjDescription = currRec.ProjDescription,
DtCreated = currRec.DtCreated,
DtLastAction = DateTime.MinValue,
DtSchedule = DateTime.MinValue,
DtStartProd = DateTime.MinValue,
ListName = currRec.ListName,
ProcTimeEst = 0,
ProcTimeReal = 0,
IsActive = currRec.IsActive,
IsArchived = currRec.IsArchived
};
return answ;
}
/// <summary>
/// Helper conversione a ProjModel
/// </summary>
/// <param name="currRec"></param>
/// <param name="isActive"></param>
/// <returns></returns>
public static ProjModel ConvToModel(ProjectDTO currRec, bool isActive)
{
ProjModel answ = new ProjModel()
{
ProjCloudId = currRec.ProjCloudId,
ProjDbId = currRec.ProjLocalId,
ProjId = currRec.ProjExtId,
//MachineID = currRec.MachineCloudId,
//KeyNum = currRec.KeyNum,
BTLFileName = currRec.BTLFileName,
PType = (BWType)currRec.PType,
Machine = currRec.Machine,
ProjDescription = currRec.ProjDescription,
DtCreated = currRec.DtCreated,
//DtLastAction = currRec.DtLastAction,
//DtSchedule = currRec.DtSchedule,
//DtStartProd = currRec.DtStartProd,
ListName = currRec.ListName,
//ProcTimeEst = currRec.ProcTimeEst,
//ProcTimeReal = currRec.ProcTimeReal,
IsActive = currRec.IsActive,
IsArchived = currRec.IsArchived
};
return answ;
}
/// <summary>
/// Search for already imported BTL from FileName (only)
/// =0 : NOT found &gt;0 : ProjId (already present) for overwrite
/// =0 : NOT found &gt;0 : ProdId (already present) for overwrite
/// </summary>
/// <param name="BTLFileName"></param>
/// <returns></returns>
@@ -33,6 +100,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
var dbResult = localDbCtx
.ProjList
.Where(x => x.BTLFileName == BTLFileName)
//valutare se usare solo attivi...
//.Where(x => x.BTLFileName == BTLFileName && x.IsActive == true)
.FirstOrDefault();
//se avesse trovato-- > riporto id...
@@ -45,11 +114,27 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
/// <summary>
/// Delete Proj on DB by ProjId
/// Helper conversione modelli
/// </summary>
/// <param name="currRec">record in formato ProjModel</param>
/// <returns></returns>
public Core.ProjFileM ConvToCore(ProjModel currRec)
{
Core.ProjFileM answ = null;
if (currRec != null)
{
answ = Core.ProjFileM.CreateProjFileM(currRec.ProjId, ProdIdByProdDbId(currRec.ProdDbId), currRec.DtCreated, currRec.DtExported, currRec.ListName, currRec.BTLFileName, currRec.ProjDescription, currRec.IsNew, currRec.Locked, currRec.PType, currRec.Machine, currRec.IsActive, currRec.IsArchived, currRec.ProjCloudId);
}
return answ;
}
/// <summary>
/// Delete Proj logically / on DB by ProdId
/// </summary>
/// <param name="ProjId"></param>
/// <param name="IsLogical"></param>
/// <returns></returns>
public bool DeleteProj(int ProjId)
public bool DeleteProj(int ProjId, bool IsLogical)
{
bool done = false;
@@ -59,25 +144,45 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.ProjList
.Where(x => x.ProjId == ProjId)
.SingleOrDefault();
// sel delle BTLParts da proj
var parts2del = localDbCtx
.BTLPartList
.Where(x => x.ProjDbId == currProj.ProjDbId);
try
if (IsLogical)
{
// remove from database
localDbCtx.BTLPartList.RemoveRange(parts2del);
localDbCtx.ProjList.Remove(currProj);
// Commit changes
localDbCtx.SaveChanges();
done = true;
try
{
currProj.IsActive = false;
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Proj.DeleteProj (logical only): {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
catch (Exception exc)
else
{
string errMessage = $"EXCEPTION on Proj.DeleteProj: {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
// sel delle BTLParts da proj
var parts2del = localDbCtx
.BTLPartList
.Where(x => x.ProjDbId == currProj.ProjDbId);
try
{
// remove from database
localDbCtx.BTLPartList.RemoveRange(parts2del);
localDbCtx.ProjList.Remove(currProj);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Proj.DeleteProj (on DB): {Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
}
return done;
@@ -91,8 +196,9 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Get records filtered by BtlPartName matching regexp BtlFileName[_number]
/// </summary>
/// <param name="BtlFileName">Base name to search for (=starts by BtlFileName%)</param>
/// <param name="OnlyActive">Solo i record attivi (senza cancellazione logica)</param>
/// <returns></returns>
public List<ProjModel> FindByBtlFileName(string BtlFileName)
public List<ProjModel> FindByBtlFileName(string BtlFileName, bool OnlyActive)
{
List<ProjModel> searchResult = new List<ProjModel>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
@@ -100,7 +206,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// in primi cerco il record "parent" generale, se non ci fosse inutile proseguire...
ProjModel parentRec = localDbCtx
.ProjList
.Where(x => x.BTLFileName == BtlFileName)
.Where(x => x.BTLFileName == BtlFileName && (!OnlyActive || x.IsActive))
.FirstOrDefault();
if (parentRec != null && parentRec.ProjId > 0)
{
@@ -109,7 +215,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// cerco eventuali dati "child" puliti
var childRec = localDbCtx
.ProjList
.Where(x => x.BTLFileName.StartsWith(BtlFileName + "_"))
.Where(x => x.BTLFileName.StartsWith(BtlFileName + "_") && (!OnlyActive || x.IsActive))
.ToList();
// faccio filtro con ricerca regexp x scartare "falsi positivi" come BtlFileName_nonNumero...
if (childRec.Count > 0)
@@ -138,49 +244,59 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <returns></returns>
public ProjModel FindByProjDbId(int ProjDbId)
{
ProjModel answ;
ProjModel answ = new ProjModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
answ = localDbCtx
.ProjList
.Where(x => x.ProjDbId == ProjDbId)
.SingleOrDefault();
try
{
answ = localDbCtx
.ProjList
.Where(x => x.ProjDbId == ProjDbId)
.SingleOrDefault();
}
catch
{ }
}
return answ;
}
/// <summary>
/// Get record by ProjId
/// Get record by ProdId
/// </summary>
/// <param name="ProjId"></param>
/// <returns></returns>
public ProjModel FindByProjId(int ProjId)
{
ProjModel answ;
ProjModel answ = new ProjModel();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
answ = localDbCtx
.ProjList
.Where(x => x.ProjId == ProjId)
.SingleOrDefault();
try
{
answ = localDbCtx
.ProjList
.Where(x => x.ProjId == ProjId)
.SingleOrDefault();
}
catch
{ }
}
return answ;
}
/// <summary>
/// Get record by ProjId converted
/// Get record by ProdId converted
/// </summary>
/// <param name="ProjId"></param>
/// <returns></returns>
public Core.ProjFileM FindByProjIdConv(int ProjId)
{
return coreConv(FindByProjId(ProjId));
return ConvToCore(FindByProjId(ProjId));
}
/// <summary>
/// Get filtered data by ProdId (ASC ordered)
/// </summary>
/// <param name="ProdDbId"></param>
/// <param name="ProdId"></param>
/// <returns></returns>
public List<Core.ProjFileM> GetByProdAsc(int ProdId)
{
@@ -212,7 +328,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.OrderBy(x => x.ProdDbId)
.ToList();
// conversione
answ = dbRes.Select(x => coreConv(x)).ToList();
answ = dbRes.Select(x => ConvToCore(x)).ToList();
}
return answ;
}
@@ -252,7 +368,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
.OrderByDescending(x => x.ProdDbId)
.ToList();
// conversione
answ = dbRes.Select(x => coreConv(x)).ToList();
answ = dbRes.Select(x => ConvToCore(x)).ToList();
}
return answ;
}
@@ -280,9 +396,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// <summary>
/// Elenco progetti
/// </summary>
/// <param name="numRecord"></param>
/// <param name="dtStart">Inizio periodo estrazione (per export date)</param>
/// <param name="dtEnd">Fine periodo estrazione (per export date)</param>
/// <param name="numRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo i record attivi (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProjFileM> GetLastDesc(int numRecord)
public List<Core.ProjFileM> GetLastByExpDesc(DateTime dtStart, DateTime dtEnd, int numRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProjFileM> answ = new List<Core.ProjFileM>();
@@ -296,11 +416,76 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// retrieve
var dbRes = localDbCtx
.ProjList
.Where(x => (!x.IsArchived || ShowArchived) && (x.DtExported >= dtStart && x.DtExported <= dtEnd) && (!OnlyActive || x.IsActive))
.OrderByDescending(x => x.ProjId)
.Take(numRecord)
.ToList();
// conversione
answ = dbRes.Select(x => coreConv(x)).ToList();
answ = dbRes.Select(x => ConvToCore(x)).ToList();
}
return answ;
}
/// <summary>
/// Elenco progetti
/// </summary>
/// <param name="numRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo i record attivi (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProjFileM> GetLastDesc(int numRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProjFileM> answ = new List<Core.ProjFileM>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (numRecord == 0)
{
numRecord = localDbCtx.ProjList.Count();
}
// retrieve
var dbRes = localDbCtx
.ProjList
.Where(x => (!x.IsArchived || ShowArchived) && (!OnlyActive || x.IsActive))
.OrderByDescending(x => x.ProjId)
.Take(numRecord)
.ToList();
// conversione
answ = dbRes.Select(x => ConvToCore(x)).ToList();
}
return answ;
}
/// <summary>
/// Elenco progetti
/// </summary>
/// <param name="dtStart">Inizio periodo estrazione</param>
/// <param name="dtEnd">Fine periodo estrazione</param>
/// <param name="numRecord">Num max record da recuperare</param>
/// <param name="OnlyActive">Solo i record attivi (senza cancellazione logica)</param>
/// <param name="ShowArchived">Se true: mostra anche archiviati (default li nasconde)</param>
/// <returns></returns>
public List<Core.ProjFileM> GetLastDesc(DateTime dtStart, DateTime dtEnd, int numRecord, bool OnlyActive, bool ShowArchived = false)
{
List<Core.ProjFileM> answ = new List<Core.ProjFileM>();
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// se numRecord = 0 --> passo tutti
if (numRecord == 0)
{
numRecord = localDbCtx.ProjList.Count();
}
// retrieve
var dbRes = localDbCtx
.ProjList
.Where(x => (!x.IsArchived || ShowArchived) && (x.DtCreated >= dtStart && x.DtCreated <= dtEnd) && (!OnlyActive || x.IsActive))
.OrderByDescending(x => x.ProjId)
.Take(numRecord)
.ToList();
// conversione
answ = dbRes.Select(x => ConvToCore(x)).ToList();
}
return answ;
}
@@ -341,6 +526,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
{
ProjId = nextId,
BTLFileName = "",
ProjDescription = "",
IsNew = true,
Locked = true,
LockedBy = UserKey,
@@ -354,7 +540,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return nextId;
}
/// <summary> Manage Lock by ProjId (proj & prod) </summary> <param name="ProjId">ID
/// <summary> Manage Lock by ProdId (proj & prod) </summary> <param name="ProjId">ID
/// Proj</param> <param name="Locked">Stato Lock da impostare</param> <param
/// name="UserKey">User ID / Key number</param> <returns></returns>
public Core.ProjFileM LockByProjId(int ProjId, bool Locked, string UserKey = "USER01")
@@ -405,7 +591,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// salvataggio
localDbCtx.SaveChanges();
}
return coreConv(currProj);
return ConvToCore(currProj);
}
/// <summary>
@@ -435,7 +621,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
currProj.IsNew = false;
localDbCtx.SaveChanges();
}
return coreConv(currProj);
return ConvToCore(currProj);
}
/// <summary>
@@ -477,7 +663,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
else
{
string errMessage = $"ERROR on Proj.Update: req item was not found | ProjId {updItem.ProjId} | ProjDbId {updItem.ProjDbId} | ProdDbId {updItem.ProdDbId}";
string errMessage = $"ERROR on Proj.Update: req item was not found | ProdId {updItem.ProjId} | ProjDbId {updItem.ProjDbId} | ProdDbId {updItem.ProdDbId}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
@@ -489,7 +675,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
/// Update record su DB x elenco BTLParts
/// </summary>
/// <param name="ProjId"></param>
/// <param name="newBTLFileName"></param>
/// <param name="BtlPartList"></param>
/// <returns></returns>
public ProjModel UpdateBtlParts(int ProjId, List<Core.BTLPartM> BtlPartList)
{
@@ -569,7 +755,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
else
{
string errMessage = $"ERROR on Proj.UpdateBtlParts: req item was not found | ProjId {ProjId} | BtlPartList {BtlPartList.Count} items";
string errMessage = $"ERROR on Proj.UpdateBtlParts: req item was not found | ProdId {ProjId} | BtlPartList {BtlPartList.Count} items";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
@@ -577,15 +763,62 @@ namespace EgtBEAMWALL.DataLayer.Controllers
return currData;
}
/// <summary>
/// Update record su DB x Description
/// </summary>
/// <param name="ProjId"></param>
/// <param name="Description"></param>
/// <returns></returns>
public Core.ProjFileM UpdateDescription(int ProjId, string Description)
{
// cerco specifico Proj
ProjModel currData;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
currData = localDbCtx
.ProjList
.Where(x => x.ProjId == ProjId)
.SingleOrDefault();
if (currData != null)
{
try
{
// aggiorno valore BTL
currData.ProjDescription = Description;
// Commit changes
localDbCtx.SaveChanges();
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Proj.UpdateDescription:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Proj.UpdateDescription: req item was not found | ProdId {ProjId} | Description {Description}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return ConvToCore(currData);
}
/// <summary>
/// Update record su DB x nomeBTL, ListName, ExportDate
/// </summary>
/// <param name="ProjId"></param>
/// <param name="BTLFileName"></param>
/// <param name="Description"></param>
/// <param name="ListName"></param>
/// <param name="DtExported"></param>
/// <param name="PType"></param>
/// <param name="Machine"></param>
/// <returns></returns>
public Core.ProjFileM UpdateInfo(int ProjId, string BTLFileName, string ListName, DateTime DtExported, BWType PType, string Machine)
public Core.ProjFileM UpdateInfo(int ProjId, string BTLFileName, string Description, string ListName, DateTime DtExported, BWType PType, string Machine)
{
// cerco specifico Proj
ProjModel currData;
@@ -600,15 +833,17 @@ namespace EgtBEAMWALL.DataLayer.Controllers
try
{
// 2022.01.24: verifico UNIVOCITA' nel nome del file: SE fosse duplicato -->
// nuovo nome, nel formato nomeOriginale_idx, dove idx è il contatore libero successivo
var duplicateList = FindByBtlFileName(BTLFileName);
// nuovo nome, nel formato nomeOriginale_idx, dove idx è il contatore libero
// successivo 2023.06.08: lasciato come prima, anche NON attivi
// (cancellazione logica)
var duplicateList = FindByBtlFileName(BTLFileName, false);
// devo verificare SOLO SE la lista non è vuota
if (duplicateList != null && duplicateList.Count > 0)
{
// se ne ho esattamente 1 nel DB allora DEVE essere il record Parent
if (duplicateList.Count == 1)
{
// verifico se ProjId variato
// verifico se ProdId variato
if (!duplicateList[0].ProjId.Equals(currData.ProjId))
{
// in questo caso ho il PRIMO duplicato
@@ -635,6 +870,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// aggiorno valore BTL
currData.BTLFileName = BTLFileName;
// aggiorno il resto
currData.ProjDescription = Description;
currData.DtExported = DtExported;
currData.ListName = ListName;
currData.PType = PType;
@@ -652,13 +889,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
else
{
string errMessage = $"ERROR on Proj.UpdateInfo: req item was not found | ProjId {ProjId} | BTLFileName {BTLFileName} | ListName {ListName} | DtExported {DtExported} | PType {PType} | Machine {Machine}";
string errMessage = $"ERROR on Proj.UpdateInfo: req item was not found | ProdId {ProjId} | Description {BTLFileName} | ListName {ListName} | DtExported {DtExported} | PType {PType} | Machine {Machine}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
return coreConv(currData);
return ConvToCore(currData);
}
/// <summary>
@@ -688,7 +925,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
else
{
string errMessage = $"ERROR on Proj.UpdateListName: req item was not found | ProjId {ProjId} | ListName {ListName}";
string errMessage = $"ERROR on Proj.UpdateListName: req item was not found | ProdId {ProjId} | ListName {ListName}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
@@ -700,7 +937,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
Log.Error(errMessage);
}
}
return coreConv(currData);
return ConvToCore(currData);
}
/// <summary>
@@ -731,7 +968,7 @@ namespace EgtBEAMWALL.DataLayer.Controllers
}
else
{
string errMessage = $"ERROR on Proj.UpdateMachine: req item was not found | ProjId {ProjId} | Machine {Machine}";
string errMessage = $"ERROR on Proj.UpdateMachine: req item was not found | ProdId {ProjId} | Machine {Machine}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
@@ -743,28 +980,13 @@ namespace EgtBEAMWALL.DataLayer.Controllers
Log.Error(errMessage);
}
}
return coreConv(currData);
return ConvToCore(currData);
}
#endregion Public Methods
#region Protected Methods
/// <summary>
/// Helper conversione modelli
/// </summary>
/// <param name="currProj"></param>
/// <returns></returns>
protected Core.ProjFileM coreConv(ProjModel currProj)
{
Core.ProjFileM answ = null;
if (currProj != null)
{
answ = Core.ProjFileM.CreateProjFileM(currProj.ProjId, ProdIdByProdDbId(currProj.ProdDbId), currProj.DtCreated, currProj.DtExported, currProj.ListName, currProj.BTLFileName, currProj.IsNew, currProj.Locked, currProj.PType, currProj.Machine);
}
return answ;
}
/// <summary>
/// Get LAST paginated data from DB (DESC ordered)
/// </summary>
@@ -0,0 +1,352 @@
using EgtBEAMWALL.DataLayer.DatabaseModels;
using EgwProxy.MagMan.DTO;
using NLog;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
namespace EgtBEAMWALL.DataLayer.Controllers
{
/// <summary>
/// Gestione RawItem (barre) su DB (= magazzino locale)
/// </summary>
public class RawItemsController : IDisposable
{
#region Public Constructors
public RawItemsController()
{
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Helper conversion da DB model class a base class (VB)
/// </summary>
/// <param name="dbRec"></param>
/// <returns></returns>
public static Core.RawPartM ConvToCore(RawItemModel dbRec)
{
// converto in primis il materiale relativo
Core.MaterialM matRec = MaterialsController.ConvToCore(dbRec.MaterialNav);
Core.RawPartM answ = new Core.RawPartM(dbRec.RawItemId, matRec, (double)dbRec.WMm, (double)dbRec.LMm, dbRec.QtyAvail, dbRec.UseQty, dbRec.IsActive);
return answ;
}
/// <summary>
/// Helper conversione a ItemDTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static ItemDTO ConvToItemDto(RawItemModel currRec)
{
ItemDTO answ = new ItemDTO()
{
MatCloudId = currRec.MaterialNav != null ? currRec.MaterialNav.MatCloudId : 0,
MatLocalId = currRec.MatId,
RawItemCloudId = currRec.RawItemCloudId,
RawItemLocalId = currRec.RawItemId,
IsRemn = currRec.IsRemn,
QtyAvail = currRec.QtyAvail,
HMm = currRec.HMm,
LMm = currRec.LMm,
WMm = currRec.WMm,
Note = currRec.Note
};
return answ;
}
/// <summary>
/// Helper conversione da ItemDTO
/// </summary>
/// <param name="currRec"></param>
/// <param name="isActive"></param>
/// <returns></returns>
public static RawItemModel ConvToModel(ItemDTO currRec, bool isActive)
{
RawItemModel answ = new RawItemModel()
{
RawItemCloudId = currRec.RawItemCloudId,
RawItemId = currRec.RawItemLocalId,
QtyAvail = currRec.QtyAvail,
HMm = currRec.HMm,
LMm = currRec.LMm,
WMm = currRec.WMm,
MatId = currRec.MatLocalId,
IsRemn = currRec.IsRemn,
IsActive = isActive,
UseQty = true,
Note = currRec.Note
};
return answ;
}
/// <summary>
/// Helper conversione da ResourceExpDTO
/// </summary>
/// <param name="currRec"></param>
/// <param name="matLocalId"></param>
/// <returns></returns>
public static RawItemModel ConvToModel(ResourceExpDTO currRec, int matLocalId)
{
RawItemModel answ = new RawItemModel()
{
RawItemCloudId = currRec.RawItemCloudId,
RawItemId = currRec.RawItemLocalId,
QtyAvail = currRec.Qty,
HMm = currRec.HMm,
LMm = currRec.LMm,
WMm = currRec.WMm,
MatId = matLocalId,
IsRemn = currRec.IsRemn,
IsActive = currRec.IsActive,
UseQty = true,
Note = currRec.Note
};
return answ;
}
/// <summary>
/// Conversion of base class to DB model class
/// </summary>
/// <param name="coreRec"></param>
/// <returns></returns>
public static RawItemModel ConvToModel(Core.RawPartM coreRec)
{
RawItemModel answ = new RawItemModel();
if (coreRec != null)
{
answ = new RawItemModel()
{
RawItemId = coreRec.nId,
MatId = coreRec.Material.nId,
HMm = (decimal)Math.Round(coreRec.Material.dH,2),
LMm = (decimal)Math.Round(coreRec.dL,2),
WMm = coreRec.dW > 0 ? (decimal)Math.Round(coreRec.dW,2) : (decimal)Math.Round(coreRec.Material.dW,2),
IsActive = coreRec.bActive,
UseQty = coreRec.bUseQuantity,
QtyAvail = coreRec.nQuantity
};
}
return answ;
}
/// <summary>
/// Helper conversione a ResourceDTO
/// </summary>
/// <param name="currRec"></param>
/// <returns></returns>
public static ResourceDTO ConvToResDto(RawItemModel currRec)
{
ResourceDTO answ = new ResourceDTO()
{
RawItemCloudId = currRec.RawItemCloudId,
RawItemLocalId = currRec.RawItemId,
Qty = currRec.QtyAvail
};
return answ;
}
///// <summary>
///// Helper conversione a ResourceDTO con garanzia valori Qty negativi
///// </summary>
///// <param name="currRec"></param>
///// <returns></returns>
//public static ResourceDTO ConvToResDtoNeg(RawItemModel currRec)
//{
// ResourceDTO answ = new ResourceDTO()
// {
// RawItemCloudId = currRec.RawItemCloudId,
// RawItemLocalId = currRec.RawItemId,
// Qty = -Math.Abs(currRec.QtyAvail)
// };
// return answ;
//}
/// <summary>
/// Delete by key
/// </summary>
/// <param name="RawItemId"></param>
/// <returns></returns>
public bool DeleteByKey(int RawItemId)
{
bool done = false;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
var items2del = localDbCtx
.RawItemList
.Where(x => x.RawItemId == RawItemId);
try
{
// Add to database
localDbCtx.RawItemList.RemoveRange(items2del);
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on RawItems.DeleteByKey: {Environment.NewLine}{exc}");
}
}
return done;
}
public void Dispose()
{
}
/// <summary>
/// Get record by Key / Core
/// </summary>
/// <param name="RawItemId"></param>
/// <returns></returns>
public Core.RawPartM FindByDbId(int RawItemId)
{
var rawdata = FindByDbIdModel(RawItemId);
var result = ConvToCore(rawdata);
return result;
}
/// <summary>
/// Get record by Key / Db Model
/// </summary>
/// <param name="RawItemId"></param>
/// <returns></returns>
public RawItemModel FindByDbIdModel(int RawItemId)
{
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
return localDbCtx
.RawItemList
.Where(x => x.RawItemId == RawItemId)
.Include(m => m.MaterialNav)
.SingleOrDefault();
}
}
/// <summary>
/// Get Material (filtro x MatId) / Core
/// </summary>
/// <param name="MatId">0 = tutti</param>
/// <returns></returns>
public List<Core.RawPartM> GetFilt(int MatId)
{
var rawList = GetFiltModel(MatId);
var result = rawList.Select(x => ConvToCore(x)).ToList();
return result;
}
/// <summary>
/// Get Material (filtro x MatId)
/// </summary>
/// <param name="MatId">0 = tutti</param>
/// <returns></returns>
public List<RawItemModel> GetFiltModel(int MatId)
{
// retrieve
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
return localDbCtx
.RawItemList
.Include(j => j.MaterialNav)
.Where(x => MatId == 0 || x.MatId == MatId)
.OrderBy(x => x.LMm)
.ThenBy(x => x.WMm)
.ToList();
}
}
/// <summary>
/// Update or insert RawItem record
/// </summary>
/// <param name="updItem">Recorda da registrare</param>
/// <param name="changeUseQty">Indica se, in caso di modifica, vada aggiornato UseQty</param>
/// <param name="changeQtyAvail">Indica se, in caso di modifica, vada aggiornato QtyAvail</param>
/// <returns></returns>
public int Upsert(RawItemModel updItem, bool changeUseQty, bool changeQtyAvail)
{
int newIdx = 0;
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
try
{
var item2update = localDbCtx
.RawItemList
.Where(x => (updItem.RawItemId > 0 && x.RawItemId == updItem.RawItemId)
|| (x.MatId == updItem.MatId && x.WMm == updItem.WMm && x.HMm == updItem.HMm && x.LMm == updItem.LMm))
.SingleOrDefault();
if (item2update != null)
{
//// update, vers 1...
//localDbCtx.Entry(item2update).CurrentValues.SetValues(updItem);\
item2update.RawItemCloudId = updItem.RawItemCloudId;
item2update.HMm = updItem.HMm;
item2update.LMm = updItem.LMm;
item2update.WMm = updItem.WMm;
item2update.IsActive = updItem.IsActive;
item2update.IsRemn = updItem.IsRemn;
if (changeUseQty)
{
item2update.UseQty = updItem.UseQty;
}
if (changeQtyAvail)
{
item2update.QtyAvail = updItem.QtyAvail;
item2update.LastSync = DateTime.Now;
}
localDbCtx.Entry(item2update).State = EntityState.Modified;
}
else
{
localDbCtx.RawItemList.Add(updItem);
}
// Commit changes
localDbCtx.SaveChanges();
if (item2update != null)
{
newIdx = item2update.RawItemId;
}
else
{
newIdx = updItem.RawItemId;
}
}
catch (Exception exc)
{
Log.Error($"EXCEPTION on RawItems.Upsert: {Environment.NewLine}{exc}");
}
}
return newIdx;
}
/// <summary>
/// Update or insert RawItem record from CoreM
/// </summary>
/// <param name="coreItem"></param>
/// <returns></returns>
public int Upsert(Core.RawPartM coreItem)
{
int newIdx = 0;
// converto
RawItemModel updItem = ConvToModel(coreItem);
newIdx = Upsert(updItem, true, true);
return newIdx;
}
#endregion Public Methods
#region Private Fields
/// <summary>
/// Istanza logger
/// </summary>
private NLog.Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}
@@ -136,12 +136,17 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// Initialize database context
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// retrieve
answ = localDbCtx
.StatusMapList
.Where(x => x.Session == Session && x.ItemType == Core.StatusMapItemType.Prod)
.OrderByDescending(x => x.Index)
.ToList();
try
{
// retrieve
answ = localDbCtx
.StatusMapList
.Where(x => x.Session == Session && x.ItemType == Core.StatusMapItemType.Prod)
.OrderByDescending(x => x.Index)
.ToList();
}
catch
{ }
}
return answ;
}
@@ -170,7 +175,37 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// Initialize database context
using (DatabaseContext localDbCtx = new DatabaseContext(DbConfig.CONNECTION_STRING))
{
// aggiungo
// per prima cosa indico come prodotto il PROD...
var currProdData = localDbCtx
.ProdList
.Where(x => x.ProdId == ProdId)
.SingleOrDefault();
if (currProdData != null)
{
try
{
// aggiorno valore descrizione
currProdData.IsProduced = true;
// Commit changes
localDbCtx.SaveChanges();
done = true;
}
catch (Exception exc)
{
string errMessage = $"EXCEPTION on Prod.UpdateProduced:{Environment.NewLine}{exc}";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
}
else
{
string errMessage = $"ERROR on Prod.UpdateProduced: req item was not found | ProdId {ProdId} | IsProduced: true";
Console.WriteLine(errMessage);
Log.Error(errMessage);
}
// resetto done
done = false;
// aggiungo in StatusMap
localDbCtx.StatusMapList.Add(prodSMRecord);
// recupero MachGroup da PROD
@@ -185,8 +220,8 @@ namespace EgtBEAMWALL.DataLayer.Controllers
// salvo
localDbCtx.SaveChanges();
done = true;
}
done = true;
}
return done;
}
+39 -1
View File
@@ -7,6 +7,7 @@ using System.IO;
namespace EgtBEAMWALL.DataLayer
{
#if false
//[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class aMySqlConfiguration : MySqlEFConfiguration
{
@@ -19,7 +20,8 @@ namespace EgtBEAMWALL.DataLayer
}
#endregion Public Constructors
}
}
#endif
[DbConfigurationType(typeof(MySqlEFConfiguration))]
public class DatabaseContext : DbContext
@@ -38,6 +40,21 @@ namespace EgtBEAMWALL.DataLayer
#endregion Public Constructors
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
#if false
// fix valori decimal
modelBuilder.Entity<MaterialModel>().Property(x => x.HMm).HasPrecision(18, 6);
modelBuilder.Entity<MaterialModel>().Property(x => x.LMm).HasPrecision(18, 6);
modelBuilder.Entity<MaterialModel>().Property(x => x.WMm).HasPrecision(18, 6);
modelBuilder.Entity<RawItemModel>().Property(x => x.HMm).HasPrecision(18, 6);
modelBuilder.Entity<RawItemModel>().Property(x => x.LMm).HasPrecision(18, 6);
modelBuilder.Entity<RawItemModel>().Property(x => x.WMm).HasPrecision(18, 6);
#endif
base.OnModelCreating(modelBuilder);
}
#region Public Properties
/// <summary>
@@ -80,6 +97,27 @@ namespace EgtBEAMWALL.DataLayer
/// </summary>
public DbSet<StatusMapModel> StatusMapList { get; set; }
/// <summary>
/// Wharehouse materials management
/// </summary>
public DbSet<MaterialModel> MaterialsList { get; set; }
/// <summary>
/// Wharehouse items management
/// </summary>
public DbSet<RawItemModel> RawItemList { get; set; }
/// <summary>
/// Alias management
/// </summary>
public DbSet<AliasModel> AliasList { get; set; }
/// <summary>
/// Alias management
/// </summary>
public DbSet<MagmanSyncModel> SyncList { get; set; }
#endregion Public Properties
#region Public Methods
@@ -0,0 +1,35 @@
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 EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
[Table("AliasList")]
public class AliasModel
{
/// <summary>
/// Famiglia di sinonimi
/// </summary>
[Column("Family", Order = 1), Key]
public string Family { get; set; } = "";
/// <summary>
/// Codice originale (da trasformare)
/// </summary>
[Column("ValueOriginal", Order = 2), Key]
public string ValueOriginal { get; set; } = "";
/// <summary>
/// Codice Alias in cui viene convertito
/// </summary>
public string ValueAlias { get; set; } = "";
}
}
@@ -16,86 +16,53 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
#region Public Properties
/// <summary>
/// Codice Allarme
/// Chiave primaria evento LOG
/// </summary>
[Column("AlarmCode")]
public string AlarmCode { get; set; } = "";
/// <summary>
/// Data Evento
/// </summary>
[Column("AlarmDtEvent")]
public DateTime AlarmDatetime { get; set; } = DateTime.Now;
/// <summary>
/// Messaggio Allarme
/// </summary>
[Column("AlarmMessage")]
public string AlarmMessage { get; set; } = "";
/// <summary>
/// Alarm Operation
/// </summary>
[Column("AlarmOperation")]
public int AlarmOperation { get; set; } = 0;
/// <summary>
/// Alarm Type
/// </summary>
[Column("AlarmType")]
public int AlarmType { get; set; } = 0;
/// <summary>
/// Esaecuzione comando corretta
/// </summary>
[Column("CommExecuted")]
public bool CommandExecutedCorrectly { get; set; } = false;
/// <summary>
/// Stato da enum Core
/// </summary>
[Column("CommandState")]
public Core.ConstMachComm.CommandStates CommandState { get; set; } = Core.ConstMachComm.CommandStates.NULL;
/// <summary>
/// Tipo Comando da enum Core
/// </summary>
[Column("CommandType")]
public Core.ConstMachComm.LogCommandTypes CommandType { get; set; } = Core.ConstMachComm.LogCommandTypes.NULL;
/// <summary>
/// Descrizione
/// </summary>
[Column("Description")]
public string Description { get; set; } = "";
[Key, Column("DbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int LogDbId { get; set; }
/// <summary>
/// New OP State
/// </summary>
[Column("NewOpState")]
public int NewOpState { get; set; } = 0;
/// <summary>
/// Stato da enum Core
/// </summary>
[Column("ResultType")]
public Core.ConstMachComm.ResultTypes ResultType { get; set; } = Core.ConstMachComm.ResultTypes.NULL;
[Column("EvType")]
public Core.MachLog.MachLogTypes EvType { get; set; } = Core.MachLog.MachLogTypes.NULL;
/// <summary>
/// Indirizzo VAR
/// Data Evento
/// </summary>
[Column("VarAddress")]
public string VarAddress { get; set; } = "";
[Column("DtEvent")]
public DateTime DtEvent { get; set; } = DateTime.Now;
/// <summary>
/// Valore VAR
/// Key prod attivo (DB locale)
/// </summary>
[Column("ProdId")]
public int ProdId { get; set; } = 0;
/// <summary>
/// Key progetto (cloud)
/// </summary>
[Column("ProjCloudId")]
public int ProjCloudId { get; set; } = 0;
/// <summary>
/// ID Supervisore (Indirizzo VAR)
/// </summary>
[Column("SupervId")]
public string SupervId { get; set; } = "";
/// <summary>
/// Valore VAR (oggetto del log da decodificare)
/// </summary>
[Column("VarValue")]
public string VarValue { get; set; } = "";
/// <summary>
/// Data di invio evento (su cloud)
/// </summary>
[Column("DtSent")]
public DateTime? DtSent { get; set; } = null;
#endregion Public Properties
}
@@ -0,0 +1,58 @@
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 EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
[Table("MagmanSync")]
public partial class MagmanSyncModel
{
/// <summary>
/// Primary Key AUTO
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SyncId { get; set; }
/// <summary>
/// Tipologia Sync
/// </summary>
public string SyncType { get; set; } = "";
/// <summary>
/// Id riferimento remoto cloud x invio (es ProjCloudId)
/// </summary>
public int CloudId { get; set; } = 0;
/// <summary>
/// DataOra inserimento richiesta
/// </summary>
public DateTime DtReq { get; set; } = DateTime.Now;
/// <summary>
/// DataOra esecuzione richiesta
/// </summary>
public DateTime? DtExe { get; set; } = null;
/// <summary>
/// Payload trasmesso/da trasmettere (serializzato)
/// </summary>
public string Payload { get; set; } = "";
/// <summary>
/// Record inviato se DtExe != null && >= dtReq
/// </summary>
[NotMapped]
public bool Sent
{
get => DtExe != null && DtExe > DtReq;
}
}
}
@@ -0,0 +1,119 @@
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 EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
[Table("MaterialsList")]
public partial class MaterialModel
{
/// <summary>
/// Init classe
/// </summary>
public MaterialModel()
{
RawItemList = new HashSet<RawItemModel>();
}
/// <summary>
/// Primary Key AUTO
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MatId { get; set; }
/// <summary>
/// Codice materiale (Identificativo DB esterno del magazzino in sync)
/// </summary>
public int MatCloudId { get; set; } = 0;
/// <summary>
/// Codice Materiale
/// </summary>
public string MatCode { get; set; } = "";
/// <summary>
/// Descrizione Materiale
/// </summary>
public string MatDesc { get; set; } = "";
/// <summary>
/// Lenght/Lunghezza in mm
/// </summary>
public decimal LMm { get; set; } = 0;
/// <summary>
/// Width/Larghezza in mm
/// </summary>
public decimal WMm { get; set; } = 0;
/// <summary>
/// Height (Thikness/Spessore) in mm
/// </summary>
public decimal HMm { get; set; } = 0;
/// <summary>
/// ID dell'ultimo articolo (variante) usato per il materiale
/// </summary>
public int RawItemIdLast { get; set; } = 0;
#if false
/// <summary>
/// Lenght/Lunghezza in inch
/// </summary>
[NotMapped]
public decimal LIn
{
get => Math.Round(LMm / (decimal)25.4, 3);
}
/// <summary>
/// Width/Larghezza in inch
/// </summary>
[NotMapped]
public decimal WIn
{
get => Math.Round(WMm / (decimal)25.4, 3);
}
/// <summary>
/// Height/Altezza (Thikness/Spessore) in inch
/// </summary>
[NotMapped]
public decimal HIn
{
get => Math.Round(HMm / (decimal)25.4, 3);
}
/// <summary>
/// Codice materiale x QR/Datamatrix
/// </summary>
[NotMapped]
public string MatDtmx
{
get => $"MT{MatExtId:00000000}";
}
#endif
/// <summary>
/// Verifica che sia Beam, quando L == 0
/// </summary>
[NotMapped]
public bool IsBeam
{
get => (LMm == 0 && (HMm > 0 && WMm > 0));
}
/// <summary>
/// Verifica che sia Wall, quando W/L == 0
/// </summary>
[NotMapped]
public bool IsWall
{
get => (LMm == 0 && WMm == 0);
}
public virtual ICollection<RawItemModel> RawItemList { get; set; }
}
}
@@ -8,7 +8,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace EgtBEAMWALL.DataLayer.DatabaseModels
{
/// <summary>
/// Tabelal delle singole istsanze prodotte\
/// Tabella delle singole istanze prodotte
/// </summary>
[Table("PartList")]
public class PartModel
@@ -1,13 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using static EgtBEAMWALL.Core.ConstBeam;
namespace EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
/// <summary>
/// Tabella deiu raggruppamenti PROJ in forma di PROD
/// </summary>
@@ -16,12 +17,24 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
{
#region Public Properties
public ProdModel()
{
ProjListNav = new HashSet<ProjModel>();
}
/// <summary>
/// Chiave univoca DB
/// </summary>
[Key, Column("ProdDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProdDbId { get; set; }
[Column("Description")]
public string Description { get; set; } = "";
/// <summary>
/// Data Creazione
/// </summary>
[Index]
[Column("DtCreated")]
public DateTime DtCreated { get; set; }
@@ -37,6 +50,29 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
[Column("Lock")]
public bool Locked { get; set; } = false;
/// <summary>
/// Chiave univoca per EgtBM
/// </summary>
[Column("Id")]
[Index]
public int ProdId { get; set; }
/// <summary>
/// Codice Proj per sync info (Identificativo DB esterno del magazzino in sync)
/// </summary>
public int ProjCloudId { get; set; } = 0;
/// <summary>
/// Tipologia del progetto (Travi, Pareti, ...)
/// </summary>
public BWType PType { get; set; } = BWType.NULL;
/// <summary>
/// Macchina
/// </summary>
[Column("Machine")]
public string Machine { get; set; } = "";
/// <summary>
/// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete
/// </summary>
@@ -50,27 +86,30 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
public DateTime LockDate { get; set; } = DateTime.MinValue;
/// <summary>
/// Macchina
/// Record attivo (se false == cancellazione logica)
/// </summary>
[Column("Machine")]
public string Machine { get; set; } = "";
[Index]
[Column("IsActive")]
public bool IsActive { get; set; } = true;
/// <summary>
/// Chiave univoca DB
/// Stato Prodotto = inviato ALMENO UNA VOLTA al supervisore --> NON eliminabile se non in modo logico
/// </summary>
[Key, Column("ProdDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProdDbId { get; set; }
[Index]
[Column("IsProduced")]
public bool IsProduced { get; set; } = false;
/// <summary>
/// chiave univoca per EgtBM
/// Stato Archiviato = NON visualizzabile normalmente, già prodotto
/// </summary>
[Column("Id")]
public int ProdId { get; set; }
[Index]
[Column("IsArchived")]
public bool IsArchived { get; set; } = false;
/// <summary>
/// Tipologia del progetto (Travi, Pareti, ...)
/// Collezione oggetti Proj associati (almeno 1 by design)
/// </summary>
public BWType PType { get; set; } = BWType.NULL;
public virtual ICollection<ProjModel> ProjListNav { get; set; }
#endregion Public Properties
}
@@ -1,13 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using static EgtBEAMWALL.Core.ConstBeam;
namespace EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
/// <summary>
/// Tabella dei PROJ caricati dal BTL
/// </summary>
@@ -16,6 +16,9 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
{
#region Public Properties
[Key, Column("ProjDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProjDbId { get; set; }
[Column("BTLFileName")]
public string BTLFileName { get; set; } = "";
@@ -23,17 +26,20 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
/// Data Creazione
/// </summary>
[Column("DtCreated")]
[Index]
public DateTime DtCreated { get; set; }
/// <summary>
/// Data Esportazione
/// </summary>
[Column("DtExported")]
[Index]
public DateTime DtExported { get; set; }
/// <summary>
/// Stato NEW = creato ma NON salvato
/// </summary>
[Index]
[Column("IsNew")]
public bool IsNew { get; set; } = true;
@@ -49,17 +55,25 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
[Column("Lock")]
public bool Locked { get; set; } = false;
/// <summary>
/// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockedBy")]
public string LockedBy { get; set; } = "";
[Column("ProdDbId")]
public int? ProdDbId { get; set; }
/// <summary>
/// DataOra ultima operazione di Lock (o di rimozione di lock), quando aperto da un dispositivo in rete
/// ID da modello ext
/// </summary>
[Column("LockDate")]
public DateTime LockDate { get; set; } = DateTime.MinValue;
[Column("Id")]
[Index]
public int ProjId { get; set; }
/// <summary>
/// Codice Proj per sync info (Identificativo DB esterno del magazzino in sync)
/// </summary>
public int ProjCloudId { get; set; } = 0;
/// <summary>
/// Tipologia del progetto (Travi, Pareti, ...)
/// </summary>
public BWType PType { get; set; } = BWType.NULL;
/// <summary>
/// Macchina
@@ -67,22 +81,40 @@ namespace EgtBEAMWALL.DataLayer.DatabaseModels
[Column("Machine")]
public string Machine { get; set; } = "";
[ForeignKey("ProdDbId")]
public virtual ProdModel Prod { get; set; }
[Column("ProdDbId")]
public int? ProdDbId { get; set; }
[Key, Column("ProjDbId"), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ProjDbId { get; set; }
[Column("Id")]
public int ProjId { get; set; }
/// <summary>
/// ID utente che ha bloccato (NumKey), quando aperto da un dispositivo in rete
/// </summary>
[Column("LockedBy")]
public string LockedBy { get; set; } = "";
/// <summary>
/// Tipologia del progetto (Travi, Pareti, ...)
/// DataOra ultima operazione di Lock (o di rimozione di lock), quando aperto da un
/// dispositivo in rete
/// </summary>
public BWType PType { get; set; } = BWType.NULL;
[Column("LockDate")]
public DateTime LockDate { get; set; } = DateTime.MinValue;
/// <summary>
/// Record attivo (se false == cancellazione logica)
/// </summary>
[Index]
[Column("IsActive")]
public bool IsActive { get; set; } = true;
/// <summary>
/// Descrizione progetto (copiata da BTLFileName inizialmente)
/// </summary>
[Column("ProjDescription")]
public string ProjDescription { get; set; } = "";
/// <summary>
/// Stato Archiviato = NON visualizzabile normalmente, già prodotto
/// </summary>
[Index]
[Column("IsArchived")]
public bool IsArchived { get; set; } = false;
[ForeignKey("ProdDbId")]
public virtual ProdModel Prod { get; set; }
#endregion Public Properties
}
@@ -0,0 +1,124 @@
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 EgtBEAMWALL.DataLayer.DatabaseModels
{
// <Auto-Generated>
// This is here so CodeMaid doesn't reorganize this document
// </Auto-Generated>
//[Index(nameof(Installazione), nameof(Active), nameof(DiskStatus))]
[Table("RawItemList")]
public partial class RawItemModel
{
/// <summary>
/// Primary Key AUTO
/// </summary>
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int RawItemId { get; set; }
/// <summary>
/// Codice RawMat univoco e in sync (Identificativo DB esterno del magazzino in sync)
/// </summary>
public int RawItemCloudId { get; set; } = 0;
/// <summary>
/// ForeignKey Materiale
/// </summary>
public int MatId { get; set; } = 0;
/// <summary>
/// Qty available on wharehouse
/// </summary>
public int QtyAvail { get; set; } = 0;
/// <summary>
/// Active/ = can be used
/// </summary>
public bool IsActive { get; set; } = false;
/// <summary>
/// Remnant
/// </summary>
public bool IsRemn { get; set; } = false;
/// <summary>
/// Item's Lenght
/// </summary>
public decimal LMm { get; set; } = 0;
/// <summary>
/// Item's Width
/// </summary>
public decimal WMm { get; set; } = 0;
/// <summary>
/// Item's Height (Thikness/Spessore) in mm
/// </summary>
public decimal HMm { get; set; } = 0;
/// <summary>
/// Note (optional)
/// </summary>
public string Note { get; set; } = "";
/// <summary>
/// Indica se debba usare qty effettiva o indefinita (x nesting/schedulazione a capacita illimitata)
/// </summary>
public bool UseQty { get; set; } = false;
/// <summary>
/// DataOra ultimo aggiornamento dal cloud dei dati (in particolare giacenza)
/// </summary>
public DateTime LastSync { get; set; } = DateTime.Today.AddYears(-10);
#if false
[NotMapped]
public decimal LIn
{
get => Math.Round(LMm / (decimal)25.4, 3);
}
[NotMapped]
public decimal WIn
{
get => Math.Round(WMm / (decimal)25.4, 3);
}
[NotMapped]
public decimal HIn
{
get => Math.Round(HMm / (decimal)25.4, 3);
}
[NotMapped]
public decimal Area
{
get => LMm * WMm;
}
[NotMapped]
public string ItemDtmx
{
get
{
string answ = $"MT99999999-{LMm * 1000:00000000}";
if (MaterialNav != null)
{
answ = $"MT{MaterialNav.MatExtId:00000000}-{LMm * 1000:00000000}";
}
return answ;
}
}
#endif
/// <summary>
/// Navigation property to Material
/// </summary>
[ForeignKey("MatId")]
public virtual MaterialModel MaterialNav { get; set; }
}
}
+144 -22
View File
@@ -1,7 +1,10 @@
using System.Diagnostics;
using Ionic.Zip;
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml.Linq;
namespace EgtBEAMWALL.DataLayer
{
@@ -18,20 +21,38 @@ namespace EgtBEAMWALL.DataLayer
public static string DATABASE_SERV = "127.0.0.1";
public static string DATABASE_USER = "EgtUser";
public static string ZIP_PWD = "viacremasca-viacremasca-viacremasca-viacremasca";
#endregion Public Fields
#region Public Properties
/// <summary>
/// DB Connection string per azioni amministrative
/// DB Connection string per azioni amministrative:
/// aggiunto parametro "allow user variables", da https://forums.mysql.com/read.php?38,609672,610320#msg-610320
/// </summary>
public static string ADMIN_CONNECTION_STRING { get; set; } = "";
/// <summary>
/// DB Connection string
/// DB Connection string, per effettuare migration riportare valore connessione admin cablato
/// DB Manu: server=localhost;port=3306;database=EgtBwDb_000102;uid=root;pwd=Egalware_24068!;
/// DB Sam: server=localhost;port=3306;database=EgtBwDb_000470;uid=root;pwd=Egalware_24068!;
/// DB Lovato: server=localhost;port=3306;database=EgtBwDb_000656;uid=root;pwd=Egalware_24068!;
///
/// DB RETE Lovato: server=mdb.ufficio;port=3306;database=EgtBwDb_000656;uid=steamware;pwd=Egalware_24068!;
/// DB TET corelocal: server=corelocal.egalware.com;port=3306;database=EgtBwDb_000999;uid=steamware;pwd=Egalware_24068!;
/// </summary>
public static string CONNECTION_STRING { get; set; } = "";
//public static string CONNECTION_STRING { get; set; } = "server=localhost;port=3306;database=EgtBwDb_000470;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=localhost;port=3306;database=EgtBwDb_000656;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=corelocal.egalware.com;port=3306;database=EgtBwDb_000656;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=mdb.ufficio;port=3306;database=EgtBwDb_000656;uid=steamware;pwd=Egalware_24068!;allow user variables=true";
public static string CONNECTION_STRING { get; set; } = "server=localhost;port=3306;database=EgtBwDb_000656;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=localhost;port=3306;database=EgtBwDb_000102;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=localhost;port=3306;database=EgtBwDb_000999;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=corelocal.egalware.com;port=3306;database=EgtBwDb_000999;uid=root;pwd=Egalware_24068!;allow user variables=true";
//public static string CONNECTION_STRING { get; set; } = "server=mdb.ufficio;port=3306;database=EgtBwDb_000999;uid=steamware;pwd=Egalware_24068!;allow user variables=true";
#endregion Public Properties
@@ -69,38 +90,139 @@ namespace EgtBEAMWALL.DataLayer
/// <returns></returns>
public static bool CheckViews(string nKey, string sKey)
{
// esecuzione script di install locale
return Controllers.DbController.man.refreshViews(DATABASE_NAME);
return false;
// commento, scambiare con migrations da file?!?
//// esecuzione script di install locale
//return Controllers.DbController.man.refreshViews(DATABASE_NAME);
}
/// <summary>
/// Effettua DUMP del DB dato utente admin + percorso salvataggio
/// Effettua DUMP del DB dato utente admin + percorso salvataggio (zip cifrato)
/// </summary>
/// <param name="outFilePath">Percorso di salvataggio del dump (*.sql)</param>
/// <param name="zipFilePath">Percorso di salvataggio del dump (*.zip)</param>
/// <param name="dbName">Nome del DB da processare (se vuoto quello di default calcolato)</param>
/// <param name="mysqlDumpPath">Nome o Percorso Eseguibile mysqldump (opzionale)</param>
/// <param name="exportOpt">Opzioni in fase di export | default: --add-drop-database --skip-extended-insert --hex-blob</param>
/// <returns></returns>
public static bool DumpDB(string mysqlDumpPath, string outFilePath)
public static bool DataBaseDumpToFile(string zipFilePath, string dbName = "", string mysqlDumpPath = "mysqldump", string exportOpt = "--add-drop-database --skip-extended-insert --hex-blob")
{
bool fatto = false;
// aggiungo sql finale
if (!outFilePath.EndsWith(".sql"))
// fix path eseguibile
if (string.IsNullOrEmpty(mysqlDumpPath))
{
outFilePath = $"{outFilePath}.sql";
mysqlDumpPath = "mysqldump";
}
if (string.IsNullOrEmpty(dbName))
{
dbName = DATABASE_NAME;
}
// verifica zip finale
if (!zipFilePath.EndsWith(".zip"))
{
zipFilePath = $"{zipFilePath}.zip";
}
// creo nome file per export sql (temporaneo)
string tempSqlPath = zipFilePath.Replace(".zip", ".sql");
// esecuzione script x dump del DB
string dirPath = Path.GetDirectoryName(outFilePath);
string dirPath = Path.GetDirectoryName(zipFilePath);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
// se ci fosse già file elimino...
if (File.Exists(outFilePath))
// se ci fosse già file elimino (sql/zip)
if (File.Exists(tempSqlPath))
{
File.Delete(outFilePath);
File.Delete(tempSqlPath);
}
// chiamo script esterno...
string callScript = $"\"{mysqlDumpPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} {DATABASE_NAME} > {outFilePath}";
if (File.Exists(zipFilePath))
{
File.Delete(zipFilePath);
}
// 2024.06.28 aggiunto --hex-blob x dati binary
// creazione SQL, tramite script esterno... importante parametro "--skip-extended-insert" altrimenti problemi con restore (anche se + verboso e lento in backup...)
string callScript = $"\"{mysqlDumpPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} --databases {dbName} {exportOpt} > {tempSqlPath}";
ExecuteCommand(callScript);
// compressione con pwd!
using (ZipFile zip = new ZipFile())
{
// non paiono necessarie x ripristino
//zip.CompressionMethod = CompressionMethod.BZip2;
//zip.UseUnicodeAsNecessary = true;
// aggiungo pwd
zip.Password = ZIP_PWD;
// inserisco file
zip.AddFile(tempSqlPath, "");
zip.Save(zipFilePath);
fatto = true;
}
// elimino file sql temporaneo...
if (File.Exists(tempSqlPath))
{
File.Delete(tempSqlPath);
}
return fatto;
}
/// <summary>
/// Effettua restore come overwrite del DB di DEFAULT... irreversibile
/// </summary>
/// <param name="zipFilePath">Percorso di lettura del dump cifrato (*.zip)</param>
/// <param name="dbName">Nome del DB da processare (se vuoto quello di default calcolato)</param>
/// <param name="tempFolder">Percorso cartella temp x esecuzione</param>
/// <param name="mysqlPath">Nome o Percorso Eseguibile mysql (opzionale)</param>
/// <param name="importOpt">Opzioni in fase di import (default: --force)</param>
/// <returns></returns>
public static bool DataBaseRestoreFromFile(string zipFilePath, string dbName = "", string tempFolder="", string mysqlPath = "mysql", string importOpt = "--force")
{
bool fatto = false;
// fix path eseguibile
if (string.IsNullOrEmpty(mysqlPath))
{
mysqlPath = "mysql";
}
if (string.IsNullOrEmpty(dbName))
{
dbName = DATABASE_NAME;
}
if (string.IsNullOrEmpty(tempFolder))
{
tempFolder = "C:\\Temp";
}
// verifica zip finale
if (!zipFilePath.EndsWith(".zip"))
{
zipFilePath = $"{zipFilePath}.zip";
}
// elimino eventuale temp folder precedente...
if (Directory.Exists(tempFolder))
{
Directory.Delete(tempFolder, true);
}
Directory.CreateDirectory(tempFolder);
// scompatto file zip --> sql
using (ZipFile zip = ZipFile.Read(zipFilePath))
{
zip.Password = ZIP_PWD;
zip.ExtractAll(tempFolder, ExtractExistingFileAction.OverwriteSilently);
}
// verifico che ci sia 1 file sql...
var sqlFiles = Directory.GetFiles(tempFolder, "*.sql");
if (sqlFiles != null && sqlFiles.Length == 1)
{
// verifico nome file per export sql (temporaneo)
string tempSqlPath = sqlFiles.FirstOrDefault();
// chiamo script esterno...
string callScript = $"\"{mysqlPath}\" -u{DATABASE_USER} -p{DATABASE_PWD} {importOpt} {dbName} < {tempSqlPath}";
ExecuteCommand(callScript);
// elimino il file sql importato...
File.Delete(tempSqlPath);
// elimino temp folder...
Directory.Delete(tempFolder, true);
fatto = true;
}
return fatto;
}
/// <summary>
/// Esecuzione di un comando esterno
/// </summary>
@@ -134,13 +256,12 @@ namespace EgtBEAMWALL.DataLayer
process.Close();
}
/// <summary>
/// Metodo di init standard per DB in rete con Master_Key
/// </summary>
/// <param name="server">Indirizzo del server (tipicamente indirizzo di rete)</param>
/// <param name="nKey">Numero chiave</param>
/// <param name="sKey">Codice/pwd associato a chaive</param>
/// <param name="sKey">Codice/pwd associato a chiave</param>
/// <param name="masterKey">Numero di chiave master con cui è creato il DB</param>
public static void InitDb(string server, string nKey, string sKey, string masterKey = "")
{
@@ -150,9 +271,10 @@ namespace EgtBEAMWALL.DataLayer
DATABASE_NAME = $"EgtBwDb_{masterKey}";
DATABASE_USER = $"user_{nKey}";
DATABASE_PWD = $"pwd_{sKey}";
CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database={DATABASE_NAME};uid={DATABASE_USER};pwd={DATABASE_PWD};SslMode=None";
ZIP_PWD = $"{DATABASE_USER}:{DATABASE_PWD}:{DATABASE_USER}:{DATABASE_PWD}";
CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database={DATABASE_NAME};uid={DATABASE_USER};pwd={DATABASE_PWD};SslMode=None;allow user variables=true";
// stringa admin con utente root egalware...
ADMIN_CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database=mysql;uid=root;pwd=Egalware_24068!;SslMode=none;CHARSET=utf8";
ADMIN_CONNECTION_STRING = $"server={DATABASE_SERV};port=3306;database=mysql;uid=root;pwd=Egalware_24068!;SslMode=none;CHARSET=utf8;allow user variables=true";
}
/// <summary>
@@ -37,44 +37,62 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
<HintPath>..\packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
<Reference Include="BouncyCastle.Cryptography, Version=2.0.0.0, Culture=neutral, PublicKeyToken=072edcf4a5328938, processorArchitecture=MSIL">
<HintPath>..\packages\BouncyCastle.Cryptography.2.4.0\lib\net461\BouncyCastle.Cryptography.dll</HintPath>
</Reference>
<Reference Include="DotNetZip, Version=1.16.0.0, Culture=neutral, PublicKeyToken=6583c7c814667745, processorArchitecture=MSIL">
<HintPath>..\packages\DotNetZip.1.16.0\lib\net40\DotNetZip.dll</HintPath>
</Reference>
<Reference Include="EgtWPFLib5">
<HintPath>..\ExtLibs\EgtWPFLib5.dll</HintPath>
</Reference>
<Reference Include="EgwProxy.MagMan, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\EgwProxy.MagMan.1.0.2406.2911\lib\EgwProxy.MagMan.dll</HintPath>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.4.4\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="Google.Protobuf, Version=3.21.9.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Protobuf.3.21.9\lib\net45\Google.Protobuf.dll</HintPath>
<Reference Include="Google.Protobuf, Version=3.27.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Protobuf.3.27.0\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="K4os.Compression.LZ4, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.1.3.5\lib\net462\K4os.Compression.LZ4.dll</HintPath>
<Reference Include="K4os.Compression.LZ4, Version=1.3.8.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.1.3.8\lib\net462\K4os.Compression.LZ4.dll</HintPath>
</Reference>
<Reference Include="K4os.Compression.LZ4.Streams, Version=1.3.5.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.Streams.1.3.5\lib\net462\K4os.Compression.LZ4.Streams.dll</HintPath>
<Reference Include="K4os.Compression.LZ4.Streams, Version=1.3.8.0, Culture=neutral, PublicKeyToken=2186fa9121ef231d, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Compression.LZ4.Streams.1.3.8\lib\net462\K4os.Compression.LZ4.Streams.dll</HintPath>
</Reference>
<Reference Include="K4os.Hash.xxHash, Version=1.0.8.0, Culture=neutral, PublicKeyToken=32cd54395057cec3, processorArchitecture=MSIL">
<HintPath>..\packages\K4os.Hash.xxHash.1.0.8\lib\net462\K4os.Hash.xxHash.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.8.0.21\lib\net452\MySql.Data.dll</HintPath>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="MySql.Data.EntityFramework, Version=8.0.21.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.EntityFramework.8.0.21\lib\net452\MySql.Data.EntityFramework.dll</HintPath>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.1, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.1\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=8.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.8.4.0\lib\net462\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="MySql.Data.EntityFramework, Version=8.4.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.EntityFramework.8.4.0\lib\net462\MySql.Data.EntityFramework.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<HintPath>..\packages\NLog.5.0.1\lib\net46\NLog.dll</HintPath>
<HintPath>..\packages\NLog.5.3.2\lib\net46\NLog.dll</HintPath>
</Reference>
<Reference Include="Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
<HintPath>..\packages\SSH.NET.2016.1.0\lib\net40\Renci.SshNet.dll</HintPath>
<Reference Include="Renci.SshNet, Version=2024.0.0.0, Culture=neutral, PublicKeyToken=1cee9f8bde3db106, processorArchitecture=MSIL">
<HintPath>..\packages\SSH.NET.2024.0.0\lib\net462\Renci.SshNet.dll</HintPath>
</Reference>
<Reference Include="RestSharp, Version=111.2.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.111.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">
@@ -83,18 +101,25 @@
<Reference Include="System.ComponentModel" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Configuration.ConfigurationManager, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Configuration.ConfigurationManager.8.0.0\lib\net462\System.Configuration.ConfigurationManager.dll</HintPath>
</Reference>
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=8.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.IO.Pipelines, Version=5.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll</HintPath>
<Reference Include="System.IO.Pipelines, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Pipelines.8.0.0\lib\net462\System.IO.Pipelines.dll</HintPath>
</Reference>
<Reference Include="System.Management" />
<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.Net.Http" />
<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>
@@ -105,24 +130,40 @@
<Reference Include="System.Security" />
<Reference Include="System.ServiceModel" />
<Reference Include="System.ServiceProcess" />
<Reference Include="System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=8.0.0.3, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.8.0.3\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.Transactions" />
<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.Xml" />
<Reference Include="Ubiety.Dns.Core, Version=2.2.1.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.8.0.21\lib\net452\Ubiety.Dns.Core.dll</HintPath>
</Reference>
<Reference Include="Zstandard.Net, Version=1.1.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.8.0.21\lib\net452\Zstandard.Net.dll</HintPath>
<Reference Include="ZstdSharp, Version=0.8.1.0, Culture=neutral, PublicKeyToken=8d151af33a4ad5cf, processorArchitecture=MSIL">
<HintPath>..\packages\ZstdSharp.Port.0.8.1\lib\net462\ZstdSharp.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="AdminContext.cs" />
<Compile Include="Controllers\MagmanSyncController.cs" />
<Compile Include="Controllers\MagmanController.cs" />
<Compile Include="Controllers\AliasController.cs" />
<Compile Include="Controllers\RawItemsController.cs" />
<Compile Include="Controllers\MaterialsController.cs" />
<Compile Include="DatabaseModels\AliasModel.cs" />
<Compile Include="DatabaseModels\MagmanSyncModel.cs" />
<Compile Include="DatabaseModels\MaterialModel.cs" />
<Compile Include="DatabaseModels\RawItemModel.cs" />
<Compile Include="DatabaseModels\UserPrivModel.cs" />
<Compile Include="DbConfig.cs" />
<Compile Include="Controllers\LogMachineController.cs" />
@@ -172,6 +213,66 @@
<Compile Include="Migrations\202207051703296_UpgradeLockModel.designer.cs">
<DependentUpon>202207051703296_UpgradeLockModel.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202306081452095_UpdateProjModel.cs" />
<Compile Include="Migrations\202306081452095_UpdateProjModel.designer.cs">
<DependentUpon>202306081452095_UpdateProjModel.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202308241516227_AddProdStatusVarAndIndex.cs" />
<Compile Include="Migrations\202308241516227_AddProdStatusVarAndIndex.designer.cs">
<DependentUpon>202308241516227_AddProdStatusVarAndIndex.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202308250853396_AddProjArchivedField.cs" />
<Compile Include="Migrations\202308250853396_AddProjArchivedField.designer.cs">
<DependentUpon>202308250853396_AddProjArchivedField.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202401181534084_AddAliasMaterialRawItemsModel.cs" />
<Compile Include="Migrations\202401181534084_AddAliasMaterialRawItemsModel.designer.cs">
<DependentUpon>202401181534084_AddAliasMaterialRawItemsModel.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202401291722150_FixMatItemCloudId.cs" />
<Compile Include="Migrations\202401291722150_FixMatItemCloudId.designer.cs">
<DependentUpon>202401291722150_FixMatItemCloudId.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202401310830146_FixItemRemn.cs" />
<Compile Include="Migrations\202401310830146_FixItemRemn.designer.cs">
<DependentUpon>202401310830146_FixItemRemn.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202402141003461_RawItemAddUseQty.cs" />
<Compile Include="Migrations\202402141003461_RawItemAddUseQty.designer.cs">
<DependentUpon>202402141003461_RawItemAddUseQty.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202402290716188_AddProjCloudId.cs" />
<Compile Include="Migrations\202402290716188_AddProjCloudId.Designer.cs">
<DependentUpon>202402290716188_AddProjCloudId.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202403120645357_RawItemAddLastSync.cs" />
<Compile Include="Migrations\202403120645357_RawItemAddLastSync.Designer.cs">
<DependentUpon>202403120645357_RawItemAddLastSync.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202403120803297_AddMagmanSyncTab.cs" />
<Compile Include="Migrations\202403120803297_AddMagmanSyncTab.Designer.cs">
<DependentUpon>202403120803297_AddMagmanSyncTab.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202404261445205_UpdateLogMachineTable.cs" />
<Compile Include="Migrations\202404261445205_UpdateLogMachineTable.Designer.cs">
<DependentUpon>202404261445205_UpdateLogMachineTable.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202404261505131_UpdateLogMachineTable02.cs" />
<Compile Include="Migrations\202404261505131_UpdateLogMachineTable02.Designer.cs">
<DependentUpon>202404261505131_UpdateLogMachineTable02.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202404290906337_UpdateLogMachineTable03.cs" />
<Compile Include="Migrations\202404290906337_UpdateLogMachineTable03.Designer.cs">
<DependentUpon>202404290906337_UpdateLogMachineTable03.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202404291620416_UpdateLogMachineTable04.cs" />
<Compile Include="Migrations\202404291620416_UpdateLogMachineTable04.Designer.cs">
<DependentUpon>202404291620416_UpdateLogMachineTable04.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202406070826284_AddStoredProc01.cs" />
<Compile Include="Migrations\202406070826284_AddStoredProc01.Designer.cs">
<DependentUpon>202406070826284_AddStoredProc01.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils.cs" />
@@ -211,6 +312,56 @@
<EmbeddedResource Include="Migrations\202207051703296_UpgradeLockModel.resx">
<DependentUpon>202207051703296_UpgradeLockModel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202306081452095_UpdateProjModel.resx">
<DependentUpon>202306081452095_UpdateProjModel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202308241516227_AddProdStatusVarAndIndex.resx">
<DependentUpon>202308241516227_AddProdStatusVarAndIndex.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202308250853396_AddProjArchivedField.resx">
<DependentUpon>202308250853396_AddProjArchivedField.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202401181534084_AddAliasMaterialRawItemsModel.resx">
<DependentUpon>202401181534084_AddAliasMaterialRawItemsModel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202401291722150_FixMatItemCloudId.resx">
<DependentUpon>202401291722150_FixMatItemCloudId.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202401310830146_FixItemRemn.resx">
<DependentUpon>202401310830146_FixItemRemn.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202402141003461_RawItemAddUseQty.resx">
<DependentUpon>202402141003461_RawItemAddUseQty.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202402290716188_AddProjCloudId.resx">
<DependentUpon>202402290716188_AddProjCloudId.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202403120645357_RawItemAddLastSync.resx">
<DependentUpon>202403120645357_RawItemAddLastSync.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202403120803297_AddMagmanSyncTab.resx">
<DependentUpon>202403120803297_AddMagmanSyncTab.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202404261445205_UpdateLogMachineTable.resx">
<DependentUpon>202404261445205_UpdateLogMachineTable.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202404261505131_UpdateLogMachineTable02.resx">
<DependentUpon>202404261505131_UpdateLogMachineTable02.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202404290906337_UpdateLogMachineTable03.resx">
<DependentUpon>202404290906337_UpdateLogMachineTable03.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202404291620416_UpdateLogMachineTable04.resx">
<DependentUpon>202404291620416_UpdateLogMachineTable04.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202406070826284_AddStoredProc01.resx">
<DependentUpon>202406070826284_AddStoredProc01.cs</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Content Include="SqlScripts\Stored\stp_LogMachineFixPid.sql">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class UpdateProjModel : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(UpdateProjModel));
string IMigrationMetadata.Id
{
get { return "202306081452095_UpdateProjModel"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,20 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class UpdateProjModel : DbMigration
{
public override void Up()
{
AddColumn("dbo.ProjList", "IsActive", c => c.Boolean(nullable: false, defaultValueSql: "1"));
AddColumn("dbo.ProjList", "ProjDescription", c => c.String(unicode: false));
}
public override void Down()
{
DropColumn("dbo.ProjList", "ProjDescription");
DropColumn("dbo.ProjList", "IsActive");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddProdStatusVarAndIndex : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddProdStatusVarAndIndex));
string IMigrationMetadata.Id
{
get { return "202308241516227_AddProdStatusVarAndIndex"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,42 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddProdStatusVarAndIndex : DbMigration
{
public override void Up()
{
AddColumn("dbo.ProdList", "IsActive", c => c.Boolean(nullable: false));
AddColumn("dbo.ProdList", "IsProduced", c => c.Boolean(nullable: false));
AddColumn("dbo.ProdList", "IsArchived", c => c.Boolean(nullable: false));
CreateIndex("dbo.ProjList", "DtCreated");
CreateIndex("dbo.ProjList", "DtExported");
CreateIndex("dbo.ProjList", "IsActive");
CreateIndex("dbo.ProjList", "IsNew");
CreateIndex("dbo.ProjList", "Id");
CreateIndex("dbo.ProdList", "DtCreated");
CreateIndex("dbo.ProdList", "Id");
CreateIndex("dbo.ProdList", "IsActive");
CreateIndex("dbo.ProdList", "IsProduced");
CreateIndex("dbo.ProdList", "IsArchived");
}
public override void Down()
{
DropIndex("dbo.ProdList", new[] { "IsArchived" });
DropIndex("dbo.ProdList", new[] { "IsProduced" });
DropIndex("dbo.ProdList", new[] { "IsActive" });
DropIndex("dbo.ProdList", new[] { "Id" });
DropIndex("dbo.ProdList", new[] { "DtCreated" });
DropIndex("dbo.ProjList", new[] { "Id" });
DropIndex("dbo.ProjList", new[] { "IsNew" });
DropIndex("dbo.ProjList", new[] { "IsActive" });
DropIndex("dbo.ProjList", new[] { "DtExported" });
DropIndex("dbo.ProjList", new[] { "DtCreated" });
DropColumn("dbo.ProdList", "IsArchived");
DropColumn("dbo.ProdList", "IsProduced");
DropColumn("dbo.ProdList", "IsActive");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddProjArchivedField : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddProjArchivedField));
string IMigrationMetadata.Id
{
get { return "202308250853396_AddProjArchivedField"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,20 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddProjArchivedField : DbMigration
{
public override void Up()
{
AddColumn("dbo.ProjList", "IsArchived", c => c.Boolean(nullable: false));
CreateIndex("dbo.ProjList", "IsArchived");
}
public override void Down()
{
DropIndex("dbo.ProjList", new[] { "IsArchived" });
DropColumn("dbo.ProjList", "IsArchived");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddAliasMaterialRawItemsModel : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddAliasMaterialRawItemsModel));
string IMigrationMetadata.Id
{
get { return "202401181534084_AddAliasMaterialRawItemsModel"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,63 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddAliasMaterialRawItemsModel : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.AliasList",
c => new
{
Family = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"),
ValueOriginal = c.String(nullable: false, maxLength: 128, storeType: "nvarchar"),
ValueAlias = c.String(unicode: false),
})
.PrimaryKey(t => new { t.Family, t.ValueOriginal });
CreateTable(
"dbo.MaterialsList",
c => new
{
MatId = c.Int(nullable: false, identity: true),
MatExtId = c.Int(nullable: false),
MatCode = c.String(unicode: false),
MatDesc = c.String(unicode: false),
LMm = c.Decimal(nullable: false, precision: 18, scale: 2),
WMm = c.Decimal(nullable: false, precision: 18, scale: 2),
HMm = c.Decimal(nullable: false, precision: 18, scale: 2),
RawItemIdLast = c.Int(nullable: false),
})
.PrimaryKey(t => t.MatId);
CreateTable(
"dbo.RawItemList",
c => new
{
RawItemId = c.Int(nullable: false, identity: true),
MatId = c.Int(nullable: false),
QtyAvail = c.Int(nullable: false),
IsActive = c.Boolean(nullable: false),
LMm = c.Decimal(nullable: false, precision: 18, scale: 2),
WMm = c.Decimal(nullable: false, precision: 18, scale: 2),
HMm = c.Decimal(nullable: false, precision: 18, scale: 2),
Note = c.String(unicode: false),
})
.PrimaryKey(t => t.RawItemId)
.ForeignKey("dbo.MaterialsList", t => t.MatId, cascadeDelete: true)
.Index(t => t.MatId);
}
public override void Down()
{
DropForeignKey("dbo.RawItemList", "MatId", "dbo.MaterialsList");
DropIndex("dbo.RawItemList", new[] { "MatId" });
DropTable("dbo.RawItemList");
DropTable("dbo.MaterialsList");
DropTable("dbo.AliasList");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class FixMatItemCloudId : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(FixMatItemCloudId));
string IMigrationMetadata.Id
{
get { return "202401291722150_FixMatItemCloudId"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,22 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class FixMatItemCloudId : DbMigration
{
public override void Up()
{
AddColumn("dbo.MaterialsList", "MatCloudId", c => c.Int(nullable: false));
AddColumn("dbo.RawItemList", "RawItemCloudId", c => c.Int(nullable: false));
DropColumn("dbo.MaterialsList", "MatExtId");
}
public override void Down()
{
AddColumn("dbo.MaterialsList", "MatExtId", c => c.Int(nullable: false));
DropColumn("dbo.RawItemList", "RawItemCloudId");
DropColumn("dbo.MaterialsList", "MatCloudId");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class FixItemRemn : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(FixItemRemn));
string IMigrationMetadata.Id
{
get { return "202401310830146_FixItemRemn"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class FixItemRemn : DbMigration
{
public override void Up()
{
AddColumn("dbo.RawItemList", "IsRemn", c => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.RawItemList", "IsRemn");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class RawItemAddUseQty : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(RawItemAddUseQty));
string IMigrationMetadata.Id
{
get { return "202402141003461_RawItemAddUseQty"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class RawItemAddUseQty : DbMigration
{
public override void Up()
{
AddColumn("dbo.RawItemList", "UseQty", c => c.Boolean(nullable: false));
}
public override void Down()
{
DropColumn("dbo.RawItemList", "UseQty");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddProjCloudId : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddProjCloudId));
string IMigrationMetadata.Id
{
get { return "202402290716188_AddProjCloudId"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,20 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddProjCloudId : DbMigration
{
public override void Up()
{
AddColumn("dbo.ProjList", "ProjCloudId", c => c.Int(nullable: false));
AddColumn("dbo.ProdList", "ProjCloudId", c => c.Int(nullable: false));
}
public override void Down()
{
DropColumn("dbo.ProdList", "ProjCloudId");
DropColumn("dbo.ProjList", "ProjCloudId");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class RawItemAddLastSync : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(RawItemAddLastSync));
string IMigrationMetadata.Id
{
get { return "202403120645357_RawItemAddLastSync"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class RawItemAddLastSync : DbMigration
{
public override void Up()
{
AddColumn("dbo.RawItemList", "LastSync", c => c.DateTime(nullable: false, precision: 0, defaultValueSql: "DATE('2000-01-01')"));
}
public override void Down()
{
DropColumn("dbo.RawItemList", "LastSync");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddMagmanSyncTab : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddMagmanSyncTab));
string IMigrationMetadata.Id
{
get { return "202403120803297_AddMagmanSyncTab"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,30 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddMagmanSyncTab : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.MagmanSync",
c => new
{
SyncId = c.Int(nullable: false, identity: true),
SyncType = c.String(unicode: false),
CloudId = c.Int(nullable: false),
DtReq = c.DateTime(nullable: false, precision: 0),
DtExe = c.DateTime(precision: 0),
Payload = c.String(unicode: false),
})
.PrimaryKey(t => t.SyncId);
}
public override void Down()
{
DropTable("dbo.MagmanSync");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class UpdateLogMachineTable : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(UpdateLogMachineTable));
string IMigrationMetadata.Id
{
get { return "202404261445205_UpdateLogMachineTable"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,42 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class UpdateLogMachineTable : DbMigration
{
public override void Up()
{
RenameColumn("dbo.LogMachine", "ResultType", "EvType");
RenameColumn("dbo.LogMachine", "AlarmDtEvent", "DtEvent");
RenameColumn("dbo.LogMachine", "VarAddress", "SupervId");
AddColumn("dbo.LogMachine", "DtSent", c => c.DateTime(nullable: false, precision: 0, defaultValueSql: "DATE('1900-01-01')"));
DropColumn("dbo.LogMachine", "AlarmCode");
DropColumn("dbo.LogMachine", "AlarmMessage");
DropColumn("dbo.LogMachine", "AlarmOperation");
DropColumn("dbo.LogMachine", "AlarmType");
DropColumn("dbo.LogMachine", "CommExecuted");
DropColumn("dbo.LogMachine", "CommandState");
DropColumn("dbo.LogMachine", "CommandType");
DropColumn("dbo.LogMachine", "Description");
DropColumn("dbo.LogMachine", "NewOpState");
}
public override void Down()
{
RenameColumn("dbo.LogMachine", "EvType", "ResultType");
RenameColumn("dbo.LogMachine", "DtEvent", "AlarmDtEvent");
RenameColumn("dbo.LogMachine", "SupervId", "VarAddress");
DropColumn("dbo.LogMachine", "DtSent");
AddColumn("dbo.LogMachine", "NewOpState", c => c.Int(nullable: false));
AddColumn("dbo.LogMachine", "Description", c => c.String(unicode: false));
AddColumn("dbo.LogMachine", "CommandType", c => c.Int(nullable: false));
AddColumn("dbo.LogMachine", "CommandState", c => c.Int(nullable: false));
AddColumn("dbo.LogMachine", "CommExecuted", c => c.Boolean(nullable: false));
AddColumn("dbo.LogMachine", "AlarmType", c => c.Int(nullable: false));
AddColumn("dbo.LogMachine", "AlarmOperation", c => c.Int(nullable: false));
AddColumn("dbo.LogMachine", "AlarmMessage", c => c.String(unicode: false));
AddColumn("dbo.LogMachine", "AlarmCode", c => c.String(unicode: false));
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class UpdateLogMachineTable02 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(UpdateLogMachineTable02));
string IMigrationMetadata.Id
{
get { return "202404261505131_UpdateLogMachineTable02"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class UpdateLogMachineTable02 : DbMigration
{
public override void Up()
{
AlterColumn("dbo.LogMachine", "DtSent", c => c.DateTime(precision: 0));
}
public override void Down()
{
AlterColumn("dbo.LogMachine", "DtSent", c => c.DateTime(nullable: false, precision: 0));
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class UpdateLogMachineTable03 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(UpdateLogMachineTable03));
string IMigrationMetadata.Id
{
get { return "202404290906337_UpdateLogMachineTable03"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class UpdateLogMachineTable03 : DbMigration
{
public override void Up()
{
AddColumn("dbo.LogMachine", "ProdId", c => c.Int(nullable: false, defaultValue: 0, defaultValueSql: "0"));
}
public override void Down()
{
DropColumn("dbo.LogMachine", "ProdId");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class UpdateLogMachineTable04 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(UpdateLogMachineTable04));
string IMigrationMetadata.Id
{
get { return "202404291620416_UpdateLogMachineTable04"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class UpdateLogMachineTable04 : DbMigration
{
public override void Up()
{
AddColumn("dbo.LogMachine", "ProjCloudId", c => c.Int(nullable: false, defaultValue: 0, defaultValueSql: "0"));
}
public override void Down()
{
DropColumn("dbo.LogMachine", "ProjCloudId");
}
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
// <auto-generated />
namespace EgtBEAMWALL.DataLayer.Migrations
{
using System.CodeDom.Compiler;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
[GeneratedCode("EntityFramework.Migrations", "6.4.4")]
public sealed partial class AddStoredProc01 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(AddStoredProc01));
string IMigrationMetadata.Id
{
get { return "202406070826284_AddStoredProc01"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}

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