Compare commits

...

462 Commits

Author SHA1 Message Date
5103830369 Finish Feature-SteUp
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 18:52:01 +01:00
5056d7e0c8 Merge branch 'develop' into feature/Feature-SteUp 2025-12-12 18:51:57 +01:00
4b5e46de7b varie steup 2025-12-12 18:51:48 +01:00
4d686ee145 Allineamento dati follies group su mtb_aart_anag
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 18:30:40 +01:00
e842326f5b Merge remote-tracking branch 'origin/develop' into develop 2025-12-12 18:30:32 +01:00
63ad11086f Allineamento dati follies group su mtb_aart_anag 2025-12-12 18:30:26 +01:00
21f6fc6717 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 17:43:00 +01:00
8c2789b5f3 modificata in or la condizione dei db format e gestfood per la cancellazione dei duplicati 2025-12-12 17:42:54 +01:00
8f3ef405cf Merge branch 'develop' into feature/Feature-SteUp 2025-12-12 17:15:44 +01:00
76e76dfcf4 aggiunti parametri nella migration
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 17:13:14 +01:00
1df5ad7137 varie steup 2025-12-12 17:00:29 +01:00
a43ca46395 Spostato metodo downloadReportList da refactoring
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 16:06:38 +01:00
a63eba544b Allineamento dati Auricchio, levanplast e agricoper per cambio chiave mtb_aart_anag
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 13:20:49 +01:00
ce912bf103 Allineamento dati Auricchio, levanplast e agricoper per cambio chiave mtb_aart_anag 2025-12-12 13:20:44 +01:00
ababbf6142 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 10:12:20 +01:00
e97fd0aacb inserita nota bio nella dtb_note_doc, associata ai tipi documenti e svuotata setup stampa_documenti per rossogargano 2025-12-12 10:12:09 +01:00
51c1ed1d23 Merge branch 'develop' into feature/Feature-SteUp 2025-12-12 09:59:37 +01:00
a9be8f7003 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-12 09:58:38 +01:00
7522092a12 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-12 09:58:37 +01:00
4dc0174800 Fix su convert mvwSitart to mtbColr 2025-12-12 09:58:32 +01:00
a04b2fa4a1 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 17:14:44 +01:00
04317470c6 creata setup per visualizzare dettaglio su report fatturato agente/clienti 2025-12-11 17:14:35 +01:00
187216dd9f Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 16:46:46 +01:00
e11172a90f Implementato servizio di reset selle posizioni MonoUl 2025-12-11 16:46:35 +01:00
51d5b05bd3 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 16:31:10 +01:00
3a2ceaf217 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 16:31:09 +01:00
c783f69a49 aggiunta setup per esportare 2025-12-11 16:30:22 +01:00
1c8695095b Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 16:06:11 +01:00
fc28af761c creato report personalizzato stampa registri iva per cosmapack 2025-12-11 16:06:02 +01:00
fd4db5ab3b Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 13:12:05 +01:00
f7e1d1f6ca [ROSSOGARGANO]
- fix riposizionamento in posizione monoUl
2025-12-11 13:11:57 +01:00
0b8f82f041 Create nuove utilities
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 12:45:12 +01:00
99680dccd8 Creata nuova utility getMtbUntMisFromCodMart
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 11:21:14 +01:00
e948855fc0 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 10:30:17 +01:00
0854acacfb Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 10:30:16 +01:00
1aba141c9f Aggiunto database tempestadi nei customer db 2025-12-11 10:30:02 +01:00
741cb960d4 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 10:13:39 +01:00
82d7efc00c Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 10:13:39 +01:00
c6c2739525 Aggiunto database tempestadi nei customer db 2025-12-11 10:13:21 +01:00
313bfc21ff Modificato messaggio di errore per documenti già esistente
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-11 09:44:12 +01:00
36f50ad846 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 18:48:18 +01:00
798e5b532e Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 18:48:17 +01:00
c27c96c3d9 Aggiunto parallel stream in retrieve items dalla cache 2025-12-10 18:48:11 +01:00
4e3d15ebd8 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 18:47:37 +01:00
0ba9297f39 Finish Hotfix-1
Some checks failed
IntegryManagementSystem_Multi/pipeline/head Something is wrong with the build of this commit
2025-12-10 18:47:36 +01:00
7c036172d8 Aggiunto parallel stream in retrieve items dalla cache 2025-12-10 18:47:22 +01:00
8afa01d8ef Corretto errore null di Ime quando svuotavano il campo tipo bene
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 17:34:59 +01:00
db1949b5b6 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 16:22:41 +01:00
bb47dd458e Finish FixSavePreventivo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 16:22:40 +01:00
530b6af4ef [CRM] fix completeOrder 2025-12-10 16:20:22 +01:00
92cd4b1af5 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-10 13:35:53 +01:00
6b71d6b784 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 13:35:53 +01:00
de4d8d225f Aggiunto codMart nella richiesta di retrieveGiacenza 2025-12-10 13:35:43 +01:00
671c2e99d0 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:19:31 +01:00
755e7394b4 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:19:31 +01:00
ce06683722 Fix duplicate key su mtbCols 2025-12-10 12:19:11 +01:00
e8a1a8ca0b Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:16:14 +01:00
7a5c024005 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:16:13 +01:00
c82f2a57d8 gestito errore date promo duplicate e sistemata retun dei Thread 2025-12-10 12:13:13 +01:00
78dbf9f7e3 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:01:55 +01:00
b9e863a563 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 12:01:54 +01:00
60e4429c3f [ANOMALIE UL]
- aggiunta eliminazione livello anomalia
2025-12-10 12:01:44 +01:00
d7012d4e1f eliminta conversione caratteri e sistemata data iniz promo 2025-12-10 11:44:10 +01:00
1d52f79337 fix funzione pvm_getassortimentoClientePedane per "ambiguous column name" su cod_Vdes
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 11:20:28 +01:00
0e1adccb7c inserito campo cod_vdes nella mtb_aart_anag e cancellati duplicati su format e gestfood
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 10:33:57 +01:00
fa76a8e92d Merge remote-tracking branch 'origin/develop' into develop
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-12-10 10:33:11 +01:00
9b34a51bd9 inserito campo cod_vdes nella mtb_aart_anag e cancellati duplicati su format e gestfood 2025-12-10 10:32:58 +01:00
b75f7e3810 Finish DatiDocSpostaUL
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 09:57:30 +01:00
4aeccdfa76 Aggiunti dati doc in creazione documento sposta ul 2025-12-10 09:56:42 +01:00
39db8e6e1b Modifica migrations per DMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-10 09:27:37 +01:00
1b87cacca2 aggiunta fk su mtb_unt_mis
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 16:02:09 +01:00
326bd4294e Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 15:03:34 +01:00
6a237ce4d9 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 15:03:33 +01:00
a64932d918 correzioni ad esportazione e importazione dialogo 2025-12-09 15:03:21 +01:00
e887aceaaf Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 14:32:50 +01:00
a15d009f76 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 14:32:50 +01:00
a62f37d930 aggiornamento menu 2025-12-09 14:32:39 +01:00
55f23b2dfc aggiunti campi in importazione articoli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 13:28:33 +01:00
a4a2b34379 Merge branch 'release/Release-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 12:44:05 +01:00
1ef49b87e8 Merge tag 'Release-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
Finish Release-anomalie
2025-12-09 12:44:05 +01:00
f2d67ea89d anomalie merce
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-09 12:43:27 +01:00
fda162d867 esportazione document md
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 18:27:06 +01:00
2008ef0e8f Divisa setup TIPO_MOVIMENTO_FISCALE in TIPO_MOVIMENTO_FISCALE_CAR e TIPO_MOVIMENTO_FISCALE_SCAR
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 18:14:35 +01:00
6d8e0e747f Varie per carelli giacenza, attività integry gramm usa
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 15:19:07 +01:00
5417e28630 Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-05 13:23:42 +01:00
4ac4686645 [ROSSOGARGANO - AnomalieMerce]
- nuova gestione anomalie merce
2025-12-05 13:23:31 +01:00
1594154639 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 11:38:02 +01:00
3a4a954b91 [CRM] fix completeOrder
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-12-05 11:37:53 +01:00
744f92c881 [CARELLI] Aggiunto markDocumentReceived
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 10:58:45 +01:00
6e5f099fc2 aggiunta tabelle equivalenti 2025-12-05 10:51:39 +01:00
697cd58e39 aggiunta tabelle equivalenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 10:09:38 +01:00
4bf1f6021f aggiunta tabelle equivalenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-05 09:41:52 +01:00
118d2d83d5 Fix su query di calcolo fabbisogno linee prod per WMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 17:54:08 +01:00
149bdc36b3 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 13:02:34 +01:00
89c69bc0d2 cambiata la chiave sulla tabella azienda 2025-12-04 13:02:19 +01:00
240f18d19d Fix qta_prod per storico mes
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 13:01:16 +01:00
9a8a144705 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-04 12:13:52 +01:00
2f412f1ad6 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 12:13:52 +01:00
8e8b03889a Creato servizio di create udc with rows 2025-12-04 12:13:47 +01:00
dd4ace59bd Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 11:25:26 +01:00
52c0e0ca61 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 11:25:25 +01:00
e2f2b9bde9 Migliorato check di correttezza barcode_ul per i le UDC anonime 2025-12-04 11:25:21 +01:00
4ea9be84db Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 11:23:04 +01:00
11e4b1cf20 Finish Hotfix-1
Some checks failed
IntegryManagementSystem_Multi/pipeline/head Something is wrong with the build of this commit
2025-12-04 11:23:04 +01:00
a66cfa16d8 Aggiunto check di correttezza barcode_ul per i le UDC anonime 2025-12-04 11:22:59 +01:00
9f628973e9 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 09:25:43 +01:00
9fa7f9628c Finish FixCreateContact
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 09:25:43 +01:00
1a5156d53c Fix creazione attività in createContact crm 2025-12-04 09:25:34 +01:00
ba667fd28e inseriti campi cod_linea, cod_slinea, cod_sslinea nella entity mtb_aart
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-04 08:44:44 +01:00
cddc7f8979 - fix retrieve depositi utente in login
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 16:56:50 +01:00
60c436256e Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-03 15:48:54 +01:00
46449c47b9 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 15:48:53 +01:00
f8b6d3ebe0 aggiunto gramm usa 2025-12-03 15:48:31 +01:00
b3d29219ee Modifica per corretta generazione scadenza di fine mese (febbraio)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 12:14:41 +01:00
2c81a6566b Finish FixNotifyUser
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 12:02:26 +01:00
f697a122b6 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 12:02:26 +01:00
3f4ed16f20 Fix allegato in b64 nella mail 2025-12-03 12:02:13 +01:00
cbbfbb16b8 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 11:38:46 +01:00
585a04ffba Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 11:38:45 +01:00
b025be1bd9 Cambiato response entity in downloadStbEmailContent e downloadJtbDisegniFiles 2025-12-03 11:38:36 +01:00
5453826156 Cambiato response entity allegati fatturazione 2025-12-03 11:36:21 +01:00
8312d48970 Cambiata risposta downloadStbActivityFileAttachment 2025-12-03 11:12:47 +01:00
b50c348528 Cambiato response entity allegati fatturazione 2025-12-03 11:10:42 +01:00
64aeff7bf6 disabilitata setup che chiede se stampare o meno la lettera di quietanza a rossogargano
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-03 09:56:14 +01:00
2a8cf16ce0 Fix localDate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 19:15:05 +01:00
3539e82849 Fix check localDate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 18:52:17 +01:00
f4faa20652 Aggiornata connessione FRUDIS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 17:33:54 +01:00
e7f5959e27 creata migratoio e servizio per svuotare il db.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 16:35:50 +01:00
1d897f1461 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 15:46:05 +01:00
f3e48b9a3e Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 15:46:04 +01:00
f0e41c6554 Fix righe collo con Delete in distribuzioneCollo 2025-12-02 15:45:40 +01:00
3d76dec03a Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 15:08:49 +01:00
754b58fd37 creata setup che se abilitata chiede se stampare o meno la lettera di quietanza 2025-12-02 15:08:35 +01:00
0627fd59c9 aggiunte tabelle sincronizzaione articoli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 14:52:47 +01:00
31480b8fbe Utilizzati nuovi servizi WMS per scaricoMateriaPrimaDaPosizione/scaricoMateriaPrimaDaOrdine
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 10:43:16 +01:00
c1efdf48a6 Modifiche migrations per DMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 10:08:30 +01:00
e1de9f4db9 Attivazione nuova gestione produzione dulciar
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-02 09:54:02 +01:00
ce2ec669ba Attivazione nuova gestione produzione dulciar 2025-12-02 09:53:57 +01:00
c9658954aa Finish ModifSetup
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 19:10:14 +01:00
5011aa271d Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 19:10:14 +01:00
af4a5511a3 Creata setup per deposito ricambi macchinari prod 2025-12-01 19:10:05 +01:00
fa996c210c Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 19:03:04 +01:00
c5b5fb62a1 Abilitazione nuova versione generazione ordini di produzione 2025-12-01 19:02:57 +01:00
3b007c061e Finish FixDownload
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 18:53:14 +01:00
8ee9e2fe57 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 18:53:14 +01:00
4ddcc6228e Fix errore in download file se mimetype null 2025-12-01 18:53:00 +01:00
7cf9df3549 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 18:31:26 +01:00
8e8d6cf2c3 Finish ModifSetup
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 18:13:14 +01:00
2a5314fd1e Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 18:13:14 +01:00
9363e674b5 Creata setup per deposito ricambi macchinari prod 2025-12-01 18:13:04 +01:00
e7252f7fea Merge remote-tracking branch 'origin/develop' into develop 2025-12-01 17:55:09 +01:00
b5e1d2e1ce Abilitazione log picking
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 16:50:12 +01:00
53ef2539f5 aggiunto suffisso anche per griglie 2025-12-01 16:16:22 +01:00
6136d9b848 Migliorato errore di dbName, profileDb e CustomerDb non valido
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 16:07:28 +01:00
fe2be9b926 aggiunte nuove entity in sincronizzazioni
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-12-01 15:10:30 +01:00
1b113999b2 Rimosso log
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 13:11:11 +01:00
4ebcae77ca Migliorie
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-12-01 13:09:58 +01:00
8d35f9284a Refactoring UserCacheService, adesso sfrutta EntityCache più che il caching integrato.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 13:05:59 +01:00
b953349afc Finish Hotfix-101
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 11:44:34 +01:00
6c2eaaa37a Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 11:44:34 +01:00
9b8824e681 Modifica gestione conto in CTB_AnaG PER IMPORTAZIONE nuovo cliente da WEB 2025-12-01 11:44:20 +01:00
fb03aa1ea7 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 11:43:30 +01:00
c16e23d3bf Modifica migration per DMS 2025-12-01 11:43:21 +01:00
27055f8e5e Cambiata configurazione ram su Dockerfile
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 11:02:55 +01:00
b8ac769ffd Aggiunto flag_attivo nel trigger changeTipoRiep
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-12-01 10:57:27 +01:00
0216bc5d53 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 10:57:09 +01:00
db3973637d Aggiunto flag_attivo nel trigger changeTipoRiep 2025-12-01 10:57:03 +01:00
7dab29e8c2 Aggiornato ems_settings.json
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	docker/tomcat/conf/integry/ems_settings.json
2025-12-01 10:23:34 +01:00
809ffe73b9 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 10:02:06 +01:00
4d13d17095 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 10:02:05 +01:00
f749356735 letti data inizio e fine dalla vtb_list_Data 2025-12-01 10:01:59 +01:00
b2d24ab6b4 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 09:48:04 +01:00
6bb7b55618 inserito campo flag_attivo nella ctb_cont 2025-12-01 09:47:54 +01:00
920257812c Merge branch 'develop' into feature/Feature-SteUp 2025-12-01 09:20:46 +01:00
00efbe6fcf Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 08:55:11 +01:00
cacb24a563 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 08:55:11 +01:00
5da098e058 correzione per evitare che i campi stringa vuoti "" vengano salvati come tali 2025-12-01 08:55:04 +01:00
3e0c443ce3 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-12-01 08:48:08 +01:00
b4442bc251 correzione per evitare che i campi stringa vuoti "" vengano salvati come tali 2025-11-28 19:20:32 +01:00
eec353c6a5 Creato servizio per creazione manutenzioni macchinari
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-28 19:19:18 +01:00
8b50f54881 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-28 16:01:18 +01:00
42f50e0d80 disabilitate voci menu nuove gestioni colori, linee, sottolinee e sottosottolinee 2025-11-28 16:01:07 +01:00
cbeae87d23 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-28 12:56:27 +01:00
71cb1db5ef Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-28 12:56:26 +01:00
bb642d92db controllo su null or empty 2025-11-28 12:55:53 +01:00
ddd3b95d17 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-28 12:32:22 +01:00
ff5428f8bd Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-28 12:32:22 +01:00
d3b39ad878 controllo su null or empty 2025-11-28 12:32:15 +01:00
99a366d875 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 17:34:15 +01:00
abc4f1c966 modificata classe MdRigheDTO 2025-11-27 17:34:06 +01:00
fc1c2f192e Migliorata gestione DBMS Change Tracking in caso di disallineamento min valid version
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 17:22:15 +01:00
ac4afa9a2b create nuove voci menu per linee sottolinee e sottosottolinee
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 17:02:33 +01:00
c5a315e070 modifiche alle tabelle delle linee articoli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 15:15:49 +01:00
1d0fd3341d Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 14:06:24 +01:00
b44685335a creata setup per salvare path di esportazione xml 2025-11-27 14:06:11 +01:00
e5689da13d Cambiato ems_settings.json
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 11:44:24 +01:00
f57710cb32 Cambiato ems_settings.json
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 11:31:20 +01:00
ceb5dc817c Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	docker/tomcat/conf/integry/ems_settings.json
2025-11-27 11:06:40 +01:00
3a934813d8 Cambiato ems_settings.json 2025-11-27 11:06:27 +01:00
d56fe38e2c Cambiato ems_settings.json
Some checks failed
IntegryManagementSystem_Multi/pipeline/head Something is wrong with the build of this commit
2025-11-27 11:06:18 +01:00
5555a40731 Modifica funzione f_pp_consuntivo_prod_tracc
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 10:55:22 +01:00
acf5daf673 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 10:28:18 +01:00
939c4ab236 modificata entity MtbAartMarchio 2025-11-27 10:28:04 +01:00
49237b9585 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 10:21:32 +01:00
abbf298b4f Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 10:21:31 +01:00
34985c9fd3 Sistemato flag recuperaUl in Spedizione WMS 2025-11-27 10:21:27 +01:00
401f0330de Migliorie su ass_serie_ord_a_collo in distribuzione colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-27 10:00:38 +01:00
7815fb72f1 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:50:32 +01:00
0e8cc5b2de Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:50:31 +01:00
9a18dd6ebd esclusa merce in arrivo 2025-11-26 16:50:06 +01:00
3f0b9315a2 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:22:34 +01:00
32a15a4f3e Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:22:34 +01:00
932f99c147 - rimossa modifiche del codJfas in testata ordini durante la ripianificazione 2025-11-26 16:22:18 +01:00
1fc7d01b9c Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:19:25 +01:00
46e47a9549 - fix gestione token in richieste cross profile 2025-11-26 16:19:17 +01:00
ba1bbbafe0 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 16:00:19 +01:00
fa54de3d76 inseriti metodi override nelle entity MtbAartMarchio, MtbMarchioLinea, MtbMarchioSlinea, MtbMarchioSslinea 2025-11-26 16:00:03 +01:00
1550de37e6 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 13:30:36 +01:00
450f9f4dd4 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 13:30:35 +01:00
f1da5057d6 Fix su deposito reale dell'utente: è stato aggiunto tra gli header il codMdep che indica il deposito REALE su cui si trova l'utente. Utile per capire quali stampanti usare nel WMS o per sapere su che deposito sta effettuando le chiamate l'utente. 2025-11-26 13:30:30 +01:00
a3d15aeb32 modificata classe mdrighe:aggiunto prezzo netto
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 12:18:54 +01:00
c933c02727 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 11:51:44 +01:00
28b94b228a create classi mdtestate e mdrighe e aggiunto configuratore formati di esportazione md attivo su sardinya 2025-11-26 11:51:34 +01:00
c291db3e34 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 11:47:18 +01:00
3f9a451a70 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 11:47:18 +01:00
9f39c5bc2d fix [GRAMM]
- corretta gestione idRiga ed idStep in ripianificazione ordini di lavoro
2025-11-26 11:47:05 +01:00
6a455db664 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 10:18:47 +01:00
c33c1da199 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-26 10:18:47 +01:00
d0769ea1bd [GRAMM]
- corretta gestione idRiga ed idStep in ripianificazione ordini di lavoro
2025-11-26 10:18:35 +01:00
f3f768380a Merge remote-tracking branch 'origin/develop' into develop 2025-11-26 10:18:01 +01:00
cb2cf06200 [GRAMM]
- corretta gestione idRiga ed idStep in ripianificazione ordini di lavoro
2025-11-26 10:17:35 +01:00
a81fc6813c Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-26 09:44:06 +01:00
5c03b928b6 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-26 09:44:04 +01:00
16b478a511 [ConSegna] Aggiunto importoRiga 2025-11-26 09:43:53 +01:00
c2ef09a604 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 11:56:27 +01:00
f2de64de75 disabilitata setup per visualizzare maschera di riepilogo del saldo del cliente 2025-11-25 11:56:15 +01:00
b877347a77 impostato cod_jcom = note
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-11-25 11:46:34 +01:00
2d43952d96 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 11:43:42 +01:00
ee171374c8 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 11:43:42 +01:00
f0d1cdc81a gestita commessa nelle note 2025-11-25 11:43:37 +01:00
1758dcabbb Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-25 11:41:03 +01:00
8231716e97 Finish Hotfix-100
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-25 11:41:02 +01:00
2603cda317 gestita commessa nelle note 2025-11-25 11:40:58 +01:00
77c79c6247 Merge branch 'develop' into feature/Feature-SteUp 2025-11-25 10:58:20 +01:00
532a9cc3f4 MRP_UpdateQtaImpProx considerata 0 la giacenza se negativa
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 10:57:41 +01:00
c26f7feb35 Merge branch 'develop' into feature/Feature-SteUp 2025-11-25 10:10:30 +01:00
15a63cff14 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 10:06:08 +01:00
b53d76358b f_pp_consuntivo_prod_tracc 2025-11-25 10:05:56 +01:00
f9ded1153a Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 10:04:57 +01:00
81ddb42e5c Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-25 10:04:56 +01:00
5ac4d4be63 Rimosso momentaneamente controllo parentActivityId null 2025-11-25 10:04:47 +01:00
0b432960ec Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 09:53:57 +01:00
159436247d Finish FixGetMaterialiDistinta
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-25 09:53:57 +01:00
2a2435f64d Corretta funzione getMaterialiDistinta 2025-11-25 09:53:51 +01:00
fba5e331b5 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-25 09:36:20 +01:00
21cc88f295 varie per steup 2025-11-25 09:36:00 +01:00
de21ce7cb8 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 17:17:08 +01:00
33f24290a9 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-24 17:17:07 +01:00
dc83e89392 Fix su retrieve mtbAarts wms 2025-11-24 17:16:56 +01:00
d525048bb3 Fix su retrieve mtbAarts wms
Some checks are pending
IntegryManagementSystem_Multi/pipeline/head Build queued...
2025-11-24 17:16:40 +01:00
f5d46be57d Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 17:10:27 +01:00
ca4c3c3412 Finish FixProcGeneraOrdLav
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-24 17:10:26 +01:00
e5c16c6e4e Corretta funzione getMaterialiDistinta ed arrotondamento riproporzione qta ord 2025-11-24 17:09:03 +01:00
42bef35d5f Merge branch 'hotfix/Hotfix-1' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 17:04:02 +01:00
44e3de6a0f Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 17:04:01 +01:00
9942f92440 Merge branch 'master' into hotfix/Hotfix-1 2025-11-24 17:03:46 +01:00
e34bb01aea - fix ripianificazione ordini di lavoro 2025-11-24 17:03:27 +01:00
6f11e08807 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 16:40:47 +01:00
aa9529f551 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-24 16:40:46 +01:00
bcb8f4475d Fix regola checkDeleteMtbColrWithoutDoc 2025-11-24 16:40:31 +01:00
8a83213384 Migliorata gestione riconnessione DbmsChangeTracker
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 16:05:30 +01:00
2433c98ab1 Migliorate performance Exchange Clienti
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 15:53:25 +01:00
595fe77472 modifiche a getgrigliaacqiusto 2025-11-24 13:58:22 +01:00
29f9335876 modifiche a procedura di importazione listini di apulia, gestita perc premi, modificata regola che assegna tipo variazione sulle griglie, aggiunta generazione pk nelle migration
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 12:09:22 +01:00
e975964f53 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 12:01:01 +01:00
9d82cbc610 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 12:01:00 +01:00
0a12dc23f2 Fix check quantità nelle regole di MtbColr 2025-11-24 12:00:42 +01:00
1719f2ba37 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 11:54:01 +01:00
ddd9c73f49 Finish Hotfix-1
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 11:54:01 +01:00
1b0f5d5d29 Fix check quantità nelle regole di MtbColr 2025-11-24 11:53:51 +01:00
6991e60ec5 Fix inizializzazione mappa char replacements
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 10:50:04 +01:00
8a87d428ae modifiche per evitare l'errore nella generazione del file xml
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 09:55:53 +01:00
0058373710 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-24 09:12:45 +01:00
d9f93b14e1 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-24 09:12:45 +01:00
dea6b14323 modifiche a procedura di salvataggio 2025-11-24 09:12:36 +01:00
d01b4aef8f aggiunta migratione e corretto servizio per selezione conto
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 18:52:03 +01:00
b2c3008464 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 18:05:48 +01:00
d02f44237e modificata funzione getSchedaCosti 2025-11-21 18:05:40 +01:00
675e919652 correzione importazione scontrini mmpos forno
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 16:22:35 +01:00
9d9d4e3d87 Aggiunta setup wms
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 15:48:11 +01:00
19e17f76d4 migration getMaggiorazioneSpese
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 15:03:23 +01:00
df18330a01 Merge remote-tracking branch 'origin/develop' into develop 2025-11-21 15:03:10 +01:00
da61cb5439 setup listini 2025-11-21 14:02:59 +01:00
975e4f2be4 aggiunti default 2025-11-21 13:18:21 +01:00
e31b0bc1a0 Eliminata viene fatta 2 volte 2025-11-21 13:18:06 +01:00
84ccdafd90 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 12:19:27 +01:00
97de2f0e71 create entity mtb_marchio_linea, mtb_marchio_slinea, mtb_marchio_sslinea e inserite come entitychild nella mtb_marchio_linea 2025-11-21 12:19:13 +01:00
1ee321b253 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 10:34:55 +01:00
7912d29f00 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 10:34:54 +01:00
ecd8bca2aa Fix su flagSetNumProt 2025-11-21 10:34:44 +01:00
1a64179099 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 10:12:02 +01:00
54588d20bd Finish FixRipianifica
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 10:12:01 +01:00
84f3823597 Fix lettura setup reimposta lotto in ripianificazione mes 2025-11-21 10:11:51 +01:00
0022e620da impostato flag tracciabilità
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-21 09:49:59 +01:00
62a1f5a85f create viste per contabilità
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 18:25:34 +01:00
cd389dc83f Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 18:02:55 +01:00
974b5f61af Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-20 18:02:54 +01:00
a10876effc Fix su changes detection 2025-11-20 18:02:46 +01:00
4385520480 creazione suggestcode capelli monelli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-20 17:31:13 +01:00
a1b892a75e Migliorato exchange clienti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 17:28:43 +01:00
92dcc45638 varie contabilità
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 17:14:08 +01:00
a178ec5017 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 13:15:39 +01:00
1456e094a2 Aggiunti log per tracciare invio mail bolle generate e firmate 2025-11-20 13:15:22 +01:00
58b89777bb Aggiunta cache su MtbDepo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 11:53:20 +01:00
f4da09eacc utility funciton for cache
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-20 10:37:08 +01:00
6f47434d6f varie modifiche per movimenti contabili con servizi rest
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 19:22:31 +01:00
8fb8e4c05a Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 13:26:46 +01:00
d18ac96cc4 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 13:26:46 +01:00
9b26849cb6 [MES]
- modificato servizio di ripianificazione ordini di lavorazione: le date degli step non devono essere resettate
2025-11-19 13:26:32 +01:00
fcbee627b0 inserito campo e get e set cod_mssfa nella mtb_aart
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 12:21:33 +01:00
b17d807ca3 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 10:29:49 +01:00
5b017fdad1 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-19 10:29:49 +01:00
4957cba34b sistemata registrazione movimenti contabili 2025-11-19 10:29:43 +01:00
85e59e577f Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 10:15:35 +01:00
5c60cd2558 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 10:15:34 +01:00
5a824d0b3a Fix IntegryCustomerDB per 2M Holding (GRAMM) 2025-11-19 10:15:29 +01:00
f60c3337b1 inserito campo flag_bio nella dtb_note_doc
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-19 08:52:20 +01:00
4ee64127b1 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-18 17:43:57 +01:00
b587e38cc8 Merge branch 'hotfix/Hotfix-1' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-18 17:43:57 +01:00
be4c2d149e Merge branch 'master' into hotfix/Hotfix-1 2025-11-18 17:43:43 +01:00
ccb8b81597 [MES]
- modificata data cons prod in ripianificazione ordini lav
2025-11-18 17:39:58 +01:00
68a45a9eea Finish Hotfix-101
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-18 17:27:09 +01:00
d419c38220 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-18 17:27:09 +01:00
8fe752e595 Attivazione nuova gestione produzione 2025-11-18 17:26:52 +01:00
71ffc5b4cf Attivazione nuova gestione produzione 2025-11-18 17:26:44 +01:00
f00f0cf975 Add migration for trigger on ctb_cont to prevent updates with linked movements
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-18 16:49:34 +01:00
19e8949d86 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-18 16:25:49 +01:00
cc189f4761 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-18 16:25:48 +01:00
bd3bf9a8dc FIx customer DB AtiSrl 2025-11-18 16:25:41 +01:00
bee29e357e Aggiunto font cinese semplificato
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 17:35:50 +01:00
461b949581 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 15:37:01 +01:00
7fd4b6236c Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 15:37:00 +01:00
5075e17078 sistemato servizio per aggiornare ordini di slim 2025-11-17 15:36:19 +01:00
c6e2230052 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 15:26:13 +01:00
f9794850c4 Modifica migrations per DMS 2025-11-17 15:26:09 +01:00
ee18ecb15e Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 13:02:21 +01:00
656f2018a2 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 13:02:20 +01:00
2b4cea4ada aggiunta murgia test 2025-11-17 13:02:12 +01:00
2aa6384f69 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 12:42:53 +01:00
72ebb39b22 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 12:42:52 +01:00
8e01509e99 aggiunto cod_mart 2025-11-17 12:41:43 +01:00
e4de8e4287 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 11:10:18 +01:00
18da8c2763 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 11:10:17 +01:00
a770e150a4 Aggiunta dataMod in JtbComt e tabelle clienti e prospect 2025-11-17 11:09:33 +01:00
96993755da aggiunta cancellazione riga collo con qta 0
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 10:43:10 +01:00
30db0f9182 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 10:14:41 +01:00
8064e87017 controllo su cancellazione ordini e aggiunta migration 2025-11-17 10:14:28 +01:00
ef399668c4 Merge branch 'master' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-17 10:13:33 +01:00
72059e4623 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 10:13:32 +01:00
db5ee20a39 Fix su cache non funzionante su Integry Servers 2025-11-17 10:13:25 +01:00
ee4bf3d501 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 09:06:03 +01:00
7b40578ea4 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 09:06:03 +01:00
9685bff5ef per ora eliminata cache 2025-11-17 09:05:54 +01:00
3bff9a6fdc Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-17 08:52:08 +01:00
bfa48cbbb1 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-17 08:52:08 +01:00
4f2b251d20 aggiunto levanplastsrl 2025-11-17 08:52:00 +01:00
a1f1ffba95 modificata entity con deletechilds
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit is unstable
2025-11-14 15:30:38 +01:00
1ab59fa9a6 modificata entity mtbSsfam
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 14:27:34 +01:00
800407ebd7 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 14:06:13 +01:00
3dad6790fc inserita entity child mtbSsfam nella mtbsgrp e mtbgrup 2025-11-14 14:05:58 +01:00
d073a8fd17 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 13:34:07 +01:00
a9068c45cd Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 13:34:07 +01:00
ca78b09ad8 sistemata procedura di importazione colli da slim 2025-11-14 13:34:02 +01:00
3e17a7239a eliminato log
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 13:14:38 +01:00
d78597cba4 create get e set entity child mtbSsfam nella mtbSfam
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-14 13:11:00 +01:00
91f28a8c82 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 12:19:57 +01:00
03a7877899 [CMMS ]
- rimosso codice deposito da anagrafica macchinari
2025-11-14 12:17:55 +01:00
46e8a19c53 creata entity mtbSsfam come entity child mtbSfam
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-14 12:14:20 +01:00
81a42fc1d9 Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 19:06:16 +01:00
fdbcc0c539 Gestita data consegna produzione = null 2025-11-13 19:06:12 +01:00
7d51ddb868 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 18:48:43 +01:00
9f25bd2bf6 Finish FixNoteCreaColloLav
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 18:48:16 +01:00
a9ce0d82b6 Corretta impostazione note createULLavorazione
(cherry picked from commit 83d2f329ce)
2025-11-13 18:47:54 +01:00
83d2f329ce Corretta impostazione note createULLavorazione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 18:33:59 +01:00
7e06512598 modificato localdate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 18:22:49 +01:00
b5776e82c9 modifiche a controllo resi
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 18:14:22 +01:00
05dd42b0bf Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-13 18:02:35 +01:00
636774ed86 modifiche a inventari, listini e contabilità 2025-11-13 18:02:30 +01:00
6649af6e92 Creata inspection per chiamata SimpleDateFormat con LocalDate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 17:37:28 +01:00
acfff8e8d6 Modifiche per carelli in chiusure promo e invio variazioni e moficati date in localdate nei listini di vendita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 16:38:09 +01:00
44c1bd7cee Creata voce di menu ordini di vendita slim2k
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 15:35:13 +01:00
c712e729cc [GRAMM]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- gestione controlli di qualità nuovi
2025-11-13 15:25:46 +01:00
b684129f39 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 12:50:58 +01:00
1b339289c1 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 12:50:57 +01:00
b246991600 odio 2025-11-13 12:50:45 +01:00
dc578d1f17 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 12:40:00 +01:00
6c6f6d4d7e Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 12:40:00 +01:00
50dcb999f1 [TOSCA]
- aggiunto servizio per recuperare ul non pubblicate per la sincronizzazione
2025-11-13 12:39:47 +01:00
c656cc95de Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 11:50:48 +01:00
0b0b5bbf33 Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 11:50:47 +01:00
c2310327d2 rimosso parametro inutile 2025-11-13 11:50:35 +01:00
9962471f71 Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 11:48:15 +01:00
8ad86f71d3 Merge branch 'hotfix/Hotfix-1'
Some checks failed
IntegryManagementSystem_Multi/pipeline/head Something is wrong with the build of this commit
2025-11-13 11:48:15 +01:00
3a42baab00 - corretta gestione profilo alla login
- corretta gestione preparedStatement in pubblicazioni sincronizzazioni
- aggiunto servizio di ripubblicazione impegnato tosca
2025-11-13 11:48:02 +01:00
a1bfd0150c Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 11:17:29 +01:00
2e420fc540 Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 11:17:28 +01:00
f591246ae3 sistemati nuovo controlli su partita di magazzino 2025-11-13 11:17:04 +01:00
d4c02cf504 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 09:50:48 +01:00
e15878a9eb Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 09:50:47 +01:00
39f43b3361 varie correzioni per carelli 2025-11-13 09:50:26 +01:00
18a6756860 Rimosso update application name per device id
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-13 09:42:09 +01:00
3640b08041 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-12 19:07:54 +01:00
928d47f772 Finish Hotfix-1
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-12 19:07:53 +01:00
28478cb11d Ripristinato check di validation della connessione nel datasource 2025-11-12 19:07:47 +01:00
0c48df7895 Modifica migrations per DMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-12 18:42:29 +01:00
327f5af3dd Aggiunta unità di misura di magazzino e rapporto di conversione 1 in registazione inventario
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-12 16:36:00 +01:00
62234f2edf aggiunto n uovo campo su testata dei listini
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 17:32:08 +01:00
2fcba55965 aggiunto n uovo campo su testata dei listini
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 17:30:49 +01:00
d29768776a Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 16:43:07 +01:00
3dcf6d3ee0 Configurazione nuovo cliente EDI HALLES - GRAMM 2025-11-11 16:43:03 +01:00
7c2aa55eb8 Gestione chiusura commessa MAGGIO 2025-11-11 16:42:42 +01:00
e92d64a05e Merge branch 'hotfix/Hotfix-1' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 15:14:54 +01:00
0fa021be3e Merge branch 'hotfix/Hotfix-1'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 15:14:53 +01:00
086bd574d5 Aggiunta pezza in login per disallineamento profileDb != dbName 2025-11-11 15:13:47 +01:00
b46f26790d Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 12:24:35 +01:00
c364d57e86 [CONSEGNA] Cambiati i tipi indirizzo per le personeRif che devo riceve la bolla firmata e non 2025-11-11 12:24:22 +01:00
6d89e4d09b Rimosso select * in pvm_getassortimentoCliente
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 12:06:49 +01:00
3391051bb8 Finish FixSetupGestWebUser
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 11:35:58 +01:00
acba051357 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 11:35:58 +01:00
785ae254ee Creazione stb_gest_setup presenti solo in wtb_gest_setup_user 2025-11-11 11:35:37 +01:00
21a189ea66 aggiunto controllo su [NULL]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 10:44:20 +01:00
3a4a11d9e8 Migliorata gestione datasources in BasicConnectionPool
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-11 10:26:39 +01:00
6d5d021884 Finish Hotfix-101
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 18:35:27 +01:00
185d403d7a Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 18:35:27 +01:00
349d983b7f Impostata truncate a 40 su ragione sociale in import Made In Masseria 2025-11-10 18:35:14 +01:00
85ed6b54f9 aggiunto n uovo campo su testata dei listini
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 18:10:15 +01:00
9b6b0c87aa sistemato metodo per errore avevo cambiato il requestparam
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 17:16:34 +01:00
fd68a9b73a modifiche a contabilità per variazione movimento con creazione scadenza e pagamento nello stesso movimento
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 17:07:19 +01:00
433ab4b0ec Inserita voce menù per lanciare procedura di cancellazione movimenti contabili
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 16:29:30 +01:00
df9fbc7f65 Implementato check connection in DbmsChangeTracker
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 15:42:40 +01:00
a8253614b4 aggiunto +
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 13:07:21 +01:00
9977cae821 gestito pagamento contestuale alla registrazione della fattura
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-10 12:46:48 +01:00
344010ed90 Aggiunta cache di StbEditLimit
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-10 12:23:51 +01:00
1c51fb717a Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-10 12:02:05 +01:00
81827a8368 Modifica migrations per DMS 2025-11-10 12:02:00 +01:00
21222a25e9 Gestita esclusione ordini annullati da Distribuzione materiali SMETAR 2025-11-10 12:01:48 +01:00
838f32e04c Finish Hotfix-100
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 11:19:51 +01:00
d24a033e01 Merge branch 'master' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 11:19:51 +01:00
bdaf4a5ac6 aggiunta setup per selezionare il tipo calcolo prezzo base 2025-11-10 11:19:41 +01:00
5e76d8db2a Ingrandito campo note_incoterms a 40 in vtb_viaggi
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 11:00:13 +01:00
bae92e626b aggiunta setup per mrp
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 10:44:09 +01:00
0d471db37d Aggiunta migration per rimuovere barcode duplicati nella tabella mtb_aart_bar_code sul database Winact (Carelli) 2025-11-10 10:41:14 +01:00
c4c6875e16 Merge remote-tracking branch 'origin/develop' into develop
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-11-10 09:45:26 +01:00
3515e5c976 aggiunta possibilità di filtrare per numero ordine
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-11-10 09:28:41 +01:00
84a6f4c4f1 Aggiunta cache in servizi di completamento unt_mis e qta_cnf 2025-11-07 18:21:09 +01:00
ee9ec1a8a7 Sistemata EntityCacheComponent in debug 2025-11-07 18:20:29 +01:00
1884a9184e Check customerDb su EntityCacheComponent 2025-11-07 18:20:26 +01:00
caa62588b6 Fix su equals in getSetupList. 2025-11-07 18:20:23 +01:00
8bb9803f5b [BIOLEVANTE ]
- fix
2025-11-07 18:20:19 +01:00
ea27c26597 Fix su regole committate per errore.
Migliorato controllo alterObject in BaseMigration.
2025-11-07 18:20:14 +01:00
80aaa94036 Fix su Change Tracking 2025-11-07 18:20:03 +01:00
a82c0de415 Implementato primo sistema di Change Tracking per SQL Server 2025-11-07 18:18:40 +01:00
390 changed files with 26384 additions and 5946 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="LocalDate Checks" />
<version value="1.0" />
</settings>
</component>

30
.idea/structuralSearch.xml generated Normal file
View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="StructuralSearch">
<searchConfiguration name="LocalDate passato a SimpleDateFormat" text="$formatter$.format($date$)" recursive="true" caseInsensitive="true" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="formatter" nameOfExprType="java\.text\.SimpleDateFormat" within="" contains="" />
<constraint name="date" nameOfExprType="java\.time\.LocalDate" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="LocalDate equals java.util.Date inspection" text="$d1$.equals($d2$)" recursive="true" caseInsensitive="false" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="d1" nameOfExprType="java\.time\.LocalDate" within="" contains="" />
<constraint name="d2" nameOfExprType="java\.util\.Date" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="java.util.Date equals LocalDate inspection" text="$d1$.equals($d2$)" recursive="true" caseInsensitive="false" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="d1" nameOfExprType="java\.util\.Date" within="" contains="" />
<constraint name="d2" nameOfExprType="java\.time\.LocalDate" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="java.util.Date equals LocalDateTime inspection" text="$d1$.equals($d2$)" recursive="true" caseInsensitive="false" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="d1" nameOfExprType="java\.util\.Date" within="" contains="" />
<constraint name="d2" nameOfExprType="java\.time\.LocalDateTime" within="" contains="" />
</searchConfiguration>
<searchConfiguration name="LocalDateTime equals java.util.Date inspection" text="$d1$.equals($d2$)" recursive="true" caseInsensitive="false" type="JAVA" pattern_context="default">
<constraint name="__context__" within="" contains="" />
<constraint name="d1" nameOfExprType="java\.time\.LocalDateTime" within="" contains="" />
<constraint name="d2" nameOfExprType="java\.util\.Date" within="" contains="" />
</searchConfiguration>
</component>
</project>

View File

@@ -3,7 +3,7 @@ FROM tomcat:9-jre8-alpine
RUN apk add --no-cache fontconfig ttf-dejavu
ENV TZ="Europe/Rome"
ENV JAVA_OPTS="-DDISABLE_DROOLS_COMPILE=TRUE -Xms512M -Xmx1G -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
ENV JAVA_OPTS="-DDISABLE_DROOLS_COMPILE=TRUE -Xms512M -Xmx2G -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
ENV USERDOMAIN="STUDIO-ML"
COPY docker/tomcat/conf/integry/ems.properties /usr/local/tomcat/conf/integry/

File diff suppressed because it is too large Load Diff

View File

@@ -229,6 +229,11 @@
<artifactId>arial-rounded</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>it.integry.font</groupId>
<artifactId>NotoSerif</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>

View File

@@ -11,6 +11,7 @@ public class CommonConstants {
public static final String INTEGRY = "integry";
public static final String PROFILE_DB = "profileDb";
public static final String COD_MDEP = "codMdep";
public static final String WHERE_COND = "whereCond";
public static final String EMPTY_STRING = "";
@@ -20,6 +21,7 @@ public class CommonConstants {
public static final String TIMESTAMP = "timestamp";
public static final String DATE_FORMAT_YMD_SLASHED = "yyyy/MM/dd";
public static final String DATE_FORMAT_YMD = "yyyy-MM-dd";
public static final String DATE_FORMAT_DMY = "dd/MM/yyyy";
public static final String DATE_FORMAT_DMY_DASHED = "dd-MM-yyyy";
@@ -27,7 +29,7 @@ public class CommonConstants {
public static final String TIME_FORMAT = "HH:mm:ss";
public static final String DATETIME_FORMAT_YMD = String.format("%s %s", DATE_FORMAT_YMD, TIME_FORMAT);
public static final String DATETIME_FORMAT_YMD = String.format("%s %s", DATE_FORMAT_YMD_SLASHED, TIME_FORMAT);
public static final String DATETIME_FORMAT_DMY = String.format("%s %s", DATE_FORMAT_DMY_DASHED, TIME_FORMAT);
public static final String DATETIME_FORMAT_DMY_SLASHED = String.format("%s %s", DATE_FORMAT_DMY, TIME_FORMAT);
public static final String DATETIME_FORMAT_DMY_DASHED = String.format("%s %s", DATE_FORMAT_DMY_DASHED, TIME_FORMAT);
@@ -46,6 +48,10 @@ public class CommonConstants {
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATE_YMD_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATE_FORMAT_YMD_SLASHED)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATETIME_YMD_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATETIME_FORMAT_YMD)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATE_YMD_DASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATE_FORMAT_YMD)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATETIME_YMD_DASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATETIME_FORMAT_YMD)
@@ -53,6 +59,8 @@ public class CommonConstants {
public static final DateTimeFormatter DATE_DMY_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATE_FORMAT_DMY)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATE_DMY_DASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATE_FORMAT_DMY_DASHED)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATETIME_DMY_SLASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATETIME_FORMAT_DMY_SLASHED)
.withZone(ZoneId.systemDefault());
public static final DateTimeFormatter DATETIME_DMY_DASHED_FORMATTER = DateTimeFormatter.ofPattern(CommonConstants.DATETIME_FORMAT_DMY_DASHED)

View File

@@ -69,7 +69,6 @@ public class EmsCoreDBLoader {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionPool)){
discoverAllConnections(multiDBTransactionManager);
setupAzienda(multiDBTransactionManager);
userCacheService.discoverAllUsers(multiDBTransactionManager);
if (onComplete != null) onComplete.run(multiDBTransactionManager);
} catch (Exception ex) {

View File

@@ -0,0 +1,27 @@
package it.integry.ems.adapter;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.utility.UtilityString;
import java.io.IOException;
public class LongDeserializer extends JsonDeserializer<Long> {
@Override
public Long deserialize(JsonParser parser, DeserializationContext context)
throws IOException {
String string = parser.getText();
if (!UtilityString.isNullOrEmpty(string)) {
if (string.equalsIgnoreCase("null")) {
return EmsRestConstants.LONG_NULL;
}
return new Long(string);
} else
return null;
}
}

View File

@@ -14,7 +14,7 @@ public class ExecutorServiceConfig {
private final int corePoolSize = Runtime.getRuntime().availableProcessors();
private final int maxPoolSize = (int) (corePoolSize * 1.5f);
private final int queueSize = 500;
private final int queueSize = 1_000_000;
@Bean
public ExecutorService taskExecutor() {

View File

@@ -793,9 +793,8 @@ public class EmsController {
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_STB_EMAIL_CONTENT, method = RequestMethod.GET)
public byte[] downloadStbEmailContent(HttpServletRequest request, HttpServletResponse response,
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam Integer idEmail) throws Exception {
public ResponseEntity<byte[]> downloadStbEmailContent(@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam Integer idEmail) throws Exception {
StbEmailContent stbEmailContent = new StbEmailContent();
stbEmailContent.setIdEmail(idEmail);
stbEmailContent.setOperation(OperationType.SELECT_OBJECT);
@@ -803,11 +802,7 @@ public class EmsController {
stbEmailContent = entityProcessor.processEntity(stbEmailContent, multiDBTransactionManager);
if (stbEmailContent != null) {
response.setContentType("application/octet-stream");
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename("email.eml").build().toString());
byte[] byteArr = null;
byte[] byteArr;
String pattern = "[^\\x00-\\x7F]";
Pattern pat = Pattern.compile(pattern);
@@ -819,13 +814,18 @@ public class EmsController {
byteArr = Base64.decodeBase64(stbEmailContent.getEmailContent());
}
response.setContentLength(byteArr != null ? byteArr.length : 0);
return byteArr;
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.contentLength(byteArr != null ? byteArr.length : 0)
.header(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition
.builder("attachment")
.filename("email.eml")
.build()
.toString())
.body(byteArr);
}
response.sendError(404, "Allegato non trovato");
return null;
return ResponseEntity.notFound().build();
}
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_DTB_DOC_PDF, method = RequestMethod.GET)
@@ -884,12 +884,13 @@ public class EmsController {
}
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_DTB_ORD_PDF, method = RequestMethod.GET)
public byte[] downloadDtbOrdPdf(HttpServletRequest request, HttpServletResponse response,
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam String gestione,
@RequestParam String dataOrd,
@RequestParam Integer numOrd,
@RequestParam Integer versione) throws Exception {
public ResponseEntity<byte[]> downloadDtbOrdPdf(
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam String gestione,
@RequestParam String dataOrd,
@RequestParam Integer numOrd,
@RequestParam Integer versione) throws Exception {
DtbOrdPdf dtbOrdPdf = new DtbOrdPdf();
dtbOrdPdf.setGestione(gestione);
dtbOrdPdf.setDataOrd(UtilityDate.RecognizeDate(dataOrd));
@@ -900,17 +901,20 @@ public class EmsController {
dtbOrdPdf = entityProcessor.processEntity(dtbOrdPdf, multiDBTransactionManager);
if (dtbOrdPdf != null) {
response.setContentType("application/octet-stream");
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename(dtbOrdPdf.getFilename()).build().toString());
byte[] byteArr = dtbOrdPdf.getFilecontentByteArr(true);
response.setContentLength(byteArr != null ? byteArr.length : 0);
return byteArr;
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_PDF)
.contentLength(byteArr != null ? byteArr.length : 0)
.header(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition
.builder("attachment")
.filename(ContentDisposition.attachment().filename(dtbOrdPdf.getFilename()).build().toString())
.build()
.toString())
.body(byteArr);
}
response.sendError(404, "Allegato non trovato");
return null;
return ResponseEntity.notFound().build();
}
@RequestMapping(value = EmsRestConstants.PATH_UPLOAD_STB_FILE_ATTACHMENT, method = RequestMethod.POST)

View File

@@ -6,6 +6,7 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityString;
import org.apache.commons.dbcp2.BasicDataSource;
import java.sql.SQLException;
@@ -13,6 +14,8 @@ import java.util.HashMap;
public class DataSource extends BasicDataSource {
private final int POOL_SIZE;
private AvailableConnectionModel connectionModel;
/**
@@ -24,6 +27,13 @@ public class DataSource extends BasicDataSource {
@Deprecated
public DataSource() {
super();
POOL_SIZE = 5;
}
@Deprecated
public DataSource(int poolSize) {
super();
POOL_SIZE = poolSize;
}
public EmsRestConstants.DB_TYPE getTypeDB() {
@@ -62,12 +72,20 @@ public class DataSource extends BasicDataSource {
}
public synchronized void initialize(String profileDB) throws Exception {
initialize(profileDB, null);
}
public synchronized void initialize(String profileDB, String customAppName) throws Exception {
AvailableConnectionModel connectionsModel = SettingsModel.getInstance().findConnectionModel(profileDB);
initialize(connectionsModel);
initialize(connectionsModel, customAppName);
}
public synchronized void initialize(AvailableConnectionModel connectionModel) throws Exception {
initialize(connectionModel, null);
}
public synchronized void initialize(AvailableConnectionModel connectionModel, String customAppName) throws Exception {
if (connectionModel == null) {
throw new Exception("Configurazione DB non trovata");
}
@@ -76,7 +94,7 @@ public class DataSource extends BasicDataSource {
this.setDriverClassName(connectionModel.getDriverClassName());
this.setUrl(connectionModel.getDbConnectionString("EMS Connection"));
this.setUrl(connectionModel.getDbConnectionString(UtilityString.isNull(customAppName, "EMS Connection")));
this.setUsername(connectionModel.getUsername());
this.setPassword(connectionModel.getPasswordDecrypted());
this.setDefaultCatalog(connectionModel.getDbName());
@@ -87,9 +105,9 @@ public class DataSource extends BasicDataSource {
// ===== OTTIMIZZAZIONI CRITICHE =====
// Pool sizing ottimizzato per READ_UNCOMMITTED (meno locking = più connessioni possibili)
this.setInitialSize(5); // Inizia con più connessioni
this.setInitialSize(POOL_SIZE); // Inizia con più connessioni
this.setMaxTotal(-1); // Aumentato il massimo
this.setMinIdle(5); // Non scendere sotto 5
this.setMinIdle(POOL_SIZE); // Non scendere sotto 5
this.setMaxIdle(-1); // Mantieni più connessioni idle
// Timeout ottimizzati per performance massime
@@ -97,8 +115,8 @@ public class DataSource extends BasicDataSource {
// Validazione veloce ed efficiente
this.setValidationQuery("SELECT 1");
// this.setValidationQueryTimeout(60); // Ridotto a 1 secondo
// this.setTestWhileIdle(true); // Testa connessioni idle
this.setValidationQueryTimeout(30); // Ridotto a 1 secondo
this.setTestWhileIdle(true); // Testa connessioni idle
// Eviction ottimizzata per READ_UNCOMMITTED
// this.setTimeBetweenEvictionRunsMillis(1 * 1000); // Ogni 30 secondi

View File

@@ -0,0 +1,302 @@
package it.integry.ems.dbms_change_tracker.component;
import com.microsoft.sqlserver.jdbc.SQLServerConnection;
import it.integry.ems.datasource.DataSource;
import it.integry.ems.dbms_change_tracker.model.ChangeTrackingConfigDTO;
import it.integry.ems.dbms_change_tracker.model.DetectedChangeDataDTO;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.exception.DataConverterNotFoundException;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
public class DbmsChangeTracker {
private DataSource dataSource;
private final Logger logger = LogManager.getLogger();
private final int CHANGE_RETENTION_HOURS = 1;
private final boolean AUTO_CLEANUP = true;
private Connection integryConnection;
private boolean trackerEnabled = false;
private long currentVersion;
private Listener eventListener;
public DbmsChangeTracker(String profileDb) throws Exception {
createDataSource(profileDb);
createConnection();
}
private void createDataSource(String profileDb) throws Exception {
DataSource ds = new DataSource(1);
ds.initialize(profileDb, "Integry Changes Tracker");
this.dataSource = ds;
}
private void createConnection() throws SQLException {
integryConnection = dataSource.getConnection();
if (!(integryConnection.isWrapperFor(SQLServerConnection.class))) {
integryConnection.close();
throw new SQLException("Connection is not a SQL Server connection");
}
}
private void checkConnection() {
try {
UtilityDB.executeSimpleQuery(integryConnection, "SELECT 1");
if (integryConnection.isClosed())
createConnection();
} catch (SQLException e) {
try {
try {
integryConnection.close();
} catch (Exception ex) {
//ignore
}
createConnection();
} catch (SQLException ex) {
logger.error("Unable to reestablish DB connection for Change Tracker", ex);
throw new RuntimeException("Unable to reestablish DB connection for Change Tracker");
}
}
}
public void enableTrackerInDbms() throws SQLException, DataConverterNotFoundException, InstantiationException, IllegalAccessException {
final ChangeTrackingConfigDTO currentConfig = retrieveTrackerCurrentConfig();
if (currentConfig != null) {
logInfo("Changes Tracker is already enabled (with " + currentConfig.getRetentionPeriod() + " " + currentConfig.getRetentionPeriodUnit().toLowerCase() + " retention and auto cleanup " + (currentConfig.isAutoCleanupOn() ? "ON" : "OFF") + ")");
return;
}
String enableSql = "ALTER DATABASE [" + integryConnection.getDbName() + "] \n" +
"SET CHANGE_TRACKING = ON (" +
"CHANGE_RETENTION = " + CHANGE_RETENTION_HOURS + " HOURS, " +
"AUTO_CLEANUP = " + (AUTO_CLEANUP ? "ON" : "OFF") +
");\n";
//COMMIT necessario perché ALTER DATABASE richiede che non ci siano altre transazioni attive
UtilityDB.executeStatement(integryConnection, "COMMIT", enableSql);
logInfo("Changes Tracker is now enabled (with " + CHANGE_RETENTION_HOURS + " hours retention and auto cleanup " + (AUTO_CLEANUP ? "ON" : "OFF") + ")");
}
public void enableTrackerOnTable(String tableName) throws SQLException {
if (isTableTrackingEnabled(tableName)) {
return;
}
UtilityDB.executeStatement(integryConnection, "ALTER TABLE dbo." + tableName + "\n" +
"ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = ON);", "COMMIT");
}
public void disableTrackerOnNotUsedTables(List<String> usedTables) throws SQLException {
final List<String> trackedTables = retrieveTrackedTables();
trackedTables.removeAll(usedTables);
for (String tableName : trackedTables) {
disableTrackerOnTable(tableName);
}
}
public void disableTrackerOnTable(String tableName) throws SQLException {
if (!isTableTrackingEnabled(tableName)) {
return;
}
UtilityDB.executeStatement(integryConnection, "ALTER TABLE dbo." + tableName + "\n" +
"DISABLE CHANGE_TRACKING;", "COMMIT");
}
public void startTracking() throws SQLException {
currentVersion = retrieveCurrentVersion();
trackerEnabled = true;
}
public void checkForChanges() throws Exception {
if (!trackerEnabled)
return;
checkConnection();
final List<String> trackedTables = retrieveTrackedTables();
HashMap<Long, List<DetectedChangeDataDTO>> changesByVersion = new HashMap<>();
for (String trackedTable : trackedTables) {
long minValidVersion = getMinValidVersion(trackedTable);
if (currentVersion < minValidVersion) {
if (eventListener != null) {
eventListener.onTrackingResetted();
currentVersion = retrieveCurrentVersion();
return;
}
}
final List<DetectedChangeDataDTO> detectedChanges = retrieveChangeList(trackedTable);
detectedChanges.forEach(detectedChangeDataDTO -> {
changesByVersion.putIfAbsent(detectedChangeDataDTO.getSysChangeVersion(), new ArrayList<>());
changesByVersion.get(detectedChangeDataDTO.getSysChangeVersion()).add(detectedChangeDataDTO);
});
}
logTrace("Detected " + changesByVersion.size() + " changes since version " + currentVersion);
dispatchChanges(changesByVersion);
}
private void dispatchChanges(HashMap<Long, List<DetectedChangeDataDTO>> changesByVersion) throws Exception {
final List<Long> sortedChanges = changesByVersion.keySet().stream()
.sorted()
.collect(Collectors.toList());
for (Long changeId : sortedChanges) {
final List<DetectedChangeDataDTO> detectedChanges = changesByVersion.get(changeId);
for (DetectedChangeDataDTO detectedChange : detectedChanges) {
switch (detectedChange.getSysChangeOperation()) {
case INSERT:
if (eventListener != null)
eventListener.onInsertDetected(detectedChange.getTableName(), detectedChange.getPrimaryKey());
break;
case UPDATE:
if (eventListener != null)
eventListener.onUpdateDetected(detectedChange.getTableName(), detectedChange.getPrimaryKey());
break;
case DELETE:
if (eventListener != null)
eventListener.onDeleteDetected(detectedChange.getTableName(), detectedChange.getPrimaryKey());
break;
}
}
currentVersion = changeId;
}
}
private List<DetectedChangeDataDTO> retrieveChangeList(String tableName) throws SQLException {
String sql = "SELECT *\n" +
"FROM CHANGETABLE(CHANGES dbo." + tableName + ", " + currentVersion + ") AS c";
final List<HashMap<String, Object>> result = UtilityDB.executeSimpleQuery(integryConnection, sql);
return result.stream()
.map(x -> {
DetectedChangeDataDTO detectedChangeDataDTO = new DetectedChangeDataDTO()
.setTableName(tableName);
Long sysChangeVersion = UtilityHashMap.<Long>getValueIfExists(x, "SYS_CHANGE_VERSION");
detectedChangeDataDTO.setSysChangeVersion(sysChangeVersion);
Long sysChangeCreationVersion = UtilityHashMap.<Long>getValueIfExists(x, "SYS_CHANGE_CREATION_VERSION");
detectedChangeDataDTO.setSysChangeCreationVersion(sysChangeCreationVersion);
detectedChangeDataDTO.setSysChangeOperation(DetectedChangeDataDTO.Operation.from(UtilityHashMap.<String>getValueIfExists(x, "SYS_CHANGE_OPERATION")));
List<String> keysToRemove = new ArrayList<>();
for (String colName : x.keySet()) {
if (colName.startsWith("SYS_"))
keysToRemove.add(colName);
}
for (String colName : keysToRemove) {
x.remove(colName);
}
detectedChangeDataDTO.setPrimaryKey(x);
return detectedChangeDataDTO;
})
.collect(Collectors.toList());
}
private long retrieveCurrentVersion() throws SQLException {
String sql = "SELECT CHANGE_TRACKING_CURRENT_VERSION() AS current_version";
long currentVersion = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(integryConnection, sql);
return currentVersion;
}
private long getMinValidVersion(String table) throws SQLException {
String sql = "SELECT CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(" + UtilityDB.valueToString(table) + "))";
long minValidVersion = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(integryConnection, sql);
return minValidVersion;
}
private List<String> retrieveTrackedTables() throws SQLException {
String sql = "SELECT OBJECT_NAME(object_id) AS table_name\n" +
" FROM sys.change_tracking_tables";
List<String> trackedTables = UtilityDB.executeSimpleQueryOnlyFirstColumn(integryConnection, sql);
return trackedTables;
}
private boolean isTableTrackingEnabled(String tableName) throws SQLException {
String sql = "SELECT CAST(COUNT(is_track_columns_updated_on) AS BIT) AS enabled\n" +
" FROM sys.change_tracking_tables \n" +
" WHERE object_id = OBJECT_ID('dbo." + tableName + "')";
boolean enabled = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(integryConnection, sql);
return enabled;
}
private ChangeTrackingConfigDTO retrieveTrackerCurrentConfig() throws SQLException, DataConverterNotFoundException, InstantiationException, IllegalAccessException {
String checkSql = "SELECT DB_NAME(database_id) as database_name,\n" +
"CAST(is_auto_cleanup_on AS BIT) AS is_auto_cleanup_on,\n" +
"retention_period,\n" +
"retention_period_units_desc,\n" +
"max_cleanup_version\n" +
"FROM sys.change_tracking_databases \n" +
"WHERE DB_NAME(database_id)=DB_NAME()";
final ChangeTrackingConfigDTO currentConfig = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(integryConnection, checkSql, ChangeTrackingConfigDTO.class);
return currentConfig;
}
private void logInfo(String message) {
logger.info("[" + integryConnection.getProfileName() + "] " + message);
}
private void logTrace(String message) {
logger.trace("[" + integryConnection.getProfileName() + "] " + message);
}
public DbmsChangeTracker setEventListener(Listener eventListener) {
this.eventListener = eventListener;
return this;
}
public interface Listener {
void onInsertDetected(String tableName, HashMap<String, Object> primaryKey) throws Exception;
void onUpdateDetected(String tableName, HashMap<String, Object> primaryKey) throws Exception;
void onDeleteDetected(String tableName, HashMap<String, Object> primaryKey) throws Exception;
void onTrackingResetted() throws Exception;
}
}

View File

@@ -0,0 +1,144 @@
package it.integry.ems.dbms_change_tracker.component;
import it.integry.annotations.PostContextAutowired;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordDeletedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordInsertedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordUpdatedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableTrackingResettedEvent;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.entity.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
public class DbmsChangeTrackerComponent {
private final Logger logger = LogManager.getLogger();
private final HashMap<IntegryCustomerDB, DbmsChangeTracker> activeChangeTrackers = new HashMap<>();
private final ArrayList<String> trackedTables = new ArrayList<String>() {{
add(MtbAart.ENTITY);
add(MtbAartBarCode.ENTITY);
add(MtbUntMis.ENTITY);
add(MtbDepo.ENTITY);
add(MtbDepoPosizioni.ENTITY);
add(StbEditLimit.ENTITY);
add(StbGestSetup.ENTITY);
add(StbGestSetupDepo.ENTITY);
add(StbUser.ENTITY);
add(WtbClie.ENTITY);
add(WtbDepo.ENTITY);
add(WtbGestSetupUser.ENTITY);
}};
private final ApplicationEventPublisher applicationEventPublisher;
@PostContextAutowired
private MultiDBTransactionManager multiDBTransactionManager;
public DbmsChangeTrackerComponent(ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
}
@PostContextConstruct(priority = 10)
public void init() throws Exception {
for (Connection conn : multiDBTransactionManager.getActiveConnections()) {
IntegryCustomerDB customerDB = IntegryCustomerDB.parse(conn.getDbName());
activeChangeTrackers.put(customerDB, new DbmsChangeTracker(conn.getProfileName()));
}
enableAllChangeTracking();
}
private void enableAllChangeTracking() throws Exception {
for (Map.Entry<IntegryCustomerDB, DbmsChangeTracker> entrySet : activeChangeTrackers.entrySet()) {
final IntegryCustomerDB customerDB = entrySet.getKey();
final DbmsChangeTracker dbmsChangeTracker = entrySet.getValue();
try {
dbmsChangeTracker.enableTrackerInDbms();
for (String tableName : trackedTables) {
dbmsChangeTracker.enableTrackerOnTable(tableName);
}
dbmsChangeTracker.disableTrackerOnNotUsedTables(trackedTables);
dbmsChangeTracker.setEventListener(new DbmsChangeTracker.Listener() {
@Override
public void onInsertDetected(String tableName, HashMap<String, Object> primaryKey) {
onItemInserted(customerDB, tableName, primaryKey);
}
@Override
public void onUpdateDetected(String tableName, HashMap<String, Object> primaryKey) {
onItemUpdated(customerDB, tableName, primaryKey);
}
@Override
public void onDeleteDetected(String tableName, HashMap<String, Object> primaryKey) {
onItemDeleted(customerDB, tableName, primaryKey);
}
@Override
public void onTrackingResetted() throws Exception {
requestGlobalReset(customerDB);
}
});
dbmsChangeTracker.startTracking();
} catch (Exception e) {
throw new Exception("Errore durante l'abilitazione del DbmsChangeTracker per il customer: " + customerDB.getValue(), e);
}
}
}
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS)
private void checkAllChanges() throws Exception {
for (DbmsChangeTracker dbmsChangeTracker : activeChangeTrackers.values()) {
try {
dbmsChangeTracker.checkForChanges();
} catch (Exception e) {
logger.error("Errore durante il controllo delle modifiche nel DbmsChangeTracker.", e);
}
}
}
private void onItemInserted(IntegryCustomerDB customerDB, String tableName, HashMap<String, Object> primaryKey) {
logger.trace("Item inserted in profileDb {} table {} with primaryKey {}", customerDB.getValue(), tableName, primaryKey);
applicationEventPublisher.publishEvent(new TableRecordInsertedEvent(this, customerDB, tableName, primaryKey));
}
private void onItemUpdated(IntegryCustomerDB customerDB, String tableName, HashMap<String, Object> primaryKey) {
logger.trace("Item updated in profileDb {} table {} with primaryKey {}", customerDB.getValue(), tableName, primaryKey);
applicationEventPublisher.publishEvent(new TableRecordUpdatedEvent(this, customerDB, tableName, primaryKey));
}
private void onItemDeleted(IntegryCustomerDB customerDB, String tableName, HashMap<String, Object> primaryKey) {
logger.trace("Item deleted in profileDb {} table {} with primaryKey {}", customerDB.getValue(), tableName, primaryKey);
applicationEventPublisher.publishEvent(new TableRecordDeletedEvent(this, customerDB, tableName, primaryKey));
}
private void requestGlobalReset(IntegryCustomerDB customerDB) {
logger.warn("Table tracking resetted in profileDb {} ", customerDB.getValue());
applicationEventPublisher.publishEvent(new TableTrackingResettedEvent(this, customerDB));
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.dbms_change_tracker.component.exception;
public class DbmsChangeTrackerInvalidMinVersionException extends Exception {
private final String tableName;
private final long currentVersion;
private final long minValidVersion;
public DbmsChangeTrackerInvalidMinVersionException(String tableName, long currentVersion, long minValidVersion) {
super("Change Tracking on table " + tableName + " has been reset. Current version: " + currentVersion + ", Min valid version: " + minValidVersion);
this.tableName = tableName;
this.minValidVersion = minValidVersion;
this.currentVersion = currentVersion;
}
public String getTableName() {
return tableName;
}
public long getCurrentVersion() {
return currentVersion;
}
public long getMinValidVersion() {
return minValidVersion;
}
}

View File

@@ -0,0 +1,67 @@
package it.integry.ems.dbms_change_tracker.model;
import it.integry.ems_model.annotation.SqlField;
public class ChangeTrackingConfigDTO {
@SqlField("database_name")
private String databaseName;
@SqlField("is_auto_cleanup_on")
private boolean autoCleanupOn;
@SqlField("retention_period")
private int retentionPeriod;
@SqlField("retention_period_units_desc")
private String retentionPeriodUnit;
// @SqlField("max_cleanup_version")
private Object maxCleanupVersion;
public String getDatabaseName() {
return databaseName;
}
public ChangeTrackingConfigDTO setDatabaseName(String databaseName) {
this.databaseName = databaseName;
return this;
}
public boolean isAutoCleanupOn() {
return autoCleanupOn;
}
public ChangeTrackingConfigDTO setAutoCleanupOn(boolean autoCleanupOn) {
this.autoCleanupOn = autoCleanupOn;
return this;
}
public int getRetentionPeriod() {
return retentionPeriod;
}
public ChangeTrackingConfigDTO setRetentionPeriod(int retentionPeriod) {
this.retentionPeriod = retentionPeriod;
return this;
}
public String getRetentionPeriodUnit() {
return retentionPeriodUnit;
}
public ChangeTrackingConfigDTO setRetentionPeriodUnit(String retentionPeriodUnit) {
this.retentionPeriodUnit = retentionPeriodUnit;
return this;
}
public Object getMaxCleanupVersion() {
return maxCleanupVersion;
}
public ChangeTrackingConfigDTO setMaxCleanupVersion(Object maxCleanupVersion) {
this.maxCleanupVersion = maxCleanupVersion;
return this;
}
}

View File

@@ -0,0 +1,108 @@
package it.integry.ems.dbms_change_tracker.model;
import com.fasterxml.jackson.annotation.JsonValue;
import it.integry.ems_model.entity._enum.IBaseEnum;
import java.util.HashMap;
public class DetectedChangeDataDTO {
private long sysChangeVersion;
private Long sysChangeCreationVersion;
private Operation sysChangeOperation;
private String tableName;
private HashMap<String, Object> primaryKey;
public long getSysChangeVersion() {
return sysChangeVersion;
}
public DetectedChangeDataDTO setSysChangeVersion(long sysChangeVersion) {
this.sysChangeVersion = sysChangeVersion;
return this;
}
public Long getSysChangeCreationVersion() {
return sysChangeCreationVersion;
}
public DetectedChangeDataDTO setSysChangeCreationVersion(Long sysChangeCreationVersion) {
this.sysChangeCreationVersion = sysChangeCreationVersion;
return this;
}
public Operation getSysChangeOperation() {
return sysChangeOperation;
}
public DetectedChangeDataDTO setSysChangeOperation(Operation sysChangeOperation) {
this.sysChangeOperation = sysChangeOperation;
return this;
}
public String getTableName() {
return tableName;
}
public DetectedChangeDataDTO setTableName(String tableName) {
this.tableName = tableName;
return this;
}
public HashMap<String, Object> getPrimaryKey() {
return primaryKey;
}
public DetectedChangeDataDTO setPrimaryKey(HashMap<String, Object> primaryKey) {
this.primaryKey = primaryKey;
return this;
}
public enum Operation implements IBaseEnum<Operation> {
INSERT('I'),
UPDATE('U'),
DELETE('D');
private final char value;
Operation(char value) {
this.value = value;
}
public static Operation from(Object value) {
if (value instanceof String && ((String) value).length() == 1) {
value = ((String) value).charAt(0);
}
char castValue = (char) value;
for (Operation b : Operation.values()) {
if (b.value == castValue)
return b;
}
return null;
}
@JsonValue
public char getValue() {
return this.value;
}
@Override
public Object get() {
return this.value;
}
@Override
public Operation fromInternal(Object val) {
return from(val);
}
@Override
public String toString() {
return String.valueOf(value);
}
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.dbms_change_tracker.model.events;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.event.BaseCustomerDBEvent;
import java.util.HashMap;
public class TableRecordDeletedEvent extends BaseCustomerDBEvent {
private final String tableName;
private final HashMap<String, Object> primaryKey;
public TableRecordDeletedEvent(Object source, IntegryCustomerDB integryCustomerDB, String tableName, HashMap<String, Object> primaryKey) {
super(source, integryCustomerDB);
this.tableName = tableName;
this.primaryKey = primaryKey;
}
public String getTableName() {
return tableName;
}
public HashMap<String, Object> getPrimaryKey() {
return primaryKey;
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.dbms_change_tracker.model.events;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.event.BaseCustomerDBEvent;
import java.util.HashMap;
public class TableRecordInsertedEvent extends BaseCustomerDBEvent {
private final String tableName;
private final HashMap<String, Object> primaryKey;
public TableRecordInsertedEvent(Object source, IntegryCustomerDB integryCustomerDB, String tableName, HashMap<String, Object> primaryKey) {
super(source, integryCustomerDB);
this.tableName = tableName;
this.primaryKey = primaryKey;
}
public String getTableName() {
return tableName;
}
public HashMap<String, Object> getPrimaryKey() {
return primaryKey;
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.dbms_change_tracker.model.events;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.event.BaseCustomerDBEvent;
import java.util.HashMap;
public class TableRecordUpdatedEvent extends BaseCustomerDBEvent {
private final String tableName;
private final HashMap<String, Object> primaryKey;
public TableRecordUpdatedEvent(Object source, IntegryCustomerDB customerDB, String tableName, HashMap<String, Object> primaryKey) {
super(source, customerDB);
this.tableName = tableName;
this.primaryKey = primaryKey;
}
public String getTableName() {
return tableName;
}
public HashMap<String, Object> getPrimaryKey() {
return primaryKey;
}
}

View File

@@ -0,0 +1,11 @@
package it.integry.ems.dbms_change_tracker.model.events;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.event.BaseCustomerDBEvent;
public class TableTrackingResettedEvent extends BaseCustomerDBEvent {
public TableTrackingResettedEvent(Object source, IntegryCustomerDB customerDB) {
super(source, customerDB);
}
}

View File

@@ -28,7 +28,7 @@ public class DevicesRequestInterceptor implements HandlerInterceptor {
RequestDataDTO requestDataDTO = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
if (requestDataDTO.isValidProfileDB() && requestDataDTO.isValidDeviceId()) {
deviceService.updateUsage(requestDataDTO.getApplication(), requestDataDTO.getDeviceId());
deviceService.updateUsage(requestDataDTO.getDeviceId());
}
return true;

View File

@@ -5,6 +5,10 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -28,26 +32,26 @@ public class DownloadController {
private MimeTypesHandler mimetypesFileTypeMap;
@RequestMapping(value = "download/{uuid}/{fileName}", method = RequestMethod.GET)
public byte[] download(HttpServletResponse response,
@PathVariable String uuid,
@PathVariable String fileName) throws Exception {
public ResponseEntity<byte[]> download(@PathVariable String uuid,
@PathVariable String fileName) throws Exception {
byte[] fileContent = downloadFileHandlerService.getDownloadFileContent(uuid);
if (fileContent != null) {
String filename = downloadFileHandlerService.getDownloadFileName(uuid);
String mimeType = Files.probeContentType(Paths.get(fileName));
MediaType mediaType = mimetypesFileTypeMap.getContentType(fileName);
response.setContentType(mimeType);
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
response.setContentLength(fileContent.length);
return fileContent;
return ResponseEntity.ok()
.contentType(mediaType)
.contentLength(fileContent.length)
.header(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition
.builder("attachment")
.filename(filename)
.build()
.toString())
.body(fileContent);
}
response.sendError(404, "File non trovato");
return null;
return ResponseEntity.notFound().build();
}
}

View File

@@ -37,8 +37,7 @@ public class DynamicCacheService {
DATI_AZIENDA_KEY,
ENTITY_LOGGER_SETUP,
GRIGLIA_ACQUISTO_KEY,
ENTITY_SYNC_KEY,
STB_GEST_SETUP_KEY
ENTITY_SYNC_KEY
}
public void addItem(Keys key, int invalidateTimeInMins, RunnableWithReturn<Object> refreshAction) {

View File

@@ -0,0 +1,325 @@
package it.integry.ems.dynamic_cache;
import it.integry.annotations.PostContextAutowired;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.dbms_change_tracker.component.DbmsChangeTrackerComponent;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordDeletedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordInsertedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableRecordUpdatedEvent;
import it.integry.ems.dbms_change_tracker.model.events.TableTrackingResettedEvent;
import it.integry.ems.dto.EntityHierarchy;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.base.EntityPropertyHolder;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.exception.DataConverterNotFoundException;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityQuery;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Component
public class EntityCacheComponent implements ApplicationListener {
private final Logger logger = LogManager.getLogger();
private final DbmsChangeTrackerComponent dbmsChangeTrackerComponent;
private final EntityPropertyHolder entityPropertyHolder;
private final HashMap<IntegryCustomerDB, ConcurrentHashMap<String, ConcurrentHashMap<HashMap<String, Object>, EntityBase>>> entityCache = new HashMap<>();
// Lock per IntegryCustomerDB per garantire accessi sincronizzati alla cache di quel customer
private final ConcurrentHashMap<IntegryCustomerDB, Object> cacheLocks = new ConcurrentHashMap<>();
private Object getCacheLock(IntegryCustomerDB customerDB) {
cacheLocks.putIfAbsent(customerDB, new Object());
return cacheLocks.get(customerDB);
}
private final HashMap<String, Class<? extends EntityBase>> enabledEntities = new HashMap<String, Class<? extends EntityBase>>() {{
put(MtbAart.ENTITY, MtbAart.class);
put(MtbAartBarCode.ENTITY, MtbAartBarCode.class);
put(MtbUntMis.ENTITY, MtbUntMis.class);
put(MtbDepo.ENTITY, MtbDepo.class);
put(MtbDepoPosizioni.ENTITY, MtbDepoPosizioni.class);
put(StbEditLimit.ENTITY, StbEditLimit.class);
put(StbGestSetup.ENTITY, StbGestSetup.class);
put(StbGestSetupDepo.ENTITY, StbGestSetupDepo.class);
put(StbUser.ENTITY, StbUser.class);
put(WtbDepo.ENTITY, WtbDepo.class);
put(WtbGestSetupUser.ENTITY, WtbGestSetupUser.class);
put(WtbClie.ENTITY, WtbClie.class);
}};
public EntityCacheComponent(DbmsChangeTrackerComponent dbmsChangeTrackerComponent, EntityPropertyHolder entityPropertyHolder) {
this.dbmsChangeTrackerComponent = dbmsChangeTrackerComponent;
this.entityPropertyHolder = entityPropertyHolder;
}
@PostContextAutowired
private MultiDBTransactionManager multiDBTransactionManager;
@PostContextConstruct
private void init() throws Exception {
if (UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer())
return;
for (Connection conn : multiDBTransactionManager.getActiveConnections()) {
IntegryCustomerDB customerDB = IntegryCustomerDB.parse(conn.getDbName());
if (customerDB == null)
throw new RuntimeException("Impossibile inizializzare IntegryCustomerDB per il database: " + conn.getDbName());
for (Map.Entry<String, Class<? extends EntityBase>> enabledEntity : enabledEntities.entrySet()) {
String tableName = enabledEntity.getKey();
refreshCacheForEntity(conn, customerDB, tableName);
}
}
}
private void refreshCacheGlobal(IntegryCustomerDB customerDB) throws Exception {
try (MultiDBTransactionManager mdb = new MultiDBTransactionManager(customerDB)) {
Connection conn = mdb.getPrimaryConnection();
for (Map.Entry<String, Class<? extends EntityBase>> enabledEntity : enabledEntities.entrySet()) {
String tableName = enabledEntity.getKey();
refreshCacheForEntity(conn, customerDB, tableName);
}
}
}
private void refreshCacheForEntity(IntegryCustomerDB customerDB, String tableName) throws Exception {
try (MultiDBTransactionManager mdb = new MultiDBTransactionManager(customerDB)) {
Connection conn = mdb.getPrimaryConnection();
refreshCacheForEntity(conn, customerDB, tableName);
}
}
private void refreshCacheForEntity(Connection connection, IntegryCustomerDB customerDB, String tableName) throws Exception {
// Sincronizziamo l'intera operazione di refresh per il customerDB per evitare accessi concorrenti
synchronized (getCacheLock(customerDB)) {
Class<? extends EntityBase> clazz = enabledEntities.get(tableName);
// if (clazz == null)
// throw new RuntimeException("Entity cache is not enabled for table " + tableName);
entityCache.putIfAbsent(customerDB, new ConcurrentHashMap<>());
entityCache.get(customerDB).remove(tableName);
ConcurrentHashMap<HashMap<String, Object>, EntityBase> entities = retrieveEntityList(connection, tableName, clazz);
entityCache.get(customerDB).put(tableName, entities);
logger.trace(String.format("[%s] Cached %d records for entity %s",
customerDB.getValue(),
entities.size(),
clazz.getSimpleName()));
}
}
public <T extends EntityBase> List<T> getCachedEntitiesList(IntegryCustomerDB customerDB, String tableName, Predicate<T> filterPredicate) {
return getCachedEntitiesStream(customerDB, tableName, filterPredicate)
.collect(Collectors.toList());
}
public <T extends EntityBase> Stream<T> getCachedEntitiesStream(IntegryCustomerDB customerDB, String tableName, Predicate<T> filterPredicate) {
// Per evitare accessi concorrenti leggiamo/snapshottiamo la cache sotto lock per quel customerDB
Stream<T> snapshot;
synchronized (getCacheLock(customerDB)) {
if (!isCacheEnabled(customerDB, tableName)) {
try {
refreshCacheForEntity(customerDB, tableName);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// prendo un'istantanea degli oggetti clonati per poter lavorare fuori dal lock
snapshot = entityCache.get(customerDB)
.get(tableName)
.values()
.parallelStream()
.map(x -> (T) x.clone());
if (filterPredicate != null)
snapshot = snapshot.filter(filterPredicate);
}
return snapshot;
}
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof TableRecordInsertedEvent) {
handleRecordInserted((TableRecordInsertedEvent) event);
} else if (event instanceof TableRecordUpdatedEvent) {
handleRecordUpdated((TableRecordUpdatedEvent) event);
} else if (event instanceof TableRecordDeletedEvent) {
handleRecordDeleted((TableRecordDeletedEvent) event);
} else if (event instanceof TableTrackingResettedEvent) {
try {
handleTableTrackingResetted((TableTrackingResettedEvent) event);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
private void handleRecordInserted(TableRecordInsertedEvent event) {
if (!isCacheEnabled(event.getCustomerDB(), event.getTableName()))
return;
HashMap<String, Object> entityPrimaryKey = convertSqlMapToEntityMap(event.getPrimaryKey(), enabledEntities.get(event.getTableName()));
try (MultiDBTransactionManager mdb = new MultiDBTransactionManager(event.getCustomerDB())) {
EntityBase newItem = retrieveEntityItem(mdb.getPrimaryConnection(), event.getTableName(),
enabledEntities.get(event.getTableName()),
event.getPrimaryKey());
// sincronizziamo la modifica per il customerDB
synchronized (getCacheLock(event.getCustomerDB())) {
entityCache.get(event.getCustomerDB())
.get(event.getTableName())
.put(entityPrimaryKey, newItem);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void handleRecordUpdated(TableRecordUpdatedEvent event) {
if (!isCacheEnabled(event.getCustomerDB(), event.getTableName()))
return;
HashMap<String, Object> entityPrimaryKey = convertSqlMapToEntityMap(event.getPrimaryKey(), enabledEntities.get(event.getTableName()));
try (MultiDBTransactionManager mdb = new MultiDBTransactionManager(event.getCustomerDB())) {
EntityBase newItem = retrieveEntityItem(mdb.getPrimaryConnection(), event.getTableName(),
enabledEntities.get(event.getTableName()),
event.getPrimaryKey());
// sincronizziamo la modifica per il customerDB
synchronized (getCacheLock(event.getCustomerDB())) {
entityCache.get(event.getCustomerDB())
.get(event.getTableName())
.put(entityPrimaryKey, newItem);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private void handleRecordDeleted(TableRecordDeletedEvent event) {
if (!isCacheEnabled(event.getCustomerDB(), event.getTableName()))
return;
HashMap<String, Object> entityPrimaryKey = convertSqlMapToEntityMap(event.getPrimaryKey(), enabledEntities.get(event.getTableName()));
// sincronizziamo la rimozione per il customerDB
final EntityBase removedItem;
synchronized (getCacheLock(event.getCustomerDB())) {
removedItem = entityCache.get(event.getCustomerDB())
.get(event.getTableName())
.remove(entityPrimaryKey);
}
}
private void handleTableTrackingResetted(TableTrackingResettedEvent event) throws Exception {
// reset e refresh sono eseguiti in modo sincronizzato per quel customer
resetTablesCache(event.getCustomerDB());
refreshCacheGlobal(event.getCustomerDB());
}
private ConcurrentHashMap<HashMap<String, Object>, EntityBase> retrieveEntityList(Connection connection, String tableName, Class<? extends EntityBase> clazz) throws SQLException, DataConverterNotFoundException, InstantiationException, IllegalAccessException {
String sql = "SELECT * FROM " + tableName;
List<? extends EntityBase> objects = UtilityDB.executeSimpleQueryDTO(connection, sql, clazz);
if (objects == null)
objects = new ArrayList<>();
final List<EntityHierarchy.Field> pkFields = entityPropertyHolder.getEntityFields(clazz, EntityHierarchy.Field::isPrimaryKey);
ConcurrentHashMap<HashMap<String, Object>, EntityBase> objectsMap = new ConcurrentHashMap<>();
for (EntityBase object : objects) {
HashMap<String, Object> pkMap = new HashMap<>();
for (EntityHierarchy.Field pkField : pkFields) {
Object pkValue = pkField.getField().get(object);
pkMap.put(pkField.getFieldName(), pkValue);
}
objectsMap.put(pkMap, object);
}
return objectsMap;
}
private EntityBase retrieveEntityItem(Connection connection, String tableName, Class<?> clazz, HashMap<String, Object> primaryKey) throws SQLException, DataConverterNotFoundException, InstantiationException, IllegalAccessException {
String sql = "SELECT * FROM " + tableName + "\n" +
" WHERE " + UtilityQuery.concatFieldsInWhereCond(primaryKey);
final EntityBase object = (EntityBase) UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, sql, clazz);
return object;
}
private HashMap<String, Object> convertSqlMapToEntityMap(HashMap<String, Object> sqlMap, Class<? extends EntityBase> clazz) {
HashMap<String, Object> entityMap = new HashMap<>();
for (Map.Entry<String, Object> entry : sqlMap.entrySet()) {
String fieldName = entityPropertyHolder.getEntityFields(clazz, f -> f.isSqlField() && f.getSqlField().value().equals(entry.getKey()))
.stream()
.findFirst()
.map(EntityHierarchy.Field::getFieldName)
.orElse(entry.getKey());
entityMap.put(fieldName, entry.getValue());
}
return entityMap;
}
private void resetTableCache(IntegryCustomerDB customerDB, String tableName) {
synchronized (getCacheLock(customerDB)) {
if (entityCache.containsKey(customerDB) && entityCache.get(customerDB).containsKey(tableName)) {
entityCache.get(customerDB).remove(tableName);
}
}
}
private void resetTablesCache(IntegryCustomerDB customerDB) {
// sincronizziamo la rimozione dell'intera cache per il customer
synchronized (getCacheLock(customerDB)) {
entityCache.remove(customerDB);
}
}
private boolean isCacheEnabled(IntegryCustomerDB customerDB, String tableName) {
return (entityCache.containsKey(customerDB) && entityCache.get(customerDB).containsKey(tableName)) ||
!(UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer());
}
}

View File

@@ -0,0 +1,7 @@
package it.integry.ems.exception;
public class InvalidCustomerDbException extends RuntimeException {
public InvalidCustomerDbException(String dbName) {
super("Invalid customer database name: " + dbName + ". Please check your ems_settings.json");
}
}

View File

@@ -0,0 +1,7 @@
package it.integry.ems.exception;
public class InvalidDbNameException extends RuntimeException {
public InvalidDbNameException(String dbName) {
super("Invalid database name: " + dbName + ". Please check your ems_settings.json");
}
}

View File

@@ -0,0 +1,7 @@
package it.integry.ems.exception;
public class InvalidProfileDbException extends RuntimeException {
public InvalidProfileDbException(String profileDb) {
super("Invalid profile db: " + profileDb + ". Please check your ems_settings.json");
}
}

View File

@@ -2,6 +2,7 @@ package it.integry.ems.file_formatter.txt;
import com.annimon.stream.Stream;
import it.integry.ems_model.annotation.DtoField;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -10,6 +11,7 @@ import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -76,8 +78,16 @@ public class TxtMapper<T> {
if (ignorePosition)
stringBuilder.append(value).append(fieldsSplitChar);
else
else {
if ( stringBuilder.length() > 0 && stringBuilder.length() < dtoField.startPosition() ) {
int numChar = dtoField.startPosition() - stringBuilder.length();
for (int i = 0; i < numChar; i++) {
stringBuilder.append(fieldsSplitChar);
}
}
stringBuilder.insert(dtoField.startPosition(), value).append(fieldsSplitChar);
}
} catch (Exception e) {
logger.error(e);
@@ -208,6 +218,8 @@ public class TxtMapper<T> {
if (value != null) {
if (!UtilityString.isNullOrEmpty(dtoField.format()) && value instanceof Date) {
value = new SimpleDateFormat(dtoField.format()).format(value);
} else if (!UtilityString.isNullOrEmpty(dtoField.format()) && value instanceof LocalDate) {
value = UtilityLocalDate.formatDate((LocalDate) value, dtoField.format() );
} else if (!UtilityString.isNullOrEmpty(dtoField.formula()) && value instanceof BigDecimal) {
value = ((BigDecimal) value).setScale(dtoField.scale(), RoundingMode.HALF_DOWN);
String formula = dtoField.formula().replaceAll("this", value.toString());

View File

@@ -2,8 +2,11 @@ package it.integry.ems.javabeans;
import com.fasterxml.jackson.annotation.JsonInclude;
import it.integry.common.var.CommonConstants;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.model.IntegryApplicationEnum;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.user.dto.UserDTO;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.utility.UtilityString;
@@ -37,6 +40,10 @@ public class RequestDataDTO {
private String requestClientIP;
private String profileDB;
//Indica il codice deposito reale dell'utente che effettua la richiesta, ovvero la posizione fisica dell'utente
private String codMdep;
private Long deviceId;
private String username;
private String password;
@@ -55,6 +62,10 @@ public class RequestDataDTO {
profileDB = request.getHeader(CommonConstants.PROFILE_DB);
}
if (request != null && request.getHeader(CommonConstants.COD_MDEP) != null) {
codMdep = request.getHeader(CommonConstants.COD_MDEP);
}
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)) {
readAuthenticationClaims(authentication);
@@ -108,6 +119,10 @@ public class RequestDataDTO {
return !UtilityString.isNullOrEmpty(profileDB);
}
public boolean isValidCodMdep() {
return !UtilityString.isNullOrEmpty(codMdep);
}
public boolean isValidDeviceId() {
return deviceId != null;
}
@@ -138,6 +153,20 @@ public class RequestDataDTO {
return profileDB;
}
public String getCodMdep() {
return codMdep;
}
public IntegryCustomerDB getCustomerDB() {
if (UtilityString.isNullOrEmpty(profileDB))
return null;
final SettingsModel settingsModel = ApplicationContextProvider.getApplicationContext().getBean(SettingsModel.class);
final String dbName = settingsModel.getDbNameFromProfileDb(profileDB);
return IntegryCustomerDB.parse(dbName);
}
public Long getDeviceId() {
return deviceId;
}

View File

@@ -33,6 +33,7 @@ public class JsonObjectMapperConfig {
module.addDeserializer(BigDecimal.class, new BigDecimalDeserialize());
module.addDeserializer(Integer.class, new IntegerDeserializer());
module.addDeserializer(Long.class, new LongDeserializer());
module.addDeserializer(String.class, new StringUnicodeDeserialize());

View File

@@ -22,6 +22,7 @@ import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import it.integry.ems_model.utility.dto.PkTableDTO;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.context.ContextLoader;
@@ -75,6 +76,18 @@ public abstract class BaseMigration implements MigrationModelInterface {
return UtilityDB.executeSimpleQueryDTO(connection, sql, clazz);
}
protected @NotNull <T> List<T> executeQueryOnlyFirstColumn(String sql) throws SQLException {
return UtilityDB.executeSimpleQueryOnlyFirstColumn(connection, sql);
}
protected @NotNull HashMap<String, Object> executeQueryOnlyFirstRow(String sql) throws SQLException {
return UtilityDB.executeSimpleQueryOnlyFirstRow(connection, sql);
}
protected @NotNull <T> T executeQueryOnlyFirstRowFirstColumn(String sql) throws SQLException {
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
}
protected void executeStatement(String... sqls) throws SQLException {
executeStatement(connection, sqls);
}
@@ -141,6 +154,10 @@ public abstract class BaseMigration implements MigrationModelInterface {
}
private void alterObject(SqlObjectTypeEnum sqlObject, String objectName, String sql) throws SQLException, IOException {
if (UtilityString.isNullOrEmpty(objectName)) {
throw new IllegalArgumentException("ObjectName in createOrUpdateFunction(), createOrUpdateView(), createOrUpdateTrigger(), createOrUpdateProcedure() cannot be null or empty");
}
executeStatement("IF EXISTS (SELECT * FROM SYSOBJECTS WHERE id = object_id('" + objectName + "'))\r\n" +
"\tDROP " + sqlObject.toString() + " " + objectName,
sql);
@@ -155,12 +172,20 @@ public abstract class BaseMigration implements MigrationModelInterface {
UtilityDB.createIndex(connection, indexTableDTO);
}
protected void createPrimaryKey(PkTableDTO pkTableDTO) throws Exception {
UtilityDB.createPK(connection, pkTableDTO);
}
protected void cloneTable(String sourceTable, String newTable,boolean fillNewTable, boolean dropOldTable, boolean renameNewTable) throws Exception {
protected void cloneTable(String sourceTable, String newTable, boolean fillNewTable, boolean dropOldTable, boolean renameNewTable) throws Exception {
UtilityDB.cloneTable(connection, sourceTable, newTable, fillNewTable, dropOldTable, renameNewTable);
}
protected void dropIndex(String tableName, String indexName) throws Exception {
protected boolean existIndex(String tableName, String indexName) throws SQLException {
return UtilityDB.existIndex(connection, tableName, indexName);
}
protected void dropIndex(String tableName, String indexName) throws SQLException {
UtilityDB.dropIndex(connection, tableName, indexName);
}
@@ -398,6 +423,25 @@ public abstract class BaseMigration implements MigrationModelInterface {
}
}
protected String getSetupValue(String gestName, String section, String keySection) throws SQLException {
String sql = Query.format("SELECT value FROM " + StbGestSetup.ENTITY +
" WHERE gest_name = %s AND" +
" section = %s AND" +
" key_section = %s", gestName, section, keySection);
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
}
//Create a getStbGestSetup method to return the entire StbGestSetup object
protected StbGestSetup getStbGestSetup(String gestName, String section, String keySection) throws SQLException, DataConverterNotFoundException, InstantiationException, IllegalAccessException {
String sql = Query.format("SELECT * FROM stb_gest_setup " +
" WHERE gest_name = %s AND" +
" section = %s AND" +
" key_section = %s", gestName, section, keySection);
return UtilityDB.executeSimpleQueryOnlyFirstRowDTO(connection, sql, StbGestSetup.class);
}
protected void deleteSetup(String gestName, String section, String keySection) throws Exception {
StbGestSetup stbGestSetup = new StbGestSetup()
.setGestName(gestName)
@@ -480,6 +524,16 @@ public abstract class BaseMigration implements MigrationModelInterface {
stbGestSetup.manageWithParentConnection(connection);
}
protected void dropSetup(String gestName, String section, String keySection) throws Exception {
StbGestSetup stbGestSetup = new StbGestSetup()
.setGestName(gestName)
.setSection(section)
.setKeySection(keySection);
stbGestSetup.setOperation(OperationType.DELETE);
stbGestSetup.manageWithParentConnection(connection);
}
protected void addAutomatedOperation(BaseScheduledOperationDTO operation) {
new Thread(() -> {
try {

View File

@@ -8,7 +8,7 @@ public enum IntegryCustomer {
IntegryCustomerDB.Agricoper_IlVisone,
IntegryCustomerDB.Agricoper_Luva),
ATI(IntegryCustomerDB.ATI_Finpart),
ATI(IntegryCustomerDB.ATI, IntegryCustomerDB.ATI_Finpart),
Auricchio(IntegryCustomerDB.Auricchio_Auricchio,
IntegryCustomerDB.Auricchio_AuricchioMiki,
IntegryCustomerDB.Auricchio_AuricchioSrl,
@@ -71,7 +71,8 @@ public enum IntegryCustomer {
Gramm(IntegryCustomerDB.Gramm_Gramm,
IntegryCustomerDB.Gramm_PrimeOlive,
IntegryCustomerDB.Gramm_ProveStage,
IntegryCustomerDB.Gramm_2MHolding),
IntegryCustomerDB.Gramm_2MHolding,
IntegryCustomerDB.Gramm_GrammUsa),
Idrotecnica(IntegryCustomerDB.Idrotecnica_Idrotecnica),
Igood(IntegryCustomerDB.Igood_Aida,
IntegryCustomerDB.Igood_Igood,
@@ -118,7 +119,10 @@ public enum IntegryCustomer {
IntegryCustomerDB.Suit_TenutaArianna,
IntegryCustomerDB.Suit_Valpietro),
Tempesta(IntegryCustomerDB.Tempesta_Tempesta,
IntegryCustomerDB.Tempesta_VivaiTempesta),
IntegryCustomerDB.Tempesta_DI,
IntegryCustomerDB.Tempesta_VivaiTempesta,
IntegryCustomerDB.Tempesta_VivaiTempesta_DI
),
Tosca(IntegryCustomerDB.Tosca_Ba,
IntegryCustomerDB.Tosca_Ce,
IntegryCustomerDB.Tosca_Cz,

View File

@@ -1,5 +1,6 @@
package it.integry.ems.migration._base;
import it.integry.ems.exception.InvalidCustomerDbException;
import it.integry.ems_model.utility.UtilityString;
import java.util.Arrays;
@@ -9,7 +10,9 @@ public enum IntegryCustomerDB {
Agricoper_IlVisone("ilvisone"),
Agricoper_Luva("luva"),
ATI("atisrl"),
ATI_Finpart("Finpart"),
Auricchio_Auricchio("auricchio"),
Auricchio_AuricchioMiki("auricchio_miki"),
Auricchio_AuricchioSrl("auricchiosrl"),
@@ -31,6 +34,7 @@ public enum IntegryCustomerDB {
Carelli_Chiuso("chiuso"),
Carelli_Format("format"),
Carelli_Murgia("murgia"),
Carelli_MurgiaTest("murgia_test"),
Carelli_Panimal("panimal"),
Carelli_Winact("winact"),
Carelli_Csgr("csgr"),
@@ -92,7 +96,8 @@ public enum IntegryCustomerDB {
Gramm_Gramm("gramm"),
Gramm_PrimeOlive("primeolive"),
Gramm_ProveStage("grammprovestage"),
Gramm_2MHolding("2M_HOLDING"),
Gramm_2MHolding("dueemme"),
Gramm_GrammUsa("gramm_usa"),
Idrotecnica_Idrotecnica("idrotecnica"),
@@ -123,6 +128,7 @@ public enum IntegryCustomerDB {
Levanplast_Perilflor("perilflor"),
Levanplast_PerilflorSrl("perilflorsrl"),
Levanplast_Levanplast("levanplast"),
Levanplast_Levanplastsrl("levanplastsrl"),
Maggio_MaggioSrl("maggiosrl"),
Maggio_GiovMaggio("giovmaggio"),
@@ -192,7 +198,9 @@ public enum IntegryCustomerDB {
Tempesta_Tempesta("tempesta"),
Tempesta_DI("tempestadi"),
Tempesta_VivaiTempesta("vivaitempesta"),
Tempesta_VivaiTempesta_DI("vivaitempestadi"),
Tosca_Ba("tosca_ba"),
@@ -230,6 +238,6 @@ public enum IntegryCustomerDB {
return Arrays.stream(values()).filter(x -> x.getValue().equalsIgnoreCase(value))
.findFirst()
.orElse(null);
.orElseThrow(() -> new InvalidCustomerDbException(value));
}
}

View File

@@ -6,6 +6,7 @@ import it.integry.ems_model.entity.StbUser;
import it.integry.ems_model.entity.WtbUsers;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import it.integry.security.utility.CryptoUtils;
@@ -57,7 +58,7 @@ public class Migration_20220413102657 extends BaseMigration implements Migration
.setUserCode(wtbUser.getUserCode())
.setDetails(wtbUser.getDetails())
.setLastAccessDatetime(wtbUser.getLastAccessDatetime())
.setPasswordEndtime(wtbUser.getPasswordEndtime())
.setPasswordEndtime(UtilityLocalDate.localDateTimeFromDate(wtbUser.getPasswordEndtime()))
.setUrlCss(wtbUser.getUrlCss())
.setCodLang(wtbUser.getCodLang())
.setCreationDatetime(wtbUser.getCreationDatetime())

View File

@@ -10,6 +10,8 @@ public class Migration_20251022125946 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getListinoVendita", "CREATE FUNCTION [dbo].[getListinoVendita](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15))\n" +
" RETURNS TABLE AS\n" +

View File

@@ -10,6 +10,9 @@ public class Migration_20251024175524 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"exec DropForeignKey 'ctb_amac', 'mtb_depo_posizioni'",
"exec DropForeignKey 'jrl_fase_posizioni', 'mtb_depo_posizioni'",

View File

@@ -13,6 +13,9 @@ public class Migration_20251027172319 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"CREATE TABLE [dbo].[mtb_ssfam]("
+ " [cod_mgrp] varchar(5) NOT NULL, "

View File

@@ -14,6 +14,9 @@ public class Migration_20251027173518 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
IndexTableDTO indexTableDTO =
new IndexTableDTO()
.setTableName("mtb_aart_marchio")

View File

@@ -10,6 +10,8 @@ public class Migration_20251029153203 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateView("[vw_tracciabUDCVend]", "CREATE VIEW [dbo].[vw_tracciabUDCVend] AS\n" +
"SELECT mtb_colt.cod_anag AS codAnag,\n" +

View File

@@ -10,6 +10,8 @@ public class Migration_20251029170931 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getDettMatricoleDaOrdine", "CREATE Function [dbo].[getDettMatricoleDaOrdine] (@codJcom varchar(10)) \n" +
"RETURNS @dettMatricole TABLE( cod_prod varchar(15),\n" +

View File

@@ -21,6 +21,9 @@ public class Migration_20251029181607 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"EXEC sp_updateextendedproperty 'MS_Description',\n" +
" 'Valori possibili: 0 -> Testo, 1 -> Boolean, 2 -> Intero, 3 -> Decimale, 4 -> Date, 5 -> Datetime, 6 -> Time, 7 -> DropdownList',\n" +

View File

@@ -10,6 +10,9 @@ public class Migration_20251031092657 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table dtb_tipi add flag_delete_plk bit not null default 0");
}

View File

@@ -10,6 +10,9 @@ public class Migration_20251031100008 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("exec sp_rename 'dtb_tipi.flag_delete_plk', 'flag_delete_pkl'");
}

View File

@@ -10,6 +10,9 @@ public class Migration_20251103175252 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"CREATE TABLE mtb_colori ("
+ " cod_col varchar(6) NOT NULL, "

View File

@@ -10,6 +10,9 @@ public class Migration_20251104122721 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"ALTER TABLE dbo.vtb_offt\n" +
" ADD cod_banc VARCHAR(5)\n" +

View File

@@ -10,6 +10,9 @@ public class Migration_20251105171403 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("delete dtb_ordr\n" +
"from dtb_ordr \n" +
"where not exists (select *\n" +

View File

@@ -11,6 +11,9 @@ public class Migration_20251106104752 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
dropDefault("mtb_lisv", "flag_primario");
addDefault("mtb_lisv", "flag_primario", 1);

View File

@@ -10,6 +10,9 @@ public class Migration_20251106113104 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction(
"pvm_getassortimentoClientePedane",
"CREATE FUNCTION [dbo].[pvm_getassortimentoClientePedane](\n" +

View File

@@ -0,0 +1,20 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251110095557 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("PVM","MRP", "COD_MDEP_PREF", null, "Inserire la lista dei depositi preselezionati per utente",
"COD_MDEP", true, true);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,42 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.UtilityQuery;
import java.util.List;
public class Migration_20251110100959 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Carelli_Winact))
return;
final List<String> duplicatedBarcodes = executeQueryOnlyFirstColumn("SELECT cod_barre\n" +
"FROM mtb_aart_bar_code\n" +
"GROUP BY cod_barre\n" +
"HAVING COUNT(cod_barre) > 1");
executeStatement("DELETE FROM dbo.mtb_aart_bar_code\n" +
"WHERE cod_barre IN (" + UtilityQuery.concatStringFieldsWithSeparator(duplicatedBarcodes, ",") + ")");
executeStatement("ALTER TABLE dbo.mtb_aart_bar_code\n" +
" ALTER COLUMN cod_mart VARCHAR(15) NOT NULL",
"ALTER TABLE dbo.mtb_aart_bar_code\n" +
" ALTER COLUMN cod_barre VARCHAR(40) NOT NULL",
"ALTER TABLE dbo.mtb_aart_bar_code\n" +
" ADD CONSTRAINT pk_mtb_aart_bar_code\n" +
" PRIMARY KEY (cod_mart, cod_barre)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,25 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251110104131 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"ALTER TABLE dbo.vtb_viaggi\n" +
" ALTER COLUMN note_incoterms VARCHAR(40) NULL;"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,30 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251110111625 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createSetupQuery(null, null, "SELECT '1|Prezzo netto d''acquisto e ricalcola il prezzo di vendita (Ricarica fissa)' UNION SELECT '2|Prezzo netto d''acquisto e ricalcola ricarica (Prezzo di vendita fisso)' UNION SELECT '3|Prezzo netto d''acquisto e prezzo di vendita da prezzo lordo d''acquisto (Ricalcola ricarica)' UNION SELECT '4|Prezzo netto d''acquisto e ricalcola il prezzo di vendita (Ricarica fissa da Testata listino)' UNION SELECT '5|Prezzo netto d''acquisto, prezzo di vendita e ricarica fissa (Non ricalcolare prezzo)' UNION SELECT '6|Prezzo netto d''acquisto, prezzo di vendita = Prezzo Vendita Suggerito' UNION SELECT '7|Non ricalcolare il prezzo' ");
createSetup("VTB_LIST", "LISV4LISA", "CALC_PRZ_BASE", null,
"SELEZIONARE IL CRITERIO DI CALCOLO DEL PREZZO BASE", false, null, false, false,
false, false, false, null, false, "SELECT '1|Prezzo netto d''acquisto e ricalcola il prezzo di vendita (Ricarica fissa)' UNION SELECT '2|Prezzo netto d''acquisto e ricalcola ricarica (Prezzo di vendita fisso)' UNION SELECT '3|Prezzo netto d''acquisto e prezzo di vendita da prezzo lordo d''acquisto (Ricalcola ricarica)' UNION SELECT '4|Prezzo netto d''acquisto e ricalcola il prezzo di vendita (Ricarica fissa da Testata listino)' UNION SELECT '5|Prezzo netto d''acquisto, prezzo di vendita e ricarica fissa (Non ricalcolare prezzo)' UNION SELECT '6|Prezzo netto d''acquisto, prezzo di vendita = Prezzo Vendita Suggerito' UNION SELECT '7|Non ricalcolare il prezzo' ");
if (isCustomer(IntegryCustomer.Carelli))
updateSetupValue("VTB_LIST", "LISV4LISA", "CALC_PRZ_BASE","1");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,284 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251110175256 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table vtb_list add tipo_um tinyint");
createOrUpdateFunction("getListinoVendita","CREATE FUNCTION [dbo].[getListinoVendita](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15))\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" CASE\n" +
" WHEN tmp_list.max_lisv IS NULL THEN NULL\n" +
" ELSE CONVERT(DATETIME, LEFT(tmp_list.max_lisv, 10)) END AS data_iniz,\n" +
" CASE\n" +
" WHEN tmp_list.max_lisv IS NULL THEN NULL\n" +
" ELSE CONVERT(INT, RIGHT(tmp_list.max_lisv, 4)) END AS versione,\n" +
" vtb_list.cod_divi,\n" +
" vtb_list.cambio,\n" +
" vtb_list.flag_arr_prz_iva,\n" +
" vtb_list.arr_ric,\n" +
" vtb_list.flag_list_iva_inclusa,\n" +
" vtb_list.flag_lisv_margine,\n" +
" vtb_list.flag_add_trasp,\n" +
" tmp_list.cod_mart AS 'cod_mart',\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" ISNULL(mtb_lisv_data.rap_conv, 1) AS rap_conv,\n" +
" ISNULL(mtb_lisv_data.prz_base, 0) AS prz_base,\n" +
" ISNULL(mtb_lisv_data.ricarica, 0) AS ricarico,\n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_vend IS NOT NULL AND mtb_lisv_data.prz_vend <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) * 100, 2)\n" +
" ELSE 0 END AS margine_eff,\n" +
" --dbo.f_calcMargineEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) ricarico_eff, \n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_base IS NOT NULL AND mtb_lisv_data.prz_base <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100)) * 100, 2)\n" +
" ELSE 0 END AS ricarico_eff,\n" +
"\n" +
" ISNULL(mtb_lisv_data.magg_prz_vend, 0) AS magg_prz_vend,\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) AS prz_vend,\n" +
" ISNULL(mtb_lisv_data.prz_vend_iva, 0) AS prz_vend_iva,\n" +
" ISNULL(mtb_lisv_data.perc_sco1, 0) AS perc_sco1,\n" +
" ISNULL(mtb_lisv_data.perc_sco2, 0) AS perc_sco2,\n" +
" ISNULL(mtb_lisv_data.perc_sco3, 0) AS perc_sco3,\n" +
" ISNULL(mtb_lisv_data.perc_sco4, 0) AS perc_sco4,\n" +
" ISNULL(mtb_lisv_data.perc_prov, 0) AS perc_prov,\n" +
" ISNULL(mtb_lisv_data.fisso_prov, 0) AS fisso_prov,\n" +
" ISNULL(mtb_lisv_data.posizione, '') AS posizione,\n" +
" ISNULL(mtb_lisv_data.perc_gest, 0) AS perc_gest,\n" +
" ISNULL(mtb_lisv_data.val_gest, 0) AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" ISNULL(mtb_lisv_data.perc_ispe, 0) AS perc_ispe,\n" +
" ISNULL(mtb_lisv_data.val_ispe, 0) AS val_ispe,\n" +
" ISNULL(mtb_lisv_data.perc_promo, 0) AS perc_promo,\n" +
" ISNULL(mtb_lisv_data.val_promo, 0) AS val_promo,\n" +
" ISNULL(mtb_lisv_data.perc_oneri, 0) AS perc_oneri,\n" +
" ISNULL(mtb_lisv_data.val_oneri, 0) AS val_oneri,\n" +
" mtb_lisv_data.tipo_variazione AS tipo_variazione,\n" +
" mtb_lisv_data.note AS note,\n" +
" mtb_lisv_data.aggiornato_da AS aggiornato_da,\n" +
" mtb_lisv_data.prz_vend * (1 - mtb_lisv_data.perc_sco1 / 100) * (1 - mtb_lisv_data.perc_sco2 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco3 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.colli_pedana, 0) <> 0 THEN mtb_lisv_data.colli_pedana\n" +
" ELSE mtb_aart.colli_pedana END AS colli_pedana,\n" +
" mtb_lisv_data.cod_tcol_ul AS cod_tcol_ul,\n" +
" mtb_lisv_data.cod_tcol_ui AS cod_tcol_ui,\n" +
" ISNULL(mtb_lisv_data.prz_vend_sug, 0) AS prz_vend_sug,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.qta_cnf, 0) <> 0\n" +
" AND dbo.getGestSetup('VTB_LIST', 'SETUP', 'QTA_CNF_LISTINO') = 'S' \n" +
" THEN mtb_lisv_data.qta_cnf\n" +
" ELSE mtb_aart.qta_cnf / ISNULL(mtb_lisv_data.rap_conv, 1) END AS qta_cnf,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.colli_strato, 0) <> 0 THEN mtb_lisv_data.colli_strato\n" +
" ELSE mtb_aart.colli_strato END AS colli_strato,\n" +
" mtb_lisv_data.descrizione_html AS descrizione_html,\n" +
" mtb_lisv_data.colli_pedana AS colli_pedana_lisv,\n" +
" mtb_lisv_data.qta_cnf AS qta_cnf_lisv,\n" +
" mtb_lisv_data.colli_strato AS colli_strato_lisv,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" vtb_list.flag_attivo,\n" +
" vtb_list_data.note AS note_testata,\n" +
" ISNULL(mtb_lisv_data.flag_prz_bloccato, 'N') AS flag_prz_bloccato,\n" +
" vtb_list_data.porto AS porto,\n" +
" mtb_lisv_data.system_note,\n" +
" mtb_lisv.add_val_spese,\n" +
" mtb_lisv.add_ric_spese,\n" +
" mtb_lisv.add_sco_spese,\n" +
"\t\t\t mtb_aart.flag_incl_listino,\n" +
"\t\t\t mtb_lisv.flag_primario,\n" +
"\t\t\t mtb_aart.id_art_equi,\n" +
"\t\t\t vtb_list.tipo_um\n" +
" FROM (SELECT vtb_list.cod_vlis AS cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" MAX(CASE\n" +
" WHEN vtb_list_data.versione IS NULL THEN NULL\n" +
" ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" +
" REPLICATE('0', 5 - LEN(vtb_list_data.versione)) +\n" +
" CONVERT(VARCHAR(5), vtb_list_data.versione) END) AS max_lisv,\n" +
" vtb_list.cod_vlis AS 'cod_vlis_rif'\n" +
" FROM vtb_list\n" +
" INNER JOIN mtb_lisv_data ON vtb_list.cod_vlis = mtb_lisv_data.cod_vlis\n" +
" LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND\n" +
" mtb_lisv_data.versione = vtb_list_data.versione AND\n" +
" vtb_list_data.cod_promo IS NULL AND\n" +
" vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" +
" WHERE vtb_list.cod_vlis_rif IS NULL\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data.cod_mart\n" +
" UNION\n" +
" SELECT vtb_list.cod_vlis AS cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" MAX(CASE\n" +
" WHEN vtb_list_data.versione IS NULL THEN NULL\n" +
" ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" +
" REPLICATE('0', 5 - LEN(vtb_list_data.versione_rif)) +\n" +
" CONVERT(VARCHAR(5), vtb_list_data.versione_rif) END) AS max_lisv,\n" +
" vtb_list.cod_vlis_rif AS 'cod_vlis_rif'\n" +
" FROM vtb_list\n" +
" INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" +
" INNER JOIN vtb_list_data vtb_list_data_rif\n" +
" ON vtb_list_data.versione_rif = vtb_list_data_rif.versione AND\n" +
" vtb_list_data.cod_vlis_rif = vtb_list_data_rif.cod_vlis\n" +
" INNER JOIN mtb_lisv_data ON vtb_list_data_rif.cod_vlis = mtb_lisv_data.cod_vlis AND\n" +
" vtb_list_data_rif.versione = mtb_lisv_data.versione\n" +
"\n" +
" WHERE vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" +
" AND vtb_list.cod_vlis_rif IS NOT NULL\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" vtb_list.cod_vlis_rif) tmp_list\n" +
" INNER JOIN vtb_list ON vtb_list.cod_vlis = tmp_list.cod_vlis\n" +
" INNER JOIN mtb_lisv\n" +
" ON tmp_list.cod_vlis_rif = mtb_lisv.cod_vlis AND tmp_list.cod_mart = mtb_lisv.cod_mart\n" +
" INNER JOIN mtb_aart ON tmp_list.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis_rif = mtb_lisv_data.cod_vlis AND\n" +
" tmp_list.cod_mart = mtb_lisv_data.cod_mart AND\n" +
" CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = mtb_lisv_data.versione\n" +
" LEFT OUTER JOIN vtb_list_data ON tmp_list.cod_vlis = vtb_list_data.cod_vlis AND\n" +
" CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = vtb_list_data.versione\n" +
"\n" +
" WHERE (@codmart IS NULL OR tmp_list.cod_mart = @codmart)\n" +
" AND (@codvlis IS NULL OR tmp_list.cod_vlis = @codvlis)\n");
createOrUpdateFunction("getListinoVenditaPedane","CREATE FUNCTION [dbo].[getListinoVenditaPedane](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15), @pedane INT)\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" WITH trasp AS (SELECT mtb_lisv_data_spese.cod_vlis,\n" +
" mtb_lisv_data_spese.versione,\n" +
" mtb_lisv_data_spese.cod_spes,\n" +
" mtb_lisv_data_spese.perc_ricarico,\n" +
" mtb_lisv_data_spese.val_ricarico,\n" +
" mtb_lisv_data_spese.perc_sconto,\n" +
" mtb_lisv_data_spese.da,\n" +
" mtb_lisv_data_spese.a\n" +
" FROM vtb_list_data\n" +
" --riga Sotto Aggiunta da Massimo 08/01/25 per non fare uscire i range pedane quando il prezzo non deve essere addizionato del costo dei trasporti\n" +
" --inner join vtb_list on vtb_list_data.cod_vlis = vtb_list.cod_vlis and vtb_list.flag_add_trasp = 1\n" +
" INNER JOIN mtb_lisv_data_spese\n" +
" ON vtb_list_data.cod_vlis = mtb_lisv_data_spese.cod_vlis AND\n" +
" vtb_list_data.versione = mtb_lisv_data_spese.versione\n" +
" CROSS APPLY (SELECT MAX(id_listino) AS max_id_listino\n" +
" FROM vtb_list_data t\n" +
" WHERE t.data_iniz <= ISNULL(@datavalidita, CAST(GETDATE() AS DATE))\n" +
" AND vtb_list_data.cod_vlis = t.cod_vlis) max_lisv\n" +
" WHERE vtb_list_data.id_listino = max_lisv.max_id_listino)\n" +
"\n" +
" SELECT list.cod_vlis,\n" +
" list.descrizione,\n" +
" list.data_iniz,\n" +
" list.versione,\n" +
" list.cod_divi,\n" +
" list.cambio,\n" +
" list.flag_arr_prz_iva,\n" +
" list.arr_ric,\n" +
" list.flag_list_iva_inclusa,\n" +
" list.flag_lisv_margine,\n" +
" list.flag_add_trasp,\n" +
" list.cod_mart,\n" +
" list.unt_mis_ven,\n" +
" list.rap_conv,\n" +
" list.prz_base,\n" +
" list.ricarico,\n" +
" list.margine_eff,\n" +
" list.ricarico_eff,\n" +
" list.magg_prz_vend,\n" +
" list.prz_vend,\n" +
" list.prz_vend_iva,\n" +
" list.perc_sco1,\n" +
" list.perc_sco2,\n" +
" list.perc_sco3,\n" +
" list.perc_sco4,\n" +
" list.perc_prov,\n" +
" list.fisso_prov,\n" +
" list.posizione,\n" +
" list.perc_gest,\n" +
" list.val_gest,\n" +
" list.data_agg_prz,\n" +
" list.perc_ispe,\n" +
" list.val_ispe,\n" +
" list.perc_promo,\n" +
" list.val_promo,\n" +
" list.perc_oneri,\n" +
" list.val_oneri,\n" +
" list.tipo_variazione,\n" +
" list.note,\n" +
" list.aggiornato_da,\n" +
" list.prz_vend_netto,\n" +
" list.colli_pedana,\n" +
" list.cod_tcol_ul,\n" +
" list.cod_tcol_ui,\n" +
" list.prz_vend_sug,\n" +
" list.qta_cnf,\n" +
" list.colli_strato,\n" +
" list.descrizione_html,\n" +
" list.colli_pedana_lisv,\n" +
" list.qta_cnf_lisv,\n" +
" list.colli_strato_lisv,\n" +
" list.sconto_cartoni,\n" +
" list.sconto_strato,\n" +
" list.sconto_pedane,\n" +
" list.flag_attivo,\n" +
" list.note_testata,\n" +
" list.flag_prz_bloccato,\n" +
" list.porto,\n" +
" list.system_note,\n" +
" list.add_val_spese,\n" +
" list.add_ric_spese,\n" +
" list.add_sco_spese,\n" +
" list.flag_incl_listino,\n" +
" list.flag_primario,\n" +
" list.id_art_equi,\n" +
" trasp.cod_spes,\n" +
" trasp.perc_ricarico,\n" +
" trasp.val_ricarico,\n" +
" trasp.perc_sconto,\n" +
" trasp.da,\n" +
" trasp.a,\n" +
" (list.prz_vend +\n" +
" IIF(list.flag_add_trasp = 1, --Questa condizione si potrebbe togliere per la modifica fatta l'8/01/25\n" +
" ((ISNULL(val_ricarico, 0)) * list.add_val_spese) /\n" +
" IIF(ISNULL(list.colli_pedana, 1) = 0, 1, list.colli_pedana), 0)) +\n" +
" ((ISNULL(perc_ricarico, 0) * list.add_ric_spese * list.prz_vend) / 100) *\n" +
" (1 - (ISNULL(perc_sconto, 0) * list.add_sco_spese) / 100) prz_vend_trasp,\n" +
" ((list.prz_vend +\n" +
" IIF(list.flag_add_trasp = 1, --Questa condizione si potrebbe togliere per la modifica fatta l'8/01/25\n" +
" ((ISNULL(val_ricarico, 0)) * list.add_val_spese) /\n" +
" IIF(ISNULL(list.colli_pedana, 1) = 0, 1, list.colli_pedana), 0)) +\n" +
" ((ISNULL(perc_ricarico, 0) * list.add_ric_spese * list.prz_vend) / 100) *\n" +
" (1 - (ISNULL(perc_sconto, 0) * list.add_sco_spese) / 100)) * (1 - list.perc_sco1 / 100) *\n" +
" (1 - list.perc_sco2 / 100) *\n" +
" (1 - list.perc_sco3 / 100) *\n" +
" (1 - list.perc_sco4 / 100) AS prz_vend_trasp_netto,\n" +
"\t\t\t list.tipo_um\n" +
" FROM getlistinovendita(@datavalidita, @codvlis, @codmart) list\n" +
" LEFT OUTER JOIN trasp ON list.cod_vlis = trasp.cod_vlis AND\n" +
" (@pedane IS NULL OR @pedane BETWEEN da AND a OR\n" +
" (@pedane IS NOT NULL AND da = 0 AND a = 0))");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,45 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.entity.StbGestSetup;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Migration_20251110184508 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String sql = "SELECT DISTINCT wgsu.gest_name, wgsu.section, wgsu.key_section, 'S' AS flag_setup_user_web\n" +
"FROM wtb_gest_setup_user wgsu\n" +
"WHERE NOT EXISTS(SELECT sgs.gest_name, sgs.section, sgs.key_section\n" +
" FROM stb_gest_setup sgs\n" +
" WHERE wgsu.gest_name = sgs.gest_name\n" +
" AND wgsu.section = sgs.section\n" +
" AND wgsu.key_section = sgs.key_section)";
List<StbGestSetup> stbGestSetupsToCreate = UtilityDB.executeSimpleQueryDTO(connection, sql, StbGestSetup.class);
if (UtilityList.isNullOrEmpty(stbGestSetupsToCreate)) {
return;
}
for (StbGestSetup stbGestSetup : stbGestSetupsToCreate) {
stbGestSetup.setOperation(OperationType.INSERT);
stbGestSetup.manageWithParentConnection(connection);
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,31 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251111110443 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Salpar)){
executeStatement("INSERT INTO stb_tipi_indirizzi\n" +
"VALUES ('PUNTO VENDITA', 'ABRW'),\n" +
" ('PUNTO VENDITA', 'ABTW'),\n" +
" ('PUNTO VENDITA', 'BAMW'),\n" +
" ('PUNTO VENDITA', 'BATW')");
executeStatement("UPDATE vtb_clie_pers_rif\n" +
"SET tipo_indirizzo = 'PUNTO VENDITA'\n" +
"WHERE tipo_indirizzo = 'UFFICIO ACQUISTI'");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,69 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251111120322 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction(
"pvm_getassortimentoCliente",
"CREATE FUNCTION [dbo].[pvm_getassortimentoCliente](\n" +
" @codAnag VARCHAR(5), @codVlis VARCHAR(5), @codVdes VARCHAR(5), @dataValidita DATETIME, @viewPromo BIT\n" +
")\n" +
" RETURNS TABLE AS\n" +
" RETURN(SELECT cod_mart,\n" +
" cod_mart_anag,\n" +
" cod_vlis,\n" +
" data_iniz,\n" +
" data_fine,\n" +
" da,\n" +
" a,\n" +
" prz_vend,\n" +
" prz_vend_netto,\n" +
" perc_sco1,\n" +
" perc_sco2,\n" +
" perc_sco3,\n" +
" perc_sco4,\n" +
" perc_prov,\n" +
" qta_residua,\n" +
" id_contratto,\n" +
" rap_conv,\n" +
" note,\n" +
" cod_tcol_ul,\n" +
" unt_mis_ven,\n" +
" colli_pedana,\n" +
" tipo_variazione,\n" +
" tipo_promo,\n" +
" cod_paga,\n" +
" descr_paga,\n" +
" porto,\n" +
" qta_cnf,\n" +
" art_lisv,\n" +
" cod_vdes,\n" +
" note_incoterms,\n" +
" data_rif_scad,\n" +
" note_carico,\n" +
" term_cons,\n" +
" cod_banc,\n" +
" descr_banc,\n" +
" flag_primario\n" +
" FROM [dbo].pvm_getassortimentoClientePedane(\n" +
" @codAnag, @codVlis, @codVdes, @dataValidita, @viewPromo,\n" +
" DEFAULT))"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,30 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251111151102 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Gramm_Gramm))
return;
createSetup("W_VEDI_DESADV_DLG", "SETUP", "VERSIONE_C2835", "20",
null, false, null, false, false,
false, false, false, null, false, null);
createSetup("W_VEDI_DESADV_DLG", "SETUP", "DTM_C2835", "137",
"Qualificatore data ora riferimento (Data documento), per default è impostato a 2", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,55 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.entity.JtbCiclCq;
import it.integry.ems_model.entity._enum.TipoValore;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityInteger;
import it.integry.ems_model.utility.UtilityList;
import java.util.List;
public class Migration_20251111170814 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Gramm_Gramm))
return;
String sql = "select distinct jtb_cicl.cod_prod,MAX(jtb_cicl_cq.num_fase) as num_fase,max(jtb_cicl_cq.id_riga) as id_riga\n" +
"from jtb_dist_clav_dir dir\n" +
" inner join jtb_cicl on dir.cod_prod = jtb_cicl.cod_prod\n" +
" left outer join jtb_cicl_cq on jtb_cicl.cod_prod = jtb_cicl_cq.cod_prod\n" +
"where dir.cod_jfas like 'SC%'\n" +
" and jtb_cicl.flag_attiva = 'S'\n" +
"group by jtb_cicl.cod_prod";
List<JtbCiclCq> distinteDaAggiornare = UtilityDB.executeSimpleQueryDTO(connection, sql, JtbCiclCq.class);
if (UtilityList.isNullOrEmpty(distinteDaAggiornare))
return;
for (JtbCiclCq jtbCiclCq : distinteDaAggiornare) {
jtbCiclCq.setIdRiga(UtilityInteger.isNull(jtbCiclCq.getIdRiga(),0) + 1)
.setNumFase(UtilityInteger.isNull(jtbCiclCq.getNumFase(),0))
.setControllo("Check Etichetta Cartone")
.setTipoValore(TipoValore.BOOLEAN)
.setValoreRif("S")
.setNumRip(0)
.setTipologia("DETAILED_CQ")
.setOperation(OperationType.INSERT);
jtbCiclCq.manageWithParentConnection(connection);
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,51 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251111171747 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("lisv_getTipoUm", "CREATE FUNCTION dbo.lisv_getTipoUm\n" +
"( \n" +
" @codMart varchar(15), @tipoUmLisv tinyint\n" +
")\n" +
"RETURNS TABLE \n" +
"AS\n" +
"RETURN \n" +
"(\n" +
" with um as (\n" +
"select cod_mart, unt_mis, rap_conv\n" +
"from dbo.getUntMisArticolo(@codMart, null ) um\n" +
"where @tipoUmLisv is not null\n" +
"and ( (@tipoUmLisv = 1 and um.tipo_um = 'UI' ) or \n" +
"(@tipoUmLisv = 2 and flag_unita_kg = 'S'))\n" +
")\n" +
"\n" +
"select mtb_aart.cod_mart, \n" +
"case \n" +
"when @tipoUmLisv IS null then mtb_aart.unt_mis\n" +
"when @tipoUmLisv = 1 and mtb_aart.qta_cnf not in (0, 1) then mtb_aart.unt_mis\n" +
"when @tipoUmLisv = 2 and mtb_aart.peso_kg not in (0, 1) then mtb_aart.unt_mis\n" +
" else ISNULL(um.unt_mis, mtb_aart.unt_mis) end as unt_mis_ven, \n" +
"case \n" +
"when @tipoUmLisv IS null then 1\n" +
"when @tipoUmLisv = 1 and mtb_aart.qta_cnf not in (0, 1) then 1\n" +
"when @tipoUmLisv = 2 and mtb_aart.peso_kg not in (0, 1) then 1\n" +
" else ISNULL(um.rap_conv, 1) end as rap_conv_vend\n" +
"from mtb_aart left outer join um on mtb_aart.cod_mart = um.cod_mart\n" +
"where (@codMart is null or mtb_aart.cod_mart = @codMart )\n" +
")");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251113102040 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("ALTER TABLE vtb_list_data ADD promo_chiusa bit DEFAULT 0 NOT NULL");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,211 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251113105159 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("exec sp_rename 'vtb_list_data.promo_chiusa', 'chiusura_immediata'");
createOrUpdateFunction("getPromozioneVendita", "CREATE FUNCTION [dbo].[getPromozioneVendita](@dataIniz DATETIME, @dataFine DATETIME, @codVlis VARCHAR(5),\n" +
" @codPromo VARCHAR(10), @codMart VARCHAR(15))\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" vtb_list_data.data_iniz,\n" +
" vtb_list_data.data_fine,\n" +
" vtb_list_data.cod_promo,\n" +
" vtb_list_data.versione,\n" +
" vtb_list.cod_divi,\n" +
" vtb_list.flag_arr_prz_iva,\n" +
" vtb_list.arr_ric,\n" +
" vtb_list.flag_list_iva_inclusa,\n" +
" vtb_list.flag_lisv_margine,\n" +
" mtb_lisv_data.cod_mart AS cod_mart,\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" mtb_lisv_data.rap_conv AS rap_conv,\n" +
" mtb_lisv_data.prz_base AS prz_base,\n" +
" mtb_lisv_data.ricarica AS ricarico,\n" +
" --dbo.f_calcMargineEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as ricarico_eff, \n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_vend IS NOT NULL AND mtb_lisv_data.prz_vend <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) * 100, 2)\n" +
" ELSE 0 END AS margine_eff,\n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_base IS NOT NULL AND mtb_lisv_data.prz_base <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100)) * 100, 2)\n" +
" ELSE 0 END AS ricarico_eff,\n" +
" mtb_lisv_data.prz_vend AS prz_vend,\n" +
" mtb_lisv_data.prz_vend_iva AS prz_vend_iva,\n" +
" mtb_lisv_data.perc_sco1 AS perc_sco1,\n" +
" mtb_lisv_data.perc_sco2 AS perc_sco2,\n" +
" mtb_lisv_data.perc_sco3 AS perc_sco3,\n" +
" mtb_lisv_data.perc_sco4 AS perc_sco4,\n" +
" mtb_lisv_data.perc_prov AS perc_prov,\n" +
" mtb_lisv_data.fisso_prov AS fisso_prov,\n" +
" mtb_lisv_data.posizione AS posizione,\n" +
" mtb_lisv_data.perc_gest AS perc_gest,\n" +
" mtb_lisv_data.val_gest AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" mtb_lisv_data.perc_ispe AS perc_ispe,\n" +
" mtb_lisv_data.val_ispe AS val_ispe,\n" +
" mtb_lisv_data.perc_promo AS perc_promo,\n" +
" mtb_lisv_data.val_promo AS val_promo,\n" +
" mtb_lisv_data.perc_oneri AS perc_oneri,\n" +
" mtb_lisv_data.val_oneri AS val_oneri,\n" +
" mtb_lisv_data.tipo_variazione AS tipo_variazione,\n" +
" mtb_lisv_data.note AS note,\n" +
" mtb_lisv_data.aggiornato_da AS aggiornato_da,\n" +
" mtb_lisv_data.prz_vend * (1 - mtb_lisv_data.perc_sco1 / 100) * (1 - mtb_lisv_data.perc_sco2 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco3 / 100) * (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" vtb_promo.descrizione AS 'descr_promo',\n" +
" vtb_promo.data_iniz_sell_out,\n" +
" vtb_promo.data_fine_sell_out,\n" +
" vtb_promo.flag_tipo_promo,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" mtb_lisv_data.giacenza,\n" +
" mtb_lisv_data.magg_prz_vend,\n" +
" vtb_promo.flag_sconto_contrattuale,\n" +
" vtb_promo.intercode_xml_variazioni,\n" +
" vtb_list_data.note AS note_testata,\n" +
" vtb_promo.flag_tipologia,\n" +
" vtb_promo.flag_volantino,\n" +
" mtb_lisv_data.inserito_da,\n" +
" vtb_list_data.chiusura_immediata\n" +
" FROM vtb_list\n" +
" INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" +
" INNER JOIN mtb_lisv_data ON vtb_list_data.cod_vlis = mtb_lisv_data.cod_vlis AND\n" +
" vtb_list_data.versione = mtb_lisv_data.versione\n" +
" INNER JOIN mtb_aart ON mtb_lisv_data.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN vtb_promo ON vtb_list_data.cod_promo = vtb_promo.cod_promo\n" +
" OUTER APPLY (SELECT COUNT(*) AS conta\n" +
" FROM vtb_list_data rif\n" +
" WHERE vtb_list_data.cod_vlis = rif.cod_vlis_rif\n" +
" AND vtb_list_data.versione = rif.versione) list_rif\n" +
" WHERE (@codMart IS NULL OR mtb_lisv_data.cod_mart = @codMart)\n" +
" AND (@codvlis IS NULL OR vtb_list_data.cod_vlis = @codVlis)\n" +
" AND vtb_list.cod_vlis_rif IS NULL\n" +
" AND (@codPromo IS NULL OR vtb_list_data.cod_promo = @codPromo)\n" +
" AND (((@dataFine IS NULL OR ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) = @dataFine) AND\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine) OR\n" +
" (@dataFine IS NOT NULL AND ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) <> @dataFine AND\n" +
" (vtb_list_data.data_iniz BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" vtb_list_data.data_fine BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine OR\n" +
" @dataFine BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine)))\n" +
" AND (vtb_promo.flag_sconto_contrattuale = 'N' OR\n" +
" (vtb_promo.flag_sconto_contrattuale = 'S' AND list_rif.conta = 0))\n" +
" UNION\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" vtb_list_data.data_iniz,\n" +
" vtb_list_data.data_fine,\n" +
" vtb_list_data.cod_promo,\n" +
" vtb_list_data.versione,\n" +
" vtb_list.cod_divi,\n" +
" vtb_list.flag_arr_prz_iva,\n" +
" vtb_list.arr_ric,\n" +
" vtb_list.flag_list_iva_inclusa,\n" +
" vtb_list.flag_lisv_margine,\n" +
" mtb_lisv_data.cod_mart AS cod_mart,\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" mtb_lisv_data.rap_conv AS rap_conv,\n" +
" mtb_lisv_data.prz_base AS prz_base,\n" +
" mtb_lisv_data.ricarica AS ricarico,\n" +
" --dbo.f_calcMargineEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as ricarico_eff, \n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_vend IS NOT NULL AND mtb_lisv_data.prz_vend <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) * 100, 2)\n" +
" ELSE 0 END AS margine_eff,\n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_base IS NOT NULL AND mtb_lisv_data.prz_base <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100)) * 100, 2)\n" +
" ELSE 0 END AS ricarico_eff,\n" +
" mtb_lisv_data.prz_vend AS prz_vend,\n" +
" mtb_lisv_data.prz_vend_iva AS prz_vend_iva,\n" +
" mtb_lisv_data.perc_sco1 AS perc_sco1,\n" +
" mtb_lisv_data.perc_sco2 AS perc_sco2,\n" +
" mtb_lisv_data.perc_sco3 AS perc_sco3,\n" +
" mtb_lisv_data.perc_sco4 AS perc_sco4,\n" +
" mtb_lisv_data.perc_prov AS perc_prov,\n" +
" mtb_lisv_data.fisso_prov AS fisso_prov,\n" +
" mtb_lisv_data.posizione AS posizione,\n" +
" mtb_lisv_data.perc_gest AS perc_gest,\n" +
" mtb_lisv_data.val_gest AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" mtb_lisv_data.perc_ispe AS perc_ispe,\n" +
" mtb_lisv_data.val_ispe AS val_ispe,\n" +
" mtb_lisv_data.perc_promo AS perc_promo,\n" +
" mtb_lisv_data.val_promo AS val_promo,\n" +
" mtb_lisv_data.perc_oneri AS perc_oneri,\n" +
" mtb_lisv_data.val_oneri AS val_oneri,\n" +
" mtb_lisv_data.tipo_variazione AS tipo_variazione,\n" +
" mtb_lisv_data.note AS note,\n" +
" mtb_lisv_data.aggiornato_da AS aggiornato_da,\n" +
" mtb_lisv_data.prz_vend * (1 - mtb_lisv_data.perc_sco1 / 100) * (1 - mtb_lisv_data.perc_sco2 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco3 / 100) * (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" vtb_promo.descrizione AS 'descr_promo',\n" +
" vtb_promo.data_iniz_sell_out,\n" +
" vtb_promo.data_fine_sell_out,\n" +
" vtb_promo.flag_tipo_promo,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" mtb_lisv_data.giacenza,\n" +
" mtb_lisv_data.magg_prz_vend,\n" +
" vtb_promo.flag_sconto_contrattuale,\n" +
" vtb_promo.intercode_xml_variazioni,\n" +
" vtb_list_data.note AS note_testata,\n" +
" vtb_promo.flag_tipologia,\n" +
" vtb_promo.flag_volantino,\n" +
" mtb_lisv_data.inserito_da,\n" +
" vtb_list_data_rif.chiusura_immediata\n" +
" FROM vtb_list\n" +
" INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" +
" INNER JOIN vtb_list_data vtb_list_data_rif\n" +
" ON vtb_list_data.cod_vlis_rif = vtb_list_data_rif.cod_vlis AND\n" +
" vtb_list_data.versione_rif = vtb_list_data_rif.versione\n" +
" INNER JOIN mtb_lisv_data ON vtb_list_data_rif.cod_vlis = mtb_lisv_data.cod_vlis AND\n" +
" vtb_list_data_rif.versione = mtb_lisv_data.versione\n" +
" INNER JOIN mtb_aart ON mtb_lisv_data.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN vtb_promo ON vtb_list_data_rif.cod_promo = vtb_promo.cod_promo\n" +
" WHERE (@codMart IS NULL OR mtb_lisv_data.cod_mart = @codMart)\n" +
" AND (@codvlis IS NULL OR vtb_list_data.cod_vlis = @codVlis)\n" +
" AND (@codPromo IS NULL OR vtb_list_data.cod_promo = @codPromo)\n" +
" AND (((@dataFine IS NULL OR ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) = @dataFine) AND\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine) OR\n" +
" (@dataFine IS NOT NULL AND ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) <> @dataFine AND\n" +
" (vtb_list_data.data_iniz BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" vtb_list_data.data_fine BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine OR\n" +
" @dataFine BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine)))");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,53 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251113122313 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("lisv_getTipoUm", "CREATE FUNCTION [dbo].[lisv_getTipoUm]\n" +
"(\t\n" +
"\t@codMart varchar(15), @tipoUmLisv tinyint\n" +
")\n" +
"RETURNS TABLE \n" +
"AS\n" +
"RETURN \n" +
"(\n" +
"\twith um as (\n" +
"select cod_mart, unt_mis, rap_conv\n" +
"from dbo.getUntMisArticolo(@codMart, null ) um\n" +
"where @tipoUmLisv is not null\n" +
"and ( (@tipoUmLisv = 1 and um.tipo_um = 'UI' ) or \n" +
"(@tipoUmLisv = 2 and flag_unita_kg = 'S'))\n" +
")\n" +
"\n" +
"select mtb_aart.cod_mart, \n" +
"case \n" +
"when @tipoUmLisv IS null then mtb_aart.unt_mis\n" +
"when @tipoUmLisv = 1 and mtb_aart.qta_cnf in (0, 1) then mtb_aart.unt_mis\n" +
"when @tipoUmLisv = 2 and mtb_aart.peso_kg in (0, 1) then mtb_aart.unt_mis\n" +
"\telse ISNULL(um.unt_mis, mtb_aart.unt_mis) end as unt_mis_ven, \n" +
"case \n" +
"when @tipoUmLisv IS null then 1\n" +
"when @tipoUmLisv = 1 and mtb_aart.qta_cnf in (0, 1) then 1\n" +
"when @tipoUmLisv = 2 and mtb_aart.peso_kg in (0, 1) then 1\n" +
"\telse ISNULL(um.rap_conv, 1) end as rap_conv_vend\n" +
"from mtb_aart left outer join um on mtb_aart.cod_mart = um.cod_mart\n" +
"where (@codMart is null or mtb_aart.cod_mart = @codMart )\n" +
")");
executeStatement("alter table mtb_var_lisv_log alter column versione int null");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,19 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251113170159 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE wdtb_doct ADD merce_ricevuta BIT DEFAULT 0 NOT NULL");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251114114334 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("ALTER TABLE ctb_amac DROP COLUMN cod_mdep;");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,19 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251114150912 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE jtb_comt ADD data_mod DATETIME");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251114163222 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("ALTER TABLE vtb_dest ADD data_mod DATETIME");
executeStatement("ALTER TABLE ptb_pros ADD data_mod DATETIME");
executeStatement("ALTER TABLE ptb_pros_rif ADD data_mod DATETIME");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,289 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251117100418 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateProcedure("sp_moveTableToFileGroup", "CREATE PROCEDURE [dbo].[sp_moveTableToFileGroup] (@tableName varchar(max), @fileGroup varchar(max), @fileName varchar(max), @createFile varchar(1) = 'N')\n" +
"AS\n" +
"BEGIN\n" +
" /*la variabile @fileGroup deve contenere solo il prefisso poi la procedura aggiunge _DATA e _INDEX*/\n" +
"\n" +
" declare @fileGroupIndex varchar(max), @fileGroupData varchar(max), @sqlText varchar(max),\n" +
" @countFile int, @pathDB varchar(max), @fileGroupDataName varchar(max),\n" +
" @fileGroupIndexName varchar(max)\n" +
"\n" +
" SELECT @pathDB = reverse(substring(reverse(physical_name), charindex('\', reverse(physical_name)), LEN(physical_name) -charindex('', reverse(physical_name) ) + 1)) \n" +
" FROM sys.master_files inner join sys.databases on sys.master_files.database_id = sys.databases.database_id WHERE sys.databases.name = DB_NAME()and data_space_id = 1\n" +
"\n" +
" select @fileGroup = case when IsNull(@fileGroup, '') <> '' and RIGHT(@fileGroup, 5) = '_DATA' THEN LEFT(@fileGroup, LEN(@fileGroup) - 5 ) ELSE @fileGroup END\n" +
" \n" +
" SELECT @fileGroupData = CASE WHEN @fileGroup = 'PRIMARY' OR IsNull(@fileGroup, '') = '' THEN '' ELSE @fileGroup + '_DATA' END,\n" +
" @fileGroupIndex = CASE WHEN @fileGroup = 'PRIMARY' OR IsNull(@fileGroup, '') = '' THEN '' ELSE @fileGroup + '_INDEX ' END\n" +
"\n" +
" if @fileGroup <> 'PRIMARY' \n" +
" BEGIN\n" +
" select @countFile = COUNT(*) from sys.filegroups f WHERE name like @fileGroup + '%'\n" +
" \n" +
" IF @countFile = 0 AND @createFile = 'S'\n" +
" BEGIN\n" +
" select @fileGroupDataName = Lower(db_name()) + '_' + \n" +
" (SELECT UPPER(LEFT(value_string,1)) + LOWER(SUBSTRING(value_string,2,LEN(value_string))) \n" +
" FROM dbo.ParseStringIntoArray(@fileGroupData, '_') FOR XML PATH('') ),\n" +
" @fileGroupIndexName = Lower(db_name()) + '_' + \n" +
" (SELECT UPPER(LEFT(value_string,1)) + LOWER(SUBSTRING(value_string,2,LEN(value_string))) \n" +
" FROM dbo.ParseStringIntoArray(@fileGroupIndex, '_') FOR XML PATH('') )\n" +
"\n" +
" \n" +
" SELECT @sqlText =\n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILEGROUP ' + @fileGroupData + '; '+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILE (NAME = ' + @fileGroupDataName + ',' +\n" +
" 'FILENAME = ''' + @pathDB + @fileGroupDataName + '.ndf'' ' +\n" +
" ') TO FILEGROUP ' + @fileGroupData + ';'+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILEGROUP ' + @fileGroupIndex + '; '+ CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER DATABASE ' + Upper(db_name()) + ' ADD FILE (NAME = ' +@fileGroupIndexName + ',' + \n" +
" 'FILENAME = ''' + @pathDB + @fileGroupIndexName + '.ndf'' ' +\n" +
" ') TO FILEGROUP ' + @fileGroupIndex + ';' + CHAR(13) + CHAR(10) + ' GO' + CHAR(13) + CHAR(10) ;\n" +
"\n" +
"\n" +
" if @fileName <> '' \n" +
" exec sp_writeFile @fileName, @sqlText, 'S' \n" +
" else \n" +
" select @sqlText\n" +
" \n" +
" END\n" +
"\n" +
" SELECT @fileGroupData = ' ON ' + @fileGroupData, \n" +
" @fileGroupIndex = ' ON ' + @fileGroupIndex\n" +
"\n" +
" END\n" +
" \n" +
" \n" +
" DECLARE crs_query CURSOR FOR\n" +
" SELECT 'DROP INDEX '+ schema_name(t.schema_id) + '.' + t.name + '.' +i.name + CHAR(13) + CHAR(10) + ' GO' as script\n" +
" FROM sys.indexes i\n" +
" INNER JOIN sys.tables t ON t.object_id= i.object_id\n" +
" WHERE i.type>0 and \n" +
" t.is_ms_shipped=0 and \n" +
" t.name<>'sysdiagrams' and \n" +
" (is_primary_key=0 and is_unique_constraint=0) and\n" +
" t.name = @tableName\n" +
" union all\n" +
" SELECT 'CREATE ' +\n" +
" CASE \n" +
" WHEN I.is_unique = 1 THEN ' UNIQUE '\n" +
" ELSE ''\n" +
" END +\n" +
" I.type_desc COLLATE DATABASE_DEFAULT + ' INDEX ' +\n" +
" I.name + ' ON ' +\n" +
" SCHEMA_NAME(T.schema_id) + '.' + T.name + ' ( ' +\n" +
" KeyColumns + ' ) ' +\n" +
" ISNULL(' INCLUDE (' + IncludedColumns + ' ) ', '') +\n" +
" ISNULL(' WHERE ' + I.filter_definition, '') + ' WITH ( ' +\n" +
" CASE \n" +
" WHEN I.is_padded = 1 THEN ' PAD_INDEX = ON '\n" +
" ELSE ' PAD_INDEX = OFF '\n" +
" END + ',' +\n" +
" 'FILLFACTOR = ' + CONVERT(\n" +
" CHAR(5),\n" +
" CASE \n" +
" WHEN I.fill_factor = 0 THEN 100\n" +
" ELSE I.fill_factor\n" +
" END\n" +
" ) + ',' +\n" +
" -- default value \n" +
" 'SORT_IN_TEMPDB = OFF ' + ',' +\n" +
" CASE \n" +
" WHEN I.ignore_dup_key = 1 THEN ' IGNORE_DUP_KEY = ON '\n" +
" ELSE ' IGNORE_DUP_KEY = OFF '\n" +
" END + ',' +\n" +
" CASE \n" +
" WHEN ST.no_recompute = 0 THEN ' STATISTICS_NORECOMPUTE = OFF '\n" +
" ELSE ' STATISTICS_NORECOMPUTE = ON '\n" +
" END + ',' +\n" +
" ' ONLINE = OFF ' + ',' +\n" +
" CASE \n" +
" WHEN I.allow_row_locks = 1 THEN ' ALLOW_ROW_LOCKS = ON '\n" +
" ELSE ' ALLOW_ROW_LOCKS = OFF '\n" +
" END + ',' +\n" +
" CASE \n" +
" WHEN I.allow_page_locks = 1 THEN ' ALLOW_PAGE_LOCKS = ON '\n" +
" ELSE ' ALLOW_PAGE_LOCKS = OFF '\n" +
" END + ' ) ' + @fileGroupIndex + CHAR(13) + CHAR(10) + ' GO' [CreateIndexScript]\n" +
" FROM sys.indexes I\n" +
" JOIN sys.tables T\n" +
" ON T.object_id = I.object_id\n" +
" JOIN sys.sysindexes SI\n" +
" ON I.object_id = SI.id\n" +
" AND I.index_id = SI.indid\n" +
" JOIN (\n" +
" SELECT *\n" +
" FROM (\n" +
" SELECT IC2.object_id,\n" +
" IC2.index_id,\n" +
" STUFF(\n" +
" (\n" +
" SELECT ' , ' + C.name + CASE \n" +
" WHEN MAX(CONVERT(INT, IC1.is_descending_key)) \n" +
" = 1 THEN \n" +
" ' DESC '\n" +
" ELSE \n" +
" ' ASC '\n" +
" END\n" +
" FROM sys.index_columns IC1\n" +
" JOIN sys.columns C\n" +
" ON C.object_id = IC1.object_id\n" +
" AND C.column_id = IC1.column_id\n" +
" AND IC1.is_included_column = \n" +
" 0\n" +
" WHERE IC1.object_id = IC2.object_id\n" +
" AND IC1.index_id = IC2.index_id\n" +
" GROUP BY\n" +
" IC1.object_id,\n" +
" C.name,\n" +
" index_id\n" +
" ORDER BY\n" +
" MAX(IC1.key_ordinal) \n" +
" FOR XML PATH('')\n" +
" ),\n" +
" 1,\n" +
" 2,\n" +
" ''\n" +
" ) KeyColumns\n" +
" FROM sys.index_columns IC2 \n" +
" --WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" GROUP BY\n" +
" IC2.object_id,\n" +
" IC2.index_id\n" +
" ) tmp3\n" +
" )tmp4\n" +
" ON I.object_id = tmp4.object_id\n" +
" AND I.Index_id = tmp4.index_id\n" +
" JOIN sys.stats ST\n" +
" ON ST.object_id = I.object_id\n" +
" AND ST.stats_id = I.index_id\n" +
" JOIN sys.data_spaces DS\n" +
" ON I.data_space_id = DS.data_space_id\n" +
" JOIN sys.filegroups FG\n" +
" ON I.data_space_id = FG.data_space_id\n" +
" LEFT JOIN (\n" +
" SELECT *\n" +
" FROM (\n" +
" SELECT IC2.object_id,\n" +
" IC2.index_id,\n" +
" STUFF(\n" +
" (\n" +
" SELECT ' , ' + C.name\n" +
" FROM sys.index_columns IC1\n" +
" JOIN sys.columns C\n" +
" ON C.object_id = IC1.object_id\n" +
" AND C.column_id = IC1.column_id\n" +
" AND IC1.is_included_column = \n" +
" 1\n" +
" WHERE IC1.object_id = IC2.object_id\n" +
" AND IC1.index_id = IC2.index_id\n" +
" GROUP BY\n" +
" IC1.object_id,\n" +
" C.name,\n" +
" index_id \n" +
" FOR XML PATH('')\n" +
" ),\n" +
" 1,\n" +
" 2,\n" +
" ''\n" +
" ) IncludedColumns\n" +
" FROM sys.index_columns IC2 \n" +
" --WHERE IC2.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" GROUP BY\n" +
" IC2.object_id,\n" +
" IC2.index_id\n" +
" ) tmp1\n" +
" WHERE IncludedColumns IS NOT NULL\n" +
" ) tmp2\n" +
" ON tmp2.object_id = I.object_id\n" +
" AND tmp2.index_id = I.index_id\n" +
" WHERE I.is_primary_key = 0\n" +
" AND I.is_unique_constraint = 0 and\n" +
" t.name = @tableName\n" +
" --AND I.Object_id = object_id('Person.Address') --Comment for all tables\n" +
" --AND I.name = 'IX_Address_PostalCode' --comment for all indexes \n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(fk.schema_id) + '.' + object_name(fk.parent_object_id)+ ' DROP CONSTRAINT ' + name + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.foreign_keys fk\n" +
" where (object_name(fk.referenced_object_id) = @tableName)\n" +
" union all\n" +
" SELECT 'EXEC dbo.DropPrimaryKey '''+@tableName+''''+ CHAR(13) + CHAR(10) + ' GO' \n" +
" FROM sysobjects sysobjects_a, \n" +
" sysobjects sysobjects_b\n" +
" WHERE ( sysobjects_a.parent_obj = sysobjects_b.id) and \n" +
" ( sysobjects_a.xtype = 'PK' ) and \n" +
" ( sysobjects_b.name = @tableName )\n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' ADD CONSTRAINT pk_' + tb.name + ' primary key (' + \n" +
" ( select STUFF(( select ',' + col.name\n" +
" from sys.indexes ix \n" +
" inner join sys.index_columns ixc on ix.object_id=ixc.object_id and ix.index_id= ixc.index_id\n" +
" inner join sys.columns col on ixc.object_id =col.object_id and ixc.column_id=col.column_id\n" +
" where ix.type>0 and (ix.is_primary_key=1 or ix.is_unique_constraint=1)\n" +
" and object_name(ix.object_id) = tb.name\n" +
" ORDER BY ixc.key_ordinal\n" +
" FOR XML PATH('')), 1, 1, '' ) ) + ') ' + @fileGroupData + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.tables tb\n" +
" where tb.name = @tableName and\n" +
" object_id in ( select object_id from sys.indexes ix where ix.is_primary_key=1 ) \n" +
" union all\n" +
" SELECT 'ALTER TABLE ' + schema_name(fk.schema_id) + '.' + object_name(fk.parent_object_id) + \n" +
" ' ADD CONSTRAINT ' + FK.NAME + ' FOREIGN KEY (' + \n" +
" (SELECT STUFF(( select ',' + c1.NAME \n" +
" from sys.foreign_key_columns fkc \n" +
" inner join sys.columns c1 on c1.object_id=fkc.parent_object_id and c1.column_id=fkc.parent_column_id \n" +
" where fkc.constraint_object_id = fk.OBJECT_ID \n" +
" ORDER by fkc.constraint_column_id\n" +
" FOR XML PATH('')), 1, 1, '' )) + \n" +
" ') REFERENCES ' + OBJECT_NAME(fk.referenced_object_id) + CHAR(13) + CHAR(10) + ' GO'\n" +
" from sys.foreign_keys fk\n" +
" where ( object_name(fk.referenced_object_id) = @tableName)\n" +
" union all\n" +
" select 'ALTER TABLE ' + + schema_name(tb.schema_id) + '.' + tb. name + ' ADD ID_PK_TEMP INT IDENTITY; ' + + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' ADD CONSTRAINT PK_' + tb. name + ' PRIMARY KEY(ID_PK_TEMP) ' + @fileGroupData + '; ' +\n" +
"CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10) + \n" +
" 'ALTER TABLE ' + schema_name(tb.schema_id) + '.' + tb. name + ' DROP CONSTRAINT PK_' + tb. name + ' ;' + CHAR(13) + CHAR(10) + 'GO'\n" +
" from sys.tables tb\n" +
" where object_id not in (\n" +
" select object_id\n" +
" from sys.indexes ix \n" +
" where ix.is_primary_key=1 ) and tb.name = @tableName\n" +
"\n" +
"\n" +
" OPEN crs_query \n" +
" FETCH NEXT FROM crs_query INTO @sqlText\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" if @fileName <> '' \n" +
" exec sp_writeFile @fileName, @sqlText, 'S' \n" +
" else \n" +
" select @sqlText\n" +
" \n" +
"\n" +
" FETCH NEXT FROM crs_query INTO @sqlText\n" +
" END\n" +
" CLOSE crs_query\n" +
" DEALLOCATE crs_query \n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251117142928 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("W_jriep_presenze_dip_disp", "SETUP", "SET_DATA_FINE", "N",
"imposta data fine = fine mese", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.Integry))
updateSetupValue("W_jriep_presenze_dip_disp", "SETUP", "SET_DATA_FINE", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,33 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251117170957 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Gramm_Gramm))
return;
executeStatement("update stb_gest_setup set value = 'S' where gest_name = 'DTB_ORDT' and key_section in ('NUOVA_PROCEDURA','DISABLE_TRIGGER_ORDL')");
executeStatement("update stb_gest_sync set syncronize = 'R' where gest_name like 'lord%'");
executeStatement("update stb_gest_sync set syncronize = 'R' where gest_name like 'pord%'");
executeStatement("insert into stb_abil \n" +
"select case when gest_name = 'lordi' then 'LG081' else 'AG031' end , user_name, 'S', case when gest_name = 'lordi' then 'lordi_tab' else 'pordi_tab' end from stb_abil \n" +
"where gest_name in ('lordi','pordi') and case when gest_name = 'lordi' then 'LG081' else 'AG031' end + user_name not in (select cod_opz + user_name from stb_abil where cod_opz in ('LG081','AG031'))");
executeStatement("update stb_abil set flag_abil = 'N' where gest_name in ('lordi','pordi')");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,64 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251118172320 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateTrigger("tr_changeTipoRiep", "CREATE TRIGGER [dbo].[tr_changeTipoRiep]\n" +
" ON [dbo].[ctb_cont]\n" +
" INSTEAD OF update\n" +
"AS\n" +
"BEGIN\n" +
" SET NOCOUNT ON;\n" +
" declare @cnt int = 0\n" +
"\n" +
"\n" +
" if Update(tipo_riep ) \n" +
" begin\n" +
" SELECT @cnt = COUNT(*) from ctb_movr inner join inserted on ctb_movr.cod_ccon = inserted.cod_ccon and \n" +
" ( (inserted.tipo_riep is null and ctb_movr.cod_anag is not null ) or (inserted.tipo_riep is null and ctb_movr.cod_anag is null ) )\n" +
" end\n" +
" \n" +
" \n" +
" IF @cnt > 0\n" +
" BEGIN\n" +
" THROW 50002, 'Update non consentito: esistono movimenti collegati.', 1;\n" +
" RETURN;\n" +
" END\n" +
" \n" +
" update ctb_cont \n" +
" set cod_cmas = inserted.cod_cmas,\n" +
" cod_cgrp = inserted.cod_cgrp,\n" +
" descrizione = inserted.descrizione,\n" +
" tipo_riep = inserted.tipo_riep,\n" +
" saldo_att = inserted.saldo_att,\n" +
" flag_cont_analit = inserted.flag_cont_analit,\n" +
" cod_biva = inserted.cod_biva,\n" +
" cod_jfas = inserted.cod_jfas,\n" +
" cod_csct = inserted.cod_csct,\n" +
" flag_risconto = inserted.flag_risconto,\n" +
" perc_ded = inserted.perc_ded,\n" +
" diacod = inserted.diacod,\n" +
" data_ins = inserted.data_ins,\n" +
" data_mod = inserted.data_mod\n" +
" from ctb_cont inner join inserted on ctb_cont.cod_ccon = inserted.cod_ccon\n" +
"\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251119084719 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table dtb_note_doc add flag_bio bit not null default 0");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,25 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251119170058 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("COD_PAGA_D", "Codice pagamento", " SELECT COD_PAGA + '|' + COD_PAGA + '-' + DESCRIZIONE FROM gtb_paga WHERE flag_attivo = 'S'");
executeStatement("UPDATE stb_gest_setup SET query_default = 'COD_PAGA_D'\n" +
"WHERE gest_name = 'CTB_SCAD'\n" +
"AND section ='COD_PAGA'",
"alter table ctb_caus add flag_paga_enasarco bit default 0 not null");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,61 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251120123843 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table gtb_anag alter column citta varchar(60)");
createOrUpdateFunction("IntToBase36", "CREATE FUNCTION dbo.IntToBase36(@n bigint)\n" +
" RETURNS varchar(50)\n" +
" AS\n" +
" BEGIN\n" +
" DECLARE @chars varchar(36) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n" +
" DECLARE @res varchar(50) = '';\n" +
" DECLARE @rem bigint;\n" +
" IF @n IS NULL RETURN NULL;\n" +
" IF @n = 0 RETURN '0';\n" +
" WHILE @n > 0\n" +
" BEGIN\n" +
" SET @rem = @n % 36;\n" +
" SET @res = SUBSTRING(@chars, @rem + 1, 1) + @res;\n" +
" SET @n = @n / 36;\n" +
" END\n" +
" RETURN @res;\n" +
" END;");
createOrUpdateFunction("Base36ToInt", "CREATE FUNCTION dbo.Base36ToInt(@s varchar(50))\n" +
" RETURNS bigint\n" +
" AS\n" +
" BEGIN\n" +
" DECLARE @chars varchar(36) = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n" +
" DECLARE @i int = 1;\n" +
" DECLARE @len int = LEN(@s);\n" +
" DECLARE @val bigint = 0;\n" +
" DECLARE @c char(1);\n" +
" IF @s IS NULL RETURN NULL;\n" +
" WHILE @i <= @len\n" +
" BEGIN\n" +
" SET @c = UPPER(SUBSTRING(@s, @i, 1));\n" +
" SET @val = @val * 36 + (CHARINDEX(@c, @chars) - 1);\n" +
" SET @i = @i + 1;\n" +
" END\n" +
" RETURN @val;\n" +
" END;");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251120153047 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement("alter table gtb_anag alter column rag_soc varchar(100)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,62 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251120172527 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(!isCustomer(IntegryCustomer.CapelliMonelli)) return;
createOrUpdateFunction("[f_suggestCodeCodAnag]", "CREATE FUNCTION [dbo].[f_suggestCodeCodAnag](@partialCode varchar(5))\n" +
" \n" +
"RETURNS varchar(20) \n" +
"WITH INLINE = OFF\n" +
"AS\n" +
"BEGIN\n" +
" DECLARE @ls_codAnag VARCHAR(5), @codLen int, @condPartialCode varchar(10), @recuperaCodici varchar(1);\n" +
"\n" +
" SELECT @condPartialCode= ISNULL(@partialCode, '') + '[0-9]'\n" +
"\n" +
" SELECT @partialCode = ISNULL(@partialCode, '')\n" +
"\n" +
" SET @codLen = 5\n" +
" \n" +
" SELECT @recuperaCodici = dbo.getGestSetup('GTB_ANAG','SETUP','RECUPERA_CODICI')\n" +
"\n" +
" IF @recuperaCodici = 'S'\n" +
" BEGIN\n" +
" SELECT @ls_codAnag = (\n" +
" SELECT top 1 @partialCode + REPLICATE('0', 5 - len(@partialCode) - len(row_id)) + cast(row_id as varchar)\n" +
" from (\n" +
" select cast(SUBSTRING(cod_anag, len(@partialCode) + 1, len(cod_anag) - len(@partialCode) + 1) as int) as num_code, \n" +
" ROW_NUMBER() over (order by cast(SUBSTRING(cod_anag, len(@partialCode) + 1, len(cod_anag) - len(@partialCode) + 1) as int)) as row_id\n" +
" from gtb_anag\n" +
" where cod_anag like @condPartialCode+'%') tmp \n" +
" where tmp.num_code > tmp.row_id and tmp.num_code <> 0)\n" +
" END\n" +
"\n" +
" if @ls_codAnag is null \n" +
" begin \n" +
" SELECT @ls_codAnag = @partialCode + REPLICATE('0', @codLen - len(@partialCode) - len(dbo.IntToBase36(max_code.partial_code))) + Cast(dbo.IntToBase36(max_code.partial_code) as varchar)\n" +
" from ( \n" +
" SELECT cast(IsNull(max(try_cast(substring(cod_anag, len(@partialCode)+1, len(cod_anag) - len(@partialCode)) as numeric)), 0) + 1 as varchar) as partial_code\n" +
" FROM gtb_anag\n" +
" WHERE cod_anag like @partialCode + '%' ) max_code;\n" +
" end \n" +
" RETURN @ls_codAnag;\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,43 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251120181812 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateView("cvw_tipi_pdc", "CREATE VIEW cvw_tipi_pdc AS\n" +
"SELECT '1' AS codice, Upper('Attivo') descrizione, '1' as sezione\n" +
" UNION ALL\n" +
" SELECT '2', Upper('Passivo'), '1' as sezione\n" +
" UNION ALL\n" +
" SELECT '3', Upper('Netto'), '1' as sezione\n" +
" UNION ALL\n" +
" SELECT '4', Upper('Costi'), '2' as sezione\n" +
" UNION ALL\n" +
" SELECT '5', Upper('Ricavi'), '2' as sezione\n" +
" UNION ALL\n" +
" SELECT '6', Upper('D''ordine'), '3'\n" +
" UNION ALL\n" +
" SELECT '7', Upper('Epilogativi'), '3'");
createOrUpdateView("cvw_sezione_pdc", "CREATE VIEW cvw_sezione_pdc AS\n" +
"SELECT '1' AS codice, Upper('Stato Patrimoniale') AS descrizione\n" +
"UNION ALL\n" +
"SELECT '2', Upper('Conto Economico')\n" +
"UNION ALL\n" +
"SELECT '3', upper('Conti d''ordine e di Riepilogo')");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,21 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121105212 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
addDefault("mtb_lisv", "add_ric_spese", 1);
addDefault("mtb_lisv", "add_sco_spese", 1);
addDefault("mtb_lisv", "add_val_spese", 1);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,28 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121132504 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("VTB_LIST", "SETUP", "GESTISCI_SPESE_LISTINO", "N",
"permette di gestire le spese di trasporto agganciate a listino", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.RossoGargano))
updateSetupValue("VTB_LIST", "SETUP", "GESTISCI_SPESE_LISTINO", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121133310 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Carelli) || isCustomer(IntegryCustomer.SaporiVeri)) return;
updateSetupValue("W_VLISTDATA_RC", "SETUP", "FILTRO_ARTICOLI", "N");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121140004 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("PICKING", "SPEDIZIONE", "FLAG_UNDERFLOW_QUANTITY_WARNING", "N",
"Avvisa l'operatore che sta prelevando una quantità inferiore rispetto a quella disponibile nel UL", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.RossoGargano)) {
updateSetupValue("PICKING", "SPEDIZIONE", "FLAG_UNDERFLOW_QUANTITY_WARNING", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,73 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121150257 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getMaggiorazioneSpese", "CREATE FUNCTION [dbo].[getMaggiorazioneSpese](@dataValidita datetime, @codVlis varchar(5), @codSpes varchar(5)) \n" +
"RETURNS TABLE AS \n" +
" return \n" +
" select vtb_list.cod_vlis, \n" +
" vtb_list.descrizione, \n" +
" case when tmp_lisv_spese.max_lisv is null then null else Convert(datetime, left(tmp_lisv_spese.max_lisv, 10)) end as data_iniz, \n" +
" case when tmp_lisv_spese.max_lisv is null then null else Convert(int, right(tmp_lisv_spese.max_lisv, 4)) end as versione, \n" +
" vtb_list.cod_divi,\n" +
" tmp_lisv_spese.cod_spes as 'cod_spes', \n" +
" IsNull(mtb_lisv_data_spese.perc_ricarico, 0) as perc_ricarico, \n" +
" IsNull(mtb_lisv_data_spese.val_ricarico, 0) as val_ricarico,\n" +
" mtb_lisv_data_spese.da as da,\n" +
" mtb_lisv_data_spese.a as a,\n" +
" IsNull(mtb_lisv_data_spese.perc_sconto, 0) as perc_sconto,\n" +
" mtb_lisv_data_spese.id\n" +
" from ( SELECT vtb_list.cod_vlis as cod_vlis, \n" +
" mtb_lisv_data_spese.cod_spes, \n" +
" max(case when vtb_list_data.versione is null then null else Convert(varchar(10), vtb_list_data.data_iniz, 111) + ' ' + replicate('0', 4 - len(vtb_list_data.versione)) + Convert(varchar(5), vtb_list_data.versione) end ) as max_lisv,\n" +
" vtb_list.cod_vlis as 'cod_vlis_rif'\n" +
" FROM vtb_list, \n" +
" mtb_lisv_data_spese LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data_spese.cod_vlis = vtb_list_data.cod_vlis AND \n" +
" mtb_lisv_data_spese.versione = vtb_list_data.versione and \n" +
" vtb_list_data.cod_promo is null AND\n" +
" vtb_list_data.data_iniz <= IsNull(@dataValidita, GetDate())\n" +
" WHERE vtb_list.cod_vlis = mtb_lisv_data_spese.cod_vlis and vtb_list.cod_vlis_rif is null\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data_spese.cod_spes\n" +
" union\n" +
" SELECT vtb_list.cod_vlis as cod_vlis, \n" +
" mtb_lisv_data_spese.cod_spes, \n" +
" max(case when vtb_list_data.versione is null then null else Convert(varchar(10), vtb_list_data.data_iniz, 111) + ' ' + replicate('0', 4 - len(vtb_list_data.versione)) + Convert(varchar(5), vtb_list_data.versione) end ) as max_lisv,\n" +
" vtb_list.cod_vlis_rif as 'cod_vlis_rif'\n" +
" FROM vtb_list, \n" +
" mtb_lisv_data_spese \n" +
" LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data_spese.cod_vlis = vtb_list_data.cod_vlis AND \n" +
" mtb_lisv_data_spese.versione = vtb_list_data.versione and \n" +
" vtb_list_data.cod_promo is null AND\n" +
" vtb_list_data.data_iniz <= IsNull(@dataValidita, GetDate())\n" +
" WHERE vtb_list.cod_vlis_rif = mtb_lisv_data_spese.cod_vlis and vtb_list.cod_vlis_rif is not null\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data_spese.cod_spes, \n" +
" vtb_list.cod_vlis_rif ) tmp_lisv_spese LEFT OUTER JOIN mtb_lisv_data_spese ON tmp_lisv_spese.cod_vlis_rif = mtb_lisv_data_spese.cod_vlis AND \n" +
" tmp_lisv_spese.cod_spes = mtb_lisv_data_spese.cod_spes AND\n" +
" Convert(int, right( tmp_lisv_spese.max_lisv, 4)) = mtb_lisv_data_spese.versione, \n" +
" vtb_list,\n" +
" gtb_spes\n" +
" WHERE vtb_list.cod_vlis = tmp_lisv_spese.cod_vlis and \n" +
" ( @codSpes is null or tmp_lisv_spese.cod_spes = @codSpes ) and\n" +
" ( @codVlis is null or tmp_lisv_spese.cod_vlis = @codVlis) and\n" +
" tmp_lisv_spese.cod_spes = gtb_spes.cod_spes");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,288 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121165211 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isCustomer(IntegryCustomer.Biolevante)) {
createOrUpdateFunction("[getSchedaCosti]", "CREATE FUNCTION [dbo].[getSchedaCosti](@CodProd VARCHAR(15), @DataCosto DATETIME, @codVlis VARCHAR(5),\n" +
" @tipoCosto VARCHAR(2))\n" +
" RETURNS TABLE\n" +
" AS\n" +
" RETURN\n" +
" (\n" +
"/*\n" +
"\n" +
"declare @CodProd VARCHAR(15), @DataCosto DATETIME, @codVlis VARCHAR(5), @tipoCosto varchar(2)\n" +
"\n" +
"set @codProd = 'ccondib1lev'\n" +
"set @dataCosto = Cast(getDAte() as date)\n" +
"set @tipoCosto = 'UC';\n" +
"set @codVlis = '0036';\n" +
"*/\n" +
"/*tipoCosto: \n" +
" UC = Ultimo costo\n" +
" CM = Costo di mercato */\n" +
" WITH gruppi_merc AS (SELECT cod_mgrp,\n" +
" descrizione,\n" +
" tipo_mgrp,\n" +
" CASE tipo_mgrp\n" +
" WHEN 'MP' THEN '01'\n" +
" WHEN 'IMB' THEN '02'\n" +
" WHEN 'ACC' THEN '03'\n" +
" WHEN 'SL' THEN '04'\n" +
" WHEN 'PF' THEN '04'\n" +
" ELSE 11 END AS sort_categ,\n" +
" CASE tipo_mgrp\n" +
" WHEN 'MP' THEN 'MATERIE PRIME'\n" +
" WHEN 'IMB' THEN 'IMBALLAGGI'\n" +
" WHEN 'ACC' THEN 'MATERIALE ACCESSORIO'\n" +
" WHEN 'SL' THEN 'COSTO LAVORAZIONI'\n" +
" WHEN 'PF' THEN 'COSTO LAVORAZIONI'\n" +
" ELSE tipo_mgrp\n" +
" END AS categoria,\n" +
" CASE WHEN tipo_mgrp IN ('MP', 'IMB', 'ACC') THEN 1 ELSE 0 END AS isMateriaPrima\n" +
" from mtb_grup)\n" +
" ,explode_dist AS (\n" +
" SELECT CASE WHEN sfuso.cod_mart IS NOT NULL THEN 1 ELSE 0 END AS isSfuso,\n" +
" ISNULL(ISNULL(sfuso.cod_mart, dist.cod_prod), mtb_aart.cod_mart) AS cod_mart,\n" +
" dist.flag_foglia,\n" +
" dist.unt_mis_prod AS unt_mis_art,\n" +
" mtb_aart.unt_mis AS unt_mis_prod,\n" +
" dist.qta_prod * ISNULL(sfuso.PercProd, 1) AS qta_prod,\n" +
" case when sfuso.cod_mart IS not null \n" +
" then\n" +
" /*se si tratta di un mix pendiamo il costo dei materiali dalla mtb_aart*/\n" +
" sfuso_art.val_ult_car\n" +
" else\n" +
" ROUND(ISNULL(dist.costo_materiali, 0) / dist.qta_prod *\n" +
" ISNULL(sfuso.PercProd, 1),\n" +
" 5) end AS costo_unt,\n" +
" ISNULL( (case \n" +
" when sfuso.cod_mart IS not null \n" +
" then sfuso_art.val_ult_car * dist.qta_prod \n" +
" else dist.costo_materiali end ) \n" +
" * ISNULL(sfuso.PercProd, 1), 0) AS costo_materiali,\n" +
" \n" +
" ISNULL(dist.costo_manodopera, 0) +\n" +
" ISNULL(dist.costo_manodopera_magaz, 0) +\n" +
" ISNULL(dist.costo_servizi, 0) \n" +
" AS altri_costi\n" +
" FROM dbo.f_explodedist(@codprod, 1, 'U', @datacosto, 'S', 'S') dist\n" +
" INNER JOIN mtb_aart\n" +
" ON mtb_aart.cod_mart = ISNULL(dist.cod_prod_pri, dist.cod_prod) \n" +
" LEFT OUTER JOIN olvw_miscele_olio miscele ON dist.cod_prod = miscele.cod_mart\n" +
" LEFT OUTER JOIN olvw_distinta_sfuso sfuso\n" +
" ON dist.cod_prod_pri = sfuso.cod_prod AND\n" +
" dist.cod_prod = miscele.cod_mart\n" +
" LEFT OUTER JOIN mtb_aart sfuso_art on sfuso.cod_mart = sfuso_art.cod_mart\n" +
"\n" +
" )\n" +
" , distinta_base AS (\n" +
" SELECT 1 AS sort,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 THEN gruppi_merc.sort_categ ELSE '4' END as sort_categ,\n" +
" gruppi_merc.tipo_mgrp,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 THEN gruppi_merc.categoria ELSE 'COSTO LAVORAZIONI' END as categoria,\n" +
" mtb_aart.cod_msgr, \n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" +
" THEN mtb_aart.descrizione\n" +
" ELSE 'MANO DOPERA E ALTRI COSTI DI PRODUZIONE (' + gruppi_merc.tipo_mgrp + ')' END AS descr_costo,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" +
" THEN explode_dist.cod_mart\n" +
" END AS cod_mart,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" +
" THEN explode_dist.unt_mis_art\n" +
" ELSE explode_dist.unt_mis_prod END AS unt_mis,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1\n" +
" THEN explode_dist.qta_prod\n" +
" ELSE 1 END AS qta_prod,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 --OR gruppi_merc.isMateriaPrima = 1 \n" +
" THEN\n" +
" CASE\n" +
" WHEN @tipoCosto = 'CM' THEN ISNULL(lisa.costo_mercato, 0)\n" +
" ELSE explode_dist.costo_unt END\n" +
" ELSE explode_dist.altri_costi END AS costo_unit,\n" +
" CASE\n" +
" WHEN explode_dist.flag_foglia = 1 THEN\n" +
" CASE\n" +
" WHEN @tipoCosto = 'CM'\n" +
" THEN ISNULL(lisa.costo_mercato, 0) * explode_dist.qta_prod\n" +
" ELSE explode_dist.costo_materiali END +\n" +
" --ISNULL(oneri_acq.costo_kg * explode_dist.qta_prod, 0)\n" +
" CASE WHEN @tipoCosto = 'CM'\n" +
" THEN ISNULL(oneri_acq.costo_kg * explode_dist.qta_prod, 0)\n" +
" ELSE 0 END\n" +
" ELSE explode_dist.altri_costi END costo_materiali,\n" +
" CONVERT(VARCHAR(4), 'VAL') AS qualificatore,\n" +
" CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" +
" dati_listino.dati AS dati_listino\n" +
" FROM explode_dist\n" +
" INNER JOIN mtb_aart ON explode_dist.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN gruppi_merc ON mtb_aart.cod_mgrp = gruppi_merc.cod_mgrp\n" +
" OUTER APPLY (SELECT LISA.COD_MART,\n" +
" AVG(prz_acq_netto_um) AS costo_mercato\n" +
" FROM dbo.getListinoAcquisto(DATEADD(MONTH, 1, @DataCosto),\n" +
" NULL, NULL, mtb_aart.cod_mart,\n" +
" 'S', NULL) lisa\n" +
" WHERE ( Lisa.tipo_variazione is null OR lisa.tipo_variazione <> 'D' )\n" +
" AND lisa.flag_attivo = 'S'\n" +
" AND lisa.flag_forn_pref = 'S'\n" +
" AND @tipoCosto = 'CM'\n" +
" GROUP BY lisa.cod_mart) lisa\n" +
" OUTER APPLY (SELECT STUFF((SELECT '~' + lisa.cod_alis + ' - ' +\n" +
" lisa.descrizione + ' DEL ' +\n" +
" CONVERT(VARCHAR(10), lisa.data_iniz, 103) +\n" +
" ' PREZZO: ' +\n" +
" FORMAT(prz_acq_netto_um, '#,##0.00###') +\n" +
" '€' AS [text()]\n" +
" FROM dbo.getListinoAcquisto(\n" +
" DATEADD(WEEK, 1, @DataCosto),\n" +
" NULL, NULL, mtb_aart.cod_mart,\n" +
" 'S', NULL) lisa\n" +
" WHERE lisa.tipo_variazione <> 'D'\n" +
" AND lisa.flag_attivo = 'S'\n" +
" AND lisa.flag_forn_pref = 'S'\n" +
" AND @tipoCosto = 'CM'\n" +
" FOR XML PATH('')), 1, 1,\n" +
" '') AS dati) dati_listino\n" +
" OUTER APPLY (SELECT SUM(conai.costo_kg * mtb_spes.qta_spes) AS costo_kg\n" +
" FROM mtb_aart arti\n" +
" INNER JOIN mtb_spes ON arti.cod_mart = mtb_spes.cod_mart\n" +
" LEFT OUTER JOIN (SELECT cod_conai,\n" +
" da_data,\n" +
" LEAD(\n" +
" DATEADD(DAY, -1, da_data),\n" +
" 1,\n" +
" CAST(GETDATE() AS DATE))\n" +
" OVER (PARTITION BY cod_conai ORDER BY da_data) AS a_data,\n" +
" costo_kg\n" +
" FROM gtb_conai_costi) conai\n" +
" ON mtb_spes.cod_spes =\n" +
" conai.cod_conai AND\n" +
" CAST(GETDATE() AS DATE) BETWEEN da_data AND a_data\n" +
" WHERE arti.cod_mart = mtb_aart.cod_mart) AS oneri_acq )\n" +
"\n" +
"\n" +
" SELECT sort,\n" +
" sort_categ AS group_categ,\n" +
" sort_categ,\n" +
" tipo_mgrp,\n" +
" categoria,\n" +
" cod_msgr,\n" +
" descr_costo,\n" +
" cod_mart,\n" +
" unt_mis,\n" +
" ROUND(qta_prod, 4) AS qta_prod,\n" +
" /*costo_unit,*/\n" +
" CASE\n" +
" WHEN qta_prod > 0 THEN ROUND(ISNULL(costo_materiali, 0) / qta_prod, 5)\n" +
" ELSE 0 END AS costo_unit,\n" +
" ROUND(ISNULL(costo_materiali, 0), 5) AS valore,\n" +
" qualificatore,\n" +
" tipo_calcolo,\n" +
" dati_listino\n" +
" FROM distinta_base\n" +
" UNION ALL\n" +
" SELECT CASE WHEN tipo_calcolo = 'LAVORAZIONE' THEN 1 ELSE 2 END AS sort,\n" +
" CASE WHEN tipo_calcolo = 'LAVORAZIONE' THEN 4 ELSE 5 END AS group_categ,\n" +
" 20,\n" +
" NULL,\n" +
" CASE\n" +
" WHEN tipo_calcolo = 'LAVORAZIONE' THEN 'COSTO LAVORAZIONI'\n" +
" ELSE 'COSTI DIRETTI COMMERCIALI E CONSEGNA' END,\n" +
" NULL,\n" +
" jtb_dist_clav_dir.descrizione,\n" +
" jtb_dist_clav_dir.cod_prod,\n" +
" jtb_dist_clav_dir.unt_mis,\n" +
" jtb_dist_clav_dir.qta_lav / jtb_cicl.qta_prod / jtb_cicl.rap_conv_prod AS qta_lav,\n" +
" jtb_dist_clav_dir.val_unt,\n" +
" (jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.qta_prod /\n" +
" jtb_cicl.rap_conv_prod),\n" +
" CONVERT(VARCHAR(4), 'VAL') AS qualificatore,\n" +
" CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" +
" NULL AS dati_listino\n" +
" FROM jtb_dist_clav_dir\n" +
" INNER JOIN jtb_cicl ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" +
" INNER JOIN gtb_spes ON jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes\n" +
" WHERE jtb_dist_clav_dir.cod_prod = (@codprod)\n" +
" AND gtb_spes.tipo_calcolo IN ('TRASPORTO PER KG', 'TRASPORTO PER COLLO', 'COMMERCIALI', 'LAVORAZIONE')\n" +
" AND jtb_dist_clav_dir.flag_fase_pref = 'S'\n" +
" UNION ALL\n" +
" SELECT 2,\n" +
" 5 AS group_categ,\n" +
" 21,\n" +
" NULL,\n" +
" 'COSTI DIRETTI COMMERCIALI E CONSEGNA',\n" +
" NULL,\n" +
" jtb_clav_ind.descrizione,\n" +
" NULL,\n" +
" NULL,\n" +
" NULL,\n" +
" NULL,\n" +
" jtb_dist_clav_ind.perc_cost,\n" +
" CONVERT(VARCHAR(4), 'PERC') AS qualificatore,\n" +
" jtb_clav_ind.tipo_calcolo AS tipo_calcolo,\n" +
" NULL AS dati_listino\n" +
" FROM jtb_dist_clav_ind\n" +
" INNER JOIN jtb_clav_ind ON jtb_clav_ind.cod_jcos_ind = jtb_dist_clav_ind.cod_jcos_ind\n" +
" WHERE jtb_dist_clav_ind.cod_prod = (@codprod)\n" +
" UNION ALL\n" +
" SELECT sort,\n" +
" group_categ,\n" +
" sort_categ,\n" +
" tipo_mgrp,\n" +
" categoria,\n" +
" cod_msgr,\n" +
" descr_costo,\n" +
" cod_mart,\n" +
" unt_mis,\n" +
" ROUND(qta_prod, 4) AS qta_prod,\n" +
" costo_unit,\n" +
" valore,\n" +
" qualificatore,\n" +
" tipo_calcolo,\n" +
" dati_listino\n" +
" FROM dbo.getSchedaCosti_DatiCommerciali(@codprod, @DataCosto, @codvlis) AS dati_commerciali\n" +
" UNION ALL\n" +
" SELECT 3,\n" +
" 6 AS group_categ,\n" +
" 31,\n" +
" NULL,\n" +
" 'COSTI INDIRETTI',\n" +
" NULL,\n" +
" 'COSTI GENERALI INCIDENZA A PERCENTUALE',\n" +
" jtb_cicl.cod_mart,\n" +
" NULL,\n" +
" NULL,\n" +
" NULL,\n" +
" ISNULL(jtb_cicl.perc_cost_gen, 0) AS perc_costi_gen,\n" +
" CONVERT(VARCHAR(4), 'PERC') AS qualificatore,\n" +
" CONVERT(VARCHAR(1), 'V') AS tipo_calcolo,\n" +
" NULL AS dati_listino\n" +
" FROM mtb_aart\n" +
" INNER JOIN jtb_cicl ON mtb_aart.cod_mart = jtb_cicl.cod_prod \n" +
" WHERE mtb_aart.cod_mart = (@codprod) \n" +
" )");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251121183801 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Materica) && !isCustomer(IntegryCustomer.Ime)) return;
updateSetupValue("CRM", "COD_CCON", "PREFISSO_I", "105000");
updateSetupValue("CRM", "COD_CCON", "DEFAULT", "111000");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,50 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import it.integry.ems_model.utility.dto.PkTableDTO;
import java.util.Arrays;
public class Migration_20251124102759 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Carelli) || isCustomer(IntegryCustomer.RistoCash)) {
executeStatement("create table apuliac_perc_premio (\n" +
"id bigint identity,\n" +
"cod_forn varchar(10) not null,\n" +
"divisione varchar(10),\n" +
"perc_premio numeric(5,3) not null default 0 )");
PkTableDTO pkTableDTO = new PkTableDTO()
.setTableName("apuliac_perc_premio")
.addColumn(new PkTableDTO.Column("id"));
createPrimaryKey(pkTableDTO);
IndexTableDTO indexTableDTO = new IndexTableDTO()
.setTableName("apuliac_perc_premio")
.setIndexName("ix_apuliac_perc_premio_codforn_div")
.setUnique(true)
.setColumnsIndex(Arrays.asList(
new IndexTableDTO.ColumnIndex("cod_forn"),
new IndexTableDTO.ColumnIndex("divisione")
));
createIndex(indexTableDTO);
executeStatement("exec sp_rename 'apuliac_agg_prz_csv.altro', 'divisione_premio'");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,47 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251124135552 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getGrigliaAcquisto","CREATE FUNCTION [dbo].[getGrigliaAcquisto] (@dataValidita datetime, @codAlis varchar(5), @codMdep varchar(5), @codArtFor varchar(25), @codMart varchar(15)) RETURNS TABLE AS\n" +
"return\n" +
"SELECT *\n" +
"FROM (SELECT atb_griglie.cod_alis,\n" +
" atb_griglie.cod_mdep,\n" +
" atb_griglie.data_validita,\n" +
" atb_griglie.note,\n" +
" atb_griglie_art.cod_art_for,\n" +
" atb_griglie_art.cod_mart,\n" +
" atb_griglie_art.tipo_assortimento,\n" +
" atb_griglie_art.tipo_variazione,\n" +
" ROW_NUMBER() OVER (PARTITION BY atb_griglie.cod_alis,\n" +
" atb_griglie.cod_mdep,\n" +
" atb_griglie_art.cod_mart,\n" +
" atb_griglie_art.cod_art_for ORDER BY atb_griglie.data_validita DESC) AS last_griglia\n" +
" FROM atb_griglie\n" +
" INNER JOIN atb_griglie_art ON atb_griglie.cod_alis = atb_griglie_art.cod_alis AND\n" +
" atb_griglie.cod_mdep = atb_griglie_art.cod_mdep AND\n" +
" atb_griglie.data_validita = atb_griglie_art.data_validita\n" +
" WHERE atb_griglie.data_validita <= COALESCE(@datavalidita, CAST(GETDATE() AS DATE))\n" +
" AND (@codmdep IS NULL OR atb_griglie.cod_mdep = @codmdep)\n" +
" AND (@codalis IS NULL OR atb_griglie.cod_alis = @codalis)\n" +
" AND (@codartfor IS NULL OR atb_griglie_art.cod_art_for = @codartfor)\n" +
" AND (@codmart IS NULL OR atb_griglie_art.cod_mart = @codmart)) t\n" +
"WHERE last_griglia = 1\n" +
"\n");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,42 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251124143153 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("TIPO_GRIGLIA", "tipo griglia", "SELECT 'A|GRIGLIA DI ACQUISTO'\n" +
"UNION ALL\n" +
"SELECT 'V|GRIGLIA DI VENDITA'");
createSetup
("PVM", "RILEVAZIONI_STEUP", "TIPO_GRIGLIA", null,
"Indicare per ogni reparto se la griglia per l'assortimento è quella di acquisto o di vendita",
false, "TIPO_GRIGLIA", true, false, false, false, false, "jtb_fasi", false,
"SELECT 'A|GRIGLIA DI ACQUISTO'\n" +
"UNION ALL\n" +
"SELECT 'V|GRIGLIA DI VENDITA'");
if (!isCustomerDb(IntegryCustomerDB.Carelli_Winact)) return;
executeStatement("insert into stb_gest_setup_det \n" +
"select gest_name, section, key_section, tipo_setup, f.cod_jfas, f.valUe\n" +
"from stb_gest_setup\n" +
"cross apply (\n" +
"select distinct jtb_fasi.cod_jfas,\n" +
"IIF (jtb_fasi.cod_jfas = '01' OR jtb_fasi.cod_jfas = '02', 'V', 'A') as valUe\n" +
"from jtb_fasi inner join jrl_fasi_mtb_grup on jtb_fasi.cod_jfas = jrl_fasi_mtb_grup.cod_jfas ) f\n" +
"where gest_name = 'PVM' \n" +
"and section = 'RILEVAZIONI_STEUP'\n" +
"and key_section = 'TIPO_GRIGLIA'\n");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,66 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251124161416 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Carelli_Winact)) return;
createOrUpdateFunction("[steup_getGrigliaVendita]", "CREATE FUNCTION [dbo].[steup_getGrigliaVendita](\n" +
" @codMdep VARCHAR(5), @codJfas VARCHAR(5), @dataIspezione datetime\n" +
")\n" +
" RETURNS TABLE\n" +
" AS\n" +
" RETURN(WITH tipiArt AS (SELECT value_string AS cod_mtip\n" +
" FROM dbo.ParseStringIntoArray((SELECT value\n" +
" FROM stb_gest_setup\n" +
" WHERE gest_name = 'PVM'\n" +
" AND section = 'RILEVAZIONI_STEUP'\n" +
" AND key_section = 'EXCLUDE_COD_MTIP'), '|') t)\n" +
" , art AS (SELECT DISTINCT cod_griglia, cod_mart\n" +
" FROM carelli.dbo.vtb_griglia_art\n" +
" WHERE cod_griglia = @codMdep\n" +
" AND data_validita =\n" +
" (SELECT MAX(data_validita) FROM carelli.dbo.vtb_griglia_art WHERE cod_griglia = @codMdep AND data_validita <=@dataIspezione)\n" +
" )\n" +
" \n" +
" SELECT DISTINCT case when @codJfas = '01' then art_det.cod_mart_griglia else mtb_aart.cod_mart end as cod_mart,\n" +
" mtb_aart.descrizione,\n" +
" mtb_aart.bar_code,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.plu,\n" +
" art_det.cod_mart AS cod_mart_kit \n" +
" FROM carelli.dbo.mtb_aart\n" +
" INNER JOIN jrl_fasi_mtb_grup ON\n" +
" mtb_aart.cod_mgrp = jrl_fasi_mtb_grup.cod_mgrp\n" +
" INNER JOIN (SELECT cod_mart, cod_comp AS cod_mart_griglia\n" +
" FROM carelli.dbo.mtb_comp\n" +
" UNION ALL\n" +
" SELECT cod_comp AS cod_mart, cod_mart AS cod_mart_griglia\n" +
" FROM carelli.dbo.mtb_comp \n" +
" where @codJfas <> '01'\n" +
" UNION ALL\n" +
" SELECT cod_mart, cod_mart AS cod_mart_griglia\n" +
" FROM carelli.dbo.mtb_aart\n" +
" WHERE cod_mart NOT IN (SELECT cod_mart FROM carelli.dbo.mtb_comp)) AS art_det\n" +
" ON mtb_aart.cod_mart = art_det.cod_mart\n" +
" INNER JOIN art ON art_det.cod_mart_griglia = art.cod_mart\n" +
" WHERE jrl_fasi_mtb_grup.cod_jfas = @codJfas\n" +
" AND flag_stato = 'A'\n" +
" AND (mtb_aart.cod_mtip IS NULL OR mtb_aart.cod_mtip NOT IN (SELECT cod_mtip FROM tipiArt)) \n" +
" )");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,99 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251124164630 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getMaterialiDistinta",
"CREATE FUNCTION [dbo].[getMaterialiDistinta](@codProd VARCHAR(15), @explodeSemilavorati BIT)\n" +
" RETURNS TABLE\n" +
" AS\n" +
" RETURN(WITH distinta AS (SELECT cod_prod,\n" +
" CONVERT(VARCHAR(15), NULL) AS cod_parent,\n" +
" cod_prod AS cod_mart,\n" +
" jtb_cicl.descrizione_prod AS descrizione,\n" +
" jtb_cicl.descrizione_estesa,\n" +
" CONVERT(VARCHAR(3), unt_mis_prod) AS unt_mis_prod,\n" +
" CONVERT(NUMERIC(20, 5), rap_conv_prod) AS rap_conv_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_dist,\n" +
" 1 AS livello,\n" +
" FORMAT(ROW_NUMBER() OVER ( ORDER BY cod_prod), '00000') AS item_id,\n" +
" CONVERT(VARCHAR(15), cod_prod) AS cod_prod_pri,\n" +
" CAST(0 AS BIT) AS ricorsione,\n" +
" CONVERT(NUMERIC(5, 2), 0) AS perc_sfrido,\n" +
" CONVERT(INT, NULL) AS num_fase,\n" +
" CONVERT(VARCHAR(1), NULL) AS flag_pri,\n" +
" CONVERT(VARCHAR(1024), NULL) AS note,\n" +
" CAST(1 AS BIT) AS is_root,\n" +
" CAST(0 AS BIT) AS is_foglia\n" +
" FROM jtb_cicl\n" +
" WHERE (@codProd IS NULL OR cod_prod = @codProd)\n" +
" UNION ALL\n" +
" SELECT distinta.cod_prod,\n" +
" CONVERT(VARCHAR(15), jtb_dist_mate.cod_prod) AS cod_parent,\n" +
" jtb_dist_mate.cod_mart,\n" +
" jtb_dist_mate.descrizione,\n" +
" jtb_dist_mate.descrizione_estesa,\n" +
" CONVERT(VARCHAR(3), jtb_dist_mate.unt_mis_dist) AS unt_mis_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_dist_mate.rap_conv_dist) AS rap_conv_prod,\n" +
" CONVERT(NUMERIC(20, 5),\n" +
" ((jtb_dist_mate.qta_std * (1 + jtb_dist_mate.perc_sfrido / 100)) /\n" +
" (distinta.qta_prod)) * distinta.qta_prod) AS qta_prod,\n" +
" CONVERT(NUMERIC(20, 5), NULL),\n" +
" distinta.livello + 1,\n" +
" distinta.item_id + '_' +\n" +
" FORMAT(\n" +
" ROW_NUMBER() OVER ( ORDER BY jtb_dist_mate.flag_pri DESC, jtb_dist_mate.num_fase, id_riga ),\n" +
" '00000') AS item_id,\n" +
" CONVERT(VARCHAR(15), distinta.cod_mart) AS cod_prod_pri,\n" +
" CAST(CASE\n" +
" WHEN jtb_dist_mate.cod_mart = jtb_dist_mate.cod_prod THEN 1\n" +
" ELSE 0 END AS BIT) AS ricorsione,\n" +
" jtb_dist_mate.perc_sfrido,\n" +
" jtb_dist_mate.num_fase,\n" +
" CONVERT(VARCHAR(1), jtb_dist_mate.flag_pri) AS flag_pri,\n" +
" CONVERT(VARCHAR(1024), jtb_dist_mate.note) AS note,\n" +
" CAST(0 AS BIT) AS is_root,\n" +
" CAST(IIF(jtb_dist_mate.flag_pri = 's', 0, 1) AS BIT) AS is_foglia\n" +
" FROM jtb_dist_mate\n" +
" INNER JOIN distinta ON jtb_dist_mate.cod_prod = distinta.cod_mart\n" +
" INNER JOIN mtb_aart ON mtb_aart.cod_mart = jtb_dist_mate.cod_mart\n" +
" WHERE distinta.ricorsione = 0\n" +
" AND (distinta.is_root = 1 OR distinta.flag_pri = 'S' OR @explodeSemilavorati = 1))\n" +
" SELECT cod_prod,\n" +
" cod_parent,\n" +
" cod_mart,\n" +
" descrizione,\n" +
" descrizione_estesa,\n" +
" unt_mis_prod,\n" +
" rap_conv_prod,\n" +
" ISNULL(qta_dist, qta_prod) AS qta_prod,\n" +
" livello,\n" +
" item_id,\n" +
" cod_prod_pri,\n" +
" perc_sfrido,\n" +
" num_fase,\n" +
" DENSE_RANK() OVER ( PARTITION BY cod_prod ORDER BY cod_prod_pri ) - 1 + num_fase AS num_fase_calc,\n" +
" flag_pri,\n" +
" note,\n" +
" is_root,\n" +
" is_foglia\n" +
" FROM distinta)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,304 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251125093824 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Biolevante)) return;
createOrUpdateFunction("f_pp_consuntivo_prod_tracc", "CREATE function [dbo].[f_pp_consuntivo_prod_tracc] (@as_codProdParent varchar(15), @as_partitaMagParent varchar(20), @ac_qtaProdParent numeric(20,5), @as_codProd varchar(15), @as_partitaMag varchar(20), @ac_qtaProd numeric(20, 5), @ai_livello integer, @as_item_id varchar(255), @ai_idRiga integer) \n" +
"RETURNS @dettCosti TABLE(livello integer, \n" +
" item_id varchar(255),\n" +
" cod_prod_parent varchar(15),\n" +
" partita_mag_parent varchar(20), \n" +
" qta_prod_parent numeric(20,5),\n" +
" cod_prod varchar(15),\n" +
" partita_mag varchar(20), \n" +
" qta_prod numeric(20,5),\n" +
" gruppo_conto varchar(40), \n" +
" conto varchar(40), \n" +
" descrizione_conto varchar(255), \n" +
" dettaglio_conto varchar(40),\n" +
" unt_mis varchar(5), \n" +
" qta_consumata numeric(20, 5)) AS\n" +
"Begin\n" +
" DECLARE \n" +
" @lc_qtaProd numeric(20,5), \n" +
" @ls_gruppoConto varchar(40), \n" +
" @ls_codMart varchar(15), \n" +
" @ls_partitaMag varchar(20), \n" +
" @ls_descrizione varchar(255), \n" +
" @ls_untMis varchar(5), \n" +
" @lc_qtaMP numeric(20,5), \n" +
" @li_existDist integer, \n" +
" @lc_rapporto numeric(20, 5),\n" +
" @lc_qtaProdScaricata numeric(20,5),\n" +
" @li_livello integer, \n" +
" @ls_itemID varchar(255),\n" +
" @li_idRiga integer,\n" +
" @ls_codMiscela varchar(15),\n" +
" @ls_posizione varchar(20),\n" +
" @ls_posizione_da varchar(20),\n" +
" @ls_posizione_a varchar(20),\n" +
" @li_countScarichiLotto integer\n" +
"\n" +
" SELECT @ls_codMiscela = cod_mart FROM olvw_miscele_olio\n" +
"\n" +
" if @ai_idRiga is null\n" +
" begin\n" +
" SELECT @ai_livello = 1\n" +
" SELECT @as_item_id = '00001';\n" +
" end ;\n" +
" IF @as_item_id = '' \n" +
" begin\n" +
" Select @ls_posizione = mtb_depo_posizioni.posizione from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @as_codProdParent and partita_mag = @as_partitaMagParent and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" If @ls_posizione is not null Select @as_item_id = 'SILOS' --Serve ad identificare le miscele di olio\n" +
" end\n" +
"\n" +
" /* Acquisizione quantita totale prodotta per prodotto-partita */\n" +
" Select @lc_qtaProd = ISNULL(sum(dtb_docr.qta_doc * dtb_docr.rap_conv * dtb_tipi.segno_qta_car), 0)\n" +
" from dtb_docr, \n" +
" dtb_tipi, \n" +
" mtb_aart, \n" +
" mtb_grup\n" +
" where dtb_docr.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" mtb_aart.cod_mgrp = mtb_Grup.cod_mgrp and\n" +
" dtb_docr.cod_mart = @as_codProd and\n" +
" dtb_docr.partita_mag = @as_partitaMag and\n" +
" dtb_tipi.gestione = 'L' and\n" +
" dtb_tipi.tipo_emissione = 'DIRETTA' and\n" +
" dtb_tipi.segno_qta_car <> 0\n" +
"\n" +
" /* Calcolo del rapporto della qta passata come parametro e di quella totale*/\n" +
" if @ac_qtaProd is not null\n" +
" if @lc_qtaProd = 0 select @lc_rapporto = 0 else select @lc_rapporto = @ac_qtaProd / @lc_qtaProd\n" +
" else\n" +
" begin \n" +
" select @lc_rapporto = 1\n" +
" select @ac_qtaProdParent = @lc_qtaProd\n" +
" end\n" +
" \n" +
" /* Acquisizione totale quantita' prodotta per prododo-partita_mag dagli scarichi\n" +
" E' necessario prendere la quantita dalla testata degli scarichi perche' ci \n" +
" potrebbero essere delle perdite rispetto alla quantita' caricata.\n" +
" N.B. al momento questa variabile viene acquisita solo per controllo in fase di debug\n" +
" */\n" +
" Select @lc_qtaProdScaricata = sum(dtb_doct.qta_prod*dtb_doct.rap_conv_prod * @lc_rapporto)\n" +
" From dtb_doct, \n" +
" dtb_tipi\n" +
" Where dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" \n" +
"\n" +
" /* Acquisizione scarichi per prodotto-partita_mag */\n" +
" select @li_idRiga = 0;\n" +
" IF @as_codProd = @ls_codMiscela\n" +
" begin\n" +
" Select @ai_livello = @ai_livello+1\n" +
" end\n" +
" Declare csr_scarichi Cursor LOCAL SCROLL FOR\n" +
" Select PP_gruppiCostiMP.GruppoConto,\n" +
" dtb_docr.cod_mart, \n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.descrizione_estesa as descrizione,\n" +
" mtb_aart.unt_mis,\n" +
" sum(dtb_docr.qta_doc*dtb_docr.rap_conv*dtb_tipi.segno_qta_scar*@lc_rapporto) as Qta_mp\n" +
" From dtb_doct, \n" +
" dtb_docr, \n" +
" dtb_tipi, \n" +
" mtb_aart, \n" +
" mtb_grup, \n" +
" PP_gruppiCostiMP\n" +
" Where dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc and\n" +
" dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" mtb_aart.cod_mgrp = mtb_grup.cod_mgrp and\n" +
" dtb_docr.cod_mart = PP_gruppiCostiMP.cod_mart and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" and NOT (dtb_docr.cod_mart = @as_codProd and ISNULL(dtb_docr.partita_mag, '') = ISNULL(@as_partitaMag, ''))\n" +
" group by PP_gruppiCostiMP.GruppoConto,\n" +
" dtb_docr.cod_mart, \n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.descrizione_estesa,\n" +
" mtb_aart.unt_mis\n" +
" union all\n" +
" \n" +
" Select PP_gruppiCostiMP.GruppoConto,\n" +
" car.cod_mart, \n" +
" car.partita_mag,\n" +
" car.descrizione_estesa as descrizione,\n" +
" mtb_aart.unt_mis,\n" +
" sum(car.qta_doc*car.rap_conv*dtb_tipi.segno_qta_scar*@lc_rapporto) as Qta_mp \n" +
" from dtb_doct inner join dtb_docr on dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc \n" +
" inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip \n" +
" inner join dtb_docr car on dtb_doct.activity_id = car.activity_id_row \n" +
" inner join dtb_tipi tipo_car on car.cod_dtip = tipo_car.cod_dtip\n" +
" inner join olvw_caratteristiche on car.cod_mart = olvw_caratteristiche.cod_mart\n" +
" inner join PP_gruppiCostiMP on car.cod_mart = PP_gruppiCostiMP.cod_mart\n" +
" inner join mtb_aart on car.cod_mart = mtb_aart.cod_mart \n" +
" inner join mtb_grup on mtb_aart.cod_mgrp = mtb_grup.cod_mgrp \n" +
" where tipo_car.gestione = 'L' and \n" +
" tipo_car.segno_qta_car - tipo_car.segno_qta_scar < 0 and \n" +
" olvw_caratteristiche.Confezionato = 'S' and \n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" and NOT (dtb_docr.cod_mart = @as_codProd and ISNULL(dtb_docr.partita_mag, '') = ISNULL(@as_partitaMag, '')) \n" +
" group by PP_gruppiCostiMP.GruppoConto,\n" +
" car.cod_mart, \n" +
" car.partita_mag,\n" +
" car.descrizione_estesa,\n" +
" mtb_aart.unt_mis\n" +
" Order by PP_gruppiCostiMP.GruppoConto desc \n" +
" \n" +
" OPEN csr_scarichi\n" +
" FETCH NEXT FROM csr_scarichi INTO @ls_gruppoConto, @ls_codMart, @ls_partitaMag, @ls_descrizione, @ls_untMis, @lc_qtaMP\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" begin\n" +
" IF ABS(@lc_qtaMP) > 0.01\n" +
" Begin\n" +
" select @li_idRiga = @li_idRiga + 1;\n" +
" SELECT @ls_itemID = @as_item_id + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @li_idRiga))) + CONVERT(varchar(15), @li_idRiga); \n" +
"\n" +
" /* verifica esistenza scarico, Indica che siamo in presenza di un semilavorato/lotto */\n" +
" select @li_existDist = count(*)\n" +
" from dtb_doct, dtb_tipi\n" +
" where dtb_doct.cod_prod = @ls_codMart and partita_mag = @ls_partitaMag and \n" +
" dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.segno_qta_scar = 1 and \n" +
" dtb_doct.gestione = 'L'\n" +
" \n" +
" \n" +
" /* Materia prima */\n" +
" if @li_existDist = 0 or @@NESTLEVEL >= 30\n" +
" begin\n" +
" insert into @dettCosti \n" +
" select @ai_livello,\n" +
" @ls_itemID,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent, \n" +
" @ac_qtaProdParent, \n" +
" @as_codProd, \n" +
" @as_partitaMag, \n" +
" @lc_qtaProdScaricata, \n" +
" @ls_gruppoConto, \n" +
" @ls_codMart, \n" +
" @ls_descrizione, \n" +
" @ls_partitaMag, \n" +
" @ls_untMis, \n" +
" @lc_qtaMP\n" +
" end\n" +
" else\n" +
" Begin\n" +
" /* Semilavorato */\n" +
" \n" +
" Select @ls_posizione_a = mtb_depo_posizioni.posizione \n" +
" from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @as_codProd and partita_mag = @as_partitaMag and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" Select @ls_posizione_da = mtb_depo_posizioni.posizione \n" +
" from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @as_codProd and partita_mag = @as_partitaMag and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" \n" +
" --24/11/25 (Massimo) Segue query per verificare se siamo su un lotto di olio che è stato scaricato e non azzerato. In tal caso la ricorsione non deve avvenire\n" +
" select @li_countScarichiLotto = count(*)\n" +
" from dtb_docr inner join dtb_tipi on dtb_docr.cod_dtip = dtb_tipi.cod_dtip \n" +
" where dtb_tipi.segno_qta_scar = 1\n" +
" and dtb_docr.cod_mart = @ls_codMart and dtb_docr.partita_mag = @ls_partitaMag\n" +
" and @ls_posizione_da = @ls_posizione_a\n" +
"\n" +
" If @ls_posizione_da is not null and \n" +
" (ISNULL(@ls_posizione_da,'') <> ISNULL(@ls_posizione_a,00) or \n" +
" @ls_posizione_da is null or @ls_posizione_a is null or \n" +
" (@ai_livello <1 and @as_codProd = @ls_codMiscela) or \n" +
" (ISNULL(@ls_posizione_da,'') = ISNULL(@ls_posizione_a,00) and @as_codProd= @ls_codMiscela) or\n" +
" IsNull(@li_countScarichiLotto,1) > 1)\n" +
" --Questa insert serve per trattare l'olio che proviene da altro serbatoio come una materia prima a partire dal 2° livello di ricorsione\n" +
" --dal 24/11/25 vale anche per olio proveniente dallo stesso serbatoio ma già scaricato parzialmente prima del carico del lotto parent\n" +
" Begin\n" +
" insert into @dettCosti \n" +
" select @ai_livello,\n" +
" @ls_itemID,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent, \n" +
" @ac_qtaProdParent, \n" +
" @as_codProd, \n" +
" @as_partitaMag, \n" +
" @lc_qtaProdScaricata, \n" +
" @ls_gruppoConto, \n" +
" @ls_codMart, \n" +
" @ls_descrizione, \n" +
" @ls_partitaMag, \n" +
" @ls_untMis, \n" +
" @lc_qtaMP;\n" +
" End\n" +
" \n" +
" /*Ricorsione su semilavorato-partita_mag*/\n" +
" If IsNull(@li_countScarichiLotto,1) = 1 and --Aggiunta 24/11/25 da Massimo per escludere ricorsione su olio proveniente dallo stesso serbatoio ma già scaricato parzialmente prima del carico del lotto parent\n" +
" ISNULL(@ls_posizione_da,'') = ISNULL(@ls_posizione_a,00) and @as_codProd <> @ls_codMiscela or \n" +
" @ls_posizione_da is null or @ls_posizione_a is null or \n" +
" (@ai_livello <1 and @as_codProd = @ls_codMiscela)\n" +
" --La ricorsione non avviene sugli olii provenienti da altro serbatoio e neanche nel caso di Miscele fittizie create nello stesso serbatoio dell'olio di provenienza in assenza di polmone\n" +
" insert into @dettCosti \n" +
" select costi.livello, \n" +
" costi.item_id,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent,\n" +
" @ac_qtaProdParent,\n" +
" costi.cod_prod, \n" +
" costi.partita_mag, \n" +
" costi.qta_prod,\n" +
" costi.gruppo_conto, \n" +
" costi.conto, \n" +
" costi.descrizione_conto, \n" +
" costi.dettaglio_conto,\n" +
" costi.unt_mis, \n" +
" costi.qta_consumata \n" +
" from dbo.f_pp_consuntivo_prod_tracc(@as_codProdParent, @as_partitaMagParent, @ac_qtaProdParent, @ls_codMart, @ls_partitaMag, @lc_qtaMP, @ai_livello, @ls_itemID, @li_idRiga) costi\n" +
" \n" +
" \n" +
" end\n" +
" end\n" +
" FETCH NEXT FROM csr_scarichi INTO @ls_gruppoConto, @ls_codMart, @ls_partitaMag, @ls_descrizione, @ls_untMis, @lc_qtaMP\n" +
" end\n" +
" close csr_scarichi\n" +
" deallocate csr_scarichi\n" +
" return\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,101 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251125095325 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateFunction("getMaterialiDistinta",
"CREATE FUNCTION [dbo].[getMaterialiDistinta](@codProd VARCHAR(15), @explodeSemilavorati BIT)\n" +
" RETURNS TABLE\n" +
" AS\n" +
" RETURN(WITH distinta AS (SELECT cod_prod,\n" +
" CONVERT(VARCHAR(15), NULL) AS cod_parent,\n" +
" cod_prod AS cod_mart,\n" +
" jtb_cicl.descrizione_prod AS descrizione,\n" +
" jtb_cicl.descrizione_estesa,\n" +
" CONVERT(VARCHAR(3), unt_mis_prod) AS unt_mis_prod,\n" +
" CONVERT(NUMERIC(20, 5), rap_conv_prod) AS rap_conv_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_cicl.qta_prod) AS qta_dist,\n" +
" 1 AS livello,\n" +
" FORMAT(ROW_NUMBER() OVER ( ORDER BY cod_prod), '00000') AS item_id,\n" +
" CONVERT(VARCHAR(15), cod_prod) AS cod_prod_pri,\n" +
" CAST(0 AS BIT) AS ricorsione,\n" +
" CONVERT(NUMERIC(5, 2), 0) AS perc_sfrido,\n" +
" CONVERT(INT, NULL) AS num_fase,\n" +
" CONVERT(VARCHAR(1), NULL) AS flag_pri,\n" +
" CONVERT(VARCHAR(1024), NULL) AS note,\n" +
" CAST(1 AS BIT) AS is_root,\n" +
" CAST(0 AS BIT) AS is_foglia\n" +
" FROM jtb_cicl\n" +
" WHERE (@codProd IS NULL OR cod_prod = @codProd)\n" +
" UNION ALL\n" +
" SELECT distinta.cod_prod,\n" +
" CONVERT(VARCHAR(15), jtb_dist_mate.cod_prod) AS cod_parent,\n" +
" jtb_dist_mate.cod_mart,\n" +
" jtb_dist_mate.descrizione,\n" +
" jtb_dist_mate.descrizione_estesa,\n" +
" CONVERT(VARCHAR(3), jtb_dist_mate.unt_mis_dist) AS unt_mis_prod,\n" +
" CONVERT(NUMERIC(20, 5), jtb_dist_mate.rap_conv_dist) AS rap_conv_prod,\n" +
" CONVERT(NUMERIC(20, 5),\n" +
" ((jtb_dist_mate.qta_std * (1 + jtb_dist_mate.perc_sfrido / 100)) /\n" +
" (jtb_cicl.qta_prod)) * distinta.qta_prod) AS qta_prod,\n" +
" CONVERT(NUMERIC(20, 5), NULL),\n" +
" distinta.livello + 1,\n" +
" distinta.item_id + '_' +\n" +
" FORMAT(\n" +
" ROW_NUMBER() OVER ( ORDER BY jtb_dist_mate.flag_pri DESC, jtb_dist_mate.num_fase, id_riga ),\n" +
" '00000') AS item_id,\n" +
" CONVERT(VARCHAR(15), distinta.cod_mart) AS cod_prod_pri,\n" +
" CAST(CASE\n" +
" WHEN jtb_dist_mate.cod_mart = jtb_dist_mate.cod_prod THEN 1\n" +
" ELSE 0 END AS BIT) AS ricorsione,\n" +
" jtb_dist_mate.perc_sfrido,\n" +
" jtb_dist_mate.num_fase,\n" +
" CONVERT(VARCHAR(1), jtb_dist_mate.flag_pri) AS flag_pri,\n" +
" CONVERT(VARCHAR(1024), jtb_dist_mate.note) AS note,\n" +
" CAST(0 AS BIT) AS is_root,\n" +
" CAST(IIF(jtb_dist_mate.flag_pri = 's', 0, 1) AS BIT) AS is_foglia\n" +
" FROM jtb_dist_mate\n" +
" INNER JOIN distinta ON jtb_dist_mate.cod_prod = distinta.cod_mart\n" +
" INNER JOIN jtb_cicl\n" +
" ON jtb_dist_mate.cod_prod = jtb_cicl.cod_prod\n" +
" INNER JOIN mtb_aart ON mtb_aart.cod_mart = jtb_dist_mate.cod_mart\n" +
" WHERE distinta.ricorsione = 0\n" +
" AND (distinta.is_root = 1 OR distinta.flag_pri = 'S' OR @explodeSemilavorati = 1))\n" +
" SELECT cod_prod,\n" +
" cod_parent,\n" +
" cod_mart,\n" +
" descrizione,\n" +
" descrizione_estesa,\n" +
" unt_mis_prod,\n" +
" rap_conv_prod,\n" +
" ISNULL(qta_dist, qta_prod) AS qta_prod,\n" +
" livello,\n" +
" item_id,\n" +
" cod_prod_pri,\n" +
" perc_sfrido,\n" +
" num_fase,\n" +
" DENSE_RANK() OVER ( PARTITION BY cod_prod ORDER BY cod_prod_pri ) - 1 + num_fase AS num_fase_calc,\n" +
" flag_pri,\n" +
" note,\n" +
" is_root,\n" +
" is_foglia\n" +
" FROM distinta)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,60 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251125100117 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("create table dbo.mtb_livelli_anomalie\n" +
"(\n" +
" id bigint identity\n" +
" constraint pk_mtb_livelli_anomalie\n" +
" primary key,\n" +
" descrizione varchar(255) not null,\n" +
" hex_colore varchar(20) default '#ffffff',\n" +
" escludi_picking_vendita bit default 0 not null,\n" +
" escludi_picking_lavorazione bit default 0 not null\n" +
")");
executeStatement("create table dbo.mtb_anomalie_ul\n" +
"(\n" +
" id bigint identity\n" +
" constraint pk_mtb_anomalie_ul\n" +
" primary key,\n" +
" descrizione varchar(200) not null,\n" +
" annotazioni varchar(400),\n" +
" inizio_anomalia datetime,\n" +
" fine_anomalia datetime,\n" +
" id_livello_anomalia bigint not null\n" +
" constraint mtb_anomalie_ul_mtb_livelli_anomalie_id_fk\n" +
" references dbo.mtb_livelli_anomalie,\n" +
" cod_jfas varchar(5)\n" +
" constraint mtb_anomalie_ul_jtb_fasi_cod_jfas_fk\n" +
" references dbo.jtb_fasi\n" +
")");
executeStatement("alter table dbo.mtb_colt\n" +
" add id_anomalia bigint\n" +
" constraint mtb_colt_mtb_anomalie_ul_id_fk\n" +
" references dbo.mtb_anomalie_ul (id)");
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano)) {
executeInsertStatement("INSERT INTO mtb_livelli_anomalie (descrizione, hex_colore, escludi_picking_vendita, escludi_picking_lavorazione) VALUES (N'Prodotto non conforme', N'#FF0000', 1, 1)");
executeInsertStatement("INSERT INTO mtb_livelli_anomalie (descrizione, hex_colore, escludi_picking_vendita, escludi_picking_lavorazione) VALUES (N'Prodotto uscito con alte temperature', N'#E36C0A', 1, 0)");
executeInsertStatement("INSERT INTO mtb_livelli_anomalie (descrizione, hex_colore, escludi_picking_vendita, escludi_picking_lavorazione) VALUES (N'Pedana in osservazione', N'#FFC000', 1, 0)");
executeInsertStatement("INSERT INTO mtb_livelli_anomalie (descrizione, hex_colore, escludi_picking_vendita, escludi_picking_lavorazione) VALUES (N'Barattoli con difetto di marcatura', N'#00B050', 0, 0)");
executeInsertStatement("INSERT INTO mtb_livelli_anomalie (descrizione, hex_colore, escludi_picking_vendita, escludi_picking_lavorazione) VALUES (N'Barattoli difettati', N'#00B0F0', 0, 1)");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,240 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251125105713 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
createOrUpdateProcedure("MRP_UpdateQtaImpProx", "CREATE Procedure [dbo].[MRP_UpdateQtaImpProx](@elencoArticoli varchar(max) = null)\n" +
"AS \n" +
"--DECLARE @elencoarticoli VARCHAR(MAX) --= 'CEB1TREORI6|CEB1LMS5|CEBB1MRCH2|CVINACBO1LEV2'\n" +
"--DROP TABLE #tmp\n" +
"\n" +
"SET NOCOUNT ON;\n" +
"DECLARE @tableart TABLE\n" +
" (\n" +
" cod_mart VARCHAR(15)\n" +
" );\n" +
"\n" +
"IF @elencoarticoli IS NOT NULL AND @elencoarticoli <> ''\n" +
" BEGIN\n" +
" INSERT INTO @tableart\n" +
" SELECT *\n" +
" FROM dbo.parsestringintoarray(@elencoarticoli, '|')\n" +
" END\n" +
"ELSE\n" +
" BEGIN\n" +
" INSERT INTO @tableart\n" +
" SELECT mtb_aart.cod_mart\n" +
" FROM mtb_aart\n" +
" INNER JOIN jtb_cicl ON mtb_aart.cod_mart = jtb_cicl.cod_mart\n" +
" WHERE mtb_aart.flag_stato = 'A'\n" +
" END;\n" +
"\n" +
"WITH imp_ordini AS (SELECT mtb_part.cod_mart,\n" +
" mtb_aart.unt_mis,\n" +
" CASE\n" +
" WHEN SUM(mtb_part.qta_imp_cli) > SUM(iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for) THEN\n" +
" SUM(mtb_part.qta_imp_cli - (iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for))\n" +
" ELSE 0 END AS qtadaprodurre,\n" +
" CASE\n" +
" WHEN SUM(mtb_part.qta_imp_cli) > SUM(iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for) THEN\n" +
" SUM(mtb_part.qta_imp_cli - (iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for)) /\n" +
" mtb_aart.qta_cnf\n" +
" ELSE 0 END AS numdaprodurre,\n" +
" SUM((iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for) - mtb_part.qta_imp_cli) AS qta_disp\n" +
" \n" +
" FROM mtb_part\n" +
" INNER JOIN jtb_cicl ON mtb_part.cod_mart = jtb_cicl.cod_prod\n" +
" INNER JOIN mtb_aart ON mtb_part.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN @tableart a ON mtb_aart.cod_mart = a.cod_mart\n" +
" WHERE mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_part.cod_mart, mtb_aart.unt_mis, mtb_aart.qta_cnf\n" +
" HAVING SUM(iif(mtb_part.qta_esistente<0,0,mtb_part.qta_esistente) + mtb_part.qta_ord_for) <> SUM(mtb_part.qta_imp_cli) )\n" +
" \n" +
" \n" +
" \n" +
" , imp_contratti AS ( SELECT c.cod_mart,\n" +
" ISNULL(SUM((qta_vend_contratto - qta_ord - qta_doc) /\n" +
" CASE WHEN c.rap_conv = 0 THEN 1 ELSE c.rap_conv END), 0) AS qtacontratto\n" +
" FROM vvw_contratti_vendita c\n" +
" INNER JOIN @tableart a ON c.cod_mart = a.cod_mart\n" +
" WHERE c.data_fine >= CAST(GETDATE() AS DATE)\n" +
" GROUP BY c.cod_mart\n" +
" HAVING ISNULL(SUM(qta_residua), 0) > 0)\n" +
" , imp_budget AS (SELECT b.cod_mart,\n" +
" SUM(qta_saldo) AS qta_bdg\n" +
" FROM ovw_budget_ordv b\n" +
" INNER JOIN @tableart a ON b.cod_mart = a.cod_mart\n" +
" WHERE CAST(GETDATE() AS DATE) BETWEEN b.data_iniz AND b.data_fine\n" +
" AND qta_saldo <> 0\n" +
" GROUP BY b.cod_mart)\n" +
" , tmp_impegni\n" +
" AS (SELECT ISNULL(ISNULL(imp_ordini.cod_mart, imp_contratti.cod_mart), imp_budget.cod_mart) AS cod_mart,\n" +
" SUM(ISNULL(imp_ordini.qtadaprodurre, 0)) AS qtadaprodurre,\n" +
" SUM(ISNULL(imp_ordini.numdaprodurre, 0)) AS numdaprodurre,\n" +
" SUM(ISNULL(imp_contratti.qtacontratto,0)) AS qtacontratto ,\n" +
" SUM(ISNULL(imp_budget.qta_bdg, 0)) AS qtabudget\n" +
" \n" +
" FROM imp_ordini\n" +
" FULL OUTER JOIN imp_contratti ON imp_ordini.cod_mart = imp_contratti.cod_mart\n" +
" FULL OUTER JOIN imp_budget ON imp_ordini.cod_mart = imp_budget.cod_mart\n" +
" \n" +
" GROUP BY ISNULL(ISNULL(imp_ordini.cod_mart, imp_contratti.cod_mart), imp_budget.cod_mart)\n" +
" HAVING SUM(ISNULL(imp_ordini.qtadaprodurre, 0)) <> 0\n" +
" OR SUM(ISNULL(imp_contratti.qtacontratto,0)) <> 0\n" +
" OR SUM(ISNULL(imp_budget.qta_bdg, 0)) <> 0)\n" +
"\n" +
"SELECT materiali.cod_mart,\n" +
" materiali.cod_prod,\n" +
" jtb_fasi.cod_mdep_lav AS cod_mdep,\n" +
" SUM(qtadaprodurre * (materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod)) AS impegnatoprox,\n" +
" SUM(qtacontratto * (materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod)) AS impproxcontratto,\n" +
" SUM(qtabudget * (materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod)) AS impproxbudget,\n" +
" /*\n" +
" max(case when ord.gestione = 'L' THEN max_data_cons else null end ) as data_imp_prox,\n" +
" max(case when ord.gestione = 'A' THEN max_data_cons else null end ) as data_imp_prox_contr\n" +
" */\n" +
" IsNull(max(ORD.data_imp_prox), convert(date,GetDate())) as data_imp_prox,\n" +
" IsNull(max(ORD.data_imp_prox_contr), convert(date,GetDate())) as data_imp_prox_contr\n" +
"INTO #tmp\n" +
"FROM tmp_impegni\n" +
" INNER JOIN\n" +
" (\n" +
" SELECT cod_mart, descrizione_estesa, unt_mis_prod AS unt_doc, rap_conv_prod AS rap_conv, qta_prod, cod_prod\n" +
" FROM [dbo].getmaterialidistinta(NULL, 1)\n" +
" WHERE cod_parent IS NOT NULL) materiali ON materiali.cod_prod = tmp_impegni.cod_mart\n" +
" INNER JOIN jtb_cicl ON materiali.cod_prod = jtb_cicl.cod_prod\n" +
" INNER JOIN jtb_fasi ON jtb_cicl.cod_jfas = jtb_fasi.cod_jfas \n" +
" LEFT OUTER JOIN (\n" +
" /* Modifcata da Massimo 10/07/24 la vecchia query creva quantità doppie in presenza di ordini L e A\n" +
" select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as max_data_cons\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione <> 'V' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" group by cod_mart, dtb_ordt.gestione\n" +
" */\n" +
" Select isNull(ODL.cod_mart,ODA.cod_mart) as cod_mart, ODL.data_imp_prox, ODA.data_imp_prox_contr\n" +
" from \n" +
" (select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as data_imp_prox\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione = 'L' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordt.flag_evaso_prod = 'I' and\n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" group by cod_mart, dtb_ordt.gestione\n" +
" )ODL full outer join\n" +
" (\n" +
" select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as data_imp_prox_contr\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione = 'A' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" \n" +
" group by cod_mart, dtb_ordt.gestione)\n" +
" ODA on ODA.cod_mart = ODL.cod_mart\n" +
" ) ORD ON materiali.cod_mart = ORD.cod_mart\n" +
"GROUP BY materiali.cod_prod,\n" +
" materiali.cod_mart,\n" +
" jtb_fasi.cod_mdep_lav\n" +
" \n" +
"SELECT cod_mart,\n" +
" cod_mdep,\n" +
" SUM(impegnatoprox) AS impegnatoprox,\n" +
" SUM(impproxcontratto) AS impproxcontratto,\n" +
" SUM(impproxbudget) AS impproxbudget,\n" +
" case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end data_imp_prox,\n" +
" case when data_imp_prox_contr < case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end \n" +
" then case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end \n" +
" else data_imp_prox_contr end as data_imp_prox_contr\n" +
" --case when data_imp_prox_contr is null then isNull(data_imp_prox,convert(date,GetDate())) else data_imp_prox_contr end as data_imp_prox_contr\n" +
" --IIF( data_imp_prox is null or data_imp_prox < Cast(getdate() as date), Cast(getdate() as date), data_imp_prox) as data_imp_prox,\n" +
" --IIF( data_imp_prox_contr is null or isNull(data_imp_prox_contr,data_imp_prox) < Cast(getdate() as date), Cast(getdate() as date), data_imp_prox_contr) as data_imp_prox_contr \n" +
"INTO #tmpsum\n" +
"FROM #tmp\n" +
"WHERE cod_mdep IS NOT NULL\n" +
"GROUP BY cod_mart, cod_mdep,\n" +
" data_imp_prox,\n" +
" data_imp_prox_contr\n" +
"\n" +
"INSERT INTO mtb_part (cod_mart, cod_mdep, scorta_min, qta_esistente, qta_imp_cli, qta_imp_lav, qta_ord_for)\n" +
"SELECT cod_mart, cod_mdep, 0, 0, 0, 0, 0\n" +
"FROM #tmpsum t\n" +
"WHERE NOT EXISTS(SELECT * FROM mtb_part WHERE mtb_part.cod_mart = t.cod_mart AND mtb_part.cod_mdep = t.cod_mdep)\n" +
"\n" +
"IF @elencoarticoli IS NULL OR @elencoarticoli = ''\n" +
" UPDATE mtb_part SET qta_imp_prox = 0, qta_imp_prox_contr = 0, qta_imp_prox_bdg = 0, data_imp_prox = null, data_imp_prox_contr = null\n" +
"ELSE\n" +
" UPDATE mtb_part\n" +
" SET qta_imp_prox = 0,\n" +
" qta_imp_prox_contr = 0,\n" +
" qta_imp_prox_bdg = 0,\n" +
" data_imp_prox = null, \n" +
" data_imp_prox_contr = null \n" +
" WHERE cod_mart IN (SELECT cod_mart FROM #tmpsum)\n" +
"\n" +
"UPDATE mtb_part\n" +
"SET qta_imp_prox = q.impegnatoprox,\n" +
" qta_imp_prox_contr = q.impproxcontratto,\n" +
" qta_imp_prox_bdg = q.impproxbudget,\n" +
" data_imp_prox = DateAdd(day, 1, q.data_imp_prox), \n" +
" data_imp_prox_contr = DateAdd(day, 1, q.data_imp_prox_contr )\n" +
"FROM mtb_part\n" +
" INNER JOIN #tmpsum q ON mtb_part.cod_mdep = q.cod_mdep AND mtb_part.cod_mart = q.cod_mart\n" +
"\n" +
"IF EXISTS(SELECT *\n" +
" FROM #tmp\n" +
" WHERE cod_mdep IS NULL)\n" +
" BEGIN\n" +
"\n" +
"\n" +
" DECLARE @message VARCHAR(MAX), @email VARCHAR(MAX)\n" +
"\n" +
" SELECT @email = e_mail FROM stb_email WHERE flag_default = 'S';\n" +
"\n" +
" SET @message = 'Verificare i seguenti articoli: la fase non ha il deposito agganciato.' + CHAR(10) + CHAR(13)\n" +
" SELECT @message = @message +\n" +
" STUFF((SELECT ',' + cod_prod\n" +
" FROM #tmp\n" +
" WHERE cod_mdep IS NULL\n" +
" FOR XML PATH('')), 1, 1, '')\n" +
"\n" +
" EXECUTE [dbo].[sp_sendEmail] @email, 'helpdesk@integry.it', 'Errore Impegni Prossimi', @message\n" +
"\n" +
" END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251125113907 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isCustomer(IntegryCustomer.Carelli)) {
updateSetupValue("W_DDOCU_ORD_RC", "SITUAZONE_CLIENTE", "SHOW_DIALOG", "N",
"Attiva Situazione cliente", false, "SI_NO", false, false, false,
false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,42 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251126113917 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Sardinya)) {
createSetup("EXPORT_DOCUMENTI DI VENDITA", "MD", "ATTIVO", "N",
"Inserire S/N per attivare/disattivare il tipo di importazione", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_DOCUMENTI DI VENDITA", "MD", "EMAIL_FOR_LOG", null,
"Inserire il file l'indirizzo email per inviare il log dell'importazione", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_DOCUMENTI DI VENDITA", "MD", "GG_CANC_FILE", null,
"Giorni per la cancellazione dei file dalla cartella di appoggio", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_DOCUMENTI DI VENDITA", "MD", "IMPORT_REST", "S",
"Inserire S/N per attivare/disattivare il salvataggio con i servizi REST", false, null, false, false,
false, false, false, null, false, null);
createSetup("EXPORT_DOCUMENTI DI VENDITA", "MD", "PATH_FILE", null,
"Directory dove vengono salvati i file temporanei, se non è configurata i file saranno salvati in c:\\mlSetupWS\\TEMP_EXPORT", false, null, false, false,
false, false, false, null, false, null);
}
updateSetupValue("EXPORT_DOCUMENTI DI VENDITA", "MD", "ATTIVO", "S",
"Inserire S/N per attivare/disattivare il tipo di importazione", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,42 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251126115627 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Carelli_Winact))
return;
boolean existIndex = existIndex("wtb_depo", "ux_wtb_depo_depo_default_utente");
if(existIndex)
dropIndex("wtb_depo", "ux_wtb_depo_depo_default_utente");
executeStatement("ALTER TABLE dbo.wtb_depo\n" +
" ALTER COLUMN user_name VARCHAR(40) NOT NULL",
"ALTER TABLE dbo.wtb_depo\n" +
" ALTER COLUMN cod_mdep VARCHAR(5) NOT NULL",
"ALTER TABLE dbo.wtb_depo\n" +
" ADD CONSTRAINT pk_wtb_depo\n" +
" PRIMARY KEY (cod_mdep, user_name)");
if(existIndex)
executeStatement("CREATE unique index ux_wtb_depo_depo_default_utente\n" +
" on dbo.wtb_depo (user_name)\n" +
" where [default_depo] = 1");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251126191506 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String value = executeQueryOnlyFirstRowFirstColumn("SELECT value FROM stb_gest_setup WHERE gest_name = 'PICKING' AND section = 'SETUP' AND key_section = 'ASS_SERIE_ORD_A_COLLO'");
if (value == null || value.isEmpty())
updateSetupValue("PICKING", "SETUP", "ASS_SERIE_ORD_A_COLLO", "N");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,306 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251127104634 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Biolevante)) return;
if (isDMS())
return;
createOrUpdateFunction("f_pp_consuntivo_prod_tracc", "CREATE function [dbo].[f_pp_consuntivo_prod_tracc] (@as_codProdParent varchar(15), @as_partitaMagParent varchar(20), @ac_qtaProdParent numeric(20,5), @as_codProd varchar(15), @as_partitaMag varchar(20), @ac_qtaProd numeric(20, 5), @ai_livello integer, @as_item_id varchar(255), @ai_idRiga integer) \n" +
"RETURNS @dettCosti TABLE(livello integer, \n" +
" item_id varchar(255),\n" +
" cod_prod_parent varchar(15),\n" +
" partita_mag_parent varchar(20), \n" +
" qta_prod_parent numeric(20,5),\n" +
" cod_prod varchar(15),\n" +
" partita_mag varchar(20), \n" +
" qta_prod numeric(20,5),\n" +
" gruppo_conto varchar(40), \n" +
" conto varchar(40), \n" +
" descrizione_conto varchar(255), \n" +
" dettaglio_conto varchar(40),\n" +
" unt_mis varchar(5), \n" +
" qta_consumata numeric(20, 5)) AS\n" +
"Begin\n" +
" DECLARE \n" +
" @lc_qtaProd numeric(20,5), \n" +
" @ls_gruppoConto varchar(40), \n" +
" @ls_codMart varchar(15), \n" +
" @ls_partitaMag varchar(20), \n" +
" @ls_descrizione varchar(255), \n" +
" @ls_untMis varchar(5), \n" +
" @lc_qtaMP numeric(20,5), \n" +
" @li_existDist integer, \n" +
" @lc_rapporto numeric(20, 5),\n" +
" @lc_qtaProdScaricata numeric(20,5),\n" +
" @li_livello integer, \n" +
" @ls_itemID varchar(255),\n" +
" @li_idRiga integer,\n" +
" @ls_codMiscela varchar(15),\n" +
" @ls_posizione varchar(20),\n" +
" @ls_posizione_da varchar(20),\n" +
" @ls_posizione_a varchar(20),\n" +
" @li_countScarichiLotto integer\n" +
"\n" +
" SELECT @ls_codMiscela = cod_mart FROM olvw_miscele_olio\n" +
"\n" +
" if @ai_idRiga is null\n" +
" begin\n" +
" SELECT @ai_livello = 1\n" +
" SELECT @as_item_id = '00001';\n" +
" end ;\n" +
" IF @as_item_id = '' \n" +
" begin\n" +
" Select @ls_posizione = mtb_depo_posizioni.posizione from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @as_codProdParent and partita_mag = @as_partitaMagParent and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" If @ls_posizione is not null Select @as_item_id = 'SILOS' --Serve ad identificare le miscele di olio\n" +
" end\n" +
"\n" +
" /* Acquisizione quantita totale prodotta per prodotto-partita */\n" +
" Select @lc_qtaProd = ISNULL(sum(dtb_docr.qta_doc * dtb_docr.rap_conv * dtb_tipi.segno_qta_car), 0)\n" +
" from dtb_docr, \n" +
" dtb_tipi, \n" +
" mtb_aart, \n" +
" mtb_grup\n" +
" where dtb_docr.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" mtb_aart.cod_mgrp = mtb_Grup.cod_mgrp and\n" +
" dtb_docr.cod_mart = @as_codProd and\n" +
" dtb_docr.partita_mag = @as_partitaMag and\n" +
" dtb_tipi.gestione = 'L' and\n" +
" dtb_tipi.tipo_emissione = 'DIRETTA' and\n" +
" dtb_tipi.segno_qta_car <> 0\n" +
"\n" +
" /* Calcolo del rapporto della qta passata come parametro e di quella totale*/\n" +
" if @ac_qtaProd is not null\n" +
" if @lc_qtaProd = 0 select @lc_rapporto = 0 else select @lc_rapporto = @ac_qtaProd / @lc_qtaProd\n" +
" else\n" +
" begin \n" +
" select @lc_rapporto = 1\n" +
" select @ac_qtaProdParent = @lc_qtaProd\n" +
" end\n" +
" \n" +
" /* Acquisizione totale quantita' prodotta per prododo-partita_mag dagli scarichi\n" +
" E' necessario prendere la quantita dalla testata degli scarichi perche' ci \n" +
" potrebbero essere delle perdite rispetto alla quantita' caricata.\n" +
" N.B. al momento questa variabile viene acquisita solo per controllo in fase di debug\n" +
" */\n" +
" Select @lc_qtaProdScaricata = sum(dtb_doct.qta_prod*dtb_doct.rap_conv_prod * @lc_rapporto)\n" +
" From dtb_doct, \n" +
" dtb_tipi\n" +
" Where dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" \n" +
"\n" +
" /* Acquisizione scarichi per prodotto-partita_mag */\n" +
" select @li_idRiga = 0;\n" +
" IF @as_codProd = @ls_codMiscela\n" +
" begin\n" +
" Select @ai_livello = @ai_livello+1\n" +
" end\n" +
" Declare csr_scarichi Cursor LOCAL SCROLL FOR\n" +
" Select PP_gruppiCostiMP.GruppoConto,\n" +
" dtb_docr.cod_mart, \n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.descrizione_estesa as descrizione,\n" +
" mtb_aart.unt_mis,\n" +
" sum(dtb_docr.qta_doc*dtb_docr.rap_conv*dtb_tipi.segno_qta_scar*@lc_rapporto) as Qta_mp\n" +
" From dtb_doct, \n" +
" dtb_docr, \n" +
" dtb_tipi, \n" +
" mtb_aart, \n" +
" mtb_grup, \n" +
" PP_gruppiCostiMP\n" +
" Where dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc and\n" +
" dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" mtb_aart.cod_mgrp = mtb_grup.cod_mgrp and\n" +
" dtb_docr.cod_mart = PP_gruppiCostiMP.cod_mart and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" and NOT (dtb_docr.cod_mart = @as_codProd and ISNULL(dtb_docr.partita_mag, '') = ISNULL(@as_partitaMag, ''))\n" +
" group by PP_gruppiCostiMP.GruppoConto,\n" +
" dtb_docr.cod_mart, \n" +
" dtb_docr.partita_mag,\n" +
" dtb_docr.descrizione_estesa,\n" +
" mtb_aart.unt_mis\n" +
" union all\n" +
" \n" +
" Select PP_gruppiCostiMP.GruppoConto,\n" +
" car.cod_mart, \n" +
" car.partita_mag,\n" +
" car.descrizione_estesa as descrizione,\n" +
" mtb_aart.unt_mis,\n" +
" sum(car.qta_doc*car.rap_conv*dtb_tipi.segno_qta_scar*@lc_rapporto) as Qta_mp \n" +
" from dtb_doct inner join dtb_docr on dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc \n" +
" inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip \n" +
" inner join dtb_docr car on dtb_doct.activity_id = car.activity_id_row \n" +
" inner join dtb_tipi tipo_car on car.cod_dtip = tipo_car.cod_dtip\n" +
" inner join olvw_caratteristiche on car.cod_mart = olvw_caratteristiche.cod_mart\n" +
" inner join PP_gruppiCostiMP on car.cod_mart = PP_gruppiCostiMP.cod_mart\n" +
" inner join mtb_aart on car.cod_mart = mtb_aart.cod_mart \n" +
" inner join mtb_grup on mtb_aart.cod_mgrp = mtb_grup.cod_mgrp \n" +
" where tipo_car.gestione = 'L' and \n" +
" tipo_car.segno_qta_car - tipo_car.segno_qta_scar < 0 and \n" +
" olvw_caratteristiche.Confezionato = 'S' and \n" +
" dtb_tipi.gestione = 'L' and \n" +
" dtb_tipi.segno_qta_scar = 1 and\n" +
" dtb_doct.cod_prod = @as_codProd and\n" +
" ISNULL(dtb_doct.partita_mag, '') = ISNULL(@as_partitaMag, '')\n" +
" and NOT (dtb_docr.cod_mart = @as_codProd and ISNULL(dtb_docr.partita_mag, '') = ISNULL(@as_partitaMag, '')) \n" +
" group by PP_gruppiCostiMP.GruppoConto,\n" +
" car.cod_mart, \n" +
" car.partita_mag,\n" +
" car.descrizione_estesa,\n" +
" mtb_aart.unt_mis\n" +
" Order by PP_gruppiCostiMP.GruppoConto desc \n" +
" \n" +
" OPEN csr_scarichi\n" +
" FETCH NEXT FROM csr_scarichi INTO @ls_gruppoConto, @ls_codMart, @ls_partitaMag, @ls_descrizione, @ls_untMis, @lc_qtaMP\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" begin\n" +
" IF ABS(@lc_qtaMP) > 0.01\n" +
" Begin\n" +
" select @li_idRiga = @li_idRiga + 1;\n" +
" SELECT @ls_itemID = @as_item_id + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @li_idRiga))) + CONVERT(varchar(15), @li_idRiga); \n" +
"\n" +
" /* verifica esistenza scarico, Indica che siamo in presenza di un semilavorato/lotto */\n" +
" select @li_existDist = count(*)\n" +
" from dtb_doct, dtb_tipi\n" +
" where dtb_doct.cod_prod = @ls_codMart and partita_mag = @ls_partitaMag and \n" +
" dtb_doct.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.segno_qta_scar = 1 and \n" +
" dtb_doct.gestione = 'L'\n" +
" \n" +
" \n" +
" /* Materia prima */\n" +
" if @li_existDist = 0 or @@NESTLEVEL >= 30\n" +
" begin\n" +
" insert into @dettCosti \n" +
" select @ai_livello,\n" +
" @ls_itemID,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent, \n" +
" @ac_qtaProdParent, \n" +
" @as_codProd, \n" +
" @as_partitaMag, \n" +
" @lc_qtaProdScaricata, \n" +
" @ls_gruppoConto, \n" +
" @ls_codMart, \n" +
" @ls_descrizione, \n" +
" @ls_partitaMag, \n" +
" @ls_untMis, \n" +
" @lc_qtaMP\n" +
" end\n" +
" else\n" +
" Begin\n" +
" /* Semilavorato */\n" +
" \n" +
" Select @ls_posizione_a = mtb_depo_posizioni.posizione \n" +
" from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @as_codProd and partita_mag = @as_partitaMag and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" Select @ls_posizione_da = mtb_depo_posizioni.posizione \n" +
" from mtb_partita_mag, mtb_depo_posizioni \n" +
" where mtb_depo_posizioni.posizione = mtb_partita_mag.posizione and\n" +
" mtb_partita_mag.cod_mart = @ls_codMart and partita_mag = @ls_partitaMag and\n" +
" mtb_depo_posizioni.flag_silos_liquidi = 1;\n" +
" \n" +
" --24/11/25 (Massimo) Segue query per verificare se siamo su un lotto di olio che è stato scaricato e non azzerato. In tal caso la ricorsione non deve avvenire\n" +
" select @li_countScarichiLotto = count(*)\n" +
" from dtb_docr inner join dtb_tipi on dtb_docr.cod_dtip = dtb_tipi.cod_dtip \n" +
" where dtb_tipi.segno_qta_scar = 1\n" +
" and dtb_docr.cod_mart = @ls_codMart and dtb_docr.partita_mag = @ls_partitaMag\n" +
" and @ls_posizione_da = @ls_posizione_a\n" +
"\n" +
" If @ls_posizione_da is not null and \n" +
" (ISNULL(@ls_posizione_da,'') <> ISNULL(@ls_posizione_a,00) or \n" +
" @ls_posizione_da is null or @ls_posizione_a is null or \n" +
" (@ai_livello <1 and @as_codProd = @ls_codMiscela) or \n" +
" (ISNULL(@ls_posizione_da,'') = ISNULL(@ls_posizione_a,00) and @as_codProd= @ls_codMiscela) or\n" +
" IsNull(@li_countScarichiLotto,1) > 1)\n" +
" --Questa insert serve per trattare l'olio che proviene da altro serbatoio come una materia prima a partire dal 2° livello di ricorsione\n" +
" --dal 24/11/25 vale anche per olio proveniente dallo stesso serbatoio ma già scaricato parzialmente prima del carico del lotto parent\n" +
" Begin\n" +
" insert into @dettCosti \n" +
" select @ai_livello,\n" +
" @ls_itemID,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent, \n" +
" @ac_qtaProdParent, \n" +
" @as_codProd, \n" +
" @as_partitaMag, \n" +
" @lc_qtaProdScaricata, \n" +
" @ls_gruppoConto, \n" +
" @ls_codMart, \n" +
" @ls_descrizione, \n" +
" @ls_partitaMag, \n" +
" @ls_untMis, \n" +
" @lc_qtaMP;\n" +
" End\n" +
" \n" +
" /*Ricorsione su semilavorato-partita_mag*/\n" +
" If IsNull(@li_countScarichiLotto,1) = 1 and --Aggiunta 24/11/25 da Massimo per escludere ricorsione su olio proveniente dallo stesso serbatoio ma già scaricato parzialmente prima del carico del lotto parent\n" +
" ISNULL(@ls_posizione_da,'') = ISNULL(@ls_posizione_a,00) and @as_codProd <> @ls_codMiscela or \n" +
" @ls_posizione_da is null or @ls_posizione_a is null or \n" +
" (@ai_livello <1 and @as_codProd = @ls_codMiscela)\n" +
" --La ricorsione non avviene sugli olii provenienti da altro serbatoio e neanche nel caso di Miscele fittizie create nello stesso serbatoio dell'olio di provenienza in assenza di polmone\n" +
" insert into @dettCosti \n" +
" select costi.livello, \n" +
" costi.item_id,\n" +
" @as_codProdParent, \n" +
" @as_partitaMagParent,\n" +
" @ac_qtaProdParent,\n" +
" costi.cod_prod, \n" +
" costi.partita_mag, \n" +
" costi.qta_prod,\n" +
" costi.gruppo_conto, \n" +
" costi.conto, \n" +
" costi.descrizione_conto, \n" +
" costi.dettaglio_conto,\n" +
" costi.unt_mis, \n" +
" costi.qta_consumata \n" +
" from dbo.f_pp_consuntivo_prod_tracc(@as_codProdParent, @as_partitaMagParent, @ac_qtaProdParent, @ls_codMart, @ls_partitaMag, @lc_qtaMP, @ai_livello, @ls_itemID, @li_idRiga) costi\n" +
" \n" +
" \n" +
" end\n" +
" end\n" +
" FETCH NEXT FROM csr_scarichi INTO @ls_gruppoConto, @ls_codMart, @ls_partitaMag, @ls_descrizione, @ls_untMis, @lc_qtaMP\n" +
" end\n" +
" close csr_scarichi\n" +
" deallocate csr_scarichi\n" +
" return\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,93 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import it.integry.ems_model.utility.dto.PkTableDTO;
import java.util.Arrays;
public class Migration_20251127114735 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS())
return;
executeStatement(
"exec DropForeignKey 'mtb_aart', 'mtb_marchio_linea'",
"exec DropForeignKey 'mtb_aart', 'mtb_marchio_slinea'",
"exec DropForeignKey 'mtb_aart', 'mtb_marchio_sslinea'",
"exec DropForeignKey 'mtb_marchio_sslinea', 'mtb_marchio_slinea'",
"exec DropForeignKey 'mtb_marchio_slinea', 'mtb_marchio_linea'",
"exec DropForeignKey 'mtb_marchio_linea', 'mtb_aart_marchio'",
"exec DropPrimaryKey 'mtb_marchio_linea'",
"exec DropPrimaryKey 'mtb_marchio_slinea'",
"exec DropPrimaryKey 'mtb_marchio_sslinea'",
"alter table mtb_marchio_linea drop column id_marchio",
"alter table mtb_marchio_slinea drop column cod_linea",
"alter table mtb_marchio_sslinea drop column cod_slinea",
"exec sp_rename 'mtb_marchio_linea', 'mtb_aart_linea'",
"exec sp_rename 'mtb_marchio_slinea', 'mtb_aart_slinea'",
"exec sp_rename 'mtb_marchio_sslinea', 'mtb_aart_sslinea'"
);
PkTableDTO pkTableDTO = new PkTableDTO()
.setTableName("mtb_aart_linea")
.setColumns(Arrays.asList(
new PkTableDTO.Column("cod_linea")
));
createPrimaryKey(pkTableDTO);
pkTableDTO = new PkTableDTO()
.setTableName("mtb_aart_slinea")
.setColumns(Arrays.asList(
new PkTableDTO.Column("cod_slinea")
));
createPrimaryKey(pkTableDTO);
pkTableDTO = new PkTableDTO()
.setTableName("mtb_aart_sslinea")
.setColumns(Arrays.asList(
new PkTableDTO.Column("cod_sslinea")
));
createPrimaryKey(pkTableDTO);
executeStatement(
"ALTER TABLE mtb_aart ADD CONSTRAINT fk_mtb_aart_mtb_aart_linea "
+ "FOREIGN KEY (cod_linea) REFERENCES mtb_aart_linea(cod_linea);",
"ALTER TABLE mtb_aart ADD CONSTRAINT fk_mtb_aart_mtb_aart_slinea "
+ "FOREIGN KEY (cod_slinea) REFERENCES mtb_aart_slinea(cod_slinea);",
"ALTER TABLE mtb_aart ADD CONSTRAINT fk_mtb_aart_mtb_aart_sslinea "
+ "FOREIGN KEY (cod_sslinea) REFERENCES mtb_aart_sslinea(cod_sslinea);");
dropIndex("mtb_aart_marchio", "marchio");
executeStatement(
"insert into mtb_aart_marchio\n" +
"select distinct marchio\n" +
"from mtb_aart\n" +
"where marchio is not null\n" +
"except\n" +
"select marchio\n" +
"from mtb_aart_marchio",
"exec DropForeignKey 'mtb_aart', 'mtb_aart_marchio' ",
"alter table mtb_aart drop column id_marchio ",
"exec DropPrimaryKey 'mtb_aart_marchio' ",
"alter table mtb_aart_marchio drop column id ",
"alter table mtb_aart_marchio add constraint pk_mtb_aart_marchio primary key (marchio) ",
"ALTER TABLE mtb_aart ADD CONSTRAINT fk_mtb_aart_mtb_aart_marchio FOREIGN KEY (marchio) REFERENCES mtb_aart_marchio(marchio) ");
}
@Override
public void down() throws Exception {
}
}

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