Compare commits

...

603 Commits

Author SHA1 Message Date
45c64ad0ac Fix su onlyResiduo in recuperaUl accettazione 2025-12-10 18:00:27 +01:00
398f0a9523 Aggiornato DialogScanOrCreateLUView per utilizzare i metodi synchronized 2025-12-10 17:50:16 +01:00
2727c1b01c Merge branch 'develop' into feature/RefactoringGestioneColli 2025-12-09 17:04:49 +01:00
9924165362 Finish v1.50.02(551) 2025-12-09 17:04:35 +01:00
0904388ffe Finish v1.50.02(551)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-12-09 17:04:34 +01:00
f86296d2a1 -> v1.50.02(551) 2025-12-09 17:04:27 +01:00
cfe2b85886 Fix anomalie 2025-12-09 17:02:57 +01:00
3614192ea9 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-12-09 16:15:51 +01:00
4d01a52590 Finish v1.50.01(550) 2025-12-09 16:15:28 +01:00
638e8650ee Finish v1.50.01(550)
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-12-09 16:15:27 +01:00
36061faeeb -> v1.50.01 (550) 2025-12-09 16:15:19 +01:00
83a183c5a6 Fix chiudiUl accettazioneOrdine 2025-12-09 16:14:21 +01:00
fd15235e6e Merge branch 'develop' into feature/RefactoringGestioneColli 2025-12-09 13:32:38 +01:00
a88ddab405 Finish v1.50.00(549) 2025-12-09 13:32:22 +01:00
9fb18215e3 Finish v1.50.00(549)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-12-09 13:32:21 +01:00
2e3af6d1b3 -> v1.50.00 (549) 2025-12-09 13:32:09 +01:00
ac38aaeea7 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-12-09 13:22:56 +01:00
ade18170ee Completati controlli anomalie ul 2025-12-09 13:09:22 +01:00
cc89441f0a Gestite anomalie ul in VersamentoMerce e Spedizione 2025-12-09 12:34:13 +01:00
f612e1c402 Iniziato refactor servizio getColloByBarcode per mostrare le anomalie ul 2025-12-09 11:04:39 +01:00
663d172edf Aggiornato AGP 8.13.1 2025-12-05 17:30:32 +01:00
56829d7ffd Merge branch 'develop' into feature/RefactoringGestioneColli 2025-12-05 13:19:31 +01:00
092fbd69b6 Finish v1.49.04(548) 2025-12-05 13:19:07 +01:00
878584a619 Finish v1.49.04(548)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-12-05 13:19:06 +01:00
5d52e2df46 -> v1.49.04 (548) 2025-12-05 13:19:02 +01:00
f25240abe4 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java
#	app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java
2025-12-05 13:13:00 +01:00
809d4ef5af Migliorata gestione aggiornamento obbligatorio 2025-12-05 13:05:05 +01:00
faa45cd096 In accettazione bolla aggiunta possibilità di segnare la bolla come consegnata 2025-12-05 12:23:26 +01:00
1ab9b10a13 Migliorie UI dark accettazione 2025-12-05 11:01:18 +01:00
a952f41e61 Merge branch 'master' into feature/RefactoringGestioneColli 2025-12-04 19:26:37 +01:00
cce4d2dbb2 Finish v1.49.03(547) 2025-12-04 19:26:13 +01:00
db246e6a94 Finish v1.49.03(547)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-12-04 19:26:12 +01:00
37ce428bf0 -> v1.49.03 (547) 2025-12-04 19:26:08 +01:00
49d099c339 Reso obbligatorio il posizionamento in Approvvigionamento Linee 2025-12-04 19:25:12 +01:00
64875c10c3 Fix barcodeUlOut per Approvvigionamento Linee.
Aggiunto logo integry per Dark Mode.
2025-12-04 19:04:33 +01:00
8b442ea4d0 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-12-04 17:57:33 +01:00
bb1867b1c8 Aggiunto supporto per approvvigionamento linee nella gestione delle spedizioni 2025-12-04 17:55:35 +01:00
42cb721e1c Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/rest/ProdFabbisognoLineeProdRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdView.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/prod_fabbisogno_linee_prod/DialogRowInfoProdFabbisognoLineeProdViewModel.java
#	app/src/main/res/layout/dialog_print_ul_sscc.xml
#	app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml
#	app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml
2025-12-04 10:39:57 +01:00
c104313d89 Migliorie UI 2025-12-04 10:04:16 +01:00
c8cc56bfd6 Fix su color dark mode 2025-12-02 12:25:08 +01:00
727c56a171 Fix su color dark mode 2025-12-02 12:14:07 +01:00
2c297db483 Fix su color dark mode 2025-11-27 18:08:38 +01:00
eb779c34ab Fix su color dark mode 2025-11-26 18:00:59 +01:00
05c306e29f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-26 16:02:32 +01:00
80b5b8db34 Finish v1.49.02(546) 2025-11-26 13:28:38 +01:00
e0b86db09d Finish v1.49.02(546)
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-11-26 13:28:37 +01:00
9d871f3ae4 -> v1.49.02 (546) 2025-11-26 13:28:32 +01:00
e025b234a7 Aggiunto deposito reale nell'header di ogni richiesta 2025-11-26 13:27:50 +01:00
acafcf720d Merge branch 'master' into feature/RefactoringGestioneColli 2025-11-24 17:20:51 +01:00
809ef43445 Finish v1.49.01(545) 2025-11-24 17:20:23 +01:00
1079c38a5f Finish v1.49.01(545)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-24 17:20:22 +01:00
f6388eff1c -> v1.49.01 (545) 2025-11-24 17:20:18 +01:00
38f3eced41 Migliorata ricerca di fillMtbAarts. Sostituite vecchie Stream.of() con stream native 2025-11-24 17:09:40 +01:00
b5010d480f Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverDTO.java
#	app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java
#	app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java
#	app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/rest/ProdRientroMerceOrderDetailRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-11-24 13:18:00 +01:00
495a8dae92 Mini migrazione di dataCollo a LocalDate 2025-11-24 13:11:55 +01:00
9e9bdcd16d Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-24 09:38:42 +01:00
ed938815bb Finish v1.49.00(544) 2025-11-24 09:38:12 +01:00
539e8b7c31 Finish v1.49.00(544)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-24 09:38:11 +01:00
92da8cde53 -> v1.49.00 (544) 2025-11-24 09:37:54 +01:00
fee8a13960 Aggiunto messaggio della quantità da prelevare minore della quantità totale disponibile anche in fase di chiusura o salvataggio ul 2025-11-21 17:22:48 +01:00
95c71d73ae Refactor avanti elenco ul già create 2025-11-21 15:25:26 +01:00
be8ce4de24 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-21 13:32:48 +01:00
3d0f7f16f9 Finish v1.48.03(543)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-21 13:32:21 +01:00
501ca404ff Finish v1.48.03(543) 2025-11-21 13:32:21 +01:00
5ad4fd7821 -> v1.48.03 (543) 2025-11-21 13:32:10 +01:00
c99c3a3b11 Fix caricamento processBarcode spedizione 2025-11-21 13:30:40 +01:00
2d67d87f94 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-20 11:43:41 +01:00
1ba2fb96ba Finish v1.48.02(542) 2025-11-20 11:43:17 +01:00
ffdd1a1df5 Finish v1.48.02(542)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-20 11:43:16 +01:00
0205255f7d -> v1.48.02 (542) 2025-11-20 11:43:03 +01:00
f4e56c8b53 Fix caricamento modal BatchLotSelection 2025-11-20 11:42:01 +01:00
e46cbca2a9 Durante il fast picking aggiunto blocco se la quantità "da prelevare" risulti inferiore al "totale disponibile" 2025-11-20 09:29:38 +01:00
d99fd542c2 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-19 10:59:25 +01:00
c21e856a0f Finish v1.48.01(541) 2025-11-19 10:59:03 +01:00
b673940dd6 Finish v1.48.01(541)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-19 10:59:03 +01:00
b0ce11cbf7 -> v1.48.01 (541) 2025-11-19 10:58:54 +01:00
f245bb5d1e Fix sitArt null in spedizione 2025-11-19 10:57:55 +01:00
95adc4bdc9 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-11-18 10:22:19 +01:00
4ef2c209c8 Finish v1.48.00(540) 2025-11-18 10:22:03 +01:00
41d77b806f Finish v1.48.00(540)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-11-18 10:22:02 +01:00
6b65c4a570 -> v1.48.00 (540) 2025-11-18 10:21:46 +01:00
1247ff590b Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/model/DtbDoct.java
#	app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_elenco/dto/SitArtOrdDTO.java
2025-11-18 10:19:00 +01:00
adc76fe82c Passata commessa ai servizi in recupero materiali 2025-11-13 15:26:28 +01:00
1c029242ac In rientro merce aggiunto dialog di rischiesta cambio posizione ul 2025-11-13 14:49:45 +01:00
b2aea70516 Aggiunta commessa in fase di creazione della riga 2025-11-13 10:59:50 +01:00
cf2134de57 In DtbDoct sostituite date in localDate 2025-11-11 11:53:26 +01:00
4d5c0e5509 In DtbDoct sostituite date in localDate 2025-11-11 11:50:01 +01:00
21af5fc0a9 In accettazione aggiunta proposta lotto se presente nell'ordine 2025-11-07 13:28:14 +01:00
caeabdb765 Passato barcode di etichetta anonima in fase di creazione collo 2025-11-06 09:50:14 +01:00
09b984f5d0 Passato barcode di etichetta anonima in fase di creazione collo 2025-11-06 09:49:18 +01:00
ebea9d3a8f Rimosso update di dataFine in rettifica giacenze 2025-11-04 15:28:57 +01:00
ee5e80ccf4 Fix null in DialogInfoSitArt 2025-10-31 12:37:06 +01:00
610d42328a Merge branch 'develop' into feature/RefactoringGestioneColli 2025-10-29 15:51:18 +01:00
dd473412cc Finish v1.47.26#2 2025-10-29 15:51:00 +01:00
4f0c5bf6dd Finish v1.47.26#2
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-29 15:50:59 +01:00
90e4e2e464 Fix Jenkinsfile 2025-10-29 15:50:24 +01:00
50e2605ea5 Finish v1.47.26(539)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-29 11:11:43 +01:00
4752e3a3a2 Finish v1.47.26(539) 2025-10-29 11:11:43 +01:00
3fe903cc12 -> v1.47.26 (539) 2025-10-29 11:11:32 +01:00
3f95a70039 Fix addEmsApi in restConsumer 2025-10-29 11:10:11 +01:00
b01657de87 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java
2025-10-28 16:41:08 +01:00
067443698a In Rientro merce, quando si effettua un carico è stato aggiunta la richiesta di versamento automatico 2025-10-28 16:37:23 +01:00
f2ef8ed241 Fix 2025-10-28 12:03:58 +01:00
0363f9c835 Merge branch 'master' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/rest/HttpInterceptor.java
#	app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java
#	app/src/main/java/it/integry/integrywmsnative/gest/login/rest/AuthenticationRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-10-28 11:49:45 +01:00
990a4d1538 Finish v1.47.25(538)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-28 11:33:12 +01:00
55c16e602d Finish v1.47.25(538) 2025-10-28 11:33:12 +01:00
6097a7f736 -> v1.47.25 (538) 2025-10-28 11:32:05 +01:00
f8b92901fd Attivato di default l'http interceptor 2025-10-28 10:38:52 +01:00
6c6daa4809 Finish v1.47.24(537) 2025-10-21 18:33:28 +02:00
de8b48d938 Finish v1.47.24(537)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-21 18:33:27 +02:00
bfa69ca78b -> v1.47.24 (537) 2025-10-21 18:33:17 +02:00
bffb471015 Fix null in spedizione 2025-10-21 18:32:15 +02:00
bf39eccf72 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-10-15 11:14:32 +02:00
087e3e261c Finish v1.47.23(536)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-15 11:14:03 +02:00
2eff03dee6 Finish v1.47.23(536) 2025-10-15 11:14:03 +02:00
fc34a555bd -> v1.47.23 (536) 2025-10-15 11:13:55 +02:00
0bf21c046f Migliorie UI Dark per Documenti Interni 2025-10-15 11:13:17 +02:00
892047ffd4 Fix UI Dark. 2025-10-08 19:48:08 +02:00
2bae112d80 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java
#	app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/OrdiniUscitaElencoFiltroViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentListAdapter.java
#	app/src/main/res/layout/dialog_choose_batch_lot.xml
#	app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml
#	app/src/main/res/layout/fragment_main_ordini_uscita.xml
#	app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml
#	app/src/main/res/values/attr.xml
2025-10-08 19:33:03 +02:00
473ed536fb Finish v1.47.22(535)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-08 19:29:27 +02:00
dc342c1fee Finish v1.47.22(535) 2025-10-08 19:29:27 +02:00
81507938b1 -> v1.47.22 (535) 2025-10-08 19:29:23 +02:00
cff52140bd Fix UI Dark.
Fix separatore virgola nel dialog input quantity.
2025-10-08 19:28:34 +02:00
f2bab2f510 Implementato popup di Device in end of life (fix After Merge) 2025-10-02 19:20:22 +02:00
971e026488 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	.idea/deploymentTargetSelector.xml
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java
#	app/src/main/res/values-it/strings.xml
#	app/src/main/res/values/strings.xml
2025-10-02 19:17:38 +02:00
24d90b58f9 Implementato popup di Device in end of life 2025-10-02 18:02:13 +02:00
cb9ef169f8 Rimosso style AppTheme.NewMaterial.Text.Medium e rimpiazzato con Material (fix After Merge) 2025-10-02 11:51:36 +02:00
5e27b8eaf0 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/res/layout/dialog_choose_batch_lot_item_model.xml
#	app/src/main/res/layout/dialog_info_giacenza_list_item.xml
#	app/src/main/res/layout/dialog_info_situazione_articolo_available_list_item.xml
#	app/src/main/res/layout/dialog_info_situazione_articolo_incoming_list_item.xml
#	app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml
#	app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml
#	app/src/main/res/layout/picking_resi_main_list__item.xml
2025-10-02 11:50:24 +02:00
b5d049aa1d Rimosso style AppTheme.NewMaterial.Text.Medium e rimpiazzato con Material 2025-10-02 11:49:59 +02:00
01028f9888 Rimossa tab bar dal main fragment 2025-10-02 11:29:48 +02:00
eea738b595 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-10-02 10:46:16 +02:00
2774eaecbf Aggiornato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-02 10:45:31 +02:00
07bf4982a1 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-10-01 18:29:27 +02:00
648a572752 Finish v1.47.21(534) 2025-10-01 18:29:07 +02:00
022a56a584 Finish v1.47.21(534)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-10-01 18:29:06 +02:00
ea97e8f249 -> v1.47.21 (534) 2025-10-01 18:29:01 +02:00
571ad1590f .gitignore 2025-10-01 18:28:30 +02:00
c4124226bd Fix after merge 2025-10-01 18:27:16 +02:00
878ac418ed Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java
#	app/src/main/res/layout/prod_recupero_materiale_list_item.xml
2025-10-01 18:26:17 +02:00
03c02d6625 Migliorie dark mode 2025-10-01 18:22:10 +02:00
ba1118fdd8 Fix decodifica barcode in recupero materiale 2025-10-01 17:45:26 +02:00
a44d6610ef Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/res/layout/activity_prod_dettaglio_linea.xml
#	app/src/main/res/layout/fragment_linee_prod_main_list_model.xml
2025-10-01 16:38:19 +02:00
7878748548 Miglioramenti UI dark mode 2025-10-01 16:36:34 +02:00
172a8256b6 Aggiornato style AppBar 2025-10-01 14:45:25 +02:00
7d0448aa01 Aggiornato style di alcune textbox (after merge) 2025-10-01 13:00:41 +02:00
c7cc197c4c Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/res/layout/bottom_sheet_fragment__lu_content__list_item.xml
#	app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml
#	app/src/main/res/layout/dialog_choose_arts_from_mtb_colr_list__item_model.xml
#	app/src/main/res/layout/dialog_info_giacenza_list_item.xml
#	app/src/main/res/layout/dialog_info_situazione_articolo_available_list_item.xml
#	app/src/main/res/layout/fragment_main_ordini_uscita__list_group_model.xml
#	app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml
#	app/src/main/res/layout/layout_filter_commessa__list_item.xml
#	app/src/main/res/layout/lista_contenuto_bancale_list_model.xml
#	app/src/main/res/layout/lista_giacenze_per_posizione_model.xml
#	app/src/main/res/layout/lista_picking_libero_list_model.xml
#	app/src/main/res/layout/lista_rettifica_giacenze_model.xml
#	app/src/main/res/layout/picking_resi_main_list__item.xml
2025-10-01 12:50:30 +02:00
c16f5c1747 Aggiornato style di alcune textbox 2025-10-01 12:50:02 +02:00
e190e3de3b Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-30 17:45:07 +02:00
33860a0cfe Finish v1.47.20(533)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-30 17:44:40 +02:00
15a946dfb6 Finish v1.47.20(533) 2025-09-30 17:44:40 +02:00
62adf49157 -> v1.47.20 (533) 2025-09-30 17:44:34 +02:00
64fcb7ccc8 Fix tara pedana nulla in Bottom Sheet Fragment 2025-09-30 17:42:47 +02:00
cebd3b8a8f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-23 18:03:16 +02:00
3ebdc72642 Finish v1.47.19(532) 2025-09-23 18:03:02 +02:00
aacf5ca76e Finish v1.47.19(532)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-23 18:03:01 +02:00
4f134bfc8e -> v1.47.19 (532) 2025-09-23 18:02:52 +02:00
a2b53f94c6 Fix di remove di callback del barcode manager nel caso di onBackPressed.
Fix UI dialog_input_quantity_v2.xml sui large display.
2025-09-23 18:01:42 +02:00
6bd1e62190 Fix errori multipli quando il menu non viene caricato 2025-09-18 17:43:44 +02:00
ace4996c20 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-17 15:23:05 +02:00
f9f02452d7 Finish v1.47.18(531)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-17 15:22:44 +02:00
b653ae39af Finish v1.47.18(531) 2025-09-17 15:22:44 +02:00
63d1d9ecf0 -> v1.47.18 (531) 2025-09-17 15:22:40 +02:00
40e46e6aac Fix after merge 2025-09-17 15:21:47 +02:00
5dc94cbd8f Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeModule.java
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/rest/ProdRecuperoMaterialeRESTConsumer.java
#	app/src/main/res/layout/fragment_prod_recupero_materiale.xml
2025-09-17 15:14:00 +02:00
9c72a2a628 Fix su retrieve degli ultimi versamenti di materiale 2025-09-17 15:09:01 +02:00
48818ec05f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-16 17:42:10 +02:00
5f1b7ef4a4 Finish v1.47.17(530)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-16 17:41:52 +02:00
c36bc9d8c2 Finish v1.47.17(530) 2025-09-16 17:41:52 +02:00
ba9da26ca0 -> v1.47.17 (530) 2025-09-16 17:41:48 +02:00
21bd503027 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-16 17:40:28 +02:00
b2ad4fdb62 Migliorata gestione file di log 2025-09-16 17:40:15 +02:00
fe581580b7 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-16 12:29:08 +02:00
60e725f554 Fix su caricamento durante il chiudi ordini spedizione 2025-09-16 12:28:52 +02:00
27ed85eb6c Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java
2025-09-16 10:07:44 +02:00
2f6f9b54c2 Finish v1.47.16(529)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-16 10:05:39 +02:00
a2ef35e353 Finish v1.47.16(529) 2025-09-16 10:05:39 +02:00
b06f058ecf -> v1.47.16 (529) 2025-09-16 10:05:35 +02:00
e67cbd3760 Merge remote-tracking branch 'origin/develop' into develop 2025-09-15 17:42:12 +02:00
ce9d304043 Aggiunto invio del file raw del log nel caso in cui vada in eccezione il parsine 2025-09-15 17:36:37 +02:00
c7d9231d27 Mini fix 2025-09-12 10:23:00 +02:00
fc30b8253d Finish v1.47.15(528) 2025-09-11 13:37:26 +02:00
e8da16cb8a Finish v1.47.15(528)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-11 13:37:25 +02:00
dff725ea92 -> v1.47.15 (528) 2025-09-11 13:37:14 +02:00
e4248c8c48 Fix postValue in recupero materiale 2025-09-11 13:35:57 +02:00
601f823944 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-10 16:36:21 +02:00
819cc97113 Finish v1.47.14(527) 2025-09-10 16:36:08 +02:00
05d806f9f2 Finish v1.47.14(527)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-10 16:36:08 +02:00
6fdadffe77 -> v1.47.14 (527) 2025-09-10 16:36:04 +02:00
a245497fcf Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-10 16:32:06 +02:00
5ae9371c51 Fix su loading che appare sul popup di conferma chiusura ordine 2025-09-10 16:31:50 +02:00
4aeb37e4bc Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java
2025-09-10 15:53:29 +02:00
4861c689d7 Fix su codMdep non ricevuto nel caso di picking Extra Item in Spedizione 2025-09-10 15:50:02 +02:00
dfe22a76cd Fix nel dialog delle info aggiuntive delle righe: adesso non viene considerata come qta in arrivo la qta degli ordini del quale sto facendo picking. 2025-09-05 15:55:52 +02:00
24bc83b748 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/rest/model/AvailableCodMdepsDTO.java
2025-09-05 15:22:23 +02:00
1c63908b3b Finish v1.47.13(526) 2025-09-05 11:25:31 +02:00
a622e89058 Finish v1.47.13(526)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-05 11:25:30 +02:00
ac4500e2a2 -> v1.47.13 (526) 2025-09-05 11:25:26 +02:00
6ebcbc2d6c Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	app/build.gradle
2025-09-05 11:24:48 +02:00
150be3cae2 Rimosso minify 2025-09-05 11:24:37 +02:00
72edf5228a Rimosso minify 2025-09-05 11:24:11 +02:00
b72a3321d9 Finish v1.47.12(525)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-05 11:03:49 +02:00
5bf71a1b0c Finish v1.47.12(525) 2025-09-05 11:03:49 +02:00
ee10427048 -> v1.47.12 (525) 2025-09-05 11:03:45 +02:00
7fb7cbf8ec Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	app/proguard-rules.pro
2025-09-05 11:02:17 +02:00
3a43e9238b Aggiunta esclusione classi JJWT dall'obfuscation 2025-09-05 11:01:58 +02:00
007d58a17e Aggiunta esclusione classi JJWT dall'obfuscation 2025-09-05 11:00:48 +02:00
998a59cffc Finish v1.47.11(524)#3 2025-09-05 10:37:51 +02:00
11b353a91d Finish v1.47.11(524)#3
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-05 10:37:50 +02:00
8772d11e02 Aggiunto upload simboli su Firebase 2025-09-05 10:37:36 +02:00
3d772e3722 Finish v1.47.11(524)#2 2025-09-05 10:36:55 +02:00
41cfbc273e Finish v1.47.11(524)#2
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-09-05 10:36:54 +02:00
bc67098ae0 Aggiunto upload simboli su Firebase 2025-09-05 10:36:33 +02:00
0e49c93678 Finish v1.47.11(524)#1
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-09-05 10:35:58 +02:00
ed93b88ee8 Finish v1.47.11(524)#1 2025-09-05 10:35:58 +02:00
2cb184f24b Aggiunto upload simboli su Firebase 2025-09-05 10:35:40 +02:00
126846aef2 Finish v1.47.11(524)
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-09-05 10:26:20 +02:00
8ac595c6c5 Finish v1.47.11(524) 2025-09-05 10:26:20 +02:00
fc2c0fbe0c -> v1.47.11 (524) 2025-09-05 10:26:15 +02:00
0aa0b09afa Fix su null della variabile Server in Login 2025-09-05 09:47:11 +02:00
23c199d0b8 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-03 16:52:07 +02:00
9436236eaa Fix postValue in Rientro Merce 2025-09-03 16:51:48 +02:00
d6f26b3971 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-03 13:25:51 +02:00
fc5568a046 Finish v1.47.10(523) 2025-09-03 13:25:30 +02:00
590e9ec24e Finish v1.47.10(523)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-03 13:25:29 +02:00
984a4a156b -> v1.47.10 (523) 2025-09-03 13:25:25 +02:00
04afb4cfca Aggiunti serialized name nei DTO del dialog di selezione cliente 2025-09-03 13:24:51 +02:00
572f75fe9e Merge branch 'develop' into feature/RefactoringGestioneColli 2025-09-03 13:02:10 +02:00
81eda94fe0 Finish v1.47.09(522) 2025-09-03 13:01:53 +02:00
8f02dfbee4 Finish v1.47.09(522)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-09-03 13:01:52 +02:00
75e1447a54 -> v1.47.09 (522) 2025-09-03 13:01:48 +02:00
aa6877c235 Nel popup di selezione dei lotti (in fase di picking) adesso viene anche messa a video la commessa in modo da poterla selezionare (prima non era mai stato possibile). 2025-09-02 18:11:13 +02:00
23332e1424 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-09-01 18:15:03 +02:00
fc2ffc6a62 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/build.gradle
#	barcode_base_android_library/build.gradle
2025-09-01 18:14:50 +02:00
e5f79bf7e7 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/build.gradle
#	barcode_base_android_library/build.gradle
2025-09-01 18:06:20 +02:00
d8f9886f82 Aggiornamenti librerie 2025-09-01 18:04:45 +02:00
51c5c831ee Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java
2025-09-01 17:09:34 +02:00
3279c4e2af Merge remote-tracking branch 'origin/develop' into develop 2025-09-01 17:05:15 +02:00
6f070e6998 Migliorie varie 2025-09-01 17:04:50 +02:00
df4bfcc955 Finish v1.47.08(521) 2025-08-27 12:37:31 +02:00
c1983cf73c Finish v1.47.08(521)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-08-27 12:37:30 +02:00
da9bbd0b1c -> v1.47.08 (521) 2025-08-27 12:37:16 +02:00
cd84d3e9a8 Fix gestione errori in spedizione 2025-08-27 12:34:39 +02:00
e79d80c2d3 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-08-26 15:11:21 +02:00
595f4a8797 Finish v1.47.07(520) 2025-08-26 15:11:00 +02:00
388f08a02f Finish v1.47.07(520)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-08-26 15:10:59 +02:00
c562735661 -> v1.47.07 (520) 2025-08-26 15:10:50 +02:00
ab137ad828 Aggiunto controllo della lunghezza di 13 per il barcode nella verifica dell'eanPeso 2025-08-26 15:09:38 +02:00
b56f209084 Modificato il toString del fornitore per il DialogSelectDocInfo 2025-08-26 15:08:42 +02:00
bddb6e2bac Merge branch 'develop' into feature/RefactoringGestioneColli 2025-08-06 10:43:16 +02:00
5107897888 Finish v1.47.06(519)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-08-06 10:42:50 +02:00
d91eaf3412 Finish v1.47.06(519) 2025-08-06 10:42:50 +02:00
caa6a7cd75 -> v1.47.06 (519) 2025-08-06 10:42:44 +02:00
567b288e4d Migliorata registrazione errore di ExportLog 2025-08-06 10:41:54 +02:00
7cfb0879af Aggiunti controlli su trasferimento pedane 2025-08-06 10:41:05 +02:00
ed4485a536 Implementate annotazioni durante l'esportazione dei trasferimenti di pedane 2025-07-31 16:54:28 +02:00
12388a6175 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-07-29 11:22:18 +02:00
86121bfa93 Finish v1.47.05(518)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-29 11:21:53 +02:00
669a38732f Finish v1.47.05(518) 2025-07-29 11:21:53 +02:00
e3e7a7d7c6 -> v1.47.05 (518) 2025-07-29 11:21:47 +02:00
a5a1febc0e Fix sul controllo di abort dell'inserimento qta in accettazione ordini. 2025-07-29 11:20:42 +02:00
0c77af962f Resa dinamica la visibilità dei filter chip nell'elenco degli ordini di uscita, se non ci sono fitri vengono nascosti. 2025-07-29 11:15:49 +02:00
4374dc243c Aggiunto soundAlert durante le scansioni in trasferimento pedane.
Aggiunto menu per eliminazione trasferimento non ancora chiuso.
2025-07-28 18:46:33 +02:00
f4d2e12073 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-07-28 17:53:01 +02:00
75914ab9c9 Finish v1.47.04(517) 2025-07-28 17:52:40 +02:00
d1976f3e21 Finish v1.47.04(517)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-28 17:52:39 +02:00
5ef5c4b28a -> v1.47.04 (517) 2025-07-28 17:52:34 +02:00
8acb8a04db Mini fix vari 2025-07-28 17:51:17 +02:00
05a5b3d6a3 In trasferimento pedane è stata migliorata la gestione dell'errore durante la stampa del documento.
Aggiunti a video gli estremi del documento generato.
2025-07-28 12:55:38 +02:00
40d9370e3a Merge branch 'develop' into feature/RefactoringGestioneColli 2025-07-14 16:14:57 +02:00
2c3d4bbc22 Finish v1.47.03(516) 2025-07-14 16:14:39 +02:00
fd8bb8e7da Finish v1.47.03(516)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-14 16:14:38 +02:00
60a088a7f4 -> v1.47.03 (516) 2025-07-14 16:14:31 +02:00
8ca5207a58 Aggiornato AGP a 8.11.1 2025-07-14 16:13:56 +02:00
9c3e4f0481 Fix su load sscc in trasferimento pedane 2025-07-14 16:05:44 +02:00
87b45c6c27 Aggiunti controlli per trasferimento già chiuso 2025-07-10 19:11:42 +02:00
805e939c43 Aggiunta stampa documento in trasferimento pedane 2025-07-10 18:23:47 +02:00
acfe51e83a Merge branch 'develop' into feature/RefactoringGestioneColli 2025-07-08 16:19:10 +02:00
f2cc31e08a Finish v1.47.02(515)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-08 16:18:50 +02:00
e541031efe Finish v1.47.02(515) 2025-07-08 16:18:50 +02:00
d4b220d1e6 -> v1.47.02 (515) 2025-07-08 16:18:46 +02:00
e2a4a1ad67 Aggiunto documento in TrasferimentoPedane 2025-07-08 16:18:06 +02:00
0e46e5fae3 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	build.gradle
2025-07-08 12:01:01 +02:00
798835cb4c Finish v1.47.01(514)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-08 12:00:28 +02:00
ba72284c87 Finish v1.47.01(514) 2025-07-08 12:00:28 +02:00
603c5dd8b7 -> v1.47.01 (514) 2025-07-08 12:00:24 +02:00
43fc8be493 Aggiornato AGP a 8.11.0 2025-07-08 11:59:48 +02:00
e35284f724 Piccoli fix su Trasferimento Pedane. Aggiunte anche empty view. 2025-07-08 11:58:50 +02:00
825eaaf840 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-07-02 17:22:32 +02:00
22bace2402 Finish v1.47.00(513)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-07-02 17:22:13 +02:00
3b86460f48 Finish v1.47.00(513) 2025-07-02 17:22:13 +02:00
ddac54b513 -> v1.47.00 (513) 2025-07-02 17:22:08 +02:00
f1790c2595 Merge remote-tracking branch 'origin/feature/RefactoringGestioneColli' into feature/RefactoringGestioneColli 2025-07-02 17:20:06 +02:00
dafec91aff Aggiunta procedura di trasferimento pedane 2025-07-02 17:19:48 +02:00
d818994e3a Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaPvRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/core/rest/model/pv/SaveNewVerificaRequestDTO.java
2025-07-01 15:52:06 +02:00
a385b01584 In verifica giagenza gestito salvataggio online per ogni riga 2025-07-01 15:40:02 +02:00
dec9f25c15 Nella lista degli UL gestita visualizzazione del barcode ul 2025-07-01 09:15:03 +02:00
0f3cb16ef9 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-06-30 16:55:02 +02:00
7920166110 Gestita setup per mostrare o no il cambio deposito 2025-06-30 15:31:48 +02:00
5d09453c39 Implementata gestione di posizioni recenti in posizionamento merce 2025-06-26 18:28:38 +02:00
f71d4e56e6 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/ean128/Ean128Service.java
2025-06-26 11:44:01 +02:00
e6f4cc9d6d Finish v1.46.24(512)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-06-26 11:41:01 +02:00
13d9c40119 Finish v1.46.24(512) 2025-06-26 11:41:01 +02:00
1d7125a821 -> v1.46.24 (512) 2025-06-26 11:40:57 +02:00
deb4d77203 Rimossa eliminazione del primo carattere (se 0) da SSCC durante la decodifica ean128 2025-06-26 11:40:08 +02:00
1f5a628eb1 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-06-24 16:49:30 +02:00
520a1cb07a Finish v1.46.23(511) 2025-06-24 16:49:12 +02:00
c620e9cb96 Finish v1.46.23(511)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-06-24 16:49:11 +02:00
6ef4961074 -> v1.46.23 (511) 2025-06-24 16:49:07 +02:00
01b91adc61 Migliorie login page 2025-06-24 16:48:27 +02:00
4d81b24fd4 Refactoring thread rettifica giacenze 2025-06-24 12:21:23 +02:00
a20470c0f9 Fix close LU su main thread accettazione 2025-06-23 15:32:05 +02:00
ca9c62bc80 Aggiornato build.gradle
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-06-23 11:34:06 +02:00
dd2c19f12a Fix su @SerializedName e renderer di recupero_materiale_list_item.xml 2025-06-23 11:33:49 +02:00
3b3ab8e7c5 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-06-20 18:49:49 +02:00
688a8e4bad Finish v1.46.22(510) 2025-06-20 18:49:21 +02:00
12796b11e5 Finish v1.46.22(510)
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-06-20 18:49:21 +02:00
f7dc857587 -> v1.46.22 (510) 2025-06-20 18:49:16 +02:00
404716d269 Migliorie in rientro merce 2025-06-20 18:48:33 +02:00
aa1c3b877d Fix gestione filtri in Spedizione 2025-06-20 18:15:30 +02:00
3ade0879f5 Abilitato minify in release 2025-06-20 12:18:20 +02:00
7c90a9b2fd Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	Jenkinsfile.groovy
2025-06-20 11:59:00 +02:00
f99c0e5514 Aggiornato Jenkinsfile 2025-06-20 11:58:45 +02:00
63552f6314 Aggiunta partita di magazzino in picking resi 2025-06-20 11:39:47 +02:00
60c3dd4eca Migliorie dialog filtro resi acquisti / vendite 2025-06-20 10:25:10 +02:00
6776a1e521 Fix su checkbox selectable in elenco ordini uscita / ordini accettazione 2025-06-20 10:07:34 +02:00
7d130ae1eb Refactoring message dialog 2025-06-20 09:54:43 +02:00
25e3a5ddc4 Completate implementazioni per resi fornitore 2025-06-19 17:30:05 +02:00
d44b726a66 Completato refactoring picking per resi fornitore 2025-06-18 12:09:22 +02:00
3d3113d2bf Completato refactoring picking per resi fornitore 2025-06-18 12:02:07 +02:00
e917b2a413 Completato refactoring elenco ultimi arrivi fornitore 2025-06-18 10:12:08 +02:00
a41c09e980 Aggiunto minify 2025-06-17 18:20:42 +02:00
3dcfe4773c Aggiornato Jenkinsfile 2025-06-17 18:14:04 +02:00
4bf1b2a1e9 Refactoring ultimi arrivi fornitori 2025-06-17 17:59:12 +02:00
5e7af4ced4 Refactoring picking resi cliente. Da completare con picking resi fornitore. 2025-06-17 12:15:27 +02:00
b8bb20ce0d Refactoring elenco ultime consegne ed aggiunta del filtro per UDC 2025-06-16 12:29:53 +02:00
b0567e4eaa Refactoring elenco ultime consegne 2025-06-12 17:02:09 +02:00
fd88e5cd64 Fix su anomalia barcode manager: all'apertura/chiusura del caricamento veniva sempre abilitata/disabilitata l'ultima callback del barcode manager. Adesso ogni onLoadingStarted / onLoadingEnded prova a disabilitare solo la callback della propria Activity 2025-06-11 10:21:50 +02:00
04071f3bad Aggiornata gestione Rientro Merce per supportare la nuova logica dei colli 2025-06-10 12:22:23 +02:00
6e02aec5e0 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-06-09 09:48:21 +02:00
f1c304eaeb Finish v1.46.21(509) 2025-06-09 09:48:01 +02:00
7b3fde1d71 Finish v1.46.21(509)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-06-09 09:48:00 +02:00
3c337fc138 -> v1.46.21 (509) 2025-06-09 09:47:57 +02:00
548cdd562a Aggiunti @SerializedName su altri DTO. 2025-06-09 09:46:56 +02:00
afd7ae25f3 Allineata UI di qta_layout. Aggiunti @SerializedName su altri DTO. 2025-06-06 17:42:22 +02:00
1f1011e628 Migliorie interceptor http 2025-06-06 10:29:24 +02:00
3a8debdbc4 Migliorie rendering UI 2025-06-05 19:40:02 +02:00
143b8a5bda Aggiunti campi @SerializedName su DTO 2025-06-04 19:16:43 +02:00
d32c96818e Aggiunti campi @SerializedName su DTO ed EntityBase 2025-06-04 17:55:13 +02:00
20bc5c6da2 Migliorato fragment ordini uscita elenco 2025-06-04 16:11:41 +02:00
c2d82d0806 Refactoring: Utilizzato LocalDate al posto di date nei DTO degli ordini uscita inevasi 2025-06-03 19:35:12 +02:00
ae86a5cde8 Aggiunti filtri in Recupero Materiale 2025-06-03 17:40:12 +02:00
417172b31c Vario 2025-06-03 11:47:59 +02:00
bae4d1acac Aggiornato servizio ProdRecuperoMaterialeRESTConsumer 2025-06-03 11:45:25 +02:00
fef03ebfbc Aggiornate dipendenze 2025-06-03 10:36:36 +02:00
021f6974f1 Aggiornato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-06-03 09:49:13 +02:00
7aa5960f87 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-06-03 09:48:08 +02:00
92abfe1da4 Finish v1.46.20(508) 2025-06-03 09:47:38 +02:00
6338c1dfa6 Finish v1.46.20(508)
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-06-03 09:47:37 +02:00
657d85be86 -> v1.46.20 (508) 2025-06-03 09:47:33 +02:00
f759b20f96 Aggiornato Jenkinsfile 2025-05-30 17:52:57 +02:00
4479779e4a Aggiunta commessa ordine nel recupero materiali 2025-05-30 12:04:46 +02:00
a35b3b7fc4 Refactoring UI della lista di materiali versati in produzione 2025-05-29 19:50:58 +02:00
5b31e2c6a9 Migliorato DialogUltimeConsegneFiltroAvanzatoView 2025-05-29 10:35:26 +02:00
9dbfa812c1 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 13:41:41 +02:00
97c907c992 Aggiornato build.gradle
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 13:41:10 +02:00
caed709b64 Aggiornato build.gradle 2025-05-28 13:32:06 +02:00
de91c7a8ec Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 13:04:28 +02:00
13800eecab Aggiornato build.gradle
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 13:03:55 +02:00
c9bfd52586 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 12:51:24 +02:00
c4357f662c Finish v1.46.19(507) 2025-05-28 12:51:09 +02:00
67a8ca94db Finish v1.46.19(507)
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 12:51:09 +02:00
0bfd56c011 -> v1.46.19 (507) 2025-05-28 12:51:05 +02:00
eead844ac1 Aggiunte definizioni di @SerializedName per evitare minify di Proguard 2025-05-28 12:50:21 +02:00
65cfadcb6e Finish v1.46.18(506)
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 12:29:40 +02:00
00067ca1c9 Finish v1.46.18(506) 2025-05-28 12:29:40 +02:00
73ca8bb366 -> v1.46.18 (506) 2025-05-28 12:29:36 +02:00
3ffdb2c220 Fix AuthInterceptor 2025-05-28 12:28:13 +02:00
f3113a423c Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 12:25:27 +02:00
a5479595c7 Aggiornato build.gradle
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 12:24:24 +02:00
189c11c27f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 11:47:35 +02:00
cff971bef8 Merge branch 'master' into develop
# Conflicts:
#	Jenkinsfile.groovy
2025-05-28 11:47:20 +02:00
a5d3388665 Aggiornato build.gradle
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 11:45:51 +02:00
22ad23c5b7 Aggiornato build.gradle
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 11:44:41 +02:00
b1d5e10db4 Aggiornato build.gradle 2025-05-28 11:32:35 +02:00
763c96c7dc Aggiornato build.gradle 2025-05-28 11:31:37 +02:00
178b458030 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/build.gradle
2025-05-28 11:29:10 +02:00
bde41d21be Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head Something is wrong with the build of this commit
2025-05-28 11:26:12 +02:00
9d8228419c Modificato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 11:25:14 +02:00
ad7d9059c0 Modificato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 11:19:57 +02:00
4831a7ce19 Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 11:19:10 +02:00
552b82feda Modificato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 11:10:39 +02:00
6d62a7b10e Modificato Jenkinsfile
All checks were successful
WMS - Android (New)/pipeline/head This commit looks good
2025-05-28 10:57:42 +02:00
667f4aea74 Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:53:55 +02:00
f80225b7bf Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:47:00 +02:00
7a02e1d8ad Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:46:25 +02:00
9cc70f4ee6 Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:42:51 +02:00
7c4c5da1d6 Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:41:32 +02:00
b960b6319a Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:40:47 +02:00
08ddaa7a11 Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:39:56 +02:00
bcce40094c Modificato Jenkinsfile
Some checks failed
WMS - Android (New)/pipeline/head There was a failure building this commit
2025-05-28 10:33:59 +02:00
960388adf8 Modificato Jenkinsfile 2025-05-28 10:31:48 +02:00
e76722018f Fix AuthInterceptor in caso di AccessToken nullo 2025-05-28 10:30:19 +02:00
b69a053323 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-28 10:18:48 +02:00
fc30017021 Finish v1.46.17(505) 2025-05-28 10:18:03 +02:00
e1dd4f2140 Finish v1.46.17(505) 2025-05-28 10:18:03 +02:00
67a0679de7 -> v1.46.17 (505) 2025-05-28 10:17:58 +02:00
dfc87f7aec Fix AuthInterceptor in caso di AccessToken nullo 2025-05-28 10:17:09 +02:00
c5ae374854 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-27 18:44:20 +02:00
886ef6ba08 Finish v1.46.16(504) 2025-05-27 18:44:03 +02:00
fe77f90a7a Finish v1.46.16(504) 2025-05-27 18:44:02 +02:00
7a1f0d6cf6 -> v1.46.16 (504) 2025-05-27 18:43:56 +02:00
004bc3b926 Migliorie sulla gestione dell'access token nell'interceptor e durante il refresh.
Migliorie al loading popup durante il chiudi ordine in spedizione.
2025-05-27 18:43:01 +02:00
d1b9e22673 Refactoring dialog filtro ultime consegne 2025-05-27 17:51:02 +02:00
6edeba3246 Refactoring dialog filtro ultime consegne 2025-05-27 17:48:41 +02:00
5a0b45c6f9 Finish v1.46.15(503) 2025-05-27 17:48:12 +02:00
be5ebb89d7 Finish v1.46.15(503) 2025-05-27 17:48:12 +02:00
f81d61c4c5 -> v1.46.15 (503) 2025-05-27 17:47:59 +02:00
634bc502ce Fix null dovuto alla getBancaliGiaRegistratiSynchronized 2025-05-27 17:45:24 +02:00
20783026b8 Fix null pointer vari 2025-05-26 18:19:30 +02:00
86632940eb Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-26 09:44:37 +02:00
d13dbf1ad3 Finish v1.46.14(502) 2025-05-26 09:44:01 +02:00
2f9ee642da Finish v1.46.14(502) 2025-05-26 09:44:00 +02:00
afecc11364 -> v1.46.14 (502) 2025-05-26 09:43:55 +02:00
53168632e7 Migliorata gestione errore caricamento Recupera Materiali 2025-05-23 18:13:06 +02:00
c83f75c5e4 Implementata nuova logica barcode ul in Recupera Materiali 2025-05-23 17:43:26 +02:00
185246597b Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-05-20 15:38:15 +02:00
b33d566abd Implementato servizio di retrieve uds già registrate 2025-05-20 15:25:48 +02:00
525570d918 Implementata scansione commessa nel dialog di richiesta commessa 2025-05-19 11:06:22 +02:00
7a99df44c9 Fix vari 2025-05-16 18:13:08 +02:00
67936a3787 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-15 18:31:12 +02:00
69d880b587 Finish v1.46.13(501) 2025-05-15 18:30:56 +02:00
aeadea42e1 Finish v1.46.13(501) 2025-05-15 18:30:56 +02:00
f5c3dcfdc9 -> v1.46.13 (501) 2025-05-15 18:30:52 +02:00
9bf0dacda6 Fix vari in accettazione da ordine 2025-05-15 18:28:37 +02:00
d30af1e2a6 In VerificaGiacenze abilitato OverflowOrderQuantity 2025-05-15 12:53:12 +02:00
71a18e9ffa Fix scansione barcode alternativi in VerificaGiacenze 2025-05-15 12:52:42 +02:00
f4c64e5f04 Fix main thread in accettazione ordini 2025-05-15 11:11:45 +02:00
a8674cb31e Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-14 12:05:51 +02:00
40e1fb4f83 Finish v1.46.12(500) 2025-05-14 12:05:35 +02:00
f3f0fd8fd8 Finish v1.46.12(500) 2025-05-14 12:05:35 +02:00
ed53b9e3b4 -> v1.46.12 (500) 2025-05-14 12:05:30 +02:00
37ac05b8ab Aggiornato gradle e librerie 2025-05-14 12:04:49 +02:00
d9070ee5fb Fix su rettifica giacenze 2025-05-14 12:04:28 +02:00
168c4e4fb7 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-12 19:13:33 +02:00
c2a2983606 Fix su booleano che abilita il recupera UL 2025-05-12 19:12:24 +02:00
9866d5c4fd Cambiati parametri di chiamata servizio versamento automatico 2025-05-12 18:45:42 +02:00
823d0d7a33 Finish v1.46.11(499) 2025-05-07 12:01:10 +02:00
5b07ff5efa Finish v1.46.11(499) 2025-05-07 12:01:09 +02:00
c5639a643a -> v1.46.11 (499) 2025-05-07 12:01:00 +02:00
012f75198b Fix null sitArts 2025-05-07 12:00:17 +02:00
ed5c6c6b2f Merge branch 'develop' into feature/RefactoringGestioneColli 2025-05-05 17:00:55 +02:00
d7e0e858d2 Finish v1.46.10(498) 2025-05-05 17:00:41 +02:00
339a5e5b68 Finish v1.46.10(498) 2025-05-05 17:00:40 +02:00
02a13911d8 -> v1.46.10 (498) 2025-05-05 17:00:34 +02:00
b6f51971f1 Fix su DialogChooseArtFromListaArts 2025-05-05 16:59:43 +02:00
57079c0062 Finish v1.46.09(497) 2025-04-29 11:50:02 +02:00
63c353a83c Finish v1.46.09(497) 2025-04-29 11:50:02 +02:00
c069d21cbf -> v1.46.09 (497) 2025-04-29 11:49:53 +02:00
afeb9ecc23 Fix thread picking libero 2025-04-29 11:48:36 +02:00
2ff8d80da3 In verifica giacenza permettere di caricare 0 nella quantità 2025-04-28 17:13:19 +02:00
891e2641fa Aggiunta possibilità di rendere non editabile qtaTot in accettazione bolla 2025-04-28 17:08:30 +02:00
ca79107809 Finish v1.46.08(496) 2025-04-28 13:08:20 +02:00
5c37b986ce Finish v1.46.08(496) 2025-04-28 13:08:19 +02:00
c426250cd5 -> v1.46.08 (496) 2025-04-28 13:08:04 +02:00
f090c11146 Fix scan barcode in verifica giacenze 2025-04-28 13:06:03 +02:00
5c90f22a49 Finish V1.46.07(495) 2025-04-16 12:54:27 +02:00
f1ddaa1fca Finish V1.46.07(495) 2025-04-16 12:54:27 +02:00
8490553a32 -> v1.46.07 (495) 2025-04-16 12:54:15 +02:00
66824fccb1 Fix thread scanBarcode in DialogInputQuantity 2025-04-16 12:53:13 +02:00
9c6c17ffa3 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-04-16 10:37:01 +02:00
39dce4d23f Merge remote-tracking branch 'origin/develop' into develop 2025-04-16 10:36:30 +02:00
c1dbbde905 Cambiato barcode di creazione UL in DialogScanOrCreateLUViewModel 2025-04-16 10:36:17 +02:00
8d2d0ad195 Finish v1.46.06(494) 2025-04-15 18:41:01 +02:00
927b14c9fc Finish v1.46.06(494) 2025-04-15 18:41:01 +02:00
f342cd0e5f -> v1.46.06 (494) 2025-04-15 18:40:53 +02:00
c287852ce6 Fix modal BatchLotSelection 2025-04-15 18:39:38 +02:00
1fe4437163 Fix nel ricaricamento dei riferimenti in modifica riga di picking libero 2025-04-10 20:09:01 +02:00
17b0454f8b Fix vari 2025-04-10 17:01:43 +02:00
4633a54152 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-04-10 12:04:47 +02:00
5dbb03531d Iniziata migrazione versamento materiale 2025-04-10 12:04:24 +02:00
edc9470e9b Finish v1.46.05(493) 2025-04-10 10:21:37 +02:00
7adeee589e Finish v1.46.05(493) 2025-04-10 10:21:37 +02:00
52a393c260 -> 1.46.05 (493) 2025-04-10 10:21:29 +02:00
60a405536c Fix thread su creaUl in PickingResi e su DialogBasket 2025-04-10 10:20:19 +02:00
5f5117c0f6 Finish v1.46.04(492) 2025-04-09 15:32:17 +02:00
0740faa964 Finish v1.46.04(492) 2025-04-09 15:32:16 +02:00
2f40302791 -> v1.46.04 (492) 2025-04-09 15:32:03 +02:00
13b3d5e63b Refactor dialog choose art form list Arts 2025-04-09 15:29:59 +02:00
5e00329292 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-04-09 14:53:37 +02:00
58521997c1 Fix su popup filtro resi Acquisto/Vendita 2025-04-09 14:53:10 +02:00
6b24111b39 Fix import 2025-04-09 14:39:51 +02:00
c2fe657bcf Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MaterialiRESTConsumerService.java
#	app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeViewModel.java
2025-04-09 12:53:17 +02:00
af64ca04f9 Iniziata migrazione del nuovo versamento materiali 2025-04-09 09:29:44 +02:00
5481e25483 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/build.gradle
2025-04-08 15:56:19 +02:00
1e9d048264 Finish v1.46.03(491) 2025-04-08 15:54:57 +02:00
6f202c0c7a Finish v1.46.03(491) 2025-04-08 15:54:56 +02:00
94a9690045 -> v1.46.03 (491) 2025-04-08 15:54:52 +02:00
2b4aa11021 Fix su Spedizione e picking libero 2025-04-08 15:49:39 +02:00
f2d5bb76c5 Fix su loop nel caso di ricerca barcode kit in accettazione da bolla 2025-04-08 15:49:19 +02:00
61dc5fc9a4 Merge branch 'develop' into feature/RefactoringGestioneColli 2025-04-08 11:15:06 +02:00
3440ecd4f1 Finish v1.46.02(490) 2025-04-08 11:08:21 +02:00
f6c7d98efa Finish v1.46.02(490) 2025-04-08 11:08:21 +02:00
e8821b0caf -> v1.46.02 (490) 2025-04-08 11:08:16 +02:00
627a0b402b Fix su Spedizione e picking libero 2025-04-08 11:06:18 +02:00
ab9353dee6 Iniziato refactoring versamento materiali 2025-04-08 09:00:04 +02:00
724a63acc1 Unificato layout di contenuto UL 2025-04-07 11:58:24 +02:00
06dbae0ac5 Sistemato il riposizionamento da produzione 2025-04-07 09:59:33 +02:00
603fd59b05 Aggiornati servizi di sposta arts tra ul in modo da utilizzare il barcode dest invece della testata collo 2025-04-04 10:49:53 +02:00
ebbd515a34 Merge branch 'develop' into feature/RefactoringGestioneColli
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java
2025-04-03 09:54:08 +02:00
fd89c6394f Finish v1.46.01(489) 2025-04-03 09:53:47 +02:00
d72f685e01 Finish v1.46.01(489) 2025-04-03 09:53:46 +02:00
ea1f39a9db -> v1.46.01 (489) 2025-04-03 09:53:42 +02:00
518e6f0853 Fix su loop nel caso di ricerca barcode kit in accettazione da bolla 2025-04-03 09:53:00 +02:00
ce902cd2be Refactoring servizio di Picking libero e Versamento Merce 2025-04-03 09:30:21 +02:00
fde266922b Refactoring servizio di posizionamento UL 2025-04-02 16:17:43 +02:00
7bdb9b47f4 Fix su qtaCnfOrd in VerificaGiacenze 2025-04-01 17:27:36 +02:00
68bf6767b9 Implementato servizio di changePosizione 2025-04-01 16:52:24 +02:00
184d1f759c Finish v1.46.00(488) 2025-03-31 10:36:19 +02:00
2a26236d94 Finish v1.46.00(488) 2025-03-31 10:36:18 +02:00
71a00ac140 Finish v1.46.00/488) 2025-03-31 10:35:44 +02:00
f10aaaba6b Finish v1.46.00/488) 2025-03-31 10:35:43 +02:00
296675f0b0 -> v1.46.00 (488) 2025-03-31 10:35:39 +02:00
7f365be53d Finish FastPickingSpedizione 2025-03-31 10:33:46 +02:00
9e85204d04 Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-27 10:35:31 +01:00
d5d80e71e7 Finish v1.45.05(487) 2025-03-27 10:34:52 +01:00
73b360f427 Finish v1.45.05(487) 2025-03-27 10:34:52 +01:00
722094bc3e -> v1.45.05 (487) 2025-03-27 10:34:47 +01:00
645b2cfe5d Cambiato servizio di retrieve giacenza in VerificaGiacenze 2025-03-27 10:32:41 +01:00
afcaa82069 Finish v1.45.04(486) 2025-03-19 18:22:08 +01:00
393bffe14c Finish v1.45.04(486) 2025-03-19 18:22:08 +01:00
d44b6f00c6 -> v1.45.04 (486) 2025-03-19 18:22:03 +01:00
de68c3b49f Merge remote-tracking branch 'origin/develop' into develop 2025-03-19 18:20:07 +01:00
0591b60fad Rimossa randomizzazione dati Verifica Giacenze 2025-03-19 18:18:42 +01:00
a6cebccad9 Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-18 17:54:49 +01:00
4186d90a32 Finish v1.45.03(485) 2025-03-18 17:54:28 +01:00
bb21441c3d Finish v1.45.03(485) 2025-03-18 17:54:27 +01:00
12b1b89713 -> v1.45.03 (485) 2025-03-18 17:54:15 +01:00
26512f5dc1 Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-18 17:51:36 +01:00
4d29e2ab41 In accettazione bolla sitemato ordinamento righe e aggiunto controllo anomalie 2025-03-18 17:50:48 +01:00
6c6fd38482 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-03-18 12:20:54 +01:00
2e37e874c3 Finish v1.45.02(484) 2025-03-18 12:17:24 +01:00
c99e32998b Finish v1.45.02(484) 2025-03-18 12:17:23 +01:00
22ce078c74 -> v1.45.02 (484) 2025-03-18 12:17:19 +01:00
a93d80b2e2 Fix su handler in spedizione 2025-03-18 12:16:41 +01:00
1b4df1ecd1 Implementato flag che abilita/disabilita il fast-picking 2025-03-17 18:59:47 +01:00
ce5ab1cfc2 Resa synchronized l'init iniziale dell'app 2025-03-17 18:31:45 +01:00
3ac021d7ef Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-17 11:51:44 +01:00
fa7d561189 Finish v1.45.01(483) 2025-03-17 11:51:25 +01:00
2c59e9beec Finish v1.45.01(483) 2025-03-17 11:51:24 +01:00
01af72bd2f -> v1.45.01 (483) 2025-03-17 11:51:18 +01:00
2f42958394 Fix su Rettifica Giacenze 2025-03-17 11:50:41 +01:00
4613f13eae Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-14 18:20:18 +01:00
fba3801994 Finish v1.45.00(482) 2025-03-14 18:20:01 +01:00
7ec722fc26 Finish v1.45.00(482) 2025-03-14 18:20:00 +01:00
64295d565a -> v1.45.00 (482) 2025-03-14 18:19:57 +01:00
2db0027fff Correzioni Verifica Giacenze 2025-03-14 18:19:09 +01:00
71f077a617 Fix after merge 2025-03-14 13:25:40 +01:00
a80cf53f08 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-03-14 13:23:32 +01:00
80dac639da Completata gestione verifica giacenze 2025-03-14 13:12:16 +01:00
ff73a124f0 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java
2025-03-12 19:30:44 +01:00
a4fcc87088 Finish v1.44.12(481) 2025-03-12 19:29:55 +01:00
be1b993239 Finish v1.44.12(481) 2025-03-12 19:29:55 +01:00
63f9912347 -> v1.44.12 (481) 2025-03-12 19:29:49 +01:00
b887172032 Fix caricamento in closeOrder Spedizione 2025-03-12 19:28:18 +01:00
18937a3315 Fix vari su Synchronized e MainThread 2025-03-12 19:26:45 +01:00
fb6a74aef8 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java
2025-03-12 18:16:07 +01:00
cd89ce917e Fix vari su Synchronized e MainThread 2025-03-12 18:11:53 +01:00
6229a1a4b1 Aggiornato DialogScanArt 2025-03-06 12:16:38 +01:00
eb5ae8443d Merge branch 'develop' into feature/FastPickingSpedizione 2025-03-04 11:02:46 +01:00
a9028e65d9 Finish v1.44.11(480) 2025-03-04 11:02:32 +01:00
ba413e4d05 Finish v1.44.11(480) 2025-03-04 11:02:31 +01:00
6f759d969d -> v1.44.11 (480) 2025-03-04 11:02:26 +01:00
044bcbd852 Fix after merge 2025-03-04 11:01:38 +01:00
53ba5a962b Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUView.java
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java
2025-03-04 10:58:15 +01:00
6f06eaf0a0 Rimosso vecchio dialog livello posizione 2025-03-04 10:57:35 +01:00
993191c083 Aggiornati dialog ask posizione e fixati problemi sul dismiss dei dialog 2025-03-04 10:56:19 +01:00
db178ce991 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java
2025-03-03 18:10:13 +01:00
329d53f8d0 Migliorato controllo di generazione documenti carico/scarico durante il picking libero. 2025-03-03 18:09:39 +01:00
7c35e19ed4 Fix vari 2025-03-03 17:50:18 +01:00
326a3a00b2 Fix check deposito 2025-03-03 13:30:43 +01:00
086597985b Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java
2025-03-03 12:35:33 +01:00
c3c3d32dfe Finish v1.44.10(479) 2025-03-03 11:52:21 +01:00
1756124b89 Finish v1.44.10(479) 2025-03-03 11:52:21 +01:00
5bc3619d6b -> v1.44.10 (479) 2025-03-03 11:52:17 +01:00
7ec04ac8da Fix su dialog caricamento in accettazione ordini 2025-03-03 11:51:31 +01:00
b31ea475c6 Finish v1.44.09(478) 2025-03-03 10:12:14 +01:00
d238cb1d88 Merge branch 'develop' into feature/FastPickingSpedizione 2025-02-28 17:01:03 +01:00
5694d8bd1c Migliorata gestione callback e chiamate in background per Picking Libero 2025-02-28 15:26:02 +01:00
e5a4cf59c4 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java
#	app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java
#	app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java
2025-02-28 11:56:58 +01:00
12fe5059a6 Merge branch 'master-beta' into feature/FastPickingSpedizione 2025-02-26 19:10:48 +01:00
e75121b0bd Refactor: Improve data recovery in MainFragment
- Replaced the previous data recovery mechanism with an ExecutorService-based approach.
- This allows for concurrent recovery operations, improving overall efficiency.
- Improved error handling by removing unnecessary callbacks and handling exceptions directly.
- Replaced cyclic recursion with a simpler iterative loop for session recovery.
2025-02-26 19:10:30 +01:00
0312f972bc Refactor: Update weight input dialog and LU closing logic
- Changed `DialogInputPesoLUView` to use `BindableBigDecimal` for weight fields.
- Updated `DialogInputPesoLUView` to invoke onComplete only after user confirmation
- Refactored `SpedizioneViewModel` to correctly set values coming from the weight input dialog
- Removed commented-out code in `SpedizioneViewModel`
- Added handling for null values in weight fields.
- `SpedizioneActivity` changed to pass current values to `DialogInputPesoLUView`
- Fixed recovery mode UI not collapsing
2025-02-26 19:01:04 +01:00
9d48fec426 Aggiunto controllo su deposito in fase di picking uscita 2025-02-26 18:36:17 +01:00
645045b492 Fix su filtri ordini uscita 2025-02-26 13:50:20 +01:00
1988fae4f9 Aggiunto profiler recyclerview solo in caso di debug 2025-02-26 13:12:00 +01:00
6c621d5ca8 Migliorie sul caricamento della lista di ordini di uscita 2025-02-26 13:06:56 +01:00
b8c8a9d8ea Merge branch 'develop' into feature/FastPickingSpedizione 2025-02-26 11:05:52 +01:00
002e855d82 Merge branch 'feature/GestioneDocumentiLavorazione' into feature/FastPickingSpedizione 2025-02-26 10:29:35 +01:00
1c6de11e04 Merge branch 'develop' into feature/FastPickingSpedizione
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java
#	app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java
2025-02-26 10:27:27 +01:00
ce3dfca6e0 Rimosso parametro inutilizzato in build.gradle 2025-02-24 18:55:45 +01:00
706878b1e4 Migliorato adapter avantielenco ordini di uscita 2025-02-24 18:35:17 +01:00
6c59e22101 Merge branch 'develop' into feature/FastPickingSpedizione 2025-02-24 15:31:40 +01:00
2d48f6687c Aggiunta logica di fast picking in spedizione, scansionando un barcode di una UL all'interno di DialogInputQuantity verrà automaticamente chiusa l'ul attuale e riavviato il processo di scansione del barcode 2025-02-24 12:05:39 +01:00
826 changed files with 38280 additions and 15973 deletions

3
.gitignore vendored
View File

@@ -149,3 +149,6 @@ crashlytics.properties
crashlytics-build.properties crashlytics-build.properties
### AndroidStudio Patch ### ### AndroidStudio Patch ###
!/gradle/wrapper/gradle-wrapper.jar !/gradle/wrapper/gradle-wrapper.jar
copilot.*.xml
/.idea/dataSources.xml

6
.idea/AndroidProjectSystem.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

View File

@@ -1,5 +1,40 @@
<component name="ProjectCodeStyleConfiguration"> <component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173"> <code_scheme name="Project" version="173">
<JavaCodeStyleSettings>
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="false" module="true" />
<package name="android" withSubpackages="true" static="true" />
<package name="androidx" withSubpackages="true" static="true" />
<package name="com" withSubpackages="true" static="true" />
<package name="junit" withSubpackages="true" static="true" />
<package name="net" withSubpackages="true" static="true" />
<package name="org" withSubpackages="true" static="true" />
<package name="java" withSubpackages="true" static="true" />
<package name="javax" withSubpackages="true" static="true" />
<package name="" withSubpackages="true" static="true" />
<emptyLine />
<package name="android" withSubpackages="true" static="false" />
<emptyLine />
<package name="androidx" withSubpackages="true" static="false" />
<emptyLine />
<package name="com" withSubpackages="true" static="false" />
<emptyLine />
<package name="junit" withSubpackages="true" static="false" />
<emptyLine />
<package name="net" withSubpackages="true" static="false" />
<emptyLine />
<package name="org" withSubpackages="true" static="false" />
<emptyLine />
<package name="java" withSubpackages="true" static="false" />
<emptyLine />
<package name="javax" withSubpackages="true" static="false" />
<emptyLine />
<package name="" withSubpackages="true" static="false" />
<emptyLine />
</value>
</option>
</JavaCodeStyleSettings>
<JetCodeStyleSettings> <JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" /> <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings> </JetCodeStyleSettings>

View File

@@ -4,7 +4,7 @@
<selectionStates> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2025-01-27T15:42:06.256113400Z"> <DropdownSelection timestamp="2025-06-10T08:33:51.753564600Z">
<Target type="DEFAULT_BOOT"> <Target type="DEFAULT_BOOT">
<handle> <handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=21088B8EFD" /> <DeviceId pluginId="PhysicalDevice" identifier="serial=21088B8EFD" />

13
.idea/deviceManager.xml generated Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DeviceTable">
<option name="columnSorters">
<list>
<ColumnSorterState>
<option name="column" value="Name" />
<option name="order" value="ASCENDING" />
</ColumnSorterState>
</list>
</option>
</component>
</project>

View File

@@ -1,20 +1,21 @@
#set( $regex = "([a-z])([A-Z]+)") #set( $regex = "([a-z])([A-Z]+)")
#set( $replacement = "$1_$2") #set( $replacement = "$1_$2")
#set( $dashName = $NAME.replaceAll($regex, $replacement).toLowerCase()) #set( $dashName = $NAME.replaceAll($regex, $replacement).toLowerCase())
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.content.DialogInterface;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleOwner;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseMaterialAlertDialogBuilder;
public class Dialog${NAME}View extends BaseDialogFragment { public class Dialog${NAME}View extends BaseMaterialAlertDialogBuilder implements DialogInterface.OnShowListener, DialogInterface.OnDismissListener {
/* /*
Create the following layout resource file [dialog_${dashName}.xml] Create the following layout resource file [dialog_${dashName}.xml]
@@ -78,49 +79,112 @@ Create the following layout resource file [dialog_${dashName}.xml]
private Context mContext; private Context mContext;
//Pass here all external parameters //Pass here all external parameters
public static Dialog${NAME}View newInstance() { public static Dialog${NAME}View newInstance(@NonNull Context context) {
return new Dialog${NAME}View(); return new Dialog${NAME}View(context);
} }
private Dialog${NAME}View() { /*
super(); - Add following lines into MainApplicationComponent
[a] into @Component
Dialog${NAME}Module.class
[b] into interface body
Dialog${NAME}Component.Factory dialog${NAME}Component();
*/
private Dialog${NAME}View(@NonNull Context context) {
super(context);
this.mContext = context;
MainApplication.appComponent MainApplication.appComponent
.dialog${NAME}Component() .dialog${NAME}Component()
.create() .create()
.inject(this); .inject(this);
//mBindings = Dialog${NAME}Binding.inflate(LayoutInflater.from(this.mContext), null, false);
if (context instanceof LifecycleOwner) {
//mBindings.setLifecycleOwner((LifecycleOwner) context);
}
setCancelable(true);
setView(mBindings.getRoot());
/*
setPositiveButton(R.string.ok, (dialog, which) -> {
onOk();
});
setNegativeButton(R.string.abort, (dialog, which) -> {
onKo();
});
*/
//this.setupBarcode();
}
@NonNull
@Override
public AlertDialog create() {
AlertDialog alertDialog = super.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(this);
alertDialog.setOnDismissListener(this);
return alertDialog;
} }
@NonNull
@Override @Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { public void onShow(DialogInterface dialogInterface) {
this.mContext = requireContext(); //Init here all data or lists
//this.initList();
}
//mBindings = Dialog${NAME}Binding.inflate(LayoutInflater.from(this.mContext), null, false); @Override
//mBindings.setLifecycleOwner(this); public void onDismiss(DialogInterface dialog) {
//BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
}
/*
private void setupBarcode() {
BarcodeManager.enable(mBarcodeScannerInstanceID);
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getContext(), ex, false)));
/* super.initBarcodeManager(mBarcodeScannerInstanceID);
- Add following lines into MainApplicationComponent }
*/
[a] into @Component
Dialog${NAME}Module.class public static class Result {
private final Object returnData;
[b] into interface body private final boolean isAborted;
Dialog${NAME}Component.Factory dialog${NAME}Component();
*/ private Result(Object returnData, boolean isAborted) {
this.returnData = returnData;
setCancelable(false); this.isAborted = isAborted;
}
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot()) public static Result completed(Object returnData) {
.setCancelable(isCancelable()) return new Result(returnData, false);
.create(); }
alertDialog.setCanceledOnTouchOutside(isCancelable()); public static Result aborted() {
alertDialog.setOnShowListener(this); return new Result(null, true);
return alertDialog; }
public boolean isAborted() {
return isAborted;
}
public Object getReturnData() {
return returnData;
}
} }
} }

View File

@@ -1,6 +1,7 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App"> <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="WMS.app.main" /> <module name="WMS.app" />
<option name="ANDROID_RUN_CONFIGURATION_SCHEMA_VERSION" value="1" />
<option name="DEPLOY" value="true" /> <option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" /> <option name="DEPLOY_AS_INSTANT" value="false" />
@@ -8,14 +9,17 @@
<option name="PM_INSTALL_OPTIONS" value="" /> <option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" /> <option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" /> <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="ALLOW_ASSUME_VERIFIED" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" /> <option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" /> <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" /> <option name="MODE" value="default_activity" />
<option name="RESTORE_ENABLED" value="false" />
<option name="RESTORE_FILE" value="" />
<option name="RESTORE_FRESH_INSTALL_ONLY" value="false" />
<option name="CLEAR_LOGCAT" value="false" /> <option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" /> <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" /> <option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" /> <option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" /> <option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" /> <option name="DEBUGGER_TYPE" value="Auto" />
@@ -59,6 +63,7 @@
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" /> <option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers> </Profilers>
<option name="DEEP_LINK" value="" /> <option name="DEEP_LINK" value="" />
<option name="ACTIVITY" value="" />
<option name="ACTIVITY_CLASS" value="" /> <option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" /> <option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" /> <option name="SKIP_ACTIVITY_VALIDATION" value="false" />

72
Jenkinsfile.groovy Normal file
View File

@@ -0,0 +1,72 @@
pipeline {
agent {
label 'master'
}
options {
buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '10'))
disableConcurrentBuilds()
}
environment {
// ANDROID_HOME = "/usr/local/android/sdk" // Cambia in base al tuo sistema
JAVA_HOME = tool 'JDK 17.0.6 x64' // Nome dello strumento configurato in Jenkins
PATH = "${env.JAVA_HOME}\\bin;${env.PATH}"
}
stages {
stage('Preparing') {
when {
expression {
return env.GIT_BRANCH == "master-beta"
}
}
steps {
bat "./gradlew addBetaSuffix"
}
}
stage('Build') {
steps {
bat "./gradlew assembleRelease"
archiveArtifacts artifacts: 'app/build/outputs/apk/release/', onlyIfSuccessful: true
}
}
stage('Publish') {
steps {
azureUpload allowAnonymousAccess: true, fileShareName: 'storage-ci', filesPath: 'app/build/outputs/apk/release/*.apk,app/build/outputs/apk/release/*.txt', removePrefixPath: 'app/build/outputs/apk/release/', storageCredentialId: '83a86793-c1d6-4776-b20f-1ff652a57fee', storageType: 'filestorage', uploadArtifactsOnlyIfSuccessful: true, verbose: true, virtualPath: 'wms'
}
}
}
post {
success {
script {
bat 'curl -k "https://devservices.studioml.it/ems-api/updateWMSApp?overrideForced=false"'
bat 'curl -k "https://devservices.studioml.it/ems-api/updateWMSApp?overrideForced=false&suffix=beta"'
bat 'curl -k "https://services.studioml.it/ems-api/updateWMSApp?overrideForced=false"'
bat 'curl -k "https://services.studioml.it/ems-api/updateWMSApp?overrideForced=false&suffix=beta"'
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#008000', message: 'WMS è stato compilato con successo', status: 'SUCCESS', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
unstable {
script {
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#FFDE21', message: 'WMS è INSTABILE', status: 'UNSTABLE', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
failure {
script {
if (env.GIT_BRANCH == "master" || env.GIT_BRANCH == "master-beta") {
office365ConnectorSend adaptiveCards: true, color: '#FF2C2C', message: 'Errore di compilazione su WMS', status: 'FAILURE', webhookUrl: 'https://default0b9c060c159c4e5f82a77459a72572.16.environment.api.powerplatform.com:443/powerautomate/automations/direct/workflows/a73f903a4044474c84ad9a0d68a9a479/triggers/manual/paths/invoke?api-version=1&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=gXc43FQXqIq7Xpfvis2XgFoPl8lpg0Sf5HtuxZG_jeI'
}
}
}
}
}

View File

@@ -8,10 +8,11 @@ apply plugin: 'com.google.firebase.crashlytics'
//apply plugin: 'kotlin-android' //apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services' apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 478 def appVersionCode = 551
def appVersionName = '1.44.09' def appVersionName = '1.50.02'
signingConfigs { signingConfigs {
release { release {
@@ -34,7 +35,7 @@ android {
defaultConfig { defaultConfig {
applicationId "it.integry.integrywmsnative" applicationId "it.integry.integrywmsnative"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 35 targetSdk 36
versionCode appVersionCode versionCode appVersionCode
versionName appVersionName versionName appVersionName
// testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -51,17 +52,26 @@ android {
buildTypes { buildTypes {
debug { debug {
ext.enableCrashlytics = false ext.enableCrashlytics = false
// minifyEnabled true // Abilita la minimizzazione del codice
// shrinkResources true // Rimuove risorse non utilizzate
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
release { release {
minifyEnabled false // minifyEnabled true // Abilita la minimizzazione del codice
// shrinkResources true // Rimuove risorse non utilizzate
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release signingConfig signingConfigs.release
firebaseCrashlytics {
mappingFileUploadEnabled true
}
} }
} }
android.buildFeatures.dataBinding true android.buildFeatures.dataBinding true
android.buildFeatures.buildConfig true android.buildFeatures.buildConfig true
android.dataBinding.enabledForTests true
compileOptions { compileOptions {
sourceCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17
@@ -72,12 +82,7 @@ android {
} }
build {
doLast {
delete "$projectDir/build/outputs/apk/release/version.txt"
file("$projectDir/build/outputs/apk/release/version.txt").text = appVersionCode + '\n' + appVersionName + '\n' + 'forced=true'
}
}
gradle.projectsEvaluated { gradle.projectsEvaluated {
tasks.withType(JavaCompile.class).tap { tasks.withType(JavaCompile.class).tap {
@@ -90,7 +95,7 @@ android {
abortOnError false abortOnError false
} }
namespace 'it.integry.integrywmsnative' namespace 'it.integry.integrywmsnative'
compileSdk 35 compileSdk 36
} }
configurations { configurations {
@@ -99,35 +104,33 @@ configurations {
} }
dependencies { dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5'
implementation fileTree(include: ['*.jar'], dir: 'libs') implementation fileTree(include: ['*.jar'], dir: 'libs')
// androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1', { // androidTestImplementation('androidx.test.espresso:espresso-core:3.6.1', {
// exclude group: 'com.android.support', module: 'support-annotations' // exclude group: 'com.android.support', module: 'support-annotations'
// }) // })
// implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'com.github.lupaulus:logger:2.3.2' implementation 'com.github.lupaulus:logger:2.3.2'
//Firebase
// Import the Firebase BoM // Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:33.8.0') implementation platform('com.google.firebase:firebase-bom:33.16.0')
implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.android.gms:play-services-basement:18.5.0' implementation 'com.google.android.gms:play-services-basement:18.7.1'
//JJWT //JJWT
implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken:jjwt-api:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.12.0' implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.2.1'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.4.0' implementation 'androidx.recyclerview:recyclerview:1.4.0'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation('androidx.preference:preference-ktx:1.2.1') { implementation('androidx.preference:preference-ktx:1.2.1') {
exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel' exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel'
@@ -135,20 +138,18 @@ dependencies {
} }
implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0" implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0"
implementation 'com.squareup.okhttp3:okhttp:4.10.0' implementation 'com.squareup.retrofit2:retrofit:3.0.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:3.0.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.2' implementation 'com.annimon:stream:1.2.2'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.8.7' implementation 'androidx.lifecycle:lifecycle-runtime:2.9.1'
// implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'org.apache.commons:commons-text:1.13.1'
implementation 'org.apache.commons:commons-text:1.9'
//MVVM //MVVM
def dagger2_version = '2.55' def dagger2_version = '2.56.2'
api "com.google.dagger:dagger:$dagger2_version" implementation "com.google.dagger:dagger:$dagger2_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version"
api "com.google.dagger:dagger-android:$dagger2_version" implementation "com.google.dagger:dagger-android:$dagger2_version"
api "com.google.dagger:dagger-android-support:$dagger2_version" implementation "com.google.dagger:dagger-android-support:$dagger2_version"
// if you use the support libraries // if you use the support libraries
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version" annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version"
@@ -160,7 +161,7 @@ dependencies {
implementation 'com.github.pedromassango:doubleClick:3.0' implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM //SQLite ROOM
def room_version = "2.6.1" def room_version = "2.7.2"
implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version"
@@ -186,13 +187,13 @@ dependencies {
implementation 'com.github.harry1453:android-bluetooth-serial:v1.1.2' implementation 'com.github.harry1453:android-bluetooth-serial:v1.1.2'
// RxJava is also required. // RxJava is also required.
implementation 'io.reactivex.rxjava2:rxjava:2.1.12' implementation 'io.reactivex.rxjava2:rxjava:2.2.21'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'org.greenrobot:eventbus:3.3.1'
//Barcode generator //Barcode generator
implementation group: 'com.google.zxing', name: 'core', version: '3.5.3' implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
implementation("org.javatuples:javatuples:1.2")
} }
repositories { repositories {
@@ -200,3 +201,49 @@ repositories {
google() google()
maven { url 'https://jitpack.io' } maven { url 'https://jitpack.io' }
} }
tasks.register('addBetaSuffix') {
doLast {
def gradleFile = file("build.gradle")
def content = gradleFile.text
// Modifica appVersionName
content = content.replaceAll(/appVersionName\s*=\s*'(.*?)'/) { fullMatch, version ->
"appVersionName = '${version}-beta'"
}
// Modifica outputFileName
content = content.replaceAll(/output\.outputFileName\s*=\s*"(.*?)"/) { fullMatch, filename ->
"output.outputFileName = \"${filename.replace('.apk', '-beta.apk')}\""
}
// Modifica direttamente la riga che crea 'version.txt' in 'version-beta.txt'
content = content.replace(
"def versionFile = new File(outputDir, \"version.txt\")",
"def versionFile = new File(outputDir, \"version-beta.txt\")"
)
// Sovrascrivi il file
gradleFile.write(content)
}
}
tasks.register('createVersionFile') {
doLast {
def outputDir = file("${projectDir}/build/outputs/apk/release")
def versionFile = new File(outputDir, "version.txt")
// Cancella il file se esiste
if (versionFile.exists()) {
versionFile.delete()
}
// Crea il file con i contenuti desiderati
versionFile.write("${android.defaultConfig.versionCode}\n${android.defaultConfig.versionName}\nforced=true")
}
}
afterEvaluate {
tasks.assembleRelease.finalizedBy createVersionFile
}

View File

@@ -18,8 +18,55 @@
# Uncomment this to preserve the line number information for # Uncomment this to preserve the line number information for
# debugging stack traces. # debugging stack traces.
#-keepattributes SourceFile,LineNumberTable -keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
# Prevent proguard from stripping interface information from TypeAdapter, TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-dontwarn android.os.ServiceManager
-keep class io.jsonwebtoken.** { *; }
-dontwarn io.jsonwebtoken.**
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
# Prevent R8 from leaving Data object members always null
-keepclasseswithmembers class * {
<init>(...);
@com.google.gson.annotations.SerializedName <fields>;
}
# Per JJWT
-keep class io.jsonwebtoken.** { *; }
-keepnames class io.jsonwebtoken.* { *; }
-keepnames interface io.jsonwebtoken.* { *; }
# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowshrinking class * extends com.google.gson.reflect.TypeToken
-keep,allowshrinking class com.google.common.reflect.TypeToken
-keep,allowshrinking class * extends com.google.common.reflect.TypeToken
-keep class it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse { *; }
-keep class * extends it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse { *; }
-keep class * extends it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView { *; }
-keep class * implements it.integry.barcode_base_android_library.interfaces.BarcodeReaderInterface { *; }
# Regole ProGuard per Gson e classi modello
-keepattributes Signature
-keepattributes InnerClasses
# Se usi ObservableArrayList o altre classi specifiche di AndroidX Data Binding con Gson,
# potresti aver bisogno di mantenerle esplicitamente se non sono coperte sopra.
-keep class androidx.databinding.ObservableArrayList { *; }
-keepclassmembers class androidx.databinding.ObservableArrayList { *; }
-keep class * implements it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.IDialogAskClienteViewModel { *; }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,9 @@
<manifest xmlns:tools="http://schemas.android.com/tools" <manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"> xmlns:android="http://schemas.android.com/apk/res/android">
<uses-feature android:name="android.hardware.camera"
android:required="false" />
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
@@ -56,7 +59,6 @@
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.CLIENTBARCODEACTIVITY" /> <action android:name="android.intent.action.CLIENTBARCODEACTIVITY" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
</activity> </activity>
@@ -81,6 +83,12 @@
android:windowSoftInputMode="adjustNothing" android:windowSoftInputMode="adjustNothing"
android:configChanges="orientation|screenSize|keyboardHidden"/> android:configChanges="orientation|screenSize|keyboardHidden"/>
<activity
android:name=".gest.trasferimento_pedane.edit.TrasferimentoPedaneEditActivity"
android:label="@string/activity_trasferimento_pedane_edit_title"
android:windowSoftInputMode="adjustNothing"
android:configChanges="orientation|screenSize|keyboardHidden" />
<meta-data <meta-data
android:name="firebase_crashlytics_collection_enabled" android:name="firebase_crashlytics_collection_enabled"
android:value="true" /> android:value="true" />

View File

@@ -11,6 +11,7 @@ import it.integry.integrywmsnative.core.expansion.BaseDialogFragmentComponent;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragmentModule; import it.integry.integrywmsnative.core.expansion.BaseDialogFragmentModule;
import it.integry.integrywmsnative.core.expansion.BaseFragmentComponent; import it.integry.integrywmsnative.core.expansion.BaseFragmentComponent;
import it.integry.integrywmsnative.core.expansion.BaseFragmentModule; import it.integry.integrywmsnative.core.expansion.BaseFragmentModule;
import it.integry.integrywmsnative.core.expansion.BaseMaterialAlertDialogBuilderComponent;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoComponent; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoComponent;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoModule; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoModule;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.AccettazioneBollaPickingComponent; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.AccettazioneBollaPickingComponent;
@@ -89,6 +90,8 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArt
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoComponent; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoComponent;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeComponent;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeModule;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.settings.MainSettingsComponent; import it.integry.integrywmsnative.gest.settings.MainSettingsComponent;
@@ -101,10 +104,20 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazi
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloModule; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.TrasferimentoPedaneComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.TrasferimentoPedaneModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.dialog.confirm_export.DialogTrasferimentoPedaneConfirmExportModule;
import it.integry.integrywmsnative.gest.trasferimento_pedane.edit.TrasferimentoPedaneEditComponent;
import it.integry.integrywmsnative.gest.trasferimento_pedane.edit.TrasferimentoPedaneEditModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoComponent;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoModule;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoComponent;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditComponent; import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditComponent;
@@ -114,8 +127,16 @@ import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetM
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule;
import it.integry.integrywmsnative.view.dialogs.ask_commessa.DialogAskCommessaComponent; import it.integry.integrywmsnative.view.dialogs.ask_commessa.DialogAskCommessaComponent;
import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoComponent;
import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoModule;
import it.integry.integrywmsnative.view.dialogs.ask_info_trasferimento.DialogAskInfoTrasferimentoComponent;
import it.integry.integrywmsnative.view.dialogs.ask_info_trasferimento.DialogAskInfoTrasferimentoModule;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent; import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule; import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneComponent;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneModule;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUComponent;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUModule;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule;
import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent; import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent;
@@ -124,6 +145,8 @@ import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUComponen
import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUModule; import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLUModule;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsComponent;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent;
@@ -132,6 +155,10 @@ import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBat
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule; import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule; import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeComponent;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeModule;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUModule; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUModule;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent;
@@ -148,6 +175,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUModule; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUModule;
import it.integry.integrywmsnative.view.dialogs.select_position_of_lu.DialogSelectPositionOfLuComponent;
import it.integry.integrywmsnative.view.dialogs.select_position_of_lu.DialogSelectPositionOfLuModule;
import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoComponent; import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoComponent;
import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoModule; import it.integry.integrywmsnative.view.dialogs.switch_user_depo.DialogSwitchUserDepoModule;
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiComponent;
@@ -233,7 +262,22 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogAskVettoreModule.class, DialogAskVettoreModule.class,
DialogCreateNewArtModule.class, DialogCreateNewArtModule.class,
DialogSwitchUserDepoModule.class, DialogSwitchUserDepoModule.class,
DialogUpdateAvailableModule.class DialogUpdateAvailableModule.class,
DialogAskPositionOfLUModule.class,
DialogAskLivelloPosizioneModule.class,
VerificaGiacenzeModule.class,
DialogExtraInfoModule.class,
DialogAskDepositoModule.class,
DialogChooseArtFromListaArtsModule.class,
DialogUltimeConsegneFiltroAvanzatoModule.class,
DialogUltimiArriviFornitoreFiltroAvanzatoModule.class,
DialogSelectPositionOfLuModule.class,
TrasferimentoPedaneModule.class,
DialogAskInfoTrasferimentoModule.class,
TrasferimentoPedaneEditModule.class,
DialogTrasferimentoPedaneConfirmExportModule.class,
DialogChooseArtFromListaArtsModule.class,
DialogDeviceEndOfLifeModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@@ -243,6 +287,8 @@ public interface MainApplicationComponent {
BaseDialogFragmentComponent.Factory baseDialogFragmentComponent(); BaseDialogFragmentComponent.Factory baseDialogFragmentComponent();
BaseMaterialAlertDialogBuilderComponent.Factory baseMaterialAlertDialogComponent();
SplashActivityComponent.Factory splashActivityComponent(); SplashActivityComponent.Factory splashActivityComponent();
LoginComponent.Factory loginActivityComponent(); LoginComponent.Factory loginActivityComponent();
@@ -392,6 +438,34 @@ public interface MainApplicationComponent {
DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent(); DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent();
DialogAskPositionOfLUComponent.Factory dialogAskPositionOfLUComponent();
DialogAskLivelloPosizioneComponent.Factory dialogAskLivelloPosizioneComponent();
VerificaGiacenzeComponent.Factory verificaGiacenzeComponent();
DialogExtraInfoComponent.Factory dialogExtraInfoComponent();
DialogAskDepositoComponent.Factory dialogAskDepositoComponent();
DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent();
DialogUltimeConsegneFiltroAvanzatoComponent.Factory dialogUltimeConsegneFiltroAvanzatoComponent();
DialogUltimiArriviFornitoreFiltroAvanzatoComponent.Factory dialogUltimiArriviFornitoreFiltroAvanzatoComponent();
DialogSelectPositionOfLuComponent.Factory dialogSelectPositionOfLuComponent();
TrasferimentoPedaneComponent.Factory trasferimentoPedaneComponent();
DialogAskInfoTrasferimentoComponent.Factory dialogAskInfoTrasferimentoComponent();
TrasferimentoPedaneEditComponent.Factory traferimentoPedaneEditComponent();
DialogTrasferimentoPedaneConfirmExportComponent.Factory dialogTrasferimentoPedaneConfirmExportComponent();
DialogDeviceEndOfLifeComponent.Factory dialogDeviceEndOfLifeComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@@ -33,6 +33,7 @@ import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
@@ -48,13 +49,13 @@ import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsum
import it.integry.integrywmsnative.core.rest.consumers.ProduzioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProduzioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.services.inventario.InventarioService;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.sound.SoundAlertService; import it.integry.integrywmsnative.core.sound.SoundAlertService;
import it.integry.integrywmsnative.core.update.UpdatesManager; import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -99,8 +100,14 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
MainContext providesMainContextNew(MenuService menuService, AppDatabase appDatabase, SystemRESTConsumer systemRESTConsumer, AuthenticationRESTConsumer authenticationRESTConsumer) { ServerStatusChecker providesServerStatusChecker(Handler handler) {
return new MainContext(mApplication.getApplicationContext(), menuService, appDatabase, systemRESTConsumer, authenticationRESTConsumer); return new ServerStatusChecker(handler);
}
@Provides
@Singleton
MainContext providesMainContextNew(MenuService menuService, AppDatabase appDatabase, AuthenticationRESTConsumer authenticationRESTConsumer, ExecutorService executorService, Handler handler, ServerStatusChecker serverStatusChecker) {
return new MainContext(mApplication.getApplicationContext(), menuService, appDatabase, authenticationRESTConsumer, executorService, handler, serverStatusChecker);
} }
@Provides @Provides
@@ -150,8 +157,8 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
OrdiniRESTConsumer provideOrdiniRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) { OrdiniRESTConsumer provideOrdiniRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) {
return new OrdiniRESTConsumer(restBuilder, systemRESTConsumer, entityRESTConsumer); return new OrdiniRESTConsumer(restBuilder, executorService, systemRESTConsumer, entityRESTConsumer);
} }
@Provides @Provides
@@ -162,20 +169,20 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
ArticoloRESTConsumer provideArticoloRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { ArticoloRESTConsumer provideArticoloRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) {
return new ArticoloRESTConsumer(restBuilder, systemRESTConsumer); return new ArticoloRESTConsumer(restBuilder, executorService, systemRESTConsumer);
} }
@Provides @Provides
@Singleton @Singleton
CommessaRESTConsumer provideCommessaRESTConsumer(SystemRESTConsumer systemRESTConsumer) { CommessaRESTConsumer provideCommessaRESTConsumer(ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) {
return new CommessaRESTConsumer(systemRESTConsumer); return new CommessaRESTConsumer(executorService, systemRESTConsumer);
} }
@Provides @Provides
@Singleton @Singleton
DepositoRESTConsumer provideDepositoRESTConsumer(EntityRESTConsumer entityRESTConsumer, SystemRESTConsumer systemRESTConsumer) { DepositoRESTConsumer provideDepositoRESTConsumer(ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) {
return new DepositoRESTConsumer(entityRESTConsumer, systemRESTConsumer); return new DepositoRESTConsumer(executorService, systemRESTConsumer);
} }
@Provides @Provides
@@ -192,24 +199,25 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
MesRESTConsumer provideMesRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { MesRESTConsumer provideMesRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
return new MesRESTConsumer(restBuilder, systemRESTConsumer); return new MesRESTConsumer(executorService, restBuilder, systemRESTConsumer);
} }
@Provides @Provides
@Singleton @Singleton
EntityRESTConsumer provideEntityRESTConsumer(RESTBuilder restBuilder) { EntityRESTConsumer provideEntityRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new EntityRESTConsumer(restBuilder); return new EntityRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@Singleton @Singleton
ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(RESTBuilder restBuilder, ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(ExecutorService executorService,
RESTBuilder restBuilder,
SystemRESTConsumer systemRESTConsumer, SystemRESTConsumer systemRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer,
EntityRESTConsumer entityRESTConsumer, EntityRESTConsumer entityRESTConsumer,
SettingsManager settingsManager) { SettingsManager settingsManager) {
return new ColliMagazzinoRESTConsumer(restBuilder, systemRESTConsumer, articoloRESTConsumer, entityRESTConsumer, settingsManager); return new ColliMagazzinoRESTConsumer(executorService, restBuilder, systemRESTConsumer, articoloRESTConsumer, entityRESTConsumer, settingsManager);
} }
@Provides @Provides
@@ -232,14 +240,14 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
PrinterRESTConsumer providePrinterRESTConsumer(RESTBuilder restBuilder) { PrinterRESTConsumer providePrinterRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
return new PrinterRESTConsumer(restBuilder); return new PrinterRESTConsumer(executorService, restBuilder);
} }
@Provides @Provides
@Singleton @Singleton
SystemRESTConsumer provideSystemRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) { SystemRESTConsumer provideSystemRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new SystemRESTConsumer(executorService, restBuilder); return new SystemRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@@ -250,14 +258,8 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
PosizioniRESTConsumer providesPosizioniRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) { PosizioniRESTConsumer providesPosizioniRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, ExecutorService executorService) {
return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer); return new PosizioniRESTConsumer(restBuilder, systemRESTConsumer, executorService);
}
@Provides
@Singleton
ProdFabbisognoLineeProdRESTConsumer providesProdFabbisognoLineeProdRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
return new ProdFabbisognoLineeProdRESTConsumer(restBuilder, systemRESTConsumer);
} }
@Provides @Provides
@@ -268,8 +270,14 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
GiacenzaRESTConsumer provideGiacenzaRESTConsumer(RESTBuilder restBuilder, ArticoloRESTConsumer articoloRESTConsumer) { GiacenzaRESTConsumer provideGiacenzaRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, ArticoloRESTConsumer articoloRESTConsumer) {
return new GiacenzaRESTConsumer(restBuilder, articoloRESTConsumer); return new GiacenzaRESTConsumer(restBuilder, executorService, articoloRESTConsumer);
}
@Provides
@Singleton
GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new GiacenzaPvRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@@ -298,32 +306,32 @@ public class MainApplicationModule {
@Provides @Provides
@Singleton @Singleton
DocumentRESTConsumer provideDocumentiRESTConsumer(RESTBuilder restBuilder) { DocumentRESTConsumer provideDocumentiRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new DocumentRESTConsumer(restBuilder); return new DocumentRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@Singleton @Singleton
ColliAccettazioneRESTConsumer provideColliAccettazioneRESTConsumer(RESTBuilder restBuilder) { ColliAccettazioneRESTConsumer provideColliAccettazioneRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
return new ColliAccettazioneRESTConsumer(restBuilder); return new ColliAccettazioneRESTConsumer(executorService, restBuilder);
} }
@Provides @Provides
@Singleton @Singleton
ColliSpedizioneRESTConsumer provideColliSpedizioneRESTConsumer(RESTBuilder restBuilder) { ColliSpedizioneRESTConsumer provideColliSpedizioneRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new ColliSpedizioneRESTConsumer(restBuilder); return new ColliSpedizioneRESTConsumer(restBuilder, executorService);
} }
@Provides @Provides
@Singleton @Singleton
ColliLavorazioneRESTConsumer provideColliLavorazioneRESTConsumer(RESTBuilder restBuilder, SettingsManager settingsManager) { ColliLavorazioneRESTConsumer provideColliLavorazioneRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SettingsManager settingsManager) {
return new ColliLavorazioneRESTConsumer(restBuilder, settingsManager); return new ColliLavorazioneRESTConsumer(restBuilder, executorService, settingsManager);
} }
@Provides @Provides
@Singleton @Singleton
MagazzinoAutomaticoRESTConsumer provideMagazzinoAutomaticoRESTConsumer(RESTBuilder restBuilder) { MagazzinoAutomaticoRESTConsumer provideMagazzinoAutomaticoRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
return new MagazzinoAutomaticoRESTConsumer(restBuilder); return new MagazzinoAutomaticoRESTConsumer(executorService, restBuilder);
} }
@Provides @Provides

View File

@@ -4,15 +4,19 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.Spanned; import android.text.Spanned;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch;
import javax.inject.Inject; import javax.inject.Inject;
@@ -26,6 +30,7 @@ import it.integry.integrywmsnative.databinding.ActivitySplashBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.main.MainActivity; import it.integry.integrywmsnative.gest.main.MainActivity;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.device_end_of_life.DialogDeviceEndOfLifeView;
public class SplashActivity extends BaseActivity implements MainContext.Listener { public class SplashActivity extends BaseActivity implements MainContext.Listener {
@@ -37,6 +42,9 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
@Inject @Inject
MainContext mainContext; MainContext mainContext;
@Inject
Handler handler;
private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult; private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult;
public static void startActivity(Context context) { public static void startActivity(Context context) {
@@ -61,9 +69,24 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
UtilityContext.initMainActivity(this); UtilityContext.initMainActivity(this);
LocalDate endSupportDate = LocalDate.of(2026, 1, 31);
initAppVersion(); boolean isOldAndroid = Build.VERSION.SDK_INT < Build.VERSION_CODES.O;
initPermissions(this::init);
executorService.execute(() -> {
if (isOldAndroid)
showDeviceEndOfLifeMessage();
handler.post(() -> {
if (LocalDate.now().isBefore(endSupportDate) || !isOldAndroid) {
initAppVersion();
initPermissions(this::init);
} else {
this.finish();
}
});
});
} }
private void initAppVersion() { private void initAppVersion() {
@@ -101,14 +124,29 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
} }
} }
private void showDeviceEndOfLifeMessage() {
CountDownLatch latch = new CountDownLatch(1);
DialogDeviceEndOfLifeView.newInstance(latch::countDown)
.show(this.getSupportFragmentManager(), "dialog_device_end_of_life");
try {
latch.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
@Override @Override
public void onDBDataLoading(String item) { public void onDBDataLoading(String item) {
runOnUiThread(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item)); handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento " + item));
} }
@Override @Override
public void onMenuLoading() { public void onMenuLoading() {
runOnUiThread(() -> mBinding.loadingInfoTextview.setText("Caricamento menù")); handler.post(() -> mBinding.loadingInfoTextview.setText("Caricamento menù"));
} }
@Override @Override
@@ -151,11 +189,13 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
@Override @Override
public void onError(Spanned message) { public void onError(Spanned message) {
handler.post(() -> {
DialogSimpleMessageView.makeErrorDialog(this,
message, null, this::finish, R.string.logout, () -> {
this.mainContext.logout(MainApplication::exit);
})
.show();
DialogSimpleMessageView.makeErrorDialog( });
message, null, this::finish, R.string.logout, () -> {
this.mainContext.logout(MainApplication::exit);
})
.show(this.getSupportFragmentManager(), "tag");
} }
} }

View File

@@ -24,19 +24,4 @@ public class CommonConst {
public static String RECOVER_COLLO_FILE = "recover_ul.json"; public static String RECOVER_COLLO_FILE = "recover_ul.json";
} }
public static class Mail {
public static String[] forErrorsDebug = {
"g.scorrano@integry.it",
"v.castellana@integry.it"
};
public static String[] forErrors = {
// "syslogs@integry.it",
"g.scorrano@integry.it",
"v.castellana@integry.it"
};
}
} }

View File

@@ -11,11 +11,11 @@ public class JwtUtils {
private final static String SIGNING_KEY = "gICy3bjD56i/YFnBZZKe5ibiz3Snsp08nybGGziCV4ZcvyXBbyqWUnJ2wTrRXhOuf/xdljPXX0yBaqdAgvKthQ=="; private final static String SIGNING_KEY = "gICy3bjD56i/YFnBZZKe5ibiz3Snsp08nybGGziCV4ZcvyXBbyqWUnJ2wTrRXhOuf/xdljPXX0yBaqdAgvKthQ==";
public static Claims parseJwt(String token) { public static Claims parseJwt(String token) {
Jws<Claims> jws = Jwts.parserBuilder() Jws<Claims> jws = Jwts.parser()
.setSigningKey(Keys.hmacShaKeyFor(Decoders.BASE64.decode(SIGNING_KEY))) .verifyWith(Keys.hmacShaKeyFor(Decoders.BASE64.decode(SIGNING_KEY)))
.build() .build()
.parseClaimsJws(token); .parseSignedClaims(token);
return jws.getBody(); return jws.getPayload();
} }
} }

View File

@@ -7,6 +7,7 @@ public class BarcodeCallbackDTO {
private int ID = -1; private int ID = -1;
private boolean enabled = true;
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull; private RunnableArgs<BarcodeScanDTO> onScanSuccessfull;
private RunnableArgs<Exception> onScanFailed; private RunnableArgs<Exception> onScanFailed;
@@ -19,6 +20,15 @@ public class BarcodeCallbackDTO {
return this; return this;
} }
public boolean isEnabled() {
return enabled;
}
public BarcodeCallbackDTO setEnabled(boolean enabled) {
this.enabled = enabled;
return this;
}
public RunnableArgs<BarcodeScanDTO> getOnScanSuccessfull() { public RunnableArgs<BarcodeScanDTO> getOnScanSuccessfull() {
return onScanSuccessfull; return onScanSuccessfull;
} }

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.barcode_reader;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import android.view.KeyEvent; import android.view.KeyEvent;
@@ -24,10 +25,15 @@ public class BarcodeManager {
private static BarcodeReaderInterface mCurrentBarcodeInterface; private static BarcodeReaderInterface mCurrentBarcodeInterface;
private static final List<BarcodeCallbackDTO> mBarcodeCallbacksStacktrace = new ArrayList<>(); private static final List<BarcodeCallbackDTO> mBarcodeCallbacksStacktrace = new ArrayList<>();
private static boolean mEnabled = true; // private static boolean mEnabled = true;
private static final Class<? extends BarcodeReaderInterface>[] registeredBarcodeReaderInterfaces = new Class[]{PointMobileBarcodeReader.class, ZebraBarcodeReader.class, HoneyWellBarcodeReader.class, KeyboardEmulatorBarcodeReader.class}; private static final Class<? extends BarcodeReaderInterface>[] registeredBarcodeReaderInterfaces = new Class[]{
PointMobileBarcodeReader.class,
ZebraBarcodeReader.class,
HoneyWellBarcodeReader.class,
KeyboardEmulatorBarcodeReader.class
};
public static void init(Context applicationContext) throws Exception { public static void init(Context applicationContext) throws Exception {
@@ -56,12 +62,12 @@ public class BarcodeManager {
mCurrentBarcodeInterface.register(data -> { mCurrentBarcodeInterface.register(data -> {
BarcodeCallbackDTO callback = getValidCallback(); BarcodeCallbackDTO callback = getValidCallback();
if (callback != null && mEnabled) { if (callback != null && callback.isEnabled()) {
callback.getOnScanSuccessfull().run(data); callback.getOnScanSuccessfull().run(data);
} }
}, ex -> { }, ex -> {
BarcodeCallbackDTO callback = getValidCallback(); BarcodeCallbackDTO callback = getValidCallback();
if (callback != null && mEnabled) { if (callback != null && callback.isEnabled()) {
callback.getOnScanFailed().run(ex); callback.getOnScanFailed().run(ex);
} }
}); });
@@ -103,7 +109,6 @@ public class BarcodeManager {
} }
public static int addCallback(BarcodeCallbackDTO barcodeCallbackDTO) { public static int addCallback(BarcodeCallbackDTO barcodeCallbackDTO) {
int newID = -1; int newID = -1;
if (!mBarcodeCallbacksStacktrace.isEmpty()) { if (!mBarcodeCallbacksStacktrace.isEmpty()) {
@@ -133,18 +138,48 @@ public class BarcodeManager {
} }
public static void disable() { public static void disable(int instanceId) {
mEnabled = false; mBarcodeCallbacksStacktrace.stream().filter(x -> x.getID() == instanceId)
// UtilityLogger.info("Barcode reader disabled"); .findFirst().ifPresent(x -> {
x.setEnabled(false);
Log.d("BarcodeManager", "Disabled callback " + x.getID() + ": " + x.getOnScanSuccessfull());
});
} }
public static void enable() { public static void disableLastCallback() {
mEnabled = true; BarcodeCallbackDTO validCallback = getValidCallback();
// UtilityLogger.info("Barcode reader enabled"); if (validCallback != null) {
validCallback.setEnabled(false);
// Log.d("BarcodeManager", "Last callback disabled: " + validCallback.getOnScanSuccessfull());
}
} }
public static boolean isEnabled() { public static void enable(int instanceId) {
return mEnabled; mBarcodeCallbacksStacktrace.stream().filter(x -> x.getID() == instanceId)
.findFirst()
.ifPresent(x -> {
x.setEnabled(true);
// Log.d("BarcodeManager", "Enabled callback " + x.getID() + ": " + x.getOnScanSuccessfull());
});
}
public static void enableLastCallback() {
BarcodeCallbackDTO validCallback = getValidCallback();
if (validCallback != null) {
validCallback.setEnabled(true);
Log.d("BarcodeManager", "Last callback enabled: " + validCallback.getOnScanSuccessfull());
}
}
public static boolean isEnabled(int instanceId) {
return mBarcodeCallbacksStacktrace.stream().filter(x -> x.getID() == instanceId)
.findFirst()
.map(BarcodeCallbackDTO::isEnabled)
.orElse(false);
}
public static boolean isLastCallbackEnabled() {
return getValidCallback() != null && getValidCallback().isEnabled();
} }
public static void changeSettings(List<Pair<String, Object>> settings) { public static void changeSettings(List<Pair<String, Object>> settings) {

View File

@@ -19,8 +19,10 @@ import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposi
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloView; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloView;
import it.integry.integrywmsnative.gest.trasferimento_pedane.TrasferimentoPedaneFragment;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreFragment; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreFragment;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment;
@@ -229,6 +231,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setDrawerIcon(R.drawable.ic_black_empty_box) .setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(ArticoliInGiacenzaFragment::newInstance)) .setFragmentFactory(ArticoliInGiacenzaFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_trasferimento_pedane)
.setCodMenu("MG076")
.setTitleText(R.string.trasferimento_pedane_title)
.setTitleIcon(R.drawable.ic_dashboard_trasferimento_pedane)
.setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(TrasferimentoPedaneFragment::newInstance))
).addGroup( ).addGroup(
new MenuGroup() new MenuGroup()
.setCodMenu("MM012") .setCodMenu("MM012")
@@ -242,6 +252,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance)) .setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance))
.addItem(new MenuItem() .addItem(new MenuItem()
.setCodMenu("MG058") .setCodMenu("MG058")
.setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni) .setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni)
@@ -250,6 +261,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setDrawerIcon(R.drawable.ic_documents_outline) .setDrawerIcon(R.drawable.ic_documents_outline)
.setFragmentFactory(DocInterniFragment::newInstance)) .setFragmentFactory(DocInterniFragment::newInstance))
.addItem(new MenuItem()
.setCodMenu("MG075")
.setID(it.integry.integrywmsnative.R.id.nav_pv_verifica_giacenze)
.setTitleText(R.string.verifica_giacenze_menu)
.setTitleIcon(R.drawable.ic_dashboard_verifica_giacenze)
.setDrawerIcon(R.drawable.ic_drawer_verifica_giacenze)
.setFragmentFactory(VerificaGiacenzeFragment::newInstance))
// .addItem(new MenuItem() // .addItem(new MenuItem()
// .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi) // .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi)
// .setTitleText(it.integry.integrywmsnative.R.string.transmitted_orders) // .setTitleText(it.integry.integrywmsnative.R.string.transmitted_orders)

View File

@@ -89,11 +89,25 @@ public class AppContext {
private void initLogger() { private void initLogger() {
Logger.addLogAdapter(new AndroidLogAdapter()); Logger.addLogAdapter(new AndroidLogAdapter());
logsFolder = new File(mApplicationContext.getExternalFilesDir(null).getAbsolutePath()); File dataDir = mApplicationContext.getExternalFilesDir(null);
int maxBytesSize = 5 * 1024 * 1024;
Logger.addLogAdapter(new DiskLogAdapter(logsFolder, maxBytesSize)); logsFolder = new File(dataDir, "logs");
if (!logsFolder.exists())
logsFolder.mkdirs();
//Temporary clean
File[] wrongFilesToBeDeleted = dataDir.listFiles((file, s) -> s.startsWith("logs_"));
if (wrongFilesToBeDeleted != null)
for (File fileToDelete : wrongFilesToBeDeleted) {
fileToDelete.delete();
}
removeOldLogs(logsFolder); removeOldLogs(logsFolder);
int maxBytesSize = 5 * 1024 * 1024;
Logger.addLogAdapter(new DiskLogAdapter(logsFolder, maxBytesSize));
} }
private void removeOldLogs(File logsFolder) { private void removeOldLogs(File logsFolder) {

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.context; package it.integry.integrywmsnative.core.context;
import android.content.Context; import android.content.Context;
import android.os.Handler;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.Spanned; import android.text.Spanned;
@@ -9,16 +10,15 @@ import android.text.SpannedString;
import com.google.firebase.installations.FirebaseInstallations; import com.google.firebase.installations.FirebaseInstallations;
import java.net.ConnectException; import java.net.ConnectException;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase; import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.menu.MenuService; import it.integry.integrywmsnative.core.menu.MenuService;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityThread;
import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer; import it.integry.integrywmsnative.gest.login.rest.AuthenticationRESTConsumer;
@Singleton @Singleton
@@ -27,17 +27,21 @@ public class MainContext {
private final Context applicationContext; private final Context applicationContext;
private final MenuService menuService; private final MenuService menuService;
private final AppDatabase appDatabase; private final AppDatabase appDatabase;
private final SystemRESTConsumer systemRESTConsumer;
private final AuthenticationRESTConsumer authenticationRESTConsumer; private final AuthenticationRESTConsumer authenticationRESTConsumer;
private final ExecutorService executorService;
private final Handler handler;
private final ServerStatusChecker serverStatusChecker;
private Listener mListener; private Listener mListener;
public MainContext(Context applicationContext, MenuService menuService, AppDatabase appDatabase, SystemRESTConsumer systemRESTConsumer, AuthenticationRESTConsumer authenticationRESTConsumer) { public MainContext(Context applicationContext, MenuService menuService, AppDatabase appDatabase, AuthenticationRESTConsumer authenticationRESTConsumer, ExecutorService executorService, Handler handler, ServerStatusChecker serverStatusChecker) {
this.applicationContext = applicationContext; this.applicationContext = applicationContext;
this.menuService = menuService; this.menuService = menuService;
this.appDatabase = appDatabase; this.appDatabase = appDatabase;
this.systemRESTConsumer = systemRESTConsumer;
this.authenticationRESTConsumer = authenticationRESTConsumer; this.authenticationRESTConsumer = authenticationRESTConsumer;
this.executorService = executorService;
this.handler = handler;
this.serverStatusChecker = serverStatusChecker;
} }
public void init() { public void init() {
@@ -48,34 +52,31 @@ public class MainContext {
} }
//this.initAuthSession(() -> { executorService.execute(() -> {
this.initDeviceId(() -> {
this.initDBData(() -> {
this.initMenu(() -> {
if (mListener != null) mListener.onContextInitialized(); try {
}); this.initDBData();
}); this.initMenu();
serverStatusChecker.init();
if (mListener != null) mListener.onContextInitialized();
} catch (Exception ex) {
Spanned message = null;
if (ex.getCause() != null && ex.getCause() instanceof ConnectException) {
message = Html.fromHtml("Impossibile collegarsi all'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else if (ex.getMessage().startsWith("Status 404:")) {
message = Html.fromHtml("Errore 404. Non è stato possibile soddisfare la richiesta sull'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else {
message = new SpannableString(ex.getMessage());
}
if (mListener != null) mListener.onError(message);
}
}); });
//});
this.initServerStatusChecker();
// EventBus.getDefault().register(this);
} }
// @Subscribe(threadMode = ThreadMode.MAIN)
// public void onSessionExpired(SessionExpiredEvent event) {
// DialogSimpleMessageView.makeErrorDialog(
// new SpannedString("La sessione è scaduta. Effettua nuovamente la login"),
// null,
// () -> {
// logout(MainApplication::exit);
// })
// .show(activity.getSupportFragmentManager(), "expired-session-error");
// }
private void initAuthSession(Runnable onComplete) { private void initAuthSession(Runnable onComplete) {
this.authenticationRESTConsumer.me(obj -> { this.authenticationRESTConsumer.me(obj -> {
@@ -96,59 +97,37 @@ public class MainContext {
SettingsManager.i().getUserSession().setDeviceId(fid.getResult()); SettingsManager.i().getUserSession().setDeviceId(fid.getResult());
SettingsManager.update(); SettingsManager.update();
systemRESTConsumer.registerDevice(onComplete, ex -> { // systemRESTConsumer.registerDevice(onComplete, ex -> {
if (mListener != null) mListener.onError(new SpannedString(ex.getMessage())); // if (mListener != null) mListener.onError(new SpannedString(ex.getMessage()));
}); // });
}); });
} }
public void logout(Runnable onLoggedOut) { public void logout(Runnable onLoggedOut) {
menuService.invalidateCache(); menuService.invalidateCache();
UtilityThread.executeParallel(() -> { executorService.execute(() -> {
SettingsManager.i().setUser(null); SettingsManager.i().setUser(null);
SettingsManager.i().setUserSession(null); SettingsManager.i().setUserSession(null);
SettingsManager.update(); SettingsManager.update();
appDatabase.clearAllTables(); appDatabase.clearAllTables();
onLoggedOut.run(); handler.post(() -> {
}, true); onLoggedOut.run();
});
});
} }
private void initServerStatusChecker() { private void initDBData() throws Exception {
ServerStatusChecker.init();
}
private void initDBData(Runnable onComplete) {
SettingsManager.loadDBVariables(item -> { SettingsManager.loadDBVariables(item -> {
if (mListener != null) mListener.onDBDataLoading(item); if (mListener != null) mListener.onDBDataLoading(item);
}, });
onComplete,
ex -> {
Spanned message = null;
if (ex.getCause() != null && ex.getCause() instanceof ConnectException) {
message = Html.fromHtml("Impossibile collegarsi all'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else if (ex.getMessage().startsWith("Status 404:")) {
message = Html.fromHtml("Errore 404. Non è stato possibile soddisfare la richiesta sull'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else {
message = new SpannableString(ex.getMessage());
}
if (mListener != null) mListener.onError(message);
}
);
} }
private void initMenu(Runnable onComplete) { private void initMenu() throws Exception {
if (mListener != null) mListener.onMenuLoading(); if (mListener != null) mListener.onMenuLoading();
this.menuService.init(onComplete, ex -> { this.menuService.init();
if (mListener != null) mListener.onError(new SpannedString(ex.getMessage()));
});
} }

View File

@@ -1,5 +1,8 @@
package it.integry.integrywmsnative.core.data_recover; package it.integry.integrywmsnative.core.data_recover;
import com.google.gson.annotations.SerializedName;
import java.time.LocalDate;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@@ -7,13 +10,26 @@ import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
public class ColliDataRecoverDTO { public class ColliDataRecoverDTO {
@SerializedName("id")
private int id; private int id;
@SerializedName("numCollo")
private int numCollo; private int numCollo;
@SerializedName("serCollo")
private String serCollo; private String serCollo;
private String dataCollo;
@SerializedName("dataCollo")
private LocalDate dataCollo;
@SerializedName("gestioneCollo")
private String gestioneCollo; private String gestioneCollo;
@SerializedName("filtro")
private String filtro; private String filtro;
@SerializedName("testateOrdini")
private List<OrdineUscitaInevasoDTO> testateOrdini; private List<OrdineUscitaInevasoDTO> testateOrdini;
public int getId() { public int getId() {
@@ -43,11 +59,11 @@ public class ColliDataRecoverDTO {
return this; return this;
} }
public String getDataCollo() { public LocalDate getDataCollo() {
return dataCollo; return dataCollo;
} }
public ColliDataRecoverDTO setDataCollo(String dataCollo) { public ColliDataRecoverDTO setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo; this.dataCollo = dataCollo;
return this; return this;
} }

View File

@@ -2,7 +2,6 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context; import android.content.Context;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils; import com.google.android.gms.common.util.IOUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
@@ -14,6 +13,7 @@ import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Random; import java.util.Random;
import javax.inject.Inject; import javax.inject.Inject;
@@ -65,9 +65,9 @@ public class ColliDataRecoverService {
} }
private ColliDataRecoverDTO getIfExists(int id) { private ColliDataRecoverDTO getIfExists(int id) {
Optional<ColliDataRecoverDTO> recoverDTOOptional = Stream.of(mtbColtsSessions) Optional<ColliDataRecoverDTO> recoverDTOOptional = mtbColtsSessions.stream()
.filter(x -> x.getId() == id) .filter(x -> x.getId() == id)
.findSingle(); .findFirst();
return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null; return recoverDTOOptional.isPresent() ? recoverDTOOptional.get() : null;
@@ -85,7 +85,7 @@ public class ColliDataRecoverService {
ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO() ColliDataRecoverDTO recoverDTO = new ColliDataRecoverDTO()
.setId(newId) .setId(newId)
.setDataCollo(mtbColtSession.getDataColloS()) .setDataCollo(mtbColtSession.getDataColloLD())
.setNumCollo(mtbColtSession.getNumCollo()) .setNumCollo(mtbColtSession.getNumCollo())
.setSerCollo(mtbColtSession.getSerCollo()) .setSerCollo(mtbColtSession.getSerCollo())
.setGestioneCollo(mtbColtSession.getGestione()) .setGestioneCollo(mtbColtSession.getGestione())

View File

@@ -22,14 +22,22 @@ import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao;
import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao;
import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao;
import it.integry.integrywmsnative.core.data_store.db.dao.RawDao; import it.integry.integrywmsnative.core.data_store.db.dao.RawDao;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneDao;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneRowDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeRowDao;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
@Database(entities = { @Database(entities = {
ArticoloGriglia.class, ArticoloGriglia.class,
@@ -38,10 +46,14 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
ArticoloOrdine.class, ArticoloOrdine.class,
SqlMtbColt.class, SqlMtbColt.class,
SqlMtbColr.class, SqlMtbColr.class,
InventarioRoomDTO.class, InventarioEntity.class,
InventarioRowRoomDTO.class InventarioRowRoomDTO.class,
VerificaGiacenzeEntity.class,
VerificaGiacenzeRowEntity.class,
TrasferimentoPedaneEntity.class,
TrasferimentoPedaneRowEntity.class
}, },
version = 17) version = 21)
@TypeConverters({ @TypeConverters({
DateConverter.class, DateConverter.class,
BigDecimalConverter.class, BigDecimalConverter.class,
@@ -70,7 +82,11 @@ public abstract class AppDatabase extends RoomDatabase {
.addMigrations(MIGRATION_13_14) .addMigrations(MIGRATION_13_14)
.addMigrations(MIGRATION_14_15) .addMigrations(MIGRATION_14_15)
.addMigrations(MIGRATION_15_16) .addMigrations(MIGRATION_15_16)
.addMigrations(MIGRATION_16_17); .addMigrations(MIGRATION_16_17)
.addMigrations(MIGRATION_17_18)
.addMigrations(MIGRATION_18_19)
.addMigrations(MIGRATION_19_20)
.addMigrations(MIGRATION_20_21);
sInstance = builder.build(); sInstance = builder.build();
} }
@@ -95,6 +111,14 @@ public abstract class AppDatabase extends RoomDatabase {
public abstract InventarioRowDao inventarioRowDao(); public abstract InventarioRowDao inventarioRowDao();
public abstract VerificaGiacenzeDao verificaGiacenzeDao();
public abstract VerificaGiacenzeRowDao verificaGiacenzeRowDao();
public abstract TrasferimentoPedaneDao trasferimentoPedaneDao();
public abstract TrasferimentoPedaneRowDao trasferimentoPedaneRowDao();
static final Migration MIGRATION_10_11 = new Migration(10, 11) { static final Migration MIGRATION_10_11 = new Migration(10, 11) {
@@ -161,11 +185,13 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine_cod_mart ON articoli_ordine (id_ordine, cod_mart);"); database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine_cod_mart ON articoli_ordine (id_ordine, cod_mart);");
} }
}; };
static final Migration MIGRATION_15_16 = new Migration(15, 16) { static final Migration MIGRATION_15_16 = new Migration(15, 16) {
@Override @Override
public void migrate(@NonNull SupportSQLiteDatabase database) { public void migrate(@NonNull SupportSQLiteDatabase database) {
} }
}; };
static final Migration MIGRATION_16_17 = new Migration(16, 17) { static final Migration MIGRATION_16_17 = new Migration(16, 17) {
@Override @Override
public void migrate(@NonNull SupportSQLiteDatabase database) { public void migrate(@NonNull SupportSQLiteDatabase database) {
@@ -182,4 +208,93 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("DROP TABLE _inventario_rows_old;"); database.execSQL("DROP TABLE _inventario_rows_old;");
} }
}; };
static final Migration MIGRATION_17_18 = new Migration(17, 18) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS verifica_giacenze (_id INTEGER PRIMARY KEY AUTOINCREMENT, cod_mdep TEXT NOT NULL, data INTEGER, remote_sync_date INTEGER);");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze__id ON verifica_giacenze (_id);");
database.execSQL("CREATE TABLE IF NOT EXISTS verifica_giacenze_rows (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"parent_id INTEGER, " +
"created_at INTEGER DEFAULT CURRENT_TIMESTAMP, " +
"cod_mart TEXT, " +
"partita_mag TEXT, " +
"descrizione TEXT, " +
"qta_in_giacenza REAL NOT NULL DEFAULT 0, " +
"qta REAL NOT NULL DEFAULT 0, " +
"num_cnf REAL NOT NULL DEFAULT 0, " +
"qta_cnf REAL NOT NULL DEFAULT 0, " +
"scan_cod_barre TEXT, " +
"remote_sync_date INTEGER, " +
"FOREIGN KEY(parent_id) REFERENCES verifica_giacenze(_id) ON UPDATE NO ACTION ON DELETE CASCADE );");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze_rows__id ON verifica_giacenze_rows (_id)");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze_rows_parent_id ON verifica_giacenze_rows (parent_id)");
}
};
static final Migration MIGRATION_18_19 = new Migration(18, 19) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS trasferimento_pedane (" +
"cod_mdep_dest TEXT NOT NULL, " +
"descrizione_depo_dest TEXT NOT NULL, " +
"created_at INTEGER DEFAULT CURRENT_TIMESTAMP, " +
"status INTEGER NOT NULL, " +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"remote_sync_date INTEGER);");
database.execSQL("CREATE INDEX IF NOT EXISTS index_trasferimento_pedane__id ON trasferimento_pedane (_id);");
database.execSQL("CREATE TABLE IF NOT EXISTS trasferimento_pedane_rows (" +
"parent_id INTEGER, " +
"barcode_ul TEXT NOT NUll, " +
"progressivo_ul INTEGER, " +
"created_at INTEGER DEFAULT CURRENT_TIMESTAMP, " +
"flag_inconsistent INTEGER NOT NULL DEFAULT 0, " +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"remote_sync_date INTEGER," +
"FOREIGN KEY(parent_id) REFERENCES trasferimento_pedane(_id) ON UPDATE NO ACTION ON DELETE CASCADE );");
database.execSQL("CREATE INDEX IF NOT EXISTS index_trasferimento_pedane_rows__id ON trasferimento_pedane_rows (_id)");
database.execSQL("CREATE INDEX IF NOT EXISTS index_trasferimento_pedane_rows_parent_id ON trasferimento_pedane_rows (parent_id)");
}
};
static final Migration MIGRATION_19_20 = new Migration(19, 20) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS trasferimento_pedane_rows;");
database.execSQL("CREATE TABLE IF NOT EXISTS trasferimento_pedane_rows (" +
"parent_id INTEGER NOT NULL, " +
"barcode_ul TEXT NOT NULL, " +
"progressivo_ul INTEGER NOT NULL, " +
"flag_inconsistent INTEGER NOT NULL DEFAULT 0, " +
"created_at INTEGER DEFAULT CURRENT_TIMESTAMP, " +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"remote_sync_date INTEGER, " +
"FOREIGN KEY(parent_id) REFERENCES trasferimento_pedane(_id) ON UPDATE NO ACTION ON DELETE CASCADE );");
database.execSQL("CREATE INDEX IF NOT EXISTS index_trasferimento_pedane_rows__id ON trasferimento_pedane_rows (_id)");
database.execSQL("CREATE INDEX IF NOT EXISTS index_trasferimento_pedane_rows_parent_id ON trasferimento_pedane_rows (parent_id)");
}
};
static final Migration MIGRATION_20_21 = new Migration(20, 21) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE trasferimento_pedane"
+ " ADD COLUMN document_cod_anag TEXT;");
database.execSQL("ALTER TABLE trasferimento_pedane"
+ " ADD COLUMN document_cod_dtip TEXT");
database.execSQL("ALTER TABLE trasferimento_pedane"
+ " ADD COLUMN document_num INTEGER");
database.execSQL("ALTER TABLE trasferimento_pedane"
+ " ADD COLUMN document_ser TEXT");
database.execSQL("ALTER TABLE trasferimento_pedane"
+ " ADD COLUMN document_data INTEGER");
}
};
} }

View File

@@ -18,6 +18,10 @@ import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao;
import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao;
import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao;
import it.integry.integrywmsnative.core.data_store.db.dao.RawDao; import it.integry.integrywmsnative.core.data_store.db.dao.RawDao;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneDao;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneRowDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeRowDao;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
@@ -32,10 +36,17 @@ import it.integry.integrywmsnative.core.data_store.db.repository.datasource.SqlM
import it.integry.integrywmsnative.core.data_store.db.repository.datasource.SqlMtbColtDataSource; import it.integry.integrywmsnative.core.data_store.db.repository.datasource.SqlMtbColtDataSource;
import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository; import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRowRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource; import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioRowLocalDataSource; import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioRowLocalDataSource;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.VerificaGiacenzeLocalDataSource;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.VerificaGiacenzeRowLocalDataSource;
import it.integry.integrywmsnative.core.mapper.InventarioMapper; import it.integry.integrywmsnative.core.mapper.InventarioMapper;
import it.integry.integrywmsnative.core.mapper.InventarioRowMapper; import it.integry.integrywmsnative.core.mapper.InventarioRowMapper;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeMapper;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeRowMapper;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer;
@Module @Module
@@ -108,6 +119,11 @@ public class RoomModule {
return appDatabase.inventarioRowDao(); return appDatabase.inventarioRowDao();
} }
@Singleton
@Provides
InventarioMapper providesInventarioMapper(InventarioRowMapper inventarioRowMapper) {
return new InventarioMapper(inventarioRowMapper);
}
@Singleton @Singleton
@Provides @Provides
@@ -117,8 +133,38 @@ public class RoomModule {
@Singleton @Singleton
@Provides @Provides
InventarioMapper providesInventarioMapper(InventarioRowMapper inventarioRowMapper) { VerificaGiacenzeDao providesVerificaGiacenzeDao(AppDatabase appDatabase) {
return new InventarioMapper(inventarioRowMapper); return appDatabase.verificaGiacenzeDao();
}
@Singleton
@Provides
VerificaGiacenzeRowDao providesVerificaGiacenzeRowDao(AppDatabase appDatabase) {
return appDatabase.verificaGiacenzeRowDao();
}
@Singleton
@Provides
TrasferimentoPedaneDao providesTrasferimentoPedaneDao(AppDatabase appDatabase) {
return appDatabase.trasferimentoPedaneDao();
}
@Singleton
@Provides
TrasferimentoPedaneRowDao providesTrasferimentoPedaneRowDao(AppDatabase appDatabase) {
return appDatabase.trasferimentoPedaneRowDao();
}
@Singleton
@Provides
VerificaGiacenzeMapper providesVerificaGiacenzeMapper(VerificaGiacenzeRowMapper verificaGiacenzeRowMapper) {
return new VerificaGiacenzeMapper(verificaGiacenzeRowMapper);
}
@Singleton
@Provides
VerificaGiacenzeRowMapper providesVerificaGiacenzeRowMapper() {
return new VerificaGiacenzeRowMapper();
} }
@@ -182,4 +228,20 @@ public class RoomModule {
return new InventarioRowRepository(inventarioRowLocalDataSource, inventarioRESTConsumer, inventarioRowMapper, handler); return new InventarioRowRepository(inventarioRowLocalDataSource, inventarioRESTConsumer, inventarioRowMapper, handler);
} }
@Provides
VerificaGiacenzeRepository providesVerificaGiacenzeRepository(ExecutorService executorService, Handler handler,
VerificaGiacenzeLocalDataSource verificaGiacenzeLocalDataSource,
GiacenzaPvRESTConsumer giacenzaPvRESTConsumer,
VerificaGiacenzeMapper verificaGiacenzeMapper) {
return new VerificaGiacenzeRepository(verificaGiacenzeLocalDataSource, giacenzaPvRESTConsumer, verificaGiacenzeMapper, handler, executorService);
}
@Provides
VerificaGiacenzeRowRepository providesVerificaGiacenzeRowRepository(ExecutorService executorService, Handler handler,
VerificaGiacenzeRowLocalDataSource verificaGiacenzeRowLocalDataSource,
GiacenzaPvRESTConsumer giacenzaPvRESTConsumer,
VerificaGiacenzeRowMapper verificaGiacenzeRowMapper) {
return new VerificaGiacenzeRowRepository(verificaGiacenzeRowLocalDataSource, giacenzaPvRESTConsumer, verificaGiacenzeRowMapper, handler, executorService);
}
} }

View File

@@ -7,21 +7,21 @@ import java.util.List;
import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO; import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface; import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface;
@Dao @Dao
public interface InventarioDao extends EntityDaoInterface<InventarioRoomDTO> { public interface InventarioDao extends EntityDaoInterface<InventarioEntity> {
@Query("SELECT * FROM " + InventarioRoomDTO.TABLE_NAME + @Query("SELECT * FROM " + InventarioEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))") " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))")
List<InventarioRoomDTO> selectAll(boolean toBeSync); List<InventarioEntity> selectAll(boolean toBeSync);
@Query("SELECT * FROM " + InventarioRoomDTO.TABLE_NAME + @Query("SELECT * FROM " + InventarioEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + InventarioRoomDTO.Columns.DATA_INVENTARIO + " DESC") " ORDER BY " + InventarioEntity.Columns.DATA_INVENTARIO + " DESC")
Flowable<List<InventarioRoomDTO>> selectAllFlowable(boolean toBeSync); Flowable<List<InventarioEntity>> selectAllFlowable(boolean toBeSync);
} }

View File

@@ -0,0 +1,39 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Query;
import androidx.room.Transaction;
import java.util.List;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface;
import it.integry.integrywmsnative.core.data_store.db.wrappers.TrasferimentoPedaneWithRowsWrapper;
@Dao
public interface TrasferimentoPedaneDao extends EntityDaoInterface<TrasferimentoPedaneEntity> {
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneEntity.TABLE_NAME +
" WHERE " + BaseSyncDTO.Columns.ID + " = :id")
TrasferimentoPedaneWithRowsWrapper select(long id);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneEntity.TABLE_NAME +
" WHERE " + BaseSyncDTO.Columns.ID + " = :id")
Flowable<TrasferimentoPedaneWithRowsWrapper> selectFlowable(long id);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + TrasferimentoPedaneEntity.Columns.CREATED_AT + " DESC")
List<TrasferimentoPedaneWithRowsWrapper> selectAll(boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + TrasferimentoPedaneEntity.Columns.CREATED_AT + " DESC")
Flowable<List<TrasferimentoPedaneWithRowsWrapper>> selectAllFlowable(boolean toBeSync);
}

View File

@@ -0,0 +1,43 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Query;
import androidx.room.Transaction;
import java.util.List;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface;
@Dao
public interface TrasferimentoPedaneRowDao extends EntityDaoInterface<TrasferimentoPedaneRowEntity> {
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + TrasferimentoPedaneRowEntity.Columns.CREATED_AT + " DESC")
List<TrasferimentoPedaneRowEntity> selectAll(boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + TrasferimentoPedaneRowEntity.Columns.CREATED_AT + " DESC")
Flowable<List<TrasferimentoPedaneRowEntity>> selectAllFlowable(boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" AND " + TrasferimentoPedaneRowEntity.Columns.PARENT_ID + " = :trasferimentoId " +
" ORDER BY " + TrasferimentoPedaneRowEntity.Columns.CREATED_AT + " DESC")
List<TrasferimentoPedaneRowEntity> selectAll(long trasferimentoId, boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + TrasferimentoPedaneRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" AND " + TrasferimentoPedaneRowEntity.Columns.PARENT_ID + " = :trasferimentoId " +
" ORDER BY " + TrasferimentoPedaneRowEntity.Columns.CREATED_AT + " DESC")
Flowable<List<TrasferimentoPedaneRowEntity>> selectAllFlowable(long trasferimentoId, boolean toBeSync);
}

View File

@@ -0,0 +1,42 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Query;
import androidx.room.Transaction;
import java.util.List;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface;
import it.integry.integrywmsnative.core.data_store.db.wrappers.VerificaGiacenzeWithRowsWrapper;
@Dao
public interface VerificaGiacenzeDao extends EntityDaoInterface<VerificaGiacenzeEntity> {
@Transaction
@Query("SELECT * FROM " + VerificaGiacenzeEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))")
List<VerificaGiacenzeWithRowsWrapper> selectAll(boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + VerificaGiacenzeEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + VerificaGiacenzeEntity.Columns.DATA + " DESC")
Flowable<List<VerificaGiacenzeWithRowsWrapper>> selectAllFlowable(boolean toBeSync);
@Transaction
@Query("SELECT * FROM " + VerificaGiacenzeEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" +
" ORDER BY " + VerificaGiacenzeEntity.Columns.DATA + " DESC" +
" LIMIT 1")
VerificaGiacenzeWithRowsWrapper selectLast(boolean toBeSync);
@Query("SELECT COALESCE(strftime('%s', 'now') - MAX(" + VerificaGiacenzeRowEntity.Columns.CREATED_AT + ") < :maxMinutes * 60, 0) as any_verifica_to_be_recovered" +
" FROM " + VerificaGiacenzeRowEntity.TABLE_NAME +
" WHERE (" + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL)")
boolean isAnotherVerificaGiacenzeInProgress(int maxMinutes);
}

View File

@@ -0,0 +1,25 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.room.Dao;
import androidx.room.Query;
import java.util.List;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface;
@Dao
public interface VerificaGiacenzeRowDao extends EntityDaoInterface<VerificaGiacenzeRowEntity> {
@Query("SELECT * FROM " + VerificaGiacenzeRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))")
List<VerificaGiacenzeRowEntity> selectAll(boolean toBeSync);
@Query("SELECT * FROM " + VerificaGiacenzeRowEntity.TABLE_NAME +
" WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))")
Flowable<List<VerificaGiacenzeRowEntity>> selectAllFlowable(boolean toBeSync);
}

View File

@@ -5,7 +5,7 @@ import android.provider.BaseColumns;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.PrimaryKey; import androidx.room.PrimaryKey;
import java.util.Date; import java.time.LocalDateTime;
public abstract class BaseSyncDTO extends BaseRoomDTO { public abstract class BaseSyncDTO extends BaseRoomDTO {
@@ -21,7 +21,7 @@ public abstract class BaseSyncDTO extends BaseRoomDTO {
private Long id; private Long id;
@ColumnInfo(name = Columns.COLUMN_REMOTE_SYNC_DATE) @ColumnInfo(name = Columns.COLUMN_REMOTE_SYNC_DATE)
private Date remoteSyncDate; private LocalDateTime remoteSyncDate;
public Long getId() { public Long getId() {
return id; return id;
@@ -31,11 +31,11 @@ public abstract class BaseSyncDTO extends BaseRoomDTO {
this.id = id; this.id = id;
} }
public Date getRemoteSyncDate() { public LocalDateTime getRemoteSyncDate() {
return remoteSyncDate; return remoteSyncDate;
} }
public void setRemoteSyncDate(Date remoteSyncDate) { public void setRemoteSyncDate(LocalDateTime remoteSyncDate) {
this.remoteSyncDate = remoteSyncDate; this.remoteSyncDate = remoteSyncDate;
} }

View File

@@ -12,8 +12,8 @@ import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface; import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
@Entity(tableName = InventarioRoomDTO.TABLE_NAME) @Entity(tableName = InventarioEntity.TABLE_NAME)
public class InventarioRoomDTO extends BaseSyncDTO implements EntityModelInterface { public class InventarioEntity extends BaseSyncDTO implements EntityModelInterface {
public static final String TABLE_NAME = "inventari"; public static final String TABLE_NAME = "inventari";

View File

@@ -4,7 +4,6 @@ import androidx.annotation.NonNull;
import androidx.room.ColumnInfo; import androidx.room.ColumnInfo;
import androidx.room.Entity; import androidx.room.Entity;
import androidx.room.ForeignKey; import androidx.room.ForeignKey;
import androidx.room.PrimaryKey;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -12,10 +11,11 @@ import java.time.LocalDateTime;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface; import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
@Entity( @Entity(
inheritSuperIndices = true,
tableName = InventarioRowRoomDTO.TABLE_NAME, tableName = InventarioRowRoomDTO.TABLE_NAME,
foreignKeys = { foreignKeys = {
@ForeignKey( @ForeignKey(
entity = InventarioRoomDTO.class, entity = InventarioEntity.class,
parentColumns = {BaseSyncDTO.Columns.ID}, parentColumns = {BaseSyncDTO.Columns.ID},
childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID}, childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID},
onDelete = ForeignKey.CASCADE onDelete = ForeignKey.CASCADE
@@ -40,13 +40,6 @@ public class InventarioRowRoomDTO extends BaseSyncDTO implements EntityModelInte
public static final String ZONA = "zona"; public static final String ZONA = "zona";
} }
/**
* The unique ID
*/
@PrimaryKey(autoGenerate = true)
@ColumnInfo(index = true, name = BaseSyncDTO.Columns.ID)
private Long id;
@ColumnInfo(index = true, name = Columns.PARENT_ID) @ColumnInfo(index = true, name = Columns.PARENT_ID)
private Long parentId; private Long parentId;

View File

@@ -0,0 +1,158 @@
package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
import it.integry.integrywmsnative.core.model.secondary.TrasferimentoPedaneStatusEnum;
@Entity(
inheritSuperIndices = true,
tableName = TrasferimentoPedaneEntity.TABLE_NAME
)
public class TrasferimentoPedaneEntity extends BaseSyncDTO implements EntityModelInterface {
public static final String TABLE_NAME = "trasferimento_pedane";
public static class Columns {
public static final String COD_MDEP_DEST = "cod_mdep_dest";
public static final String DESCRIZIONE_DEPO_DEST = "descrizione_depo_dest";
public static final String STATUS = "status";
public static final String DOCUMENT_COD_ANAG = "document_cod_anag";
public static final String DOCUMENT_COD_DTIP = "document_cod_dtip";
public static final String DOCUMENT_NUM = "document_num";
public static final String DOCUMENT_SER = "document_ser";
public static final String DOCUMENT_DATA = "document_data";
public static final String CREATED_AT = "created_at";
}
@NonNull
@ColumnInfo(name = TrasferimentoPedaneEntity.Columns.COD_MDEP_DEST)
private String codMdepDest;
@NonNull
@ColumnInfo(name = Columns.DESCRIZIONE_DEPO_DEST)
private String descrizioneDepoDest;
@NonNull
@ColumnInfo(name = Columns.STATUS)
private short status = TrasferimentoPedaneStatusEnum.APERTO.getValue();
@ColumnInfo(name = Columns.DOCUMENT_COD_ANAG)
private String documentCodAnag;
@ColumnInfo(name = Columns.DOCUMENT_COD_DTIP)
private String documentCodDtip;
@ColumnInfo(name = Columns.DOCUMENT_NUM)
private Integer documentNum;
@ColumnInfo(name = Columns.DOCUMENT_SER)
private String documentSer;
@ColumnInfo(name = Columns.DOCUMENT_DATA)
private LocalDate documentData;
@ColumnInfo(name = TrasferimentoPedaneEntity.Columns.CREATED_AT, defaultValue = "CURRENT_TIMESTAMP")
private LocalDateTime createdAt = LocalDateTime.now();
@Ignore
private List<TrasferimentoPedaneRowEntity> trasferimentoPedaneRowList;
@NonNull
public String getCodMdepDest() {
return codMdepDest;
}
public void setCodMdepDest(@NonNull String codMdepDest) {
this.codMdepDest = codMdepDest;
}
@NonNull
public String getDescrizioneDepoDest() {
return descrizioneDepoDest;
}
public void setDescrizioneDepoDest(@NonNull String descrizioneDepoDest) {
this.descrizioneDepoDest = descrizioneDepoDest;
}
public short getStatus() {
return status;
}
public void setStatus(short status) {
this.status = status;
}
public String getDocumentCodAnag() {
return documentCodAnag;
}
public void setDocumentCodAnag(String documentCodAnag) {
this.documentCodAnag = documentCodAnag;
}
public String getDocumentCodDtip() {
return documentCodDtip;
}
public void setDocumentCodDtip(String documentCodDtip) {
this.documentCodDtip = documentCodDtip;
}
public Integer getDocumentNum() {
return documentNum;
}
public void setDocumentNum(Integer documentNum) {
this.documentNum = documentNum;
}
public String getDocumentSer() {
return documentSer;
}
public void setDocumentSer(String documentSer) {
this.documentSer = documentSer;
}
public LocalDate getDocumentData() {
return documentData;
}
public void setDocumentData(LocalDate documentData) {
this.documentData = documentData;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public List<TrasferimentoPedaneRowEntity> getTrasferimentoPedaneRowList() {
return trasferimentoPedaneRowList;
}
public void setTrasferimentoPedaneRowList(List<TrasferimentoPedaneRowEntity> trasferimentoPedaneRowList) {
this.trasferimentoPedaneRowList = trasferimentoPedaneRowList;
}
@Ignore
public TrasferimentoPedaneStatusEnum getStatusEnum() {
return TrasferimentoPedaneStatusEnum.fromValue(getStatus());
}
}

View File

@@ -0,0 +1,131 @@
package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import androidx.room.Ignore;
import java.time.LocalDateTime;
import java.util.Objects;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
import it.integry.integrywmsnative.core.model.MtbColt;
@Entity(
inheritSuperIndices = true,
tableName = TrasferimentoPedaneRowEntity.TABLE_NAME,
foreignKeys = {
@ForeignKey(
entity = TrasferimentoPedaneEntity.class,
parentColumns = {BaseSyncDTO.Columns.ID},
childColumns = {TrasferimentoPedaneRowEntity.Columns.PARENT_ID},
onDelete = ForeignKey.CASCADE
)
}
)
public class TrasferimentoPedaneRowEntity extends BaseSyncDTO implements EntityModelInterface, Cloneable {
public static final String TABLE_NAME = "trasferimento_pedane_rows";
public static class Columns {
public static final String PARENT_ID = "parent_id";
public static final String CREATED_AT = "created_at";
public static final String BARCODE_UL = "barcode_ul";
public static final String PROGRESSIVO_UL = "progressivo_ul";
public static final String FLAG_INCONSISTENT = "flag_inconsistent";
// public static final String COD_MART = "cod_mart";
// public static final String PARTITA_MAG = "partita_mag";
// public static final String DESCRIZIONE = "descrizione";
// public static final String QTA_IN_GIACENZA = "qta_in_giacenza";
// public static final String QTA = "qta";
// public static final String NUM_CNF = "num_cnf";
// public static final String QTA_CNF = "qta_cnf";
// public static final String SCAN_COD_BARRE = "scan_cod_barre";
}
@NonNull
@ColumnInfo(index = true, name = TrasferimentoPedaneRowEntity.Columns.PARENT_ID)
private Long parentId;
@NonNull
@ColumnInfo(name = Columns.BARCODE_UL)
private String barcodeUl;
@NonNull
@ColumnInfo(name = Columns.PROGRESSIVO_UL)
private int progressivoUl;
@ColumnInfo(name = Columns.FLAG_INCONSISTENT, defaultValue = "0")
private boolean flagInconsistent = false;
@ColumnInfo(name = TrasferimentoPedaneRowEntity.Columns.CREATED_AT, defaultValue = "CURRENT_TIMESTAMP")
private LocalDateTime createdAt = LocalDateTime.now();
@Ignore
private MtbColt detailMtbColt;
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getBarcodeUl() {
return barcodeUl;
}
public void setBarcodeUl(String barcodeUl) {
this.barcodeUl = barcodeUl;
}
public int getProgressivoUl() {
return progressivoUl;
}
public void setProgressivoUl(int progressivoUl) {
this.progressivoUl = progressivoUl;
}
public boolean isFlagInconsistent() {
return flagInconsistent;
}
public void setFlagInconsistent(boolean flagInconsistent) {
this.flagInconsistent = flagInconsistent;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public MtbColt getDetailMtbColt() {
return detailMtbColt;
}
public void setDetailMtbColt(MtbColt detailMtbColt) {
this.detailMtbColt = detailMtbColt;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
TrasferimentoPedaneRowEntity that = (TrasferimentoPedaneRowEntity) o;
return getProgressivoUl() == that.getProgressivoUl() && isFlagInconsistent() == that.isFlagInconsistent() && Objects.equals(getParentId(), that.getParentId()) && Objects.equals(getBarcodeUl(), that.getBarcodeUl()) && Objects.equals(getCreatedAt(), that.getCreatedAt());
}
@Override
public int hashCode() {
return Objects.hash(getParentId(), getBarcodeUl(), getProgressivoUl(), isFlagInconsistent(), getCreatedAt());
}
}

View File

@@ -0,0 +1,78 @@
package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
@Entity(
inheritSuperIndices = true,
tableName = VerificaGiacenzeEntity.TABLE_NAME
)
public class VerificaGiacenzeEntity extends BaseSyncDTO implements EntityModelInterface {
public static final String TABLE_NAME = "verifica_giacenze";
public static class Columns {
public static final String COD_MDEP = "cod_mdep";
public static final String DATA = "data";
}
@NonNull
@ColumnInfo(name = VerificaGiacenzeEntity.Columns.COD_MDEP)
private String codMdep;
@ColumnInfo(name = VerificaGiacenzeEntity.Columns.DATA)
private LocalDateTime data;
@Ignore
private List<VerificaGiacenzeRowEntity> verificaGiacenzeRowList;
@NonNull
public String getCodMdep() {
return codMdep;
}
public void setCodMdep(@NonNull String codMdep) {
this.codMdep = codMdep;
}
public LocalDateTime getData() {
return data;
}
public void setData(LocalDateTime data) {
this.data = data;
}
public List<VerificaGiacenzeRowEntity> getVerificaGiacenzeRowList() {
return verificaGiacenzeRowList;
}
public void setVerificaGiacenzeRowList(List<VerificaGiacenzeRowEntity> verificaGiacenzeRowList) {
this.verificaGiacenzeRowList = verificaGiacenzeRowList;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
VerificaGiacenzeEntity that = (VerificaGiacenzeEntity) o;
return getId().equals(that.getId()) && getCodMdep().equals(that.getCodMdep()) && Objects.equals(getData(), that.getData()) && Objects.equals(getVerificaGiacenzeRowList(), that.getVerificaGiacenzeRowList());
}
@Override
public int hashCode() {
int result = getId().hashCode();
result = 31 * result + getCodMdep().hashCode();
result = 31 * result + Objects.hashCode(getData());
result = 31 * result + Objects.hashCode(getVerificaGiacenzeRowList());
return result;
}
}

View File

@@ -0,0 +1,211 @@
package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.ForeignKey;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;
import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;
@Entity(
inheritSuperIndices = true,
tableName = VerificaGiacenzeRowEntity.TABLE_NAME,
foreignKeys = {
@ForeignKey(
entity = VerificaGiacenzeEntity.class,
parentColumns = {BaseSyncDTO.Columns.ID},
childColumns = {VerificaGiacenzeRowEntity.Columns.PARENT_ID},
onDelete = ForeignKey.CASCADE
)
}
)
public class VerificaGiacenzeRowEntity extends BaseSyncDTO implements EntityModelInterface, Cloneable {
public static final String TABLE_NAME = "verifica_giacenze_rows";
public static class Columns {
public static final String PARENT_ID = "parent_id";
public static final String CREATED_AT = "created_at";
public static final String COD_MART = "cod_mart";
public static final String PARTITA_MAG = "partita_mag";
public static final String DESCRIZIONE = "descrizione";
public static final String QTA_IN_GIACENZA = "qta_in_giacenza";
public static final String QTA = "qta";
public static final String NUM_CNF = "num_cnf";
public static final String QTA_CNF = "qta_cnf";
public static final String SCAN_COD_BARRE = "scan_cod_barre";
}
@ColumnInfo(index = true, name = Columns.PARENT_ID)
private Long parentId;
@ColumnInfo(name = Columns.CREATED_AT, defaultValue = "CURRENT_TIMESTAMP")
private LocalDateTime createdAt = LocalDateTime.now();
@ColumnInfo(name = Columns.COD_MART)
private String codMart;
@ColumnInfo(name = Columns.PARTITA_MAG)
private String partitaMag;
@ColumnInfo(name = Columns.DESCRIZIONE)
private String descrizione;
@NonNull
@ColumnInfo(name = Columns.QTA_IN_GIACENZA, defaultValue = "0")
private BigDecimal qtaInGiacenza;
@NonNull
@ColumnInfo(name = Columns.QTA, defaultValue = "0")
private BigDecimal qta;
@NonNull
@ColumnInfo(name = Columns.NUM_CNF, defaultValue = "0")
private BigDecimal numConf;
@NonNull
@ColumnInfo(name = Columns.QTA_CNF, defaultValue = "0")
private BigDecimal qtaConf;
@ColumnInfo(name = Columns.SCAN_COD_BARRE)
private String scanCodBarre;
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public String getCodMart() {
return codMart;
}
public void setCodMart(String codMart) {
this.codMart = codMart;
}
public String getPartitaMag() {
return partitaMag;
}
public void setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
}
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
@NonNull
public BigDecimal getQtaInGiacenza() {
return qtaInGiacenza;
}
public void setQtaInGiacenza(@NonNull BigDecimal qtaInGiacenza) {
this.qtaInGiacenza = qtaInGiacenza;
}
@NonNull
public BigDecimal getQta() {
return qta;
}
public void setQta(@NonNull BigDecimal qta) {
this.qta = qta;
}
@NonNull
public BigDecimal getNumConf() {
return numConf;
}
public void setNumConf(@NonNull BigDecimal numConf) {
this.numConf = numConf;
}
@NonNull
public BigDecimal getQtaConf() {
return qtaConf;
}
public void setQtaConf(@NonNull BigDecimal qtaConf) {
this.qtaConf = qtaConf;
}
public String getScanCodBarre() {
return scanCodBarre;
}
public void setScanCodBarre(String scanCodBarre) {
this.scanCodBarre = scanCodBarre;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
VerificaGiacenzeRowEntity that = (VerificaGiacenzeRowEntity) o;
return getId().equals(that.getId()) && getParentId().equals(that.getParentId()) && getCodMart().equals(that.getCodMart()) && Objects.equals(getPartitaMag(), that.getPartitaMag()) && getQta().equals(that.getQta()) && getNumConf().equals(that.getNumConf()) && getQtaConf().equals(that.getQtaConf()) && Objects.equals(getScanCodBarre(), that.getScanCodBarre());
}
@Override
public int hashCode() {
int result = getId().hashCode();
result = 31 * result + getParentId().hashCode();
result = 31 * result + getCodMart().hashCode();
result = 31 * result + Objects.hashCode(getPartitaMag());
result = 31 * result + getQta().hashCode();
result = 31 * result + getNumConf().hashCode();
result = 31 * result + getQtaConf().hashCode();
result = 31 * result + Objects.hashCode(getScanCodBarre());
return result;
}
@NonNull
@Override
public VerificaGiacenzeRowEntity clone() throws CloneNotSupportedException {
try {
VerificaGiacenzeRowEntity clone = (VerificaGiacenzeRowEntity) super.clone();
// Clona ID
clone.setId(getId() != null ? new Long(getId()) : null);
clone.setParentId(getParentId() != null ? new Long(getParentId()) : null);
// Clona le stringhe
clone.setCodMart(getCodMart() != null ? new String(getCodMart()) : null);
clone.setPartitaMag(getPartitaMag() != null ? new String(getPartitaMag()) : null);
clone.setDescrizione(getDescrizione() != null ? new String(getDescrizione()) : null);
clone.setScanCodBarre(getScanCodBarre() != null ? new String(getScanCodBarre()) : null);
// Clona i BigDecimal
clone.setQta(getQta() != null ? new BigDecimal(getQta().toString()) : null);
clone.setNumConf(getNumConf() != null ? new BigDecimal(getNumConf().toString()) : null);
clone.setQtaConf(getQtaConf() != null ? new BigDecimal(getQtaConf().toString()) : null);
return clone;
} catch (CloneNotSupportedException e) {
throw new AssertionError(); // Can't happen
}
}
}

View File

@@ -6,6 +6,7 @@ import android.util.Log;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@@ -15,7 +16,7 @@ import java.util.concurrent.ExecutorService;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.rxjava3.schedulers.Schedulers; import io.reactivex.rxjava3.schedulers.Schedulers;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource; import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.mapper.InventarioMapper; import it.integry.integrywmsnative.core.mapper.InventarioMapper;
@@ -24,13 +25,13 @@ import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityLiveData; import it.integry.integrywmsnative.core.utility.UtilityLiveData;
public class InventarioRepository extends _BaseRepository<MtbInvent, InventarioRoomDTO, InventarioMapper, InventarioLocalDataSource, InventarioRESTConsumer> { public class InventarioRepository extends _BaseRepository<MtbInvent, InventarioEntity, InventarioMapper, InventarioLocalDataSource, InventarioRESTConsumer> {
private final ExecutorService executorService; private final ExecutorService executorService;
private final Handler handler; private final Handler handler;
private final MutableLiveData<List<InventarioRoomDTO>> internalLiveData = new MutableLiveData<>(); private final MutableLiveData<List<InventarioEntity>> internalLiveData = new MutableLiveData<>();
@Inject @Inject
public InventarioRepository(InventarioLocalDataSource localDataSource, public InventarioRepository(InventarioLocalDataSource localDataSource,
@@ -44,7 +45,7 @@ public class InventarioRepository extends _BaseRepository<MtbInvent, InventarioR
} }
public LiveData<List<InventarioRoomDTO>> retrieve(Runnable onComplete, RunnableArgs<Exception> onError) { public LiveData<List<InventarioEntity>> retrieve(Runnable onComplete, RunnableArgs<Exception> onError) {
localDataSource.makeSynchronousRetrieveAllLive(false) localDataSource.makeSynchronousRetrieveAllLive(false)
.observeOn(Schedulers.io()) .observeOn(Schedulers.io())
.subscribe(internalLiveData::postValue); .subscribe(internalLiveData::postValue);
@@ -84,15 +85,15 @@ public class InventarioRepository extends _BaseRepository<MtbInvent, InventarioR
}); });
} }
public void insert(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) { public void insert(InventarioEntity inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) {
localDataSource.makeInsertRequest(inventarioDTO, localResult -> { localDataSource.makeInsertRequest(inventarioDTO, localResult -> {
if (onComplete != null) handler.post(onComplete); if (onComplete != null) handler.post(onComplete);
}, onError); }, onError);
} }
public void export(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) { public void export(InventarioEntity inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) {
remoteDataSource.makeInsertRequest(dataMapper.mapRoomToRest(inventarioDTO), () -> { remoteDataSource.makeInsertRequest(dataMapper.mapRoomToRest(inventarioDTO), () -> {
inventarioDTO.setRemoteSyncDate(new Date()); inventarioDTO.setRemoteSyncDate(LocalDateTime.now());
localDataSource.makeUpdateRequest(inventarioDTO, (ignored) -> { localDataSource.makeUpdateRequest(inventarioDTO, (ignored) -> {
handler.post(onComplete); handler.post(onComplete);
@@ -100,7 +101,7 @@ public class InventarioRepository extends _BaseRepository<MtbInvent, InventarioR
}, onError); }, onError);
} }
public void delete(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) { public void delete(InventarioEntity inventarioDTO, Runnable onComplete, RunnableArgs<Exception> onError) {
localDataSource.makeDeleteRequest(inventarioDTO, onComplete, onError); localDataSource.makeDeleteRequest(inventarioDTO, onComplete, onError);
} }

View File

@@ -0,0 +1,82 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new;
import android.os.Handler;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.schedulers.Schedulers;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.TrasferimentoPedaneLocalDataSource;
import it.integry.integrywmsnative.core.mapper.TrasferimentoPedaneMapper;
import it.integry.integrywmsnative.core.rest.consumers.TrasferimentoPedaneRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.trasferimento_pedane.TrasferimentoPedaneDTO;
@Singleton
public class TrasferimentoPedaneRepository extends _BaseRepository<TrasferimentoPedaneDTO, TrasferimentoPedaneEntity, TrasferimentoPedaneMapper, TrasferimentoPedaneLocalDataSource, TrasferimentoPedaneRESTConsumer> {
private final ExecutorService executorService;
private final Handler handler;
@Inject
public TrasferimentoPedaneRepository(TrasferimentoPedaneLocalDataSource localDataSource,
TrasferimentoPedaneRESTConsumer remoteDataSource,
TrasferimentoPedaneMapper dataMapper,
Handler handler,
ExecutorService executorService) {
super(dataMapper, localDataSource, remoteDataSource);
this.handler = handler;
this.executorService = executorService;
}
public LiveData<TrasferimentoPedaneEntity> retrieveLive(long id) {
MutableLiveData<TrasferimentoPedaneEntity> internalLiveData = new MutableLiveData<>();
localDataSource.makeRetrieveRequest(id)
.observeOn(Schedulers.io())
.subscribe(internalLiveData::postValue);
return internalLiveData;
}
public TrasferimentoPedaneEntity retrieve(long id) {
return localDataSource.makeSynchronousRetrieveRequest(id);
}
public LiveData<List<TrasferimentoPedaneEntity>> retrieveLive() {
MutableLiveData<List<TrasferimentoPedaneEntity>> internalLiveData = new MutableLiveData<>();
localDataSource.makeSynchronousRetrieveAllLive(false)
.observeOn(Schedulers.io())
.subscribe(internalLiveData::postValue);
return internalLiveData;
}
public long insert(String codMdepDest, String descrizioneDepoDest) {
var trasferimentoPedane = new TrasferimentoPedaneEntity();
trasferimentoPedane.setCodMdepDest(codMdepDest);
trasferimentoPedane.setDescrizioneDepoDest(descrizioneDepoDest);
localDataSource.makeSynchronousInsertRequest(trasferimentoPedane);
return trasferimentoPedane.getId();
}
public void updateSynchronized(TrasferimentoPedaneEntity entity) {
localDataSource.makeSynchronousUpdateRequest(entity);
}
public void deleteSynchronized(TrasferimentoPedaneEntity entity) {
localDataSource.makeSynchronousDeleteRequest(entity);
}
}

View File

@@ -0,0 +1,74 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new;
import android.os.Handler;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.schedulers.Schedulers;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.TrasferimentoPedaneRowsLocalDataSource;
import it.integry.integrywmsnative.core.mapper.TrasferimentoPedaneRowMapper;
import it.integry.integrywmsnative.core.rest.consumers.TrasferimentoPedaneRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.trasferimento_pedane.TrasferimentoPedaneRowDTO;
@Singleton
public class TrasferimentoPedaneRowRepository extends _BaseRepository<TrasferimentoPedaneRowDTO, TrasferimentoPedaneRowEntity, TrasferimentoPedaneRowMapper, TrasferimentoPedaneRowsLocalDataSource, TrasferimentoPedaneRESTConsumer> {
private final ExecutorService executorService;
private final Handler handler;
@Inject
public TrasferimentoPedaneRowRepository(TrasferimentoPedaneRowsLocalDataSource localDataSource,
TrasferimentoPedaneRESTConsumer remoteDataSource,
TrasferimentoPedaneRowMapper dataMapper,
Handler handler,
ExecutorService executorService) {
super(dataMapper, localDataSource, remoteDataSource);
this.handler = handler;
this.executorService = executorService;
}
public LiveData<List<TrasferimentoPedaneRowEntity>> retrieve(long trasferimentoPedaneId) {
MutableLiveData<List<TrasferimentoPedaneRowEntity>> internalLiveData = new MutableLiveData<>();
localDataSource.makeSynchronousRetrieveAllLive(trasferimentoPedaneId, false)
.observeOn(Schedulers.io())
.subscribe(internalLiveData::postValue);
return internalLiveData;
}
public TrasferimentoPedaneRowEntity insertSynchronized(long parentId, String barcodeUl, int progressivoUl) {
TrasferimentoPedaneRowEntity entity = new TrasferimentoPedaneRowEntity() {{
setParentId(parentId);
setBarcodeUl(barcodeUl);
setProgressivoUl(progressivoUl);
}};
localDataSource.makeSynchronousInsertRequest(entity);
return entity;
}
public void updateSynchronized(TrasferimentoPedaneRowEntity entity) {
localDataSource.makeSynchronousUpdateRequest(entity);
}
public void updateAllSynchronized(List<TrasferimentoPedaneRowEntity> entities) {
localDataSource.makeSynchronousUpdateAllRequest(entities);
}
public void deleteSynchronized(TrasferimentoPedaneRowEntity entity) {
localDataSource.makeSynchronousDeleteRequest(entity);
}
}

View File

@@ -0,0 +1,59 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new;
import android.os.Handler;
import java.util.List;
import java.util.concurrent.ExecutorService;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.VerificaGiacenzeLocalDataSource;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeMapper;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.pv.VerificaGiacenzeDTO;
public class VerificaGiacenzeRepository extends _BaseRepository<VerificaGiacenzeDTO, VerificaGiacenzeEntity, VerificaGiacenzeMapper, VerificaGiacenzeLocalDataSource, GiacenzaPvRESTConsumer> {
private final ExecutorService executorService;
private final Handler handler;
public VerificaGiacenzeRepository(VerificaGiacenzeLocalDataSource localDataSource,
GiacenzaPvRESTConsumer remoteDataSource,
VerificaGiacenzeMapper dataMapper,
Handler handler,
ExecutorService executorService) {
super(dataMapper, localDataSource, remoteDataSource);
this.handler = handler;
this.executorService = executorService;
}
public List<VerificaGiacenzeEntity> retrieve() {
return localDataSource.makeSynchronousRetrieveAllRequest(false);
}
public VerificaGiacenzeEntity retrieveLast() {
return localDataSource.makeSynchronousRetrieveLastRequest(false);
}
public boolean isAnotherVerificaGiacenzeInProgress(int maxMinutes) {
return localDataSource.isAnotherVerificaGiacenzeInProgress(maxMinutes);
}
public void clearPreviousSessions() {
var entities = retrieve();
for (var entity : entities) {
localDataSource.makeSynchronousDeleteRequest(entity);
}
}
public void insert(VerificaGiacenzeEntity entity) {
localDataSource.makeSynchronousInsertRequest(entity);
}
public void delete(VerificaGiacenzeEntity entity) {
localDataSource.makeSynchronousDeleteRequest(entity);
}
}

View File

@@ -0,0 +1,55 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new;
import android.os.Handler;
import java.util.concurrent.ExecutorService;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.VerificaGiacenzeRowLocalDataSource;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeRowMapper;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.pv.VerificaGiacenzeRowDTO;
public class VerificaGiacenzeRowRepository extends _BaseRepository<VerificaGiacenzeRowDTO, VerificaGiacenzeRowEntity, VerificaGiacenzeRowMapper, VerificaGiacenzeRowLocalDataSource, GiacenzaPvRESTConsumer> {
private final ExecutorService executorService;
private final Handler handler;
public VerificaGiacenzeRowRepository(VerificaGiacenzeRowLocalDataSource localDataSource,
GiacenzaPvRESTConsumer remoteDataSource,
VerificaGiacenzeRowMapper dataMapper,
Handler handler,
ExecutorService executorService) {
super(dataMapper, localDataSource, remoteDataSource);
this.handler = handler;
this.executorService = executorService;
}
public void insertSynchronized(VerificaGiacenzeRowEntity entity) {
localDataSource.makeSynchronousInsertRequest(entity);
}
public void insert(VerificaGiacenzeRowEntity entity, RunnableArgs<VerificaGiacenzeRowEntity> onComplete, RunnableArgs<Exception> onFailed) {
localDataSource.makeInsertRequest(entity, onComplete, onFailed);
}
public void updateSynchronized(VerificaGiacenzeRowEntity entity) {
localDataSource.makeSynchronousUpdateRequest(entity);
}
public void update(VerificaGiacenzeRowEntity entity, RunnableArgs<VerificaGiacenzeRowEntity> onComplete, RunnableArgs<Exception> onFailed) {
localDataSource.makeUpdateRequest(entity, onComplete, onFailed);
}
public void deleteSynchronized(VerificaGiacenzeRowEntity entity) {
localDataSource.makeSynchronousDeleteRequest(entity);
}
public void delete(VerificaGiacenzeRowEntity entity, Runnable onComplete, RunnableArgs<Exception> onFailed) {
localDataSource.makeDeleteRequest(entity, onComplete, onFailed);
}
}

View File

@@ -8,24 +8,24 @@ import javax.inject.Singleton;
import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.dao.InventarioDao; import it.integry.integrywmsnative.core.data_store.db.dao.InventarioDao;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
@Singleton @Singleton
public class InventarioLocalDataSource extends _BaseRoomDataSource<InventarioRoomDTO, InventarioDao> { public class InventarioLocalDataSource extends _BaseRoomDataSource<InventarioEntity, InventarioDao> {
@Inject @Inject
public InventarioLocalDataSource(ExecutorService executorService, InventarioDao entityDao) { public InventarioLocalDataSource(ExecutorService executorService, InventarioDao entityDao) {
super(executorService, entityDao, InventarioRoomDTO.TABLE_NAME); super(executorService, entityDao, InventarioEntity.TABLE_NAME);
} }
@Override @Override
public List<InventarioRoomDTO> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) { public List<InventarioEntity> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) {
return entityDao return entityDao
.selectAll(onlyToBeSync); .selectAll(onlyToBeSync);
} }
@Override @Override
public Flowable<List<InventarioRoomDTO>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) { public Flowable<List<InventarioEntity>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) {
return entityDao return entityDao
.selectAllFlowable(onlyToBeSync); .selectAllFlowable(onlyToBeSync);
} }

View File

@@ -0,0 +1,64 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneDao;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.data_store.db.wrappers.TrasferimentoPedaneWithRowsWrapper;
@Singleton
public class TrasferimentoPedaneLocalDataSource extends _BaseRoomDataSource<TrasferimentoPedaneEntity, TrasferimentoPedaneDao> {
@Inject
public TrasferimentoPedaneLocalDataSource(ExecutorService executorService, TrasferimentoPedaneDao entityDao) {
super(executorService, entityDao, TrasferimentoPedaneEntity.TABLE_NAME);
}
public Flowable<TrasferimentoPedaneEntity> makeRetrieveRequest(long id) {
var data = entityDao
.selectFlowable(id);
return data.map(x -> x.trasferimentoPedane);
}
public TrasferimentoPedaneEntity makeSynchronousRetrieveRequest(long id) {
var data = entityDao
.select(id);
return data.trasferimentoPedane;
}
@Override
public List<TrasferimentoPedaneEntity> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) {
var data = entityDao
.selectAll(onlyToBeSync);
return data.stream()
.map(x -> {
x.trasferimentoPedane.setTrasferimentoPedaneRowList(x.rowList);
return x.trasferimentoPedane;
})
.collect(Collectors.toList());
}
@Override
public Flowable<List<TrasferimentoPedaneEntity>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) {
Flowable<List<TrasferimentoPedaneWithRowsWrapper>> listFlowable = entityDao
.selectAllFlowable(onlyToBeSync);
return listFlowable.map(x ->
x.stream()
.map(y -> {
y.trasferimentoPedane.setTrasferimentoPedaneRowList(y.rowList);
return y.trasferimentoPedane;
})
.collect(Collectors.toList())
);
}
}

View File

@@ -0,0 +1,59 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.dao.TrasferimentoPedaneRowDao;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
@Singleton
public class TrasferimentoPedaneRowsLocalDataSource extends _BaseRoomDataSource<TrasferimentoPedaneRowEntity, TrasferimentoPedaneRowDao> {
@Inject
public TrasferimentoPedaneRowsLocalDataSource(ExecutorService executorService, TrasferimentoPedaneRowDao entityDao) {
super(executorService, entityDao, TrasferimentoPedaneRowEntity.TABLE_NAME);
}
@Override
public List<TrasferimentoPedaneRowEntity> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) {
var data = entityDao
.selectAll(onlyToBeSync);
return data.stream()
.collect(Collectors.toList());
}
@Override
public Flowable<List<TrasferimentoPedaneRowEntity>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) {
Flowable<List<TrasferimentoPedaneRowEntity>> listFlowable = entityDao
.selectAllFlowable(onlyToBeSync);
return listFlowable.map(x ->
x.stream()
.collect(Collectors.toList())
);
}
public List<TrasferimentoPedaneRowEntity> makeSynchronousRetrieveAllRequest(long parentId, boolean onlyToBeSync) {
var data = entityDao
.selectAll(parentId, onlyToBeSync);
return data.stream()
.collect(Collectors.toList());
}
public Flowable<List<TrasferimentoPedaneRowEntity>> makeSynchronousRetrieveAllLive(long parentId, boolean onlyToBeSync) {
Flowable<List<TrasferimentoPedaneRowEntity>> listFlowable = entityDao
.selectAllFlowable(parentId, onlyToBeSync);
return listFlowable.map(x ->
x.stream()
.collect(Collectors.toList())
);
}
}

View File

@@ -0,0 +1,63 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeDao;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.wrappers.VerificaGiacenzeWithRowsWrapper;
@Singleton
public class VerificaGiacenzeLocalDataSource extends _BaseRoomDataSource<VerificaGiacenzeEntity, VerificaGiacenzeDao> {
@Inject
public VerificaGiacenzeLocalDataSource(ExecutorService executorService, VerificaGiacenzeDao entityDao) {
super(executorService, entityDao, VerificaGiacenzeEntity.TABLE_NAME);
}
@Override
public List<VerificaGiacenzeEntity> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) {
var data = entityDao
.selectAll(onlyToBeSync);
return data.stream()
.map(x -> {
x.verificaGiacenze.setVerificaGiacenzeRowList(x.verificaGiacenzeRowList);
return x.verificaGiacenze;
})
.collect(Collectors.toList());
}
@Override
public Flowable<List<VerificaGiacenzeEntity>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) {
Flowable<List<VerificaGiacenzeWithRowsWrapper>> listFlowable = entityDao
.selectAllFlowable(onlyToBeSync);
return listFlowable.map(x ->
x.stream()
.map(y -> {
y.verificaGiacenze.setVerificaGiacenzeRowList(y.verificaGiacenzeRowList);
return y.verificaGiacenze;
})
.collect(Collectors.toList())
);
}
public VerificaGiacenzeEntity makeSynchronousRetrieveLastRequest(boolean onlyToBeSync) {
var lastEntity = entityDao
.selectLast(onlyToBeSync);
lastEntity.verificaGiacenze.setVerificaGiacenzeRowList(lastEntity.verificaGiacenzeRowList);
return lastEntity.verificaGiacenze;
}
public boolean isAnotherVerificaGiacenzeInProgress(int maxMinutes) {
return entityDao.isAnotherVerificaGiacenzeInProgress(maxMinutes);
}
}

View File

@@ -0,0 +1,34 @@
package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
import javax.inject.Singleton;
import io.reactivex.rxjava3.core.Flowable;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeRowDao;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
@Singleton
public class VerificaGiacenzeRowLocalDataSource extends _BaseRoomDataSource<VerificaGiacenzeRowEntity, VerificaGiacenzeRowDao> {
@Inject
public VerificaGiacenzeRowLocalDataSource(ExecutorService executorService, VerificaGiacenzeRowDao entityDao) {
super(executorService, entityDao, VerificaGiacenzeRowEntity.TABLE_NAME);
}
@Override
public List<VerificaGiacenzeRowEntity> makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) {
var data = entityDao
.selectAll(onlyToBeSync);
return data;
}
@Override
public Flowable<List<VerificaGiacenzeRowEntity>> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) {
return entityDao
.selectAllFlowable(onlyToBeSync);
}
}

View File

@@ -0,0 +1,25 @@
package it.integry.integrywmsnative.core.data_store.db.wrappers;
import androidx.room.DatabaseView;
import androidx.room.Embedded;
import androidx.room.Relation;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
@DatabaseView
public class TrasferimentoPedaneWithRowsWrapper {
@Embedded
public TrasferimentoPedaneEntity trasferimentoPedane;
@Relation(
parentColumn = BaseSyncDTO.Columns.ID,
entityColumn = TrasferimentoPedaneRowEntity.Columns.PARENT_ID
)
public List<TrasferimentoPedaneRowEntity> rowList;
}

View File

@@ -0,0 +1,24 @@
package it.integry.integrywmsnative.core.data_store.db.wrappers;
import androidx.room.DatabaseView;
import androidx.room.Embedded;
import androidx.room.Relation;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
@DatabaseView
public class VerificaGiacenzeWithRowsWrapper {
@Embedded
public VerificaGiacenzeEntity verificaGiacenze;
@Relation(
parentColumn = BaseSyncDTO.Columns.ID,
entityColumn = VerificaGiacenzeRowEntity.Columns.PARENT_ID
)
public List<VerificaGiacenzeRowEntity> verificaGiacenzeRowList;
}

View File

@@ -4,9 +4,6 @@ import androidx.databinding.BaseObservable;
import java.math.BigDecimal; import java.math.BigDecimal;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
public class BindableFloat extends BaseObservable { public class BindableFloat extends BaseObservable {
private Float value; private Float value;
@@ -15,10 +12,6 @@ public class BindableFloat extends BaseObservable {
} }
public BigDecimal getBigDecimal() { public BigDecimal getBigDecimal() {
int numberOfDigits = UtilityNumber.countNumberOfDecimalDigits(get());
if(numberOfDigits > CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS) numberOfDigits = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS;
return BigDecimal.valueOf(get()); return BigDecimal.valueOf(get());
} }

View File

@@ -11,6 +11,7 @@ import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.RadioButton; import android.widget.RadioButton;
import android.widget.RadioGroup; import android.widget.RadioGroup;
import android.widget.TextView;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.appcompat.widget.AppCompatCheckBox; import androidx.appcompat.widget.AppCompatCheckBox;
@@ -24,6 +25,11 @@ import androidx.databinding.BindingAdapter;
import androidx.databinding.BindingConversion; import androidx.databinding.BindingConversion;
import androidx.databinding.Observable; import androidx.databinding.Observable;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewTreeLifecycleOwner;
import com.google.android.material.datepicker.MaterialDatePicker; import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
@@ -33,14 +39,17 @@ import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.LocaleDecimalKeyListener;
import it.integry.integrywmsnative.core.helper.ContextHelper;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityNumber;
@@ -257,7 +266,7 @@ public class Converters {
BigDecimal value = null; BigDecimal value = null;
if (!UtilityString.isNullOrEmpty(s.toString())) if (!UtilityString.isNullOrEmpty(s.toString()))
value = new BigDecimal(s.toString()); value = UtilityNumber.parseBigDecimal(s.toString(), Locale.getDefault());
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -267,7 +276,7 @@ public class Converters {
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -288,7 +297,7 @@ public class Converters {
String newValueString = s.toString().trim(); String newValueString = s.toString().trim();
if (!UtilityString.isNullOrEmpty(newValueString)) if (!UtilityString.isNullOrEmpty(newValueString))
value = new BigDecimal(newValueString); value = UtilityNumber.parseBigDecimal(newValueString, Locale.getDefault());
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -297,7 +306,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -318,7 +327,7 @@ public class Converters {
String newValueString = s.toString().trim(); String newValueString = s.toString().trim();
if (!UtilityString.isNullOrEmpty(newValueString)) if (!UtilityString.isNullOrEmpty(newValueString))
value = new BigDecimal(newValueString); value = UtilityNumber.parseBigDecimal(newValueString, Locale.getDefault());
observableBigDecimal.set(value); observableBigDecimal.set(value);
} }
@@ -327,7 +336,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = observableBigDecimal.get(); BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -346,7 +355,8 @@ public class Converters {
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal value = null; BigDecimal value = null;
if (!UtilityString.isNullOrEmpty(s.toString())) if (!UtilityString.isNullOrEmpty(s.toString()))
value = new BigDecimal(s.toString()); value = UtilityNumber.parseBigDecimal(s.toString(), Locale.getDefault());
bindableBigDecimal.set(value); bindableBigDecimal.set(value);
} }
}; };
@@ -354,7 +364,7 @@ public class Converters {
view.addTextChangedListener(watcher); view.addTextChangedListener(watcher);
} }
BigDecimal newValue = bindableBigDecimal.get(); BigDecimal newValue = bindableBigDecimal.get();
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null; BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? UtilityNumber.parseBigDecimal(view.getText().toString(), Locale.getDefault()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue)); view.setText(UtilityNumber.decimalToString(newValue));
@@ -466,8 +476,9 @@ public class Converters {
} }
} }
@BindingAdapter(value = {"binding", "parentView", "warningOnOldDates"}, requireAll = false)
public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField<Date> observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) { @BindingAdapter(value = {"binding", "warningOnOldDates"}, requireAll = false)
public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField<Date> observableDate, boolean warningOnOldDates) {
Pair<ObservableField<Date>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); Pair<ObservableField<Date>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableDate) { if (pair == null || pair.first != observableDate) {
if (pair != null) { if (pair != null) {
@@ -502,15 +513,15 @@ public class Converters {
var calendar = UtilityDate.getCalendarInstance(); var calendar = UtilityDate.getCalendarInstance();
calendar.setTimeInMillis(timeInMillis); calendar.setTimeInMillis(timeInMillis);
if (parentFragment != null && warningOnOldDates && calendar.before(UtilityDate.getCalendarInstance())) { if (warningOnOldDates && calendar.before(UtilityDate.getCalendarInstance())) {
DialogSimpleMessageView DialogSimpleMessageView
.makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { .makeWarningDialog(view.getContext(), new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> {
view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
observableDate.set(calendar.getTime()); observableDate.set(calendar.getTime());
}, () -> { }, () -> {
}) })
.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); .show();
} else { } else {
view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
observableDate.set(calendar.getTime()); observableDate.set(calendar.getTime());
@@ -522,7 +533,7 @@ public class Converters {
} }
}); });
datePicker.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); datePicker.show(ContextHelper.getFragmentManagerFromContext(view.getContext()), "tag");
}; };
//Adding click-listener //Adding click-listener
@@ -536,8 +547,126 @@ public class Converters {
view.setText(UtilityDate.formatDate(newValue, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(newValue, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} }
@BindingAdapter(value = {"binding", "parentView", "warningOnOldDates"}, requireAll = false)
public static void bindEditTextDate(EditText view, final ObservableField<LocalDate> observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) { @BindingAdapter(value = {"binding", "warningOnOldDates"}, requireAll = false)
public static void bindTextInputEditTextDate(TextInputEditText view, final MutableLiveData<Date> liveDataDate, boolean warningOnOldDates) {
// Ottieni il LifecycleOwner dalla view
LifecycleOwner lifecycleOwner = ViewTreeLifecycleOwner.get(view);
if (lifecycleOwner == null) {
// Non è possibile osservare LiveData senza un LifecycleOwner
// Potresti loggare un errore o gestire questo caso come preferisci
Log.e("BindingAdapters", "LifecycleOwner not found for view " + view.getId());
return;
}
// Rimuovi eventuali TextWatcher o listener precedenti per evitare duplicazioni
// Questo è importante se il BindingAdapter viene chiamato più volte per la stessa view
Object oldTag = view.getTag(R.id.bound_observable_date_listener);
if (oldTag instanceof TextWatcherAdapter) {
view.removeTextChangedListener((TextWatcherAdapter) oldTag);
}
Object oldLiveDataTag = view.getTag(R.id.bound_observable_date_livedata);
if (oldLiveDataTag instanceof MutableLiveData) {
// Se c'era un observer precedente su un altro LiveData, rimuovilo
// Questo scenario è meno comune ma è bene gestirlo
Observer<Date> existingObserver = (Observer<Date>) view.getTag(R.id.bound_observable_date_observer);
if (existingObserver != null) {
((MutableLiveData<Date>) oldLiveDataTag).removeObserver(existingObserver);
}
}
// Imposta il listener per il click per aprire il DatePicker
RunnableArgs<View> onClick = v -> {
Calendar c = UtilityDate.getCalendarInstance();
if (liveDataDate.getValue() != null) {
c.setTime(liveDataDate.getValue());
}
MaterialDatePicker<Long> datePicker =
MaterialDatePicker.Builder.datePicker()
.setSelection(c.getTimeInMillis())
.build();
datePicker.addOnPositiveButtonClickListener(selection -> {
Calendar calendar = UtilityDate.getCalendarInstance();
calendar.setTimeInMillis(selection);
Date selectedDate = calendar.getTime();
if (warningOnOldDates && calendar.before(UtilityDate.getCalendarInstance())) {
DialogSimpleMessageView
.makeWarningDialog(view.getContext(), new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> {
liveDataDate.postValue(selectedDate);
}, () -> {
// Non fare nulla se l'utente annulla
})
.show();
} else {
liveDataDate.postValue(selectedDate);
}
});
datePicker.addOnNegativeButtonClickListener(dialog -> {
// Utente ha annullato, potresti voler resettare o non fare nulla
});
datePicker.addOnCancelListener(dialog -> {
// Utente ha cancellato (es. premendo back), potresti voler resettare o non fare nulla
});
datePicker.show(ContextHelper.getFragmentManagerFromContext(view.getContext()), "MaterialDatePicker");
};
view.setOnClickListener(onClick::run);
if (view.getParent() != null && view.getParent().getParent() != null && view.getParent().getParent() instanceof TextInputLayout) {
((FrameLayout) view.getParent()).setOnClickListener(onClick::run);
((TextInputLayout) view.getParent().getParent()).setOnClickListener(onClick::run);
}
// Osserva il LiveData per aggiornare la view quando il valore cambia
Observer<Date> dateObserver = date -> {
String formattedDate = UtilityDate.formatDate(date, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN);
if (!view.getText().toString().equals(formattedDate)) {
view.setText(formattedDate);
}
};
// Rimuovi l'observer precedente se stiamo ri-bindando allo stesso LiveData
Observer<Date> existingObserver = (Observer<Date>) view.getTag(R.id.bound_observable_date_observer);
if (view.getTag(R.id.bound_observable_date_livedata) == liveDataDate && existingObserver != null) {
liveDataDate.removeObserver(existingObserver);
}
liveDataDate.observe(lifecycleOwner, dateObserver);
// Salva il LiveData e l'observer nel tag per poterli rimuovere in futuro se necessario
view.setTag(R.id.bound_observable_date_livedata, liveDataDate);
view.setTag(R.id.bound_observable_date_observer, dateObserver);
// Imposta il valore iniziale
Date initialDate = liveDataDate.getValue();
view.setText(UtilityDate.formatDate(initialDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
// Aggiungi un TextWatcher fittizio se necessario per coerenza con altri binding,
// ma in questo caso il LiveData guida l'aggiornamento.
// Se non hai bisogno di reagire ai cambiamenti di testo *dalla view al LiveData*
// (perché il DatePicker lo fa già), questo TextWatcher potrebbe non essere strettamente necessario.
// Tuttavia, per mantenere la struttura simile agli altri, lo includiamo.
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Normalmente qui si aggiornerebbe il LiveData,
// ma il DatePicker gestisce l'aggiornamento.
// Potresti aggiungere logica qui se l'utente può modificare il testo direttamente
// e vuoi che ciò si rifletta nel LiveData (richiederebbe parsing della data).
}
};
view.setTag(R.id.bound_observable_date_listener, watcher); // Salva il watcher nel tag
// view.addTextChangedListener(watcher); // Aggiungi solo se necessario
}
@BindingAdapter(value = {"binding", "warningOnOldDates"}, requireAll = false)
public static void bindEditTextDate(EditText view, final ObservableField<LocalDate> observableDate, boolean warningOnOldDates) {
Pair<ObservableField<LocalDate>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); Pair<ObservableField<LocalDate>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableDate) { if (pair == null || pair.first != observableDate) {
if (pair != null) { if (pair != null) {
@@ -568,15 +697,15 @@ public class Converters {
var nowTime = UtilityDate.millisTimeToLocalDate(selectedTimeInMillis, null); var nowTime = UtilityDate.millisTimeToLocalDate(selectedTimeInMillis, null);
if (parentFragment != null && warningOnOldDates && nowTime.isBefore(UtilityDate.getNow())) { if (warningOnOldDates && nowTime.isBefore(UtilityDate.getNow())) {
DialogSimpleMessageView DialogSimpleMessageView
.makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { .makeWarningDialog(view.getContext(), new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> {
view.setText(UtilityDate.formatDate(nowTime, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(nowTime, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
observableDate.set(nowTime); observableDate.set(nowTime);
}, () -> { }, () -> {
}) })
.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); .show();
} else { } else {
view.setText(UtilityDate.formatDate(nowTime, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(nowTime, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
observableDate.set(nowTime); observableDate.set(nowTime);
@@ -588,7 +717,7 @@ public class Converters {
} }
}); });
datePicker.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); datePicker.show(ContextHelper.getFragmentManagerFromContext(view.getContext()), "tag");
}; };
//Adding click-listener //Adding click-listener
@@ -602,6 +731,67 @@ public class Converters {
view.setText(UtilityDate.formatDate(newValue, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); view.setText(UtilityDate.formatDate(newValue, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} }
@BindingAdapter("binding")
public static void bindAutoCompleteTextView(AutoCompleteTextView view, final MutableLiveData<String> liveDataString) {
LifecycleOwner lifecycleOwner = ViewTreeLifecycleOwner.get(view);
if (lifecycleOwner == null) {
Log.e("BindingAdapters", "LifecycleOwner not found for view " + view.getId());
return;
}
// Rimuovi TextWatcher precedente
Object oldWatcherTag = view.getTag(R.id.bound_observable_actv_watcher);
if (oldWatcherTag instanceof TextWatcherAdapter) {
view.removeTextChangedListener((TextWatcherAdapter) oldWatcherTag);
}
// Rimuovi Observer precedente se il LiveData è cambiato
Object oldLiveDataTag = view.getTag(R.id.bound_observable_actv_livedata);
if (oldLiveDataTag instanceof MutableLiveData && oldLiveDataTag != liveDataString) {
Observer<String> existingObserver = (Observer<String>) view.getTag(R.id.bound_observable_actv_observer);
if (existingObserver != null) {
((MutableLiveData<String>) oldLiveDataTag).removeObserver(existingObserver);
}
}
// TextWatcher per aggiornare il LiveData quando il testo cambia nella View
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (liveDataString.getValue() == null || !liveDataString.getValue().equals(s.toString())) {
liveDataString.setValue(s.toString());
}
}
};
view.addTextChangedListener(watcher);
view.setTag(R.id.bound_observable_actv_watcher, watcher);
// Observer per aggiornare la View quando il LiveData cambia
Observer<String> observer = newValue -> {
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue, false); // Il 'false' evita di far scattare il dropdown
}
};
// Rimuovi l'observer precedente se stiamo ri-bindando allo stesso LiveData
Observer<String> existingObserver = (Observer<String>) view.getTag(R.id.bound_observable_actv_observer);
if (view.getTag(R.id.bound_observable_actv_livedata) == liveDataString && existingObserver != null) {
liveDataString.removeObserver(existingObserver);
}
liveDataString.observe(lifecycleOwner, observer);
// Salva il LiveData e l'observer nel tag
view.setTag(R.id.bound_observable_actv_livedata, liveDataString);
view.setTag(R.id.bound_observable_actv_observer, observer);
// Imposta il valore iniziale
String initialValue = liveDataString.getValue();
if (initialValue != null && !view.getText().toString().equals(initialValue)) {
view.setText(initialValue);
}
}
@BindingAdapter("binding") @BindingAdapter("binding")
public static void bindAutoCompleteTextView(AutoCompleteTextView view, final BindableString bindableString) { public static void bindAutoCompleteTextView(AutoCompleteTextView view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
@@ -813,6 +1003,45 @@ public class Converters {
} }
@BindingAdapter("visibility")
public static void bindViewVisibility(View view, final LiveData<Boolean> liveDataBoolean) {
if (liveDataBoolean == null) {
return;
}
LifecycleOwner lifecycleOwner = ViewTreeLifecycleOwner.get(view);
if (lifecycleOwner == null) {
Log.e("Converters", "Cannot find LifecycleOwner for view " + view);
return;
}
Observer<Boolean> observer = isVisible -> {
if (isVisible != null) {
view.setVisibility(isVisible ? View.VISIBLE : View.GONE);
}
};
// Rimuovi l'observer precedente se il LiveData è cambiato
Object oldTag = view.getTag(R.id.bound_observable_visibility);
if (oldTag instanceof Pair) {
Pair<LiveData<Boolean>, Observer<Boolean>> pair = (Pair<LiveData<Boolean>, Observer<Boolean>>) oldTag;
if (pair.first != liveDataBoolean) {
pair.first.removeObserver(pair.second);
}
}
liveDataBoolean.observe(lifecycleOwner, observer);
view.setTag(R.id.bound_observable_visibility, new Pair<>(liveDataBoolean, observer));
// Imposta il valore iniziale
Boolean initialValue = liveDataBoolean.getValue();
if (initialValue != null) {
view.setVisibility(initialValue ? View.VISIBLE : View.GONE);
} else {
view.setVisibility(View.GONE);
}
}
@BindingAdapter("visibility") @BindingAdapter("visibility")
public static void bindViewVisibility(View view, boolean bool) { public static void bindViewVisibility(View view, boolean bool) {
view.setVisibility(bool ? View.VISIBLE : View.GONE); view.setVisibility(bool ? View.VISIBLE : View.GONE);
@@ -820,11 +1049,11 @@ public class Converters {
@BindingAdapter("visibilityWhenNotNull") @BindingAdapter("visibilityWhenNotNull")
public static void bindViewVisibilityWhenNotNull(View view, ObservableField<?> bindableObject) { public static void bindViewVisibilityObservableFieldWhenNotNull(View view, ObservableField<?> bindableObject) {
if(bindableObject == null) return; if(bindableObject == null) return;
if (view.getTag(R.id.bound_observable) != bindableObject) { if (view.getTag(R.id.bound_observable_visibility) != bindableObject) {
view.setTag(R.id.bound_observable, bindableObject); view.setTag(R.id.bound_observable_visibility, bindableObject);
} }
bindableObject.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { bindableObject.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@@ -838,6 +1067,36 @@ public class Converters {
} }
@BindingAdapter("visibilityWhenNotNull")
public static void bindViewVisibilityLiveDataWhenNotNull(View view, LiveData<?> liveData) {
// Se il LiveData è null, nascondi la view e esci
if (liveData == null) {
view.setVisibility(View.GONE);
return;
}
// Ottieni il LifecycleOwner dalla view
LifecycleOwner lifecycleOwner = ViewTreeLifecycleOwner.get(view);
if (lifecycleOwner == null) return;
// Rimuovi eventuali observer precedenti
Observer<Object> oldObserver = (Observer<Object>) view.getTag(R.id.bound_observable_visibility);
if (oldObserver != null) {
liveData.removeObserver(oldObserver);
}
// Crea e registra il nuovo observer
Observer<Object> newObserver = value ->
view.setVisibility(value == null ? View.GONE : View.VISIBLE);
liveData.observe(lifecycleOwner, newObserver);
view.setTag(R.id.bound_observable_visibility, newObserver);
// Imposta lo stato iniziale
view.setVisibility(liveData.getValue() == null ? View.GONE : View.VISIBLE);
}
@BindingAdapter("visibilityWhenNotNull") @BindingAdapter("visibilityWhenNotNull")
public static void bindViewVisibilityWhenNotNull(View view, Object genericObject) { public static void bindViewVisibilityWhenNotNull(View view, Object genericObject) {
view.setVisibility(genericObject == null ? View.GONE : View.VISIBLE); view.setVisibility(genericObject == null ? View.GONE : View.VISIBLE);
@@ -845,7 +1104,7 @@ public class Converters {
@BindingAdapter("visibilityWhenNull") @BindingAdapter("visibilityWhenNull")
public static void bindViewVisibilityWhenNull(View view, ObservableField<?> bindableObject) { public static void bindViewVisibilityObservableFieldWhenNull(View view, ObservableField<?> bindableObject) {
if (view.getTag(R.id.bound_observable_visibility) != bindableObject) { if (view.getTag(R.id.bound_observable_visibility) != bindableObject) {
view.setTag(R.id.bound_observable_visibility, bindableObject); view.setTag(R.id.bound_observable_visibility, bindableObject);
@@ -864,6 +1123,36 @@ public class Converters {
} }
@BindingAdapter("visibilityWhenNull")
public static void bindViewVisibilityLiveDataWhenNull(View view, LiveData<?> liveData) {
// Se il LiveData è null, nascondi la view e esci
if (liveData == null) {
view.setVisibility(View.VISIBLE);
return;
}
// Ottieni il LifecycleOwner dalla view
LifecycleOwner lifecycleOwner = ViewTreeLifecycleOwner.get(view);
if (lifecycleOwner == null) return;
// Rimuovi eventuali observer precedenti
Observer<Object> oldObserver = (Observer<Object>) view.getTag(R.id.bound_observable_visibility);
if (oldObserver != null) {
liveData.removeObserver(oldObserver);
}
// Crea e registra il nuovo observer
Observer<Object> newObserver = value ->
view.setVisibility(value == null ? View.VISIBLE : View.GONE);
liveData.observe(lifecycleOwner, newObserver);
view.setTag(R.id.bound_observable_visibility, newObserver);
// Imposta lo stato iniziale
view.setVisibility(liveData.getValue() == null ? View.VISIBLE : View.GONE);
}
@BindingAdapter({"reverse_visibility"}) @BindingAdapter({"reverse_visibility"})
public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) { public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) {
if (view.getTag(R.id.bound_reverse_visibility) != bindableBoolean) { if (view.getTag(R.id.bound_reverse_visibility) != bindableBoolean) {
@@ -910,4 +1199,64 @@ public class Converters {
view.setLayoutParams(layoutParams); view.setLayoutParams(layoutParams);
} }
} /**
* BindingAdapter per bindare una LocalDate diretta su una TextView con un formato specificato.
* Esempio di utilizzo in XML:
* app:localDateText="@{myLocalDate}" app:dateFormat="@{@string/my_date_format}"
*/
@BindingAdapter(value = {"localDateText", "dateFormat"}, requireAll = false)
public static void bindLocalDateText(TextView view, LocalDate date, String dateFormat) {
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
@BindingAdapter(value = {"localDateTimeText", "dateFormat"}, requireAll = false)
public static void bindLocalDateText(TextView view, LocalDateTime date, String dateFormat) {
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy hh:mm";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
/**
* BindingAdapter per bindare una ObservableField<LocalDate> su una TextView con un formato specificato.
* Esempio di utilizzo in XML:
* app:localDateObservableText="@{myObservableLocalDate}" app:dateFormat="@{@string/my_date_format}"
*/
@BindingAdapter(value = {"localDateObservableText", "dateFormat"}, requireAll = false)
public static void bindObservableLocalDateText(TextView view, ObservableField<LocalDate> observableDate, String dateFormat) {
if (observableDate == null) {
view.setText("");
return;
}
LocalDate date = observableDate.get();
if (date == null) {
view.setText("");
return;
}
String pattern = dateFormat != null ? dateFormat : "dd/MM/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
view.setText(date.format(formatter));
}
/**
* BindingAdapter che applica automaticamente il KeyListener localizzato
* ai campi con inputType numberDecimal, permettendo l'uso della virgola
* come separatore decimale in base al locale del dispositivo.
*/
@BindingAdapter("useLocaleDecimalInput")
public static void setLocaleDecimalInput(EditText view, boolean useLocaleInput) {
if (useLocaleInput) {
view.setKeyListener(LocaleDecimalKeyListener.getInstance());
}
}
}

View File

@@ -0,0 +1,119 @@
package it.integry.integrywmsnative.core.di;
import androidx.lifecycle.MutableLiveData;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;
public class MutableListLiveData<T> extends MutableLiveData<List<T>> {
public MutableListLiveData() {
super(new ArrayList<>());
}
public MutableListLiveData(List<T> initialValue) {
super(initialValue);
}
public void add(T item, boolean immediateSet) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
newList.add(item);
if(immediateSet)
setValue(newList);
else postValue(newList);
}
public void add(T item) {
add(item, false);
}
public void add(int index, T item, boolean immediateSet) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
newList.add(index, item);
if(immediateSet)
setValue(newList);
else postValue(newList);
}
public void add(int index, T item) {
add(index, item, false);
}
public void remove(T item, boolean immediateSet) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
newList.remove(item);
if(immediateSet)
setValue(newList);
else postValue(newList);
}
public void remove(T item) {
remove(item, false);
}
public void update(Consumer<List<T>> updater) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
updater.accept(newList);
postValue(newList);
}
public void clear() {
List<T> newList = new ArrayList<>();
postValue(newList);
}
public void addAll(List<T> items) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
newList.addAll(items);
postValue(newList);
}
public MutableListLiveData<T> clone() {
MutableListLiveData<T> clone = new MutableListLiveData<>();
List<T> current = getValue();
if (current != null) {
clone.postValue(new ArrayList<>(current));
}
return clone;
}
public boolean isEmpty() {
List<T> current = getValue();
return current == null || current.isEmpty();
}
public T get(int index) {
List<T> current = getValue();
if (current != null && index >= 0 && index < current.size()) {
return current.get(index);
}
return null;
}
public int size() {
List<T> current = getValue();
return current != null ? current.size() : 0;
}
public java.util.stream.Stream<T> stream() {
List<T> current = getValue();
return current != null ? current.stream() : java.util.stream.Stream.empty();
}
public void removeAll(Collection<T> items) {
List<T> current = getValue();
List<T> newList = new ArrayList<>(current);
newList.removeAll(items);
postValue(newList);
}
}

View File

@@ -0,0 +1,84 @@
package it.integry.integrywmsnative.core.di;
import android.os.Handler;
import android.os.Looper;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* Classe che gestisce la serializzazione e deserializzazione di MutableListLiveData con Gson
*
* @param <T> tipo degli elementi nella lista
*/
public class MutableListLiveDataTypeAdapter<T> implements JsonSerializer<MutableListLiveData<T>>, JsonDeserializer<MutableListLiveData<T>> {
private final Handler handler = new Handler(Looper.getMainLooper());
/**
* Serializza un oggetto MutableListLiveData in un JsonElement
*/
@Override
public JsonElement serialize(MutableListLiveData<T> src, Type typeOfSrc, JsonSerializationContext context) {
// Ottiene la lista interna da MutableListLiveData e la serializza
List<T> list = src.getValue();
return context.serialize(list);
}
/**
* Deserializza un JsonElement in un oggetto MutableListLiveData
*/
@Override
public MutableListLiveData<T> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Determina il tipo degli elementi nella lista
Type listType = getListType(typeOfT);
// Deserializza il JsonElement in una lista
List<T> list = context.deserialize(json, listType);
if (list == null) {
list = new ArrayList<>();
}
// Crea una nuova istanza di MutableListLiveData e aggiunge tutti gli elementi
MutableListLiveData<T> result = new MutableListLiveData<>(list);
return result;
}
/**
* Estrae il tipo della lista da un tipo parametrizzato di MutableListLiveData<T>
*/
private Type getListType(Type mutableListLiveDataType) {
if (mutableListLiveDataType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) mutableListLiveDataType;
Type[] typeArguments = parameterizedType.getActualTypeArguments();
if (typeArguments.length > 0) {
// Crea un tipo di List<T> usando il parametro di tipo T
return TypeToken.getParameterized(List.class, typeArguments[0]).getType();
}
}
// Fallback per List<Object> se non riusciamo a determinare il tipo
return TypeToken.getParameterized(List.class, Object.class).getType();
}
/**
* Crea un'istanza del TypeAdapter per MutableListLiveData<T>
*
* @param elementType il tipo T degli elementi nella lista
* @return un'istanza del TypeAdapter
*/
public static <T> MutableListLiveDataTypeAdapter<T> create(Type elementType) {
return new MutableListLiveDataTypeAdapter<>();
}
}

View File

@@ -0,0 +1,87 @@
package it.integry.integrywmsnative.core.di;
import android.os.Handler;
import android.os.Looper;
import androidx.databinding.ObservableArrayList;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
/**
* Classe che gestisce la serializzazione e deserializzazione di MutableListLiveData con Gson
*
* @param <T> tipo degli elementi nella lista
*/
public class ObservableArrayListDataTypeAdapter<T> implements JsonSerializer<ObservableArrayList<T>>, JsonDeserializer<ObservableArrayList<T>> {
private final Handler handler = new Handler(Looper.getMainLooper());
/**
* Serializza un oggetto MutableListLiveData in un JsonElement
*/
@Override
public JsonElement serialize(ObservableArrayList<T> src, Type typeOfSrc, JsonSerializationContext context) {
// Ottiene la lista interna da MutableListLiveData e la serializza
ArrayList<T> list = new ArrayList<>(src);
return context.serialize(list);
}
/**
* Deserializza un JsonElement in un oggetto MutableListLiveData
*/
@Override
public ObservableArrayList<T> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Determina il tipo degli elementi nella lista
Type listType = getListType(typeOfT);
// Deserializza il JsonElement in una lista
List<T> list = context.deserialize(json, listType);
if (list == null) {
list = new ArrayList<>();
}
// Crea una nuova istanza di MutableListLiveData e aggiunge tutti gli elementi
ObservableArrayList<T> result = new ObservableArrayList<>();
result.addAll(list);
return result;
}
/**
* Estrae il tipo della lista da un tipo parametrizzato di MutableListLiveData<T>
*/
private Type getListType(Type mutableListLiveDataType) {
if (mutableListLiveDataType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) mutableListLiveDataType;
Type[] typeArguments = parameterizedType.getActualTypeArguments();
if (typeArguments.length > 0) {
// Crea un tipo di List<T> usando il parametro di tipo T
return TypeToken.getParameterized(List.class, typeArguments[0]).getType();
}
}
// Fallback per List<Object> se non riusciamo a determinare il tipo
return TypeToken.getParameterized(List.class, Object.class).getType();
}
/**
* Crea un'istanza del TypeAdapter per MutableListLiveData<T>
*
* @param elementType il tipo T degli elementi nella lista
* @return un'istanza del TypeAdapter
*/
public static <T> ObservableArrayListDataTypeAdapter<T> create(Type elementType) {
return new ObservableArrayListDataTypeAdapter<>();
}
}

View File

@@ -0,0 +1,41 @@
package it.integry.integrywmsnative.core.diff;
import androidx.recyclerview.widget.DiffUtil;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColr;
public class MtbColrDiffCallback extends DiffUtil.Callback {
private final List<MtbColr> oldList;
private final List<MtbColr> newList;
public MtbColrDiffCallback(List<MtbColr> oldList, List<MtbColr> newList) {
this.oldList = oldList;
this.newList = newList;
}
@Override
public int getOldListSize() {
return oldList.size();
}
@Override
public int getNewListSize() {
return newList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
MtbColr oldItem = oldList.get(oldItemPosition);
MtbColr newItem = newList.get(newItemPosition);
return oldItem.getKey().equals(newItem.getKey()); // Placeholder, idealmente confrontare ID univoci
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
// Assicurarsi che MtbColr.equals() confronti i contenuti rilevanti per la UI
return oldList.get(oldItemPosition).equals(newList.get(newItemPosition));
}
}

View File

@@ -66,9 +66,6 @@ public class Ean128Service {
switch (aiModel.AI) { switch (aiModel.AI) {
case SSCC -> { case SSCC -> {
if (aiValue.length() > 0 && (aiValue.charAt(0) == '0' || aiValue.charAt(0) == '9')) {
aiValue = new StringBuilder(aiValue.substring(1));
}
model.Sscc = aiValue.toString(); model.Sscc = aiValue.toString();
} }
case GTIN -> { case GTIN -> {

View File

@@ -0,0 +1,9 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.core.rest.model.giacenza.GetColloInGiacResponseDTO;
public class AnomaliaUlException extends RuntimeException {
public AnomaliaUlException(GetColloInGiacResponseDTO colloInGiac) {
super(String.format("%s: %s", colloInGiac.getDescrizioneLivelloAnomalia(), colloInGiac.getDescrizioneAnomalia()));
}
}

View File

@@ -0,0 +1,8 @@
package it.integry.integrywmsnative.core.exception;
public class InvalidCodMdepBarcodeException extends RuntimeException {
public InvalidCodMdepBarcodeException(String message) {
super("Il deposito scansionato non è valido: " + message);
}
}

View File

@@ -4,7 +4,13 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class InvalidCodMdepException extends Exception { public final class InvalidCodMdepException extends Exception {
public InvalidCodMdepException() { public InvalidCodMdepException() {
super(UtilityResources.getString(R.string.invalid_codmdep)); super(UtilityResources.getString(R.string.invalid_codmdep_error_message));
} }
public InvalidCodMdepException(String codMdep) {
super(UtilityResources.getString(R.string.invalid_codmdep_error_message) + "(" + codMdep + ")");
}
} }

View File

@@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.exception;
public final class InvalidPositionException extends Exception {
public InvalidPositionException() {
super("La posizione scansionata non è valida");
}
public InvalidPositionException(String message) {
super("La posizione scansionata non è valida: " + message);
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.expansion; package it.integry.integrywmsnative.core.expansion;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent; import android.view.KeyEvent;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -23,6 +24,11 @@ public class BaseActivity extends AppCompatActivity {
@Inject @Inject
public ExecutorService executorService; public ExecutorService executorService;
@Inject
public Handler handler;
private Integer barcodeCallbackId;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -33,41 +39,45 @@ public class BaseActivity extends AppCompatActivity {
.inject(this); .inject(this);
} }
protected void initBarcodeManager(int barcodeCallbackId) {
this.barcodeCallbackId = barcodeCallbackId;
}
public void onLoadingStarted() { public void onLoadingStarted() {
BarcodeManager.disable(); if (barcodeCallbackId != null)
BarcodeManager.disable(barcodeCallbackId);
else
BarcodeManager.disableLastCallback();
this.openProgress(); this.openProgress();
} }
public void onLoadingEnded() { public void onLoadingEnded() {
if (barcodeCallbackId != null)
BarcodeManager.enable(barcodeCallbackId);
else
BarcodeManager.enableLastCallback();
this.closeProgress(); this.closeProgress();
} }
public void onError(Exception ex) { public void onError(Exception ex) {
this.runOnUiThread(() -> { handler.post(() -> {
this.closeProgress(); this.onLoadingEnded();
UtilityExceptions.defaultException(this, ex); UtilityExceptions.defaultException(this, ex);
}); });
} }
private void openProgress() { private void openProgress() {
BarcodeManager.disable(); this.mCurrentProgress.show(getSupportFragmentManager());
// executorService.execute(() -> {
this.mCurrentProgress.show(getSupportFragmentManager());
// });
} }
private void closeProgress() { private void closeProgress() {
BarcodeManager.enable(); mCurrentProgress.dismiss();
// executorService.execute(() -> {
mCurrentProgress.dismiss();
// });
} }
@Override @Override
public boolean dispatchKeyEvent(KeyEvent event) { public boolean dispatchKeyEvent(KeyEvent event) {
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { if (BarcodeManager.isLastCallbackEnabled() && BarcodeManager.isKeyboardEmulator()) {
if (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE && !isControlKey(event)) { if (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE && !isControlKey(event)) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event); return BarcodeManager.onKeyDown(event.getKeyCode(), event);
} }

View File

@@ -1,39 +0,0 @@
package it.integry.integrywmsnative.core.expansion;
import android.app.Dialog;
import android.content.Context;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
public class BaseDialog extends Dialog {
private boolean mBarcodeListener = false;
public BaseDialog(@NonNull Context context) {
super(context);
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) {
setOnKeyListener((dialog, keyCode, event) -> {
if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event);
}
return false;
});
}
}
private boolean isControlKey(KeyEvent keyEvent) {
int keyCode = keyEvent.getKeyCode();
return (
keyCode == KeyEvent.KEYCODE_BACK ||
keyCode == KeyEvent.KEYCODE_SHIFT_LEFT ||
keyCode == KeyEvent.KEYCODE_DEL
);
}
public void setBarcodeListener(boolean listen) {
this.mBarcodeListener = listen;
}
}

View File

@@ -1,10 +1,11 @@
package it.integry.integrywmsnative.core.expansion; package it.integry.integrywmsnative.core.expansion;
import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -30,10 +31,15 @@ public abstract class BaseDialogFragment extends DialogFragment implements Dialo
@Inject @Inject
public ExecutorService executorService; public ExecutorService executorService;
@Inject
public Handler handler;
private boolean mBarcodeListener = false; private boolean mBarcodeListener = false;
private boolean cancelable = true; private boolean cancelable = true;
private Integer barcodeCallbackId;
@Override @Override
public boolean isCancelable() { public boolean isCancelable() {
@@ -47,6 +53,16 @@ public abstract class BaseDialogFragment extends DialogFragment implements Dialo
this.cancelable = cancelable; this.cancelable = cancelable;
} }
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
return super.onCreateDialog(savedInstanceState);
}
protected void initBarcodeManager(int barcodeCallbackId) {
this.barcodeCallbackId = barcodeCallbackId;
}
@Override @Override
public void show(FragmentManager manager, String tag) { public void show(FragmentManager manager, String tag) {
try { try {
@@ -58,42 +74,36 @@ public abstract class BaseDialogFragment extends DialogFragment implements Dialo
} }
} }
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.initialize();
}
public void onLoadingStarted() { public void onLoadingStarted() {
BarcodeManager.disable(); if (barcodeCallbackId != null)
BarcodeManager.disable(barcodeCallbackId);
else
BarcodeManager.disableLastCallback();
this.openProgress(); this.openProgress();
} }
public void onLoadingEnded() { public void onLoadingEnded() {
if (barcodeCallbackId != null)
BarcodeManager.enable(barcodeCallbackId);
else
BarcodeManager.enableLastCallback();
this.closeProgress(); this.closeProgress();
BarcodeManager.enable();
} }
private void openProgress() { private void openProgress() {
BarcodeManager.disable(); this.mCurrentProgress.show(requireActivity().getSupportFragmentManager());
// executorService.execute(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager());
// });
} }
private void closeProgress() { private void closeProgress() {
BarcodeManager.enable(); mCurrentProgress.dismiss();
// executorService.execute(() -> {
mCurrentProgress.dismiss();
// });
} }
public void onError(Exception ex) { public void onError(Exception ex) {
this.onLoadingEnded(); handler.post(() -> {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
UtilityExceptions.defaultException(requireActivity(), ex); UtilityExceptions.defaultException(requireActivity(), ex);
}); });
} }
@@ -130,7 +140,7 @@ public abstract class BaseDialogFragment extends DialogFragment implements Dialo
.create() .create()
.inject(this); .inject(this);
if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator() && getDialog() != null) { if (BarcodeManager.isLastCallbackEnabled() && BarcodeManager.isKeyboardEmulator() && getDialog() != null) {
getDialog().setOnKeyListener((dialog, keyCode, event) -> { getDialog().setOnKeyListener((dialog, keyCode, event) -> {
if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event); return BarcodeManager.onKeyDown(event.getKeyCode(), event);

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.expansion; package it.integry.integrywmsnative.core.expansion;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -30,10 +31,15 @@ public abstract class BaseFragment extends Fragment {
@Inject @Inject
public ExecutorService executorService; public ExecutorService executorService;
@Inject
public Handler handler;
protected ElevatedToolbar mToolbar; protected ElevatedToolbar mToolbar;
protected final List<Runnable> mOnPreDestroyList = new ArrayList<>(); protected final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private Integer barcodeCallbackId;
public void setScrollToolbar(ElevatedToolbar toolbar) { public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar; mToolbar = toolbar;
@@ -56,33 +62,40 @@ public abstract class BaseFragment extends Fragment {
return view; return view;
} }
protected void initBarcodeManager(int barcodeCallbackId) {
this.barcodeCallbackId = barcodeCallbackId;
}
public void onLoadingStarted() { public void onLoadingStarted() {
if (barcodeCallbackId != null)
BarcodeManager.disable(barcodeCallbackId);
else
BarcodeManager.disableLastCallback();
this.openProgress(); this.openProgress();
} }
public void onLoadingEnded() { public void onLoadingEnded() {
if (barcodeCallbackId != null)
BarcodeManager.enable(barcodeCallbackId);
else
BarcodeManager.enableLastCallback();
this.closeProgress(); this.closeProgress();
} }
private void openProgress() { private void openProgress() {
BarcodeManager.disable();
// executorService.execute(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager()); this.mCurrentProgress.show(requireActivity().getSupportFragmentManager());
// });
} }
private void closeProgress() { private void closeProgress() {
BarcodeManager.enable();
// executorService.execute(() -> {
mCurrentProgress.dismiss(); mCurrentProgress.dismiss();
// });
} }
public void onError(Exception ex) { public void onError(Exception ex) {
requireActivity().runOnUiThread(() -> { handler.post(() -> {
this.closeProgress(); this.onLoadingEnded();
UtilityExceptions.defaultException(getActivity(), ex); UtilityExceptions.defaultException(getActivity(), ex);
BarcodeManager.enable();
}); });
} }
@@ -102,7 +115,7 @@ public abstract class BaseFragment extends Fragment {
protected void popMe() { protected void popMe() {
if (requireActivity() instanceof IPoppableActivity) { if (requireActivity() instanceof IPoppableActivity) {
requireActivity().runOnUiThread(() -> { handler.post(() -> {
((IPoppableActivity) requireActivity()).pop(); ((IPoppableActivity) requireActivity()).pop();
}); });
} else { } else {

View File

@@ -0,0 +1,129 @@
package it.integry.integrywmsnative.core.expansion;
import android.content.Context;
import android.os.Handler;
import android.view.KeyEvent;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
public class BaseMaterialAlertDialogBuilder extends MaterialAlertDialogBuilder {
@Inject
public DialogProgressView mCurrentProgress;
@Inject
public ExecutorService executorService;
@Inject
public Handler handler;
private boolean mBarcodeListener = false;
private Integer barcodeCallbackId;
private Context context;
private AlertDialog alertDialog;
public BaseMaterialAlertDialogBuilder(@NonNull Context context) {
super(context);
this.context = context;
MainApplication.appComponent
.baseMaterialAlertDialogComponent()
.create()
.inject(this);
if (BarcodeManager.isLastCallbackEnabled() && BarcodeManager.isKeyboardEmulator()) {
setOnKeyListener((dialog, keyCode, event) -> {
if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) {
return BarcodeManager.onKeyDown(event.getKeyCode(), event);
}
return false;
});
}
}
@NonNull
@Override
public AlertDialog create() {
alertDialog = super.create();
return alertDialog;
}
protected void dismiss() {
alertDialog.dismiss();
}
protected void initBarcodeManager(int barcodeCallbackId) {
this.barcodeCallbackId = barcodeCallbackId;
}
public void onLoadingStarted() {
if (barcodeCallbackId != null)
BarcodeManager.disable(barcodeCallbackId);
else
BarcodeManager.disableLastCallback();
this.openProgress();
}
public void onLoadingEnded() {
if (barcodeCallbackId != null)
BarcodeManager.enable(barcodeCallbackId);
else
BarcodeManager.enableLastCallback();
this.closeProgress();
}
private void openProgress() {
if (context instanceof AppCompatActivity) {
FragmentManager fragmentManager = ((AppCompatActivity) context).getSupportFragmentManager();
// ora puoi usarlo
this.mCurrentProgress.show(fragmentManager);
} else {
UtilityLogger.warn("Context is not an instance of AppCompatActivity, cannot show progress dialog.");
}
}
private void closeProgress() {
mCurrentProgress.dismiss();
}
public void onError(Exception ex) {
handler.post(() -> {
this.onLoadingEnded();
UtilityExceptions.defaultException(getContext(), ex);
});
}
private boolean isControlKey(KeyEvent keyEvent) {
int keyCode = keyEvent.getKeyCode();
return (
keyCode == KeyEvent.KEYCODE_BACK ||
keyCode == KeyEvent.KEYCODE_SHIFT_LEFT ||
keyCode == KeyEvent.KEYCODE_DEL
);
}
public void setBarcodeListener(boolean listen) {
this.mBarcodeListener = listen;
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.core.expansion;
import dagger.Subcomponent;
@Subcomponent
public interface BaseMaterialAlertDialogBuilderComponent {
@Subcomponent.Factory
interface Factory {
BaseMaterialAlertDialogBuilderComponent create();
}
void inject(BaseMaterialAlertDialogBuilder baseMaterialAlertDialogBuilder);
}

View File

@@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
import dagger.Module;
@Module(subcomponents = BaseMaterialAlertDialogBuilderComponent.class)
public class BaseMaterialAlertDialogBuilderModule {
}

View File

@@ -2,37 +2,108 @@ package it.integry.integrywmsnative.core.expansion.view;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder> public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder>
extends SectionedRecyclerViewAdapter<SH, VH> { extends SectionedRecyclerViewAdapter<SH, VH> {
protected ArrayList<T> mDataset = new ArrayList<>();
private View mEmptyView; private View mEmptyView;
public ExtendedSectionedRecyclerView(ObservableArrayList<T> myDataset) { protected final List<T> originalItems = new ArrayList<>();
mDataset.addAll(myDataset); private final Object originalItemsLock = new Object();
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback<T>() { public ExtendedSectionedRecyclerView(ObservableArrayList<T> observableList) {
@Override // originalItems.addAll(observableList);
public void onChanged(ObservableList<T> sender) { //
mDataset.clear(); // observableList.addOnListChangedCallback(new OnListGeneralChangedCallback<T>() {
mDataset.addAll(sender); // @Override
// public void onChanged(ObservableList<T> sender) {
// originalItems.clear();
// originalItems.addAll(sender);
// notifyDataChanged();
// notifyDataSetChanged();
// checkIfEmpty();
// }
// });
//
// checkIfEmpty();
synchronized (originalItemsLock) {
this.originalItems.addAll(observableList); // Salva lo stato corrente per il filtraggio
}
observableList.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<T>>() {
private void updateLists() {
// Si assume che observableList sia modificata sul thread UI o che la sincronizzazione sia gestita esternamente.
List<T> currentData = new ArrayList<>(observableList); // Crea uno snapshot
synchronized (originalItemsLock) {
originalItems.clear();
originalItems.addAll(currentData); // Aggiorna la lista originale per il filtraggio
}
// Aggiorna la lista visualizzata dall'adapter
// clear();
// addAll(currentData); // Usa lo snapshot
// notifyDataSetChanged(); // ArrayAdapter.addAll non chiama notifyDataSetChanged, quindi è necessario se non chiamato da clear()
// Tuttavia, clear() e addAll() di ArrayAdapter gestiscono la notifica se mNotifyOnChange è true (default).
// Per sicurezza e coerenza con il codice originale, lo manteniamo.
notifyDataChanged(); notifyDataChanged();
notifyDataSetChanged(); notifyDataSetChanged();
checkIfEmpty(); checkIfEmpty();
} }
});
checkIfEmpty(); @Override
public void onChanged(ObservableList<T> sender) {
updateLists();
}
@Override
public void onItemRangeChanged(ObservableList<T> sender, int positionStart, int itemCount) {
updateLists();
}
@Override
public void onItemRangeInserted(ObservableList<T> sender, int positionStart, int itemCount) {
updateLists();
}
@Override
public void onItemRangeMoved(ObservableList<T> sender, int fromPosition, int toPosition, int itemCount) {
updateLists();
}
@Override
public void onItemRangeRemoved(ObservableList<T> sender, int positionStart, int itemCount) {
updateLists();
}
});
}
public ExtendedSectionedRecyclerView(@NonNull LiveData<List<T>> liveData,
@NonNull LifecycleOwner lifecycleOwner) {
liveData.observe(lifecycleOwner, newList -> {
// L'observer di LiveData viene eseguito sul thread UI
List<T> dataToUse = (newList == null) ? new ArrayList<>() : new ArrayList<>(newList);
synchronized (originalItemsLock) {
originalItems.clear();
originalItems.addAll(dataToUse); // Aggiorna la lista originale per il filtraggio
}
// Aggiorna la lista visualizzata dall'adapter
// clear();
// addAll(dataToUse); // addAll gestisce correttamente una collezione vuota se newList è null
notifyDataChanged();
notifyDataSetChanged();
checkIfEmpty();
});
} }
public ExtendedSectionedRecyclerView<T, SH, VH> setEmptyView(View emptyView) { public ExtendedSectionedRecyclerView<T, SH, VH> setEmptyView(View emptyView) {
@@ -43,7 +114,7 @@ public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.V
@Override @Override
public int getItemSize() { public int getItemSize() {
return this.mDataset.size(); return this.originalItems.size();
} }
private void checkIfEmpty() { private void checkIfEmpty() {

View File

@@ -0,0 +1,44 @@
package it.integry.integrywmsnative.core.expansion.view;
import android.view.View;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
public abstract class ExtendedSectionedRecyclerViewNew<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder>
extends SectionedRecyclerViewAdapter<SH, VH> {
private View mEmptyView;
public ExtendedSectionedRecyclerViewNew(ObservableArrayList<T> myDataset) {
super();
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback<T>() {
@Override
public void onChanged(ObservableList<T> sender) {
checkIfEmpty();
}
});
checkIfEmpty();
}
public ExtendedSectionedRecyclerViewNew<T, SH, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
}

View File

@@ -0,0 +1,218 @@
package it.integry.integrywmsnative.core.expansion.view;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.lang.ref.WeakReference;
import java.util.ArrayDeque;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class RecyclerViewProfiler {
private static final String TAG = "RVProfiler";
private final SparseArray<Long> bindingTimes;
private final SparseArray<Long> creationTimes;
private final Handler mainHandler;
private WeakReference<RecyclerView> recyclerViewRef;
private boolean isProfilingEnabled = true;
// Metriche di performance
private long totalBindingTime = 0;
private long totalCreationTime = 0;
private int bindCount = 0;
private int createCount = 0;
private long firstBindTime = 0;
private final ArrayDeque<Long> recentBindTimes;
private static final int MAX_RECENT_TIMES = 50;
public RecyclerViewProfiler(RecyclerView recyclerView) {
this.recyclerViewRef = new WeakReference<>(recyclerView);
this.bindingTimes = new SparseArray<>();
this.creationTimes = new SparseArray<>();
this.mainHandler = new Handler(Looper.getMainLooper());
this.recentBindTimes = new ArrayDeque<>();
setupRecyclerViewCallbacks();
}
private void setupRecyclerViewCallbacks() {
RecyclerView recyclerView = recyclerViewRef.get();
if (recyclerView == null) return;
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
logPerformanceMetrics();
}
}
});
// Monitora il pre-layout
recyclerView.addOnLayoutChangeListener((v, left, top, right, bottom,
oldLeft, oldTop, oldRight, oldBottom) -> {
if (firstBindTime == 0) {
mainHandler.postDelayed(this::checkInitialPerformance, 500);
}
});
}
public void onPreBind(int position) {
if (!isProfilingEnabled) return;
bindingTimes.put(position, System.nanoTime());
}
public void onPostBind(int position) {
if (!isProfilingEnabled) return;
Long startTime = bindingTimes.get(position);
if (startTime != null) {
long bindTime = System.nanoTime() - startTime;
bindingTimes.remove(position);
if (firstBindTime == 0) {
firstBindTime = bindTime;
}
totalBindingTime += bindTime;
bindCount++;
recentBindTimes.addLast(bindTime);
if (recentBindTimes.size() > MAX_RECENT_TIMES) {
recentBindTimes.removeFirst();
}
// Segnala binding lenti
if (bindTime > TimeUnit.MILLISECONDS.toNanos(16)) { // 1 frame
Log.w(TAG, String.format("Slow binding at position %d: %.2fms",
position, bindTime / 1_000_000.0));
}
}
}
public void onPreCreate(int viewType) {
if (!isProfilingEnabled) return;
creationTimes.put(viewType, System.nanoTime());
}
public void onPostCreate(int viewType) {
if (!isProfilingEnabled) return;
Long startTime = creationTimes.get(viewType);
if (startTime != null) {
long createTime = System.nanoTime() - startTime;
creationTimes.remove(viewType);
totalCreationTime += createTime;
createCount++;
// Segnala creazioni lente
if (createTime > TimeUnit.MILLISECONDS.toNanos(8)) {
Log.w(TAG, String.format("Slow view creation for type %d: %.2fms",
viewType, createTime / 1_000_000.0));
}
}
}
private void checkInitialPerformance() {
RecyclerView recyclerView = recyclerViewRef.get();
if (recyclerView == null) return;
// Verifica inflazione layout
long avgBindTime = bindCount > 0 ? totalBindingTime / bindCount : 0;
if (avgBindTime > TimeUnit.MILLISECONDS.toNanos(8)) {
Log.w(TAG, String.format("High average binding time: %.2fms. " +
"Consider using AsyncLayoutInflater", avgBindTime / 1_000_000.0));
}
// Verifica dimensione view pool
RecyclerView.RecycledViewPool pool = recyclerView.getRecycledViewPool();
if (pool != null) {
int[] viewTypes = getViewTypes(recyclerView);
for (int type : viewTypes) {
if (pool.getRecycledViewCount(type) == 0) {
Log.w(TAG, "ViewPool empty for type " + type +
". Consider increasing pool size");
}
}
}
// Verifica prefetch
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
if (!lm.isItemPrefetchEnabled()) {
Log.w(TAG, "Item prefetch is disabled. Enable it for better performance");
}
}
}
private void logPerformanceMetrics() {
if (!isProfilingEnabled || recentBindTimes.isEmpty()) return;
// Calcola la varianza dei tempi di binding recenti
double mean = recentBindTimes.stream()
.mapToLong(Long::longValue)
.average()
.orElse(0.0);
double variance = recentBindTimes.stream()
.mapToDouble(time -> Math.pow(time - mean, 2))
.average()
.orElse(0.0);
Log.d(TAG, String.format("Performance metrics:\n" +
"Avg binding time: %.2fms\n" +
"Binding time variance: %.2f\n" +
"View creation rate: %.1f%%",
mean / 1_000_000.0,
variance / 1_000_000.0,
createCount * 100.0 / (bindCount + 1)));
}
private int[] getViewTypes(RecyclerView recyclerView) {
RecyclerView.Adapter<?> adapter = recyclerView.getAdapter();
if (adapter == null) return new int[0];
Set<Integer> types = new HashSet<>();
for (int i = 0; i < adapter.getItemCount(); i++) {
types.add(adapter.getItemViewType(i));
}
return types.stream().mapToInt(Integer::intValue).toArray();
}
public void enableProfiling(boolean enabled) {
isProfilingEnabled = enabled;
if (!enabled) {
bindingTimes.clear();
creationTimes.clear();
recentBindTimes.clear();
}
}
public String getProfilingStats() {
if (bindCount == 0) return "No data collected yet";
return String.format(Locale.US,
"Profiling Statistics:\n" +
"Total bindings: %d\n" +
"Average binding time: %.2fms\n" +
"Total view creations: %d\n" +
"Average creation time: %.2fms\n" +
"First binding time: %.2fms\n" +
"Creation/Binding ratio: %.1f%%",
bindCount,
(totalBindingTime / bindCount) / 1_000_000.0,
createCount,
(totalCreationTime / createCount) / 1_000_000.0,
firstBindTime / 1_000_000.0,
createCount * 100.0 / bindCount);
}
}

View File

@@ -0,0 +1,352 @@
package it.integry.integrywmsnative.core.expansion.view;
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import it.integry.integrywmsnative.BuildConfig;
public abstract class SectionedRecyclerViewAdapter<H extends RecyclerView.ViewHolder,
I extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private RecyclerViewProfiler profiler;
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
// Utilizziamo SparseArray invece di HashMap per migliori performance su Android
private final SparseArray<Section> sectionsByPosition;
private final ArrayList<Section> sections;
// Cache per le posizioni degli item per evitare ricalcoli frequenti
private final SparseIntArray positionCache;
private int lastCacheUpdateCount;
// Pool di View per riutilizzo
private final RecyclerView.RecycledViewPool sharedPool;
// Dimensione massima della cache delle posizioni
private static final int MAX_POSITION_CACHE_SIZE = 2000;
public SectionedRecyclerViewAdapter() {
this.sections = new ArrayList<>();
this.sectionsByPosition = new SparseArray<>();
this.positionCache = new SparseIntArray(MAX_POSITION_CACHE_SIZE);
this.sharedPool = new RecyclerView.RecycledViewPool();
// Aumentiamo il pool di ViewHolder per tipo
sharedPool.setMaxRecycledViews(TYPE_HEADER, 500);
sharedPool.setMaxRecycledViews(TYPE_ITEM, 2000);
}
@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
profiler = new RecyclerViewProfiler(recyclerView);
profiler.enableProfiling(BuildConfig.DEBUG);
recyclerView.setRecycledViewPool(sharedPool);
// Ottimizziamo il layout manager per le prestazioni
if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) {
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
layoutManager.setItemPrefetchEnabled(true);
// layoutManager.setInitialPrefetchItemCount(20);
}
// recyclerView.postDelayed(() -> {
// Precarica alcuni ViewHolder
// for (int i = 0; i < 100; i++) {
// sharedPool.putRecycledView(
// createViewHolder(recyclerView, TYPE_HEADER));
// }
// for (int i = 0; i < 100; i++) {
// sharedPool.putRecycledView(
// createViewHolder(recyclerView, TYPE_ITEM));
// }
// }, 50);
}
protected static class Section {
private final Object headerData;
private final ArrayList<Object> itemsData;
private int globalStartPosition; // Posizione globale di inizio sezione
public Section(Object headerData, int initialCapacity) {
this.headerData = headerData;
this.itemsData = new ArrayList<>(initialCapacity);
this.globalStartPosition = 0;
}
public Object getHeaderData() {
return headerData;
}
public List<Object> getItemsData() {
return itemsData;
}
public void addItem(Object item) {
itemsData.add(item);
}
public int getItemCount() {
return itemsData.size();
}
public void setGlobalStartPosition(int position) {
this.globalStartPosition = position;
}
public int getGlobalStartPosition() {
return globalStartPosition;
}
}
// ViewHolder pooling e caching
@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
// Pulizia custom del ViewHolder se necessario
if (holder instanceof OnRecycleListener) {
((OnRecycleListener) holder).onRecycle();
}
}
// Interfaccia per gestire la pulizia custom dei ViewHolder
public interface OnRecycleListener {
void onRecycle();
}
@Override
@NonNull
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
profiler.onPreCreate(viewType);
RecyclerView.ViewHolder holder;
if (viewType == TYPE_HEADER) {
holder = onCreateHeaderViewHolder(parent);
} else {
holder = onCreateItemViewHolder(parent);
}
// Applichiamo ViewHolder pooling
if (holder.itemView.getLayoutParams() == null) {
holder.itemView.setLayoutParams(
new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
)
);
}
profiler.onPostCreate(viewType);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
profiler.onPreBind(position);
PositionInfo posInfo = getItemPositionInfo(position);
if (getItemViewType(position) == TYPE_HEADER) {
onBindHeaderViewHolder((H) holder,
sections.get(posInfo.sectionPosition).getHeaderData(),
posInfo.sectionPosition);
} else {
Section section = sections.get(posInfo.sectionPosition);
onBindItemViewHolder((I) holder,
section.getItemsData().get(posInfo.itemPosition),
posInfo.sectionPosition,
posInfo.itemPosition);
}
profiler.onPostBind(position);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List<Object> payloads) {
if (payloads.isEmpty()) {
super.onBindViewHolder(holder, position, payloads);
return;
}
// Supporto per aggiornamenti parziali
if (getItemViewType(position) == TYPE_HEADER) {
onBindHeaderViewHolderPartial((H) holder, position, payloads);
} else {
onBindItemViewHolderPartial((I) holder, position, payloads);
}
}
// Metodi per gestire aggiornamenti parziali
protected void onBindHeaderViewHolderPartial(H holder, int position, List<Object> payloads) {
onBindViewHolder(holder, position);
}
protected void onBindItemViewHolderPartial(I holder, int position, List<Object> payloads) {
onBindViewHolder(holder, position);
}
@Override
public int getItemCount() {
int count = 0;
for (Section section : sections) {
count += section.getItemCount() + 1;
}
return count;
}
@Override
public int getItemViewType(int position) {
return isHeader(position) ? TYPE_HEADER : TYPE_ITEM;
}
// Metodi ottimizzati per la gestione delle sezioni
public <T> void addSection(T headerData, int expectedItems) {
sections.add(new Section(headerData, expectedItems));
updatePositionCache();
notifyDataSetChanged();
}
public void addItem(int sectionPosition, Object item) {
if (sectionPosition >= 0 && sectionPosition < sections.size()) {
sections.get(sectionPosition).addItem(item);
updatePositionCache();
// Notifichiamo solo l'inserimento invece di un refresh completo
notifyItemInserted(getGlobalPositionForItem(sectionPosition,
sections.get(sectionPosition).getItemCount() - 1));
}
}
public <T extends Object, S extends Object> void setSections(List<T> headers, Map<T, List<S>> items) {
sections.clear();
sectionsByPosition.clear();
int position = 0;
for (T header : headers) {
List<S> sectionItems = items.get(header);
Section section = new Section(header, sectionItems != null ? sectionItems.size() : 5);
if (sectionItems != null) {
section.getItemsData().addAll(sectionItems);
}
section.setGlobalStartPosition(position);
sections.add(section);
sectionsByPosition.put(position, section);
position += section.getItemCount() + 1;
}
updatePositionCache();
notifyDataSetChanged();
}
// Gestione efficiente della cache delle posizioni
private void updatePositionCache() {
if (sections.size() > MAX_POSITION_CACHE_SIZE) {
positionCache.clear();
return;
}
int currentPosition = 0;
for (int i = 0; i < sections.size(); i++) {
Section section = sections.get(i);
section.setGlobalStartPosition(currentPosition);
sectionsByPosition.put(currentPosition, section);
currentPosition += section.getItemCount() + 1;
}
lastCacheUpdateCount = getItemCount();
}
private boolean isHeader(int position) {
Section section = sectionsByPosition.get(position);
if (section != null) {
return true;
}
for (int i = 0; i < sections.size(); i++) {
section = sections.get(i);
if (position == section.getGlobalStartPosition()) {
return true;
}
if (position < section.getGlobalStartPosition() + section.getItemCount() + 1) {
return false;
}
}
return false;
}
private static class PositionInfo {
final int sectionPosition;
final int itemPosition;
PositionInfo(int sectionPosition, int itemPosition) {
this.sectionPosition = sectionPosition;
this.itemPosition = itemPosition;
}
}
private PositionInfo getItemPositionInfo(int position) {
// Controllo cache
int cachedSection = positionCache.get(position, -1);
if (cachedSection != -1 && lastCacheUpdateCount == getItemCount()) {
Section section = sections.get(cachedSection);
int relativePos = position - section.getGlobalStartPosition();
if (relativePos == 0) {
return new PositionInfo(cachedSection, -1);
}
return new PositionInfo(cachedSection, relativePos - 1);
}
// Ricerca ottimizzata
Section targetSection = sectionsByPosition.get(position);
if (targetSection != null) {
int sectionIndex = sections.indexOf(targetSection);
return new PositionInfo(sectionIndex, -1);
}
// Ricerca binaria nelle sezioni
int left = 0;
int right = sections.size() - 1;
while (left <= right) {
int mid = (left + right) >>> 1;
Section section = sections.get(mid);
int sectionStart = section.getGlobalStartPosition();
int sectionEnd = sectionStart + section.getItemCount() + 1;
if (position >= sectionStart && position < sectionEnd) {
int relativePos = position - sectionStart;
if (relativePos == 0) {
return new PositionInfo(mid, -1);
}
return new PositionInfo(mid, relativePos - 1);
}
if (position < sectionStart) {
right = mid - 1;
} else {
left = mid + 1;
}
}
throw new IndexOutOfBoundsException("Position " + position + " is out of bounds");
}
private int getGlobalPositionForItem(int sectionPosition, int itemPosition) {
return sections.get(sectionPosition).getGlobalStartPosition() + itemPosition + 1;
}
// Metodi astratti che devono essere implementati
protected abstract H onCreateHeaderViewHolder(ViewGroup parent);
protected abstract I onCreateItemViewHolder(ViewGroup parent);
protected abstract void onBindHeaderViewHolder(H holder, Object headerData, int sectionPosition);
protected abstract void onBindItemViewHolder(I holder, Object itemData, int sectionPosition, int itemPosition);
}

View File

@@ -0,0 +1,33 @@
package it.integry.integrywmsnative.core.helper;
import android.content.Context;
import androidx.annotation.ColorInt;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.secondary.TrasferimentoPedaneStatusEnum;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class TrasferimentoPedaneStatusConverter {
public static @ColorInt int getLabelBgColor(Context context, TrasferimentoPedaneStatusEnum status) {
var attrColor = switch (status) {
case APERTO -> com.google.android.material.R.attr.colorPrimaryContainer; // Primary
case COMPLETATO -> R.attr.colorSuccessContainer; // Green
case SCADUTO -> com.google.android.material.R.attr.colorErrorContainer; // Red
};
return UtilityResources.getColorResourceFromAttr(context, attrColor);
}
public static @ColorInt int getLabelTextColor(Context context, TrasferimentoPedaneStatusEnum status) {
var attrColor = switch (status) {
case APERTO -> com.google.android.material.R.attr.colorOnPrimaryContainer; // Primary
case COMPLETATO -> R.attr.colorOnSuccessContainer; // Green
case SCADUTO -> com.google.android.material.R.attr.colorOnErrorContainer; // Red
};
return UtilityResources.getColorResourceFromAttr(context, attrColor);
}
}

View File

@@ -6,7 +6,7 @@ public interface ILUPrintListener {
void onLUSuccessullyPrinted(); void onLUSuccessullyPrinted();
void onLUPrintRequest(RunnableArgs<Boolean> onComplete); boolean onLUPrintRequest();
void onLUPrintError(Exception ex, Runnable onComplete); void onLUPrintError(Exception ex, Runnable onComplete);

View File

@@ -2,11 +2,11 @@ package it.integry.integrywmsnative.core.mapper;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.model.MtbInvent; import it.integry.integrywmsnative.core.model.MtbInvent;
@Singleton @Singleton
public class InventarioMapper extends BaseMapper<MtbInvent, InventarioRoomDTO> { public class InventarioMapper extends BaseMapper<MtbInvent, InventarioEntity> {
private final InventarioRowMapper inventarioRowMapper; private final InventarioRowMapper inventarioRowMapper;
@@ -15,10 +15,10 @@ public class InventarioMapper extends BaseMapper<MtbInvent, InventarioRoomDTO> {
} }
@Override @Override
public InventarioRoomDTO mapRestToRoom(MtbInvent inputData) { public InventarioEntity mapRestToRoom(MtbInvent inputData) {
if(inputData == null) return null; if(inputData == null) return null;
var data = new InventarioRoomDTO(); var data = new InventarioEntity();
data.setIdInventario(inputData.getIdInventario()); data.setIdInventario(inputData.getIdInventario());
data.setCodMdep(inputData.getCodMdep()); data.setCodMdep(inputData.getCodMdep());
data.setDataInventario(inputData.getDataInventario()); data.setDataInventario(inputData.getDataInventario());
@@ -42,7 +42,7 @@ public class InventarioMapper extends BaseMapper<MtbInvent, InventarioRoomDTO> {
} }
@Override @Override
public MtbInvent mapRoomToRest(InventarioRoomDTO inputData) { public MtbInvent mapRoomToRest(InventarioEntity inputData) {
if(inputData == null) return null; if(inputData == null) return null;
var data = new MtbInvent(); var data = new MtbInvent();

View File

@@ -0,0 +1,43 @@
package it.integry.integrywmsnative.core.mapper;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneEntity;
import it.integry.integrywmsnative.core.rest.model.trasferimento_pedane.TrasferimentoPedaneDTO;
@Singleton
public class TrasferimentoPedaneMapper extends BaseMapper<TrasferimentoPedaneDTO, TrasferimentoPedaneEntity> {
private final TrasferimentoPedaneRowMapper trasferimentoPedaneRowMapper;
@Inject
public TrasferimentoPedaneMapper(TrasferimentoPedaneRowMapper trasferimentoPedaneRowMapper) {
this.trasferimentoPedaneRowMapper = trasferimentoPedaneRowMapper;
}
@Override
public TrasferimentoPedaneEntity mapRestToRoom(TrasferimentoPedaneDTO inputData) {
if(inputData == null) return null;
var data = new TrasferimentoPedaneEntity();
data.setCodMdepDest(inputData.getCodMdepDest());
data.setCreatedAt(inputData.getCreatedAt());
data.setTrasferimentoPedaneRowList(trasferimentoPedaneRowMapper.mapRestsToRooms(inputData.getRows()));
return data;
}
@Override
public TrasferimentoPedaneDTO mapRoomToRest(TrasferimentoPedaneEntity inputData) {
if(inputData == null) return null;
var data = new TrasferimentoPedaneDTO();
data.setCodMdepDest(inputData.getCodMdepDest());
data.setCreatedAt(inputData.getCreatedAt());
data.setRows(trasferimentoPedaneRowMapper.mapRoomsToRests(inputData.getTrasferimentoPedaneRowList()));
return data;
}
}

View File

@@ -0,0 +1,34 @@
package it.integry.integrywmsnative.core.mapper;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.TrasferimentoPedaneRowEntity;
import it.integry.integrywmsnative.core.rest.model.trasferimento_pedane.TrasferimentoPedaneRowDTO;
@Singleton
public class TrasferimentoPedaneRowMapper extends BaseMapper<TrasferimentoPedaneRowDTO, TrasferimentoPedaneRowEntity> {
@Inject
public TrasferimentoPedaneRowMapper() {
// Default constructor for dependency injection
}
@Override
public TrasferimentoPedaneRowEntity mapRestToRoom(TrasferimentoPedaneRowDTO inputData) {
if(inputData == null) return null;
var data = new TrasferimentoPedaneRowEntity();
return data;
}
@Override
public TrasferimentoPedaneRowDTO mapRoomToRest(TrasferimentoPedaneRowEntity inputData) {
if(inputData == null) return null;
var data = new TrasferimentoPedaneRowDTO();
return data;
}
}

View File

@@ -0,0 +1,44 @@
package it.integry.integrywmsnative.core.mapper;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.rest.model.pv.VerificaGiacenzeDTO;
@Singleton
public class VerificaGiacenzeMapper extends BaseMapper<VerificaGiacenzeDTO, VerificaGiacenzeEntity> {
private final VerificaGiacenzeRowMapper verificaGiacenzeRowMapper;
public VerificaGiacenzeMapper(VerificaGiacenzeRowMapper verificaGiacenzeRowMapper) {
this.verificaGiacenzeRowMapper = verificaGiacenzeRowMapper;
}
@Override
public VerificaGiacenzeEntity mapRestToRoom(VerificaGiacenzeDTO inputData) {
if(inputData == null) return null;
var data = new VerificaGiacenzeEntity();
data.setCodMdep(inputData.getCodMdep());
data.setData(inputData.getDataVerifica());
data.setVerificaGiacenzeRowList(verificaGiacenzeRowMapper.mapRestsToRooms(inputData.getRows()));
return data;
}
@Override
public VerificaGiacenzeDTO mapRoomToRest(VerificaGiacenzeEntity inputData) {
if(inputData == null) return null;
var data = new VerificaGiacenzeDTO();
data.setCodMdep(inputData.getCodMdep());
data.setDataVerifica(inputData.getData());
data.setRows(verificaGiacenzeRowMapper.mapRoomsToRests(inputData.getVerificaGiacenzeRowList()));
return data;
}
}

View File

@@ -0,0 +1,40 @@
package it.integry.integrywmsnative.core.mapper;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.rest.model.pv.VerificaGiacenzeRowDTO;
@Singleton
public class VerificaGiacenzeRowMapper extends BaseMapper<VerificaGiacenzeRowDTO, VerificaGiacenzeRowEntity> {
@Override
public VerificaGiacenzeRowEntity mapRestToRoom(VerificaGiacenzeRowDTO inputData) {
if(inputData == null) return null;
var data = new VerificaGiacenzeRowEntity();
data.setCodMart(inputData.getCodMart());
data.setPartitaMag(inputData.getPartitaMag());
data.setQtaInGiacenza(inputData.getQtaInGiacenza());
data.setQta(inputData.getQta());
data.setNumConf(inputData.getNumCnf());
data.setQtaConf(inputData.getQtaCnf());
data.setScanCodBarre(inputData.getBarcode());
return data;
}
@Override
public VerificaGiacenzeRowDTO mapRoomToRest(VerificaGiacenzeRowEntity inputData) {
if(inputData == null) return null;
var data = new VerificaGiacenzeRowDTO();
data.setCodMart(inputData.getCodMart());
data.setPartitaMag(inputData.getPartitaMag());
data.setQtaInGiacenza(inputData.getQtaInGiacenza());
data.setQta(inputData.getQta());
data.setNumCnf(inputData.getNumConf());
data.setQtaCnf(inputData.getQtaConf());
data.setBarcode(inputData.getScanCodBarre());
return data;
}
}

View File

@@ -1,17 +1,10 @@
package it.integry.integrywmsnative.core.menu; package it.integry.integrywmsnative.core.menu;
import androidx.annotation.NonNull;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.StbMenu; import it.integry.integrywmsnative.core.model.StbMenu;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.handler.ManagedErrorCallback;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import retrofit2.Call;
import retrofit2.Response;
@Singleton @Singleton
public class MenuRESTConsumer extends _BaseRESTConsumer { public class MenuRESTConsumer extends _BaseRESTConsumer {
@@ -22,19 +15,12 @@ public class MenuRESTConsumer extends _BaseRESTConsumer {
this.restBuilder = restBuilder; this.restBuilder = restBuilder;
} }
public void retrieveMenu(String rootCodOpz, RunnableArgs<StbMenu> onComplete, RunnableArgs<Exception> onFailed) { public StbMenu retrieveMenuSynchronized(String rootCodOpz) throws Exception {
MenuRESTConsumerService menuRESTConsumerService = restBuilder.getService(MenuRESTConsumerService.class); MenuRESTConsumerService menuRESTConsumerService = restBuilder.getService(MenuRESTConsumerService.class);
menuRESTConsumerService.retrieveMenuConfig(rootCodOpz).enqueue(new ManagedErrorCallback<>() { var response = menuRESTConsumerService.retrieveMenuConfig(rootCodOpz)
@Override .execute();
public void onResponse(Call<ServiceRESTResponse<StbMenu>> call, Response<ServiceRESTResponse<StbMenu>> response) {
analyzeAnswer(response, "retrieveMenu", onComplete, onFailed);
}
@Override return analyzeAnswer(response, "retrieveMenu");
public void onFailure(Call<ServiceRESTResponse<StbMenu>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
} }
} }

View File

@@ -10,7 +10,6 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration; import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration;
import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration; import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.menu.exception.MenuNotFoundException; import it.integry.integrywmsnative.core.menu.exception.MenuNotFoundException;
import it.integry.integrywmsnative.core.model.StbMenu; import it.integry.integrywmsnative.core.model.StbMenu;
@@ -29,20 +28,18 @@ public class MenuService {
this.menuRESTConsumer = menuRESTConsumer; this.menuRESTConsumer = menuRESTConsumer;
} }
public void init(Runnable onMenuInitialized, RunnableArgs<Exception> onFailed) { public void init() throws Exception {
menuRESTConsumer.retrieveMenu(MENU_COD_OPZ, menu -> { var menu = menuRESTConsumer.retrieveMenuSynchronized(MENU_COD_OPZ);
if(menu != null) {
this.mInternalCachedMenu = menu.getStbMenuChildren();
this.mInternalCachedFlatMenu = new ArrayList<>();
flattenMenu(this.mInternalCachedMenu);
}
onMenuInitialized.run(); if (menu != null) {
}, onFailed); this.mInternalCachedMenu = menu.getStbMenuChildren();
this.mInternalCachedFlatMenu = new ArrayList<>();
flattenMenu(this.mInternalCachedMenu);
}
} }
public List<StbMenu> getMenu() throws Exception { public List<StbMenu> getMenu() throws Exception {
if(mInternalCachedMenu == null) throw new MenuNotFoundException(); if (mInternalCachedMenu == null) throw new MenuNotFoundException();
return mInternalCachedMenu; return mInternalCachedMenu;
} }
@@ -64,10 +61,10 @@ public class MenuService {
} }
private void flattenMenu(List<StbMenu> menu) { private void flattenMenu(List<StbMenu> menu) {
for(StbMenu stbMenu : menu) { for (StbMenu stbMenu : menu) {
this.mInternalCachedFlatMenu.add(stbMenu); this.mInternalCachedFlatMenu.add(stbMenu);
if(stbMenu.getStbMenuChildren() != null && !stbMenu.getStbMenuChildren().isEmpty()) { if (stbMenu.getStbMenuChildren() != null && !stbMenu.getStbMenuChildren().isEmpty()) {
flattenMenu(stbMenu.getStbMenuChildren()); flattenMenu(stbMenu.getStbMenuChildren());
} }
} }

View File

@@ -4,76 +4,146 @@ import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.util.Base64; import android.util.Base64;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
public class Azienda { public class Azienda extends EntityBase {
@SerializedName("nomeDitta")
private String nomeDitta; private String nomeDitta;
@SerializedName("indirizzo")
private String indirizzo; private String indirizzo;
@SerializedName("cap")
private String cap; private String cap;
@SerializedName("citta")
private String citta; private String citta;
@SerializedName("prov")
private String prov; private String prov;
@SerializedName("partIva")
private String partIva; private String partIva;
@SerializedName("numTel")
private String numTel; private String numTel;
@SerializedName("numFax")
private String numFax; private String numFax;
@SerializedName("eMail")
private String eMail; private String eMail;
@SerializedName("annoContab")
private Integer annoContab; private Integer annoContab;
@SerializedName("annoMagaz")
private Integer annoMagaz; private Integer annoMagaz;
@SerializedName("annoAttuale")
private Integer annoAttuale; private Integer annoAttuale;
@SerializedName("ultDataGio")
private String ultDataGio; private String ultDataGio;
@SerializedName("ultNumGio")
private Integer ultNumGio; private Integer ultNumGio;
@SerializedName("ribaRSoc1")
private String ribaRSoc1; private String ribaRSoc1;
@SerializedName("ribaRSoc2")
private String ribaRSoc2; private String ribaRSoc2;
@SerializedName("ribaRSocBreve")
private String ribaRSocBreve; private String ribaRSocBreve;
@SerializedName("dataInizMsg")
private String dataInizMsg; private String dataInizMsg;
@SerializedName("dataFineMsg")
private String dataFineMsg; private String dataFineMsg;
@SerializedName("messaggioDoc")
private String messaggioDoc; private String messaggioDoc;
@SerializedName("liquidazioniIva")
private String liquidazioniIva; private String liquidazioniIva;
@SerializedName("lastUpgDb")
private String lastUpgDb; private String lastUpgDb;
@SerializedName("logoFile")
private String logoFile; private String logoFile;
@SerializedName("logoB64")
private String logoB64; private String logoB64;
@SerializedName("ultDareAv")
private BigDecimal ultDareAv; private BigDecimal ultDareAv;
@SerializedName("sollTop")
private Integer sollTop; private Integer sollTop;
@SerializedName("sollLeft")
private Integer sollLeft; private Integer sollLeft;
@SerializedName("ggUtili")
private Integer ggUtili; private Integer ggUtili;
@SerializedName("codSia")
private String codSia; private String codSia;
@SerializedName("flagFattDiff")
private String flagFattDiff; private String flagFattDiff;
@SerializedName("sollHeadPersonal")
private String sollHeadPersonal; private String sollHeadPersonal;
@SerializedName("lastUpgSp")
private String lastUpgSp; private String lastUpgSp;
@SerializedName("sitoWeb")
private String sitoWeb; private String sitoWeb;
@SerializedName("capitaleSoc")
private BigDecimal capitaleSoc; private BigDecimal capitaleSoc;
@SerializedName("cciaa")
private String cciaa; private String cciaa;
@SerializedName("iscRegImp")
private String iscRegImp; private String iscRegImp;
@SerializedName("ragSocMod")
private String ragSocMod; private String ragSocMod;
@SerializedName("prefissoEan")
private String prefissoEan; private String prefissoEan;
@SerializedName("codFiscale")
private String codFiscale; private String codFiscale;
@SerializedName("persFisicaCognome")
private String persFisicaCognome; private String persFisicaCognome;
@SerializedName("persFisicaNome")
private String persFisicaNome; private String persFisicaNome;
@SerializedName("persFisicaSesso")
private String persFisicaSesso; private String persFisicaSesso;
@SerializedName("persFisicaDataNascita")
private String persFisicaDataNascita; private String persFisicaDataNascita;
@SerializedName("persFisicaComuneNascita")
private String persFisicaComuneNascita; private String persFisicaComuneNascita;
@SerializedName("persFisicaProvNascita")
private String persFisicaProvNascita; private String persFisicaProvNascita;
@SerializedName("flagPersFisica")
private String flagPersFisica; private String flagPersFisica;
@SerializedName("persFisicaCodFisc")
private String persFisicaCodFisc; private String persFisicaCodFisc;
@SerializedName("rapprLegale")
private String rapprLegale; private String rapprLegale;
@SerializedName("rapprLegaleCodFisc")
private String rapprLegaleCodFisc; private String rapprLegaleCodFisc;
@SerializedName("sedeAmm")
private String sedeAmm; private String sedeAmm;
@SerializedName("flagSetIvaOmaggi")
private String flagSetIvaOmaggi; private String flagSetIvaOmaggi;
@SerializedName("applicationName")
private String applicationName; private String applicationName;
@SerializedName("flagTipoFatturazione")
private String flagTipoFatturazione; private String flagTipoFatturazione;
@SerializedName("tribunale")
private String tribunale; private String tribunale;
@SerializedName("settRitardoAnno")
private Integer settRitardoAnno; private Integer settRitardoAnno;
@SerializedName("dbDistributore")
private String dbDistributore; private String dbDistributore;
@SerializedName("coStringco")
private String coStringco; private String coStringco;
@SerializedName("lastUpgQc")
private String lastUpgQc; private String lastUpgQc;
@SerializedName("tipoAzienda")
private String tipoAzienda; private String tipoAzienda;
@SerializedName("nazione")
private String nazione; private String nazione;
@SerializedName("codDiviContab")
private String codDiviContab; private String codDiviContab;
@SerializedName("codIvaOmaggi")
private String codIvaOmaggi; private String codIvaOmaggi;
@SerializedName("codCconQuadra")
private String codCconQuadra; private String codCconQuadra;
public Azienda() {
type = "azienda";
}
/** /**
* Regime Fiscale * Regime Fiscale
*/ */

View File

@@ -1,35 +0,0 @@
package it.integry.integrywmsnative.core.model;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class CheckableMtbAart {
private MtbAart mtbAart;
private BindableBoolean checked = new BindableBoolean(false);
public CheckableMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public CheckableMtbAart setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public CheckableMtbAart setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
public void toggleCheck() {
this.checked.set(!this.checked.get());
}
}

View File

@@ -1,63 +0,0 @@
package it.integry.integrywmsnative.core.model;
import androidx.databinding.Observable;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListItemModel;
public class CheckableMtbColr {
private DialogChooseArtsFromMtbColrListItemModel item;
private BindableBoolean checked = new BindableBoolean(false);
private BindableBoolean hidden = new BindableBoolean(false);
public CheckableMtbColr(DialogChooseArtsFromMtbColrListItemModel item) {
this.item = item;
this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
hidden.set(item.isHidden());
}
});
}
public DialogChooseArtsFromMtbColrListItemModel getItem() {
return item;
}
public CheckableMtbColr setItem(DialogChooseArtsFromMtbColrListItemModel item) {
this.item = item;
this.item.getHidden().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
hidden.set(item.isHidden());
}
});
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public CheckableMtbColr setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
public BindableBoolean getHidden() {
return hidden;
}
public boolean isHidden() {
return hidden.get();
}
public CheckableMtbColr setHidden(BindableBoolean hidden) {
this.hidden = hidden;
return this;
}
}

View File

@@ -1,149 +1,224 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.model.key.DtbDocrKey;
public class DtbDocr { public class DtbDocr extends EntityBase {
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codDtip")
private String codDtip; private String codDtip;
private String dataDoc; @SerializedName("dataDoc")
private LocalDate dataDoc;
@SerializedName("idRiga")
private Integer idRiga; private Integer idRiga;
@SerializedName("numDoc")
private Integer numDoc; private Integer numDoc;
@SerializedName("serDoc")
private String serDoc; private String serDoc;
@SerializedName("codAliq")
private String codAliq; private String codAliq;
@SerializedName("codAnagComp")
private String codAnagComp; private String codAnagComp;
@SerializedName("codArtFor")
private String codArtFor; private String codArtFor;
@SerializedName("codCol")
private String codCol; private String codCol;
@SerializedName("codDtipComp")
private String codDtipComp; private String codDtipComp;
@SerializedName("codJcom")
private String codJcom; private String codJcom;
@SerializedName("codMart")
private String codMart; private String codMart;
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("codPromo")
private String codPromo; private String codPromo;
@SerializedName("codTagl")
private String codTagl; private String codTagl;
@SerializedName("costoUnt")
private BigDecimal costoUnt; private BigDecimal costoUnt;
@SerializedName("dataDocComp")
private String dataDocComp; private String dataDocComp;
@SerializedName("dataOrd")
private String dataOrd; private String dataOrd;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
@SerializedName("descrizioneEstesa")
private String descrizioneEstesa; private String descrizioneEstesa;
private String flagEvasoForzato; private String flagEvasoForzato;
@SerializedName("importoRiga")
private BigDecimal importoRiga; private BigDecimal importoRiga;
@SerializedName("numCnf")
private BigDecimal numCnf; private BigDecimal numCnf;
@SerializedName("numDocComp")
private Integer numDocComp; private Integer numDocComp;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("partitaMag")
private String partitaMag; private String partitaMag;
@SerializedName("percGest")
private BigDecimal percGest; private BigDecimal percGest;
@SerializedName("percIspe")
private BigDecimal percIspe; private BigDecimal percIspe;
@SerializedName("percOneri")
private BigDecimal percOneri; private BigDecimal percOneri;
@SerializedName("percPromo")
private BigDecimal percPromo; private BigDecimal percPromo;
@SerializedName("percProv")
private BigDecimal percProv; private BigDecimal percProv;
@SerializedName("percProv2")
private BigDecimal percProv2; private BigDecimal percProv2;
@SerializedName("pesoLordo")
private BigDecimal pesoLordo; private BigDecimal pesoLordo;
private String posizione; private String posizione;
@SerializedName("qtaCnf")
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
@SerializedName("qtaDoc")
private BigDecimal qtaDoc; private BigDecimal qtaDoc;
@SerializedName("qtaDoc2")
private BigDecimal qtaDoc2; private BigDecimal qtaDoc2;
@SerializedName("qtaDoc3")
private BigDecimal qtaDoc3; private BigDecimal qtaDoc3;
@SerializedName("rapConv")
private BigDecimal rapConv; private BigDecimal rapConv;
@SerializedName("rigaOrd")
private Integer rigaOrd; private Integer rigaOrd;
@SerializedName("sconto5")
private BigDecimal sconto5; private BigDecimal sconto5;
@SerializedName("sconto6")
private BigDecimal sconto6; private BigDecimal sconto6;
@SerializedName("sconto7")
private BigDecimal sconto7; private BigDecimal sconto7;
@SerializedName("sconto8")
private BigDecimal sconto8; private BigDecimal sconto8;
@SerializedName("serDocComp")
private String serDocComp; private String serDocComp;
@SerializedName("untDoc")
private String untDoc; private String untDoc;
@SerializedName("untDoc2")
private String untDoc2; private String untDoc2;
@SerializedName("untDoc3")
private String untDoc3; private String untDoc3;
@SerializedName("valGest")
private BigDecimal valGest; private BigDecimal valGest;
@SerializedName("valIspe")
private BigDecimal valIspe; private BigDecimal valIspe;
@SerializedName("valOneri")
private BigDecimal valOneri; private BigDecimal valOneri;
@SerializedName("valPromo")
private BigDecimal valPromo; private BigDecimal valPromo;
@SerializedName("valProv")
private BigDecimal valProv; private BigDecimal valProv;
@SerializedName("valProv2")
private BigDecimal valProv2; private BigDecimal valProv2;
@SerializedName("valUnt")
private BigDecimal valUnt; private BigDecimal valUnt;
@SerializedName("valUntIva")
private BigDecimal valUntIva; private BigDecimal valUntIva;
@SerializedName("codMtip")
private String codMtip; private String codMtip;
@SerializedName("matricola")
private String matricola; private String matricola;
@SerializedName("dataInizComp")
private String dataInizComp; private String dataInizComp;
@SerializedName("dataFineComp")
private String dataFineComp; private String dataFineComp;
@SerializedName("codKit")
private String codKit; private String codKit;
@SerializedName("codAlis")
private String codAlis; private String codAlis;
@SerializedName("dataInsRow")
private String dataInsRow; private String dataInsRow;
@SerializedName("note")
private String note; private String note;
@SerializedName("rigaKit")
private int rigaKit; private int rigaKit;
@SerializedName("mtbAart")
private MtbAart mtbAart; private MtbAart mtbAart;
@SerializedName("dataScadPartitaMag")
private LocalDate dataScadPartitaMag; private LocalDate dataScadPartitaMag;
public DtbDocr() {
type = "dtb_docr";
}
public DtbDocrKey getKey() {
return new DtbDocrKey(codAnag, codDtip, dataDoc, numDoc, serDoc, idRiga);
}
public String getCodAnag() { public String getCodAnag() {
return codAnag; return codAnag;
} }
@@ -162,17 +237,12 @@ public class DtbDocr {
return this; return this;
} }
public String getDataDocS() { public LocalDate getDataDoc() {
return dataDoc; return dataDoc;
} }
public Date getDataDocD() { public void setDataDoc(LocalDate dataDoc) {
return UtilityDate.recognizeDateWithExceptionHandler(getDataDocS());
}
public DtbDocr setDataDoc(String dataDoc) {
this.dataDoc = dataDoc; this.dataDoc = dataDoc;
return this;
} }
public Integer getIdRiga() { public Integer getIdRiga() {

View File

@@ -1,128 +1,244 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.time.LocalDate;
import java.util.List; import java.util.List;
public class DtbDoct { public class DtbDoct extends EntityBase{
public static final String ENTITY = "dtb_doct";
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codDtip")
private String codDtip; private String codDtip;
private Date dataDoc; @SerializedName("dataDoc")
private LocalDate dataDoc;
@SerializedName("numDoc")
private Integer numDoc; private Integer numDoc;
@SerializedName("serDoc")
private String serDoc; private String serDoc;
@SerializedName("acconto")
private BigDecimal acconto; private BigDecimal acconto;
@SerializedName("activityId")
private String activityId; private String activityId;
@SerializedName("annotazioni")
private String annotazioni; private String annotazioni;
@SerializedName("aspettoBeni")
private String aspettoBeni; private String aspettoBeni;
@SerializedName("cambio")
private BigDecimal cambio; private BigDecimal cambio;
@SerializedName("causaleTrasp")
private String causaleTrasp; private String causaleTrasp;
@SerializedName("codAbi")
private String codAbi; private String codAbi;
@SerializedName("codAuto")
private String codAuto; private String codAuto;
@SerializedName("codBanc")
private String codBanc; private String codBanc;
@SerializedName("codBancAzi")
private String codBancAzi; private String codBancAzi;
@SerializedName("codCab")
private String codCab; private String codCab;
@SerializedName("codDivi")
private String codDivi; private String codDivi;
@SerializedName("codDtipVal")
private String codDtipVal; private String codDtipVal;
@SerializedName("codFornTd")
private String codFornTd; private String codFornTd;
@SerializedName("codJcom")
private String codJcom; private String codJcom;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("codPaga")
private String codPaga; private String codPaga;
@SerializedName("codProd")
private String codProd; private String codProd;
@SerializedName("codVage")
private String codVage; private String codVage;
@SerializedName("codVage2")
private String codVage2; private String codVage2;
@SerializedName("codVdes")
private String codVdes; private String codVdes;
@SerializedName("codVvet")
private String codVvet; private String codVvet;
@SerializedName("codVvet2")
private String codVvet2; private String codVvet2;
@SerializedName("codVzon")
private String codVzon; private String codVzon;
@SerializedName("compilatoDa")
private String compilatoDa; private String compilatoDa;
@SerializedName("userName")
private String userName; private String userName;
@SerializedName("controllatoDa")
private String controllatoDa; private String controllatoDa;
private Date dataChkDoc; @SerializedName("dataChkDoc")
private Date dataDocVal; private LocalDate dataChkDoc;
private Date dataInizTrasp; @SerializedName("dataDocVal")
private Date dataIns; private LocalDate dataDocVal;
private Date dataOrd; @SerializedName("dataInizTrasp")
private Date dataReg; private LocalDate dataInizTrasp;
private Date dataRifScad; @SerializedName("dataIns")
private Date dataUltMod; private LocalDate dataIns;
@SerializedName("dataOrd")
private LocalDate dataOrd;
@SerializedName("dataReg")
private LocalDate dataReg;
@SerializedName("dataRifScad")
private LocalDate dataRifScad;
@SerializedName("dataUltMod")
private LocalDate dataUltMod;
@SerializedName("descrizionePaga")
private String descrizionePaga; private String descrizionePaga;
@SerializedName("flagPrzScontati")
private String flagPrzScontati; private String flagPrzScontati;
@SerializedName("gestione")
private String gestione; private String gestione;
@SerializedName("kmPercorsi")
private Integer kmPercorsi; private Integer kmPercorsi;
@SerializedName("listino")
private String listino; private String listino;
@SerializedName("mezzo")
private String mezzo; private String mezzo;
@SerializedName("modificatoDa")
private String modificatoDa; private String modificatoDa;
@SerializedName("nettoMerce")
private BigDecimal nettoMerce; private BigDecimal nettoMerce;
@SerializedName("numCmov")
private Integer numCmov; private Integer numCmov;
@SerializedName("numColli")
private String numColli; private String numColli;
@SerializedName("numDocVal")
private Integer numDocVal; private Integer numDocVal;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("numVettura")
private String numVettura; private String numVettura;
@SerializedName("oraInizTrasp")
private String oraInizTrasp; private String oraInizTrasp;
@SerializedName("partitaMag")
private String partitaMag; private String partitaMag;
@SerializedName("peso")
private String peso; private String peso;
@SerializedName("porto")
private String porto; private String porto;
@SerializedName("previstaFat")
private String previstaFat; private String previstaFat;
@SerializedName("qtaProd")
private BigDecimal qtaProd; private BigDecimal qtaProd;
@SerializedName("rapConvProd")
private BigDecimal rapConvProd; private BigDecimal rapConvProd;
@SerializedName("rifOrd")
private String rifOrd; private String rifOrd;
@SerializedName("sconto1")
private BigDecimal sconto1; private BigDecimal sconto1;
@SerializedName("sconto2")
private BigDecimal sconto2; private BigDecimal sconto2;
@SerializedName("sconto3")
private BigDecimal sconto3; private BigDecimal sconto3;
@SerializedName("sconto4")
private BigDecimal sconto4; private BigDecimal sconto4;
@SerializedName("serDocVal")
private String serDocVal; private String serDocVal;
@SerializedName("termCons")
private String termCons; private String termCons;
@SerializedName("tipoAnag")
private String tipoAnag; private String tipoAnag;
@SerializedName("totImponib")
private BigDecimal totImponib; private BigDecimal totImponib;
@SerializedName("totIva")
private BigDecimal totIva; private BigDecimal totIva;
@SerializedName("totMerce")
private BigDecimal totMerce; private BigDecimal totMerce;
@SerializedName("totOmaggi")
private BigDecimal totOmaggi; private BigDecimal totOmaggi;
@SerializedName("totProvvig")
private BigDecimal totProvvig; private BigDecimal totProvvig;
@SerializedName("untMisProd")
private String untMisProd; private String untMisProd;
@SerializedName("idViaggio")
private String idViaggio; private String idViaggio;
@SerializedName("numDocForn")
private String numDocForn; private String numDocForn;
@SerializedName("generaMovCont")
private String generaMovCont; private String generaMovCont;
@SerializedName("targa")
private String targa; private String targa;
@SerializedName("postiPallet")
private Integer postiPallet; private Integer postiPallet;
@SerializedName("tempMedia")
private BigDecimal tempMedia; private BigDecimal tempMedia;
private Date dataCons; @SerializedName("dataCons")
private LocalDate dataCons;
@SerializedName("nolo")
private BigDecimal nolo; private BigDecimal nolo;
@SerializedName("nolo2")
private BigDecimal nolo2; private BigDecimal nolo2;
@SerializedName("conducente")
private String conducente; private String conducente;
@SerializedName("iban")
private String iban; private String iban;
@SerializedName("mrn")
private String mrn; private String mrn;
@SerializedName("explodeKit")
private String explodeKit; private String explodeKit;
@SerializedName("flagPrzIva")
private String flagPrzIva; private String flagPrzIva;
@SerializedName("flagCheckPlafond")
private String flagCheckPlafond; private String flagCheckPlafond;
@SerializedName("tipoEmissione")
private String tipoEmissione; private String tipoEmissione;
@SerializedName("setDataDecorrenza2DataRic")
private String setDataDecorrenza2DataRic; private String setDataDecorrenza2DataRic;
@SerializedName("totSpese")
private BigDecimal totSpese; private BigDecimal totSpese;
@SerializedName("chkArtListino")
private String chkArtListino; private String chkArtListino;
private Date dataCmov; @SerializedName("dataCmov")
private LocalDate dataCmov;
@SerializedName("reso")
private String reso; private String reso;
@SerializedName("numCmovAutofattura")
private Integer numCmovAutofattura; private Integer numCmovAutofattura;
@SerializedName("dtbTipi")
private Object dtbTipi; private Object dtbTipi;
@SerializedName("vtbClie")
private Object vtbClie; private Object vtbClie;
@SerializedName("jrlSchmacDoc")
private List<Object> jrlSchmacDoc; private List<Object> jrlSchmacDoc;
@SerializedName("arlSchaccDoc")
private List<Object> arlSchaccDoc; private List<Object> arlSchaccDoc;
@SerializedName("dtbDocr")
private List<DtbDocr> dtbDocr; private List<DtbDocr> dtbDocr;
@SerializedName("dtbDocs")
private List<Object> dtbDocs; private List<Object> dtbDocs;
@SerializedName("mtbColt")
private List<MtbColt> mtbColt; private List<MtbColt> mtbColt;
@SerializedName("drlDocAttached")
private List<Object> drlDocAttached; private List<Object> drlDocAttached;
@SerializedName("dtbDocCarat")
private List<Object> dtbDocCarat; private List<Object> dtbDocCarat;
@SerializedName("ctbScad")
private List<Object> ctbScad; private List<Object> ctbScad;
@SerializedName("ctbMovt")
private Object ctbMovt; private Object ctbMovt;
@SerializedName("ctbMovi")
private List<Object> ctbMovi; private List<Object> ctbMovi;
@SerializedName("costi")
private List<Object> costi; private List<Object> costi;
@SerializedName("ntbDoct")
private List<Object> ntbDoct; private List<Object> ntbDoct;
@SerializedName("dtbDoctBolle")
private List<DtbDoct> dtbDoctBolle; private List<DtbDoct> dtbDoctBolle;
private Object dtbInum;
public DtbDoct() {
type = "dtb_doct";
}
public String getCodAnag() { public String getCodAnag() {
return codAnag; return codAnag;
} }
@@ -141,11 +257,11 @@ public class DtbDoct {
return this; return this;
} }
public Date getDataDoc() { public LocalDate getDataDoc() {
return dataDoc; return dataDoc;
} }
public DtbDoct setDataDoc(Date dataDoc) { public DtbDoct setDataDoc(LocalDate dataDoc) {
this.dataDoc = dataDoc; this.dataDoc = dataDoc;
return this; return this;
} }
@@ -420,74 +536,74 @@ public class DtbDoct {
return this; return this;
} }
public Date getDataChkDoc() { public LocalDate getDataChkDoc() {
return dataChkDoc; return dataChkDoc;
} }
public DtbDoct setDataChkDoc(Date dataChkDoc) { public DtbDoct setDataChkDoc(LocalDate dataChkDoc) {
this.dataChkDoc = dataChkDoc; this.dataChkDoc = dataChkDoc;
return this; return this;
} }
public Date getDataDocVal() { public LocalDate getDataDocVal() {
return dataDocVal; return dataDocVal;
} }
public DtbDoct setDataDocVal(Date dataDocVal) { public DtbDoct setDataDocVal(LocalDate dataDocVal) {
this.dataDocVal = dataDocVal; this.dataDocVal = dataDocVal;
return this; return this;
} }
public Date getDataInizTrasp() { public LocalDate getDataInizTrasp() {
return dataInizTrasp; return dataInizTrasp;
} }
public DtbDoct setDataInizTrasp(Date dataInizTrasp) { public DtbDoct setDataInizTrasp(LocalDate dataInizTrasp) {
this.dataInizTrasp = dataInizTrasp; this.dataInizTrasp = dataInizTrasp;
return this; return this;
} }
public Date getDataIns() { public LocalDate getDataIns() {
return dataIns; return dataIns;
} }
public DtbDoct setDataIns(Date dataIns) { public DtbDoct setDataIns(LocalDate dataIns) {
this.dataIns = dataIns; this.dataIns = dataIns;
return this; return this;
} }
public Date getDataOrd() { public LocalDate getDataOrd() {
return dataOrd; return dataOrd;
} }
public DtbDoct setDataOrd(Date dataOrd) { public DtbDoct setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd; this.dataOrd = dataOrd;
return this; return this;
} }
public Date getDataReg() { public LocalDate getDataReg() {
return dataReg; return dataReg;
} }
public DtbDoct setDataReg(Date dataReg) { public DtbDoct setDataReg(LocalDate dataReg) {
this.dataReg = dataReg; this.dataReg = dataReg;
return this; return this;
} }
public Date getDataRifScad() { public LocalDate getDataRifScad() {
return dataRifScad; return dataRifScad;
} }
public DtbDoct setDataRifScad(Date dataRifScad) { public DtbDoct setDataRifScad(LocalDate dataRifScad) {
this.dataRifScad = dataRifScad; this.dataRifScad = dataRifScad;
return this; return this;
} }
public Date getDataUltMod() { public LocalDate getDataUltMod() {
return dataUltMod; return dataUltMod;
} }
public DtbDoct setDataUltMod(Date dataUltMod) { public DtbDoct setDataUltMod(LocalDate dataUltMod) {
this.dataUltMod = dataUltMod; this.dataUltMod = dataUltMod;
return this; return this;
} }
@@ -852,11 +968,11 @@ public class DtbDoct {
return this; return this;
} }
public Date getDataCons() { public LocalDate getDataCons() {
return dataCons; return dataCons;
} }
public DtbDoct setDataCons(Date dataCons) { public DtbDoct setDataCons(LocalDate dataCons) {
this.dataCons = dataCons; this.dataCons = dataCons;
return this; return this;
} }
@@ -969,11 +1085,11 @@ public class DtbDoct {
return this; return this;
} }
public Date getDataCmov() { public LocalDate getDataCmov() {
return dataCmov; return dataCmov;
} }
public DtbDoct setDataCmov(Date dataCmov) { public DtbDoct setDataCmov(LocalDate dataCmov) {
this.dataCmov = dataCmov; this.dataCmov = dataCmov;
return this; return this;
} }
@@ -1130,13 +1246,4 @@ public class DtbDoct {
this.dtbDoctBolle = dtbDoctBolle; this.dtbDoctBolle = dtbDoctBolle;
return this; return this;
} }
public Object getDtbInum() {
return dtbInum;
}
public DtbDoct setDtbInum(Object dtbInum) {
this.dtbInum = dtbInum;
return this;
}
} }

View File

@@ -1,45 +1,120 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
public class DtbOrdSteps extends EntityBase { public class DtbOrdSteps extends EntityBase {
@SerializedName("dataOrd")
private String dataOrd; private String dataOrd;
@SerializedName("gestione")
private String gestione; private String gestione;
@SerializedName("idRiga")
private Integer idRiga; private Integer idRiga;
@SerializedName("idStep")
private Integer idStep; private Integer idStep;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("activityId")
private String activityId; private String activityId;
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codDtip")
private String codDtip; private String codDtip;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("codProdPri")
private String codProdPri; private String codProdPri;
@SerializedName("dataDoc")
private String dataDoc; private String dataDoc;
@SerializedName("dataFine")
private String dataFine; private String dataFine;
@SerializedName("dataIniz")
private String dataIniz; private String dataIniz;
@SerializedName("descrizioneAttivita")
private String descrizioneAttivita; private String descrizioneAttivita;
@SerializedName("flagTipoTempo")
private String flagTipoTempo; private String flagTipoTempo;
@SerializedName("hrNum")
private Integer hrNum; private Integer hrNum;
@SerializedName("hrTime")
private BigDecimal hrTime; private BigDecimal hrTime;
@SerializedName("idRigaDoc")
private String idRigaDoc; private String idRigaDoc;
@SerializedName("note")
private String note; private String note;
@SerializedName("numDoc")
private String numDoc; private String numDoc;
@SerializedName("numFase")
private Integer numFase; private Integer numFase;
@SerializedName("qtaAllocata")
private BigDecimal qtaAllocata; private BigDecimal qtaAllocata;
@SerializedName("qtaDisp")
private BigDecimal qtaDisp; private BigDecimal qtaDisp;
@SerializedName("qtaDispImmessa")
private BigDecimal qtaDispImmessa; private BigDecimal qtaDispImmessa;
@SerializedName("qtaImmesse")
private BigDecimal qtaImmesse; private BigDecimal qtaImmesse;
@SerializedName("qtaInProd")
private BigDecimal qtaInProd; private BigDecimal qtaInProd;
@SerializedName("qtaLav")
private BigDecimal qtaLav; private BigDecimal qtaLav;
@SerializedName("qtaProd")
private BigDecimal qtaProd; private BigDecimal qtaProd;
@SerializedName("qtaScartate")
private BigDecimal qtaScartate; private BigDecimal qtaScartate;
@SerializedName("qtaTrasferite")
private BigDecimal qtaTrasferite; private BigDecimal qtaTrasferite;
@SerializedName("rapConvLav")
private BigDecimal rapConvLav; private BigDecimal rapConvLav;
@SerializedName("serDoc")
private String serDoc; private String serDoc;
@SerializedName("untMisLav")
private String untMisLav; private String untMisLav;
public DtbOrdSteps() {
type = "dtb_ord_steps";
}
public String getDataOrd() { public String getDataOrd() {
return dataOrd; return dataOrd;
} }

View File

@@ -1,120 +1,325 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate;
public class DtbOrdt extends EntityBase { public class DtbOrdt extends EntityBase {
private String dataOrd;
@SerializedName("dataOrd")
private LocalDate dataOrd;
@SerializedName("gestione")
private String gestione; private String gestione;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("acconto")
private BigDecimal acconto; private BigDecimal acconto;
@SerializedName("activityId")
private String activityId; private String activityId;
@SerializedName("activityTypeId")
private String activityTypeId; private String activityTypeId;
@SerializedName("aspettoBeni")
private String aspettoBeni; private String aspettoBeni;
@SerializedName("causaleTrasp")
private String causaleTrasp; private String causaleTrasp;
@SerializedName("codAbi")
private String codAbi; private String codAbi;
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codAuto")
private String codAuto; private String codAuto;
@SerializedName("codBanc")
private String codBanc; private String codBanc;
@SerializedName("codBancAzi")
private String codBancAzi; private String codBancAzi;
@SerializedName("codCab")
private String codCab; private String codCab;
@SerializedName("codDgrpArt")
private String codDgrpArt; private String codDgrpArt;
@SerializedName("codDivi")
private String codDivi; private String codDivi;
@SerializedName("codEtic")
private String codEtic; private String codEtic;
@SerializedName("codFornTd")
private String codFornTd; private String codFornTd;
@SerializedName("codJcom")
private String codJcom; private String codJcom;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("codPaga")
private String codPaga; private String codPaga;
@SerializedName("codProd")
private String codProd; private String codProd;
@SerializedName("codTcolUi")
private String codTcolUi; private String codTcolUi;
@SerializedName("codTcolUl")
private String codTcolUl; private String codTcolUl;
@SerializedName("codVage")
private String codVage; private String codVage;
@SerializedName("codVage2")
private String codVage2; private String codVage2;
@SerializedName("codVdes")
private String codVdes; private String codVdes;
@SerializedName("codVvet")
private String codVvet; private String codVvet;
@SerializedName("codVvet2")
private String codVvet2; private String codVvet2;
@SerializedName("codVzon")
private String codVzon; private String codVzon;
@SerializedName("colliPedana")
private BigDecimal colliPedana; private BigDecimal colliPedana;
@SerializedName("compilatoDa")
private String compilatoDa; private String compilatoDa;
@SerializedName("controllatoDa")
private String controllatoDa; private String controllatoDa;
@SerializedName("dataConsProd")
private String dataConsProd; private String dataConsProd;
@SerializedName("dataConsProdMax")
private String dataConsProdMax; private String dataConsProdMax;
@SerializedName("dataEsportazione")
private String dataEsportazione; private String dataEsportazione;
@SerializedName("dataConferma")
private String dataConferma; private String dataConferma;
@SerializedName("dataInizProd")
private String dataInizProd; private String dataInizProd;
@SerializedName("dataInizTrasp")
private String dataInizTrasp; private String dataInizTrasp;
@SerializedName("dataInsOrd")
private String dataInsOrd; private String dataInsOrd;
@SerializedName("dataOrdRif")
private String dataOrdRif; private String dataOrdRif;
@SerializedName("rifDdataOrd")
private String rifDdataOrd; private String rifDdataOrd;
@SerializedName("dataRicezione")
private String dataRicezione; private String dataRicezione;
@SerializedName("dataRifScad")
private String dataRifScad; private String dataRifScad;
@SerializedName("dataUltMod")
private String dataUltMod; private String dataUltMod;
@SerializedName("descrEstesaProd")
private String descrEstesaProd; private String descrEstesaProd;
@SerializedName("descrizionePaga")
private String descrizionePaga; private String descrizionePaga;
@SerializedName("descrizioneProd")
private String descrizioneProd; private String descrizioneProd;
@SerializedName("eanFidelity")
private String eanFidelity; private String eanFidelity;
@SerializedName("flagAnnulla")
private String flagAnnulla; private String flagAnnulla;
@SerializedName("flagEscRoyal")
private String flagEscRoyal; private String flagEscRoyal;
@SerializedName("flagEvasoForzato")
private String flagEvasoForzato; private String flagEvasoForzato;
@SerializedName("flagEvasoProd")
private String flagEvasoProd; private String flagEvasoProd;
@SerializedName("flagPrzScontati")
private String flagPrzScontati; private String flagPrzScontati;
@SerializedName("flagSospeso")
private String flagSospeso; private String flagSospeso;
@SerializedName("flagTipologia")
private String flagTipologia; private String flagTipologia;
@SerializedName("gestioneRif")
private String gestioneRif; private String gestioneRif;
@SerializedName("itemId")
private String itemId; private String itemId;
@SerializedName("listino")
private String listino; private String listino;
@SerializedName("livello")
private Integer livello; private Integer livello;
@SerializedName("mezzo")
private String mezzo; private String mezzo;
@SerializedName("modificatoDa")
private String modificatoDa; private String modificatoDa;
@SerializedName("nettoMerce")
private BigDecimal nettoMerce; private BigDecimal nettoMerce;
@SerializedName("nolo")
private BigDecimal nolo; private BigDecimal nolo;
@SerializedName("note")
private String note; private String note;
@SerializedName("numColli")
private String numColli; private String numColli;
@SerializedName("numCons")
private String numCons; private String numCons;
@SerializedName("numFase")
private Integer numFase; private Integer numFase;
@SerializedName("numOrdProvv")
private Integer numOrdProvv; private Integer numOrdProvv;
@SerializedName("numOrdRif")
private Integer numOrdRif; private Integer numOrdRif;
@SerializedName("rifNumOrd")
private Integer rifNumOrd; private Integer rifNumOrd;
@SerializedName("partitaMag")
private String partitaMag; private String partitaMag;
@SerializedName("percEsclStat")
private BigDecimal percEsclStat; private BigDecimal percEsclStat;
@SerializedName("personaRif")
private String personaRif; private String personaRif;
@SerializedName("peso")
private String peso; private String peso;
@SerializedName("porto")
private String porto; private String porto;
@SerializedName("qtaEvasaProd")
private BigDecimal qtaEvasaProd; private BigDecimal qtaEvasaProd;
@SerializedName("qtaPrenotataRep")
private BigDecimal qtaPrenotataRep; private BigDecimal qtaPrenotataRep;
@SerializedName("qtaProd")
private BigDecimal qtaProd; private BigDecimal qtaProd;
@SerializedName("rapConvProd")
private BigDecimal rapConvProd; private BigDecimal rapConvProd;
@SerializedName("rfid")
private String rfid; private String rfid;
@SerializedName("rifOrd")
private String rifOrd; private String rifOrd;
@SerializedName("rigaOrdRif")
private Integer rigaOrdRif; private Integer rigaOrdRif;
@SerializedName("sconto1")
private BigDecimal sconto1; private BigDecimal sconto1;
@SerializedName("sconto2")
private BigDecimal sconto2; private BigDecimal sconto2;
@SerializedName("sconto3")
private BigDecimal sconto3; private BigDecimal sconto3;
@SerializedName("sconto4")
private BigDecimal sconto4; private BigDecimal sconto4;
@SerializedName("serie")
private String serie; private String serie;
@SerializedName("termCons")
private String termCons; private String termCons;
@SerializedName("tipoAnag")
private String tipoAnag; private String tipoAnag;
@SerializedName("totFasi")
private Integer totFasi; private Integer totFasi;
@SerializedName("totImponib")
private BigDecimal totImponib; private BigDecimal totImponib;
@SerializedName("totIva")
private BigDecimal totIva; private BigDecimal totIva;
@SerializedName("totMerce")
private BigDecimal totMerce; private BigDecimal totMerce;
@SerializedName("totOmaggi")
private BigDecimal totOmaggi; private BigDecimal totOmaggi;
@SerializedName("totProvvig")
private BigDecimal totProvvig; private BigDecimal totProvvig;
@SerializedName("untMisProd")
private String untMisProd; private String untMisProd;
@SerializedName("flagPrzIva")
private String flagPrzIva; private String flagPrzIva;
@SerializedName("noteConferma")
private String noteConferma; private String noteConferma;
@SerializedName("codJflav")
private String codJflav; private String codJflav;
public DtbOrdt() { public DtbOrdt() {
this.type = "dtb_ordt"; this.type = "dtb_ordt";
} }
public String getDataOrd() { public LocalDate getDataOrd() {
return dataOrd; return dataOrd;
} }
public DtbOrdt setDataOrd(String dataOrd) { public DtbOrdt setDataOrd(LocalDate dataOrd) {
this.dataOrd = dataOrd; this.dataOrd = dataOrd;
return this; return this;
} }

View File

@@ -1,11 +1,15 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import android.util.Log; import android.util.Log;
import com.google.gson.annotations.SerializedName;
public abstract class EntityBase extends BaseRestDTO implements Cloneable{ public abstract class EntityBase extends BaseRestDTO implements Cloneable{
@SerializedName("operation")
public String operation; public String operation;
@SerializedName("type")
public String type; public String type;
@SerializedName("onlyPkMaster")
public boolean onlyPkMaster = false; public boolean onlyPkMaster = false;
public String getOperation() { public String getOperation() {

View File

@@ -1,14 +1,18 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import java.util.Date; import com.google.gson.annotations.SerializedName;
import it.integry.integrywmsnative.core.utility.UtilityDate; import java.time.LocalDate;
public class FiltroOrdineDTO { public class FiltroOrdineDTO {
@SerializedName("gestioneOrd")
private String gestioneOrd; private String gestioneOrd;
private String dataOrd; @SerializedName("dataOrd")
private String dataCons; private LocalDate dataOrd;
@SerializedName("dataCons")
private LocalDate dataCons;
@SerializedName("numOrd")
private int numOrd; private int numOrd;
public String getGestioneOrd() { public String getGestioneOrd() {
@@ -20,44 +24,25 @@ public class FiltroOrdineDTO {
return this; return this;
} }
public String getDataOrdS() {
public LocalDate getDataOrd() {
return dataOrd; return dataOrd;
} }
public Date getDataOrdD() { public FiltroOrdineDTO setDataOrd(LocalDate dataOrd) {
return UtilityDate.recognizeDateWithExceptionHandler(getDataOrdS());
}
public FiltroOrdineDTO setDataOrd(String dataOrd) {
this.dataOrd = dataOrd; this.dataOrd = dataOrd;
return this; return this;
} }
public FiltroOrdineDTO setDataOrd(Date dataOrd) { public LocalDate getDataCons() {
this.dataOrd = UtilityDate.formatDate(dataOrd, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return this;
}
public String getDataConsS() {
return dataCons; return dataCons;
} }
public Date getDataConsD() { public FiltroOrdineDTO setDataCons(LocalDate dataCons) {
return UtilityDate.recognizeDateWithExceptionHandler(getDataConsS());
}
public FiltroOrdineDTO setDataCons(String dataCons) {
this.dataCons = dataCons; this.dataCons = dataCons;
return this; return this;
} }
public FiltroOrdineDTO setDataCons(Date dataCons) {
if(dataCons != null) {
this.dataCons = UtilityDate.formatDate(dataCons, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
}
return this;
}
public int getNumOrd() { public int getNumOrd() {
return numOrd; return numOrd;
} }
@@ -77,8 +62,8 @@ public class FiltroOrdineDTO {
if (getNumOrd() != that.getNumOrd()) return false; if (getNumOrd() != that.getNumOrd()) return false;
if (getGestioneOrd() != null ? !getGestioneOrd().equals(that.getGestioneOrd()) : that.getGestioneOrd() != null) if (getGestioneOrd() != null ? !getGestioneOrd().equals(that.getGestioneOrd()) : that.getGestioneOrd() != null)
return false; return false;
if (dataOrd != null ? !dataOrd.equals(that.dataOrd) : that.dataOrd != null) return false; if (dataOrd != null ? !dataOrd.isEqual(that.dataOrd) : that.dataOrd != null) return false;
return dataCons != null ? dataCons.equals(that.dataCons) : that.dataCons == null; return dataCons != null ? dataCons.isEqual(that.dataCons) : that.dataCons == null;
} }
@Override @Override

View File

@@ -1,48 +1,88 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
public class GtbAnag extends EntityBase { public class GtbAnag extends EntityBase {
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("ragSoc")
private String ragSoc; private String ragSoc;
@SerializedName("indirizzo")
private String indirizzo; private String indirizzo;
@SerializedName("cap")
private String cap; private String cap;
@SerializedName("citta")
private String citta; private String citta;
@SerializedName("prov")
private String prov; private String prov;
@SerializedName("nazione")
private String nazione; private String nazione;
@SerializedName("telefono")
private String telefono; private String telefono;
@SerializedName("fax")
private String fax; private String fax;
@SerializedName("partIva")
private String partIva; private String partIva;
@SerializedName("codFisc")
private String codFisc; private String codFisc;
@SerializedName("note")
private String note; private String note;
@SerializedName("personaRif")
private String personaRif; private String personaRif;
@SerializedName("allegato")
private String allegato; private String allegato;
@SerializedName("eMail")
private String eMail; private String eMail;
@SerializedName("eMailPec")
private String eMailPec; private String eMailPec;
@SerializedName("flagPersonaFg")
private String flagPersonaFg; private String flagPersonaFg;
@SerializedName("sesso")
private String sesso; private String sesso;
@SerializedName("codCentroAzi")
private String codCentroAzi; private String codCentroAzi;
@SerializedName("codRuop")
private String codRuop; private String codRuop;
@SerializedName("dataNascita")
private Date dataNascita; private Date dataNascita;
@SerializedName("luogoNascita")
private String luogoNascita; private String luogoNascita;
@SerializedName("provNascita")
private String provNascita; private String provNascita;
@SerializedName("nome")
private String nome; private String nome;
@SerializedName("ragSoc2")
private String ragSoc2; private String ragSoc2;
@SerializedName("classeMerito")
private Integer classeMerito; private Integer classeMerito;
@SerializedName("dataIns")
private Date dataIns; private Date dataIns;
@SerializedName("numCell")
private String numCell; private String numCell;
@SerializedName("cciaa")
private String cciaa; private String cciaa;
@SerializedName("tipoAzienda")
private String tipoAzienda; private String tipoAzienda;
@SerializedName("cuuPa")
private String cuuPa; private String cuuPa;
@SerializedName("cognome")
private String cognome; private String cognome;
@SerializedName("diacod")
private String diacod; private String diacod;
@SerializedName("lat")
private BigDecimal lat; private BigDecimal lat;
@SerializedName("lng")
private BigDecimal lng; private BigDecimal lng;
@SerializedName("flagInformativa")
private String flagInformativa; private String flagInformativa;
@SerializedName("flagConsenso")
private String flagConsenso; private String flagConsenso;
@SerializedName("precode")
private String precode; private String precode;
@SerializedName("insDestinatario")
private Boolean insDestinatario; private Boolean insDestinatario;
public GtbAnag() { public GtbAnag() {

View File

@@ -1,11 +1,18 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
public class JtbComt extends EntityBase { public class JtbComt extends EntityBase {
@SerializedName("codJcom")
private String codJcom; private String codJcom;
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("codJflav")
private String codJflav; private String codJflav;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
public JtbComt() { public JtbComt() {

View File

@@ -2,25 +2,42 @@ package it.integry.integrywmsnative.core.model;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
public class JtbFasi extends EntityBase { public class JtbFasi extends EntityBase {
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("codJfasParent")
private String codJfasParent; private String codJfasParent;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
@SerializedName("descrizEstesa")
private String descrizEstesa; private String descrizEstesa;
@SerializedName("codMfas")
private String codMfas; private String codMfas;
@SerializedName("pathIcona")
private String pathIcona; private String pathIcona;
@SerializedName("umAllocazione")
private String umAllocazione; private String umAllocazione;
@SerializedName("maxAllocazione")
private BigDecimal maxAllocazione; private BigDecimal maxAllocazione;
@SerializedName("codJCal")
private String codJCal; private String codJCal;
@SerializedName("idJfas")
private String idJfas; private String idJfas;
@SerializedName("flagAttivo")
private String flagAttivo; private String flagAttivo;
@SerializedName("flagCheck")
private String flagCheck; private String flagCheck;
@SerializedName("umProd")
private String umProd; private String umProd;
@SerializedName("prodStd")
private BigDecimal prodStd; private BigDecimal prodStd;
@SerializedName("codMdepLav")
private String codMdepLav; private String codMdepLav;
@SerializedName("tipoProd")
private String tipoProd; private String tipoProd;
public JtbFasi() { public JtbFasi() {

View File

@@ -1,6 +1,8 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -11,91 +13,179 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class MtbAart extends EntityBase { public class MtbAart extends EntityBase {
@SerializedName("codMart")
private String codMart; private String codMart;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
@SerializedName("untMis")
private String untMis; private String untMis;
@SerializedName("barCode")
private String barCode; private String barCode;
@SerializedName("pesoKg")
private BigDecimal pesoKg; private BigDecimal pesoKg;
@SerializedName("qtaCnf")
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
@SerializedName("codAliq")
private String codAliq; private String codAliq;
@SerializedName("codScoArt")
private String codScoArt; private String codScoArt;
@SerializedName("codTcolUi")
private String codTcolUi; private String codTcolUi;
@SerializedName("codTcolUl")
private String codTcolUl; private String codTcolUl;
@SerializedName("articoloComposto")
private String articoloComposto; private String articoloComposto;
@SerializedName("esposizioneComp")
private String esposizioneComp; private String esposizioneComp;
@SerializedName("descrizioneEstesa")
private String descrizioneEstesa; private String descrizioneEstesa;
@SerializedName("codUltForn")
private String codUltForn; private String codUltForn;
@SerializedName("dataUltCar")
private String dataUltCar; private String dataUltCar;
@SerializedName("valUltCar")
private BigDecimal valUltCar; private BigDecimal valUltCar;
@SerializedName("codUltClie")
private String codUltClie; private String codUltClie;
@SerializedName("dataUltScar")
private String dataUltScar; private String dataUltScar;
@SerializedName("valUltScar")
private BigDecimal valUltScar; private BigDecimal valUltScar;
@SerializedName("tipoCodice")
private String tipoCodice; private String tipoCodice;
@SerializedName("note")
private String note; private String note;
@SerializedName("posizione")
private String posizione; private String posizione;
@SerializedName("colliPedana")
private BigDecimal colliPedana; private BigDecimal colliPedana;
@SerializedName("untMis2")
private String untMis2; private String untMis2;
@SerializedName("rapConv2")
private BigDecimal rapConv2; private BigDecimal rapConv2;
@SerializedName("flagInclListino")
private String flagInclListino; private String flagInclListino;
@SerializedName("untMis3")
private String untMis3; private String untMis3;
@SerializedName("rapConv3")
private BigDecimal rapConv3; private BigDecimal rapConv3;
@SerializedName("codMartStat")
private String codMartStat; private String codMartStat;
@SerializedName("codMcon")
private String codMcon; private String codMcon;
@SerializedName("codMgrp")
private String codMgrp; private String codMgrp;
@SerializedName("codMsfa")
private String codMsfa; private String codMsfa;
@SerializedName("codMsgr")
private String codMsgr; private String codMsgr;
@SerializedName("codMstp")
private String codMstp; private String codMstp;
@SerializedName("codMtip")
private String codMtip; private String codMtip;
@SerializedName("descrizioneStat")
private String descrizioneStat; private String descrizioneStat;
@SerializedName("flagStato")
private String flagStato; private String flagStato;
@SerializedName("cambioDiviCar")
private BigDecimal cambioDiviCar; private BigDecimal cambioDiviCar;
@SerializedName("cambioDiviScar")
private BigDecimal cambioDiviScar; private BigDecimal cambioDiviScar;
@SerializedName("ggScadPartita")
private Integer ggScadPartita; private Integer ggScadPartita;
@SerializedName("volumeMc")
private BigDecimal volumeMc; private BigDecimal volumeMc;
@SerializedName("flagEsponiPrz")
private String flagEsponiPrz; private String flagEsponiPrz;
@SerializedName("dataUltVar")
private String dataUltVar; private String dataUltVar;
@SerializedName("percSfrido")
private BigDecimal percSfrido; private BigDecimal percSfrido;
@SerializedName("codBarreImb")
private String codBarreImb; private String codBarreImb;
@SerializedName("flagCalcPrz")
private String flagCalcPrz; private String flagCalcPrz;
@SerializedName("esposizioneCompAcq")
private String esposizioneCompAcq; private String esposizioneCompAcq;
@SerializedName("flagCalcPrzAcq")
private String flagCalcPrzAcq; private String flagCalcPrzAcq;
@SerializedName("diacod")
private String diacod; private String diacod;
@SerializedName("plu")
private String plu; private String plu;
@SerializedName("partIvaProd")
private String partIvaProd; private String partIvaProd;
@SerializedName("ragSocProd")
private String ragSocProd; private String ragSocProd;
@SerializedName("flagRapConvVariabile")
private String flagRapConvVariabile; private String flagRapConvVariabile;
@SerializedName("flagMovArtMag")
private String flagMovArtMag; private String flagMovArtMag;
@SerializedName("flagTracciabilita")
private String flagTracciabilita; private String flagTracciabilita;
@SerializedName("taraKg")
private BigDecimal taraKg; private BigDecimal taraKg;
@SerializedName("colliStrato")
private BigDecimal colliStrato; private BigDecimal colliStrato;
@SerializedName("flagQtaCnfFissa")
private String flagQtaCnfFissa; private String flagQtaCnfFissa;
@SerializedName("flagColliPedanaFisso")
private String flagColliPedanaFisso; private String flagColliPedanaFisso;
@SerializedName("codCconCosti")
private String codCconCosti; private String codCconCosti;
@SerializedName("codCconRicavi")
private String codCconRicavi; private String codCconRicavi;
@SerializedName("codDgrpArt")
private String codDgrpArt; private String codDgrpArt;
@SerializedName("codDiviCar")
private String codDiviCar; private String codDiviCar;
@SerializedName("codDiviScar")
private String codDiviScar; private String codDiviScar;
@SerializedName("codEcrCat")
private String codEcrCat; private String codEcrCat;
@SerializedName("codEcrMcat")
private String codEcrMcat; private String codEcrMcat;
@SerializedName("codEcrRep")
private String codEcrRep; private String codEcrRep;
@SerializedName("codEcrStipo")
private String codEcrStipo; private String codEcrStipo;
@SerializedName("codEcrTipo")
private String codEcrTipo; private String codEcrTipo;
@SerializedName("codGrpBolla")
private String codGrpBolla; private String codGrpBolla;
@SerializedName("ingredienti")
private String ingredienti; private String ingredienti;
@SerializedName("idArtEqui")
private String idArtEqui; private String idArtEqui;
@SerializedName("descrCassa")
private String descrCassa; private String descrCassa;
@SerializedName("codNcIntracee")
private String codNcIntracee; private String codNcIntracee;
@SerializedName("marchio")
private String marchio; private String marchio;
@SerializedName("sezione")
private Integer sezione; private Integer sezione;
@SerializedName("untMisRifPeso")
private UntMisRifPesoEnum untMisRifPeso; private UntMisRifPesoEnum untMisRifPeso;
@SerializedName("qtaEsistente")
private BigDecimal qtaEsistente; private BigDecimal qtaEsistente;
@SerializedName("qtaImpegnata")
private BigDecimal qtaImpegnata; private BigDecimal qtaImpegnata;
@SerializedName("numCnfEsistente")
private BigDecimal numCnfEsistente; private BigDecimal numCnfEsistente;
@SerializedName("numCnfImpegnata")
private BigDecimal numCnfImpegnata; private BigDecimal numCnfImpegnata;
@SerializedName("mtbUntMis")
private List<MtbUntMis> mtbUntMis; private List<MtbUntMis> mtbUntMis;
@SerializedName("mtbAartBarCode")
private List<MtbAartBarCode> mtbAartBarCode;
public enum UntMisRifPesoEnum { public enum UntMisRifPesoEnum {
C, C,
@@ -108,6 +198,110 @@ public class MtbAart extends EntityBase {
this.type = "mtb_aart"; this.type = "mtb_aart";
} }
public MtbAart(MtbAart other) {
this();
this.codMart = other.codMart;
this.descrizione = other.descrizione;
this.untMis = other.untMis;
this.barCode = other.barCode;
this.pesoKg = other.pesoKg; // BigDecimal è immutabile
this.qtaCnf = other.qtaCnf;
this.codAliq = other.codAliq;
this.codScoArt = other.codScoArt;
this.codTcolUi = other.codTcolUi;
this.codTcolUl = other.codTcolUl;
this.articoloComposto = other.articoloComposto;
this.esposizioneComp = other.esposizioneComp;
this.descrizioneEstesa = other.descrizioneEstesa;
this.codUltForn = other.codUltForn;
this.dataUltCar = other.dataUltCar;
this.valUltCar = other.valUltCar;
this.codUltClie = other.codUltClie;
this.dataUltScar = other.dataUltScar;
this.valUltScar = other.valUltScar;
this.tipoCodice = other.tipoCodice;
this.note = other.note;
this.posizione = other.posizione;
this.colliPedana = other.colliPedana;
this.untMis2 = other.untMis2;
this.rapConv2 = other.rapConv2;
this.flagInclListino = other.flagInclListino;
this.untMis3 = other.untMis3;
this.rapConv3 = other.rapConv3;
this.codMartStat = other.codMartStat;
this.codMcon = other.codMcon;
this.codMgrp = other.codMgrp;
this.codMsfa = other.codMsfa;
this.codMsgr = other.codMsgr;
this.codMstp = other.codMstp;
this.codMtip = other.codMtip;
this.descrizioneStat = other.descrizioneStat;
this.flagStato = other.flagStato;
this.cambioDiviCar = other.cambioDiviCar;
this.cambioDiviScar = other.cambioDiviScar;
this.ggScadPartita = other.ggScadPartita;
this.volumeMc = other.volumeMc;
this.flagEsponiPrz = other.flagEsponiPrz;
this.dataUltVar = other.dataUltVar;
this.percSfrido = other.percSfrido;
this.codBarreImb = other.codBarreImb;
this.flagCalcPrz = other.flagCalcPrz;
this.esposizioneCompAcq = other.esposizioneCompAcq;
this.flagCalcPrzAcq = other.flagCalcPrzAcq;
this.diacod = other.diacod;
this.plu = other.plu;
this.partIvaProd = other.partIvaProd;
this.ragSocProd = other.ragSocProd;
this.flagRapConvVariabile = other.flagRapConvVariabile;
this.flagMovArtMag = other.flagMovArtMag;
this.flagTracciabilita = other.flagTracciabilita;
this.taraKg = other.taraKg;
this.colliStrato = other.colliStrato;
this.flagQtaCnfFissa = other.flagQtaCnfFissa;
this.flagColliPedanaFisso = other.flagColliPedanaFisso;
this.codCconCosti = other.codCconCosti;
this.codCconRicavi = other.codCconRicavi;
this.codDgrpArt = other.codDgrpArt;
this.codDiviCar = other.codDiviCar;
this.codDiviScar = other.codDiviScar;
this.codEcrCat = other.codEcrCat;
this.codEcrMcat = other.codEcrMcat;
this.codEcrRep = other.codEcrRep;
this.codEcrStipo = other.codEcrStipo;
this.codEcrTipo = other.codEcrTipo;
this.codGrpBolla = other.codGrpBolla;
this.ingredienti = other.ingredienti;
this.idArtEqui = other.idArtEqui;
this.descrCassa = other.descrCassa;
this.codNcIntracee = other.codNcIntracee;
this.marchio = other.marchio;
this.sezione = other.sezione;
this.untMisRifPeso = other.untMisRifPeso; // Enum è immutabile
this.qtaEsistente = other.qtaEsistente;
this.qtaImpegnata = other.qtaImpegnata;
this.numCnfEsistente = other.numCnfEsistente;
this.numCnfImpegnata = other.numCnfImpegnata;
// Deep copy della lista
if (other.mtbUntMis != null) {
this.mtbUntMis = new ArrayList<>();
for (MtbUntMis untMis : other.mtbUntMis) {
this.mtbUntMis.add(untMis.clone()); // Assicurati che MtbUntMis abbia un costruttore di copia
}
}
if (other.mtbAartBarCode != null) {
this.mtbAartBarCode = new ArrayList<>();
for (MtbAartBarCode mtbAartBarCode : other.mtbAartBarCode) {
this.mtbAartBarCode.add(mtbAartBarCode.clone()); // Assicurati che MtbUntMis abbia un costruttore di copia
}
}
}
public boolean isFlagTracciabilitaBoolean() { public boolean isFlagTracciabilitaBoolean() {
return flagTracciabilita != null && flagTracciabilita.equalsIgnoreCase("S"); return flagTracciabilita != null && flagTracciabilita.equalsIgnoreCase("S");
} }
@@ -866,6 +1060,13 @@ public class MtbAart extends EntityBase {
return getMtbUntMis() != null && !getMtbUntMis().isEmpty() ? getMtbUntMis().get(0) : null; return getMtbUntMis() != null && !getMtbUntMis().isEmpty() ? getMtbUntMis().get(0) : null;
} }
public List<MtbAartBarCode> getMtbAartBarCode() {
return mtbAartBarCode;
}
public void setMtbAartBarCode(List<MtbAartBarCode> mtbAartBarCode) {
this.mtbAartBarCode = mtbAartBarCode;
}
@Override @Override
public boolean equals(Object o) { public boolean equals(Object o) {

View File

@@ -0,0 +1,78 @@
package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal;
public class MtbAartBarCode extends EntityBase {
@SerializedName("codBarre")
private String codBarre;
@SerializedName("codMart")
private String codMart;
@SerializedName("qtaCnf")
private BigDecimal qtaCnf;
@SerializedName("flagPrimario")
private String flagPrimario;
@SerializedName("tipoCodBarre")
private String tipoCodBarre;
public MtbAartBarCode() {
this.type = "mtb_aart_bar_code";
}
public String getCodBarre() {
return codBarre;
}
public void setCodBarre(String codBarre) {
this.codBarre = codBarre;
}
public String getCodMart() {
return codMart;
}
public void setCodMart(String codMart) {
this.codMart = codMart;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public void setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
}
public String getFlagPrimario() {
return flagPrimario;
}
public void setFlagPrimario(String flagPrimario) {
this.flagPrimario = flagPrimario;
}
public String getTipoCodBarre() {
return tipoCodBarre;
}
public void setTipoCodBarre(String tipoCodBarre) {
this.tipoCodBarre = tipoCodBarre;
}
/**
* Crea una copia dell'oggetto MtbAartBarCode corrente
* @return Una nuova istanza di MtbAartBarCode con gli stessi valori
*/
@Override
public MtbAartBarCode clone() {
MtbAartBarCode clone = new MtbAartBarCode();
clone.setCodBarre(this.codBarre);
clone.setCodMart(this.codMart);
clone.setQtaCnf(this.qtaCnf != null ? new BigDecimal(this.qtaCnf.toString()) : null);
clone.setFlagPrimario(this.flagPrimario);
clone.setTipoCodBarre(this.tipoCodBarre);
return clone;
}
}

View File

@@ -1,9 +1,16 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import com.google.gson.annotations.SerializedName;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import java.util.Objects;
import it.integry.integrywmsnative.core.model.key.DtbDocrKey;
import it.integry.integrywmsnative.core.model.key.DtbDoctKey;
import it.integry.integrywmsnative.core.model.key.MtbColrKey;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -11,48 +18,102 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class MtbColr extends EntityBase { public class MtbColr extends EntityBase {
@SerializedName("gestione")
private String gestione; private String gestione;
@SerializedName("serCollo")
private String serCollo; private String serCollo;
@SerializedName("numCollo")
private Integer numCollo; private Integer numCollo;
private String dataCollo; @SerializedName("dataCollo")
private LocalDate dataCollo;
@SerializedName("riga")
private Integer riga; private Integer riga;
@SerializedName("rigaOrd")
private Integer rigaOrd; private Integer rigaOrd;
@SerializedName("codMart")
private String codMart; private String codMart;
@SerializedName("codBarre")
private String codBarre; private String codBarre;
@SerializedName("codCol")
private String codCol; private String codCol;
@SerializedName("codTagl")
private String codTagl; private String codTagl;
@SerializedName("partitaMag")
private String partitaMag; private String partitaMag;
@SerializedName("gestioneRif")
private String gestioneRif; private String gestioneRif;
@SerializedName("serColloRif")
private String serColloRif; private String serColloRif;
@SerializedName("note")
private String note; private String note;
@SerializedName("dataOrd")
private LocalDate dataOrd; private LocalDate dataOrd;
private String dataColloRif; @SerializedName("dataColloRif")
private LocalDate dataColloRif;
@SerializedName("qtaCnf")
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
@SerializedName("qtaCol")
private BigDecimal qtaCol; private BigDecimal qtaCol;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("numEtich")
private Integer numEtich; private Integer numEtich;
@SerializedName("numColloRif")
private Integer numColloRif; private Integer numColloRif;
private String datetimeRow; @SerializedName("datetimeRow")
private LocalDateTime datetimeRow;
@SerializedName("codJcom")
private String codJcom; private String codJcom;
@SerializedName("numCnf")
private BigDecimal numCnf; private BigDecimal numCnf;
@SerializedName("insPartitaMag")
private String insPartitaMag; private String insPartitaMag;
@SerializedName("mtbPartitaMag_descrizione")
private String mtbPartitaMag_descrizione; private String mtbPartitaMag_descrizione;
@SerializedName("dataScadPartita")
private LocalDate dataScadPartita; private LocalDate dataScadPartita;
@SerializedName("descrizione")
private String descrizione; private String descrizione;
@SerializedName("untMis")
private String untMis; private String untMis;
@SerializedName("causale")
private Integer causale; private Integer causale;
@SerializedName("utente")
private String utente; private String utente;
@SerializedName("codAnagDoc")
private String codAnagDoc; private String codAnagDoc;
@SerializedName("codDtipDoc")
private String codDtipDoc; private String codDtipDoc;
private String dataDoc; @SerializedName("dataDoc")
private LocalDate dataDoc;
@SerializedName("serDoc")
private String serDoc; private String serDoc;
@SerializedName("numDoc")
private Integer numDoc; private Integer numDoc;
@SerializedName("idRigaDoc")
private Integer idRigaDoc; private Integer idRigaDoc;
@SerializedName("pesoNettoKg")
private BigDecimal pesoNettoKg; private BigDecimal pesoNettoKg;
@SerializedName("pesoLordoKg")
private BigDecimal pesoLordoKg; private BigDecimal pesoLordoKg;
@SerializedName("barcodeUlIn")
private String barcodeUlIn;
@SerializedName("barcodeUlOut")
private String barcodeUlOut;
@SerializedName("codMdepIn")
private String codMdepIn;
@SerializedName("codMdepOut")
private String codMdepOut;
@SerializedName("posizioneIn")
private String posizioneIn;
@SerializedName("posizioneOut")
private String posizioneOut;
@SerializedName("mtbAart")
private MtbAart mtbAart; private MtbAart mtbAart;
@SerializedName("mtbPartitaMag")
private MtbPartitaMag mtbPartitaMag; private MtbPartitaMag mtbPartitaMag;
@@ -67,6 +128,97 @@ public class MtbColr extends EntityBase {
} }
} }
public MtbColr(MtbColr other) {
this();
this.gestione = other.gestione;
this.serCollo = other.serCollo;
this.numCollo = other.numCollo;
this.dataCollo = other.dataCollo;
this.riga = other.riga;
this.rigaOrd = other.rigaOrd;
this.codMart = other.codMart;
this.codBarre = other.codBarre;
this.codCol = other.codCol;
this.codTagl = other.codTagl;
this.partitaMag = other.partitaMag;
this.gestioneRif = other.gestioneRif;
this.serColloRif = other.serColloRif;
this.note = other.note;
this.dataOrd = other.dataOrd; // LocalDate è immutabile
this.dataColloRif = other.dataColloRif;
this.qtaCnf = other.qtaCnf; // BigDecimal è immutabile
this.qtaCol = other.qtaCol;
this.numOrd = other.numOrd;
this.numEtich = other.numEtich;
this.numColloRif = other.numColloRif;
this.datetimeRow = other.datetimeRow;
this.codJcom = other.codJcom;
this.numCnf = other.numCnf;
this.insPartitaMag = other.insPartitaMag;
this.mtbPartitaMag_descrizione = other.mtbPartitaMag_descrizione;
this.dataScadPartita = other.dataScadPartita;
this.descrizione = other.descrizione;
this.untMis = other.untMis;
this.causale = other.causale;
this.utente = other.utente;
this.codAnagDoc = other.codAnagDoc;
this.codDtipDoc = other.codDtipDoc;
this.dataDoc = other.dataDoc;
this.serDoc = other.serDoc;
this.numDoc = other.numDoc;
this.idRigaDoc = other.idRigaDoc;
this.pesoNettoKg = other.pesoNettoKg;
this.pesoLordoKg = other.pesoLordoKg;
this.barcodeUlIn = other.barcodeUlIn;
this.barcodeUlOut = other.barcodeUlOut;
this.posizioneIn = other.posizioneIn;
this.posizioneOut = other.posizioneOut;
this.codMdepIn = other.codMdepIn;
this.codMdepOut = other.codMdepOut;
// Deep copy degli oggetti complessi
this.mtbAart = other.mtbAart != null ? new MtbAart(other.mtbAart) : null;
this.mtbPartitaMag = other.mtbPartitaMag != null ? new MtbPartitaMag(other.mtbPartitaMag) : null;
// Non copiamo i campi transient
// this.id = other.id;
// this.refMtbColr = other.refMtbColr;
}
public MtbColrKey getKey() {
if (UtilityString.isNullOrEmpty(gestione) ||
UtilityString.isNullOrEmpty(serCollo) ||
getDataColloLD() == null ||
numCollo == null ||
riga == null)
return null;
return new MtbColrKey(gestione, serCollo, getDataColloLD(), numCollo, riga);
}
public DtbDoctKey getDocumentKey() {
if (UtilityString.isNullOrEmpty(codAnagDoc) ||
UtilityString.isNullOrEmpty(codDtipDoc) ||
UtilityString.isNullOrEmpty(serDoc) ||
dataDoc == null ||
numDoc == null)
return null;
return new DtbDoctKey(codAnagDoc, codDtipDoc, dataDoc, numDoc, serDoc);
}
public DtbDocrKey getDocumentRowKey() {
if (UtilityString.isNullOrEmpty(codAnagDoc) ||
UtilityString.isNullOrEmpty(codDtipDoc) ||
UtilityString.isNullOrEmpty(serDoc) ||
dataDoc == null ||
numDoc == null ||
idRigaDoc == null)
return null;
return new DtbDocrKey(codAnagDoc, codDtipDoc, dataDoc, numDoc, serDoc, idRigaDoc);
}
public static class Causale { public static class Causale {
public static final int DEFAULT = 0; public static final int DEFAULT = 0;
@@ -112,21 +264,18 @@ public class MtbColr extends EntityBase {
return this; return this;
} }
public String getDataColloS() {
public LocalDate getDataColloLD() {
return dataCollo; return dataCollo;
} }
public Date getDataColloD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataColloS());
}
public MtbColr setDataCollo(String dataCollo) { public MtbColr setDataCollo(String dataCollo) {
this.dataCollo = dataCollo; this.dataCollo = UtilityDate.recognizeLocalDateWithExceptionHandler(dataCollo);
return this; return this;
} }
public MtbColr setDataCollo(Date dataCollo) { public MtbColr setDataCollo(LocalDate dataCollo) {
setDataCollo(UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); this.dataCollo = dataCollo;
return this; return this;
} }
@@ -235,25 +384,24 @@ public class MtbColr extends EntityBase {
} }
public String getDataColloRifS() { public String getDataColloRifS() {
return dataColloRif; return dataColloRif != null ? UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_SLASHED_FORMATTER.format(dataColloRif) : null;
} }
public Date getDataColloRifD() { public Date getDataColloRifD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataColloRifS()); return UtilityDate.recognizeDateWithExceptionHandler(getDataColloRifS());
} }
public MtbColr setDataColloRif(String dataColloRif) { public LocalDate getDataColloRifLD() {
this.dataColloRif = dataColloRif; return dataColloRif;
return this;
} }
public MtbColr setDataColloRif(Date dataColloRif) { public MtbColr setDataColloRif(String dataColloRif) {
this.dataColloRif = UtilityDate.formatDate(dataColloRif, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); this.dataColloRif = UtilityDate.recognizeLocalDateWithExceptionHandler(dataColloRif);
return this; return this;
} }
public MtbColr setDataColloRif(LocalDate dataColloRif) { public MtbColr setDataColloRif(LocalDate dataColloRif) {
this.dataColloRif = UtilityDate.formatDate(dataColloRif, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH); this.dataColloRif = dataColloRif;
return this; return this;
} }
@@ -302,26 +450,15 @@ public class MtbColr extends EntityBase {
return this; return this;
} }
public LocalDateTime getDatetimeRow() {
public String getDatetimeRowS() {
return datetimeRow; return datetimeRow;
} }
public Date getDatetimeRowD() { public MtbColr setDatetimeRow(LocalDateTime datetimeRow) {
return UtilityDate.recognizeDateWithExceptionHandler(getDatetimeRowS());
}
public MtbColr setDatetimeRow(String datetimeRow) {
this.datetimeRow = datetimeRow; this.datetimeRow = datetimeRow;
return this; return this;
} }
public MtbColr setDatetimeRow(Date datetimeRow) {
this.datetimeRow = UtilityDate.formatDate(datetimeRow, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return this;
}
public String getCodJcom() { public String getCodJcom() {
return codJcom; return codJcom;
} }
@@ -443,11 +580,11 @@ public class MtbColr extends EntityBase {
return this; return this;
} }
public String getDataDoc() { public LocalDate getDataDoc() {
return dataDoc; return dataDoc;
} }
public MtbColr setDataDoc(String dataDoc) { public MtbColr setDataDoc(LocalDate dataDoc) {
this.dataDoc = dataDoc; this.dataDoc = dataDoc;
return this; return this;
} }
@@ -514,4 +651,170 @@ public class MtbColr extends EntityBase {
this.refMtbColr = refMtbColr; this.refMtbColr = refMtbColr;
return this; return this;
} }
public LocalDate getDataCollo() {
return dataCollo;
}
public LocalDate getDataColloRif() {
return dataColloRif;
}
public String getBarcodeUlIn() {
return barcodeUlIn;
}
public MtbColr setBarcodeUlIn(String barcodeUlIn) {
this.barcodeUlIn = barcodeUlIn;
return this;
}
public String getBarcodeUlOut() {
return barcodeUlOut;
}
public MtbColr setBarcodeUlOut(String barcodeUlOut) {
this.barcodeUlOut = barcodeUlOut;
return this;
}
public String getCodMdepIn() {
return codMdepIn;
}
public MtbColr setCodMdepIn(String codMdepIn) {
this.codMdepIn = codMdepIn;
return this;
}
public String getCodMdepOut() {
return codMdepOut;
}
public MtbColr setCodMdepOut(String codMdepOut) {
this.codMdepOut = codMdepOut;
return this;
}
public String getPosizioneIn() {
return posizioneIn;
}
public MtbColr setPosizioneIn(String posizioneIn) {
this.posizioneIn = posizioneIn;
return this;
}
public String getPosizioneOut() {
return posizioneOut;
}
public MtbColr setPosizioneOut(String posizioneOut) {
this.posizioneOut = posizioneOut;
return this;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
MtbColr mtbColr = (MtbColr) o;
return Objects.equals(getGestione(), mtbColr.getGestione()) &&
Objects.equals(getSerCollo(), mtbColr.getSerCollo()) &&
Objects.equals(getNumCollo(), mtbColr.getNumCollo()) &&
Objects.equals(getDataCollo(), mtbColr.getDataCollo()) &&
Objects.equals(getRiga(), mtbColr.getRiga()) &&
Objects.equals(getRigaOrd(), mtbColr.getRigaOrd()) &&
Objects.equals(getCodMart(), mtbColr.getCodMart()) &&
Objects.equals(getCodBarre(), mtbColr.getCodBarre()) &&
Objects.equals(getCodCol(), mtbColr.getCodCol()) &&
Objects.equals(getCodTagl(), mtbColr.getCodTagl()) &&
Objects.equals(getPartitaMag(), mtbColr.getPartitaMag()) &&
Objects.equals(getGestioneRif(), mtbColr.getGestioneRif()) &&
Objects.equals(getSerColloRif(), mtbColr.getSerColloRif()) &&
Objects.equals(getNote(), mtbColr.getNote()) &&
Objects.equals(getDataOrd(), mtbColr.getDataOrd()) &&
Objects.equals(getDataColloRif(), mtbColr.getDataColloRif()) &&
Objects.equals(getQtaCnf(), mtbColr.getQtaCnf()) &&
Objects.equals(getQtaCol(), mtbColr.getQtaCol()) &&
Objects.equals(getNumOrd(), mtbColr.getNumOrd()) &&
Objects.equals(getNumEtich(), mtbColr.getNumEtich()) &&
Objects.equals(getNumColloRif(), mtbColr.getNumColloRif()) &&
Objects.equals(getDatetimeRow(), mtbColr.getDatetimeRow()) &&
Objects.equals(getCodJcom(), mtbColr.getCodJcom()) &&
Objects.equals(getNumCnf(), mtbColr.getNumCnf()) &&
Objects.equals(getInsPartitaMag(), mtbColr.getInsPartitaMag()) &&
Objects.equals(getMtbPartitaMag_descrizione(), mtbColr.getMtbPartitaMag_descrizione()) &&
Objects.equals(getDataScadPartita(), mtbColr.getDataScadPartita()) &&
Objects.equals(getDescrizione(), mtbColr.getDescrizione()) &&
Objects.equals(getUntMis(), mtbColr.getUntMis()) &&
Objects.equals(getCausale(), mtbColr.getCausale()) &&
Objects.equals(getUtente(), mtbColr.getUtente()) &&
Objects.equals(getCodAnagDoc(), mtbColr.getCodAnagDoc()) &&
Objects.equals(getCodDtipDoc(), mtbColr.getCodDtipDoc()) &&
Objects.equals(getDataDoc(), mtbColr.getDataDoc()) &&
Objects.equals(getSerDoc(), mtbColr.getSerDoc()) &&
Objects.equals(getNumDoc(), mtbColr.getNumDoc()) &&
Objects.equals(getIdRigaDoc(), mtbColr.getIdRigaDoc()) &&
Objects.equals(getPesoNettoKg(), mtbColr.getPesoNettoKg()) &&
Objects.equals(getPesoLordoKg(), mtbColr.getPesoLordoKg()) &&
Objects.equals(getBarcodeUlIn(), mtbColr.getBarcodeUlIn()) &&
Objects.equals(getBarcodeUlOut(), mtbColr.getBarcodeUlOut()) &&
Objects.equals(getCodMdepIn(), mtbColr.getCodMdepIn()) &&
Objects.equals(getCodMdepOut(), mtbColr.getCodMdepOut()) &&
Objects.equals(getPosizioneIn(), mtbColr.getPosizioneIn()) &&
Objects.equals(getPosizioneOut(), mtbColr.getPosizioneOut());
}
@Override
public int hashCode() {
int result = Objects.hashCode(getGestione());
result = 31 * result + Objects.hashCode(getSerCollo());
result = 31 * result + Objects.hashCode(getNumCollo());
result = 31 * result + Objects.hashCode(getDataCollo());
result = 31 * result + Objects.hashCode(getRiga());
result = 31 * result + Objects.hashCode(getRigaOrd());
result = 31 * result + Objects.hashCode(getCodMart());
result = 31 * result + Objects.hashCode(getCodBarre());
result = 31 * result + Objects.hashCode(getCodCol());
result = 31 * result + Objects.hashCode(getCodTagl());
result = 31 * result + Objects.hashCode(getPartitaMag());
result = 31 * result + Objects.hashCode(getGestioneRif());
result = 31 * result + Objects.hashCode(getSerColloRif());
result = 31 * result + Objects.hashCode(getNote());
result = 31 * result + Objects.hashCode(getDataOrd());
result = 31 * result + Objects.hashCode(getDataColloRif());
result = 31 * result + Objects.hashCode(getQtaCnf());
result = 31 * result + Objects.hashCode(getQtaCol());
result = 31 * result + Objects.hashCode(getNumOrd());
result = 31 * result + Objects.hashCode(getNumEtich());
result = 31 * result + Objects.hashCode(getNumColloRif());
result = 31 * result + Objects.hashCode(getDatetimeRow());
result = 31 * result + Objects.hashCode(getCodJcom());
result = 31 * result + Objects.hashCode(getNumCnf());
result = 31 * result + Objects.hashCode(getInsPartitaMag());
result = 31 * result + Objects.hashCode(getMtbPartitaMag_descrizione());
result = 31 * result + Objects.hashCode(getDataScadPartita());
result = 31 * result + Objects.hashCode(getDescrizione());
result = 31 * result + Objects.hashCode(getUntMis());
result = 31 * result + Objects.hashCode(getCausale());
result = 31 * result + Objects.hashCode(getUtente());
result = 31 * result + Objects.hashCode(getCodAnagDoc());
result = 31 * result + Objects.hashCode(getCodDtipDoc());
result = 31 * result + Objects.hashCode(getDataDoc());
result = 31 * result + Objects.hashCode(getSerDoc());
result = 31 * result + Objects.hashCode(getNumDoc());
result = 31 * result + Objects.hashCode(getIdRigaDoc());
result = 31 * result + Objects.hashCode(getPesoNettoKg());
result = 31 * result + Objects.hashCode(getPesoLordoKg());
result = 31 * result + Objects.hashCode(getBarcodeUlIn());
result = 31 * result + Objects.hashCode(getBarcodeUlOut());
result = 31 * result + Objects.hashCode(getCodMdepIn());
result = 31 * result + Objects.hashCode(getCodMdepOut());
result = 31 * result + Objects.hashCode(getPosizioneIn());
result = 31 * result + Objects.hashCode(getPosizioneOut());
return result;
}
} }

View File

@@ -2,11 +2,13 @@ package it.integry.integrywmsnative.core.model;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.annotations.SerializedName;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -17,12 +19,13 @@ import java.util.Date;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO; import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.model.key.DtbDoctKey;
import it.integry.integrywmsnative.core.model.key.MtbColtKey;
import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
/** /**
@@ -30,47 +33,103 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
*/ */
public class MtbColt extends EntityBase { public class MtbColt extends EntityBase {
@SerializedName("gestione")
private String gestione; private String gestione;
private String dataCollo; @SerializedName("dataCollo")
private LocalDate dataCollo;
@SerializedName("serCollo")
private String serCollo; private String serCollo;
@SerializedName("numCollo")
private Integer numCollo; private Integer numCollo;
@SerializedName("rifOrd")
private String rifOrd; private String rifOrd;
@SerializedName("codAnag")
private String codAnag; private String codAnag;
@SerializedName("codVdes")
private String codVdes; private String codVdes;
@SerializedName("codMdep")
private String codMdep; private String codMdep;
@SerializedName("codVlis")
private String codVlis; private String codVlis;
@SerializedName("codDtip")
private String codDtip; private String codDtip;
@SerializedName("codTcol")
private String codTcol; private String codTcol;
@SerializedName("serDoc")
private String serDoc; private String serDoc;
@SerializedName("filtroOrdini")
private String filtroOrdini; private String filtroOrdini;
@SerializedName("preparatoDa")
private String preparatoDa; private String preparatoDa;
@SerializedName("annotazioni")
private String annotazioni; private String annotazioni;
@SerializedName("posizione")
private String posizione; private String posizione;
@SerializedName("codDtipProvv")
private String codDtipProvv; private String codDtipProvv;
@SerializedName("serDocProvv")
private String serDocProvv; private String serDocProvv;
@SerializedName("codJfas")
private String codJfas; private String codJfas;
@SerializedName("dataOrd")
private String dataOrd; private String dataOrd;
private String dataDoc; @SerializedName("dataDoc")
private LocalDate dataDoc;
@SerializedName("oraInizPrep")
private String oraInizPrep; private String oraInizPrep;
@SerializedName("oraFinePrep")
private String oraFinePrep; private String oraFinePrep;
@SerializedName("dataDocProvv")
private String dataDocProvv; private String dataDocProvv;
@SerializedName("dataVers")
private String dataVers; private String dataVers;
@SerializedName("segno")
private Integer segno; private Integer segno;
@SerializedName("numOrd")
private Integer numOrd; private Integer numOrd;
@SerializedName("numDoc")
private Integer numDoc; private Integer numDoc;
@SerializedName("numDocProvv")
private Integer numDocProvv; private Integer numDocProvv;
@SerializedName("pesoKg")
private BigDecimal pesoKg; private BigDecimal pesoKg;
@SerializedName("pesoNettoKg")
private BigDecimal pesoNettoKg; private BigDecimal pesoNettoKg;
@SerializedName("lunghezzaCm")
private BigDecimal lunghezzaCm; private BigDecimal lunghezzaCm;
@SerializedName("larghezzaCm")
private BigDecimal larghezzaCm; private BigDecimal larghezzaCm;
@SerializedName("altezzaCm")
private BigDecimal altezzaCm; private BigDecimal altezzaCm;
@SerializedName("codJcom")
private String codJcom; private String codJcom;
private final ObservableField<ObservableMtbTcol> mtbTCol = new ObservableField<>(); @SerializedName("barcodeUl")
private String barcodeUl;
@SerializedName("progressivoUl")
private Integer progressivoUl;
private final transient MutableLiveData<ObservableMtbTcol> mtbTCol = new MutableLiveData<>();
@SerializedName("disablePrint")
private Boolean disablePrint; private Boolean disablePrint;
@SerializedName("ragSocCliente")
private String ragSocCliente; private String ragSocCliente;
@SerializedName("descrizioneAnomalia")
private String descrizioneAnomalia;
@SerializedName("descrizioneLivelloAnomalia")
private String descrizioneLivelloAnomalia;
@SerializedName("escludiPickingVendita")
private Boolean escludiPickingVendita;
@SerializedName("escludiPickingLavorazione")
private Boolean escludiPickingLavorazione;
@SerializedName("mtbColr")
private ObservableArrayList<MtbColr> mtbColr = new ObservableArrayList<>(); private ObservableArrayList<MtbColr> mtbColr = new ObservableArrayList<>();
public ObservableArrayList<MtbColr> getMtbColr() { public ObservableArrayList<MtbColr> getMtbColr() {
@@ -84,7 +143,7 @@ public class MtbColt extends EntityBase {
public MtbColt() { public MtbColt() {
type = "mtb_colt"; type = "mtb_colt";
setDataCollo(UtilityDate.getDateInstance()); setDataCollo(LocalDate.now());
setSerCollo("/"); setSerCollo("/");
if (SettingsManager.i().isUserLoggedIn()) { if (SettingsManager.i().isUserLoggedIn()) {
@@ -92,6 +151,27 @@ public class MtbColt extends EntityBase {
} }
} }
public MtbColtKey getKey() {
if (UtilityString.isNullOrEmpty(gestione) ||
UtilityString.isNullOrEmpty(serCollo) ||
getDataColloLD() == null ||
numCollo == null)
return null;
return new MtbColtKey(gestione, serCollo, getDataColloLD(), numCollo);
}
public DtbDoctKey getDocumentKey() {
if (UtilityString.isNullOrEmpty(codAnag) ||
UtilityString.isNullOrEmpty(codDtip) ||
UtilityString.isNullOrEmpty(serDoc) ||
dataDoc == null ||
numDoc == null)
return null;
return new DtbDoctKey(codAnag, codDtip, dataDoc, numDoc, serDoc);
}
public MtbColt initDefaultFields(GestioneEnum gestioneEnum) { public MtbColt initDefaultFields(GestioneEnum gestioneEnum) {
setGestione(gestioneEnum); setGestione(gestioneEnum);
setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep());
@@ -143,20 +223,13 @@ public class MtbColt extends EntityBase {
} }
public String getDataColloHumanLong() { public String getDataColloHumanLong() {
Date dataColloD = null; if (dataCollo != null) {
try { return UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_HUMAN_FORMATTER.format(dataCollo);
dataColloD = getDataColloD();
} catch (Exception ex) {
UtilityLogger.error(ex);
}
if (dataColloD != null) {
return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN_LONG);
} else return null; } else return null;
} }
public String getDataColloS() { public String getDataColloS() {
return dataCollo; return dataCollo != null ? UtilityDate.COMMONS_DATE_FORMATS.DATE_DMY_SLASHED_FORMATTER.format(dataCollo) : null;
} }
public Date getDataColloD() { public Date getDataColloD() {
@@ -164,21 +237,16 @@ public class MtbColt extends EntityBase {
} }
public LocalDate getDataColloLD() { public LocalDate getDataColloLD() {
return UtilityDate.recognizeLocalDateWithExceptionHandler(getDataColloS()); return dataCollo;
} }
public MtbColt setDataCollo(String dataCollo) { public MtbColt setDataCollo(String dataCollo) {
this.dataCollo = dataCollo; this.dataCollo = UtilityDate.recognizeLocalDateWithExceptionHandler(dataCollo);
return this;
}
public MtbColt setDataCollo(Date dataCollo) {
this.dataCollo = UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return this; return this;
} }
public MtbColt setDataCollo(LocalDate dataCollo) { public MtbColt setDataCollo(LocalDate dataCollo) {
this.dataCollo = UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH); this.dataCollo = dataCollo;
return this; return this;
} }
@@ -261,7 +329,7 @@ public class MtbColt extends EntityBase {
public MtbColt setCodTcol(String codTcol) { public MtbColt setCodTcol(String codTcol) {
this.codTcol = codTcol; this.codTcol = codTcol;
if(!UtilityString.isNullOrEmpty(codTcol)) { if (!UtilityString.isNullOrEmpty(codTcol)) {
var fountMtbTcolObservable = SettingsManager.iDB().getInternalImballi().stream() var fountMtbTcolObservable = SettingsManager.iDB().getInternalImballi().stream()
.filter(x -> x.getCodTcol().equalsIgnoreCase(codTcol)) .filter(x -> x.getCodTcol().equalsIgnoreCase(codTcol))
.findFirst() .findFirst()
@@ -349,6 +417,10 @@ public class MtbColt extends EntityBase {
return UtilityDate.recognizeDateWithExceptionHandler(getDataOrd()); return UtilityDate.recognizeDateWithExceptionHandler(getDataOrd());
} }
public LocalDate getDataOrdLD() {
return UtilityDate.recognizeLocalDateWithExceptionHandler(getDataOrd());
}
public String getDataOrd() { public String getDataOrd() {
return dataOrd; return dataOrd;
} }
@@ -359,15 +431,15 @@ public class MtbColt extends EntityBase {
} }
public MtbColt setDataOrdD(Date dataOrd) { public MtbColt setDataOrdD(Date dataOrd) {
this.dataOrd = UtilityDate.formatDate(dataOrd, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); this.dataOrd = UtilityDate.formatDate(dataOrd, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIMES_SLASH);
return this; return this;
} }
public String getDataDoc() { public LocalDate getDataDoc() {
return dataDoc; return dataDoc;
} }
public MtbColt setDataDoc(String dataDoc) { public MtbColt setDataDoc(LocalDate dataDoc) {
this.dataDoc = dataDoc; this.dataDoc = dataDoc;
return this; return this;
} }
@@ -382,7 +454,7 @@ public class MtbColt extends EntityBase {
} }
public MtbColt setOraInizPrep(Date oraInizPrep) { public MtbColt setOraInizPrep(Date oraInizPrep) {
this.oraInizPrep = UtilityDate.formatDate(oraInizPrep, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); this.oraInizPrep = UtilityDate.formatDate(oraInizPrep, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIMES_SLASH);
return this; return this;
} }
@@ -396,7 +468,7 @@ public class MtbColt extends EntityBase {
} }
public MtbColt setOraFinePrep(Date oraFinePrep) { public MtbColt setOraFinePrep(Date oraFinePrep) {
this.oraFinePrep = UtilityDate.formatDate(oraFinePrep, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); this.oraFinePrep = UtilityDate.formatDate(oraFinePrep, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIMES_SLASH);
return this; return this;
} }
@@ -432,7 +504,7 @@ public class MtbColt extends EntityBase {
} }
public MtbColt setDataVers(Date dataVers) { public MtbColt setDataVers(Date dataVers) {
this.dataVers = UtilityDate.formatDate(dataVers, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); this.dataVers = UtilityDate.formatDate(dataVers, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIMES_SLASH);
return this; return this;
} }
@@ -535,6 +607,42 @@ public class MtbColt extends EntityBase {
return this; return this;
} }
public String getDescrizioneAnomalia() {
return descrizioneAnomalia;
}
public MtbColt setDescrizioneAnomalia(String descrizioneAnomalia) {
this.descrizioneAnomalia = descrizioneAnomalia;
return this;
}
public String getDescrizioneLivelloAnomalia() {
return descrizioneLivelloAnomalia;
}
public MtbColt setDescrizioneLivelloAnomalia(String descrizioneLivelloAnomalia) {
this.descrizioneLivelloAnomalia = descrizioneLivelloAnomalia;
return this;
}
public Boolean getEscludiPickingVendita() {
return escludiPickingVendita;
}
public MtbColt setEscludiPickingVendita(Boolean escludiPickingVendita) {
this.escludiPickingVendita = escludiPickingVendita;
return this;
}
public Boolean getEscludiPickingLavorazione() {
return escludiPickingLavorazione;
}
public MtbColt setEscludiPickingLavorazione(Boolean escludiPickingLavorazione) {
this.escludiPickingLavorazione = escludiPickingLavorazione;
return this;
}
public String getCodJcom() { public String getCodJcom() {
return codJcom; return codJcom;
} }
@@ -544,16 +652,34 @@ public class MtbColt extends EntityBase {
return this; return this;
} }
public ObservableMtbTcol getMtbTCol() { public String getBarcodeUl() {
return mtbTCol.get(); return barcodeUl;
} }
public MtbColt setMtbTCol(ObservableMtbTcol mtbTCol) { public MtbColt setBarcodeUl(String barcodeUl) {
this.mtbTCol.set(mtbTCol); this.barcodeUl = barcodeUl;
return this; return this;
} }
public ObservableField<ObservableMtbTcol> mtbTcolProperty() { public Integer getProgressivoUl() {
return progressivoUl;
}
public MtbColt setProgressivoUl(Integer progressivoUl) {
this.progressivoUl = progressivoUl;
return this;
}
public ObservableMtbTcol getMtbTCol() {
return mtbTCol.getValue();
}
public MtbColt setMtbTCol(ObservableMtbTcol mtbTCol) {
this.mtbTCol.postValue(mtbTCol);
return this;
}
public MutableLiveData<ObservableMtbTcol> mtbTcolProperty() {
return mtbTCol; return mtbTCol;
} }
@@ -579,12 +705,12 @@ public class MtbColt extends EntityBase {
try { try {
String condition = (String.format("(d.g = %s AND d.d = %s and d.n = %s", String condition = (String.format("(d.g = %s AND d.d = %s and d.n = %s",
UtilityDB.valueToString(filtroOrdineDTO.getGestioneOrd()), UtilityDB.valueToString(filtroOrdineDTO.getGestioneOrd()),
UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)), UtilityDB.valueToString(filtroOrdineDTO.getDataOrd()),
UtilityDB.valueToString(filtroOrdineDTO.getNumOrd()))); UtilityDB.valueToString(filtroOrdineDTO.getNumOrd())));
if (!UtilityString.isNullOrEmpty(filtroOrdineDTO.getDataConsS())) { if (filtroOrdineDTO.getDataCons() != null) {
condition += (String.format(" AND dr.dc = %s", condition += (String.format(" AND dr.dc = %s",
UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)))); UtilityDB.valueToString(filtroOrdineDTO.getDataCons())));
} }
condition += ")"; condition += ")";
@@ -629,10 +755,23 @@ public class MtbColt extends EntityBase {
} }
@NonNull
@Override @Override
public EntityBase clone() { public EntityBase clone() {
return clone(true);
}
public MtbColt clone(boolean withMtbColr) {
MtbColt mtbColt = (MtbColt) super.clone(); MtbColt mtbColt = (MtbColt) super.clone();
mtbColt.setMtbColr((ObservableArrayList<MtbColr>) mtbColt.getMtbColr().clone()); mtbColt.setMtbColr(new ObservableArrayList<>());
if(!withMtbColr) return mtbColt;
this.getMtbColr().stream()
.map(MtbColr::new) //Genera un clone
.forEach(mtbColr -> {
mtbColt.getMtbColr().add(mtbColr);
});
return mtbColt; return mtbColt;
} }
} }

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