Compare commits

..

377 Commits

Author SHA1 Message Date
a898ef24eb Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java
2025-10-10 19:00:43 +02:00
a69466f5db Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-10-10 15:51:37 +02:00
cdcb1eb0b6 [WMS - Rettifica Collo]
- fix rettifica positiva su nuovo collo: il salvataggio avviene due volte (sia su nuovo collo come richieste che sul collo originale)
2025-10-10 15:51:31 +02:00
bd706155f6 Aggiornate migration Mvw nuova
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-10-10 10:33:34 +02:00
884c051b18 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java
2025-10-09 10:54:14 +02:00
03e6db20b5 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-10-06 10:05:40 +02:00
b2d2bd494a [ROSSOGARGANO - MES]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- fix in calcolo progressivo UL su UDC create alla mezzanotte
- aggiunto calcolo dataProd in base al lotto
2025-10-02 13:02:39 +02:00
58d900cc6b Merge branch 'master' into feature/RefactoringGestioneColli 2025-10-02 12:20:09 +02:00
5acf3023b7 [ROSSOGARGANO]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- aggiunti riferimenti ordine in rettifica giacenze colli L+
2025-10-01 17:20:50 +02:00
9d9ce1f3ac Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-10-01 16:13:43 +02:00
f9ab71462f Fix su clean directory
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-10-01 09:59:38 +02:00
f014e4b959 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-30 16:36:30 +02:00
bd2f7126a9 [ROSSOGARGANO - ACCETTAZIONE]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- tolti commit automatici alla closeUDC di lavorazione per evitare problemi alla rollback di procedure più ampie
2025-09-30 16:06:14 +02:00
0782d0206c Fix su query deposito utente errata
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit eddd9ff8e7)
2025-09-29 16:54:09 +02:00
3bc9e6629b Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-29 09:57:05 +02:00
f10e90bc9b [BIOLEVANTE - SERBATOI]
- aggiunta eccezione in funzione isGestisciColli se il tipo deposito non è specificato
2025-09-29 09:55:32 +02:00
71cb4d0d88 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
# Conflicts:
#	build/Jenkinsfile.groovy
2025-09-25 16:08:39 +02:00
0f42d5a2ba Aggiunto campo "backupAfterImport" utilizzato dalle importazioni da SFTP
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-24 17:36:52 +02:00
ebf9af7b8b Fix build command
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-24 11:48:19 +02:00
9476e99476 Fix build command 2025-09-24 11:48:17 +02:00
a338077542 Fix build command 2025-09-24 11:48:16 +02:00
db9a613fc9 Fix build command 2025-09-24 11:48:14 +02:00
0d4882b818 Prima build con podman 2025-09-24 11:48:12 +02:00
cbbc0739c6 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-24 11:20:02 +02:00
e12f00984d Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-24 11:18:42 +02:00
5dc20c4e3f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-24 11:18:11 +02:00
4a61a4b60c Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-23 17:25:31 +02:00
b82a3dd227 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250917111031.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/dto/HistoryVersamentoULDTO.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSMaterialiService.java
2025-09-22 09:51:01 +02:00
ca9843f71a [RG]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- aggiunta dataProd nella partita di SL generata al cambio giornata
2025-09-18 19:03:12 +02:00
41b95b9dcb Spostata voce menu tracciabilita pvm in magazzino
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 6177a4b3c4)
2025-09-18 11:35:14 +02:00
1d16e2cc13 [WMS] Aggiunto servizio di retrieve ultimi versamenti merce per vecchia gestione colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 7507ab834c)
2025-09-17 15:07:48 +02:00
2abf8b55ac Creato menu tracciabilita su pvm, setup per report ed update viste
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit a24e26b436)
2025-09-17 12:26:59 +02:00
82972a537e Aggiunti file in gitignore
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-16 16:26:07 +02:00
5d77838838 Creata regola personalizzata per la generazione dei barcodeUl di OlioLevante
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-16 15:58:57 +02:00
9006da1383 Fix check tipo documento trasferimenti interni in spostaUl
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-16 11:46:52 +02:00
026f89d031 Fix migration biolevante
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-16 10:24:12 +02:00
1dd6d8b3fa Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 16:03:48 +02:00
67c1a8fba5 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 15:56:36 +02:00
c4e8985642 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 15:47:24 +02:00
d048ea1f9c Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 12:56:40 +02:00
6f2d485de7 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 10:42:15 +02:00
9f46505136 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-15 10:41:51 +02:00
4d2fbf610d Rimosso BiolevantePeppe
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 10:37:32 +02:00
3ec8d6d0e1 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-15 09:24:48 +02:00
255de9a955 Fix su localDate in DocumentRules
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-08 12:01:29 +02:00
622c4c903c Merge branch 'master' into feature/RefactoringGestioneColli
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/datasource/DataSource.java
#	ems-core/src/main/java/it/integry/ems/rules/completing/DocumentRules.java
2025-09-08 11:59:49 +02:00
e51fa4fa6b Fix su aggiornamento qta documenti diretti di vendita (il collo si sganciava e non veniva più riagganciato)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-05 13:13:02 +02:00
febe8be89e Ulteriori fix su Datasource
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 94add3ecde)
2025-09-05 09:38:01 +02:00
3ad15c8457 Fix su connessioni del Connection Pool
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
(cherry picked from commit 1a76055a09)
2025-09-04 18:07:28 +02:00
3ae1d499c2 Fix profileDb ROSSOGARGANO_EXCHANGE
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-04 12:11:37 +02:00
b10c6e837c E' stato disabilitata la valorizzazione dei campi barcode_ul_in, posizione_in e cod_mdep_in nella creazione di una UDS di lavorazione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-04 10:30:58 +02:00
1d07f15169 Rimossi comandi aggiuntivi nel DataSource
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 9f76fcfc72)
2025-09-04 09:22:04 +02:00
18e69f0195 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-03 16:33:28 +02:00
3f4735f953 Impostato cod_anag_comp su riga collo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-03 12:42:17 +02:00
edcd6ecf6b Impostato cod_anag_comp su riga collo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-03 12:38:01 +02:00
b2ac734b5e Fix check certificato durante l'aggiornamento dei comuni
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-03 10:48:17 +02:00
481e8e35cc Fix su numero connessioni DataSource
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-02 09:50:39 +02:00
725b93be81 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-09-01 09:27:24 +02:00
7eac47b3b7 [rettifica colli]
- se la udc in rettifica ha subito già delle movimentazioni, è obbligatorio eseguire la rettifica in un nuovo movimento
2025-08-25 10:34:16 +02:00
8abb7c2842 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-25 09:53:58 +02:00
55e55bd64a Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-20 11:35:53 +02:00
7de563abf3 Aggiunto recupero del codMart da codArtFor per importazione sonoco
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-19 15:32:41 +02:00
12154ed089 [ROSSOGARGANO]
- corretto versamenti ribaltatori
- corretta gestione numeratore certficati pomodori
2025-08-19 14:44:49 +02:00
98e518e295 Gestite anomalie e corretta l'importazione colli di eviosys
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-19 10:43:16 +02:00
498ce2880e Corretta importazione colli vebad
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-18 17:58:09 +02:00
b828e5bfae Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/logistic/service/ColliEviosysImportService.java
2025-08-18 15:37:26 +02:00
637fdca7ed Migliorata gestione dei colli di trasferimento verso i depositi che non gestiscono i colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-14 17:23:27 +02:00
8778aecbeb Migliorata gestione dei colli di trasferimento verso i depositi che non gestiscono i colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-14 16:42:23 +02:00
724bc750cf Risolti problemi riguardo il trasferimento delle pedane
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-13 14:48:09 +02:00
4c78c0cf37 Modifica segno_qta_car e segno_qta_scar
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-13 12:00:02 +02:00
c8c476f98c Modifica segno_qta_car e segno_qta_scar
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-13 11:48:55 +02:00
0c3cf9095f Aggiunto campo num_etich in fase di insertUdcRow e gestito segno in creazione documenti diretti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-13 11:35:19 +02:00
f90688e969 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250807105039.java
#	ems-core/src/main/resources/rules/documenti.drl
2025-08-11 09:39:05 +02:00
c76417b917 Fix su utility WMS errata
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-08 17:39:38 +02:00
332b4fddd8 Creato servizio di createUdsWithRows
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-08 17:19:27 +02:00
fa2bca9c99 Fix su group by durante il riproporzionamento degli scarichi
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-08 12:56:23 +02:00
565cbc9f30 Aggiunto in retrive giacenza by articolo il parametro di ricerca tramite cod_jcom
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 18:43:00 +02:00
febd5d7e7f Aggiunta condizione tra parenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 18:40:56 +02:00
057d7961f2 Modifica export documenti consegnati
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 16:13:42 +02:00
8ead6d9fdb Gestito controllo data scadenza multipla in openStep MES
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 4656fbb61b)
2025-08-07 15:17:56 +02:00
08215fab9d Fix su registrazione datetime_row degli scarichi da collo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 13:21:09 +02:00
73aed3e9d6 In fase di ridistribuzione degli scarichi a produzione è stata aggiunta la sum delle righe di scarico (le righe di rientro che erano negative creavano scarichi errati)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 12:20:38 +02:00
1ae0ee3567 modifiche su utenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-07 11:57:24 +02:00
49f6664874 Fix cancellazione annotazioni in cq pomodori
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-06 12:46:09 +02:00
03fe0c7279 migliorato check delle UDS da trasferire durante la creazione di un documento diretto di vendita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-05 15:23:13 +02:00
49b4fca63c Fix su sql server connection in menu configurator
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 6f3d8a7ef5)
2025-08-05 12:27:06 +02:00
36c425941a Fix connection su DB Distributore
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 54804ec4d6)
2025-08-05 09:58:48 +02:00
5fa3dc538f Fix su connessioni del SyncManager
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit d266c8c9e1)
2025-08-04 19:11:36 +02:00
280474d038 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 17:29:05 +02:00
518263d955 Aggiunto servizio che aggiorna endpoint portale Web 2025-08-04 17:28:54 +02:00
0f298bcd05 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 17:28:12 +02:00
c8200f3690 riattivati trasferimenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 16:21:20 +02:00
08ff9e1940 SISTEMATA REGOLA
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 15:43:39 +02:00
165e81938c inibito traferimento
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 14:55:45 +02:00
c87404a4ee controllato deposito null
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 14:34:57 +02:00
92a9abf978 correzione su importazione docfinance
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 13:02:00 +02:00
71e99ed943 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	build/Jenkinsfile.groovy
#	build/create_build_tag.bat
2025-08-04 12:30:40 +02:00
b1c337a238 Aggiornato jenkinsfile per env.properties
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 12:14:26 +02:00
21fa20e94f Fix after merge
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-08-04 09:27:20 +02:00
bf1b78ccc0 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241213163759.java
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
2025-08-04 09:26:05 +02:00
5325f3124a Implementate annotazioni durante il trasferimento pedane
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-31 16:53:14 +02:00
fce976b2df Fix controllo SQLServerConnection in EntityBase
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-31 10:39:35 +02:00
8caa0c924b Rimosso SET NOCOUNT ON all'inizializzazione della connessione 2025-07-31 10:39:32 +02:00
4af7155db9 Cambiati alcuni datasource
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-31 09:47:00 +02:00
ab682181ce Fix controllo SQLServerConnection in EntityBase
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 1d0fed90ae)
2025-07-30 18:59:22 +02:00
d6cda98855 Fix su connection pool size
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-30 17:51:43 +02:00
38c1c80abb [GIANT REFACTORING] Ristrutturazione sulla connection pool. Adesso la pool è gestita dal DataSource di Apache DBCP2.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/migration/model/Migration_20241213163759.java
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
2025-07-30 17:49:08 +02:00
fed416de15 Fix Refactoring google maps api 2025-07-30 17:43:10 +02:00
d5bf6aef92 Fix Refactoring google maps api 2025-07-30 17:43:08 +02:00
5a0cfd160f Refactoring google maps api 2025-07-30 17:43:04 +02:00
bea182eea9 Fix import mancante in DocumentiDirettiService
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-29 16:47:36 +02:00
ce6a102f45 revisione calcolo totali per ordni web e documenti
(cherry picked from commit a7c3163d84)
2025-07-29 16:44:30 +02:00
9e1a600087 sistemato controllo per documenti imballo
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-29 15:34:33 +02:00
89a6a8c2f4 Creata setup per poter mostrare il pulsante configurazione permessi in pvm
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 76972b00a1)
2025-07-29 12:47:44 +02:00
9fca434612 Correzione get e set flag_stampa_docu_vend - controllo su modifica ed inserimento ultimi 7 gg
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-29 10:30:54 +02:00
d675ce0e82 Fix calcolo progressivo in caso di partita diversa da quella dell'ordine
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-29 09:23:16 +02:00
ef2f2a91b3 [ROSSOGARGANO ]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- aggiunto flag fornitore socio in tabella atb_tipi
- inserite setup report per pagina accettazione da campo
2025-07-28 13:28:58 +02:00
49ff0c839b Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
2025-07-28 09:43:35 +02:00
bd5eb9c535 Fix su rollback del salvataggio dei trasferimenti. Fix su check imballi senza cod_mart.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-25 15:55:37 +02:00
0851fe8915 Aggiunto parametro withTestataCollo in servizio di availableItems
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-24 11:55:12 +02:00
fa7e3a55ca Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-22 10:06:22 +02:00
52d34fa810 [ROSSOGARGNAO - ACCETTAZIONE]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- corretta seleziona ora inizio versamento
- corretto annullamento versamento
- corretto salvataggio cq pomodori
2025-07-21 16:03:44 +02:00
59624c8c17 [ROSSOGARGANO]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- corretta retrocompatibilità con gestione documenti vendita non aggiornata
2025-07-21 12:22:07 +02:00
cd53eca2e8 Aggiunto controllo su passaggio ordini
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-21 11:23:29 +02:00
a486b6102b Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/resources/menus/menu_config.json
2025-07-21 10:11:01 +02:00
becfdab1a1 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-17 17:28:51 +02:00
e6605c2feb [ROSSOGARGANO - Documenti]
- aggiunta distribuzione automatica su ordini di ul inserite in packing list
2025-07-17 17:28:46 +02:00
305c79a558 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-17 12:20:53 +02:00
edcc08c9da Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-16 19:30:29 +02:00
89d0f95834 Nella rettifica dei documenti diretti di vendita ora si possono cambiare le qta dei colli venduti e precedentemente trasferiti 2025-07-16 19:30:23 +02:00
112dc51ac7 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-16 19:05:38 +02:00
a93979c546 [ROSSOGARGANO - Accettazione]
- rimosso posizionamento pre-versamento sui ribaltatori
2025-07-16 19:05:32 +02:00
6b536b20c6 Completato delete UDS da un documento di vendita che ha dei colli trasferiti.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-16 17:46:29 +02:00
17c832745f Disabilitato completeEntity in utility di deleteUL
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-16 11:09:18 +02:00
fcb62e3689 [ROSSOGARGANO - trasferimenti]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- gestito inserimento codAnag in collo di scarico verso P.V. per
2025-07-16 10:39:00 +02:00
bc88453914 Aggiunto servizio di availableItems
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-16 09:34:32 +02:00
a85173bc45 Cambiata delete UL in riproporzionamento scarichi lavorazione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 19:32:27 +02:00
ed0c117bac Aggiornati LocalDate dataDoc in MtbColt. Cambiata whereCondColli in LoadColliService.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 19:21:44 +02:00
557159cf7f Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 18:41:34 +02:00
46dcdd7745 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-07-15 18:34:10 +02:00
c30c7ec369 create setup nella W_DCOLLI_RESO_DLG per impostare giorni e consegne 2025-07-15 18:26:00 +02:00
8e99c0898d modificato controllo su gruppo merceologico in versamento materiale (presi i tipi SL & PF dalla tabella dei gruppi invece che dalla setup)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 15:14:17 +02:00
b4ce3f8d27 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-15 14:15:12 +02:00
9549583c86 inserito deposito nel servizio resi 2025-07-15 14:15:03 +02:00
5b88fa632c Merge branch 'master' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-15 13:03:39 +02:00
64425c2c4a inserito deposito nel servizio resi
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-15 12:56:23 +02:00
e6d5df31dd Migliorie servizi resi
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 11:48:14 +02:00
f9be1f4463 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 11:13:21 +02:00
1cfc7558ac Migliorie servizi resi 2025-07-15 11:13:13 +02:00
140c443030 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 11:12:08 +02:00
0bfa110d6c Fix class naming di ArticoloPartitaCommessaDTO in ArticoloPartitaCommessaOrdineDTO
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-15 10:33:05 +02:00
374d143090 Aggiunto replace del \n\r nelle causali delle fatture elettroniche
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-15 10:28:24 +02:00
32dc0b4f4c Merge branch 'master' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-15 10:15:58 +02:00
75edd98223 Fix collisione classi ArticoloPartita
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-14 18:58:38 +02:00
d89ddb447c [ROSSOGARGANO - Accettazione]
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
- corretto completamento numero documento certificato per gestione numerazione proposta
2025-07-14 18:08:44 +02:00
a2b668ed96 Merge branch 'master' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-14 17:50:54 +02:00
d7aef97ae0 Aggiunto nuovo servizio di retrieve dati resi cliente
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-14 17:45:09 +02:00
4f6eed564e Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-14 12:43:18 +02:00
e3cf9aa115 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-14 12:14:52 +02:00
766e6a18cc Fix su logica di trasferimento pedane in spostaUl
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-14 11:51:32 +02:00
45c507cfcc Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-14 09:30:05 +02:00
ebaee14167 Migliorato servizio di salvataggio documenti diretti: iniziata implementazione per cancellazione trasferimenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-14 09:29:38 +02:00
0a56b9dd25 Migliorato servizio di salvataggio documenti diretti: iniziata implementazione per cancellazione trasferimenti
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-07-11 17:19:22 +02:00
51210cd8df [ROSSOGARGANO - Trasferimenti]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- gestito deposito dei colli di trasferimento in base al deposito del documento di arrivo
2025-07-11 16:04:15 +02:00
e80d8ee151 aggiunto flag_sezione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-11 15:26:28 +02:00
3b461350d5 sistemato calcolo totale peso nel documento
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-11 12:07:18 +02:00
5724dc53c9 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-11 10:02:09 +02:00
84ff15687e [WMS] Implementato servizio di stampa su Trasferimento Pedane
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-10 17:35:39 +02:00
422e09b072 Cambiata logica dei documenti diretti: quando deve esserci un trasferimento merce lo intercetta e crea un trasferimento ad-hoc.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-10 16:11:14 +02:00
3dd1cd60cb Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-07-08 19:54:44 +02:00
14cf0d60b5 Fix saveArticolo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-08 15:57:09 +02:00
7a0cbebdfb Importazione eviosys check codArtForn
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-08 12:27:50 +02:00
f5e208a973 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-07-08 10:36:00 +02:00
f4189b71e0 Piccolo refactoring ICONImportService
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-08 10:01:46 +02:00
0d8101ec05 In importazione bolle vebad e eviosys aggiunto controllo colli già esistenti senza documento associato
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-07 18:20:20 +02:00
7f42ee47ce Aggiunto tipo_mgrp in getArticoloFromEan128 e rinominati metodi createUDCFromArt
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-07 16:47:38 +02:00
0b1310646c Aggiunto servizio per creazione colli con righe già agganciate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-07 12:13:44 +02:00
ebde200a73 [Tosca - ordini V]
- corretta gestione anagrafiche vettori in importazione impegnato
2025-07-07 10:38:16 +02:00
502dc5e7a9 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
2025-07-07 09:39:50 +02:00
4fca7a604b Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 17:28:58 +02:00
2b781e795a [ROSSOGARGANO - MES]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- rimosso criterio di calcolo progressivo pedane in base alla linea
2025-07-03 13:26:48 +02:00
cbfa2482da [ROSSOGARGANO - MES]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- aggiunto criterio di calcolo progressivo pedane in base alla linea
2025-07-03 13:13:17 +02:00
ef9bbe6198 scadenze bloccate docfinance
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 12:36:51 +02:00
4e78712c2f Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 11:59:34 +02:00
bcb23e8a42 [ROSSOGARGANO - MES]
- corretta salience regole progressivoUL per dare priorità alle regole custom di RG
2025-07-03 11:59:30 +02:00
4e9d2615b1 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 11:32:01 +02:00
f8da37203c Rimosso valore N in bloccata nel tracciato docfinance
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 11:20:17 +02:00
29e67b3680 Risolto problema localDate 2025-07-03 11:19:20 +02:00
9a7508d05e rimossa eccezione in caso di suggerimento posizione ul che contiene più articoli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-03 11:05:47 +02:00
88da287d33 Aggiunte migration per carelli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-02 18:13:32 +02:00
b924e018ab [ROSSOGARGANO - MES]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- corretto criterio di check sui barcode versati in produzione togliendo il controllo sulla data scadenza del SL
2025-07-02 17:37:11 +02:00
b9f2ed0509 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-02 17:16:37 +02:00
cecf45cc8f Cambiato SpostaUlRequestDTO, ora accetta una lista di barcode ul.
Creati servizi per trasferimento pedane.
2025-07-02 17:16:31 +02:00
2f6c642ef0 sistemato controllo su diacod
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-02 17:01:01 +02:00
c38608d92b sistemato salvataggio imballaggi
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-01 15:19:03 +02:00
08b91b91ef Fix su return null in retrieveArtsInGiacenzaByArticolo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-01 15:00:25 +02:00
25d266b0f8 [ROSSOGARGANO]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- impostata correttamente la partitaMagProd in generazione partita post versamento semi lavorato
2025-07-01 13:14:35 +02:00
d9287659d2 sistemata regola
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-01 13:05:45 +02:00
9542465064 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-07-01 09:13:26 +02:00
4901067c3f Aggiornata vista mvw_sitart_udc_det_inventario con raggruppamenti per migliorare il datetime_posizionamento
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-30 16:46:58 +02:00
35727ef0af Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-30 16:45:42 +02:00
9aa60b6464 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-30 15:39:46 +02:00
c2d9ccf1b1 [ROSSOGARGANO]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- aggiunta gestione interfalde in trasferimenti
2025-06-30 10:33:39 +02:00
56764f5918 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-30 09:32:43 +02:00
c11ead2b49 [ROSSOGARGANO]
- nuovi servizi per la stampa di più report contemporanei
- migration per nuovi report controllo giacenze
2025-06-30 09:32:30 +02:00
219fd1989a Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/resources/menus/menu_config.json
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
2025-06-30 09:09:26 +02:00
78137519ec Aggiunto token Winclock
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
(cherry picked from commit a1b9d39ea4)
2025-06-27 12:36:15 +02:00
2010782da4 Aggiornato menu e fix su profilo di lancio MenuStaticCreator
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-27 10:48:51 +02:00
a9718b5fbe creata nuova voce menu per WMS Trasferimento Pedane 2025-06-27 10:29:13 +02:00
c995d2334f Creati servizi per gestire il suggerimento di posizione di una UL
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-26 18:28:51 +02:00
c0340b9863 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-26 11:09:22 +02:00
e8d8f7db1a Ripristinato maggio srl in ems_settings.json
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-25 16:51:45 +02:00
e22c467a15 Aggiunto GiovMaggio nelle migraton della Mvw
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-25 11:26:02 +02:00
7ba89d3cfa Rimosso Maggio Peppe
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-25 11:18:46 +02:00
fbc13719db [ROSSOGARGANO - MES]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- corretta duplicazione ordini in versamento SL
2025-06-23 12:25:59 +02:00
5cbc6cce2e Fix su connection utilizzato in OrderRules.setRifOrd()
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-23 11:27:38 +02:00
c3871083b1 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-23 09:22:17 +02:00
33c85e3a18 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	build/Jenkinsfile.groovy
#	ems-core/pom.xml
2025-06-20 16:49:10 +02:00
e3863f5992 Rimosso slash nell'url dell'apk del WMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-20 12:11:28 +02:00
218f6b9306 Completati servizi per implementazione reso fornitore
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-19 09:46:31 +02:00
cf215fae02 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-18 14:29:09 +02:00
358064102e Completati servizi per implementazione reso fornitore
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-18 12:09:09 +02:00
998b63301d Completati servizi per implementazione reso fornitore
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-18 11:39:39 +02:00
3055139b83 Aggiunti servizi per retrieve lista resi fornitori
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-18 10:12:49 +02:00
cf766e190e Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-06-18 09:58:40 +02:00
d61cf134fb Aggiornato Jenkinsfile
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-17 18:09:14 +02:00
68238f0d6e Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-06-17 12:10:05 +02:00
c3dd5fb59b sistemato aggiornamento contratti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-16 18:54:03 +02:00
96a4ab4b39 Merge branch 'master' into feature/RefactoringGestioneColli
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java
2025-06-16 17:21:46 +02:00
e9411988d2 Aggiunti servizi di ricerca per udc nei resi da clienti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-16 12:29:33 +02:00
db6319ad6c Migliorie su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-16 10:00:32 +02:00
8a61bc87bc Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-16 09:15:45 +02:00
e580a12b0e Migliorie su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-13 17:20:30 +02:00
5576834083 Migliorie su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-13 16:46:24 +02:00
715e1fc6c3 Migliorie su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-12 17:04:09 +02:00
090828aa8a Impostato skipCommit su tutti i processEntity in WMSUtility
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit 696b28e130)
2025-06-12 13:41:45 +02:00
7c65f3a8f9 Impostato skipCommit in deleteUL
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
(cherry picked from commit cba813d062)
2025-06-12 13:37:19 +02:00
778141da66 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-12 13:00:36 +02:00
ceb7deb79f Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
2025-06-11 17:01:03 +02:00
0724f6ab83 -- fix vari 2025-06-11 17:00:07 +02:00
f910e6855f [ROSSOGARGANO - MES]
- recupero materiale su ordini in chiusura
2025-06-11 16:58:53 +02:00
acbd3e8ac2 [ROSSOGARGANO - MES]
- recupero materiale su ordini in chiusura
2025-06-11 16:57:41 +02:00
5e7209f060 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-11 11:20:09 +02:00
5201b5b25d Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-11 10:26:30 +02:00
7126f9bf71 [ROSSOGARGANO]
allineamento accettazione da raccolta con nuova struttura colli
2025-06-11 10:26:26 +02:00
5a2ad13068 Fix su servizio di riproporzionamento scarichi produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-10 17:32:38 +02:00
c0dc46935b Aggiornato servizio di cancellazione collo carico produzione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-10 12:16:45 +02:00
f1c5d7cd2e Aggiornato servizio di importColliDaProduzione (usato in Rientro Merce WMS).
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
Sistemato servizio riproporzionaScarichiLavorazione utilizzando nuovi servizi di gestione UDC/UDS.
2025-06-10 10:30:04 +02:00
08c675b662 Fix gestione mtb_cols durante exchange colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-09 09:20:03 +02:00
7d9ca973f5 Merge branch 'master' into feature/RefactoringGestioneColli
# Conflicts:
#	ts/ems-engine.module.ts
2025-06-09 09:19:44 +02:00
1b2a3c1203 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-06 10:51:11 +02:00
ef7369c2a3 Fix condizione where cond nella vista WMS_OrdPrelievo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-06 10:48:24 +02:00
1520d45609 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-05 10:35:30 +02:00
820ae30ab4 Migliorata vista WMS_OrdPrelievo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-04 17:27:15 +02:00
60683c0383 SISTEMATO ERRORE IN STAMPA DOCUMENTI
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-04 16:47:50 +02:00
90b955f6a4 Fix su clear internal sqlite db
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-04 13:01:10 +02:00
e0d63d5c44 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-06-03 09:40:38 +02:00
d54401cd9e Rimossa dipendenza errata
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-30 17:36:38 +02:00
6f6232be13 Aggiunto controllo per evitare importazioni che exchange importi tabelle vuote (che cancellano tutto).
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
Aggiunti campi partita_mag_prod e data_scad_prod in equals di MtbPartitaMag
2025-05-30 17:31:46 +02:00
872503afb5 [WMS] Aggiunto ordine nella riga di rettifica del documento di scarico
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-30 12:28:39 +02:00
edd50bed65 [WMS] Aggiunta commessa ordine durante il recupero dei materiali versati
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-30 11:58:53 +02:00
aac8b151dc Creato anonimizzatore utenti stb_users
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-29 16:11:24 +02:00
76785b22fe Cambiata connessione biolevante con biolevante_peppe
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-29 15:08:16 +02:00
bebf48f6c5 Aggiornate migration per nuova MVW
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-29 13:19:07 +02:00
79d0ea1967 Rimossa cartella TS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-29 10:01:36 +02:00
069b652035 Fix su aggiornamento valori StbExchangeConfig
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-28 18:29:24 +02:00
6b3d579803 Aggiornato Jenkinsfile
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-28 17:04:55 +02:00
5acb744618 Gestito inserimento data collo e partita in createColloCaricoProdottoFinito
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-27 09:44:44 +02:00
0ee6c261e5 Aggiornati equals MtbColr
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 16:53:49 +02:00
0b6ad5d5dc Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 16:26:08 +02:00
19c8d1eee7 modificata selezione della partita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 14:13:39 +02:00
201996e4b5 Migliorie gestione exchange
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 13:03:56 +02:00
2bf4edeffe Migliorata update colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 12:57:33 +02:00
799c3be92d Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 10:51:08 +02:00
96102328c1 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-26 09:19:16 +02:00
2d458e1836 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/looper/service/LooperService.java
2025-05-23 18:47:54 +02:00
3f2ad37ff9 Gestito parametro data collo in scarico da collo 2025-05-23 18:39:28 +02:00
c343ec70ad Aggiornati servizi di recupera materiale con nuove logiche barcode
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-23 17:42:31 +02:00
4bb59eee38 Gestita possibilità di indicare la data del trasferimento in sposta ul
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-23 09:37:39 +02:00
585771cb2e Aggiornati plugin toolchain e Typescript generator
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-22 11:59:43 +02:00
51ad617bd3 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-core/src/main/java/it/integry/ems/utility/UtilityEntity.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSGenericController.java
2025-05-22 10:16:49 +02:00
4c71015588 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-22 10:04:53 +02:00
065fb956d3 Migliorato shutdown BasicConnectionPool 2025-05-22 10:04:38 +02:00
f096f72942 [Controllo giacenze]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- stampa sscc da distinta in stampa etichetta ul
2025-05-22 10:02:43 +02:00
f61f8283f0 Rimpiazzato utilizzo di LooperService con @Scheduler
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-21 18:48:19 +02:00
0682af0dee Migliorie allo shutdown di Tomcat
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-21 17:21:06 +02:00
fb09e637ee Convertito campo dataScad in LocalDate nel dto dell'ordine di lavoro (MES)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-21 10:54:25 +02:00
aa4619e323 [ROSSOGARGANO]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
- Documenti di trasferimento Raggruppati se provenienti dal MES
- gestita possibilità di scegliere se creare i documenti in rettifica colli
2025-05-21 10:41:03 +02:00
5e30e340a2 [ROSSOGARGANO]
- Documenti di trasferimento Raggruppati se provenienti dal MES
- gestita possibilità di scegliere se creare i documenti in rettifica colli
2025-05-21 10:40:56 +02:00
ca8fba8d6f Implementato servizio di retrieve uds già registrate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-20 15:26:49 +02:00
7012dca4a6 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-20 11:50:37 +02:00
8256c1e0ce Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java
2025-05-19 20:04:49 +02:00
f92de927ff Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-19 12:22:57 +02:00
fe5dc1f55b Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java
2025-05-19 09:37:19 +02:00
557ada2363 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-16 18:04:09 +02:00
6b30fea7b8 Aggiornata createULLavorazione nella sezione MES per supportare la nuova struttura
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-16 17:59:21 +02:00
71df21c003 sistemato controlo su traferimento
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-16 15:17:27 +02:00
d73f607e21 Aggiornata vista di getPickingList per WMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-16 13:02:53 +02:00
960f74e7cd Fix posizione in spostaMerceTraUl
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-15 18:28:20 +02:00
e1e9a3cbfc Rimosso Rossogargano_peppe da build docker
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-15 13:41:44 +02:00
48d5190586 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java
2025-05-15 12:15:39 +02:00
36c6ec6c64 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-15 10:19:47 +02:00
7f3c43f263 sistemato controllo per trasferimenti 2025-05-15 10:19:44 +02:00
4d0dfc5341 rimosso controllo su deposito collo diverso da documento in generazione CLAV
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-14 18:06:04 +02:00
b08e1ef6bb Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-14 17:36:57 +02:00
09b8d47c76 modifiche su creazione colli da documenti
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-14 16:01:45 +02:00
43f59ccf3b Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-13 20:25:50 +02:00
fee5320c37 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-13 20:18:54 +02:00
3a55dcdb58 Merge branch 'master' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-13 19:51:20 +02:00
f5ea90a0d0 -corretta pubblicazione su azure di branch non classici
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-13 18:47:53 +02:00
b833fc79e8 Merge branch 'master' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-13 18:39:00 +02:00
f52aa4d837 Merge branch 'hotfix/Hotfix-1'
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-13 18:36:32 +02:00
fff5faf3be Merge branch 'master' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-05-13 18:30:37 +02:00
978b42d18a Aggiunto barcode ul nella retrieveAlreadyRegisteredUDC
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 19:12:20 +02:00
c7c8b1be24 Aggiunto supporto procedura di versamento automatico con le nuove logiche dei colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 18:45:20 +02:00
6034120f1f Aggiunto CodJfas in create UDC
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 12:17:51 +02:00
c2b6d4ba69 Rimosso _peppe da rossogargano
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 10:37:04 +02:00
bc97f9a573 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 10:25:30 +02:00
ce1f68deb2 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 09:41:02 +02:00
45bf3d67d1 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-12 09:27:46 +02:00
bf38dfe0d8 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-09 17:28:25 +02:00
af68b892f3 aggiunto trasferimento automatico in versamento materia prima su ordine di lavorazione
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-09 16:20:44 +02:00
af29eeba58 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java
2025-05-09 13:23:54 +02:00
5698329cc8 Fix su distribuzione colli. Quando si distribuiva un collo con 2 righe dello stesso articolo / partita la distribuzione attribuiva ad entrambe le righe gli stessi collo_rif.
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-09 10:58:48 +02:00
d70efd3af2 aggiunti dati testata collo
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-08 18:52:52 +02:00
f99957eb41 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-08 16:52:15 +02:00
40104bcce7 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-05-06 10:39:46 +02:00
edda81733d Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/document/service/DocumentiDirettiService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java
2025-04-30 09:59:42 +02:00
ceb11d3261 aggiunti riferimenti collo in movimenti di cambio posizione ul
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-23 15:14:44 +02:00
a13671c51a Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-22 11:46:08 +02:00
b94d9b1177 [TRASFERIMENTO UL]
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
corretto deposito testata movimento di scarico a PV
aggiunto rollback in errore trasferimento
2025-04-22 11:42:57 +02:00
d027f3ff20 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-18 15:23:17 +02:00
8601f4fd90 gestione documenti di trasferimento in emissione documenti di vendita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-18 14:54:35 +02:00
73ade8691d Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-18 10:39:28 +02:00
df2a7d6e36 Merge branch 'develop' into feature/RefactoringGestioneColli
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit
2025-04-18 10:20:54 +02:00
c7c6affe3e Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/MesProductionServiceV2.java
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java
2025-04-17 15:32:22 +02:00
54fc28eb74 Fix su migration per nuova logica WMS
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-17 15:17:48 +02:00
ab1200ff84 Aggiunto tentativo di riconoscimento ean128 in createUDCFromArt
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-16 15:12:57 +02:00
22f65037f4 aggiunto riavvio automatico cache utenti all' invalidate
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-16 10:26:03 +02:00
ec2b83657a corretto servizio trasferimento UL 2025-04-15 16:38:28 +02:00
2511aabbdb Fix vari
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-11 17:04:19 +02:00
313fa6a8df Aggiunti controlli in createUDC
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-11 16:29:35 +02:00
9bb8751e21 Implementate nuove logiche di barcode_ul in rettifica giacenze
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-11 10:51:23 +02:00
24c4935dad Fix after merge
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-11 09:35:27 +02:00
61d76b03c4 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-11 09:33:25 +02:00
0f973c962a Refactoring creazione UL da MES
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 20:08:38 +02:00
cffe9082db Fix su qta in righe di rettifica 2025-04-10 19:14:38 +02:00
6c88b7b288 Fix barcode in versamento materiali MES
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 17:52:55 +02:00
ea2121e111 Fix vari
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 17:01:23 +02:00
1191f98485 Sistemato codice deposito e posizione durante la getColloByBarcode (ora vengono letti gli ultimi validi dalla giacenza)
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 13:27:12 +02:00
6c0e2d5259 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 12:52:49 +02:00
894da40182 Cambiato IntegryCustomerDB per puntare a Rossogargano_peppe 2025-04-10 12:52:09 +02:00
749a7e9750 Cambiato db RossoGargano in RossoGargano_peppe
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-10 12:27:17 +02:00
e5a66bfd15 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/production/service/OrtoFruttaProductionService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/accettazione/service/WMSAccettazioneBollaService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/accettazione/service/WMSAccettazioneService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/documenti/service/WMSDocumentService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/inventario/service/WMSInventarioService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/dto/VersaMaterialiRequestDTO.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSLavorazioneService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/vendita/service/WMSSpedizioneService.java
2025-04-10 12:03:36 +02:00
9761d05a8e Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-09 12:09:46 +02:00
050e8bd19e Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-09 12:06:25 +02:00
a0c3d3a6b3 Fix after merge
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-09 11:33:59 +02:00
f06117d5ef Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/wms/Utility/WMSUtility.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGiacenzaULService.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/controller/WMSMaterialiController.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/dto/VersaMaterialiRequestDTO.java
#	ems-engine/src/main/java/it/integry/ems/retail/wms/lavorazione/service/WMSMaterialiService.java
2025-04-09 11:32:45 +02:00
75262b5940 Fix in distribuzione colli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-09 10:53:12 +02:00
0b3f1ee9fc Aggiornato ems-settings docker
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-08 11:52:55 +02:00
7c19c93814 Aggiornato ems-settings docker
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-08 11:45:55 +02:00
532c12dd22 Iniziato refactoring VersamentoMateriali
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-08 09:04:17 +02:00
e81c2ac6b9 Merge branch 'refs/heads/develop' into feature/RefactoringGestioneColli 2025-04-08 09:04:01 +02:00
161ea5e5dd Fix Jenkinsfile
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-07 18:57:56 +02:00
260019d79f Fix Jenkinsfile
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-07 18:48:04 +02:00
08b68781e9 Refactoring del servizio di versamento e rientro del materiale da MES
Some checks failed
IntegryManagementSystem_Multi/pipeline/head Something is wrong with the build of this commit
2025-04-07 18:27:25 +02:00
760be03b18 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
2025-04-07 09:40:00 +02:00
148a4359b6 Fix null
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-07 09:39:15 +02:00
b65d35cfd6 Migliorato servizio di retrieve UL in posizione con relativo stato
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-05 12:14:11 +02:00
54eb75a420 Sistemato riposizionamento UL
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-04 19:28:50 +02:00
e9d28c6f63 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-04 12:50:52 +02:00
212f14db36 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-04 11:49:55 +02:00
b50e25a0ee Aggiornate migration gramm
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-04 11:48:18 +02:00
0a49695d7c Aggiornato servizio di SpostaArtsTraUl
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-04 10:49:20 +02:00
9e5a2e8400 Merge branch 'develop' into feature/RefactoringGestioneColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-03 18:13:58 +02:00
f0fb85e6db Aggiunto servizio per il recupero dei barcode_ul in posizione e implementata migrazione per aggiornare i barcode_ul in mtb_colt e mtb_colr
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-03 17:44:59 +02:00
86081ec113 Refactoring servizio di retrieve colli in giacenza
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
2025-04-02 19:04:50 +02:00
729 changed files with 20867 additions and 40938 deletions

12
.idea/dataSources.xml generated
View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="@SERVERDB2019" uuid="ff4f0bad-7271-429e-a4e1-bae28629efc8">
<driver-ref>sqlserver.ms</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</jdbc-driver>
<jdbc-url>jdbc:sqlserver://SERVERDB2019</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -2,6 +2,7 @@
<configuration default="false" name="MenuStaticCreator" type="Application" factoryName="Application" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="it.integry.ems.menu.MenuStaticCreator" />
<module name="ems-core" />
<shortenClasspath name="MANIFEST" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="it.integry.ems.menu.*" />

View File

@@ -1,30 +0,0 @@
<?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 -Xmx2G -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
ENV JAVA_OPTS="-DDISABLE_DROOLS_COMPILE=TRUE -Xms512M -Xmx1G -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,11 +229,6 @@
<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,7 +11,6 @@ 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 = "";
@@ -21,7 +20,6 @@ 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";
@@ -29,7 +27,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_SLASHED, TIME_FORMAT);
public static final String DATETIME_FORMAT_YMD = String.format("%s %s", DATE_FORMAT_YMD, 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);
@@ -48,10 +46,6 @@ 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)
@@ -59,8 +53,6 @@ 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

@@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.Import.dto.ImportRequestDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.json.JsonObjectMapperConfig;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.base.EntityBase;
@@ -25,7 +24,6 @@ public abstract class BaseEntityImporter<T> implements IEntityImporter<T> {
protected String format;
protected boolean headless;
protected ImportRequestDTO requestDto;
protected RequestDataDTO requestDataDTO;
protected MultiDBTransactionManager multiDBTransactionManager;
protected List<AnomalieDTO> anomalie = new ArrayList<AnomalieDTO>();
@@ -79,12 +77,6 @@ public abstract class BaseEntityImporter<T> implements IEntityImporter<T> {
return this;
}
@Override
public IEntityImporter<T> setRequestDataDTO(RequestDataDTO requestDataDTO) {
this.requestDataDTO = requestDataDTO;
return this;
}
public List<AnomalieDTO> getAnomalie() {
return anomalie;
}
@@ -108,6 +100,4 @@ public abstract class BaseEntityImporter<T> implements IEntityImporter<T> {
}
}

View File

@@ -2,7 +2,6 @@ package it.integry.ems.Import.base;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.Import.dto.ImportRequestDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.service.SetupGest;
@@ -27,14 +26,10 @@ public interface IEntityImporter<T> {
IEntityImporter<T> setRequestDTO(ImportRequestDTO requestDto);
IEntityImporter<T> setRequestDataDTO(RequestDataDTO requestDataDTO);
List<AnomalieDTO> getAnomalie();
T doImport() throws Exception;
String renameFile(String orginalFileName, List<EntityBase> entities) throws Exception;
}

View File

@@ -3,7 +3,7 @@ package it.integry.ems._context;
import it.integry.annotations.PostContextConstruct;
import it.integry.common.var.EmsDBConst;
import it.integry.ems.expansion.RunnableArgsThrowable;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.BasicConnectionPool;
@@ -69,6 +69,7 @@ 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) {
@@ -82,9 +83,9 @@ public class EmsCoreDBLoader {
private void discoverAllConnections(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
ArrayList<Callable<Void>> futureTasks = new ArrayList<>();
for (AvailableConnectionModel model : settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true)) {
for (AvailableConnectionsModel model : settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true)) {
AtomicReference<AvailableConnectionModel> modelAtomicReference = new AtomicReference<>(model);
AtomicReference<AvailableConnectionsModel> modelAtomicReference = new AtomicReference<>(model);
futureTasks.add(() -> {
try {

View File

@@ -1,27 +0,0 @@
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

@@ -1,34 +0,0 @@
package it.integry.ems.adapter;
import it.integry.ems_model.utility.UtilityString;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class XmlLocalDateAdapter extends XmlAdapter<String, LocalDate> {
private DateTimeFormatter sdf;
public XmlLocalDateAdapter() {
sdf = DateTimeFormatter.ofPattern("dd-MM-yyyy");
}
public XmlLocalDateAdapter(String format) {
sdf = DateTimeFormatter.ofPattern(format);
}
@Override
public String marshal(LocalDate arg0) throws Exception {
return arg0.format(sdf);
}
@Override
public LocalDate unmarshal(String arg0) throws Exception {
String format = UtilityString.determineDateFormat(arg0);
if (format != null && !"dd-MM-yyyy".equals(format))
sdf = DateTimeFormatter.ofPattern(format);
return LocalDate.parse(arg0,sdf);
}
}

View File

@@ -1,36 +0,0 @@
package it.integry.ems.adapter;
import it.integry.ems_model.utility.UtilityString;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class XmlLocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
private DateTimeFormatter sdf;
public XmlLocalDateTimeAdapter() {
sdf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
}
public XmlLocalDateTimeAdapter(String format) {
sdf = DateTimeFormatter.ofPattern(format);
}
@Override
public String marshal(LocalDateTime arg0) throws Exception {
return arg0.format(sdf);
}
@Override
public LocalDateTime unmarshal(String arg0) throws Exception {
String format = UtilityString.determineDateFormat(arg0);
if (format != null && !"dd-MM-yyyy HH:mm:ss".equals(format))
sdf = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(arg0,sdf);
}
}

View File

@@ -0,0 +1,269 @@
package it.integry.ems.anonymizer;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* Generatore di nomi e cognomi italiani per l'anonimizzazione dei dati.
* Mantiene la coerenza del sesso tra nome e genere.
*/
public class ItalianNameGenerator {
private final Random random;
// Nomi maschili italiani (200+ nomi)
public static final List<String> MALE_NAMES = Arrays.asList(
"Alessandro", "Andrea", "Antonio", "Francesco", "Marco", "Matteo", "Giuseppe", "Luca",
"Giovanni", "Roberto", "Stefano", "Paolo", "Davide", "Michele", "Simone", "Federico",
"Riccardo", "Fabio", "Daniele", "Massimo", "Claudio", "Nicola", "Gabriele", "Vincenzo",
"Lorenzo", "Salvatore", "Emanuele", "Alberto", "Diego", "Tommaso", "Alessio", "Filippo",
"Giorgio", "Mattia", "Franco", "Bruno", "Enrico", "Mario", "Carlo", "Gianluca",
"Cristian", "Domenico", "Raffaele", "Sergio", "Pasquale", "Gianni", "Carmine", "Gennaro",
"Antonino", "Gaetano", "Rocco", "Mauro", "Pierluigi", "Valerio", "Mirko", "Dario",
"Enzo", "Alfredo", "Renzo", "Giancarlo", "Giampaolo", "Pierpaolo", "Gianfranco", "Guido",
"Nino", "Piero", "Armando", "Luciano", "Renato", "Angelo", "Aldo", "Giulio",
"Marcello", "Rodolfo", "Umberto", "Silvano", "Ivano", "Giampiero", "Silvio", "Maurizio",
"Leonardo", "Adriano", "Ferdinando", "Bernardo", "Teodoro", "Edoardo", "Arturo", "Gino",
"Biagio", "Fabrizio", "Fausto", "Ettore", "Cesare", "Elio", "Amerigo", "Italo",
"Orlando", "Romeo", "Sandro", "Tiziano", "Ignazio", "Ciro", "Loris", "Orazio",
"Lino", "Nello", "Rino", "Primo", "Secondo", "Terzo", "Quarto", "Quinto",
"Sesto", "Settimo", "Ottavio", "Nono", "Decimo", "Benito", "Dante", "Virgilio",
"Omero", "Eugenio", "Aurelio", "Valentino", "Corrado", "Manlio", "Emilio", "Tullio",
"Attilio", "Marcello", "Romolo", "Remo", "Amedeo", "Cosimo", "Damiano", "Sebastiano",
"Cristoforo", "Bartolomeo", "Giacomo", "Simone", "Pietro", "Girolamo", "Leopoldo", "Gaspare",
"Melchiorre", "Baldassarre", "Epifanio", "Gerardo", "Ruggero", "Tancredi", "Arnaldo", "Osvaldo",
"Rinaldo", "Romualdo", "Ubaldo", "Raimondo", "Edmondo", "Redento", "Crescenzo", "Innocenzo",
"Fiorenzo", "Vincenzo", "Enzo", "Renzo", "Nunzio", "Maurizio", "Patrizio", "Orazio",
"Flavio", "Claudio", "Giuliano", "Adriano", "Emiliano", "Massimiliano", "Gianmarco", "Marcantonio",
"Gianbattista", "Giovanbattista", "Giammarco", "Gianluigi", "Giampiero", "Gianmaria", "Giandomenico", "Gianpaolo",
"Pierfrancesco", "Piergiorgio", "Pierangelo", "Piermario", "Piercarlo", "Piergiuseppe", "Gioacchino", "Bartolomeo",
"Benedetto", "Benvenuto", "Bonaventura", "Bonifacio", "Camillo", "Calogero", "Carmelo", "Demetrio",
"Dionisio", "Donato", "Egidio", "Eliseo", "Erminio", "Eustachio", "Evandro", "Ezio",
"Fermo", "Fernando", "Ferruccio", "Fortunato", "Fulvio", "Gaetano", "Germano", "Giosuè",
"Gregorio", "Guglielmo", "Lamberto", "Lanfranco", "Liborio", "Lucio", "Luigi", "Manfredo"
);
// Nomi femminili italiani (200+ nomi)
public static final List<String> FEMALE_NAMES = Arrays.asList(
"Giulia", "Francesca", "Chiara", "Federica", "Sara", "Martina", "Valentina", "Alessandra",
"Silvia", "Elisa", "Giorgia", "Elena", "Paola", "Laura", "Roberta", "Alice", "Serena",
"Barbara", "Anna", "Maria", "Simona", "Claudia", "Monica", "Cristina", "Elisabetta",
"Stefania", "Valeria", "Daniela", "Manuela", "Antonella", "Giovanna", "Sabrina", "Emanuela",
"Ilaria", "Cinzia", "Rosanna", "Patrizia", "Teresa", "Carmela", "Giuseppina", "Rosa",
"Antonietta", "Concetta", "Caterina", "Angela", "Raffaella", "Luisa", "Lucia", "Michela",
"Franceschina", "Graziella", "Isabella", "Benedetta", "Beatrice", "Margherita", "Alessia", "Andrea",
"Cristiana", "Fabiana", "Gabriella", "Gianna", "Lorena", "Marisa", "Nicoletta", "Ornella",
"Rosaria", "Silvana", "Susanna", "Tiziana", "Viviana", "Adriana", "Agnese", "Albina",
"Amelia", "Andreina", "Angelica", "Antonella", "Arianna", "Armida", "Augusta", "Aurora",
"Bruna", "Brunella", "Camilla", "Carla", "Carolina", "Cecilia", "Clara", "Clelia",
"Concettina", "Corinna", "Cosima", "Costanza", "Cristiana", "Delia", "Diana", "Dora",
"Donatella", "Edvige", "Eleonora", "Elvira", "Emma", "Enrichetta", "Ester", "Eugenia",
"Eva", "Fabia", "Fabiola", "Fernanda", "Fiorella", "Fiorenza", "Flora", "Franca",
"Gaia", "Gemma", "Gilda", "Gina", "Gloria", "Grazia", "Ida", "Ilda",
"Immacolata", "Ines", "Iolanda", "Irene", "Iris", "Ivana", "Ivanka", "Lara",
"Letizia", "Licia", "Lidia", "Liliana", "Lina", "Linda", "Lisa", "Livia",
"Loredana", "Lorella", "Lorenza", "Luana", "Luciana", "Lucilla", "Lucrezia", "Ludovica",
"Luigia", "Luna", "Maddalena", "Mafalda", "Marcella", "Marella", "Marilena", "Marina",
"Marisa", "Marta", "Matilde", "Maura", "Mirella", "Miriam", "Morena", "Nadia",
"Natalia", "Natalina", "Nella", "Nelly", "Nicole", "Noemi", "Norma", "Olga",
"Olimpia", "Orietta", "Palmira", "Pamela", "Pascale", "Pasqualina", "Pia", "Piera",
"Pierina", "Priscilla", "Raffaela", "Rebecca", "Regina", "Renata", "Rita", "Romina",
"Rosalba", "Rosalia", "Rosangela", "Rosanna", "Rosella", "Rosetta", "Rosina", "Rossana",
"Rossella", "Samanta", "Sandra", "Santina", "Sebastiana", "Serafina", "Sonia", "Stella",
"Tecla", "Tina", "Tosca", "Tullia", "Uberta", "Umberta", "Ursula", "Vera",
"Veronica", "Vincenza", "Viola", "Virginia", "Vittoria", "Wanda", "Yvonne", "Zaira",
"Zelda", "Zita", "Zoe", "Ambra", "Azzurra", "Bianca", "Celeste", "Diamante",
"Fiamma", "Giada", "Perla", "Sole", "Stella", "Alba", "Alma", "Anya"
);
// Cognomi italiani (300+ cognomi)
public static final List<String> SURNAMES = Arrays.asList(
"Rossi", "Ferrari", "Russo", "Bianchi", "Romano", "Gallo", "Costa", "Fontana",
"Esposito", "Ricci", "Bruno", "Moretti", "Marino", "Greco", "Barbieri", "Lombardi",
"Giordano", "Colombo", "Rizzo", "Benedetti", "Palumbo", "Pellegrini", "Caruso", "Ferretti",
"Galli", "Marchetti", "Villa", "Mancini", "Conte", "Serra", "Ferrero", "Martinelli",
"Mariani", "Giuliani", "Vitale", "Santoro", "Ferrara", "Leone", "Longo", "Gentile",
"Martino", "Fabbri", "Rinaldi", "Messina", "Riva", "Conti", "Silvestri", "Coppola",
"Negri", "Milani", "Parisi", "Sala", "Cattaneo", "Orlando", "Fiore", "Marini",
"Guerra", "Pagano", "Bernardi", "Valenti", "Farina", "Ruggiero", "Caputo", "Monti",
"Grassi", "Montanari", "Santini", "Morelli", "Amato", "Neri", "Donati", "Testa",
"Bianco", "Sorrentino", "Rossini", "Giuliano", "Sartori", "De Angelis", "De Rosa",
"Basile", "Costantini", "Rizzi", "Barone", "Martini", "De Santis", "Basso", "Pellegrino",
"Carbone", "Gatti", "Coppola", "Rossetto", "Piras", "Ricci", "Martinelli", "Sanna",
"Torrisi", "Scuderi", "Priolo", "Anastasi", "Puglisi", "La Rosa", "Catalano", "Garofalo",
"Aiello", "Trovato", "Pappalardo", "Pulvirenti", "Marletta", "Di Marco", "Biondi", "Ferri",
"Testa", "Marchi", "Baldini", "Benedetti", "Colombi", "Gasparini", "Orlandi", "Barbera",
"Damico", "Guerriero", "Napolitano", "Romano", "Mazza", "Caruso", "Ferraro", "Gaeta",
"Di Stefano", "Palma", "Carbone", "Morrone", "Milazzo", "Calabrese", "Ventura", "Palmieri",
"Martello", "Fico", "Pastore", "Arena", "Maggio", "Sciacca", "Pagliaro", "Lupo",
"Mangano", "Capra", "Finocchiaro", "Grasso", "Morabito", "Pellicano", "Castelli", "Castaldo",
"Mauro", "Piazza", "Battaglia", "D Amico", "Forte", "Antonelli", "Delia", "Marino",
"Cosentino", "Lazzaro", "Vitale", "Lombardo", "Crisafulli", "Nicolosi", "Bellomo", "Morreale",
"Messina", "Vaccaro", "Nicosia", "Fazio", "Spina", "Russo", "Parisi", "Zappala",
"Riccobono", "Camilleri", "Barbagallo", "Oliveri", "Pistone", "Gambino", "Cavallaro", "Burgio",
"Gentile", "Restivo", "Di Bella", "Genovese", "Ferrante", "Gianninoto", "Vitrano", "Gargano",
"Lombardi", "Milani", "Picci", "De Luca", "Foti", "Giardina", "Di Pietro", "Russo",
"La Spina", "Morello", "Moschetti", "Penna", "Ferretti", "Colombo", "Marra", "De Simone",
"Cozzi", "Grimaldi", "Pellegrini", "Galdi", "Paolini", "Ferrara", "Santangelo", "Di Giovanni",
"Iannone", "Lucchese", "Orsini", "Mastroianni", "Fiorentino", "Capasso", "Di Napoli", "Giannini",
"Romano", "Vitale", "Fontana", "Galdi", "Giuliani", "Barbieri", "Lombardo", "Martinelli",
"De Rosa", "Ferri", "Caputo", "Castaldi", "Mauro", "Monti", "Villa", "Marcello",
"Ricci", "Ferretti", "Gallo", "Fabbri", "Marini", "Grasso", "Carbone", "Bevilacqua",
"Giannone", "Perna", "Pellegrino", "Di Lorenzo", "Napoli", "Amato", "Donato", "Riccio",
"Giuliano", "Mancuso", "Bellotti", "Bianchini", "Rossetti", "Mazza", "Silvestri", "Baldini",
"Martinelli", "Galli", "Colombo", "Ferraro", "Palumbo", "Marchetti", "Ferrera", "Rossi",
"Caruso", "Serra", "Marchese", "Benedetti", "Franzese", "Basile", "Di Mauro", "Torrisi",
"Licata", "Scuderi", "Platania", "Priolo", "Marletta", "Biondi", "Grassi", "Fontana",
"Pagano", "Gentile", "Moretti", "Guerra", "Santoro", "Longo", "Giordano", "Fiore",
"Marchetti", "Parisi", "Milani", "Orlando", "Sala", "Costa", "Cattaneo", "Neri",
"Donati", "Mancini", "Montanari", "Caputo", "De Angelis", "Sartori", "De Santis", "Basso"
);
public enum Gender {
MALE, FEMALE
}
/**
* Costruttore con seed random sicuro
*/
public ItalianNameGenerator() {
this.random = new SecureRandom();
}
/**
* Costruttore con seed personalizzato per risultati riproducibili
* @param seed seed per il generatore random
*/
public ItalianNameGenerator(long seed) {
this.random = new Random(seed);
}
/**
* Genera un genere casuale
* @return Gender casuale (MALE o FEMALE)
*/
public Gender generateGender() {
return random.nextBoolean() ? Gender.MALE : Gender.FEMALE;
}
/**
* Genera un nome casuale in base al sesso specificato
* @param gender il sesso per cui generare il nome
* @return nome casuale del sesso specificato
*/
public String generateFirstName(Gender gender) {
List<String> names = (gender == Gender.MALE) ? MALE_NAMES : FEMALE_NAMES;
return names.get(random.nextInt(names.size()));
}
/**
* Genera un cognome casuale
* @return cognome casuale
*/
public String generateSurname() {
return SURNAMES.get(random.nextInt(SURNAMES.size()));
}
/**
* Genera un nome completo (nome + cognome) in base al sesso
* @param gender il sesso per cui generare il nome completo
* @return nome completo del sesso specificato
*/
public String generateFullName(Gender gender) {
return generateFirstName(gender) + " " + generateSurname();
}
/**
* Genera un nome completo con sesso casuale
* @return nome completo con sesso casuale
*/
public String generateRandomFullName() {
Gender randomGender = random.nextBoolean() ? Gender.MALE : Gender.FEMALE;
return generateFullName(randomGender);
}
/**
* Genera una persona completa con nome, cognome e sesso
* @return oggetto Person con i dati generati
*/
public Person generatePerson() {
Gender gender = random.nextBoolean() ? Gender.MALE : Gender.FEMALE;
return new Person(generateFirstName(gender), generateSurname(), gender);
}
/**
* Genera una persona mantenendo il sesso specificato
* @param gender il sesso da mantenere
* @return oggetto Person con i dati generati
*/
public Person generatePerson(Gender gender) {
return new Person(generateFirstName(gender), generateSurname(), gender);
}
/**
* Classe interna per rappresentare una persona generata
*/
public static class Person {
private final String firstName;
private final String surname;
private final Gender gender;
public Person(String firstName, String surname, Gender gender) {
this.firstName = firstName;
this.surname = surname;
this.gender = gender;
}
public String getFirstName() {
return firstName;
}
public String getSurname() {
return surname;
}
public Gender getGender() {
return gender;
}
public String getFullName() {
return firstName + " " + surname;
}
@Override
public String toString() {
return String.format("Person{firstName='%s', surname='%s', gender=%s}",
firstName, surname, gender);
}
}
/**
* Metodo di utilità per ottenere il sesso da una stringa
* @param genderString stringa rappresentante il sesso ("M", "F", "MALE", "FEMALE", etc.)
* @return enum Gender corrispondente
* @throws IllegalArgumentException se la stringa non è riconosciuta
*/
public static Gender parseGender(String genderString) {
if (genderString == null) {
throw new IllegalArgumentException("Gender string cannot be null");
}
String normalized = genderString.trim().toUpperCase();
switch (normalized) {
case "M":
case "MALE":
case "MASCHIO":
case "UOMO":
return Gender.MALE;
case "F":
case "FEMALE":
case "FEMMINA":
case "DONNA":
return Gender.FEMALE;
default:
throw new IllegalArgumentException("Unrecognized gender: " + genderString);
}
}
}

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 = 1_000_000;
private final int queueSize = 500;
@Bean
public ExecutorService taskExecutor() {

View File

@@ -552,7 +552,7 @@ public class EmsController {
@RequestParam(required = false, defaultValue = "true") boolean headless,
@RequestBody(required = false) JsonNode body) throws Exception {
EntityExportResponse<?> entityExportResponse = emsServices.export(multiDBTransactionManager, requestDataDTO, typeExport, formatExport, body, headless);
EntityExportResponse<?> entityExportResponse = emsServices.export(typeExport, formatExport, body, headless);
List<AnomalieDTO> anomalie = new ArrayList<>();
if (entityExportResponse != null && entityExportResponse.getAnomalie() != null && !entityExportResponse.getAnomalie().isEmpty())
@@ -608,7 +608,7 @@ public class EmsController {
@RequestParam(required = false, defaultValue = "true") boolean headless,
@RequestBody(required = false) ImportRequestDTO requestBody) throws Exception {
EntityImportResponse<List<EntityBase>> importResponse = emsServices.importEntity(multiDBTransactionManager, requestDataDTO, importType, importFormat, requestBody, headless);
EntityImportResponse<List<EntityBase>> importResponse = emsServices.importEntity(importType, importFormat, requestBody, headless);
List<EntityBase> entities = importResponse.getResponse();
@@ -733,7 +733,7 @@ public class EmsController {
@PathVariable String filename,
@RequestParam(name = "contentDisposition", defaultValue = "attachment") String contentDispositionType,
@RequestParam(defaultValue = "false") boolean requestThumbnail) throws Exception {
AttachmentDTO attachmentDTO = emsServices.downloadStbFileAttachment(multiDBTransactionManager, idAttach, requestThumbnail);
AttachmentDTO attachmentDTO = emsServices.downloadStbFileAttachment(idAttach, requestThumbnail);
if (attachmentDTO != null) {
return ResponseEntity.ok()
@@ -754,7 +754,7 @@ public class EmsController {
public ResponseEntity<byte[]> downloadFileFromRefUuid(@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam() String refUuid,
@RequestParam() String fileName) throws Exception {
AttachmentDTO attached = emsServices.downloadFileFromRefUuid(multiDBTransactionManager, refUuid, fileName);
AttachmentDTO attached = emsServices.downloadFileFromRefUuid(refUuid, fileName);
if (attached == null) return ResponseEntity.notFound().build();
@@ -774,7 +774,7 @@ public class EmsController {
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam String idAttach,
@RequestParam(defaultValue = "false") boolean requestThumbnail) throws Exception {
AttachmentDTO attachmentDTO = emsServices.downloadStbFileAttachment(multiDBTransactionManager, idAttach, requestThumbnail);
AttachmentDTO attachmentDTO = emsServices.downloadStbFileAttachment(idAttach, requestThumbnail);
if (attachmentDTO != null) {
return ResponseEntity.ok()
@@ -793,8 +793,9 @@ public class EmsController {
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_STB_EMAIL_CONTENT, method = RequestMethod.GET)
public ResponseEntity<byte[]> downloadStbEmailContent(@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam Integer idEmail) throws Exception {
public byte[] downloadStbEmailContent(HttpServletRequest request, HttpServletResponse response,
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam Integer idEmail) throws Exception {
StbEmailContent stbEmailContent = new StbEmailContent();
stbEmailContent.setIdEmail(idEmail);
stbEmailContent.setOperation(OperationType.SELECT_OBJECT);
@@ -802,7 +803,11 @@ public class EmsController {
stbEmailContent = entityProcessor.processEntity(stbEmailContent, multiDBTransactionManager);
if (stbEmailContent != null) {
byte[] byteArr;
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;
String pattern = "[^\\x00-\\x7F]";
Pattern pat = Pattern.compile(pattern);
@@ -814,18 +819,13 @@ public class EmsController {
byteArr = Base64.decodeBase64(stbEmailContent.getEmailContent());
}
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.setContentLength(byteArr != null ? byteArr.length : 0);
return byteArr;
}
return ResponseEntity.notFound().build();
response.sendError(404, "Allegato non trovato");
return null;
}
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_DTB_DOC_PDF, method = RequestMethod.GET)
@@ -884,13 +884,12 @@ public class EmsController {
}
@RequestMapping(value = EmsRestConstants.PATH_DOWNLOAD_DTB_ORD_PDF, method = RequestMethod.GET)
public ResponseEntity<byte[]> downloadDtbOrdPdf(
@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestParam String gestione,
@RequestParam String dataOrd,
@RequestParam Integer numOrd,
@RequestParam Integer versione) throws Exception {
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 {
DtbOrdPdf dtbOrdPdf = new DtbOrdPdf();
dtbOrdPdf.setGestione(gestione);
dtbOrdPdf.setDataOrd(UtilityDate.RecognizeDate(dataOrd));
@@ -901,20 +900,17 @@ public class EmsController {
dtbOrdPdf = entityProcessor.processEntity(dtbOrdPdf, multiDBTransactionManager);
if (dtbOrdPdf != null) {
byte[] byteArr = dtbOrdPdf.getFilecontentByteArr(true);
response.setContentType("application/octet-stream");
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader(HttpHeaders.CONTENT_DISPOSITION, ContentDisposition.attachment().filename(dtbOrdPdf.getFilename()).build().toString());
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);
byte[] byteArr = dtbOrdPdf.getFilecontentByteArr(true);
response.setContentLength(byteArr != null ? byteArr.length : 0);
return byteArr;
}
return ResponseEntity.notFound().build();
response.sendError(404, "Allegato non trovato");
return null;
}
@RequestMapping(value = EmsRestConstants.PATH_UPLOAD_STB_FILE_ATTACHMENT, method = RequestMethod.POST)
@@ -931,7 +927,7 @@ public class EmsController {
throw new Exception("Sono stati inviati più file del previsto");
}
StbFilesAttached stbFilesAttached = emsServices.uploadStbFilesAttached(multiDBTransactionManager, idAttach,
StbFilesAttached stbFilesAttached = emsServices.uploadStbFilesAttached(idAttach,
files[0].getOriginalFilename(),
files[0].getBytes(),
descrizione,
@@ -1110,7 +1106,7 @@ public class EmsController {
.setCodDtip(codDtip);
drlDocAttached.setOperation(OperationType.INSERT);
StbFilesAttached stbFilesAttached = emsServices.uploadStbFilesAttached(multiDBTransactionManager, idAttach,
StbFilesAttached stbFilesAttached = emsServices.uploadStbFilesAttached(idAttach,
files[0].getOriginalFilename(),
files[0].getBytes(),
descrizione,
@@ -1129,7 +1125,7 @@ public class EmsController {
@RequestMapping(value = "createZipFromFiles", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse createZipFromFiles(@RequestBody CreateZipDTO createZipDTO) throws Exception {
return ServiceRestResponse.createPositiveResponse(emsServices.createZipFromFiles(multiDBTransactionManager, createZipDTO));
return ServiceRestResponse.createPositiveResponse(emsServices.createZipFromFiles(createZipDTO));
}
// @RequestMapping(value = EmsRestConstants.PATH_UPLOAD_STB_EMAIL_CONTENT, method = RequestMethod.POST)
@@ -1178,7 +1174,7 @@ public class EmsController {
@RequestMapping(value = EmsRestConstants.PATH_EXPORT_SERVER_INFO_ISCC, method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse exportServerInfoISCC(@RequestParam(CommonConstants.PROFILE_DB) String config) throws Exception {
emsServices.checkServerVariables(multiDBTransactionManager);
emsServices.checkServerVariables();
return ServiceRestResponse.createPositiveResponse();
}

View File

@@ -1,12 +1,11 @@
package it.integry.ems.datasource;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
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;
@@ -14,26 +13,17 @@ import java.util.HashMap;
public class DataSource extends BasicDataSource {
private final int POOL_SIZE;
private AvailableConnectionModel connectionModel;
private AvailableConnectionsModel connectionModel;
/**
* Instanzia un nuovo datasource.
*
* @deprecated Il datasource non deve essere istanziato direttamente ma bisogna utilizzare il metodo
* {@link it.integry.ems.sync.MultiDBTransaction.BasicConnectionPool#getConnection(AvailableConnectionModel)} per ottenere una connessione.
* {@link it.integry.ems.sync.MultiDBTransaction.BasicConnectionPool#getConnection(AvailableConnectionsModel)} per ottenere una connessione.
*/
@Deprecated
public DataSource() {
super();
POOL_SIZE = 5;
}
@Deprecated
public DataSource(int poolSize) {
super();
POOL_SIZE = poolSize;
}
public EmsRestConstants.DB_TYPE getTypeDB() {
@@ -72,20 +62,12 @@ public class DataSource extends BasicDataSource {
}
public synchronized void initialize(String profileDB) throws Exception {
initialize(profileDB, null);
AvailableConnectionsModel connectionsModel = SettingsModel.getInstance().findConnectionModel(profileDB);
initialize(connectionsModel);
}
public synchronized void initialize(String profileDB, String customAppName) throws Exception {
AvailableConnectionModel connectionsModel = SettingsModel.getInstance().findConnectionModel(profileDB);
initialize(connectionsModel, customAppName);
}
public synchronized void initialize(AvailableConnectionModel connectionModel) throws Exception {
initialize(connectionModel, null);
}
public synchronized void initialize(AvailableConnectionModel connectionModel, String customAppName) throws Exception {
public synchronized void initialize(AvailableConnectionsModel connectionModel) throws Exception {
if (connectionModel == null) {
throw new Exception("Configurazione DB non trovata");
}
@@ -94,7 +76,7 @@ public class DataSource extends BasicDataSource {
this.setDriverClassName(connectionModel.getDriverClassName());
this.setUrl(connectionModel.getDbConnectionString(UtilityString.isNull(customAppName, "EMS Connection")));
this.setUrl(connectionModel.getDbConnectionString("EMS Connection"));
this.setUsername(connectionModel.getUsername());
this.setPassword(connectionModel.getPasswordDecrypted());
this.setDefaultCatalog(connectionModel.getDbName());
@@ -105,9 +87,9 @@ public class DataSource extends BasicDataSource {
// ===== OTTIMIZZAZIONI CRITICHE =====
// Pool sizing ottimizzato per READ_UNCOMMITTED (meno locking = più connessioni possibili)
this.setInitialSize(POOL_SIZE); // Inizia con più connessioni
this.setInitialSize(5); // Inizia con più connessioni
this.setMaxTotal(-1); // Aumentato il massimo
this.setMinIdle(POOL_SIZE); // Non scendere sotto 5
this.setMinIdle(5); // Non scendere sotto 5
this.setMaxIdle(-1); // Mantieni più connessioni idle
// Timeout ottimizzati per performance massime
@@ -115,8 +97,8 @@ public class DataSource extends BasicDataSource {
// Validazione veloce ed efficiente
this.setValidationQuery("SELECT 1");
this.setValidationQueryTimeout(30); // Ridotto a 1 secondo
this.setTestWhileIdle(true); // Testa connessioni idle
// this.setValidationQueryTimeout(60); // Ridotto a 1 secondo
// this.setTestWhileIdle(true); // Testa connessioni idle
// Eviction ottimizzata per READ_UNCOMMITTED
// this.setTimeBetweenEvictionRunsMillis(1 * 1000); // Ogni 30 secondi

View File

@@ -1,302 +0,0 @@
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

@@ -1,144 +0,0 @@
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

@@ -1,27 +0,0 @@
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

@@ -1,67 +0,0 @@
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

@@ -1,108 +0,0 @@
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

@@ -1,27 +0,0 @@
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

@@ -1,27 +0,0 @@
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

@@ -1,27 +0,0 @@
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

@@ -1,11 +0,0 @@
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.getDeviceId());
deviceService.updateUsage(requestDataDTO.getApplication(), requestDataDTO.getDeviceId());
}
return true;

View File

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

View File

@@ -0,0 +1,30 @@
package it.integry.ems.dto;
import java.util.Objects;
public class ArticoloPartitaCommessaDTO extends ArticoloPartitaDTO {
private String codJcom;
@Override
public boolean equals(Object o) {
if (!(o instanceof ArticoloPartitaCommessaDTO)) return false;
if (!super.equals(o)) return false;
ArticoloPartitaCommessaDTO that = (ArticoloPartitaCommessaDTO) o;
return Objects.equals(getCodJcom(), that.getCodJcom());
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), getCodJcom());
}
public String getCodJcom() {
return codJcom;
}
public ArticoloPartitaCommessaDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.ems.document.dto;
package it.integry.ems.dto;
import java.util.Objects;

View File

@@ -1,6 +1,5 @@
package it.integry.ems.dto;
import java.time.LocalDateTime;
import java.util.Date;
public class ExtendedStbActivity {
@@ -15,9 +14,11 @@ public class ExtendedStbActivity {
private String userCreator;
private String note;
private String activityDescription;
private Date dataInsAct;
private int priorita;
private LocalDateTime alarmTime;
private LocalDateTime oraInsAct;
private Date alarmDate;
private Date alarmTime;
private Date oraInsAct;
private String activityTypeId;
private String parentActivityId;
private StbActivityEmailObject emailObject;
@@ -115,6 +116,15 @@ public class ExtendedStbActivity {
return this;
}
public Date getDataInsAct() {
return dataInsAct;
}
public ExtendedStbActivity setDataInsAct(Date dataInsAct) {
this.dataInsAct = dataInsAct;
return this;
}
public int getPriorita() {
return priorita;
}
@@ -124,20 +134,29 @@ public class ExtendedStbActivity {
return this;
}
public LocalDateTime getAlarmTime() {
public Date getAlarmDate() {
return alarmDate;
}
public ExtendedStbActivity setAlarmDate(Date alarmDate) {
this.alarmDate = alarmDate;
return this;
}
public Date getAlarmTime() {
return alarmTime;
}
public ExtendedStbActivity setAlarmTime(LocalDateTime alarmTime) {
public ExtendedStbActivity setAlarmTime(Date alarmTime) {
this.alarmTime = alarmTime;
return this;
}
public LocalDateTime getOraInsAct() {
public Date getOraInsAct() {
return oraInsAct;
}
public ExtendedStbActivity setOraInsAct(LocalDateTime oraInsAct) {
public ExtendedStbActivity setOraInsAct(Date oraInsAct) {
this.oraInsAct = oraInsAct;
return this;
}

View File

@@ -3,7 +3,7 @@ package it.integry.ems.dynamic_cache;
import it.integry.ems.expansion.RunnableArgsWithReturn;
import it.integry.ems.expansion.RunnableWithReturn;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -37,7 +37,8 @@ public class DynamicCacheService {
DATI_AZIENDA_KEY,
ENTITY_LOGGER_SETUP,
GRIGLIA_ACQUISTO_KEY,
ENTITY_SYNC_KEY
ENTITY_SYNC_KEY,
STB_GEST_SETUP_KEY
}
public void addItem(Keys key, int invalidateTimeInMins, RunnableWithReturn<Object> refreshAction) {
@@ -50,11 +51,11 @@ public class DynamicCacheService {
List<String> finalDbNames = dbNames.stream().map(String::toLowerCase).collect(Collectors.toList());
RunnableWithReturn<Object> internalRefreshAction = () -> {
Map<String, List<AvailableConnectionModel>> databases = settingsModel.getAvailableConnections()
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionModel::getInternalDb)
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> finalDbNames.contains(x.getDbName().toLowerCase()))
.collect(Collectors.groupingBy(AvailableConnectionModel::getDbName));
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
final HashMap<String, T> cachedDataByDB = new HashMap<>();
@@ -82,11 +83,11 @@ public class DynamicCacheService {
RunnableWithReturn<Object> refreshAction = () -> {
Map<String, List<AvailableConnectionModel>> databases = settingsModel.getAvailableConnections()
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionModel::getInternalDb)
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> finalDbNames.contains(x.getDbName().toLowerCase()))
.collect(Collectors.groupingBy(AvailableConnectionModel::getDbName));
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
final HashMap<String, List<? extends EntityBase>> cachedEntitiesByDB = new HashMap<>();
@@ -137,11 +138,11 @@ public class DynamicCacheService {
RunnableWithReturn<Object> refreshAction = () -> {
Map<String, List<AvailableConnectionModel>> databases = settingsModel.getAvailableConnections()
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionModel::getInternalDb)
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> finalDbNames.contains(x.getDbName().toLowerCase()))
.collect(Collectors.groupingBy(AvailableConnectionModel::getDbName));
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
final HashMap<String, List<?>> cacheQueryByDB = new HashMap<>();

View File

@@ -1,325 +0,0 @@
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,371 @@
package it.integry.ems.entity_logger.db_schema_manager.component;
import it.integry.ems.entity_logger.db_schema_manager.dto.ForeignKeyDependency;
import it.integry.ems.entity_logger.db_schema_manager.dto.ForeignKeyDependencyReport;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class SQLServerForeignKeyManager {
private final Logger logger = LogManager.getLogger();
private Connection connection;
private boolean disableForeignKeyChecks;
public SQLServerForeignKeyManager(Connection connection) {
this(connection, false);
}
public SQLServerForeignKeyManager(Connection connection, boolean disableForeignKeyChecks) {
this.connection = connection;
this.disableForeignKeyChecks = disableForeignKeyChecks;
}
/**
* Aggiorna una foreign key e tutte le sue dipendenze in un'unica transazione
*
* @param tableName Nome della tabella principale
* @param columnName Nome della colonna che contiene la chiave primaria
* @param oldValue Valore attuale della chiave
* @param newValue Nuovo valore della chiave
* @return true se l'operazione è completata con successo
* @throws SQLException in caso di errore
*/
public <T> boolean updateForeignKeyWithDependencies(String tableName, String columnName,
T oldValue, T newValue) throws SQLException {
boolean originalAutoCommit = connection.getAutoCommit();
List<String> disabledConstraints = new ArrayList<>();
try {
// Disabilita auto-commit per gestire la transazione manualmente
connection.setAutoCommit(false);
logger.info(String.format("Inizio aggiornamento FK: %s.%s da %s a %s",
tableName, columnName, oldValue, newValue));
// 1. Disabilita i vincoli foreign key se richiesto
if (disableForeignKeyChecks) {
disabledConstraints = disableForeignKeyConstraints(tableName, columnName);
logger.info(String.format("Disabilitati %d vincoli foreign key", disabledConstraints.size()));
}
// 2. Trova tutte le dipendenze
List<ForeignKeyDependency> dependencies = findAllDependencies(tableName, columnName);
logger.info(String.format("Trovate %d dipendenze da aggiornare", dependencies.size()));
if (disableForeignKeyChecks) {
// Se i vincoli sono disabilitati, possiamo aggiornare in qualsiasi ordine
// Aggiorniamo prima la tabella principale per semplicità
updateMainTable(tableName, columnName, oldValue, newValue);
// Poi aggiorniamo tutte le tabelle dipendenti
for (ForeignKeyDependency dependency : dependencies) {
updateDependentTable(dependency, oldValue, newValue);
}
} else {
// Ordine normale: prima le dipendenti, poi la principale
for (ForeignKeyDependency dependency : dependencies) {
updateDependentTable(dependency, oldValue, newValue);
}
updateMainTable(tableName, columnName, oldValue, newValue);
}
// 3. Riabilita i vincoli foreign key se erano stati disabilitati
if (disableForeignKeyChecks && !disabledConstraints.isEmpty()) {
enableForeignKeyConstraints(disabledConstraints);
logger.info("Vincoli foreign key riabilitati");
// 4. Verifica l'integrità dei dati dopo aver riabilitato i vincoli
if (!checkConstraintIntegrity(disabledConstraints)) {
throw new SQLException("Violazione dell'integrità referenziale dopo l'aggiornamento");
}
}
// Commit della transazione
connection.commit();
logger.info("Aggiornamento completato con successo");
return true;
} catch (SQLException e) {
// Rollback in caso di errore
try {
connection.rollback();
logger.error("Errore durante l'aggiornamento, rollback eseguito: " + e.getMessage(), e);
// Se i vincoli erano stati disabilitati, prova a riabilitarli anche dopo il rollback
if (disableForeignKeyChecks && !disabledConstraints.isEmpty()) {
try {
enableForeignKeyConstraints(disabledConstraints);
logger.info("Vincoli foreign key riabilitati dopo rollback");
} catch (SQLException enableEx) {
logger.error("ATTENZIONE: Impossibile riabilitare i vincoli dopo rollback: " + enableEx.getMessage(), enableEx);
}
}
} catch (SQLException rollbackEx) {
logger.error("Errore durante il rollback: " + rollbackEx.getMessage(), rollbackEx);
}
throw e;
} finally {
// Ripristina l'auto-commit originale
connection.setAutoCommit(originalAutoCommit);
}
}
/**
* Disabilita tutti i vincoli foreign key che referenziano la tabella/colonna specificata
*/
private List<String> disableForeignKeyConstraints(String tableName, String columnName) throws SQLException {
List<String> disabledConstraints = new ArrayList<>();
List<ForeignKeyDependency> dependencies = findAllDependencies(tableName, columnName);
for (ForeignKeyDependency dependency : dependencies) {
String disableQuery = String.format(
"ALTER TABLE [%s].[%s] NOCHECK CONSTRAINT [%s]",
dependency.getDependentSchema(),
dependency.getDependentTable(),
dependency.getConstraintName()
);
try (Statement stmt = connection.createStatement()) {
stmt.execute(disableQuery);
disabledConstraints.add(String.format("%s.%s.%s",
dependency.getDependentSchema(),
dependency.getDependentTable(),
dependency.getConstraintName()));
logger.trace(String.format("Disabilitato vincolo: %s", dependency.getConstraintName()));
}
}
return disabledConstraints;
}
/**
* Riabilita i vincoli foreign key precedentemente disabilitati
*/
private void enableForeignKeyConstraints(List<String> constraintIdentifiers) throws SQLException {
for (String constraintId : constraintIdentifiers) {
String[] parts = constraintId.split("\\.");
if (parts.length != 3) {
logger.warn("Formato constraint identifier non valido: " + constraintId);
continue;
}
String schema = parts[0];
String table = parts[1];
String constraint = parts[2];
String enableQuery = String.format(
"ALTER TABLE [%s].[%s] CHECK CONSTRAINT [%s]",
schema, table, constraint
);
try (Statement stmt = connection.createStatement()) {
stmt.execute(enableQuery);
logger.trace(String.format("Riabilitato vincolo: %s", constraint));
}
}
}
/**
* Verifica l'integrità dei vincoli dopo averli riabilitati
*/
private boolean checkConstraintIntegrity(List<String> constraintIdentifiers) throws SQLException {
boolean allValid = true;
for (String constraintId : constraintIdentifiers) {
String[] parts = constraintId.split("\\.");
if (parts.length != 3) continue;
String schema = parts[0];
String table = parts[1];
String constraint = parts[2];
// Verifica se ci sono violazioni del vincolo
String checkQuery = String.format("SELECT COUNT(*) as violations\n" +
" FROM [%s].[%s] child\n" +
" LEFT JOIN (\n" +
" SELECT fkc.referenced_object_id, fkc.referenced_column_id,\n" +
" fkc.parent_object_id, fkc.parent_column_id\n" +
" FROM sys.foreign_key_columns fkc\n" +
" INNER JOIN sys.foreign_keys fk ON fkc.constraint_object_id = fk.object_id\n" +
" WHERE fk.name = '%s'\n" +
" ) fk_info ON 1=1\n" +
" LEFT JOIN sys.tables ref_table ON fk_info.referenced_object_id = ref_table.object_id\n" +
" LEFT JOIN sys.schemas ref_schema ON ref_table.schema_id = ref_schema.schema_id\n" +
" WHERE child.[%s] IS NOT NULL\n" +
" AND NOT EXISTS (\n" +
" SELECT 1 FROM [%s].[%s] parent\n" +
" WHERE parent.[%s] = child.[%s]\n" +
" )", schema, table, constraint,
"temp_col", // Questo dovrebbe essere sostituito con la colonna effettiva
"temp_schema", "temp_table", "temp_parent_col", "temp_col");
// Query semplificata per il check di integrità
String simpleCheckQuery = String.format(
"DBCC CHECKCONSTRAINTS('[%s].[%s].[%s]') WITH ALL_CONSTRAINTS",
schema, table, constraint
);
try (Statement stmt = connection.createStatement()) {
try (ResultSet rs = stmt.executeQuery("SELECT 1")) {
// Se la query non solleva eccezioni, il vincolo è valido
logger.trace(String.format("Vincolo %s superato controllo integrità", constraint));
} catch (SQLException e) {
logger.warn(String.format("Violazione integrità per vincolo %s: %s", constraint, e.getMessage()));
allValid = false;
}
}
}
return allValid;
}
/**
* Trova tutte le dipendenze foreign key di una tabella/colonna
*/
private List<ForeignKeyDependency> findAllDependencies(String tableName, String columnName) throws SQLException {
List<ForeignKeyDependency> dependencies = new ArrayList<>();
String query = "SELECT \n" +
" fk.name AS constraint_name,\n" +
" OBJECT_SCHEMA_NAME(fk.parent_object_id) AS dependent_schema,\n" +
" OBJECT_NAME(fk.parent_object_id) AS dependent_table,\n" +
" COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS dependent_column,\n" +
" OBJECT_SCHEMA_NAME(fk.referenced_object_id) AS referenced_schema,\n" +
" OBJECT_NAME(fk.referenced_object_id) AS referenced_table,\n" +
" COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) AS referenced_column\n" +
" FROM sys.foreign_keys fk\n" +
" INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id\n" +
" WHERE OBJECT_NAME(fk.referenced_object_id) = ?\n" +
" AND COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) = ?\n" +
" ORDER BY dependent_table";
try (PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setString(1, tableName);
stmt.setString(2, columnName);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
ForeignKeyDependency dependency = new ForeignKeyDependency(
rs.getString("constraint_name"),
rs.getString("dependent_schema"),
rs.getString("dependent_table"),
rs.getString("dependent_column"),
rs.getString("referenced_schema"),
rs.getString("referenced_table"),
rs.getString("referenced_column")
);
dependencies.add(dependency);
}
}
}
return dependencies;
}
/**
* Aggiorna una tabella dipendente
*/
private void updateDependentTable(ForeignKeyDependency dependency, Object oldValue, Object newValue) throws SQLException {
String updateQuery = String.format(
"UPDATE [%s].[%s] SET [%s] = ? WHERE [%s] = ?",
dependency.getDependentSchema(),
dependency.getDependentTable(),
dependency.getDependentColumn(),
dependency.getDependentColumn()
);
try (PreparedStatement stmt = connection.prepareStatement(updateQuery)) {
stmt.setObject(1, newValue);
stmt.setObject(2, oldValue);
int rowsAffected = stmt.executeUpdate();
logger.info(String.format("Aggiornate %d righe in %s.%s",
rowsAffected, dependency.getDependentTable(), dependency.getDependentColumn()));
}
}
/**
* Aggiorna la tabella principale
*/
private void updateMainTable(String tableName, String columnName, Object oldValue, Object newValue) throws SQLException {
String updateQuery = String.format("UPDATE [%s] SET [%s] = ? WHERE [%s] = ?",
tableName, columnName, columnName);
try (PreparedStatement stmt = connection.prepareStatement(updateQuery)) {
stmt.setObject(1, newValue);
stmt.setObject(2, oldValue);
int rowsAffected = stmt.executeUpdate();
logger.info(String.format("Aggiornate %d righe nella tabella principale %s.%s",
rowsAffected, tableName, columnName));
}
}
/**
* Verifica se un valore esiste già come chiave primaria
*/
public boolean checkIfValueExists(String tableName, String columnName, Object value) throws SQLException {
String query = String.format("SELECT COUNT(*) FROM [%s] WHERE [%s] = ?", tableName, columnName);
try (PreparedStatement stmt = connection.prepareStatement(query)) {
stmt.setObject(1, value);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
return rs.getInt(1) > 0;
}
}
}
return false;
}
/**
* Ottiene un rapporto dettagliato delle dipendenze prima dell'aggiornamento
*/
public ForeignKeyDependencyReport getDependencyReport(String tableName, String columnName, Object value) throws SQLException {
List<ForeignKeyDependency> dependencies = findAllDependencies(tableName, columnName);
ForeignKeyDependencyReport report = new ForeignKeyDependencyReport();
for (ForeignKeyDependency dependency : dependencies) {
int count = countDependentRecords(dependency, value);
report.addDependency(dependency, count);
}
return report;
}
private int countDependentRecords(ForeignKeyDependency dependency, Object value) throws SQLException {
String countQuery = String.format(
"SELECT COUNT(*) FROM [%s].[%s] WHERE [%s] = ?",
dependency.getDependentSchema(),
dependency.getDependentTable(),
dependency.getDependentColumn()
);
try (PreparedStatement stmt = connection.prepareStatement(countQuery)) {
stmt.setObject(1, value);
try (ResultSet rs = stmt.executeQuery()) {
return rs.next() ? rs.getInt(1) : 0;
}
}
}
// Setter per modificare il comportamento sui vincoli FK
public void setDisableForeignKeyChecks(boolean disableForeignKeyChecks) {
this.disableForeignKeyChecks = disableForeignKeyChecks;
}
public boolean isDisableForeignKeyChecks() {
return disableForeignKeyChecks;
}
}

View File

@@ -0,0 +1,40 @@
package it.integry.ems.entity_logger.db_schema_manager.dto;
public class ForeignKeyDependency {
private final String constraintName;
private final String dependentSchema;
private final String dependentTable;
private final String dependentColumn;
private final String referencedSchema;
private final String referencedTable;
private final String referencedColumn;
public ForeignKeyDependency(String constraintName, String dependentSchema,
String dependentTable, String dependentColumn,
String referencedSchema, String referencedTable,
String referencedColumn) {
this.constraintName = constraintName;
this.dependentSchema = dependentSchema;
this.dependentTable = dependentTable;
this.dependentColumn = dependentColumn;
this.referencedSchema = referencedSchema;
this.referencedTable = referencedTable;
this.referencedColumn = referencedColumn;
}
// Getter methods
public String getConstraintName() { return constraintName; }
public String getDependentSchema() { return dependentSchema; }
public String getDependentTable() { return dependentTable; }
public String getDependentColumn() { return dependentColumn; }
public String getReferencedSchema() { return referencedSchema; }
public String getReferencedTable() { return referencedTable; }
public String getReferencedColumn() { return referencedColumn; }
@Override
public String toString() {
return String.format("%s.%s.%s -> %s.%s.%s",
dependentSchema, dependentTable, dependentColumn,
referencedSchema, referencedTable, referencedColumn);
}
}

View File

@@ -0,0 +1,37 @@
package it.integry.ems.entity_logger.db_schema_manager.dto;
import java.util.HashMap;
import java.util.Map;
public class ForeignKeyDependencyReport {
private final Map<ForeignKeyDependency, Integer> dependencyCount = new HashMap<>();
public void addDependency(ForeignKeyDependency dependency, int count) {
dependencyCount.put(dependency, count);
}
public Map<ForeignKeyDependency, Integer> getDependencies() {
return new HashMap<>(dependencyCount);
}
public int getTotalRecordsAffected() {
return dependencyCount.values().stream().mapToInt(Integer::intValue).sum();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("=== RAPPORTO DIPENDENZE ===\n");
for (Map.Entry<ForeignKeyDependency, Integer> entry : dependencyCount.entrySet()) {
sb.append(String.format("Tabella: %s.%s, Colonna: %s, Record da aggiornare: %d\n",
entry.getKey().getDependentSchema(),
entry.getKey().getDependentTable(),
entry.getKey().getDependentColumn(),
entry.getValue()));
}
sb.append(String.format("TOTALE RECORD DA AGGIORNARE: %d\n", getTotalRecordsAffected()));
return sb.toString();
}
}

View File

@@ -6,7 +6,7 @@ import it.integry.annotations.PostContextConstruct;
import it.integry.ems.entity_logger.db_schema_manager.component.SQLServerDBSchemaManager;
import it.integry.ems.entity_logger.db_schema_manager.dto.*;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -57,7 +57,7 @@ public class EntityLoggerComponent {
private void syncDBScheme() throws Exception {
AvailableConnectionModel connectionsModel = settingsModel.getDefaultConnectionModel();
AvailableConnectionsModel connectionsModel = settingsModel.getDefaultConnectionModel();
if (connectionsModel == null) {
throw new Exception("Impossibile ricavare la default connection");
@@ -107,7 +107,7 @@ public class EntityLoggerComponent {
}
if (settingsModel.getAvailableConnections().stream().noneMatch(x -> x.getDbName().equalsIgnoreCase(destDBName))) {
settingsModel.addAvailableConnection(new AvailableConnectionModel()
settingsModel.addAvailableConnection(new AvailableConnectionsModel()
.setInternalDb(false)
.setHost(dbHost)
.setUsername(dbUsername)
@@ -210,12 +210,12 @@ public class EntityLoggerComponent {
return;
try {
List<AvailableConnectionModel> connectionsModels = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
List<AvailableConnectionsModel> connectionsModels = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true);
String historyProfileDB = settingsController.getHistoryProfileDb();
try (MultiDBTransactionManager historyMultiDB = new MultiDBTransactionManager(historyProfileDB)) {
for (AvailableConnectionModel sourceConnectionModel : connectionsModels) {
for (AvailableConnectionsModel sourceConnectionModel : connectionsModels) {
String sql = "SELECT * FROM stb_log_entity_setup" +
" WHERE entity_name <> " + UtilityDB.valueToString(StbLogEntitySetup.ENTITY);

View File

@@ -1,7 +0,0 @@
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

@@ -1,7 +0,0 @@
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

@@ -1,7 +0,0 @@
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,7 +2,6 @@ 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;
@@ -11,7 +10,6 @@ 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;
@@ -78,16 +76,8 @@ public class TxtMapper<T> {
if (ignorePosition)
stringBuilder.append(value).append(fieldsSplitChar);
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);
}
}
else
stringBuilder.insert(dtoField.startPosition(), value).append(fieldsSplitChar);
}
} catch (Exception e) {
logger.error(e);
@@ -218,8 +208,6 @@ 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,11 +2,8 @@ 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;
@@ -40,16 +37,12 @@ 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;
private boolean includeNulls = false;
private IntegryApplicationEnum integryApplication;
private IntegryApplicationEnum integryApplication = IntegryApplicationEnum.PVM;
private UserDTO userDTO;
@@ -62,10 +55,6 @@ 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);
@@ -109,20 +98,10 @@ public class RequestDataDTO {
.setPassword("sql");
}
public static RequestDataDTO scheduledOperationsMockupData() {
return new RequestDataDTO()
.setUsername("INTEGRY")
.setPassword("INTEGRY");
}
public boolean isValidProfileDB() {
return !UtilityString.isNullOrEmpty(profileDB);
}
public boolean isValidCodMdep() {
return !UtilityString.isNullOrEmpty(codMdep);
}
public boolean isValidDeviceId() {
return deviceId != null;
}
@@ -153,20 +132,6 @@ 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,7 +33,6 @@ 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

@@ -1,8 +1,7 @@
package it.integry.ems.license;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.common.var.CommonConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
@@ -12,6 +11,7 @@ import java.util.Random;
public class LicenseCheckInterceptor extends HandlerInterceptorAdapter {
@Autowired
private LicenseComponent licenseComponent;
@@ -19,9 +19,13 @@ public class LicenseCheckInterceptor extends HandlerInterceptorAdapter {
HttpServletRequest request,
HttpServletResponse response, Object handler) {
RequestDataDTO requestData = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
String profileDB = requestData.getProfileDB();
String profileDB = null;
if (request != null && request.getQueryString() != null && request.getQueryString().contains(CommonConstants.PROFILE_DB)) {
profileDB = request.getParameter(CommonConstants.PROFILE_DB);
} else if (request != null && request.getHeader(CommonConstants.PROFILE_DB) != null) {
profileDB = request.getHeader(CommonConstants.PROFILE_DB);
}
LicenseStatusDTO licenseStatusDTO = null;
if (profileDB != null) licenseStatusDTO = licenseComponent.getLicenseStatus(profileDB);

View File

@@ -8,7 +8,7 @@ import it.integry.ems.json.ResponseJSONObjectMapper;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.service.HttpRestWrapper;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -25,7 +25,6 @@ import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
@Component
@@ -60,11 +59,11 @@ public class LicenseComponent {
if (!canStart)
return;
List<AvailableConnectionModel> availableConnectionModels = settingsModel.getAvailableConnections(true);
List<AvailableConnectionsModel> availableConnectionsModels = settingsModel.getAvailableConnections(true);
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager()) {
for (AvailableConnectionModel model : availableConnectionModels) {
for (AvailableConnectionsModel model : availableConnectionsModels) {
multiDBTransactionManager.addConnection(model);
}
@@ -106,19 +105,14 @@ public class LicenseComponent {
} else {
List<LicenseStatusDTO> licenses = response.getDTO(new TypeReference<List<LicenseStatusDTO>>() {
});
if (licenses == null || licenses.isEmpty()) return;
if (licenses == null) return;
listAziende.forEach((key, value) -> {
cachedLicenseStatus.remove(key);
final Optional<LicenseStatusDTO> licenseSearch = licenses.stream().filter(x -> x.getPartIva().equalsIgnoreCase(value))
.findFirst();
if (licenseSearch.isPresent()) {
cachedLicenseStatus.put(key, licenseSearch.get());
} else {
cachedLicenseStatus.put(key, licenses.get(0));
}
licenses.stream().filter(x -> x.getPartIva().equalsIgnoreCase(value))
.findFirst()
.ifPresent(license -> cachedLicenseStatus.put(key, license));
});
}

View File

@@ -10,13 +10,10 @@ import java.util.Date;
public class LicenseStatusDTO {
@SqlField("part_iva")
private String partIva;
@SqlField("classe_merito")
private Quality quality;
@SqlField
private Status status;
@SqlField("data_scad_license")
private Date expiringDate;

View File

@@ -11,7 +11,7 @@ import java.util.ArrayList;
import java.util.Random;
@Component
public class LooperService {
public class LooperService {
private final ArrayList<LoopDTO> mLoopsHandler = new ArrayList<>();
private final ArrayList<TaskModel> mLoopsTask = new ArrayList<>();

View File

@@ -17,12 +17,10 @@ import it.integry.ems_model.exception.DataConverterNotFoundException;
import it.integry.ems_model.rulescompleting.DroolsDataCompleting;
import it.integry.ems_model.types.ApplicationName;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.types.TypeDbObject;
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;
@@ -76,18 +74,6 @@ 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);
}
@@ -154,10 +140,6 @@ 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);
@@ -172,20 +154,7 @@ 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 {
UtilityDB.cloneTable(connection, sourceTable, newTable, fillNewTable, dropOldTable, renameNewTable);
}
protected boolean existIndex(String tableName, String indexName) throws SQLException {
return UtilityDB.existIndex(connection, tableName, indexName);
}
protected void dropIndex(String tableName, String indexName) throws SQLException {
protected void dropIndex(String tableName, String indexName) throws Exception {
UtilityDB.dropIndex(connection, tableName, indexName);
}
@@ -423,25 +392,6 @@ 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)
@@ -524,16 +474,6 @@ 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 {
@@ -654,38 +594,4 @@ public abstract class BaseMigration implements MigrationModelInterface {
protected boolean isSqlServer2022() throws Exception {
return getSqlCompatibilityLevel() == DatabaseVersionEnum.SQLServer2022;
}
protected void addDescriptionTable(String tableName, String description) throws SQLException {
if (existsTable(tableName)) {
addDescriptionObject(tableName, TypeDbObject.TABLE, description);
}
}
protected void addDescriptionView(String viewName, String description) throws SQLException {
if (existsView(viewName)) {
addDescriptionObject(viewName, TypeDbObject.VIEW, description);
}
}
private void addDescriptionObject(String objectName, TypeDbObject type, String description) throws SQLException {
String typeString = "TABLE";
if (type == TypeDbObject.VIEW) {
typeString = "VIEW";
}
executeStatement(
Query.format("EXEC sp_addextendedproperty " +
"@name = N'MS_Description', " +
"@value = %s, " +
"@level0type = N'SCHEMA', @level0name = 'dbo', " +
"@level1type = %s, @level1name = %s;", description, typeString, objectName));
}
private void addDescriptionColumn(String tableName, String columnName, String description) throws SQLException {
executeStatement(Query.format("EXEC sp_addextendedproperty 'MS_Description', %s, 'SCHEMA', 'dbo', 'TABLE',%s, 'COLUMN', %s)",
description, tableName, columnName));
}
}

View File

@@ -8,7 +8,7 @@ public enum IntegryCustomer {
IntegryCustomerDB.Agricoper_IlVisone,
IntegryCustomerDB.Agricoper_Luva),
ATI(IntegryCustomerDB.ATI, IntegryCustomerDB.ATI_Finpart),
ATI(IntegryCustomerDB.ATI_Finpart),
Auricchio(IntegryCustomerDB.Auricchio_Auricchio,
IntegryCustomerDB.Auricchio_AuricchioMiki,
IntegryCustomerDB.Auricchio_AuricchioSrl,
@@ -20,7 +20,6 @@ public enum IntegryCustomer {
Biolevante(IntegryCustomerDB.Biolevante_Biolevante,
IntegryCustomerDB.Biolevante_BiolevanteStorico,
IntegryCustomerDB.Biolevante_TenutaSanMartino),
CapelliMonelli(IntegryCustomerDB.CapelliMonelli_CapelliMonelli),
Carelli(IntegryCustomerDB.Carelli_Carelli,
IntegryCustomerDB.Carelli_GestFood,
IntegryCustomerDB.Carelli_Chiuso,
@@ -71,8 +70,7 @@ public enum IntegryCustomer {
Gramm(IntegryCustomerDB.Gramm_Gramm,
IntegryCustomerDB.Gramm_PrimeOlive,
IntegryCustomerDB.Gramm_ProveStage,
IntegryCustomerDB.Gramm_2MHolding,
IntegryCustomerDB.Gramm_GrammUsa),
IntegryCustomerDB.Gramm_2MHolding),
Idrotecnica(IntegryCustomerDB.Idrotecnica_Idrotecnica),
Igood(IntegryCustomerDB.Igood_Aida,
IntegryCustomerDB.Igood_Igood,
@@ -119,10 +117,7 @@ public enum IntegryCustomer {
IntegryCustomerDB.Suit_TenutaArianna,
IntegryCustomerDB.Suit_Valpietro),
Tempesta(IntegryCustomerDB.Tempesta_Tempesta,
IntegryCustomerDB.Tempesta_DI,
IntegryCustomerDB.Tempesta_VivaiTempesta,
IntegryCustomerDB.Tempesta_VivaiTempesta_DI
),
IntegryCustomerDB.Tempesta_VivaiTempesta),
Tosca(IntegryCustomerDB.Tosca_Ba,
IntegryCustomerDB.Tosca_Ce,
IntegryCustomerDB.Tosca_Cz,

View File

@@ -1,6 +1,5 @@
package it.integry.ems.migration._base;
import it.integry.ems.exception.InvalidCustomerDbException;
import it.integry.ems_model.utility.UtilityString;
import java.util.Arrays;
@@ -10,9 +9,7 @@ public enum IntegryCustomerDB {
Agricoper_IlVisone("ilvisone"),
Agricoper_Luva("luva"),
ATI("atisrl"),
ATI_Finpart("Finpart"),
Auricchio_Auricchio("auricchio"),
Auricchio_AuricchioMiki("auricchio_miki"),
Auricchio_AuricchioSrl("auricchiosrl"),
@@ -27,14 +24,12 @@ public enum IntegryCustomerDB {
Biolevante_BiolevanteStorico("biolevante_storico"),
Biolevante_TenutaSanMartino("tenutasanmartino"),
CapelliMonelli_CapelliMonelli("capelli_monelli"),
Carelli_Carelli("carelli"),
Carelli_GestFood("gestfood"),
Carelli_Chiuso("chiuso"),
Carelli_Format("format"),
Carelli_Murgia("murgia"),
Carelli_MurgiaTest("murgia_test"),
Carelli_Panimal("panimal"),
Carelli_Winact("winact"),
Carelli_Csgr("csgr"),
@@ -93,11 +88,10 @@ public enum IntegryCustomerDB {
Frudis_Frudis("frudis"),
Gramm_Gramm("gramm"),
Gramm_Gramm("gramm_peppe"),
Gramm_PrimeOlive("primeolive"),
Gramm_ProveStage("grammprovestage"),
Gramm_2MHolding("dueemme"),
Gramm_GrammUsa("gramm_usa"),
Gramm_2MHolding("2M_HOLDING"),
Idrotecnica_Idrotecnica("idrotecnica"),
@@ -108,7 +102,7 @@ public enum IntegryCustomerDB {
Igood_ShopService("shop_service"),
Ime_ImeTe("ime_te"),
Ime_ImeTe("ime_te_peppe"),
Integry_Studioml("studioml"),
@@ -128,7 +122,6 @@ public enum IntegryCustomerDB {
Levanplast_Perilflor("perilflor"),
Levanplast_PerilflorSrl("perilflorsrl"),
Levanplast_Levanplast("levanplast"),
Levanplast_Levanplastsrl("levanplastsrl"),
Maggio_MaggioSrl("maggiosrl"),
Maggio_GiovMaggio("giovmaggio"),
@@ -198,9 +191,7 @@ public enum IntegryCustomerDB {
Tempesta_Tempesta("tempesta"),
Tempesta_DI("tempestadi"),
Tempesta_VivaiTempesta("vivaitempesta"),
Tempesta_VivaiTempesta_DI("vivaitempestadi"),
Tosca_Ba("tosca_ba"),
@@ -238,6 +229,6 @@ public enum IntegryCustomerDB {
return Arrays.stream(values()).filter(x -> x.getValue().equalsIgnoreCase(value))
.findFirst()
.orElseThrow(() -> new InvalidCustomerDbException(value));
.orElse(null);
}
}

View File

@@ -0,0 +1,508 @@
package it.integry.ems.migration.dto.common;
import it.integry.ems.migration.dto.SqlObjectTypeEnum;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
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 java.io.IOException;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDate;
import java.util.ArrayList;
public class MigrationMvwSitArtUdcDetInventarioDTO {
public static void apply(Connection connection) throws Exception {
//Aggiorno i campi barcode_ul_in, barcode_ul_out, posizione_in, posizione_out, cod_mdep_in, cod_mdep_out
updateNewFieldsInMtbColrs(connection);
//Migration di conversione aziende a nuova mvw_sitart_udc_det_inventario
createBackupOfOldView(connection);
dropView(connection, "mvw_sitart_udc_det_inventario");
createNewView(connection);
}
public static void updateNewFieldsInMtbColrs(Connection connection) throws Exception {
executeStatement(connection, "UPDATE mtb_colr\n" +
"SET barcode_ul_in = new_data.barcode_ul_in,\n" +
" barcode_ul_out = new_data.barcode_ul_out,\n" +
" posizione_in = new_data.posizione_in,\n" +
" posizione_out = new_data.posizione_out,\n" +
" cod_mdep_in = new_data.cod_mdep_in,\n" +
" cod_mdep_out = new_data.cod_mdep_out\n" +
"FROM mtb_colr\n" +
" INNER JOIN (SELECT mtb_colt.barcode_ul AS barcode_ul_in,\n" +
" IIF(num_collo_rif IS NOT NULL, mtb_colt_rif.barcode_ul, NULL) AS barcode_ul_out,\n" +
" mtb_colt.posizione AS posizione_in,\n" +
" IIF(num_collo_rif IS NOT NULL, mtb_colt_rif.posizione, NULL) AS posizione_out,\n" +
" mtb_colt.cod_mdep AS cod_mdep_in,\n" +
" IIF(num_collo_rif IS NOT NULL, mtb_colt_rif.cod_mdep, NULL) AS cod_mdep_out,\n" +
"\n" +
" mtb_colr.gestione,\n" +
" mtb_colr.data_collo,\n" +
" mtb_colr.ser_collo,\n" +
" mtb_colr.num_collo,\n" +
" mtb_colr.riga\n" +
"\n" +
" FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.mtb_colt ON mtb_colr.gestione = mtb_colt.gestione AND\n" +
" mtb_colr.data_collo = mtb_colt.data_collo AND\n" +
" mtb_colr.ser_collo = mtb_colt.ser_collo AND\n" +
" mtb_colr.num_collo = mtb_colt.num_collo\n" +
"\n" +
" LEFT OUTER JOIN dbo.mtb_colt mtb_colt_rif\n" +
" ON mtb_colr.gestione_rif = mtb_colt_rif.gestione AND\n" +
" mtb_colr.data_collo_rif = mtb_colt_rif.data_collo AND\n" +
" mtb_colr.ser_collo_rif = mtb_colt_rif.ser_collo AND\n" +
" mtb_colr.num_collo_rif = mtb_colt_rif.num_collo) new_data\n" +
" ON mtb_colr.gestione = new_data.gestione AND\n" +
" mtb_colr.num_collo = new_data.num_collo AND\n" +
" mtb_colr.ser_collo = new_data.ser_collo AND\n" +
" mtb_colr.data_collo = new_data.data_collo AND\n" +
" mtb_colr.riga = new_data.riga");
}
public static void alignGiacenza(Connection connection) throws Exception {
//Creo un collo di scarico vuoto
MtbColt mtbColt = new MtbColt()
.setGestione("L")
.setSerCollo("RT")
.setSegno(-1)
.setDataCollo(LocalDate.now())
.setAnnotazioni("PASSAGGIO NUOVA MVW_SITART_UDC_DET_INVENTARIO")
.setCodMdep(getInternalCodMdep(connection));
mtbColt.setOperation(OperationType.INSERT);
mtbColt.dataCompleting(connection);
mtbColt.manageWithParentConnection(connection);
executeStatement(connection, Query.format(
"INSERT INTO mtb_colr (gestione, ser_collo, num_collo, data_collo, riga, cod_mart, cod_col, cod_tagl, partita_mag, gestione_rif, data_collo_rif, ser_collo_rif, num_collo_rif, datetime_row,\n" +
" cod_jcom, qta_col, num_cnf, qta_cnf, barcode_ul_out, cod_mdep_out, posizione_out)" +
" SELECT {} AS gestione,\n" +
" {} AS ser_collo,\n" +
" {} AS num_collo,\n" +
" CAST({} AS DATE) AS data_collo,\n" +
" ROW_NUMBER() OVER (PARTITION BY (SELECT NULL) ORDER BY v.data_collo) AS riga,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.gestione AS gestion_rif,\n" +
" v.data_collo AS data_collo_rif,\n" +
" v.ser_collo AS ser_collo_rif,\n" +
" v.num_collo AS num_collo_rif,\n" +
" GETDATE() AS datetime_row,\n" +
" v.cod_jcom,\n" +
" v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.barcode_ul AS barcode_ul_out,\n" +
" v.cod_mdep AS cod_mdep_out,\n" +
" v.posizione AS posizione_out\n" +
"FROM mvw_sitart_udc_det_inventario v\n" +
" INNER JOIN (SELECT ser_collo,\n" +
" gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_jcom-- Elenca tutte le colonne coinvolte\n" +
" FROM mvw_sitart_udc_det_inventario\n" +
"\n" +
" EXCEPT\n" +
"\n" +
" SELECT ser_collo,\n" +
" gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_jcom -- Elenca le stesse colonne dalla vista vecchia\n" +
" FROM mvw_sitart_udc_det_inventario_old) t\n" +
" ON v.num_collo = t.num_collo AND v.data_collo = t.data_collo AND\n" +
" v.ser_collo = t.ser_collo AND v.gestione = t.gestione AND\n" +
" v.cod_mart = t.cod_mart AND v.cod_mdep = t.cod_mdep AND\n" +
" ISNULL(v.partita_mag, '') = ISNULL(t.partita_mag, '') AND\n" +
" ISNULL(v.posizione, '') = ISNULL(t.posizione, '') AND\n" +
" ISNULL(v.cod_jcom, '') = ISNULL(t.cod_jcom, '')" +
" WHERE qta_col > 0",
mtbColt.getGestione(), mtbColt.getSerCollo(), mtbColt.getNumCollo(), mtbColt.getDataCollo()));
}
private static String getInternalCodMdep(Connection connection) throws Exception {
String codMdepAz = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, "SELECT TOP 1 cod_mdep" +
" FROM mtb_depo" +
" INNER JOIN dbo.gtb_anag ga ON mtb_depo.cod_anag = ga.cod_anag" +
" inner join azienda on ga.part_iva = azienda.part_iva");
if(UtilityString.isNullOrEmpty(codMdepAz)) {
codMdepAz = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, "SELECT TOP 1 cod_mdep FROM mtb_depo");
}
return codMdepAz;
}
private static void createBackupOfOldView(Connection connection) throws Exception {
if (existsView(connection, "mvw_sitart_udc_det_inventario_old"))
return;
createOrUpdateView(connection, "mvw_sitart_udc_det_inventario_old", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario_old] AS\n" +
"SELECT UL.gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" segno,\n" +
" UL.cod_mdep,\n" +
" UL.posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" mtb_aart.cod_mgrp AS codGruppo,\n" +
" mtb_grup.descrizione AS Gruppo,\n" +
" mtb_aart.cod_msgr AS CodSgruppo,\n" +
" mtb_sgrp.descrizione AS Sottogruppo,\n" +
" UL.cod_mart,\n" +
" diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag,\n" +
" UL.cod_jcom,\n" +
" jtb_comt.descrizione AS commessa,\n" +
" mtb_aart.unt_mis,\n" +
" qta_col,\n" +
" num_cnf,\n" +
" UL.qta_cnf,\n" +
" UL.peso_netto_kg,\n" +
" UL.peso_lordo_kg,\n" +
" UL.cod_jfas\n" +
"FROM [mvw_sitart_udc_det] UL\n" +
" LEFT OUTER JOIN jtb_comt ON UL.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON UL.cod_mdep = mtb_depo_posizioni.cod_mdep AND UL.posizione = mtb_depo_posizioni.posizione,\n" +
" mtb_aart,\n" +
" mtb_grup,\n" +
" mtb_sgrp\n" +
"WHERE UL.cod_mart = mtb_aart.cod_mart\n" +
" AND mtb_aart.cod_mgrp = mtb_grup.cod_mgrp\n" +
" AND mtb_aart.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND mtb_aart.cod_msgr = mtb_sgrp.cod_msgr\n" +
" AND qta_col <> 0");
}
private static void createNewView(Connection connection) throws Exception {
if (!existsTable(connection, "stb_multiplier")) {
executeStatement(connection, "CREATE TABLE stb_multiplier\n" +
"(\n" +
" moltiplicatore INT NOT NULL\n" +
")",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (1)",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)");
}
createOrUpdateView(connection, "mvw_mtb_colr_with_giacenza", "CREATE VIEW dbo.mvw_mtb_colr_with_giacenza\n" +
" WITH SCHEMABINDING\n" +
" AS\n" +
"SELECT COUNT_BIG(*) AS c,\n" +
" IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" +
" mtb_colr.barcode_ul_in) AS barcode_ul,\n" +
" IIF(moltiplicatore = -1, mtb_colr.cod_mdep_out,\n" +
" mtb_colr.cod_mdep_in) AS cod_mdep,\n" +
" IIF(moltiplicatore = -1, mtb_colr.posizione_out,\n" +
" mtb_colr.posizione_in) AS posizione,\n" +
" SUM(mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" +
" SUM(IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" +
" moltiplicatore) AS num_cnf,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" SUM(mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" +
" SUM(mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf AS qta_cnf_anag\n" +
"FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.stb_multiplier ON (moltiplicatore = 1 AND mtb_colr.barcode_ul_in IS NOT NULL) OR\n" +
" (moltiplicatore = -1 AND mtb_colr.barcode_ul_out IS NOT NULL)\n" +
" INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
"GROUP BY mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" +
" mtb_colr.barcode_ul_in),\n" +
" IIF(moltiplicatore = -1, mtb_colr.cod_mdep_out,\n" +
" mtb_colr.cod_mdep_in),\n" +
" IIF(moltiplicatore = -1, mtb_colr.posizione_out,\n" +
" mtb_colr.posizione_in),\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom),\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf");
dropIndex(connection, "mvw_mtb_colr_with_giacenza", "IDX_CLUSTERED_mvw_mtb_colr_with_giacenza");
createIndex(connection, new IndexTableDTO()
.setIndexName("IDX_CLUSTERED_mvw_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setUnique(true)
.setClustered(true)
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("barcode_ul"));
add(new IndexTableDTO.ColumnIndex("posizione"));
add(new IndexTableDTO.ColumnIndex("cod_mdep"));
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
add(new IndexTableDTO.ColumnIndex("cod_jcom"));
}}));
dropIndex(connection, "mvw_mtb_colr_with_giacenza", "IDX_mvw_qta_mtb_colr_with_giacenza");
createIndex(connection, new IndexTableDTO()
.setIndexName("IDX_mvw_qta_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("qta_col"));
add(new IndexTableDTO.ColumnIndex("num_cnf"));
}}));
dropIndex(connection, "mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_mtb_colr_with_giacenza");
createIndex(connection, new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}}));
dropIndex(connection, "mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_giac_mtb_colr_with_giacenza");
createIndex(connection, new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_giac_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}})
.setColumnsInclude("qta_col", "num_cnf"));
executeStatement(connection, "UPDATE STATISTICS dbo.mvw_mtb_colr_with_giacenza");
createOrUpdateView(connection, "mvw_sitart_udc_det_inventario", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario] AS\n" +
" WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.ser_collo,\n" +
" mtb_colt.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" v.cod_mdep,\n" +
" v.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" v.barcode_ul,\n" +
" v.qta_cnf_anag\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.barcode_ul = mtb_colt.barcode_ul\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND mtb_colt.gestione = 'V'))\n" +
" ),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
" SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul\n" +
" FROM final_stock");
}
private static boolean existsView(Connection connection, String objectName) throws SQLException {
return UtilityDB.<Integer>executeSimpleQueryOnlyFirstRowFirstColumn(connection, "SELECT COUNT(*) FROM SYSOBJECTS WHERE id = object_id('" + objectName + "')") > 0;
}
private static void dropView(Connection connection, String objectName) throws SQLException, IOException {
UtilityDB.executeStatement(connection, "IF EXISTS (SELECT * FROM SYSOBJECTS WHERE id = object_id('" + objectName + "'))\r\n" +
"\tDROP " + SqlObjectTypeEnum.VIEW.toString() + " " + objectName);
}
private static boolean existsTable(Connection connection, String tableName) throws SQLException, IOException {
String schema = null;
if (tableName.contains(".")) {
schema = tableName.substring(0, tableName.indexOf("."));
tableName = tableName.replace(schema + ".", "");
}
String sql = Query.format("SELECT CAST(COUNT(*) AS BIT) AS exist FROM INFORMATION_SCHEMA.TABLES " +
"WHERE TABLE_NAME = N%s ", tableName);
if (schema != null)
sql += Query.format("AND TABLE_SCHEMA = N%s", schema);
return UtilityDB.<Boolean>executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
}
private static void createIndex(Connection connection, IndexTableDTO indexTableDTO) throws Exception {
UtilityDB.createIndex(connection, indexTableDTO);
}
private static void dropIndex(Connection connection, String tableName, String indexName) throws Exception {
UtilityDB.dropIndex(connection, tableName, indexName);
}
private static void executeStatement(Connection connection, String... sqls) throws SQLException {
try (Statement statement = connection.createStatement()) {
for (String sql : sqls) {
statement.execute(sql);
}
}
}
private static void createOrUpdateView(Connection connection, String objectName, String createViewSql) throws SQLException, IOException {
alterObject(connection, SqlObjectTypeEnum.VIEW, objectName, createViewSql);
}
private static void alterObject(Connection connection, SqlObjectTypeEnum sqlObject, String objectName, String sql) throws SQLException, IOException {
executeStatement(connection, "IF EXISTS (SELECT * FROM SYSOBJECTS WHERE id = object_id('" + objectName + "'))\r\n" +
"\tDROP " + sqlObject.toString() + " " + objectName,
sql);
}
}

View File

@@ -2,7 +2,7 @@ package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.utility.UtilityDB;
@@ -14,7 +14,7 @@ public class Migration_20210721093948 extends BaseMigration implements Migration
@Override
public void up() throws Exception {
AvailableConnectionModel historyDBModel = settingsController.getHistoryDbConnectionModel();
AvailableConnectionsModel historyDBModel = settingsController.getHistoryDbConnectionModel();
if (!settingsModel.getDefaultProfile().equalsIgnoreCase(connection.getProfileName()))
return;

View File

@@ -2,7 +2,7 @@ package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems.settings.Model.AvailableConnectionModel;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems_model.utility.UtilityDB;
@@ -14,7 +14,7 @@ public class Migration_20210924152555 extends BaseMigration implements Migration
@Override
public void up() throws Exception {
AvailableConnectionModel historyDBModel = settingsController.getHistoryDbConnectionModel();
AvailableConnectionsModel historyDBModel = settingsController.getHistoryDbConnectionModel();
if (!settingsModel.getDefaultProfile().equalsIgnoreCase(connection.getProfileName()))
return;

View File

@@ -6,7 +6,6 @@ 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;
@@ -58,7 +57,7 @@ public class Migration_20220413102657 extends BaseMigration implements Migration
.setUserCode(wtbUser.getUserCode())
.setDetails(wtbUser.getDetails())
.setLastAccessDatetime(wtbUser.getLastAccessDatetime())
.setPasswordEndtime(UtilityLocalDate.localDateTimeFromDate(wtbUser.getPasswordEndtime()))
.setPasswordEndtime(wtbUser.getPasswordEndtime())
.setUrlCss(wtbUser.getUrlCss())
.setCodLang(wtbUser.getCodLang())
.setCreationDatetime(wtbUser.getCreationDatetime())

View File

@@ -3,14 +3,7 @@ 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.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import java.time.LocalDate;
import java.util.ArrayList;
import it.integry.ems.migration.dto.common.MigrationMvwSitArtUdcDetInventarioDTO;
public class Migration_20241213163759 extends BaseMigration implements MigrationModelInterface {
@@ -22,381 +15,8 @@ public class Migration_20241213163759 extends BaseMigration implements Migration
if (!isCustomer(IntegryCustomer.RossoGargano))
return;
//Migration di conversione aziende a nuova mvw_sitart_udc_det_inventario
createBackupOfOldView();
dropView("mvw_sitart_udc_det_inventario");
createNewView();
alignGiacenza();
}
private void createBackupOfOldView() throws Exception {
if (existsView("mvw_sitart_udc_det_inventario_old"))
return;
createOrUpdateView("mvw_sitart_udc_det_inventario_old", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario_old] AS\n" +
"SELECT UL.gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" segno,\n" +
" UL.cod_mdep,\n" +
" UL.posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" mtb_aart.cod_mgrp AS codGruppo,\n" +
" mtb_grup.descrizione AS Gruppo,\n" +
" mtb_aart.cod_msgr AS CodSgruppo,\n" +
" mtb_sgrp.descrizione AS Sottogruppo,\n" +
" UL.cod_mart,\n" +
" diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag,\n" +
" UL.cod_jcom,\n" +
" jtb_comt.descrizione AS commessa,\n" +
" mtb_aart.unt_mis,\n" +
" qta_col,\n" +
" num_cnf,\n" +
" UL.qta_cnf,\n" +
" UL.peso_netto_kg,\n" +
" UL.peso_lordo_kg,\n" +
" UL.cod_jfas\n" +
"FROM [mvw_sitart_udc_det] UL\n" +
" LEFT OUTER JOIN jtb_comt ON UL.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON UL.cod_mdep = mtb_depo_posizioni.cod_mdep AND UL.posizione = mtb_depo_posizioni.posizione,\n" +
" mtb_aart,\n" +
" mtb_grup,\n" +
" mtb_sgrp\n" +
"WHERE UL.cod_mart = mtb_aart.cod_mart\n" +
" AND mtb_aart.cod_mgrp = mtb_grup.cod_mgrp\n" +
" AND mtb_aart.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND mtb_aart.cod_msgr = mtb_sgrp.cod_msgr\n" +
" AND qta_col <> 0");
}
private void createNewView() throws Exception {
if (!existsTable("stb_multiplier")) {
executeStatement("CREATE TABLE stb_multiplier\n" +
"(\n" +
" moltiplicatore INT NOT NULL\n" +
")",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (1)",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)");
}
createOrUpdateView("mvw_mtb_colr_with_giacenza", "CREATE VIEW dbo.mvw_mtb_colr_with_giacenza\n" +
" WITH SCHEMABINDING\n" +
"AS\n" +
"SELECT COUNT_BIG(*) AS c,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif,\n" +
" mtb_colr.gestione) AS gestione,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo) AS data_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo) AS ser_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo) AS num_collo,\n" +
" SUM(mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" +
"\n" +
" SUM(IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" +
" moltiplicatore) AS num_cnf,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" SUM(mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" +
" SUM(mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf AS qta_cnf_anag\n" +
"FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.stb_multiplier ON moltiplicatore = 1 OR mtb_colr.num_collo_rif IS NOT NULL\n" +
" INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
"GROUP BY mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif, mtb_colr.gestione),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo),\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom),\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf");
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_CLUSTERED_mvw_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_CLUSTERED_mvw_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setUnique(true)
.setClustered(true)
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("gestione"));
add(new IndexTableDTO.ColumnIndex("data_collo"));
add(new IndexTableDTO.ColumnIndex("num_collo"));
add(new IndexTableDTO.ColumnIndex("ser_collo"));
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
add(new IndexTableDTO.ColumnIndex("cod_jcom"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_qta_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_qta_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("qta_col"));
add(new IndexTableDTO.ColumnIndex("num_cnf"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_giac_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_giac_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}})
.setColumnsInclude("qta_col", "num_cnf"));
executeStatement("UPDATE STATISTICS dbo.mvw_mtb_colr_with_giacenza");
createOrUpdateView("mvw_sitart_udc_det_inventario", "CREATE VIEW mvw_sitart_udc_det_inventario AS\n" +
" WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" mtb_colt.cod_mdep,\n" +
" mtb_colt.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" mtb_colt.barcode_ul,\n" +
" v.qta_cnf_anag\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.num_collo = mtb_colt.num_collo AND v.gestione = mtb_colt.gestione AND\n" +
" v.ser_collo = mtb_colt.ser_collo AND v.data_collo = mtb_colt.data_collo\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND v.gestione = 'V'))),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
" SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul\n" +
" FROM final_stock");
}
private void alignGiacenza() throws Exception {
//Creo un collo di scarico vuoto
MtbColt mtbColt = new MtbColt()
.setGestione("L")
.setSerCollo("RT")
.setSegno(-1)
.setDataCollo(LocalDate.now())
.setAnnotazioni("PASSAGGIO NUOVA MVW_SITART_UDC_DET_INVENTARIO")
.setCodMdep(getInternalCodMdep());
mtbColt.setOperation(OperationType.INSERT);
mtbColt.dataCompleting(connection);
mtbColt.manageWithParentConnection(connection);
executeStatement(Query.format(
"INSERT INTO mtb_colr (gestione, ser_collo, num_collo, data_collo, riga, cod_mart, cod_col, cod_tagl, partita_mag, gestione_rif, data_collo_rif, ser_collo_rif, num_collo_rif, datetime_row,\n" +
" cod_jcom, qta_col, num_cnf, qta_cnf)" +
" SELECT {} AS gestione,\n" +
" {} AS ser_collo,\n" +
" {} AS num_collo,\n" +
" CAST({} AS DATE) AS data_collo,\n" +
" ROW_NUMBER() OVER (PARTITION BY (SELECT NULL) ORDER BY v.data_collo) AS riga,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.gestione AS gestion_rif,\n" +
" v.data_collo AS data_collo_rif,\n" +
" v.ser_collo AS ser_collo_rif,\n" +
" v.num_collo AS num_collo_rif,\n" +
" GETDATE() AS datetime_row,\n" +
" v.cod_jcom,\n" +
" v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf\n" +
"FROM mvw_sitart_udc_det_inventario v\n" +
" INNER JOIN (SELECT ser_collo,\n" +
" gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_jcom-- Elenca tutte le colonne coinvolte\n" +
" FROM mvw_sitart_udc_det_inventario\n" +
"\n" +
" EXCEPT\n" +
"\n" +
" SELECT ser_collo,\n" +
" gestione,\n" +
" data_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_jcom -- Elenca le stesse colonne dalla vista vecchia\n" +
" FROM mvw_sitart_udc_det_inventario_old) t\n" +
" ON v.num_collo = t.num_collo AND v.data_collo = t.data_collo AND\n" +
" v.ser_collo = t.ser_collo AND v.gestione = t.gestione AND\n" +
" v.cod_mart = t.cod_mart AND v.cod_mdep = t.cod_mdep AND\n" +
" ISNULL(v.partita_mag, '') = ISNULL(t.partita_mag, '') AND\n" +
" ISNULL(v.posizione, '') = ISNULL(t.posizione, '') AND\n" +
" ISNULL(v.cod_jcom, '') = ISNULL(t.cod_jcom, '')" +
" WHERE qta_col > 0",
mtbColt.getGestione(), mtbColt.getSerCollo(), mtbColt.getNumCollo(), mtbColt.getDataCollo()));
}
private String getInternalCodMdep() throws Exception {
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, "SELECT TOP 1 cod_mdep" +
" FROM mtb_depo" +
" INNER JOIN dbo.gtb_anag ga ON mtb_depo.cod_anag = ga.cod_anag" +
" inner join azienda on ga.part_iva = azienda.part_iva");
MigrationMvwSitArtUdcDetInventarioDTO.apply(connection);
MigrationMvwSitArtUdcDetInventarioDTO.alignGiacenza(connection);
}
@Override

View File

@@ -1,323 +0,0 @@
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.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import java.time.LocalDate;
import java.util.ArrayList;
public class Migration_20250320121611 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Tosca))
return;
//Migration di conversione aziende a nuova mvw_sitart_udc_det_inventario
createBackupOfOldView();
dropView("mvw_sitart_udc_det_inventario");
createNewView();
}
private void createBackupOfOldView() throws Exception {
if (existsView("mvw_sitart_udc_det_inventario_old"))
return;
createOrUpdateView("mvw_sitart_udc_det_inventario_old", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario_old] AS\n" +
"SELECT UL.gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" segno,\n" +
" UL.cod_mdep,\n" +
" UL.posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" mtb_aart.cod_mgrp AS codGruppo,\n" +
" mtb_grup.descrizione AS Gruppo,\n" +
" mtb_aart.cod_msgr AS CodSgruppo,\n" +
" mtb_sgrp.descrizione AS Sottogruppo,\n" +
" UL.cod_mart,\n" +
" diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag,\n" +
" UL.cod_jcom,\n" +
" jtb_comt.descrizione AS commessa,\n" +
" mtb_aart.unt_mis,\n" +
" qta_col,\n" +
" num_cnf,\n" +
" UL.qta_cnf,\n" +
" UL.peso_netto_kg,\n" +
" UL.peso_lordo_kg,\n" +
" UL.cod_jfas\n" +
"FROM [mvw_sitart_udc_det] UL\n" +
" LEFT OUTER JOIN jtb_comt ON UL.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON UL.cod_mdep = mtb_depo_posizioni.cod_mdep AND UL.posizione = mtb_depo_posizioni.posizione,\n" +
" mtb_aart,\n" +
" mtb_grup,\n" +
" mtb_sgrp\n" +
"WHERE UL.cod_mart = mtb_aart.cod_mart\n" +
" AND mtb_aart.cod_mgrp = mtb_grup.cod_mgrp\n" +
" AND mtb_aart.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND mtb_aart.cod_msgr = mtb_sgrp.cod_msgr\n" +
" AND qta_col <> 0");
}
private void createNewView() throws Exception {
if (!existsTable("stb_multiplier")) {
executeStatement("CREATE TABLE stb_multiplier\n" +
"(\n" +
" moltiplicatore INT NOT NULL\n" +
")",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (1)",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)");
}
createOrUpdateView("mvw_mtb_colr_with_giacenza", "CREATE VIEW dbo.mvw_mtb_colr_with_giacenza\n" +
" WITH SCHEMABINDING\n" +
"AS\n" +
"SELECT COUNT_BIG(*) AS c,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif,\n" +
" mtb_colr.gestione) AS gestione,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo) AS data_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo) AS ser_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo) AS num_collo,\n" +
" SUM(mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" +
"\n" +
" SUM(IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" +
" moltiplicatore) AS num_cnf,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" SUM(mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" +
" SUM(mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf AS qta_cnf_anag\n" +
"FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.stb_multiplier ON moltiplicatore = 1 OR mtb_colr.num_collo_rif IS NOT NULL\n" +
" INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
"GROUP BY mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif, mtb_colr.gestione),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo),\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom),\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf");
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_CLUSTERED_mvw_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_CLUSTERED_mvw_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setUnique(true)
.setClustered(true)
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("gestione"));
add(new IndexTableDTO.ColumnIndex("data_collo"));
add(new IndexTableDTO.ColumnIndex("num_collo"));
add(new IndexTableDTO.ColumnIndex("ser_collo"));
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
add(new IndexTableDTO.ColumnIndex("cod_jcom"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_qta_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_qta_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("qta_col"));
add(new IndexTableDTO.ColumnIndex("num_cnf"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_giac_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_giac_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}})
.setColumnsInclude("qta_col", "num_cnf"));
executeStatement("UPDATE STATISTICS dbo.mvw_mtb_colr_with_giacenza");
createOrUpdateView("mvw_sitart_udc_det_inventario", "CREATE VIEW mvw_sitart_udc_det_inventario AS\n" +
" WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" mtb_colt.cod_mdep,\n" +
" mtb_colt.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" mtb_colt.barcode_ul,\n" +
" v.qta_cnf_anag\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.num_collo = mtb_colt.num_collo AND v.gestione = mtb_colt.gestione AND\n" +
" v.ser_collo = mtb_colt.ser_collo AND v.data_collo = mtb_colt.data_collo\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND v.gestione = 'V'))),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
" SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul\n" +
" FROM final_stock");
}
@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.MigrationModelInterface;
public class Migration_20250402112610 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
// //Gia aggiornato
// if (isCustomer(IntegryCustomer.RossoGargano) ||
// isCustomer(IntegryCustomer.Tosca))
// return;
//
// //Azienda da aggiornare
// if (!isCustomer(IntegryCustomer.Gramm))
// return;
//
// MigrationMvwSitArtUdcDetInventarioDTO.apply(connection);
// MigrationMvwSitArtUdcDetInventarioDTO.alignGiacenza(connection);
}
@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.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems.migration.dto.common.MigrationMvwSitArtUdcDetInventarioDTO;
import it.integry.ems.rules.completing.PackagesRules;
import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import java.util.List;
public class Migration_20250403174531 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.RossoGargano))
return;
//Rigenero barcodeUl testate con barcode duplicato
regenerateDuplicatedBarcodeUlTestate();
//Aggiorno la view mvw_mtb_colr_with_giacenza
MigrationMvwSitArtUdcDetInventarioDTO.apply(connection);
MigrationMvwSitArtUdcDetInventarioDTO.alignGiacenza(connection);
}
@Override
public void down() throws Exception {
}
private void regenerateDuplicatedBarcodeUlTestate() throws Exception {
String retrieveDuplicatedSql = "SELECT barcode_ul\n" +
"FROM mtb_colt\n" +
"GROUP BY barcode_ul, ser_collo\n" +
"HAVING COUNT(barcode_ul) > 1";
final List<String> duplicatedBarcodes = UtilityDB.executeSimpleQueryOnlyFirstColumn(connection, retrieveDuplicatedSql);
for (String barcode : duplicatedBarcodes) {
String sql = Query.format("SELECT * FROM mtb_colt WHERE barcode_ul = {}", barcode);
List<MtbColt> loadedMtbColts = executeQueryDTO(sql, MtbColt.class);
for (MtbColt colt : loadedMtbColts) {
if (colt.getSerCollo().equalsIgnoreCase("T")) {
String newBarcodeUl = PackagesRules.completeBarcodeUl(connection,
colt.getGestione(),
colt.getDataCollo(),
colt.getSerCollo(),
colt.getNumCollo(),
null,
null);
colt.setBarcodeUl(newBarcodeUl);
colt.setOperation(OperationType.UPDATE);
colt.manageWithParentConnection(connection);
}
}
}
}
}

View File

@@ -0,0 +1,181 @@
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_20250403174532 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Gramm) ||
isCustomer(IntegryCustomer.RossoGargano) ||
isCustomer(IntegryCustomer.Carelli) ||
isDMS())
return;
//Cancello tutti i barcode UL dalle testate degli scarichi a lavorazione
executeStatement("UPDATE mtb_colt SET barcode_ul = NULL\n" +
"WHERE gestione = 'L' AND segno = -1\n" +
"AND barcode_ul IS NOT NULL");
executeStatement("UPDATE mtb_colt\n" +
"SET barcode_ul = EAN128.AI_00\n" +
"FROM mtb_colt\n" +
" CROSS APPLY (SELECT TOP 1 * FROM (SELECT DISTINCT AI_00\n" +
" FROM f_getEAN128UL(mtb_colt.gestione, mtb_colt.data_collo, mtb_colt.ser_collo,\n" +
" mtb_colt.num_collo,\n" +
" NULL)" +
" WHERE mtb_colt.ser_collo <> 'UL'\n" +
" UNION\n" +
" SELECT CONCAT('U', RIGHT(YEAR(mtb_colt.data_collo), 2), FORMAT(mtb_colt.num_collo, '0000000')) AS AI_00\n" +
" WHERE mtb_colt.ser_collo = 'UL') tmp) EAN128");
createOrUpdateFunction("f_getEAN128UL", "CREATE FUNCTION [dbo].[f_getEAN128UL](@gestione VARCHAR(1), @dataCollo DATETIME, @serCollo VARCHAR(2), @numCollo INT,\n" +
" @customPrefissoEan VARCHAR(7))\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" -- DECLARE @gestione AS VARCHAR(1) = 'L'\n" +
"-- DECLARE @serCollo AS VARCHAR(10) = 'GG'\n" +
"-- DECLARE @numCollo AS INT = 7837\n" +
"-- DECLARE @dataCollo AS DATETIME = '2025-03-10';\n" +
"-- DECLARE @customPrefissoEan AS VARCHAR(7);-- = '8017596';\n" +
"\n" +
" WITH barcodes AS (SELECT mtb_colt.barcode_ul AS AI_00,\n" +
" CASE\n" +
" WHEN mtb_aart.cod_barre_imb IS NOT NULL AND LEN(mtb_aart.cod_barre_imb) < 14 THEN\n" +
" FORMAT(CONVERT(NUMERIC, ISNULL(NULLIF(mtb_aart.cod_barre_imb, ''), '0')),\n" +
" REPLICATE('0', 14))\n" +
" ELSE mtb_aart.cod_barre_imb\n" +
" END AS AI_01,\n" +
" CASE\n" +
" WHEN mtb_aart.bar_code IS NOT NULL AND LEN(mtb_aart.bar_code) < 14\n" +
" THEN\n" +
" FORMAT(CONVERT(BIGINT, mtb_aart.bar_code), REPLICATE('0', 14))\n" +
" ELSE mtb_aart.bar_code\n" +
" END AS AI_02,\n" +
" CASE\n" +
" WHEN mtb_colr.partita_mag IS NOT NULL THEN\n" +
" mtb_colr.partita_mag + CHAR(29)\n" +
" END AS AI_10,\n" +
" CASE\n" +
" WHEN mtb_partita_mag.data_scad IS NOT NULL THEN\n" +
" REPLACE(CONVERT(VARCHAR(10), mtb_partita_mag.data_scad, 2), '.', '')\n" +
" END AS AI_15,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 6 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '000000'), '.', '')\n" +
" END AS AI_3100,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 5 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '00000.0'), '.', '')\n" +
" END AS AI_3101,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 4 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '0000.00'), '.', '')\n" +
" END AS AI_3102,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 3 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '000.000'), '.', '')\n" +
" END AS AI_3103,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 2 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '00.0000'), '.', '')\n" +
" END AS AI_3104,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_aart.peso_kg * mtb_colr.qta_cnf AS INTEGER)) <= 1 THEN\n" +
" REPLACE(FORMAT(mtb_aart.peso_kg * mtb_colr.qta_cnf, '0.00000'), '.', '')\n" +
" END AS AI_3105,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 6 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '000000'), '.', '')\n" +
" END AS AI_3300,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 5 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '00000.0'), '.', '')\n" +
" END AS AI_3301,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 4 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '0000.00'), '.', '')\n" +
" END AS AI_3302,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 3 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '000.000'), '.', '')\n" +
" END AS AI_3303,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 2 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '00.0000'), '.', '')\n" +
" END AS AI_3304,\n" +
" CASE\n" +
" WHEN LEN(CAST(mtb_colt.peso_kg AS INTEGER)) <= 1 THEN\n" +
" REPLACE(FORMAT(mtb_colt.peso_kg, '0.00000'), '.', '')\n" +
" END AS AI_3305,\n" +
" CONVERT(VARCHAR, CONVERT(INTEGER, SUM(mtb_colr.qta_col / mtb_colr.qta_cnf))) AS AI_37\n" +
" FROM mtb_colt\n" +
" INNER JOIN mtb_colr\n" +
" ON mtb_colt.gestione = mtb_colr.gestione AND\n" +
" mtb_colt.data_collo = mtb_colr.data_collo AND\n" +
" mtb_colt.ser_collo = mtb_colr.ser_collo AND\n" +
" mtb_colt.num_collo = mtb_colr.num_collo\n" +
" INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN mtb_partita_mag ON mtb_colr.cod_mart = mtb_partita_mag.cod_mart AND\n" +
" mtb_colr.partita_mag =\n" +
" mtb_partita_mag.partita_mag,\n" +
" azienda\n" +
" WHERE mtb_colt.gestione = @gestione\n" +
" AND mtb_colt.data_collo = @dataCollo\n" +
" AND mtb_colt.ser_collo = @serCollo\n" +
" AND mtb_colt.num_collo = @numCollo\n" +
" GROUP BY mtb_colr.qta_cnf,\n" +
" mtb_colt.data_vers,\n" +
" nome_ditta,\n" +
" azienda.indirizzo,\n" +
" azienda.cap,\n" +
" azienda.citta,\n" +
" azienda.prov,\n" +
" prefisso_ean,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.num_collo,\n" +
" mtb_aart.cod_barre_imb,\n" +
" mtb_aart.bar_code,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_colr.partita_mag,\n" +
" mtb_partita_mag.data_scad,\n" +
" mtb_colt.peso_netto_kg,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.peso_kg,\n" +
" mtb_aart.peso_kg, \n" +
" mtb_colt.barcode_ul)\n" +
" SELECT AI_00,\n" +
" IIF(AI_01 IS NOT NULL AND LEN(AI_01) = 13,\n" +
" CONCAT(AI_01, dbo.getCheckDigitITF14(AI_01)), AI_01) AS AI_01,\n" +
" AI_02,\n" +
" AI_10,\n" +
" AI_15,\n" +
" AI_3100,\n" +
" AI_3101,\n" +
" AI_3102,\n" +
" AI_3103,\n" +
" AI_3104,\n" +
" AI_3105,\n" +
" AI_3300,\n" +
" AI_3301,\n" +
" AI_3302,\n" +
" AI_3303,\n" +
" AI_3304,\n" +
" AI_3305,\n" +
" AI_37\n" +
" FROM barcodes\n" +
"GO");
}
@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.IntegryCustomer;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems.migration.dto.common.MigrationMvwSitArtUdcDetInventarioDTO;
public class Migration_20250417110238 extends BaseMigration implements MigrationModelInterface {
//Migration per aggiornare la view mvw_sitart_udc_det_inventario
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Maggio) &&
!isCustomer(IntegryCustomer.Biolevante) &&
!isCustomer(IntegryCustomer.Ime) &&
!isCustomerDb(IntegryCustomerDB.Gramm_Gramm))
return;
//Aggiorno la view mvw_mtb_colr_with_giacenza
MigrationMvwSitArtUdcDetInventarioDTO.apply(connection);
MigrationMvwSitArtUdcDetInventarioDTO.alignGiacenza(connection);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,207 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250604172635 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateView("WMS_OrdPrelievo", "CREATE VIEW [dbo].[WMS_OrdPrelievo] AS\n" +
"WITH elencoFornitoriInterni AS (SELECT value_string AS fornitore\n" +
" FROM dbo.ParseStringIntoArray((SELECT value\n" +
" FROM stb_gest_setup\n" +
" WHERE gest_name = 'PICKING'\n" +
" AND section = 'SPEDIZIONE'\n" +
" AND key_section = 'ELENCO_FORNITORI_INTERNI'),\n" +
" '|')),\n" +
" riservatoPerOrd AS (\n" +
"\n" +
"\n" +
"SELECT mtb_colt.gestione,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" mtb_colr.riga_ord,\n" +
" SUM(mtb_colr.qta_col) AS qtaCollo,\n" +
" SUM(mtb_colr.num_cnf) AS numCnfCollo,\n" +
" COUNT(DISTINCT mtb_colr.num_ord) AS ColliRiservati\n" +
" FROM mtb_colr\n" +
" INNER JOIN mtb_colt ON mtb_colr.gestione = mtb_colt.gestione AND\n" +
" mtb_colr.data_collo = mtb_colt.data_collo AND\n" +
" mtb_colr.ser_collo = mtb_colt.ser_collo AND\n" +
" mtb_colr.num_collo = mtb_colt.num_collo\n" +
" WHERE segno = - 1\n" +
" AND mtb_colr.gestione IN ('L', 'V')\n" +
" AND mtb_colr.data_ord IS NOT NULL\n" +
" GROUP BY mtb_colt.gestione, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.riga_ord\n" +
"\n" +
" ), OrdVr AS (\n" +
" SELECT dtb_ordr.gestione,\n" +
" dtb_ordr.data_ord,\n" +
" dtb_ordr.num_ord,\n" +
" dtb_ordt.cod_vdes,\n" +
" IIF(dtb_ordr.gestione = 'V', LEFT(ISNULL(vtb_dest.citta + ' - ', '') + vtb_dest.indirizzo, 40),\n" +
" dtb_ordt.rif_ord) AS rif_ord,\n" +
" dtb_ordt.cod_anag,\n" +
" dtb_ordt.cod_prod,\n" +
" CASE dtb_ordr.gestione WHEN 'L' THEN '2' WHEN 'V' THEN '3' END +\n" +
" REPLACE(CONVERT(VARCHAR(10), dtb_ordr.data_ord, 105), '-', '') +\n" +
" REPLICATE('0', 5 - LEN(dtb_ordr.num_ord)) +\n" +
" CONVERT(VARCHAR(6), dtb_ordr.num_ord) AS chiave_ordine,\n" +
" dtb_ordr.cod_jcom,\n" +
" dtb_ordr.cod_mart,\n" +
" SUM(ROUND(dtb_ordr.qta_ord - dtb_ordr.qta_evasa, mtb_unt_mis.cifre_dec)) *\n" +
" dtb_ordr.rap_conv AS qta_inevasa,\n" +
" dtb_ordt.listino,\n" +
" dtb_ordt.term_cons,\n" +
" dtb_ordt.cod_auto,\n" +
" dtb_ordt.cod_vvet,\n" +
" dtb_ordt.data_iniz_trasp,\n" +
" dtb_ordt.cod_mdep,\n" +
" dtb_ordr.data_cons AS data_cons,\n" +
" dtb_ordr.id_viaggio,\n" +
" dtb_ordt.cod_vage,\n" +
" SUM(colli.qtaCollo) AS qtaCollo,\n" +
" SUM(ROUND((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv -\n" +
" ISNULL(colli.qtaCollo, 0),\n" +
" mtb_unt_mis.cifre_dec)) AS qtaInevasaColli,\n" +
" SUM(colli.numCnfCollo) AS numCnfCollo,\n" +
" SUM(dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa -\n" +
" ISNULL(colli.numCnfCollo, 0)) AS numCnfInevasaColli,\n" +
" IIF((dtb_ordr.gestione = 'L' AND dtb_ordt.gestione_rif = 'T') OR\n" +
" elencoFornitoriInterni.fornitore IS NOT NULL, 'S', 'N') AS ord_trasf\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" INNER JOIN mtb_unt_mis ON mtb_unt_mis.unt_mis = dtb_ordr.unt_ord\n" +
" INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN vtb_dest ON dtb_ordt.cod_anag = vtb_dest.cod_anag AND\n" +
" dtb_ordt.cod_vdes = vtb_dest.cod_vdes\n" +
" LEFT OUTER JOIN riservatoPerOrd colli\n" +
" ON dtb_ordt.gestione = colli.gestione AND\n" +
" dtb_ordt.data_ord = colli.data_ord AND\n" +
" dtb_ordt.num_ord = colli.num_ord\n" +
" LEFT OUTER JOIN elencoFornitoriInterni ON fornitore = dtb_ordt.cod_anag\n" +
" WHERE dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordt.flag_evaso_forzato = 'N'\n" +
" AND dtb_ordt.gestione IN ('L', 'V')\n" +
" AND ((mtb_aart.flag_qta_cnf_fissa = 'S' AND qta_ord > qta_evasa) OR\n" +
" (mtb_aart.flag_qta_cnf_fissa <> 'S' AND num_cnf > num_cnf_evasa))\n" +
" GROUP BY dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord, dtb_ordt.cod_vdes,\n" +
" vtb_dest.indirizzo,\n" +
" vtb_dest.citta, dtb_ordt.rif_ord, dtb_ordt.cod_anag, dtb_ordr.cod_jcom, dtb_ordr.cod_mart,\n" +
" dtb_ordt.cod_prod, dtb_ordt.listino, dtb_ordt.term_cons, dtb_ordt.cod_auto,\n" +
" dtb_ordt.cod_vvet, fornitore,\n" +
" dtb_ordt.data_iniz_trasp, dtb_ordt.cod_mdep, dtb_ordt.cod_vage, dtb_ordr.id_viaggio,\n" +
" colli.num_ord, dtb_ordr.data_cons, dtb_ordt.gestione_rif, dtb_ordr.rap_conv\n" +
"\n" +
"\n" +
" ), OrdV AS (\n" +
" SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" rif_ord,\n" +
" cod_anag,\n" +
" chiave_ordine,\n" +
" cod_jcom,\n" +
" cod_prod,\n" +
" listino,\n" +
" term_cons,\n" +
" cod_auto,\n" +
" cod_vvet,\n" +
" data_iniz_trasp,\n" +
" data_cons,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" COUNT(DISTINCT cod_mart) AS arts_da_evadere,\n" +
" SUM(qtaInevasaColli) AS qtaInevasa,\n" +
" SUM(numCnfInevasaColli) AS numCnfInevasa,\n" +
" id_viaggio,\n" +
" cod_vage,\n" +
" COUNT(DISTINCT qtaCollo) AS colliRiservati,\n" +
" ord_trasf\n" +
" FROM OrdVr\n" +
" GROUP BY gestione, data_ord, num_ord, rif_ord, cod_anag, chiave_ordine, cod_jcom, cod_prod, listino,\n" +
" term_cons, cod_auto, cod_vvet, data_iniz_trasp, data_cons, cod_vdes, cod_mdep, cod_vage,\n" +
" id_viaggio, ord_trasf\n" +
"\n" +
" ),\n" +
" OrdV2 AS (SELECT OrdV.gestione,\n" +
" OrdV.data_ord,\n" +
" OrdV.num_ord,\n" +
" rif_ord,\n" +
" OrdV.cod_anag,\n" +
" chiave_ordine,\n" +
" cod_jcom,\n" +
" cod_prod,\n" +
" listino,\n" +
" term_cons,\n" +
" OrdV.cod_auto,\n" +
" ISNULL(vtb_viaggi.cod_vvet, OrdV.cod_vvet) AS cod_vvet,\n" +
" data_iniz_trasp,\n" +
" ISNULL(CONVERT(DATETIME, CONVERT(VARCHAR(10), vtb_viaggi.data_ora_iniz_trasp, 121)),\n" +
" data_cons) AS data_cons,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" arts_da_evadere AS ArtDaEvadere,\n" +
" OrdV.id_viaggio,\n" +
" cod_vage,\n" +
" ISNULL(ordV.ColliRiservati, 0) AS colli_riservati,\n" +
" qtaInevasa,\n" +
" numCnfInevasa,\n" +
" CAST(IIF(ISNULL(ordV.ColliRiservati, 0) > 0, 1, 0) AS BIT) exist_collo,\n" +
" CAST(IIF(ISNULL(qtaInevasa, 0) > 0,\n" +
" IIF(ISNULL(numCnfInevasa, 0) > 0, 0, IIF(ordV.colliRiservati > 0, 1, 0)), 1) AS BIT) AS flag_evaso,\n" +
" ord_trasf,\n" +
" IIF((SELECT azienda.part_iva\n" +
" FROM azienda\n" +
" WHERE azienda.part_iva = gtb_anag.part_iva) IS NULL, 'N', 'S') AS ord_aziendale\n" +
" FROM Ordv\n" +
" INNER JOIN gtb_anag ON OrdV.cod_anag = gtb_anag.cod_anag\n" +
" LEFT OUTER JOIN vtb_viaggi ON OrdV.id_viaggio = vtb_viaggi.id_viaggio\n" +
" WHERE (arts_da_evadere > 0 OR ISNULL(ColliRiservati, 0) > 0))\n" +
"SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" rif_ord,\n" +
" cod_anag,\n" +
" chiave_ordine,\n" +
" cod_jcom,\n" +
" cod_prod,\n" +
" listino,\n" +
" term_cons,\n" +
" cod_auto,\n" +
" cod_vvet,\n" +
" data_iniz_trasp,\n" +
" data_cons,\n" +
" cod_vdes,\n" +
" cod_mdep,\n" +
" SUM(ArtDaEvadere) AS ArtDaEvadere,\n" +
" id_viaggio,\n" +
" cod_vage,\n" +
" SUM(colli_riservati) AS colli_riservati,\n" +
" SUM(qtaInevasa) AS qtaInevasa,\n" +
" SUM(numCnfInevasa) AS numCnfInevasa,\n" +
" exist_collo,\n" +
" flag_evaso,\n" +
" ord_trasf,\n" +
" ord_aziendale\n" +
"FROM OrdV2\n" +
"GROUP BY gestione, data_ord, num_ord, rif_ord, cod_anag, chiave_ordine, cod_jcom, cod_prod, listino, term_cons,\n" +
" cod_auto, cod_vvet, data_iniz_trasp, data_cons, cod_vdes, cod_mdep, id_viaggio, cod_vage, exist_collo,\n" +
" flag_evaso, ord_trasf, ord_aziendale");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,130 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250618195259 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateView("dvw_situazione_qta_docs", "CREATE VIEW dvw_situazione_qta_docs AS\n" +
"SELECT dtb_docr.[cod_anag],\n" +
" dtb_docr.[cod_dtip],\n" +
" dtb_docr.[data_doc],\n" +
" dtb_docr.[ser_doc],\n" +
" dtb_docr.[num_doc],\n" +
" dtb_docr.[id_riga],\n" +
" dtb_docr.[cod_mart],\n" +
" dtb_docr.[descrizione],\n" +
" dtb_docr.[unt_doc],\n" +
" (dtb_docr.[rap_conv] / dtb_docr.[rap_conv]) AS rap_conv,\n" +
" (dtb_docr.[qta_doc] * dtb_docr.[rap_conv]) - ISNULL(mtb_colr.qta_col, 0) AS qta_doc,\n" +
" dtb_docr.[val_unt],\n" +
" dtb_docr.[sconto5],\n" +
" dtb_docr.[sconto6],\n" +
" dtb_docr.[sconto7],\n" +
" dtb_docr.[sconto8],\n" +
" dtb_docr.[cod_aliq],\n" +
" dtb_docr.[perc_prov],\n" +
" dtb_docr.[val_prov],\n" +
" dtb_docr.[data_ord],\n" +
" dtb_docr.[num_ord],\n" +
" dtb_docr.[riga_ord],\n" +
" dtb_docr.[importo_riga],\n" +
" dtb_docr.[cod_col],\n" +
" dtb_docr.[cod_tagl],\n" +
" dtb_docr.[cod_jcom],\n" +
" dtb_docr.[cod_mdep],\n" +
" dtb_docr.[perc_gest],\n" +
" dtb_docr.[val_gest],\n" +
" dtb_docr.[partita_mag],\n" +
" dtb_docr.[val_unt_iva],\n" +
" (dtb_docr.[qta_cnf] * dtb_docr.[rap_conv]) AS qta_cnf,\n" +
" dtb_docr.[descrizione_estesa],\n" +
" dtb_docr.[costo_unt],\n" +
" dtb_docr.[perc_ispe],\n" +
" dtb_docr.[val_ispe],\n" +
" dtb_docr.[perc_promo],\n" +
" dtb_docr.[val_promo],\n" +
" dtb_docr.[perc_oneri],\n" +
" dtb_docr.[val_oneri],\n" +
" dtb_docr.[flag_evaso_forzato],\n" +
" dtb_docr.[cod_dtip_comp],\n" +
" dtb_docr.[data_doc_comp],\n" +
" dtb_docr.[ser_doc_comp],\n" +
" dtb_docr.[num_doc_comp],\n" +
" dtb_docr.[cod_promo],\n" +
" dtb_docr.[perc_prov2],\n" +
" dtb_docr.[val_prov2],\n" +
" dtb_docr.[cod_art_for],\n" +
" dtb_docr.[unt_doc2],\n" +
" dtb_docr.[qta_doc2],\n" +
" dtb_docr.[unt_doc3],\n" +
" dtb_docr.[qta_doc3],\n" +
" dtb_docr.[num_cnf] - ISNULL(mtb_colr.num_cnf, 0) AS num_cnf,\n" +
" dtb_docr.[peso_lordo],\n" +
" dtb_docr.[posizione],\n" +
" dtb_docr.[cod_anag_comp],\n" +
" dtb_docr.[cod_mtip],\n" +
" dtb_docr.[matricola],\n" +
" dtb_docr.[data_iniz_comp],\n" +
" dtb_docr.[data_fine_comp],\n" +
" dtb_docr.[cod_kit],\n" +
" dtb_docr.[cod_alis],\n" +
" dtb_docr.[data_ins_row],\n" +
" dtb_docr.[note],\n" +
" dtb_doct.[gestione],\n" +
" mtb_partita_mag.[data_scad] AS data_scad_partita_mag\n" +
"FROM dtb_docr\n" +
" INNER JOIN dtb_doct ON dtb_docr.num_doc = dtb_doct.num_doc AND dtb_docr.data_doc = dtb_doct.data_doc AND\n" +
" dtb_docr.cod_anag = dtb_doct.cod_anag AND dtb_docr.cod_dtip = dtb_doct.cod_dtip AND\n" +
" dtb_docr.ser_doc = dtb_doct.ser_doc\n" +
" INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN mtb_partita_mag ON dtb_docr.cod_mart = mtb_partita_mag.cod_mart AND\n" +
" dtb_docr.partita_mag = mtb_partita_mag.partita_mag\n" +
" LEFT OUTER JOIN ctb_cont ON mtb_aart.cod_ccon_ricavi = ctb_cont.cod_ccon\n" +
" LEFT OUTER JOIN ctb_grup ON ctb_cont.cod_cgrp = ctb_grup.cod_cgrp\n" +
" LEFT OUTER JOIN (SELECT gestione,\n" +
" cod_mart,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" SUM(qta_col) AS qta_col,\n" +
" data_ord,\n" +
" num_ord,\n" +
" riga_ord,\n" +
" partita_mag,\n" +
" qta_cnf,\n" +
" gestione_rif,\n" +
" data_collo_rif,\n" +
" ser_collo_rif,\n" +
" num_collo_rif,\n" +
" cod_jcom,\n" +
" SUM(num_cnf) AS num_cnf,\n" +
" cod_anag_doc,\n" +
" cod_dtip_doc,\n" +
" data_doc,\n" +
" ser_doc,\n" +
" num_doc,\n" +
" id_riga_doc\n" +
" FROM mtb_colr\n" +
" GROUP BY gestione, cod_barre, cod_mart, cod_col, cod_tagl, data_ord, num_ord, riga_ord,\n" +
" partita_mag, qta_cnf, gestione_rif, data_collo_rif, ser_collo_rif, num_collo_rif,\n" +
" cod_jcom, cod_anag_doc, cod_dtip_doc, data_doc, ser_doc, num_doc,\n" +
" id_riga_doc) mtb_colr\n" +
" ON dtb_docr.cod_anag = mtb_colr.cod_anag_doc AND dtb_docr.cod_dtip = mtb_colr.cod_dtip_doc AND\n" +
" dtb_docr.ser_doc = mtb_colr.ser_doc AND dtb_docr.data_doc = mtb_colr.data_doc AND\n" +
" dtb_docr.num_doc = mtb_colr.num_doc AND dtb_docr.id_riga = mtb_colr.id_riga_doc\n" +
"WHERE (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL)\n" +
" AND (dtb_docr.[qta_doc] * dtb_docr.[rap_conv]) - ISNULL(mtb_colr.qta_col, 0) > 0");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,142 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250625155432 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateView("mvw_sitart_udc_det_inventario", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario] AS\n" +
"WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.ser_collo,\n" +
" mtb_colt.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" v.cod_mdep,\n" +
" v.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" v.barcode_ul,\n" +
" v.qta_cnf_anag,\n" +
" mtb_colr.datetime_row AS datetime_posizionamento\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.barcode_ul = mtb_colt.barcode_ul\n" +
" LEFT OUTER JOIN mtb_colr ON\n" +
" v.barcode_ul = mtb_colr.barcode_ul_in AND\n" +
" v.cod_mart = mtb_colr.cod_mart AND\n" +
" ISNULL(v.partita_mag, '') = ISNULL(mtb_colr.partita_mag, '') AND\n" +
" ISNULL(v.cod_col, '') = ISNULL(mtb_colr.cod_col, '') AND\n" +
" ISNULL(v.cod_tagl, '') = ISNULL(mtb_colr.cod_tagl, '') AND\n" +
" ISNULL(v.cod_jcom, '') = ISNULL(mtb_colr.cod_jcom, '') AND\n" +
" ISNULL(v.posizione, '') = ISNULL(mtb_colr.posizione_in, '') AND\n" +
" ISNULL(v.cod_mdep, '') = ISNULL(mtb_colr.cod_mdep_in, '') AND\n" +
" ISNULL(mtb_colr.posizione_in, '') <> ISNULL(mtb_colr.posizione_out, '')\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE v.qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND mtb_colt.gestione = 'V'))),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul,\n" +
" v.datetime_posizionamento\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
"SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul,\n" +
" datetime_posizionamento\n" +
"FROM final_stock");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -4,24 +4,23 @@ 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 {
public class Migration_20250626142053 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'");
String reportNamePackingList = null;
if (isCustomer(IntegryCustomer.RossoGargano)) {
reportNamePackingList = "PackingListScarico";
}
createSetup("PVM", "CONTROLLO_GIACENZE", "REPORT_NAME_PACKING_LIST", reportNamePackingList, "Nome report per stampa packing list post trasferimento", "REPORT_NAME");
}
@Override
public void down() throws Exception {
}
}
}

View File

@@ -4,16 +4,18 @@ import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251023114821 extends BaseMigration implements MigrationModelInterface {
public class Migration_20250627184608 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if(isCustomer(IntegryCustomer.Gramm)) {
executeStatement(" alter table gramm_simulatore_coan add id bigint identity not null\n" +
" CONSTRAINT PK_drl_tipi_mod_stampa PRIMARY KEY (id)");
String value = null;
if (isCustomer(IntegryCustomer.RossoGargano)){
value = "ControlloGiacenzeSintetico";
}
createSetup("PVM","CONTROLLO_GIACENZE","REPORT_NAME_ELENCO_SINTETICO",value,"Report name per report giacenze sintetico da portale web","REPORT_NAME");
}
@Override

View File

@@ -0,0 +1,174 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250630164505 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateView("mvw_sitart_udc_det_inventario", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario] AS\n" +
"WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.ser_collo,\n" +
" mtb_colt.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" v.cod_mdep,\n" +
" v.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" v.barcode_ul,\n" +
" v.qta_cnf_anag,\n" +
" MAX(mtb_colr.datetime_row) AS datetime_posizionamento\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.barcode_ul = mtb_colt.barcode_ul\n" +
" LEFT OUTER JOIN mtb_colr ON\n" +
" v.barcode_ul = mtb_colr.barcode_ul_in AND\n" +
" v.cod_mart = mtb_colr.cod_mart AND\n" +
" ((v.partita_mag IS NULL AND mtb_colr.partita_mag IS NULL) OR\n" +
" (v.partita_mag = mtb_colr.partita_mag)) AND\n" +
" ((v.cod_col IS NULL AND mtb_colr.cod_col IS NULL) OR (v.cod_col = mtb_colr.cod_col)) AND\n" +
" ((v.cod_tagl IS NULL AND mtb_colr.cod_tagl IS NULL) OR (v.cod_tagl = mtb_colr.cod_tagl)) AND\n" +
" ((v.cod_jcom IS NULL AND mtb_colr.cod_jcom IS NULL) OR (v.cod_jcom = mtb_colr.cod_jcom)) AND\n" +
" ((v.posizione IS NULL AND mtb_colr.posizione_in IS NULL) OR (v.posizione = mtb_colr.posizione_in)) AND\n" +
" ((v.cod_mdep IS NULL AND mtb_colr.cod_mdep_in IS NULL) OR (v.cod_mdep = mtb_colr.cod_mdep_in)) AND\n" +
" ISNULL(mtb_colr.posizione_in, '') <> ISNULL(mtb_colr.posizione_out, '')\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE v.qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND mtb_colt.gestione = 'V'))\n" +
" GROUP BY c,\n" +
" ROUND(v.qta_col, cifre_dec),\n" +
" ROUND(v.num_cnf, cifre_dec),\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)),\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.ser_collo,\n" +
" mtb_colt.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" v.cod_mdep,\n" +
" v.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" v.barcode_ul,\n" +
" v.qta_cnf_anag),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul,\n" +
" v.datetime_posizionamento\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
"SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul,\n" +
" datetime_posizionamento\n" +
"FROM final_stock");
}
@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_20250714164813 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("WMS_GetUltimeConsegneClienti", "CREATE FUNCTION [dbo].[WMS_GetUltimeConsegneClienti](@numConsegnePerClie INT, @codAnag VARCHAR(5), @codMart VARCHAR(15),\n" +
" @codMdep VARCHAR(5), @daysDiff INT)\n" +
"/*Funzione che restituisce le ultime consegne effettuate per conto di un cliente con possibilitÃÆÃ  di filtrare per articolo/deposito.\n" +
"Se il cliente non viene passato allora la funzione restituirÃÆÃ  le ultime consegne di tutti i clienti. */\n" +
" RETURNS TABLE AS RETURN\n" +
" SELECT DISTINCT *\n" +
" FROM (SELECT dtb_doct.cod_anag,\n" +
" DENSE_RANK() OVER (PARTITION BY dtb_doct.cod_anag ORDER BY dtb_doct.cod_anag ASC, dtb_doct.data_doc DESC, dtb_doct.num_doc) AS counter_consegna,\n" +
" dtb_doct.cod_dtip,\n" +
" dtb_doct.data_doc,\n" +
" dtb_doct.ser_doc,\n" +
" dtb_doct.num_doc,\n" +
" dtb_doct.compilato_da,\n" +
" dtb_doct.rif_ord,\n" +
" dtb_doct.data_ord,\n" +
" vtb_dest.destinatario,\n" +
" vtb_dest.indirizzo,\n" +
" dtb_doct.data_iniz_trasp\n" +
" FROM dtb_doct\n" +
" 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.num_doc = dtb_docr.num_doc AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" LEFT OUTER JOIN vtb_dest\n" +
" ON dtb_doct.cod_anag = vtb_dest.cod_anag\n" +
" AND dtb_doct.cod_vdes = vtb_dest.cod_vdes\n" +
"\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_tipi.segno_qta_scar = 1\n" +
" AND DATEDIFF(DAY, dtb_doct.data_doc, GETDATE()) <= @daysDiff\n" +
"\n" +
"\n" +
" AND (@codMdep IS NULL\n" +
" OR dtb_doct.cod_mdep = @codMdep)\n" +
" AND (@codMart IS NULL\n" +
" OR dtb_docr.cod_mart = @codMart)\n" +
" AND (@codAnag IS NULL\n" +
" OR dtb_doct.cod_anag = @codAnag)) grouped_consegne\n" +
" WHERE @numConsegnePerClie IS NULL\n" +
" OR grouped_consegne.counter_consegna <= @numConsegnePerClie");
}
@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.MigrationModelInterface;
public class Migration_20250715110408 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("WMS_GetUltimeConsegneClienti", "CREATE FUNCTION [dbo].[WMS_GetUltimeConsegneClienti](@numConsegnePerClie INT, @codAnag VARCHAR(5), @codVdes VARCHAR(5), @codMart VARCHAR(15),\n" +
" @codMdep VARCHAR(5), @daysDiff INT)\n" +
"/*Funzione che restituisce le ultime consegne effettuate per conto di un cliente con possibilitÃÆÃ  di filtrare per articolo/deposito.\n" +
"Se il cliente non viene passato allora la funzione restituirÃÆÃ  le ultime consegne di tutti i clienti. */\n" +
" RETURNS TABLE AS RETURN\n" +
" SELECT DISTINCT *\n" +
" FROM (SELECT dtb_doct.cod_anag,\n" +
" DENSE_RANK() OVER (PARTITION BY dtb_doct.cod_anag ORDER BY dtb_doct.cod_anag ASC, dtb_doct.data_doc DESC, dtb_doct.num_doc) AS counter_consegna,\n" +
" dtb_doct.cod_dtip,\n" +
" dtb_doct.data_doc,\n" +
" dtb_doct.ser_doc,\n" +
" dtb_doct.num_doc,\n" +
" dtb_doct.compilato_da,\n" +
" dtb_doct.rif_ord,\n" +
" dtb_doct.data_ord,\n" +
" vtb_dest.destinatario,\n" +
" vtb_dest.indirizzo,\n" +
" dtb_doct.data_iniz_trasp\n" +
" FROM dtb_doct\n" +
" 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.num_doc = dtb_docr.num_doc AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" LEFT OUTER JOIN vtb_dest\n" +
" ON dtb_doct.cod_anag = vtb_dest.cod_anag\n" +
" AND dtb_doct.cod_vdes = vtb_dest.cod_vdes\n" +
"\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_tipi.segno_qta_scar = 1\n" +
" AND DATEDIFF(DAY, dtb_doct.data_doc, GETDATE()) <= @daysDiff\n" +
"\n" +
"\n" +
" AND (@codMdep IS NULL\n" +
" OR dtb_doct.cod_mdep = @codMdep)\n" +
" AND (@codMart IS NULL\n" +
" OR dtb_docr.cod_mart = @codMart)\n" +
" AND (@codAnag IS NULL\n" +
" OR dtb_doct.cod_anag = @codAnag)\n" +
" AND (@codVdes IS NULL\n" +
" OR dtb_doct.cod_vdes = @codVdes)) grouped_consegne\n" +
" WHERE @numConsegnePerClie IS NULL\n" +
" OR grouped_consegne.counter_consegna <= @numConsegnePerClie");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -4,15 +4,18 @@ import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251008144628 extends BaseMigration implements MigrationModelInterface {
public class Migration_20250728095637 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Carelli)) {
updateSetupValue("DATI_AZIENDA", "SETUP", "INVIO_EMAIL_NEW", "S");
executeStatement("alter table dbo.atb_tipi add socio_aziendale BIT default 0 not null");
if (isCustomer(IntegryCustomer.RossoGargano)) {
executeStatement("UPDATE dbo.atb_tipi SET socio_aziendale = 1 where cod_atip in (N'C1050', N'C1055')");
}
}

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_20250728125101 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String reportNameScar = null;
String reportNameLav = null;
if (isCustomer(IntegryCustomer.RossoGargano)) {
reportNameScar = "ReportScaricoProdotto";
reportNameLav = "RiepilogoLavorazioniMateriaPrimaGrezza";
}
createSetup("PVM","PIAN_ACC_ROSSG","REPORT_NAME_RIEP_SCARICO_PRODOTTO",reportNameScar,"Nome report stampa riepilogo scarico prodotti (da tab omonima in pagina accettazione da campo)","REPORT_NAME");
createSetup("PVM","PIAN_ACC_ROSSG","REPORT_NAME_RIEP_LAV_MATERIALE",reportNameLav,"Nome report stampa riepilogo lavorazioni del giorno (da tab Laborazioni in pagina accettazione da campo)","REPORT_NAME");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,23 +0,0 @@
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_20250827114912 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Ime_ImeTe) || isCustomerDb(IntegryCustomerDB.Materica_ImeBa)) {
updateSetupValue("W_PORDI_RC", "SETUP", "CHECK_DEP_TERZISTA", "S");
updateSetupValue("DTB_ORDT", "SETUP", "DISABLE_TRIGGER_ORDL", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,24 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250827151739 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (existsColumn("dtb_ord_log_import", "id")) return;
executeStatement(
"exec dropPrimaryKey 'dtb_ord_log_import'",
"alter table dtb_ord_log_import add id bigint identity",
"alter table dtb_ord_log_import add constraint pk_dtb_ord_log_import primary key (id)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,33 +0,0 @@
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_20250828100041 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement(
"alter table ntb_docr add val_sco_art numeric(20,5);",
"alter table mtb_depo_casse add last_idx int;",
"Create table ntb_docs ( " +
" id bigint identity not null, " +
" cod_mdep varchar(5) not null, " +
" cod_cassa varchar(5) not null, " +
" data_doc datetime not null, " +
" id_riga int not null, " +
" promozione varchar(40) not null , " +
" val_sco numeric(20,5) not null default 0); ",
"alter table ntb_docs add constraint pk_ntb_docs primary key (id)",
"alter table ntb_docs add constraint fk_ntb_docs_ntb_docr foreign key (cod_mdep, cod_cassa, data_doc, id_riga) references ntb_docr (cod_mdep, cod_cassa, data_doc, id_riga);"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,30 +0,0 @@
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_20250828145642 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("IMPORT_SCONTRINI", "MMPOS_SERVICES", "PROFILE_DB", null,
"Inserire il profile del db a cui collegarsi", false, null, false, false,
false, false, false, null, false, null);
if (isCustomerDb(IntegryCustomerDB.Carelli_Carelli) && isCustomerDb(IntegryCustomerDB.Carelli_GestFood) ) {
updateSetupValue("IMPORT_SCONTRINI", "MMPOS_SERVICES", "PROFILE_DB", "MMPOS");
}else if (isCustomerDb(IntegryCustomerDB.Carelli_Murgia) && isCustomerDb(IntegryCustomerDB.Carelli_GestFood) ) {
updateSetupValue("IMPORT_SCONTRINI", "MMPOS_SERVICES", "PROFILE_DB", "MMPOS_FORNO");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,7 +1,7 @@
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_20250909162127 extends BaseMigration implements MigrationModelInterface {
@@ -10,7 +10,8 @@ public class Migration_20250909162127 extends BaseMigration implements Migration
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Biolevante))
if (!isCustomerDb(IntegryCustomerDB.Biolevante_Biolevante))
return;
executeStatement(

View File

@@ -1,20 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250922095154 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
dropColumn("ntb_docr", "val_sco_art");
executeStatement("alter table ntb_docr add val_voucher numeric(20,5);");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,31 +0,0 @@
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_20250922140309 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("IMPORT_SCONTRINI", "MMPOS_SERVICES", "IMPOSTA_DATI_ORDINE", "N",
"Imposta sulla riga dello scontrino i dati dell'ordine", false, null, false, false,
false, false, false, null, false, null);
createSetup("IMPORT_SCONTRINI", "MMPOS_SERVICES", "IMPOSTA_KIT", "N",
"Imposta sulla riga dello scontrino il codice del kit ( menu ) ", false, null, false, false,
false, false, false, null, false, null);
if ( isCustomerDb(IntegryCustomerDB.Carelli_Murgia)) {
updateSetupValue("IMPORT_SCONTRINI", "MMPOS_SERVICES", "IMPOSTA_DATI_ORDINE", "S");
updateSetupValue("IMPORT_SCONTRINI", "MMPOS_SERVICES", "IMPOSTA_KIT", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,48 +0,0 @@
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_20250926125635 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("IMPORT_SCONTRINI", "MMPOS", "ATTIVO", "N",
"Inserire S/N per attivare/disattivare il tipo di importazione", false, null, false, false,
false, false, false, null, false, null);
createSetup("IMPORT_SCONTRINI", "MMPOS", "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("IMPORT_SCONTRINI", "MMPOS", "FILE_FILTER", null,
"Inserire il criterio di filtro dei file o il nome del file specifio (seguire la sintassi di java)", false, null, false, false,
false, false, false, null, false, null);
createSetup("IMPORT_SCONTRINI", "MMPOS", "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("IMPORT_SCONTRINI", "MMPOS", "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("IMPORT_SCONTRINI", "MMPOS", "LISTENING", "N",
"Se LISTENIG = 'N' la procedura di importazione non si potrà mai mettere in ascolto sulla directory perchè nella procedura vengono prese in considerazione più file.", false, null, false, false,
false, false, false, null, false, null);
createSetup("IMPORT_SCONTRINI", "MMPOS", "PATH_FILE", null,
"Directory contente i file da importare.", false, null, false, false,
false, false, false, null, false, null);
createSetup("IMPORT_SCONTRINI", "MMPOS", "PATH_FILE_IMPORTED", null,
"Directory dove vengono spostati i file dopo l'importazione.", false, null, false, false,
false, false, false, null, false, null);
if (isCustomer(IntegryCustomer.Carelli))
updateSetupValue("IMPORT_SCONTRINI", "MMPOS", "ATTIVO", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,28 +0,0 @@
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_20250926131536 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("IMPORT_SCONTRINI", "MMPOS_SERVICES", "COD_VOUCHER", null,
"elenco dei codici utilizzati per i voucher ( separati da |)", false, null, false, false,
false, false, false, null, false, null);
if ( isCustomer(IntegryCustomer.Carelli))
updateSetupValue("IMPORT_SCONTRINI", "MMPOS_SERVICES", "COD_VOUCHER", "655783_0-L");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,281 +0,0 @@
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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Migration_20250929172222 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Idrotecnica) || isCustomer(IntegryCustomer.Sabato) || isCustomer(IntegryCustomer.Ime) ||
isCustomer(IntegryCustomer.Materica) || isCustomer(IntegryCustomer.Lippolis) || isCustomer(IntegryCustomer.Integry)){
//Creo uno script SQL per cancellare e ricreare le FK che punteranno a stb_activity_old
String fixFkSqlScript = "SELECT fk.name AS FK_Name,\n" +
" OBJECT_NAME(fk.parent_object_id) AS FK_Table,\n" +
" c1.name AS FK_Column,\n" +
" OBJECT_NAME(fk.referenced_object_id) AS Ref_Table,\n" +
" c2.name AS Ref_Column,\n" +
" 'ALTER TABLE [' + OBJECT_NAME(fk.parent_object_id) +\n" +
" '] DROP CONSTRAINT [' + fk.name + ']; ' +\n" +
" 'ALTER TABLE [' + OBJECT_NAME(fk.parent_object_id) +\n" +
" '] WITH CHECK ADD CONSTRAINT [' + fk.name +\n" +
" '] FOREIGN KEY([' + c1.name +\n" +
" ']) REFERENCES [dbo].[stb_activity]([' + c2.name + ']);' AS FixScript\n" +
"FROM sys.foreign_keys fk\n" +
" INNER JOIN sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id\n" +
" INNER JOIN sys.columns c1 ON fkc.parent_object_id = c1.object_id AND fkc.parent_column_id = c1.column_id\n" +
" INNER JOIN sys.columns c2\n" +
" ON fkc.referenced_object_id = c2.object_id AND fkc.referenced_column_id = c2.column_id\n" +
"WHERE fk.referenced_object_id = OBJECT_ID('dbo.stb_activity');";
final List<HashMap<String, Object>> fixScriptResult = executeQuery(fixFkSqlScript);
String[] fixScripts = new String[0];
if (fixScriptResult != null && !fixScriptResult.isEmpty()) {
fixScripts = fixScriptResult.stream()
.map(x -> (String) x.get("FixScript"))
.toArray(String[]::new);
}
executeStatement("CREATE TABLE dbo.stb_activity_new\n" +
"(\n" +
" activity_id VARCHAR(15) NOT NULL\n" +
" CONSTRAINT pk_stb_activity_new\n" +
" PRIMARY KEY NONCLUSTERED\n" +
" WITH (FILLFACTOR = 90),\n" +
" data_ins_act DATETIME NOT NULL,\n" +
" activity_type_id VARCHAR(40) NOT NULL,\n" +
" activity_description VARCHAR(1024),\n" +
" parent_activity_id VARCHAR(15),\n" +
" user_name VARCHAR(40) NOT NULL\n" +
" CONSTRAINT fk_stb_activity_new_stb_user\n" +
" REFERENCES dbo.stb_user,\n" +
" tipo_anag VARCHAR,\n" +
" cod_anag VARCHAR(15),\n" +
" estimated_date DATETIME,\n" +
" estimated_time DATETIME,\n" +
" alarm_date DATETIME,\n" +
" alarm_time DATETIME,\n" +
" effective_date DATETIME,\n" +
" effective_time DATETIME,\n" +
" activity_result_id VARCHAR(15)\n" +
" CONSTRAINT fk_stb_activity_new_stb_activity_new_res\n" +
" REFERENCES dbo.stb_activity_result,\n" +
" result_description VARCHAR(1024),\n" +
" estimated_enddate DATETIME,\n" +
" estimated_endtime DATETIME,\n" +
" effective_enddate DATETIME,\n" +
" effective_endtime DATETIME,\n" +
" cod_jcom VARCHAR(10)\n" +
" CONSTRAINT fk_stb_activity_new_jtb_comt\n" +
" REFERENCES dbo.jtb_comt,\n" +
" user_creator VARCHAR(40),\n" +
" cod_jfas VARCHAR(5) DEFAULT NULL\n" +
" CONSTRAINT fk_stb_activity_new_jtb_fasi\n" +
" REFERENCES dbo.jtb_fasi,\n" +
" perc_comp NUMERIC(15, 5)\n" +
" DEFAULT 0 NOT NULL,\n" +
" estimated_hours NUMERIC(15, 5)\n" +
" DEFAULT 0 NOT NULL,\n" +
" cod_mart VARCHAR(15)\n" +
" CONSTRAINT fk_stb_activity_new_mtb_aart\n" +
" REFERENCES dbo.mtb_aart,\n" +
" matricola VARCHAR(20)\n" +
" CONSTRAINT fk_stb_activity_new_matricola\n" +
" REFERENCES dbo.vtb_amac,\n" +
" priorita INT,\n" +
" activity_play_counter NUMERIC(20, 5) DEFAULT 0 NOT NULL,\n" +
" flag_tipologia VARCHAR NOT NULL,\n" +
" activity_event VARCHAR(1024),\n" +
" guarantee VARCHAR,\n" +
" note VARCHAR(1024),\n" +
" rfid VARCHAR(40),\n" +
" id_lotto INT,\n" +
" persona_rif VARCHAR(40),\n" +
" hr_num INT,\n" +
" gestione VARCHAR,\n" +
" data_ord DATETIME,\n" +
" num_ord INT,\n" +
" id_step INT,\n" +
" id_riga INT,\n" +
" ora_ins_act DATETIME,\n" +
" indice_gradimento NUMERIC(20, 5) DEFAULT 0,\n" +
" note_gradimento VARCHAR(8000),\n" +
" flag_risolto VARCHAR DEFAULT 'N',\n" +
" user_modifier VARCHAR(40),\n" +
" ora_mod_act DATETIME,\n" +
" ora_view_act DATETIME,\n" +
" cod_vdes VARCHAR(5),\n" +
" partita_mag VARCHAR(20),\n" +
" cod_cmac VARCHAR(20),\n" +
" wrike_id VARCHAR(8000),\n" +
" cod_mgrp VARCHAR(5)\n" +
" CONSTRAINT stb_activity_new_mtb_grup_cod_mgrp_fk\n" +
" REFERENCES dbo.mtb_grup,\n" +
" plan_id BIGINT\n" +
" CONSTRAINT fk_stb_activity_new_stb_activity_new_plan\n" +
" REFERENCES dbo.stb_activity_plan,\n" +
" id_posizione BIGINT\n" +
" CONSTRAINT fk_stb_activity_new_stb_posizioni\n" +
" REFERENCES dbo.stb_posizioni,\n" +
" CONSTRAINT fk_stb_activity_new_tipologia\n" +
" FOREIGN KEY (activity_type_id, flag_tipologia) REFERENCES dbo.stb_activity_type\n" +
")\n"
,
"CREATE INDEX ix_activity_effective\n" +
" ON dbo.stb_activity_new (activity_id, effective_date, effective_time, effective_enddate, effective_endtime)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_activity_estimate\n" +
" ON dbo.stb_activity_new (activity_id, estimated_date, estimated_time, estimated_enddate, estimated_endtime)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_activity_result_id\n" +
" ON dbo.stb_activity_new (activity_result_id)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_activity_type_id\n" +
" ON dbo.stb_activity_new (activity_type_id, flag_tipologia)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_stb_activity_new_cod_jcom\n" +
" ON dbo.stb_activity_new (cod_jcom)\n" +
" WITH (FILLFACTOR = 90)\n",
"CREATE INDEX ix_stb_activity_new_cod_jfas\n" +
" ON dbo.stb_activity_new (cod_jfas)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_stb_activity_new_cod_mart\n" +
" ON dbo.stb_activity_new (cod_mart)\n" +
" WITH (FILLFACTOR = 90)\n",
"CREATE INDEX ix_stb_activity_new_parent_activity_id\n" +
" ON dbo.stb_activity_new (parent_activity_id)\n" +
" WITH (FILLFACTOR = 90)\n",
"CREATE INDEX ix_stb_activity_new_stb_activity_new\n" +
" ON dbo.stb_activity_new (parent_activity_id)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_stb_activity_new_stb_activity_new_res\n" +
" ON dbo.stb_activity_new (activity_result_id)\n" +
" WITH (FILLFACTOR = 90)\n",
"CREATE INDEX ix_stb_activity_new_stb_user\n" +
" ON dbo.stb_activity_new (user_name)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_stb_activity_new_user_name\n" +
" ON dbo.stb_activity_new (user_name)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX ix_stb_activivty_priorita\n" +
" ON dbo.stb_activity_new (priorita)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"CREATE INDEX stb_activity_new\n" +
" ON dbo.stb_activity_new (activity_type_id)\n" +
" WITH (FILLFACTOR = 90)\n" ,
"insert into stb_activity_new " +
"select * from stb_activity",
"EXEC sp_rename 'dbo.stb_activity', 'stb_activity_old';",
"EXEC sp_rename 'dbo.stb_activity_new', 'stb_activity';"
);
executeStatement(fixScripts);
}
dropIndex("stb_activity", "ix_stb_activity_raplav");
dropIndex("stb_activity", "ix_stb_activity_effective_date");
dropIndex("stb_activity", "ix_activity_effective");
dropIndex("stb_activity", "ix_activity_estimate");
dropIndex("stb_activity", "ix_stb_activity_alarm");
executeStatement(
"UPDATE stb_activity\n" +
"SET\n" +
" estimated_time = ISNULL(estimated_time, estimated_date),\n" +
" estimated_endtime = ISNULL(estimated_endtime, estimated_enddate),\n" +
" effective_time = ISNULL(effective_time, effective_date),\n" +
" effective_endtime = ISNULL(effective_endtime, effective_enddate),\n" +
" alarm_time = ISNULL(alarm_time, alarm_date)\n" +
"WHERE(\n" +
" estimated_time IS NULL\n" +
" OR estimated_endtime IS NULL\n" +
" OR effective_time IS NULL\n" +
" OR effective_endtime IS NULL\n" +
" OR alarm_time IS NULL\n" +
" );\n",
"alter table stb_activity drop column data_ins_act ",
"alter table stb_activity drop column estimated_date ",
"alter table stb_activity drop column alarm_date ",
"alter table stb_activity drop column effective_date ",
"alter table stb_activity drop column estimated_enddate ",
"alter table stb_activity drop column effective_enddate ",
"alter table stb_activity add data_ins_act as cast(ora_ins_act as date) ",
"alter table stb_activity add estimated_date as cast(estimated_time as date) ",
"alter table stb_activity add alarm_date as cast(alarm_time as date) ",
"alter table stb_activity add effective_date as cast(effective_time as date) ",
"alter table stb_activity add estimated_enddate as cast(estimated_endtime as date) ",
"alter table stb_activity add effective_enddate as cast(effective_endtime as date) ");
List<IndexTableDTO.ColumnIndex> columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("alarm_time"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("alarm_date"));
createIndex(new IndexTableDTO()
.setTableName("stb_activity")
.setIndexName("ix_stb_activity_alarm")
.setColumnsIndex(columnsIndex));
columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("activity_id"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("estimated_date"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("estimated_time"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("estimated_enddate"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("estimated_endtime"));
createIndex(new IndexTableDTO()
.setTableName("stb_activity")
.setIndexName("ix_activity_estimate")
.setColumnsIndex(columnsIndex));
columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("activity_id"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("effective_date"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("effective_enddate"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("effective_time"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("effective_endtime"));
createIndex(new IndexTableDTO()
.setTableName("stb_activity")
.setIndexName("ix_activity_effective")
.setColumnsIndex(columnsIndex));
columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("data_ins_act"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("flag_tipologia"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("activity_type_id"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("cod_jcom"));
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("cod_jfas"));
createIndex(new IndexTableDTO()
.setTableName("stb_activity")
.setIndexName("ix_stb_activity_raplav")
.setColumnsIndex(columnsIndex));
columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex().setColumnName("effective_date"));
createIndex(new IndexTableDTO()
.setTableName("stb_activity")
.setIndexName("stb_activity_effective_date")
.setColumnsIndex(columnsIndex));
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,32 +0,0 @@
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_20251002130813 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update stb_gest_setup set flag_setup_depo = 'S'\n" +
"where gest_name = 'IMPORT_SCONTRINI'\n" +
"and key_section = 'ATTIVO'\n" +
"and section = 'MMPOS'");
enableSaveToRest("nvdoct");
if (isCustomer(IntegryCustomer.Carelli)) {
executeStatement("UPDATE stb_gest_setup SET value = 'N'\n" +
"where gest_name = 'IMPORT_SCONTRINI'\n" +
"and key_section = 'ATTIVO'\n" +
"and section not in ('INTEGRETAIL', 'MMPOS_SERVICES', 'MMPOS')");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -11,9 +11,6 @@ public class Migration_20251002154118 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS())
return;
if (isCustomerDb(IntegryCustomerDB.Carelli_Winact)) {
executeStatement(
"ALTER TABLE mtb_aart\n" +

View File

@@ -1,19 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251006091145 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("exec sp_rename 'ntb_docr.val_voucher', 'val_sco_st'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,345 +0,0 @@
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_20251006171357 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Biolevante_Biolevante)) return;
createOrUpdateView("mvw_TracciabRintracciabProd", "CREATE view [dbo].[mvw_TracciabRintracciabProd] as\n" +
"SELECT produzioni.cod_mart AS idart,\n" +
" produzioni.partita_mag AS idlotto,\n" +
" 1 AS grupporighe,\n" +
" ROW_NUMBER() OVER (PARTITION BY produzioni.cod_mart, produzioni.partita_mag ORDER BY item_id) AS riga,\n" +
" produzioni.data_produzione AS data_reg,\n" +
" primocarico.data_reg_provenienza,\n" +
" CASE WHEN livello > 0 THEN ' ' ELSE '' END + conto AS cod_mart,\n" +
" CASE WHEN livello > 0 THEN ' ' ELSE '' END + dettaglio_conto AS partita_mag,\n" +
" primocarico.cod_dtip AS cod_dtip,\n" +
" primocarico.tipodocumento AS tipodoc,\n" +
" descrizione_conto AS descrizione_estesa,\n" +
" mtb_aart.unt_mis,\n" +
" 0 AS qta_car,\n" +
" qta_consumata AS qta_scar,\n" +
" primocarico.data_doc,\n" +
" primocarico.ser_doc,\n" +
" primocarico.num_doc,\n" +
" primocarico.cod_anag,\n" +
" primocarico.rag_soc,\n" +
" primocarico.part_iva,\n" +
" primocarico.citta,\n" +
" tracc.cod_prod AS codprodotto,\n" +
" tracc.partita_mag AS partita_mag_prod,\n" +
" primocarico.nazione_prov\n" +
"FROM mtb_aart,\n" +
" (SELECT mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_msfa,\n" +
" MAX(dtb_docr.data_doc) AS data_produzione,\n" +
" dtb_docr.cod_mart,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag,\n" +
" SUM(qta_doc * rap_conv) AS qta_prod\n" +
" FROM dtb_docr\n" +
" INNER JOIN dtb_tipi ON dtb_docr.cod_dtip = dtb_tipi.cod_dtip\n" +
" INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" WHERE gestione = 'L'\n" +
" AND segno_qta_car > 0\n" +
" AND tipo_emissione = 'DIRETTA'\n" +
" AND data_doc >= '2021/01/01'\n" +
" GROUP BY mtb_aart.cod_mgrp, mtb_aart.cod_msgr, mtb_aart.cod_msfa,\n" +
" dtb_docr.cod_mart,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag) produzioni\n" +
" CROSS APPLY [f_pp_consuntivo_prod_tracc](produzioni.cod_mart, produzioni.partita_mag, produzioni.qta_prod,\n" +
" produzioni.cod_mart, produzioni.partita_mag, produzioni.qta_prod, 0,\n" +
" '', 0) tracc\n" +
" LEFT OUTER JOIN\n" +
" (SELECT DISTINCT mtb_movi.cod_anag,\n" +
" gtb_anag.rag_soc,\n" +
" gtb_anag.part_iva,\n" +
" gtb_anag.citta,\n" +
" mtb_movi.cod_dtip,\n" +
" dtb_tipi.descrizione AS tipodocumento,\n" +
" mtb_movi.data_reg AS data_reg_provenienza,\n" +
" mtb_movi.data_doc,\n" +
" mtb_movi.ser_doc,\n" +
" mtb_movi.num_doc,\n" +
" mtb_movi.cod_mart,\n" +
" mtb_movi.partita_mag,\n" +
" ISNULL(gtb_nazi.cod_nazione_iso, mtb_partita_mag.nazione_prov) AS nazione_prov\n" +
" FROM gtb_anag\n" +
" INNER JOIN\n" +
" mtb_movi ON mtb_movi.cod_anag = gtb_anag.cod_anag\n" +
" INNER JOIN dtb_tipi ON mtb_movi.cod_dtip = dtb_tipi.cod_dtip\n" +
" INNER JOIN\n" +
" (SELECT mtb_movi.cod_mart, mtb_movi.partita_mag, MIN(num_mov) AS num_mov\n" +
" FROM mtb_movi\n" +
" INNER JOIN\n" +
" (SELECT cod_mart, partita_mag, MIN(data_reg) AS data_reg\n" +
" FROM mtb_movi\n" +
" WHERE gestione IN ('A', 'L') AND qta_car > 0\n" +
" OR gestione = 'V' AND qta_scar > 0\n" +
" GROUP BY cod_mart, partita_mag) q ON mtb_movi.data_reg = q.data_reg\n" +
" AND mtb_movi.cod_mart = q.cod_mart\n" +
" AND mtb_movi.partita_mag = q.partita_mag\n" +
" WHERE gestione IN ('A', 'L')\n" +
" AND qta_car > 0\n" +
" GROUP BY mtb_movi.cod_mart, mtb_movi.partita_mag) q\n" +
" ON mtb_movi.num_mov = q.num_mov\n" +
" AND mtb_movi.cod_mart = q.cod_mart\n" +
" AND mtb_movi.partita_mag = q.partita_mag\n" +
" LEFT OUTER JOIN mtb_partita_mag ON mtb_movi.cod_mart = mtb_partita_mag.cod_mart\n" +
" AND mtb_movi.partita_mag = mtb_partita_mag.partita_mag\n" +
" LEFT OUTER JOIN gtb_nazi ON mtb_partita_mag.nazione_prov = gtb_nazi.nazione) primocarico\n" +
" ON tracc.conto = primocarico.cod_mart AND tracc.dettaglio_conto = primocarico.partita_mag\n" +
"\n" +
"WHERE tracc.conto = mtb_aart.cod_mart\n" +
" AND tracc.livello < 30\n" +
"UNION ALL\n" +
"SELECT dtb_docr.cod_mart AS idart,\n" +
" dtb_docr.partita_mag AS idlotto,\n" +
" 2 AS grupporighe,\n" +
" 1 AS riga,\n" +
" dtb_doct.data_reg,\n" +
" dtb_doct.data_reg AS data_reg_provenienza,\n" +
" dtb_docr.cod_mart,\n" +
" dtb_docr.partita_mag,\n" +
" dtb_doct.cod_dtip cod_dtip,\n" +
" ISNULL(docpadre.descrizione, dtb_tipi.descrizione) AS tipodoc,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.unt_mis AS unt_mis,\n" +
" SUM(dtb_docr.qta_doc * rap_conv * segno_qta_car) AS qta_car,\n" +
" 0 AS qta_scar,\n" +
" (dtb_doct.data_doc) data_doc,\n" +
" (dtb_doct.ser_doc) ser_doc,\n" +
" (dtb_doct.num_doc) num_doc,\n" +
" (dtb_docr.cod_anag) cod_anag,\n" +
" (gtb_anag.rag_soc) AS rag_soc,\n" +
" (gtb_anag.part_iva) AS part_iva,\n" +
" (gtb_anag.citta) AS citta,\n" +
" NULL AS cod_prod,\n" +
" NULL AS partita_mag_prod,\n" +
" NULL AS nazione_prov\n" +
"FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag\n" +
" AND dtb_doct.cod_dtip = dtb_docr.cod_dtip\n" +
" AND dtb_doct.data_doc = dtb_docr.data_doc\n" +
" AND dtb_doct.ser_doc = dtb_docr.ser_doc\n" +
" AND dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_docr.cod_dtip = dtb_tipi.cod_dtip\n" +
" INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN gtb_anag ON dtb_docr.cod_anag = gtb_anag.cod_anag\n" +
" LEFT OUTER JOIN\n" +
" (SELECT CASE\n" +
" WHEN dtb_tipi.gestione IN ('A', 'L') AND segno_qta_car = 1 THEN 'CARICO DA ACQUISTO/ALTRO STABILIMENTO'\n" +
" WHEN dtb_tipi.gestione = 'L' AND segno_qta_scar = 1 THEN 'SCARICO A LAVORAZIONE'\n" +
" ELSE\n" +
" dtb_tipi.descrizione END descrizione,\n" +
" dtb_docr.activity_id_row\n" +
" FROM dtb_docr\n" +
" INNER JOIN\n" +
" dtb_tipi ON dtb_docr.cod_dtip = dtb_tipi.cod_dtip\n" +
" WHERE dtb_docr.activity_id_row IS NOT NULL\n" +
" AND dtb_docr.activity_id_row <> ''\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA') docpadre ON dtb_doct.activity_id = docpadre.activity_id_row\n" +
"WHERE dtb_doct.gestione IN ('L', 'A')\n" +
" AND tipo_emissione = 'DIRETTA'\n" +
" AND segno_qta_car > 0\n" +
" AND dtb_doct.data_doc >= '2021/01/01'\n" +
"GROUP BY dtb_doct.data_reg, dtb_docr.cod_mart, dtb_docr.partita_mag, dtb_doct.cod_dtip, dtb_tipi.descrizione,\n" +
" mtb_aart.descrizione_estesa,\n" +
" dtb_doct.data_doc, dtb_doct.ser_doc, dtb_doct.num_doc,\n" +
" dtb_docr.cod_anag, gtb_anag.rag_soc, gtb_anag.part_iva, gtb_anag.citta, mtb_aart.unt_mis,\n" +
" docpadre.descrizione\n" +
"\n" +
"UNION ALL\n" +
"\n" +
"\n" +
"--Scarichi e rintracciabilità\n" +
"SELECT produzioni.cod_mart AS idart,\n" +
" produzioni.partita_mag AS idlotto,\n" +
" 3 AS grupporighe,\n" +
" rintra.riga,\n" +
" data_reg AS data_reg,\n" +
" data_reg AS data_reg_provenienza,\n" +
" rintra.cod_mart,\n" +
" rintra.partita_mag,\n" +
" rintra.cod_dtip,\n" +
" dtb_tipi.descrizione AS tipodoc,\n" +
" mtb_aart.descrizione_estesa,\n" +
" produzioni.unt_mis,\n" +
" qta_car,\n" +
" qta_scar,\n" +
" data_doc,\n" +
" ser_doc,\n" +
" num_doc,\n" +
" rintra.cod_anag,\n" +
" gtb_anag.rag_soc,\n" +
" gtb_anag.part_iva,\n" +
" gtb_anag.citta AS citta,\n" +
" cod_prod,\n" +
" partita_mag_prod,\n" +
" NULL AS nazione_prov\n" +
"FROM (SELECT dtb_docr.cod_mart,\n" +
" partita_mag AS partita_mag,\n" +
" mtb_aart.unt_mis AS unt_mis,\n" +
" SUM(qta_doc * rap_conv) AS qta_prod\n" +
" FROM dtb_docr\n" +
" INNER JOIN dtb_tipi ON dtb_docr.cod_dtip = dtb_tipi.cod_dtip\n" +
" INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart\n" +
" WHERE gestione IN ('L', 'A')\n" +
" AND segno_qta_car > 0\n" +
" AND dtb_docr.cod_dtip NOT IN ('RET', 'INV')\n" +
" AND dtb_docr.data_doc >= '2021/01/01'\n" +
" GROUP BY dtb_docr.cod_mart, partita_mag, mtb_aart.unt_mis) produzioni\n" +
" CROSS APPLY dbo.f_pp_consuntivo_prod_rintrac(produzioni.cod_mart, produzioni.partita_mag, '', 0, 1) rintra\n" +
" INNER JOIN dtb_tipi ON rintra.cod_dtip = dtb_tipi.cod_dtip\n" +
" INNER JOIN gtb_anag ON rintra.cod_anag = gtb_anag.cod_anag\n" +
" INNER JOIN mtb_aart ON rintra.cod_mart = mtb_aart.cod_mart");
createOrUpdateView("mvw_TracciabRintracciabProd_old", "CREATE view [dbo].[mvw_TracciabRintracciabProd_old] as\n" +
"Select produzioni.cod_mart as IDArt, \n" +
" produzioni.partita_mag as IDLotto, \n" +
" 1 as GruppoRighe, \n" +
" ROW_NUMBER() over (partition by produzioni.cod_mart, produzioni.partita_mag order by item_id) as riga,\n" +
" produzioni.data_produzione as data_reg, \n" +
" PrimoCarico.data_reg_provenienza,\n" +
" case when livello > 0 then ' ' else '' end + conto as cod_mart, \n" +
" case when livello > 0 then ' ' else '' end + dettaglio_conto as partita_mag, \n" +
" PrimoCarico.cod_dtip as cod_dtip, PrimoCarico.Tipodocumento as tipoDoc, \n" +
" descrizione_conto as descrizione_estesa, \n" +
" mtb_aart.unt_mis, \n" +
" 0 as qta_car, qta_consumata as qta_Scar,\n" +
" PrimoCarico.data_doc, PrimoCarico.ser_doc, PrimoCarico.num_doc, PrimoCarico.cod_anag, PrimoCarico.rag_soc, PrimoCarico.part_iva, PrimoCarico.citta,\n" +
" tracc.cod_prod as codProdotto, tracc.partita_mag as partita_mag_prod,\n" +
" PrimoCarico.nazione_prov\n" +
" from mtb_aart,\n" +
" (\n" +
" select mtb_aart.cod_mgrp, mtb_aart.cod_msgr, mtb_aart.cod_msfa, \n" +
" max(dtb_docr.data_doc) as data_produzione, dtb_docr.cod_mart, \n" +
" mtb_aart.descrizione_estesa, \n" +
" partita_mag,\n" +
" SUM(qta_doc*rap_conv) as qta_prod\n" +
" from dtb_docr, dtb_tipi, mtb_aart\n" +
" where gestione = 'L' and dtb_docr.cod_dtip = dtb_tipi.cod_dtip and dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" segno_qta_car > 0 and tipo_emissione = 'DIRETTA'\n" +
" and data_doc >= '2021/01/01'\n" +
" group by mtb_aart.cod_mgrp, mtb_aart.cod_msgr, mtb_aart.cod_msfa, \n" +
" dtb_docr.cod_mart, \n" +
" mtb_aart.descrizione_estesa, \n" +
" partita_mag \n" +
" ) produzioni cross apply [f_pp_consuntivo_prod_tracc](produzioni.cod_mart,produzioni.partita_mag,produzioni.qta_prod,produzioni.cod_mart,produzioni.partita_mag,produzioni.qta_prod,0,'',0) tracc\n" +
" left outer join\n" +
" (select distinct mtb_movi.cod_anag, gtb_anag.rag_soc, gtb_anag.part_iva, gtb_anag.citta, mtb_movi.cod_dtip, dtb_tipi.descrizione as Tipodocumento,\n" +
" mtb_movi.data_reg as data_reg_provenienza, \n" +
" mtb_movi.data_doc, mtb_movi.ser_doc, mtb_movi.num_doc, mtb_movi.cod_mart, mtb_movi.partita_mag,\n" +
" mtb_partita_mag.nazione_prov\n" +
" from gtb_anag, mtb_movi left outer join mtb_partita_mag on mtb_movi.cod_mart = mtb_partita_mag.cod_mart\n" +
" and mtb_movi.partita_mag = mtb_partita_mag.partita_mag,\n" +
" dtb_tipi,\n" +
" (\n" +
" select mtb_movi.cod_mart, mtb_movi.partita_mag, min(num_mov) as num_mov \n" +
" from mtb_movi,\n" +
" (Select cod_mart, partita_mag, min(data_reg) as data_reg\n" +
" from mtb_movi where gestione in ('A','L') and qta_car > 0 or gestione = 'V' and qta_Scar > 0\n" +
" group by cod_mart, partita_mag\n" +
" ) q\n" +
" where mtb_movi.data_reg =q.data_reg and mtb_movi.cod_mart = q.cod_mart and mtb_movi.partita_mag = q.partita_mag \n" +
" and gestione in ('A','L') and qta_car > 0 \n" +
" group by mtb_movi.cod_mart, mtb_movi.partita_mag\n" +
" )q\n" +
" \n" +
" where mtb_movi.cod_anag = gtb_anag.cod_anag and\n" +
" mtb_movi.cod_dtip = dtb_tipi.cod_dtip and\n" +
" mtb_movi.num_mov = q.num_mov and mtb_movi.cod_mart = q.cod_mart and mtb_movi.partita_mag = q.partita_mag\n" +
" )PrimoCarico on tracc.conto = PrimoCarico.cod_mart and tracc.dettaglio_conto = primoCarico.partita_mag\n" +
" \n" +
" where tracc.conto = mtb_aart.cod_mart and\n" +
" tracc.livello < 30\n" +
" UNION ALL\n" +
" select \n" +
" dtb_docr.cod_mart as IDArt, dtb_docr.partita_mag as IDLotto, \n" +
" 2 as GruppoRighe, 1 as Riga, \n" +
" dtb_doct.data_reg,\n" +
" dtb_doct.data_reg as data_reg_provenienza,\n" +
" dtb_docr.cod_mart, dtb_docr.partita_mag, \n" +
" dtb_doct.cod_dtip cod_dtip, \n" +
" IsNull(docPadre.descrizione, dtb_tipi.descrizione)as tipoDoc, \n" +
" mtb_aart.descrizione_Estesa,\n" +
" mtb_aart.unt_mis as unt_mis,\n" +
" sum(dtb_docr.qta_doc*rap_conv*segno_qta_car) as qta_car, 0 as qta_Scar,\n" +
" (dtb_doct.data_doc) data_doc, \n" +
" (dtb_doct.ser_doc) ser_doc, \n" +
" (dtb_doct.num_doc) num_doc, \n" +
" (dtb_docr.cod_anag) cod_anag, \n" +
" (gtb_anag.rag_soc) as rag_soc, \n" +
" (gtb_anag.part_iva) as part_iva, \n" +
" (gtb_anag.citta) as citta,\n" +
" null as cod_prod, null as partita_mag_prod, null\n" +
" from dtb_doct left outer join \n" +
" ( \n" +
" Select case when dtb_tipi.gestione in ('A', 'L') and segno_Qta_car = 1 then 'CARICO DA ACQUISTO/ALTRO STABILIMENTO'\n" +
" when dtb_tipi.gestione = 'L' and segno_Qta_scar = 1 then 'SCARICO A LAVORAZIONE' else\n" +
" dtb_tipi.descrizione end descrizione, dtb_docr.activity_id_row\n" +
" From dtb_docr, dtb_tipi\n" +
" Where dtb_docr.cod_dtip =dtb_tipi.cod_dtip and dtb_docr.activity_id_row is not null and dtb_docr.activity_id_row <> ''\n" +
" and dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" ) docPadre on dtb_doct.activity_id = docPadre.activity_id_row, \n" +
" dtb_docr, dtb_tipi, mtb_aart, gtb_anag\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.gestione in ('L' ,'A') and\n" +
" tipo_emissione = 'DIRETTA'\n" +
" and dtb_docr.cod_dtip = dtb_tipi.cod_dtip and \n" +
" dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" dtb_docr.cod_anag = gtb_anag.cod_anag and\n" +
" segno_qta_car > 0 \n" +
" and dtb_doct.data_doc >= '2021/01/01'\n" +
" Group by dtb_doct.data_reg, dtb_docr.cod_mart, dtb_docr.partita_mag, dtb_doct.cod_dtip, dtb_tipi.descrizione, \n" +
" mtb_aart.descrizione_Estesa,\n" +
" dtb_doct.data_doc, dtb_doct.ser_doc, dtb_doct.num_doc, \n" +
" dtb_docr.cod_anag, gtb_anag.rag_soc, gtb_anag.part_iva, gtb_anag.citta, mtb_aart.unt_mis,\n" +
" docPadre.descrizione\n" +
" \n" +
" UNION ALL\n" +
"\n" +
"\n" +
" --Scarichi e rintracciabilità\n" +
" Select produzioni.cod_mart as IDArt,produzioni.partita_mag as IDLotto,\n" +
" 3 as GruppoRighe, Rintra.riga, data_reg as data_reg, \n" +
" data_reg as data_reg_provenienza,\n" +
" rintra.cod_mart, rintra.partita_mag, rintra.cod_dtip, dtb_tipi.descrizione as tipoDoc , \n" +
" mtb_aart.descrizione_estesa, produzioni.unt_mis,\n" +
" qta_car, qta_Scar, data_doc, ser_doc, num_doc, rintra.cod_anag, gtb_anag.rag_soc, gtb_anag.part_iva, gtb_anag.citta as citta, cod_prod, partita_mag_prod, null \n" +
" from \n" +
" (\n" +
" select dtb_docr.cod_mart, \n" +
" partita_mag as partita_mag,\n" +
" mtb_aart.unt_mis as unt_mis,\n" +
" SUM(qta_doc*rap_conv) as qta_prod\n" +
" from dtb_docr, dtb_tipi, mtb_aart\n" +
" where gestione in('L','A') and dtb_docr.cod_dtip = dtb_tipi.cod_dtip and dtb_docr.cod_mart = mtb_aart.cod_mart and\n" +
" segno_qta_car > 0 and dtb_docr.cod_dtip not in ('RET','INV')\n" +
" and dtb_docr.data_doc >= '2021/01/01'\n" +
" group by dtb_docr.cod_mart, partita_mag, mtb_aart.unt_mis \n" +
" ) produzioni\n" +
" Cross apply dbo.f_pp_consuntivo_prod_rintrac(produzioni.cod_mart,produzioni.partita_mag, '', 0, 1) Rintra,\n" +
" dtb_tipi, gtb_anag, mtb_aart\n" +
" where rintra.cod_dtip = dtb_tipi.cod_dtip and rintra.cod_anag = gtb_anag.cod_anag and rintra.cod_mart = mtb_aart.cod_mart");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,30 +0,0 @@
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_20251007120604 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_adocu_rc", "SETUP", "VERIFICA_PROTOCOLLO", "S",
"Se disabilitata, dopo la registrazione del documento di acquisto, l'apertura del movimento contabile è automatica senza la domanda di verifica del protocollo", false, null, false, false,
false, false, false, null, false, null);
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano)){
updateSetupValue("w_adocu_rc","SETUP","VERIFICA_PROTOCOLLO","N");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,31 +0,0 @@
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_20251007125216 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_cmovi_rc", "SETUP", "CONTROLLO_30GG", "S",
"Se abilitata, quando si va a variare un movimento contabile più vecchio di 30 gg parte la domanda di controllo ", false, null, false, false,
false, false, false, null, false, null);
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano)){
updateSetupValue("w_cmovi_rc","SETUP","CONTROLLO_30GG","N");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,28 +0,0 @@
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_20251008155302 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_SUPTABLE", "SETUP", "ATTIVA_MODIFICA", "S",
"attiva la linguetta che permette di inseire le query", true, "SI_NO", true, false,
true, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.Carelli)){
updateSetupValue("W_SUPTABLE", "SETUP", "ATTIVA_MODIFICA", "N");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,23 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251008163815 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("DTB_DOCT", "SETUP", "NUOVA_VERSIONE_RESI", "N",
"Se impostato a S attiva la nuova gestione dei resi", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,19 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251009104325 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
addDescriptionTable("mtb_aart", "Tabella che contiene le anagrafiche degli articoli");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,88 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251009112050 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
addDescriptionTable("atb_list_data", "Tabella che contiene Listini di acquisto in data");
addDescriptionTable("atb_list_imp", "Tabella che contiene importazione listini di acquisto");
addDescriptionTable("dtb_doc_log_import", "Tabella che contiene log importazione documenti");
addDescriptionTable("dtb_ord_log_import", "Tabella che contiene log importazione ordini");
addDescriptionTable("dtb_ord_steps", "Tabella che contiene quantitativo prodotto allocato per settore/ordine");
addDescriptionTable("gtb_divi_cambi", "Tabella che contiene Storico Cambi");
addDescriptionTable("gtb_mod_iva", "Tabella che contiene modelli iva");
addDescriptionTable("jrl_flav_users", "Tabella che contiene relazione tra lavoratori e utenti");
addDescriptionTable("jtb_disegni_files", "Tabella che contiene contenuto files");
addDescriptionTable("jtb_rfid_ord", "Tabella che contiene RFID Associato ad ordine");
addDescriptionTable("mtb_aart_marchio", "Tabella che contiene marchio prodotto");
addDescriptionTable("mtb_col_log_import", "Tabella che contiene colli generari durante l'importazione degli ordini");
addDescriptionTable("mtb_ecr_categ", "Tabella che contiene Categorie");
addDescriptionTable("mtb_ecr_mcateg", "Tabella che contiene Macrocategoria");
addDescriptionTable("mtb_ecr_reparti", "Tabella che contiene Reparti");
addDescriptionTable("mtb_ecr_stipo", "Tabella che contiene Sottotipo");
addDescriptionTable("mtb_ecr_tipo", "Tabella che contiene Tipo");
addDescriptionTable("mtb_grup_costi", "Tabella che contiene costi per reparto");
addDescriptionTable("mtb_grup_sgrp_ass", "Tabella che contiene associazione gruppi_sottogruppi-articoli");
addDescriptionTable("mtb_lisa_data", "Tabella che contiene listini di acquisto in data");
addDescriptionTable("mtb_sfam", "Tabella che contiene Sottofamiglia");
addDescriptionTable("ntb_tipi_inca", "Tabella che contiene tipi incasso");
addDescriptionTable("serv_vamacc_load_activity", "Tabella che contiene di servizio contenente le attività relative ad un macchinario per area");
addDescriptionTable("srl_activity_users", "Tabella che contiene relazione attività con utenti associati");
addDescriptionTable("srl_user_activity_reports", "Tabella che contiene relazioni tra utenti e report che l'utente può visualizzare sulle attività");
addDescriptionTable("stb_activity_costs", "Tabella che contiene costi associati alle attività");
addDescriptionTable("stb_activity_dw_syntax_ft", "Tabella che contiene filtri attività relativi al salvataggio della sintassi dei datawindow");
addDescriptionTable("stb_activity_log", "Tabella che contiene log attività attualmente aperte per utente");
addDescriptionTable("stb_activity_reports", "Tabella che contiene elenco report agganciati alle attività");
addDescriptionTable("stb_activity_result", "Tabella che contiene Esiti Attività");
addDescriptionTable("stb_apulia_transaction_count", "Tabella che contiene numero progressivo transazioni nell'anno");
addDescriptionTable("stb_apulia_transaction_log", "Tabella che contiene registrazione log transazioni");
addDescriptionTable("stb_calr_ore_gg", "Tabella che contiene righe calendario");
addDescriptionTable("stb_calt", "Tabella che contiene Testata calendario");
addDescriptionTable("stb_dw_syntax", "Tabella che contiene salvataggio sintassi datawindow");
addDescriptionTable("stb_publications_detail", "Tabella che contiene dettagli pubblicazione");
addDescriptionTable("stb_sync", "Tabella che contiene processi in esecuzione");
addDescriptionTable("stb_tipi_indirizzi", "Tabella che contiene tipologie indirizzi per invio tramite mail");
addDescriptionTable("stb_transaction_log", "Tabella che contiene log transazioni utente su gestioni");
addDescriptionTable("vtb_agen_group", "Tabella che contiene Agenti-Gruppi Merceologic");
addDescriptionTable("vtb_ass", "Tabella che contiene associazione nazionale clienti");
addDescriptionTable("vtb_auto_km", "Tabella che contiene km percorsi automezzo");
addDescriptionTable("vtb_clie", "Tabella che contiene Clienti: Codizioni Usuali di Vendita");
addDescriptionTable("vtb_compensi_tdr", "Tabella che contiene righe compensi transfert delivery");
addDescriptionTable("vtb_compensi_tdt", "Tabella che contiene testate compensi Transfert");
addDescriptionTable("vtb_dest_intercode", "Tabella che contiene punti vendita Intercode");
addDescriptionTable("vtb_dest_intercode_setup", "Tabella che contiene configurazione caratteristiche");
addDescriptionTable("vtb_dist_tdr", "Tabella che contiene righe distinte trasfert delivery");
addDescriptionTable("vtb_dist_tdt", "Tabella che contiene testate distinte trasfert delivery");
addDescriptionTable("vtb_griglia", "Tabella che contiene griglia assortimento");
addDescriptionTable("vtb_griglia_art", "Tabella che contiene assortimento articoli");
addDescriptionTable("vtb_grp_acq", "Tabella che contiene gruppi acquisto cliente");
addDescriptionTable("vtb_list_data", "Tabella che contiene Listini di vendita in data");
addDescriptionTable("vtb_ord_giror", "Tabella che contiene righe ordine di giro clienti");
addDescriptionTable("vtb_ord_girot", "Tabella che contiene testate ordine di giro clienti");
addDescriptionTable("vtb_premi_artr", "Tabella che contiene righe premi su articolo");
addDescriptionTable("vtb_premi_artt", "Tabella che contiene testate premi su articoli");
addDescriptionTable("vtb_promo_articoli", "Tabella che contiene promozione articoli");
addDescriptionTable("vtb_promo_clienti", "Tabella che contiene promozione clienti");
addDescriptionTable("vtb_promo_omaggi", "Tabella che contiene promozioni omaggi");
addDescriptionTable("vtb_promo_sconti", "Tabella che contiene sconti promozionali");
addDescriptionTable("vtb_tipi_negozio", "Tabella che contiene Tipologia Negozio");
addDescriptionTable("vtb_tipo_bloc_cons", "Tabella che contiene tipo blocco consegna");
addDescriptionTable("vtb_vett_cap", "Tabella che contiene Vettore-Zona-Nazione-CAP");
addDescriptionTable("vtb_vett_lett", "Tabella che contiene Lettera di vettura");
addDescriptionTable("vtb_vett_nazioni", "Tabella che contiene Vettore-Zone-Nazioni");
addDescriptionTable("vtb_vett_zone", "Tabella che contiene Vettore-Zone Tariffarie");
addDescriptionTable("wtb_clie", "Tabella che contiene associazioni utenti web-clienti");
addDescriptionTable("wtb_clie_dest", "Tabella che contiene associazioni utenti web-destinatari");
addDescriptionTable("wtb_users_info_plan_status", "Tabella che contiene contenente lo stato (ultima da export) dell'export");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,25 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251010102840 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("CREATE TABLE srl_user_table (\n" +
" table_name VARCHAR(255) NOT NULL,\n" +
" user_name VARCHAR(40) NOT NULL,\n" +
" CONSTRAINT PK_srl_user_table PRIMARY KEY (table_name, user_name),\n" +
" CONSTRAINT FK_srl_user_table_user FOREIGN KEY (user_name)\n" +
" REFERENCES stb_user(user_name)\n" +
");");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,19 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251010104422 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
addDescriptionTable("srl_user_table","Tabella che contiene la relazione tra utenti e tabelle");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,75 +0,0 @@
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_20251010104604 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Integry)) return;
createOrUpdateTrigger("t_updActivityDate", "CREATE TRIGGER [dbo].[t_updActivityDate] ON [dbo].[stb_activity]\n" +
"FOR INSERT, UPDATE \n" +
"AS\n" +
" DECLARE @ldt_estimatedDate DATETIME,\n" +
" @ldt_estimatedEndDate DATETIME,\n" +
" @ldt_effectiveDate DATETIME,\n" +
" @ldt_effectiveEndDate DATETIME,\n" +
" @ldt_estimatedDateParent DATETIME,\n" +
" @ldt_estimatedEndDateParent DATETIME,\n" +
" @ldt_effectiveDateParent DATETIME,\n" +
" @ldt_effectiveEndDateParent DATETIME,\n" +
" @ls_parentActivityID varchar(40),\n" +
" @ll_count integer, \n" +
" @ls_errMsg varchar(255)\n" +
"\n" +
" /* Necessaria per connessione OLEDB */\n" +
" set nocount on\n" +
"\n" +
" DECLARE crs_activity CURSOR FOR \n" +
" SELECT inserted.estimated_date,\n" +
" inserted.estimated_enddate,\n" +
" inserted.effective_date,\n" +
" inserted.effective_enddate,\n" +
" inserted.parent_activity_id,\n" +
" stb_activity.estimated_date,\n" +
" stb_activity.estimated_enddate,\n" +
" stb_activity.effective_date,\n" +
" stb_activity.effective_enddate\n" +
" FROM inserted,\n" +
" stb_activity\n" +
" WHERE inserted.parent_activity_id = stb_activity.activity_id\n" +
"\n" +
" OPEN crs_activity\n" +
" FETCH NEXT FROM crs_activity INTO @ldt_estimatedDate,@ldt_estimatedEndDate,@ldt_effectiveDate,@ldt_effectiveEndDate,@ls_parentActivityID,\n" +
" @ldt_estimatedDateParent,@ldt_estimatedEndDateParent,@ldt_effectiveDateParent,@ldt_effectiveEndDateParent\n" +
" WHILE @@FETCH_STATUS = 0 BEGIN\n" +
" IF @ls_parentActivityID is not null BEGIN\n" +
" IF @ldt_effectiveDate is not null BEGIN\n" +
" IF @ldt_effectiveDate < @ldt_effectiveDateParent OR @ldt_effectiveDateParent IS NULL BEGIN\n" +
" update stb_activity set effective_time = @ldt_effectiveDate from\n" +
" stb_activity where activity_id = @ls_parentActivityID;\n" +
" IF @@ERROR <> 0 RETURN\n" +
" END\n" +
" END\n" +
" END\n" +
" FETCH NEXT FROM crs_activity INTO @ldt_estimatedDate,@ldt_estimatedEndDate,@ldt_effectiveDate,@ldt_effectiveEndDate,@ls_parentActivityID,\n" +
" @ldt_estimatedDateParent,@ldt_estimatedEndDateParent,@ldt_effectiveDateParent,@ldt_effectiveEndDateParent\n" +
" END \n" +
"CLOSE crs_activity\n" +
"DEALLOCATE crs_activity\n" +
"\n" +
" /* Necessaria per connessione OLEDB */\n" +
" set nocount off");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,140 +0,0 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20251013091105 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("f_calcScad", "CREATE FUNCTION [dbo].[f_calcScad](@dataIniz DateTime,@codPaga varchar(5), @imponibile numeric(20,5), @imposta numeric(20,5)) \n" +
"RETURNS @dateScad TABLE (numRata int, dataScad DateTime, impScad numeric(20,5) ) AS \n" +
"\n" +
"begin\n" +
"\n" +
" Declare @ldt_dataInizCalc datetime;\n" +
" Declare @li_ggPrimaRata int;\n" +
" Declare @li_ggTraRate int;\n" +
" Declare @li_numRate int;\n" +
" Declare @li_CountRata int; \n" +
" Declare @addDay int;\n" +
" Declare @lc_impRata numeric(20,5);\n" +
" Declare @lc_impPrimaRata numeric(20,5);\n" +
" Declare @lc_approssimazione numeric(20,5);\n" +
" Declare @ls_ivaPrimaRata varchar(20);\n" +
" Declare @ls_dataRif varchar(20);\n" +
" \n" +
" SELECT @li_CountRata = 2;\n" +
" \n" +
" SELECT @li_ggPrimaRata = gtb_paga.gg_prima_rata, \n" +
" @li_ggTraRate = gtb_paga.gg_tra_rate,\n" +
" @ls_ivaPrimaRata = Iva_prima_rata,\n" +
" @ls_dataRif = gtb_paga.data_rif, \n" +
" @li_numRate = gtb_paga.num_rate\n" +
" FROM gtb_paga\n" +
" WHERE gtb_paga.cod_paga = @codPaga;\n" +
" \n" +
" IF @li_numRate > 0 \n" +
" begin\n" +
" IF @ls_ivaPrimaRata = 'PRIMA RATA SOLO IVA'\n" +
" begin\n" +
" Select @lc_impRata = round(@imponibile/(@li_numRate - 1),2)\n" +
" Select @lc_impPrimaRata = @imposta\n" +
" end\n" +
" else\n" +
" begin\n" +
" if @ls_ivaPrimaRata = 'SULLA PRIMA RATA'\n" +
" begin\n" +
" Select @lc_impRata = round(@imponibile/@li_numRate,2)\n" +
" Select @lc_impPrimaRata = @lc_impRata + @imposta\n" +
" end\n" +
" else\n" +
" begin\n" +
" Select @lc_impRata = round((@imponibile + @imposta) /@li_numRate,2)\n" +
" Select @lc_impPrimaRata = @lc_impRata \n" +
" end\n" +
" end\n" +
" end\n" +
" \n" +
" SELECT @ldt_dataInizCalc = @dataIniz\n" +
" \n" +
" IF left(@ls_dataRif, 9) = 'FINE MESE'\n" +
" begin\n" +
" IF MONTH( @dataIniz ) = 12\n" +
" begin\n" +
" SELECT @ldt_dataInizCalc = DATEADD(day, -1, \n" +
" CONVERT(datetime, \n" +
" Convert(varchar(4),Convert(int, year( @dataIniz ) + 1 )) \n" +
" + '-' + Convert( varchar(2), 1)\n" +
" + '-' + Convert( varchar(2),1), 121))\n" +
" end \n" +
" ELSE\n" +
" begin\n" +
" SELECT @ldt_dataInizCalc = DATEADD(day, -1, \n" +
" CONVERT(datetime, \n" +
" Convert(varchar(4),Convert(int, year( @dataIniz ))) \n" +
" + '-' + Convert( varchar(2), (MONTH( @dataIniz ) + 1))\n" +
" + '-' + Convert( varchar(2),1), 121))\n" +
" end\n" +
" end \n" +
" \n" +
" \n" +
" IF @li_ggPrimaRata > 0 \n" +
" begin\n" +
" select @ldt_dataInizCalc = dbo.f_aggiungiGiorniScad(@ldt_dataInizCalc, @li_ggPrimaRata, @ls_dataRif )\n" +
" Insert into @dateScad values (1, @ldt_dataInizCalc, @lc_impPrimaRata)\n" +
" end \n" +
" ELSE\n" +
" begin\n" +
" Insert into @dateScad values (1, @ldt_dataInizCalc, @lc_impPrimaRata)\n" +
" end\n" +
"\n" +
" WHILE @li_CountRata <= @li_numRate \n" +
" begin\n" +
" select @ldt_dataInizCalc = dbo.f_aggiungiGiorniScad(@ldt_dataInizCalc,@li_ggTraRate, @ls_dataRif )\n" +
"\n" +
" Insert into @dateScad values (@li_CountRata, @ldt_dataInizCalc, @lc_impRata)\n" +
" SELECT @li_CountRata = @li_CountRata + 1\n" +
" end \n" +
" \n" +
" /*** Calcolo eventuale residuo di approssimazione da imputare sull'ultima rata ***/\n" +
" Select @lc_approssimazione = @lc_impRata * (@li_numRate - 1) + @lc_impPrimaRata - (@imponibile + @imposta)\n" +
" IF @lc_approssimazione <> 0 \n" +
" begin\n" +
" Update @dateScad set impScad = impScad-@lc_approssimazione\n" +
" WHERE numRata = @li_numRate\n" +
" end\n" +
" \n" +
" Select @li_CountRata = 1\n" +
" Select @addDay = 0\n" +
" WHILE @li_CountRata <= @li_numRate \n" +
" begin \n" +
" IF @ls_dataRif = 'FINE MESE+1GG' \n" +
" SELECT @addDay = 1\n" +
" IF @ls_dataRif = 'FINE MESE+5GG' \n" +
" SELECT @addDay = 5\n" +
" IF @ls_dataRif = 'FINE MESE+10GG' \n" +
" SELECT @addDay = 10\n" +
" \n" +
" IF @addDay > 0\n" +
" begin \n" +
" Update @dateScad set dataScad = DATEADD(day, @addDay , dataScad)\n" +
" WHERE numRata = @li_CountRata\n" +
" end \n" +
" SELECT @li_CountRata = @li_CountRata + 1\n" +
" end\n" +
"\n" +
" return\n" +
"end");
}
@Override
public void down() throws Exception {
}
}

View File

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

View File

@@ -1,99 +0,0 @@
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_20251013174133 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Carelli)) return;
if (isCustomerDb(IntegryCustomerDB.Carelli_Format)) return;
createOrUpdateView("avw_last_acq_lotto_w"
, "CREATE VIEW avw_last_acq_lotto_w WITH SCHEMABINDING AS\n" +
" SELECT wdtb_doct.data_reg,\n" +
" cod_mart,\n" +
" wdtb_docr.partita_mag,\n" +
" wdtb_doct.cod_mdep,\n" +
" wdtb_doct.data_ins,\n" +
" mtb_depo.cod_vlis,\n" +
" wdtb_docr.id_riga\n" +
" FROM dbo.wdtb_doct\n" +
" INNER JOIN dbo.wdtb_docr ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND\n" +
" wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND\n" +
" wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" inner join dbo.mtb_depo on mtb_depo.cod_mdep = wdtb_doct.cod_mdep\n" +
" WHERE wdtb_docr.partita_mag IS NOT NULL");
executeStatement("CREATE UNIQUE CLUSTERED INDEX [IDX_CLUSTERED_avw_last_acq_lotto_w] ON [dbo].avw_last_acq_lotto_w\n" +
" (\n" +
" data_reg,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_mdep,\n" +
" data_ins,\n" +
" id_riga\n" +
" )",
"CREATE NONCLUSTERED INDEX ix_avw_last_acq_lotto_w_2\n" +
" ON [dbo].[avw_last_acq_lotto_w] ([cod_mart],[cod_mdep],[data_reg])\n" +
" INCLUDE ([data_ins],[cod_vlis])",
"CREATE NONCLUSTERED INDEX ix_avw_last_acq_lotto_w_1\n" +
" ON [dbo].[avw_last_acq_lotto_w] ([cod_mdep],[data_reg],[cod_vlis])\n" +
" INCLUDE ([cod_mart],[data_ins])");
createOrUpdateView("avw_last_acq_lotto", "CREATE VIEW avw_last_acq_lotto WITH SCHEMABINDING AS\n" +
" SELECT dtb_doct.data_reg,\n" +
" cod_mart,\n" +
" dtb_docr.partita_mag,\n" +
" dtb_doct.cod_mdep,\n" +
" dtb_doct.data_ins,\n" +
" mtb_depo.cod_vlis,\n" +
" dtb_docr.id_riga,\n" +
" CAST(dtb_doct.cod_anag AS VARCHAR(10))\n" +
" + '_' + dtb_doct.cod_dtip\n" +
" + '_' + convert(varchar(10), dtb_doct.data_doc, 112)\n" +
" + '_' + dtb_doct.ser_doc\n" +
" + '_' + CAST(dtb_doct.num_doc AS VARCHAR(10)) AS chiave_doc\n" +
" FROM dbo.dtb_doct\n" +
" INNER JOIN dbo.dtb_docr\n" +
" ON dtb_doct.cod_anag = dtb_docr.cod_anag AND dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dbo.dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dbo.mtb_depo on mtb_depo.cod_mdep = dtb_doct.cod_mdep\n" +
" WHERE dtb_tipi.gestione = 'A'\n" +
" AND dtb_docr.partita_mag IS NOT NULL\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_tipi.segno_qta_car = 1\n" +
" AND flag_chk_tracciabilita = 1\n" +
" and dtb_doct.data_reg >= CONVERT(datetime, '20230101', 112)");
executeStatement("CREATE UNIQUE CLUSTERED INDEX [IDX_CLUSTERED_avw_last_acq_lotto] ON [dbo].avw_last_acq_lotto\n" +
" (\n" +
" data_reg,\n" +
" cod_mart,\n" +
" partita_mag,\n" +
" cod_mdep,\n" +
" data_ins,\n" +
" id_riga,\n" +
" chiave_doc\n" +
" )");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,22 +0,0 @@
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_20251014154051 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.Auricchio) || isCustomer(IntegryCustomer.Florapulia)) return;
updateSetupValue("DATI_AZIENDA", "SETUP", "INVIO_EMAIL_NEW", "S");
}
@Override
public void down() throws Exception {
}
}

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