Compare commits

...

83 Commits

Author SHA1 Message Date
84876bf7c1 Finish v1.28.3(297) 2022-07-20 16:08:12 +02:00
fca325855e -> v1.28.3 (297) 2022-07-20 16:08:06 +02:00
c6fc287a3f corretto controllo su creazione collo in accettazione
aggiunto controllo su stato articoli in servizio getArticoloBybarcode
2022-07-20 16:07:14 +02:00
29fd0292e7 Finish v1.28.2(296) 2022-07-20 15:46:00 +02:00
90cf83e3cd Finish v1.28.2(296) 2022-07-20 15:46:00 +02:00
f4c1f1fe34 -> v1.28.2 (296) 2022-07-20 15:45:53 +02:00
9e85b9f828 aggiunta setup non presente in lista 2022-07-20 15:44:40 +02:00
a9fd55c01f Finish v1.28.1(295) 2022-07-18 10:56:05 +02:00
506a56a1a2 Finish v1.28.1(295) 2022-07-18 10:56:05 +02:00
c93e29606c -> v1.28.1 (295) 2022-07-18 10:55:57 +02:00
4adc40aa90 adeguamento rientro merce da lavorazione agricoper 2022-07-18 10:54:29 +02:00
4842a6091b Documento perdite (wms). La possibilità di scaricare l'intera anagrafica puo' essere effettuata soltanto una volta (a cache vuota)
Inserire il campo 'Annotazioni' quando si crea un collo  che sia editabile dall'utente (picking Vendita)
2022-07-13 17:29:26 +02:00
9faf4123ef fase di creazione dell'ordine di acquisto preimpostare gli articoli che hanno una qta proposta da acquistare 2022-07-11 13:11:52 +02:00
cdf5b413a2 Finish v1.28.0(294) 2022-07-07 18:56:19 +02:00
4dd2ccdb13 Finish v1.28.0(294) 2022-07-07 18:56:18 +02:00
56c54d3cde -> v1.28.0 (294) 2022-07-07 18:56:13 +02:00
19e2d5b869 Creata login page per layout large 2022-07-07 18:21:30 +02:00
0acf023556 Creata UI per smartphone del rientro merce 2022-07-07 17:51:46 +02:00
71f6dc83fb Vario 2022-06-29 18:54:11 +02:00
3479ee2b87 Finish v1.27.6(293) 2022-06-29 16:39:22 +02:00
609b9f1852 Finish v1.27.6(293) 2022-06-29 16:39:22 +02:00
23c98d9218 -> v1.27.6 (293) 2022-06-29 16:39:17 +02:00
57900a9617 bug fix: Nel picking da ordine, quando sparano alcune referenze (100142-100171), l'app si chiude in maniera anomala. 2022-06-29 16:36:46 +02:00
c3274a4311 corretto bug per in gestione linee e aggiu ta richiesta di recupero prima di chiudere gli ordini 2022-06-29 16:01:51 +02:00
356e2562da Finish v1.27.5(292) 2022-06-08 12:50:49 +02:00
46c0078331 Finish v1.27.5(292) 2022-06-08 12:50:48 +02:00
bbc81f3d99 -> v1.27.5 (292) 2022-06-08 12:50:18 +02:00
0dd662518e In versamento se si versa una pedana già versata l'app crasha
permettere il versamento di un articolo non compatibile con gli ordini aperti dopo richiesta conferma

precompilare input risorse da allocare

in input qta mantenere fissa la qtaCnf in entrambe le direzioni di calcolo

togliere popup di notifica versamento completato
2022-06-08 12:26:20 +02:00
08d332e2c6 Quando creo una pedana dalla funzione di rientro merce non inserendo il tipo collo, l'app si blocca. 2022-06-07 17:33:32 +02:00
b9001790be corretto funzionamento rettifica giacenza al clik del pulsante indietro 2022-06-07 12:56:26 +02:00
d43bd8e659 Finish v1.27.4(291) 2022-06-01 19:23:56 +02:00
ef2886c963 Finish v1.27.4(291) 2022-06-01 19:23:55 +02:00
7a6097fa69 -> v1.27.4 (291) 2022-06-01 19:23:49 +02:00
9c45cebf51 aggiunte funzionalità versamento e recupero alla gestione linee di produzione 2022-06-01 19:22:32 +02:00
344fc42d03 bugfix in schermata dialog_input_quantity_v2 2022-05-27 16:22:34 +02:00
33a01b2c15 spedizione: bugfix calcolo qta residua in picking da collo 2022-05-27 09:45:35 +02:00
d165174345 Finish v1.27.3(290) 2022-05-26 16:18:34 +02:00
05314803bc Finish v1.27.3(290) 2022-05-26 16:18:34 +02:00
9db8337f9b -> v1.27.3 (290) 2022-05-26 16:18:10 +02:00
abfd92ce07 Fix su inizializzazione observables in DialogInputQuantityV2 2022-05-26 16:16:13 +02:00
c11858aea2 Ottimizzazione funzione rettifica giacenza. Evitare di uscire dalla gestione dopo aver rettificato una pedana. 2022-05-26 12:35:26 +02:00
a67b28f0ad Finish v1.27.2(289) 2022-05-26 12:11:01 +02:00
b9f5baae5f Finish v1.27.2(289) 2022-05-26 12:11:01 +02:00
cb5e36ffb7 -> v1.27.2 (289) 2022-05-26 12:10:16 +02:00
82ff37f4ee Bug Fix: eliminazione righe in picking libero 2022-05-26 12:09:21 +02:00
350c4bc4ed Finish v1.27.1(288) 2022-05-25 19:11:27 +02:00
33f0866ea2 Finish v1.27.1(288) 2022-05-25 19:11:27 +02:00
df13a6e29d -> v1.27.1 (288) 2022-05-25 19:11:23 +02:00
ee8fa96c40 mmodifica label impostazione risorse 2022-05-25 19:10:35 +02:00
c264cd38e3 Finish v1.27.0(287) 2022-05-25 17:19:49 +02:00
64f669753f Finish v1.27.0(287) 2022-05-25 17:19:49 +02:00
aabc4310fd -> v1.27.0 (287) 2022-05-25 17:19:40 +02:00
9dc3996aef Nuova gestione linee di produzione 2022-05-25 17:17:58 +02:00
e0e9e657c9 Nuova gestione linee di produzione 2022-05-25 17:17:48 +02:00
84cbab334f Aggiunta possibilità di stampa dei soli colli non stampati 2022-05-18 18:07:14 +02:00
f9751e770a Finish v1.26.3(286) 2022-05-12 13:03:57 +02:00
6539c9179e Finish v1.26.3(286) 2022-05-12 13:03:56 +02:00
f43a7acf35 -> v1.26.3 (286) 2022-05-12 13:03:46 +02:00
ca96bacde6 aggiunto controllo per evitare l'nizializzazione degli observables in più punti 2022-05-12 12:54:33 +02:00
d4c94b7ab9 Finish v1.26.2(285) 2022-05-11 09:49:58 +02:00
0c9e607c33 Finish v1.26.2(285) 2022-05-11 09:49:57 +02:00
b5c6ce2aa5 -> v1.26.2 (285) 2022-05-11 09:49:54 +02:00
66f58ea20d Aggiunte qta_proposta e giacenza in system note degli ordini di acquisto pv 2022-05-11 09:49:12 +02:00
d6979289e2 spostate stampe in chiusura ordine su servizio dedicato 2022-05-06 15:20:34 +02:00
496387b5c6 Finish v1.26.1(284) 2022-05-05 16:11:33 +02:00
6b0d75fc60 Finish v1.26.1(284) 2022-05-05 16:11:32 +02:00
7d263699da -> v1.26.1 (284) 2022-05-05 16:11:27 +02:00
63e4e4e791 aggiunto controllo su aggiunta articoli extra senza collo 2022-05-05 16:09:48 +02:00
98c260f621 Finish v1.26.0(283) 2022-05-03 10:49:24 +02:00
1b57dc74cf Finish v1.26.0(283) 2022-05-03 10:49:23 +02:00
4f140d0d58 -> v1.26.0 (283) 2022-05-03 10:49:07 +02:00
0d021e6bad aggiunto controllo su mtbColrRif null in picking libero 2022-05-03 10:31:38 +02:00
1a0af47613 Modifiche stampa per tipo report 2022-04-27 18:54:43 +02:00
ead509bb32 Finish v1.25.5(282) 2022-04-26 12:42:43 +02:00
ddfde73f1e Finish v1.25.5(282) 2022-04-26 12:42:43 +02:00
3de5a2320d -> v1.25.5 (282) 2022-04-26 12:42:36 +02:00
5cb32a9a77 Risolto problema di aggiornamento lista d'ordini in uscita nel caso in cui si filtrava tramite barcode 2022-04-26 12:42:00 +02:00
ecbb4ac55c Finish v1.25.4(281) 2022-04-22 16:20:46 +02:00
84e0561fff Finish v1.25.4(281) 2022-04-22 16:20:45 +02:00
71bfbb2afc -> v1.25.4 (281) 2022-04-22 16:20:40 +02:00
2cb563320b Fix su lettura numero collo da etichetta anonima con serie alla fine 2022-04-22 15:14:54 +02:00
f3837f35b0 aggiunti controlli per rendere obbligatorie le note sui documenti di taglio di carelli 2022-04-20 16:21:55 +02:00
c80b5a9160 Finish v1.25.3(280) 2022-04-14 16:27:34 +02:00
131 changed files with 7047 additions and 1152 deletions

View File

@@ -1,16 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetsSelectedWithDialog>
<targetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="20119B1E55" />
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\ValerioC.STUDIO-ML\.android\avd\Pixel_4_XL_API_30.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetsSelectedWithDialog>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-07-15T15:36:03.605659600Z" />
</component>
</project>

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 280
def appVersionName = '1.25.3'
def appVersionCode = 297
def appVersionName = '1.28.3'
signingConfigs {
release {

View File

@@ -27,11 +27,18 @@
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity"
<activity
android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.contab_doc_interni.edit_form.DocInterniEditFormActivity"
<activity
android:name=".gest.prod_dettaglio_linea.ProdDettaglioLineaActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.contab_doc_interni.edit_form.DocInterniEditFormActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />

View File

@@ -41,10 +41,14 @@ import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaComponent;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneComponent;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneModule;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
@@ -61,6 +65,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListModule;
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.ultime_consegne_cliente.UltimeConsegneClienteComponent;
@@ -128,7 +134,10 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DocInterniEditFormModule.class,
DialogSelectDocRowsModule.class,
DialogAskClienteModule.class,
DialogEditArticoloModule.class
DialogEditArticoloModule.class,
DialogPrintOrderSSCCListModule.class,
ProdLineeProduzioneModule.class,
ProdDettaglioLineaModule.class
})
public interface MainApplicationComponent {
@@ -216,6 +225,12 @@ public interface MainApplicationComponent {
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
DialogPrintOrderSSCCListComponent.Factory dialogPrintOrderSSCCListComponent();
ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent();
ProdDettaglioLineaComponent.Factory prodDettaglioLineaComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -25,6 +25,7 @@ import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.services.inventario.InventarioService;
import it.integry.integrywmsnative.core.update.UpdatesManager;
@@ -200,4 +201,10 @@ public class MainApplicationModule {
return new InventarioService(giacenzaRESTConsumer);
}
@Provides
@Singleton
ProductionLinesRESTConsumer provideProductionLinesRESTConsumer() {
return new ProductionLinesRESTConsumer();
}
}

View File

@@ -8,6 +8,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoF
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoFragment;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneFragment;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
@@ -45,137 +46,145 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setDrawerIcon(R.drawable.ic_black_latest_delivery)
.setFragmentFactory(UltimiArriviFornitoreFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.checkout)
.setGroupId(R.id.nav_group_spedizione)
.setCodMenu("MM010")
new MenuGroup()
.setGroupText(R.string.checkout)
.setGroupId(R.id.nav_group_spedizione)
.setCodMenu("MM010")
.addItem(new MenuItem()
.setID(R.id.nav_spedizione)
.setCodMenu("MG046")
.setTitleText(R.string.vendita_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_spedizione)
.setDrawerIcon(R.drawable.ic_black_upload)
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.VENDITA, null, -1, null)))
.addItem(new MenuItem()
.setID(R.id.nav_free_picking)
.setCodMenu("MG047")
.setTitleText(R.string.free_picking)
.setTitleIcon(R.drawable.ic_dashboard_picking_libero)
.setDrawerIcon(R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.VENDITA)))
.addItem(new MenuItem()
.setID(R.id.nav_resi_cliente)
.setCodMenu("MG048")
.setTitleText(R.string.fragment_ultime_consegne_cliente_title)
.setTitleIcon(R.drawable.ic_latest_delivery_customer)
.setDrawerIcon(R.drawable.ic_black_latest_delivery)
.setFragmentFactory(UltimeConsegneClienteFragment::newInstance))
).addGroup(new MenuGroup()
.setGroupText(R.string.manufacture)
.setGroupId(R.id.nav_group_produzione)
.setCodMenu("MM009")
.addItem(new MenuItem()
.setID(R.id.nav_spedizione)
.setCodMenu("MG046")
.setTitleText(R.string.vendita_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_spedizione)
.setDrawerIcon(R.drawable.ic_black_upload)
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.VENDITA, null, -1, null)))
.setID(R.id.nav_prod_ordine_produzione)
.setCodMenu("MG049")
.setTitleText(R.string.prod_ordine_produzione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_accettazione_produzione)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdOrdineProduzioneElencoFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_free_picking)
.setCodMenu("MG047")
.setTitleText(R.string.free_picking)
.setTitleIcon(R.drawable.ic_dashboard_picking_libero)
.setDrawerIcon(R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.VENDITA)))
.setID(R.id.nav_prod_ordine_lavorazione)
.setCodMenu("MG050")
.setTitleText(R.string.prod_ordine_lavorazione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_lavorazione)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, null)))
.addItem(new MenuItem()
.setID(R.id.nav_resi_cliente)
.setCodMenu("MG048")
.setTitleText(R.string.fragment_ultime_consegne_cliente_title)
.setTitleIcon(R.drawable.ic_latest_delivery_customer)
.setDrawerIcon(R.drawable.ic_black_latest_delivery)
.setFragmentFactory(UltimeConsegneClienteFragment::newInstance))
).addGroup(new MenuGroup()
.setGroupText(R.string.manufacture)
.setGroupId(R.id.nav_group_produzione)
.setCodMenu("MM009")
.addItem(new MenuItem()
.setID(R.id.nav_prod_ordine_produzione)
.setCodMenu("MG049")
.setTitleText(R.string.prod_ordine_produzione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_accettazione_produzione)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdOrdineProduzioneElencoFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_ordine_lavorazione)
.setCodMenu("MG050")
.setTitleText(R.string.prod_ordine_lavorazione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_lavorazione)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, null)))
.addItem(new MenuItem()
.setID(R.id.nav_free_lav_picking)
.setCodMenu("MG051")
.setTitleText(it.integry.integrywmsnative.R.string.free_lav_picking)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_libero)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE)))
.addItem(new MenuItem()
.setID(R.id.nav_prod_posizionamento_da_ord)
.setCodMenu("MG052")
.setTitleText(R.string.prod_fabbisogno_linee_prod_title)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_merce)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_load_shelf)
.setFragmentFactory(ProdFabbisognoLineeProdFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_versamento_materiale)
.setCodMenu("MG053")
.setTitleText(R.string.prod_versamento_materiale_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdVersamentoMaterialeFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_recupero_materiale)
.setCodMenu("MG054")
.setTitleText(R.string.prod_recupero_materiale_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_recupero_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdRecuperoMaterialeFragment::newInstance))
.addItem(new MenuItem()
.setID(it.integry.integrywmsnative.R.id.nav_prod_rientro_merce)
.setCodMenu("MG059")
.setTitleText(it.integry.integrywmsnative.R.string.rientro_merce_fragment_title)
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_accettazione_produzione)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_external)
.setFragmentFactory(ProdRientroMerceFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)
.setGroupId(R.id.nav_group_movimentazione_interna)
.setCodMenu("MM011")
.setID(R.id.nav_free_lav_picking)
.setCodMenu("MG051")
.setTitleText(it.integry.integrywmsnative.R.string.free_lav_picking)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_libero)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE)))
.addItem(new MenuItem()
.setID(R.id.nav_versamento_merce)
.setCodMenu("MG055")
.setTitleText(R.string.versamento_merce_fragment_title)
.setTitleIcon(R.drawable.ic_dashboard_versamento_merce)
.setDrawerIcon(R.drawable.ic_black_load_shelf)
.setFragmentFactory(VersamentoMerceFragment::newInstance))
.setID(R.id.nav_prod_posizionamento_da_ord)
.setCodMenu("MG052")
.setTitleText(R.string.prod_fabbisogno_linee_prod_title)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_merce)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_load_shelf)
.setFragmentFactory(ProdFabbisognoLineeProdFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_rettifica_giacenze)
.setCodMenu("MG056")
.setTitleText(R.string.rettifica_giacenze_fragment_title)
.setTitleIcon(R.drawable.ic_dashboard_rettifica_giacenze)
.setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(RettificaGiacenzeFragment::newInstance))
).addGroup(
new MenuGroup()
.setCodMenu("MM012")
.setGroupText(it.integry.integrywmsnative.R.string.punto_vendita)
.setGroupId(it.integry.integrywmsnative.R.id.nav_group_puntivendita)
.setID(R.id.nav_prod_versamento_materiale)
.setCodMenu("MG053")
.setTitleText(R.string.prod_versamento_materiale_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdVersamentoMaterialeFragment::newInstance))
.addItem(new MenuItem()
.setCodMenu("MG057")
.setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto)
.setTitleText(it.integry.integrywmsnative.R.string.generate_orders)
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance))
.setID(R.id.nav_prod_recupero_materiale)
.setCodMenu("MG054")
.setTitleText(R.string.prod_recupero_materiale_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_recupero_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdRecuperoMaterialeFragment::newInstance))
.addItem(new MenuItem()
.setCodMenu("MG058")
.setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni)
.setTitleText(it.integry.integrywmsnative.R.string.doc_interni)
.setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni)
.setFragmentFactory(DocInterniFragment::newInstance))
.setID(it.integry.integrywmsnative.R.id.nav_prod_rientro_merce)
.setCodMenu("MG059")
.setTitleText(it.integry.integrywmsnative.R.string.rientro_merce_fragment_title)
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_accettazione_produzione)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_external)
.setFragmentFactory(ProdRientroMerceFragment::newInstance))
.addItem(new MenuItem()
.setID(it.integry.integrywmsnative.R.id.nav_prod_linee)
.setCodMenu("MG061")
.setTitleText(it.integry.integrywmsnative.R.string.nav_prod_linee_title)
.setTitleIcon(R.drawable.ic_production_line)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_production_line)
.setFragmentFactory(ProdLineeProduzioneFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)
.setGroupId(R.id.nav_group_movimentazione_interna)
.setCodMenu("MM011")
.addItem(new MenuItem()
.setID(R.id.nav_versamento_merce)
.setCodMenu("MG055")
.setTitleText(R.string.versamento_merce_fragment_title)
.setTitleIcon(R.drawable.ic_dashboard_versamento_merce)
.setDrawerIcon(R.drawable.ic_black_load_shelf)
.setFragmentFactory(VersamentoMerceFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_rettifica_giacenze)
.setCodMenu("MG056")
.setTitleText(R.string.rettifica_giacenze_fragment_title)
.setTitleIcon(R.drawable.ic_dashboard_rettifica_giacenze)
.setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(RettificaGiacenzeFragment::newInstance))
).addGroup(
new MenuGroup()
.setCodMenu("MM012")
.setGroupText(it.integry.integrywmsnative.R.string.punto_vendita)
.setGroupId(it.integry.integrywmsnative.R.id.nav_group_puntivendita)
.addItem(new MenuItem()
.setCodMenu("MG057")
.setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto)
.setTitleText(it.integry.integrywmsnative.R.string.generate_orders)
.setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv)
.setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance))
.addItem(new MenuItem()
.setCodMenu("MG058")
.setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni)
.setTitleText(it.integry.integrywmsnative.R.string.doc_interni)
.setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni)
.setFragmentFactory(DocInterniFragment::newInstance))
// .addItem(new MenuItem()
// .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi)
@@ -183,7 +192,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
// .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list)
// .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list)
// .setFragmentClass(PVOrdiniAcquistoTransmittedListFragment.newInstance()))
);
);
}

View File

@@ -8,7 +8,7 @@ import java.util.UUID;
public class DataCache {
private static List<DataCacheDTO> dataCacheList = new ArrayList<>();
private static final List<DataCacheDTO> dataCacheList = new ArrayList<>();
public static String addItem(Object item) {

View File

@@ -19,7 +19,7 @@ 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.SqlMtbColt;
@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 8, exportSchema = false)
@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 10, exportSchema = false)
@TypeConverters({
DateConverter.class,
BigDecimalConverter.class

View File

@@ -53,6 +53,6 @@ public interface ArticoloGrigliaDao {
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND new_no_promo = 1")
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND qta_ord >= 1")
List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId);
}

View File

@@ -6,7 +6,10 @@ import androidx.room.ForeignKey;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.HashMap;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -68,6 +71,9 @@ public class ArticoloGriglia {
@ColumnInfo(name = "qta_proposta")
private float qtaProposta;
@ColumnInfo(name = "qta_ord")
private float qtaOrd;
@ColumnInfo(name = "id_griglia")
private int idGriglia;
@@ -202,6 +208,22 @@ public class ArticoloGriglia {
this.newNoPromo = newNoPromo;
}
public float getQtaOrd() {
return qtaOrd;
}
public void setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
}
public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta));
pairs.put("giacenza", String.valueOf(giacenza));
return new JSONObject(pairs).toString();
}
public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) {
ArticoloOrdine articolo = new ArticoloOrdine();
@@ -222,8 +244,8 @@ public class ArticoloGriglia {
articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setQtaOrd(0);
articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(this.getQtaOrd());
return articolo;
}

View File

@@ -70,6 +70,9 @@ public class ArticoloOrdine {
@ColumnInfo(name = "new_no_promo")
private boolean newNoPromo;
@ColumnInfo(name = "system_note")
private String systemNote;
@Ignore
private int ggScadenza = 0;
@@ -266,4 +269,12 @@ public class ArticoloOrdine {
this.bgTint = bgTint;
return this;
}
public String getSystemNote() {
return systemNote;
}
public void setSystemNote(String systemNote) {
this.systemNote = systemNote;
}
}

View File

@@ -50,6 +50,9 @@ public class Ordine {
@Ignore
private int countArticoli = 0;
@Ignore
private boolean orderNewProducts = false;
@ColumnInfo(name = "id_griglia")
private int idGriglia;
@@ -149,4 +152,13 @@ public class Ordine {
public void setDataOrdS(String dataOrd) {
setDataOrd(UtilityDate.recognizeDateWithExceptionHandler(dataOrd));
}
public boolean isOrderNewProducts() {
return orderNewProducts;
}
public Ordine setOrderNewProducts(boolean orderNewProducts) {
this.orderNewProducts = orderNewProducts;
return this;
}
}

View File

@@ -19,6 +19,7 @@ public class ArticoloDTO {
private float giacenza;
private float qtaPrevistaVendita;
private float qtaProposta;
private float qtaOrd;
public String getCodMart() {
@@ -151,6 +152,15 @@ public class ArticoloDTO {
return this;
}
public float getQtaOrd() {
return qtaOrd;
}
public ArticoloDTO setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public ArticoloGriglia toArticoloGriglia() {
ArticoloGriglia result = new ArticoloGriglia();
result.setBarCode(this.getBarCode());
@@ -164,6 +174,7 @@ public class ArticoloDTO {
result.setQtaMinOrdinabile(this.getQtaMinOrdinabile());
result.setGgScadenza(this.ggScadenza);
result.setNewNoPromo(this.newNoPromo);
result.setQtaOrd(this.getQtaOrd());
result.setGiacenza(this.giacenza);
result.setQtaPrevistaVendita(this.qtaPrevistaVendita);
result.setQtaProposta(this.qtaProposta);

View File

@@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.di.binders;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.databinding.BindingAdapter;
public class ImageViewBinders {
@BindingAdapter("tint")
public static void bindImageViewTint(final AppCompatImageView view, final int color) {
view.setColorFilter(color, android.graphics.PorterDuff.Mode.MULTIPLY);
}
}

View File

@@ -27,7 +27,6 @@ public class BaseDialogFragment extends DialogFragment {
private boolean mBarcodeListener = false;
@Override
public void show(FragmentManager manager, String tag) {
try {

View File

@@ -99,9 +99,17 @@ public abstract class BaseFragment extends Fragment {
}
}
public boolean onBackPressed() {
return false;
}
protected void popMe() {
requireActivity().runOnUiThread(() -> {
((IPoppableActivity) requireActivity()).pop();
});
if (requireActivity() instanceof IPoppableActivity) {
requireActivity().runOnUiThread(() -> {
((IPoppableActivity) requireActivity()).pop();
});
} else {
requireActivity().getSupportFragmentManager().popBackStack();
}
}
}

View File

@@ -21,13 +21,13 @@ public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.V
public ExtendedSectionedRecyclerView(ObservableArrayList<T> myDataset) {
mDataset.addAll(myDataset);
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback<T>() {
@Override
public void onChanged(ObservableList sender) {
public void onChanged(ObservableList<T> sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
notifyDataSetChanged();
checkIfEmpty();
}
});

View File

@@ -0,0 +1,9 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
public interface IOrdersLoadingListener {
void onOrderLoadingStarted();
void onOrderLoadingEnded();
}

View File

@@ -0,0 +1,40 @@
package it.integry.integrywmsnative.core.report;
import com.google.gson.annotations.SerializedName;
public enum ReportType {
@SerializedName("0")
ETICHETTA_SSCC_ACCETTAZIONE(0),
@SerializedName("1")
ETICHETTA_SSCC_LAVORAZIONE(1),
@SerializedName("2")
ETICHETTA_SSCC_SPEDIZIONE(2),
@SerializedName("3")
WMS_SPEDIZIONE_ETICHETTE_SSCC_ORD(3),
@SerializedName("4")
WMS_SPEDIZIONE_PACKING_LIST_ORD(4),
@SerializedName("5")
STAMPA_LISTINI_VENDITA(5);
private final int value;
ReportType(int value) {
this.value = value;
}
public static ReportType from(Object value) {
int castValue = (int) value;
for (ReportType b : ReportType.values()) {
if (b.value == castValue)
return b;
}
return null;
}
public int getValue() {
return this.value;
}
}

View File

@@ -26,8 +26,6 @@ public class CommonRESTException {
put(MESSAGE_KEY, "Barcode non letto correttamente");
put(EXCEPTION_KEY, NoResultFromBarcodeException.class);
}});
}};

View File

@@ -36,7 +36,9 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByBarcodeProd", (m) -> {
onComplete.run(response.body().getEntityList());
List<MtbAart> aartList = response.body().getEntityList();
aartList = Stream.of(aartList).filter(x -> x.getFlagStato().equalsIgnoreCase("A")).toList();
onComplete.run(aartList);
}, onFailed);
}

View File

@@ -6,11 +6,11 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.StbGestSetup;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.GestSetupDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import retrofit2.Call;
import retrofit2.Callback;
@@ -35,18 +35,18 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
public void onFailure(Call<ServiceRESTResponse<GestSetupDTO>> call, Throwable t) {
Log.e("GestSetup", t.toString());
// UtilityLogger.errorMe(new Exception(t));
if(onFailed != null) onFailed.run(new Exception(t));
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
public static void getBooleanValue(String gestName, String sectionName, String keySection, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
getValueStatic(gestName, sectionName, keySection, value -> {
if(value != null){
if (value != null) {
onComplete.run("S".equalsIgnoreCase(value.value));
} else onComplete.run(false);
}, ex -> {
if(onFailed != null) onFailed.run(ex);
if (onFailed != null) onFailed.run(ex);
});
}
@@ -62,25 +62,25 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
public void onFailure(Call<ServiceRESTResponse<GestSetupDTO>> call, Throwable t) {
Log.e("PrintCollo", t.toString());
UtilityLogger.errorMe(new Exception(t));
if(onFailed != null) onFailed.run(new Exception(t));
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
public static void getBooleanValue(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
getValueStatic(gestName, sectionName, keySection, codMdep, value -> {
if(value != null){
if (value != null) {
onComplete.run("S".equalsIgnoreCase(value.value));
} else onComplete.run(false);
}, ex -> {
if(onFailed != null) onFailed.run(ex);
if (onFailed != null) onFailed.run(ex);
});
}
public static void getValues(List<StbGestSetup> stbGestSetupList, RunnableArgs<List<StbGestSetup>> onComplete, RunnableArgs<Exception> onFailed) {
public static void getValues(String codMdep, List<StbGestSetup> stbGestSetupList, RunnableArgs<List<StbGestSetup>> onComplete, RunnableArgs<Exception> onFailed) {
GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class);
service.getGestSetupValues(stbGestSetupList).enqueue(new Callback<ServiceRESTResponse<List<StbGestSetup>>>() {
service.getGestSetupValues(codMdep, stbGestSetupList).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<StbGestSetup>>> call, Response<ServiceRESTResponse<List<StbGestSetup>>> response) {
analyzeAnswer(response, "GestSetup", onComplete, onFailed);
@@ -89,7 +89,7 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer {
@Override
public void onFailure(Call<ServiceRESTResponse<List<StbGestSetup>>> call, Throwable t) {
UtilityLogger.errorMe(new Exception(t));
if(onFailed != null) onFailed.run(new Exception(t));
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}

View File

@@ -28,6 +28,7 @@ public interface GestSetupRESTConsumerService {
@POST("gestSetupList")
Call<ServiceRESTResponse<List<StbGestSetup>>> getGestSetupValues(
@Query("codMdep") String codMdep,
@Body List<StbGestSetup> stbGestSetupList);
}

View File

@@ -46,11 +46,11 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
});
}
public void getOrdiniLavorazione(String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getOrdiniLavorazione(String flagEvaso, String codJfas, String codAnag, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(flagEvaso, codJfas)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
mesRESTConsumerService.getOrdiniLavorazione(null, flagEvaso, codJfas, codAnag)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
@@ -63,6 +63,7 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
});
}
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
@@ -82,7 +83,8 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) {
Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {
}.getType();
this.mSystemRESTConsumer.processSql(
"SELECT * FROM jtb_fasi WHERE cod_jfas_parent = " + UtilityDB.valueToString(codJfasParent),
typeOfObjectsList,

View File

@@ -22,4 +22,7 @@ public interface MesRESTConsumerService {
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas, @Query("codAnag") String codAnag);
}

View File

@@ -56,7 +56,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
.groupBy(ArticoloDTO::getCodMart)
.forEach(entry -> {
if(entry.getValue().size() == 1) {
if (entry.getValue().size() == 1) {
listaArticoli.add(entry.getValue().get(0));
} else {
for (ArticoloDTO articolo : entry.getValue()) {
@@ -93,7 +93,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
int i = 0;
for (ArticoloOrdine art : articoli) {
i++;
artRows.add(convertArtToDTO(art,i));
artRows.add(convertArtToDTO(art, i));
}
ordineDTO.setChiaveGriglia(griglia.getCodAlis());
@@ -109,9 +109,9 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
.enqueue(new Callback<List<ServiceRESTResponse<DtbOrdt>>>() {
@Override
public void onResponse(Call<List<ServiceRESTResponse<DtbOrdt>>> call, Response<List<ServiceRESTResponse<DtbOrdt>>> response) {
if (response.body() != null && response.body().size() > 0){
analyzeListOfAnswers(response, "getArticoliListino", dtoList-> {
if (dtoList.size() > 0){
if (response.body() != null && response.body().size() > 0) {
analyzeListOfAnswers(response, "getArticoliListino", dtoList -> {
if (dtoList.size() > 0) {
DtbOrdt dto = dtoList.get(0);
ordine.setTransmitted(true);
ordine.setTransmissionDate(UtilityDate.getDateInstance());
@@ -120,7 +120,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
ordine.setCodMdep(dto.getCodMdep());
ordine.setNumOrd(dto.getNumOrd());
onSuccess.run(ordine);
}else{
} else {
onFailed.run(new Exception("Nessun ordine generato"));
}
}, onFailed);
@@ -128,7 +128,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
}
@Override
public void onFailure(Call<List<ServiceRESTResponse<DtbOrdt>>>call, Throwable t) {
public void onFailure(Call<List<ServiceRESTResponse<DtbOrdt>>> call, Throwable t) {
Log.e("saveOrdineTerminale_pv", t.toString());
UtilityLogger.errorMe(new Exception(t));
onFailed.run(new Exception(t));
@@ -136,7 +136,6 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
});
}
private ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) {
@@ -147,6 +146,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
dto.setDescrizione(art.getDescrizione());
dto.setDataInsD(art.getDataIns());
dto.setUntMis(art.getUntMis());
dto.setSystemNote(art.getSystemNote());
dto.setQta(BigDecimal.valueOf(art.getQtaOrd()));
dto.setQtaCnf(BigDecimal.valueOf(art.getQtaCnf()));
dto.setColli(BigDecimal.ZERO);

View File

@@ -12,12 +12,15 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.report.ReportType;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.JasperDTO;
import it.integry.integrywmsnative.core.rest.model.JasperPairDTO;
import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -63,7 +66,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
Call<ServiceRESTResponse<Object>> callable = null;
callable = printerService.printCollo(testataColloToPrint);
callable = printerService.printCollo(testataColloToPrint);
callable.enqueue(new Callback<>() {
@Override
@@ -115,4 +118,64 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
});
}
public void printReportType(ReportType reportType, String codMdep, String codAnag, HashMap<String, Object> params, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ReportTypeDTO reportTypeDTO = new ReportTypeDTO();
reportTypeDTO.setReportType(reportType);
reportTypeDTO.setCodAnag(codAnag);
reportTypeDTO.setCodMdep(codMdep);
Stream.of(params)
.forEach(x -> reportTypeDTO.getParams().add(new JasperPairDTO(x.getKey(), x.getValue())));
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
printerService
.printReportType(reportTypeDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "printReportType", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (t.getMessage().contains("Printer not found")) {
onFailed.run(new NoPrintersFoundException());
} else onFailed.run(new Exception(t));
}
});
}
public void printReportType(ReportType reportType, HashMap<String, Object> params, Runnable onComplete, RunnableArgs<Exception> onFailed) {
printReportType(reportType, null, null, params, onComplete, onFailed);
}
public void printReportType(ReportType reportType, String codMdep, HashMap<String, Object> params, Runnable onComplete, RunnableArgs<Exception> onFailed) {
printReportType(reportType, codMdep, null, params, onComplete, onFailed);
}
public void printClosedOrders(PrintOrderCloseDTO dto, String codMdep, Runnable onComplete, RunnableArgs<Exception> onFailed) {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "printCollo", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if (t.getMessage().contains("Printer not found")) {
onFailed.run(new NoPrintersFoundException());
} else onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -4,7 +4,9 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.JasperDTO;
import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
@@ -26,9 +28,20 @@ public interface PrinterRESTConsumerService {
@Body JasperDTO jasperDTO
);
@POST("printReportType")
Call<ServiceRESTResponse<Object>> printReportType(
@Body ReportTypeDTO reportTypeDTO
);
@POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo(
@Body MtbColt mtbColtToPrint
);
@POST("wms/printClosedOrders")
Call<ServiceRESTResponse<Object>> printClosedOrders(
@Query("codMdep") String codMdep,
@Body PrintOrderCloseDTO printOrderCloseDTO
);
}

View File

@@ -0,0 +1,112 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.annimon.stream.Stream;
import com.google.gson.JsonObject;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProductionLinesRESTConsumer extends _BaseRESTConsumer {
public void avviaLineaDiProduzione(String codJfas, Integer hrNum, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<JsonObject>> callable = restService.avviaLineaDiProduzione(codJfas, hrNum);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "avviaLineaDiProduzione", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void arrestaLineaDiProduzione(String codJfas, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<JsonObject>> callable = restService.arrestaLineaDiProduzione(codJfas);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "arrestaLineaDiProduzione", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void avviaProduzioneArticoloSuLinea(String codJfas, String codMart, String partitaMag, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class, 300);
Call<ServiceRESTResponse<JsonObject>> callable = restService.avviaProduzioneArticoloSuLinea(codJfas, codMart, partitaMag);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "avviaProduzioneArticoloSuLinea", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getStatoLinee(String codMdep, RunnableArgs<List<ProdLineStatusDTO>> onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> callable = restService.getStatoLinee(codMdep);
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Response<ServiceRESTResponse<List<ProdLineStatusDTO>>> response) {
analyzeAnswer(response, "getStatoLinee", onComplete::run, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getLineDetails(ProdLineStatusDTO lineaProd, RunnableArgs<ProdLineStatusDTO> onComplete, RunnableArgs<Exception> onFailed) {
ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class);
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> callable = restService.getStatoLinee(lineaProd.getCodMdepLav());
callable.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Response<ServiceRESTResponse<List<ProdLineStatusDTO>>> response) {
analyzeAnswer(response, "getLineDetails", (lines) -> {
ProdLineStatusDTO newLine = Stream.of(lines).filter(dto -> dto.getCodJfas().equalsIgnoreCase(lineaProd.getCodJfas())).findFirstOrElse(null);
onComplete.run(newLine);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.JsonObject;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ProductionLinesRESTConsumerService {
@POST("mes_v2/avviaLineaDiProduzione")
Call<ServiceRESTResponse<JsonObject>> avviaLineaDiProduzione(@Query("codJfas") String codJfas, @Query("hrNum") Integer hrNum);
@POST("mes_v2/arrestaLineaDiProduzione")
Call<ServiceRESTResponse<JsonObject>> arrestaLineaDiProduzione(@Query("codJfas") String codJfas);
@POST("mes_v2/avviaProduzioneArticoloSuLinea")
Call<ServiceRESTResponse<JsonObject>> avviaProduzioneArticoloSuLinea(@Query("codJfas") String codJfas, @Query("codMart") String codMart, @Query("partitaMag") String partitaMag);
@GET("mes_v2/statoLineeProd")
Call<ServiceRESTResponse<List<ProdLineStatusDTO>>> getStatoLinee(@Query("codMdep") String codMdep);
}

View File

@@ -13,7 +13,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityString;
import retrofit2.Response;
public class _BaseRESTConsumer {
public abstract class _BaseRESTConsumer {
public static <T> void analyzeAnswer(Response<ServiceRESTResponse<T>> response, String logTitle, RunnableArgs<T> onComplete, RunnableArgs<Exception> onFailed) {
if (response.isSuccessful()) {
@@ -66,7 +66,7 @@ public class _BaseRESTConsumer {
}
} else {
Log.e(logTitle, response.body().getErrorMessage());
onFailed.run(new Exception(response.body().getErrorMessage()));
onFailed.run(CommonRESTException.tryRecognizeException(response.body().getErrorMessage()));
}
} else {
Log.e(logTitle, response.message());
@@ -76,7 +76,9 @@ public class _BaseRESTConsumer {
if (response.code() == 404) {
Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata");
onFailed.run(new Exception("Errore " + response.code() + ": risorsa non trovata (" + logTitle + ")"));
} else {
} else if (response.code() == 550)
onFailed.run(new NotValidLicenseException());
else {
Log.e(logTitle, "Status " + response.code() + ": " + response.message());
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
@@ -113,7 +115,9 @@ public class _BaseRESTConsumer {
if (responseList.code() == 404) {
Log.e(logTitle, "Errore " + responseList.code() + ": risorsa non trovata");
onFailed.run(new Exception("Errore " + responseList.code() + ": risorsa non trovata (" + logTitle + ")"));
} else {
} else if (responseList.code() == 550)
onFailed.run(new NotValidLicenseException());
else {
Log.e(logTitle, "Status " + responseList.code() + ": " + responseList.message());
onFailed.run(new Exception("Status " + responseList.code() + ": " + responseList.message()));
}

View File

@@ -0,0 +1,51 @@
package it.integry.integrywmsnative.core.rest.model;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.report.ReportType;
public class ReportTypeDTO {
private ReportType reportType;
private String codAnag;
private String codMdep;
private List<JasperPairDTO> params = new ArrayList<>();
public List<JasperPairDTO> getParams() {
return params;
}
public ReportTypeDTO setParams(List<JasperPairDTO> params) {
this.params = params;
return this;
}
public ReportType getReportType() {
return reportType;
}
public ReportTypeDTO setReportType(ReportType reportType) {
this.reportType = reportType;
return this;
}
public String getCodAnag() {
return codAnag;
}
public ReportTypeDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodMdep() {
return codMdep;
}
public ReportTypeDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
}

View File

@@ -26,6 +26,7 @@ public class SitArtOrdDTO {
private String descrizioneMsgr;
private String codMsfa;
private String descrizioneMsfa;
private String untord;
private final HashMap<String, Object> extraInfo = new HashMap<>();
@@ -212,4 +213,13 @@ public class SitArtOrdDTO {
public HashMap<String, Object> getExtraInfo() {
return extraInfo;
}
public String getUntord() {
return untord;
}
public SitArtOrdDTO setUntord(String untord) {
this.untord = untord;
return this;
}
}

View File

@@ -42,10 +42,14 @@ public class DBSettingsModel {
private boolean flagOrdinaArticoliOnScan;
private String docInterniCheckFornitore;
private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine;
private boolean flagPrintPackingListOnOrderClose;
private boolean flagPrintEtichetteOnOrderClose;
private int onNumCnfInputChanged = 1;
private int onQtaTotInputChanged = 1;
private boolean flagAccettazioneUseQtaOrd = false;
private boolean flagPickLiberoAllowEmptyDest = false;
private boolean flagAskInfoAggiuntiveSpedizione = false;
private String filterFornitoreProd;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza;
@@ -281,12 +285,21 @@ public class DBSettingsModel {
return this;
}
public String getReportNameSpedizionChiudiOrdine() {
return reportNameSpedizionChiudiOrdine;
public boolean isFlagPrintPackingListOnOrderClose() {
return flagPrintPackingListOnOrderClose;
}
public DBSettingsModel setReportNameSpedizionChiudiOrdine(String reportNameSpedizionChiudiOrdine) {
this.reportNameSpedizionChiudiOrdine = reportNameSpedizionChiudiOrdine;
public DBSettingsModel setFlagPrintPackingListOnOrderClose(boolean flagPrintPackingListOnOrderClose) {
this.flagPrintPackingListOnOrderClose = flagPrintPackingListOnOrderClose;
return this;
}
public boolean isFlagPrintEtichetteOnOrderClose() {
return flagPrintEtichetteOnOrderClose;
}
public DBSettingsModel setFlagPrintEtichetteOnOrderClose(boolean flagPrintEtichetteOnOrderClose) {
this.flagPrintEtichetteOnOrderClose = flagPrintEtichetteOnOrderClose;
return this;
}
@@ -299,6 +312,15 @@ public class DBSettingsModel {
return this;
}
public int getOnQtaTotInputChanged() {
return onQtaTotInputChanged;
}
public DBSettingsModel setOnQtaTotInputChanged(int onQtaTotInputChanged) {
this.onQtaTotInputChanged = onQtaTotInputChanged;
return this;
}
public List<String> getNotePerditaDocInterni() {
return notePerditaDocInterni;
}
@@ -344,4 +366,22 @@ public class DBSettingsModel {
this.flagOrdinaArticoliOnScan = flagOrdinaArticoliOnScan;
return this;
}
public boolean isFlagAskInfoAggiuntiveSpedizione() {
return flagAskInfoAggiuntiveSpedizione;
}
public DBSettingsModel setFlagAskInfoAggiuntiveSpedizione(boolean flagAskInfoAggiuntiveSpedizione) {
this.flagAskInfoAggiuntiveSpedizione = flagAskInfoAggiuntiveSpedizione;
return this;
}
public String getFilterFornitoreProd() {
return filterFornitoreProd;
}
public DBSettingsModel setFilterFornitoreProd(String filterFornitoreProd) {
this.filterFornitoreProd = filterFornitoreProd;
return this;
}
}

View File

@@ -258,6 +258,10 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FLAG_VERSAMENTO_DIRETTO"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FILTER_FORNTIORE_PROD"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@@ -270,10 +274,6 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("REPORT_PACKING_LIST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@@ -282,6 +282,10 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("ON_NUM_CNF_INPUT_CHANGED"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("ON_QTA_TOT_INPUT_CHANGED"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM")
.setSection("DOC_INTERNI")
@@ -306,9 +310,25 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("PICKING_LIBERO")
.setKeySection("FLAG_ALLOW_EMPTY_DEST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_PACKING_LIST_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_ETICHETTE_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_ALLOW_EMPTY_DEST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_ASK_INFO_AGGIUNTIVE"));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
GestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> {
dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class));
dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class));
dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class));
@@ -327,23 +347,28 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class));
dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class));
dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class));
dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class));
dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagAskInfoAggiuntiveSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_ASK_INFO_AGGIUNTIVE", Boolean.class));
dbSettingsModelIstance.setFilterFornitoreProd(getValueFromList(list, "PRODUZIONE", "FILTER_FORNTIORE_PROD", String.class));
String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class);
if (notePerdita != null) {
if (notePerdita != null)
dbSettingsModelIstance.setNotePerditaDocInterni(Arrays.asList(notePerdita.split("\\|")));
}
Integer onNumCnfInputChanged = getValueFromList(list, "SETUP", "ON_NUM_CNF_INPUT_CHANGED", Integer.class);
if (onNumCnfInputChanged != null) {
if (onNumCnfInputChanged != null)
dbSettingsModelIstance.setOnNumCnfInputChanged(onNumCnfInputChanged);
}
Integer onQtaTotInputChanged = getValueFromList(list, "SETUP", "ON_QTA_TOT_INPUT_CHANGED", Integer.class);
if (onQtaTotInputChanged != null)
dbSettingsModelIstance.setOnQtaTotInputChanged(onQtaTotInputChanged);
if (onComplete != null) onComplete.run();
}, onFailed);
@@ -355,7 +380,7 @@ public class SettingsManager {
StbGestSetup value = Stream.of(stbGestSetupList)
.filter(x -> x.getSection().equalsIgnoreCase(section) && x.getKeySection().equalsIgnoreCase(keySectionName))
.findFirst().get();
.findFirstOrElse(new StbGestSetup());
if (clazz == String.class) {
return clazz.cast(value.getValue());

View File

@@ -32,6 +32,10 @@ public class UtilityBarcode {
return barcodeScanDTO != null && (barcodeScanDTO.getType() == BarcodeType.CODE128 || barcodeScanDTO.getType() == BarcodeType.EAN128);
}
public static boolean isEan128(BarcodeScanDTO barcodeScanDTO) {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128;
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
return isEtichettaPosizione(barcodeScanDTO, true);
}
@@ -84,7 +88,7 @@ public class UtilityBarcode {
if (!UtilityString.isNullOrEmpty(barcode)) {
barcode = barcode.trim();
try {
return Integer.parseInt(barcode.substring(3));
return Integer.parseInt(barcode.substring(3, 10));
} catch (NumberFormatException nfex) {
throw new Exception("Impossibile leggere il numero collo dal barcode: " + barcode);
}

View File

@@ -31,8 +31,8 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormActivity;
import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter;
import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel;
@@ -81,8 +81,8 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
mBinding.setLifecycleOwner(this);
mBinding.setView(this);
mBinding.setViewModel(mViewModel);
mViewModel.mtbGrup.observe(getViewLifecycleOwner(),mtbGrup-> mViewModel.fetchProducts());
mViewModel.dtbTipi.observe(getViewLifecycleOwner(),dtbTipi-> mViewModel.fetchDocuments());
mViewModel.mtbGrup.observe(getViewLifecycleOwner(), mtbGrup -> mViewModel.fetchProducts());
mViewModel.dtbTipi.observe(getViewLifecycleOwner(), dtbTipi -> mViewModel.fetchDocuments());
this.initRecyclerView();
return mBinding.getRoot();
@@ -91,9 +91,9 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
@Override
public void onStart() {
super.onStart();
if (!this.mViewModel.hasDocDetails()){
if (!this.mViewModel.hasDocDetails()) {
mViewModel.init();
}else{
} else {
this.mViewModel.fetchDocuments();
}
}
@@ -115,30 +115,30 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
@Override
public void onDocDetailsChanged(DialogSelectDocInfoViewModel selection) {
if(selection.isInputValid()){
if (selection.isInputValid()) {
mViewModel.setSelectedDocDetails(selection);
mBinding.mainFab.setVisibility(View.VISIBLE);
}else{
} else {
mBinding.mainFab.setVisibility(View.GONE);
}
if (selection.requiresFornitore()){
if (selection.requiresFornitore()) {
mBinding.codAnagContainer.setVisibility(View.VISIBLE);
}else{
} else {
mBinding.codAnagContainer.setVisibility(View.GONE);
}
if (selection.getSelectedGruppoArt() != null){
if (selection.getSelectedGruppoArt() != null) {
mBinding.mtbGrpContainer.setVisibility(View.VISIBLE);
}else{
} else {
mBinding.mtbGrpContainer.setVisibility(View.GONE);
}
if (selection.requiresDocData()){
if (selection.requiresDocData()) {
mBinding.docContainer.setVisibility(View.VISIBLE);
mBinding.document.setText(Html.fromHtml(getString(R.string.doc_testata, String.valueOf(selection.getNumDoc()), UtilityDate.formatDate(selection.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))));
}else{
} else {
mBinding.docContainer.setVisibility(View.GONE);
}
@@ -155,7 +155,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
}
public void selectDocInfo() {
if (this.dialogInitialized){
if (this.dialogInitialized) {
DialogSelectDocInfoView.newInstance(
mDocInterniSetupDTO,
this.mViewModel.dtbTipi.getValue(),
@@ -201,6 +201,6 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
@Override
public void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts) {
requireActivity().startActivity(DocInterniEditFormActivity.newInstance(requireActivity(),document,arts));
requireActivity().startActivity(DocInterniEditFormActivity.newInstance(requireActivity(), document, arts, mViewModel.getTipoDoc()));
}
}

View File

@@ -2,8 +2,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -17,10 +15,10 @@ import it.integry.integrywmsnative.core.di.BindableInteger;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
@@ -91,7 +89,7 @@ public class DocInterniViewModel {
this.numDoc.postValue(selection.getNumDoc());
this.note.postValue(selection.getNote());
if (selection.getSelectedTipoDoc() != null ) {
if (selection.getSelectedTipoDoc() != null) {
this.dtbTipi.postValue(selection.getSelectedTipoDoc());
}
}
@@ -114,11 +112,11 @@ public class DocInterniViewModel {
this.sendOnLoadingStarted();
String codAnag = null, codVdes = null;
FornitoreDTO fornitore = this.fornitore.getValue();
if (fornitore != null){
if (fornitore != null) {
codAnag = fornitore.getCodAnag();
codVdes = fornitore.getCodVdes();
}
documentRepository.getLocalDocumentsByCodDtip(this.getCodDtip(), codAnag, codVdes, dataDoc.getValue(),numDoc.getValue(), list -> {
documentRepository.getLocalDocumentsByCodDtip(this.getCodDtip(), codAnag, codVdes, dataDoc.getValue(), numDoc.getValue(), list -> {
documentRepository.getNextNumCollo(nextNumCollo -> {
this.mDocsList.postValue(list);
this.setNextNumCollo(nextNumCollo);
@@ -141,6 +139,13 @@ public class DocInterniViewModel {
return this.dtbTipi.getValue().getCodDtip();
}
public TipiDocDTO getTipoDoc() {
if (this.dtbTipi.getValue() == null) {
return null;
}
return this.dtbTipi.getValue();
}
private String getCodMgrp() {
if (this.mtbGrup.getValue() == null) {
return null;
@@ -168,10 +173,10 @@ public class DocInterniViewModel {
document.setNumCollo(this.nextNumCollo);
document.setGestione("L");
document.setDataDoc(this.dataDoc.getValue());
if (this.numDoc.getValue() != null){
if (this.numDoc.getValue() != null) {
document.setNumDoc(Integer.parseInt(this.numDoc.getValue()));
}
if (this.fornitore.getValue() != null){
if (this.fornitore.getValue() != null) {
document.setCodAnag(this.fornitore.getValue().getCodAnag());
document.setCodVdes(this.fornitore.getValue().getCodVdes());
}

View File

@@ -35,6 +35,13 @@ public class DialogSelectDocInfoViewModel {
public void init(DocInterniSetupDTO initialList) {
this.mDocInterniSetupDTO = initialList;
this.mTipoDoc = null;
this.mGruppoArt = null;
this.mFornitore = null;
this.mDataDoc = null;
this.mNumDoc = null;
this.mNote = null;
this.mListener = null;
}
public String getCodDtip() {
@@ -112,7 +119,7 @@ public class DialogSelectDocInfoViewModel {
selectedDocType.getGestione().equalsIgnoreCase("V") ? "V" : "A"
);
} else {
return forn.getTipoAnag().equalsIgnoreCase("F") ;
return forn.getTipoAnag().equalsIgnoreCase("F");
}
})
.map(FornitoreDTO::getLabel).toList();
@@ -148,8 +155,7 @@ public class DialogSelectDocInfoViewModel {
public boolean requiresNote() {
return this.getSelectedTipoDoc() != null &&
this.getSelectedTipoDoc().getGestioneDoc().equals("P") &&
this.getSelectedTipoDoc().getGestione().equals("L")
;
this.getSelectedTipoDoc().getGestione().equals("L");
}
public boolean isInputValid() {
@@ -161,12 +167,12 @@ public class DialogSelectDocInfoViewModel {
return false;
}
if (this.requiresDocData() && (this.getDataDoc() == null || this.getNumDoc() == null)){
if (this.requiresDocData() && (this.getDataDoc() == null || this.getNumDoc() == null)) {
return false;
}
if (this.requiresNote() && (this.getNote() == null || this.getNote().length() <= 0) ){
if (this.requiresNote() && (this.getNote() == null || this.getNote().length() <= 0)) {
return false;
}
@@ -174,7 +180,7 @@ public class DialogSelectDocInfoViewModel {
}
public boolean requiresDocData() {
TipiDocDTO doc = this.getSelectedTipoDoc();
TipiDocDTO doc = this.getSelectedTipoDoc();
return doc != null && doc.getGestioneDoc().equalsIgnoreCase("P") && !doc.getGestione().equalsIgnoreCase("L");
}

View File

@@ -19,6 +19,8 @@ public class GrigliaAcquistiChildDTO {
private float giacenza;
private float qtaPrevistaVendita;
private float qtaProposta;
private BigDecimal qtaOrd;
public String getCodMart() {
return codMart;
@@ -154,4 +156,13 @@ public class GrigliaAcquistiChildDTO {
this.newNoPromo = newNoPromo;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public GrigliaAcquistiChildDTO setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
}

View File

@@ -6,6 +6,7 @@ public class TipiDocDTO {
private String descrizione;
private String gestione;
private String gestioneDoc;
private boolean requireNote = false;
public String getCodDtip() {
return codDtip;
@@ -38,7 +39,17 @@ public class TipiDocDTO {
public void setGestioneDoc(String gestioneDoc) {
this.gestioneDoc = gestioneDoc;
}
public String getLabel(){
return this.codDtip +" - "+this.descrizione;
public String getLabel() {
return this.codDtip + " - " + this.descrizione;
}
public boolean isRequireNote() {
return requireNote;
}
public TipiDocDTO setRequireNote(boolean requireNote) {
this.requireNote = requireNote;
return this;
}
}

View File

@@ -39,6 +39,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
@@ -52,6 +53,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
private static final String DATA_KEY_DOCUMENT = "document";
private static final String DATA_KEY_PRODUCTS_LIST = "productsList";
private static final String DATA_KEY_TIPO_DOC = "docType";
@Inject
MtbColrRepository documentRowsRepository;
@@ -75,13 +77,15 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
public BindableBoolean isDocumentExportable = new BindableBoolean(false);
private final ObservableArrayList<SqlMtbColr> documentRowsObservableList = new ObservableArrayList<>();
public static Intent newInstance(Context context, SqlMtbColt document, GrigliaAcquistiDTO productList) {
public static Intent newInstance(Context context, SqlMtbColt document, GrigliaAcquistiDTO productList, TipiDocDTO tipoDoc) {
Intent myIntent = new Intent(context, DocInterniEditFormActivity.class);
String doc = DataCache.addItem(document);
String productsKey = DataCache.addItem(productList);
String docType = DataCache.addItem(tipoDoc);
myIntent.putExtra(DATA_KEY_DOCUMENT, doc);
myIntent.putExtra(DATA_KEY_PRODUCTS_LIST, productsKey);
myIntent.putExtra(DATA_KEY_TIPO_DOC, docType);
return myIntent;
}
@@ -96,7 +100,14 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
SqlMtbColt document = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_DOCUMENT));
GrigliaAcquistiDTO griglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_PRODUCTS_LIST));
List<GrigliaAcquistiChildDTO> productList = griglia.getGrigliaAcquistiChild();
this.initViewModel(document, productList);
TipiDocDTO docType = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_TIPO_DOC));
this.initViewModel();
this.viewModel.setDocument(document);
this.viewModel.setProductsList(productList);
this.viewModel.setTipoDoc(docType);
this.initView();
this.initBindables();
this.initRecyclerView();
@@ -137,12 +148,9 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
binding.bottomSheetMtbColrEdit.init(binding.bottomSheetMtbColrEdit, binding.bottomSheetMtbColrEditBackground);
}
private void initViewModel(SqlMtbColt document, List<GrigliaAcquistiChildDTO> productList) {
private void initViewModel() {
this.viewModel.init();
this.viewModel.setListeners(this);
this.viewModel.setDocument(document);
this.viewModel.setProductsList(productList);
}
private void initRecyclerView() {
@@ -239,8 +247,10 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
.setCanOverflowOrderQuantity(false)
.setCanLUBeClosed(false)
.setNotesAllowed(true)
.setNotesMandatory(this.viewModel.isNotesMandatory())
.setDataScadMandatory(flagTracciabilita)
.setCanPartitaMagBeChanged(flagTracciabilita)
.setNumCnfEditable(false)
.setSuggestPartitaMag(data -> {
Date dataScad = data.getDataScad();
String partitaMag = null;

View File

@@ -26,6 +26,7 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ArtDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ColloDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2ResultDTO;
@@ -38,6 +39,7 @@ public class DocInterniEditFormViewModel {
private final DocInterniRESTConsumer docInterniRESTConsumer;
private DocInterniEditFormViewModel.Listener listener;
private List<GrigliaAcquistiChildDTO> productsList;
private TipiDocDTO tipoDoc;
private boolean isCheckPartitaMag = false;
private JSONObject checkFornitoreRules = null;
public MutableLiveData<SqlMtbColt> document = new MutableLiveData<>();
@@ -299,6 +301,15 @@ public class DocInterniEditFormViewModel {
return Stream.of(productsList).filter(prod -> prod.codMart.equalsIgnoreCase(codMart)).findFirstOrElse(null);
}
public DocInterniEditFormViewModel setTipoDoc(TipiDocDTO docType) {
this.tipoDoc = docType;
return this;
}
public boolean isNotesMandatory() {
return this.tipoDoc != null && this.tipoDoc.isRequireNote();
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);

View File

@@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepo;
import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
@@ -692,30 +693,30 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, () -> {
this.onLoadingEnded();
});
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
};
private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) {
List<OrdiniUscitaElencoDTO> tmpList;
requireActivity().runOnUiThread(() -> {
List<OrdiniUscitaElencoDTO> tmpList;
if (filteredList != null) {
tmpList = filteredList;
} else if (mAppliedFilterViewModel != null) {
mAppliedFilterViewModel.applyAllTests();
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
} else {
tmpList = mViewModel.getOrderList().getValue();
}
if (filteredList != null) {
tmpList = filteredList;
} else if (mAppliedFilterViewModel != null) {
mAppliedFilterViewModel.applyAllTests();
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
} else {
tmpList = mViewModel.getOrderList().getValue();
}
var list = convertDataModelToListModel(tmpList);
var list = convertDataModelToListModel(tmpList);
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(list);
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(list);
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get()));
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get()));
});
}
private List<OrdiniUscitaElencoListModel> convertDataModelToListModel(List<OrdiniUscitaElencoDTO> dataList) {
@@ -780,6 +781,17 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
this.mViewModel.loadPicking(selectedOrders, this.mAppliedFilterViewModel.getSelectedMtbGrup());
}
@Override
public void onFilterNumOrderApplied(List<OrdiniUscitaElencoDTO> filteredOrder) {
requireActivity().runOnUiThread(() -> {
var numOrders = Stream.of(filteredOrder)
.map(OrdineInevasoDTO::getNumOrd)
.distinct()
.toList();
this.mAppliedFilterViewModel.setNumOrdFilter(numOrders);
});
}
@Override
public void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
refreshList(filteredOrders);

View File

@@ -154,12 +154,15 @@ public class OrdiniUscitaElencoViewModel {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
RunnableArgs<List<OrdiniUscitaElencoDTO>> onBarcodeScanComplete = orderList -> {
onComplete.run();
this.sendOnOrderFiltered(orderList);
onComplete.run();
};
if (UtilityBarcode.isBarcodeOrdineV(barcodeScanDTO)) {
this.executeEtichettaOrdineV(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
this.executeEtichettaOrdineV(barcodeScanDTO.getStringValue(), foundOrder -> {
this.sendOnFilterNumOrderApplied(foundOrder);
onComplete.run();
});
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
@@ -196,10 +199,11 @@ public class OrdiniUscitaElencoViewModel {
final String finalGestione = gestione;
final Date finalDate = date;
List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
.filter(x -> x.getNumOrd() == numOrd && x.getGestione().equalsIgnoreCase(finalGestione) && x.getDataOrdD().equals(finalDate)).toList();
List<OrdiniUscitaElencoDTO> foundItem = Stream.of(mOrderList.getValue())
.filter(x -> x.getNumOrd() == numOrd && x.getGestione().equalsIgnoreCase(finalGestione) && x.getDataOrdD().equals(finalDate))
.toList();
onComplete.run(filteredOrders);
onComplete.run(foundItem);
}
@@ -284,6 +288,10 @@ public class OrdiniUscitaElencoViewModel {
if (this.mListener != null) mListener.onError(ex);
}
private void sendOnFilterNumOrderApplied(List<OrdiniUscitaElencoDTO> filteredOrder) {
if (this.mListener != null) mListener.onFilterNumOrderApplied(filteredOrder);
}
private void sendOnOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
if (this.mListener != null) mListener.onOrderFiltered(filteredOrders);
}
@@ -297,6 +305,8 @@ public class OrdiniUscitaElencoViewModel {
void onError(Exception ex);
void onFilterNumOrderApplied(List<OrdiniUscitaElencoDTO> filteredOrder);
void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders);
void onOrdersDispatched(List<OrdineUscitaInevasoDTO> orders, List<SitArtOrdDTO> sitArts, List<MtbColt> alreadyRegisteredMtbColts);

View File

@@ -213,7 +213,7 @@ public class PickingLiberoViewModel {
if (posizione != null && posizione.isFlagMonoCollo()) {
this.executePosizione(posizione, articolo, onComplete);
} else if(mDefaultGestione == GestioneEnum.VENDITA){
} else if (mDefaultGestione == GestioneEnum.VENDITA) {
this.dispatchArt(articolo, ean128Model);
onComplete.run();
} else {
@@ -439,6 +439,7 @@ public class PickingLiberoViewModel {
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {
MtbColr initialMtbColr = mtbColrObservableField.get(i);
var startIdx = (value.getMtbColr().size() - mtbColrObservableField.size());
initialMtbColr
.setDataCollo(value.getDataColloS())
@@ -446,7 +447,7 @@ public class PickingLiberoViewModel {
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo());
initialMtbColr.setRiga(value.getMtbColr().get(i).getRiga());
initialMtbColr.setRiga(value.getMtbColr().get(startIdx + i).getRiga());
mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i));
}
@@ -626,7 +627,7 @@ public class PickingLiberoViewModel {
UtilityString.equalsIgnoreCase(x.getCodCol(), mtbColrToUpdate.getCodCol()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), mtbColrToUpdate.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getPartitaMag(), mtbColrToUpdate.getPartitaMag()))
.single();
.findFirstOrElse(null);
}

View File

@@ -0,0 +1,355 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
import android.text.SpannableString;
import android.widget.Toast;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import com.google.android.material.chip.Chip;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityProdDettaglioLineaBinding;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.BottomSheetLineAction;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.DialogStartProduction;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
public class ProdDettaglioLineaActivity extends BaseActivity implements ProdDettaglioLineaViewModel.Listener {
private static final String DATA_KEY_LINE = "keyLinea";
private static final String DATA_KEY_FRAGMENT_LISTENER = "onFragmentClose";
private ActivityProdDettaglioLineaBinding mBinding;
public final ObservableField<String> listaOrd = new ObservableField<>();
public final BindableString lineaLabel = new BindableString();
public final BindableBoolean isStarted = new BindableBoolean(false);
public final BindableBoolean isPaused = new BindableBoolean(false);
public final BindableBoolean flagShowProdInfo = new BindableBoolean(false);
public final BindableString hrNum = new BindableString();
public final BindableString codMart = new BindableString();
public final BindableString partitaMag = new BindableString();
public final BindableString productDescription = new BindableString();
private Runnable onResumeRunnable = null;
private int barcodeScannerIstanceID = -1;
@Inject
ProdDettaglioLineaViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
public static Intent newInstance(Context context, ProdLineStatusDTO prodLine) {
Intent myIntent = new Intent(context, ProdDettaglioLineaActivity.class);
String keyLine = DataCache.addItem(prodLine);
myIntent.putExtra(DATA_KEY_LINE, keyLine);
return myIntent;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityProdDettaglioLineaBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
setSupportActionBar(mBinding.toolbar);
setTitle(R.string.line_details);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ProdLineStatusDTO lineaProd = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_LINE));
if (lineaProd == null) {
Toast.makeText(this, "Selezionare una linea di produzione e riprovare", Toast.LENGTH_SHORT).show();
close();
return;
}
MainApplication.appComponent
.prodDettaglioLineaComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setViewModel(mViewModel);
mBinding.setView(this);
this.init();
mViewModel.init(lineaProd);
}
private void init() {
initBarcodeReader();
mViewModel.lineaProd.observe(this, lineaProd -> {
this.listaOrd.set(lineaProd.getListaOrd());
this.lineaLabel.set(lineaProd.getLabel());
this.isStarted.set(lineaProd.isStarted());
this.isPaused.set(lineaProd.isPaused());
this.partitaMag.set(lineaProd.getPartitaMag());
this.codMart.set(lineaProd.getCodMart());
this.productDescription.set(lineaProd.getDescrizioneProd());
this.flagShowProdInfo.set(lineaProd.isStarted() && !UtilityString.isNullOrEmpty(lineaProd.getCodMart()));
this.hrNum.set(lineaProd.getQtaAllocate().toString());
});
listaOrd.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
renderOrdersChips();
}
});
getSupportFragmentManager()
.setFragmentResultListener(DATA_KEY_FRAGMENT_LISTENER, this, (requestKey, result) -> {
if (onResumeRunnable != null) {
onResumeRunnable.run();
onResumeRunnable = null;
}
});
}
private void renderOrdersChips() {
mBinding.ordersList.removeAllViews();
String listaOrdString = listaOrd.get();
if (!UtilityString.isNullOrEmpty(listaOrdString)) {
for (String ord : listaOrdString.split("\\|")) {
Chip chip = new Chip(this);
chip.setClickable(false);
chip.setText(ord);
mBinding.ordersList.addView(chip);
}
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onSettingsRequest(ProdLineStatusDTO lineaProd) {
BottomSheetLineAction.newInstance(lineaProd, this::requestResources, this::requestOrderChange, this::requestProductionStop, this::requestMaterialRecover, BarcodeManager::enable).show(getSupportFragmentManager(), "BottomSheetLineAction");
}
@Override
public void confirmInconsistentDeposit(Runnable onConfirm) {
this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("L'articolo che si vuole versare non è compatibile con nessun ordine presente sulla linea!"
+ "<br /> <br/>" +
"Vuoi versarlo comunque?"),
null,
onConfirm,
() -> {
onLoadingEnded();
BarcodeManager.enable();
}
).show(getSupportFragmentManager(), "confirmOrderClose");
});
}
@Override
public void requestQtaVersamento(MtbColr mtbColr,
RunnableArgs<PickedQuantityDTO> onComplete) {
onLoadingStarted();
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbColr.getMtbAart())
.setInitialNumCnf(mtbColr.getNumCnf())
.setInitialQtaCnf(mtbColr.getQtaCnf())
.setInitialQtaTot(mtbColr.getQtaCol())
.setTotalQtaAvailable(mtbColr.getQtaCol())
.setTotalNumCnfAvailable(mtbColr.getNumCnf())
.setQtaCnfAvailable(mtbColr.getQtaCnf())
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScad(mtbColr.getDataScadPartitaD())
.setCanOverflowOrderQuantity(false)
.setCanPartitaMagBeChanged(false)
.setCanLUBeClosed(false)
.setFocusOnStart(false);
if (!mDialogInputQuantityV2View.isVisible())
this.runOnUiThread(() -> {
onLoadingEnded();
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO);
})
.setOnAbort(this::onLoadingEnded)
.show(this.getSupportFragmentManager(), "tag");
});
else this.onLoadingEnded();
}
public void onLineStop() {
onBackPressed();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
public void requestResources() {
this.onLoadingEnded();
BarcodeManager.disable();
this.runOnUiThread(() -> {
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il numero di risorse da allocare", this.hrNum.get(), "n. risorse", qta -> {
this.onLoadingStarted();
try {
Integer hrNum = Integer.parseInt(qta);
this.mViewModel.startProductionLine(hrNum);
} catch (NumberFormatException ex) {
this.onError(new Exception("Inserire un numero di risorse valido"));
}
}, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show();
});
}
public void requestOrderChange() {
this.onLoadingEnded();
this.runOnUiThread(() -> {
DialogStartProduction.newInstance((dto) -> {
this.mViewModel.checkBarcodeAndStartOrdine(dto);
}).show(getSupportFragmentManager(), "DialogStartProduction");
});
}
public void requestProductionStop() {
this.onLoadingEnded();
BarcodeManager.disable();
ProdLineStatusDTO lineaProd = mViewModel.getLineaProd();
if (UtilityString.isNullOrEmpty(lineaProd.getListaOrd())) {
mViewModel.stopProduction();
} else {
this.confirmOrderClose(() -> {
mViewModel.stopProduction();
});
}
}
public void requestMaterialRecover() {
this.onLoadingEnded();
BarcodeManager.disable();
this.runOnUiThread(() -> {
getSupportFragmentManager()
.beginTransaction()
.add(R.id.frame_layout_container,
ProdRecuperoMaterialeFragment.newInstance(mViewModel.lineaProd.getValue().getCodJfas(), DATA_KEY_FRAGMENT_LISTENER))
.addToBackStack("ProdRecuperoMaterialeFragment")
.commit();
});
}
@Override
public void successDialog(String message, Runnable onComplete) {
BarcodeManager.disable();
this.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success),
new SpannableString(message), null, onComplete).show(getSupportFragmentManager(), "successDialog"));
}
@Override
public void showToast(String message, Runnable onComplete) {
this.runOnUiThread(() -> {
UtilityToast.showToast(message);
onComplete.run();
});
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
};
@Override
public void confirmOrderClose(Runnable onConfirm) {
this.onLoadingEnded();
this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(
Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea."
+ "<br /> <br/>" +
"Continuare?"),
null,
() -> {
DialogSimpleMessageView.makeInfoDialog(
null,
Html.fromHtml("Vuoi recuperare del materiale prima di chiudere gli ordini?"),
null,
() -> {
onResumeRunnable = onConfirm;
this.requestMaterialRecover();
},
onConfirm
).show(getSupportFragmentManager(), "confirmOrderClose");
},
BarcodeManager::enable
).show(getSupportFragmentManager(), "confirmOrderClose");
});
}
public void close() {
onBackPressed();
}
@Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count > 0) {
getSupportFragmentManager().popBackStack();
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import dagger.Subcomponent;
@Subcomponent
public interface ProdDettaglioLineaComponent {
@Subcomponent.Factory
interface Factory {
ProdDettaglioLineaComponent create();
}
void inject(ProdDettaglioLineaActivity prodDettaglioLineaActivity);
}

View File

@@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
@Module(subcomponents = ProdDettaglioLineaComponent.class)
public class ProdDettaglioLineaModule {
@Provides
ProdDettaglioLineaViewModel providesProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
return new ProdDettaglioLineaViewModel(productionLinesRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer, mesRESTConsumer);
}
}

View File

@@ -0,0 +1,236 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea;
import androidx.lifecycle.MutableLiveData;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class ProdDettaglioLineaViewModel {
private Listener mListener;
private final ProductionLinesRESTConsumer productionLinesRESTConsumer;
private final ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer;
private final MesRESTConsumer mesRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
public final MutableLiveData<ProdLineStatusDTO> lineaProd = new MutableLiveData<>();
@Inject
public ProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer magazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
this.productionLinesRESTConsumer = productionLinesRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.colliMagazzinoRESTConsumer = magazzinoRESTConsumer;
this.mesRESTConsumer = mesRESTConsumer;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaAnonima(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEAN128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
handleSSCCBarcode(barcodeScanDTO.getStringValue(), onComplete);
}
private void handleSSCCBarcode(String sscc, Runnable onComplete) {
this.colliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
if (mtbColt == null) {
this.sendError(new NoLUFoundException());
} else {
if (mtbColt.getMtbColr().size() <= 0) {
this.sendError(new Exception("E' stata scansionata una UL già vuota"));
} else {
this.sendOnLUSelected(mtbColt);
}
}
}, this::sendError);
}
private void sendOnLUSelected(MtbColt mtbColt) {
this.sendOnLoadingStarted();
this.checkOrdersCompatibility(mtbColt, () -> {
MtbColr row = mtbColt.getMtbColr().get(0);
mListener.requestQtaVersamento(
row,
dto -> {
sendOnLoadingStarted();
row.setQtaCnf(dto.getQtaCnf());
row.setNumCnf(dto.getNumCnf());
row.setQtaCol(dto.getQtaTot());
row.setPesoLordoKg(null);
row.setPesoNettoKg(null);
ProdLineStatusDTO prodLine = lineaProd.getValue();
MtbDepoPosizione posizione = new MtbDepoPosizione();
posizione.setPosizione(prodLine.getCodJfas());
posizione.setCodMdep(prodLine.getCodMdepLav());
posizione.setFlagLineaProduzione("S");
this.colliMagazzinoRESTConsumer.createColloScaricoDaCarico(mtbColt, posizione,
generatedMtbColt -> {
this.sendOnLoadingEnded();
this.mListener.showToast("Versamento completato!", BarcodeManager::enable);
}, this::sendError);
});
});
}
private void checkOrdersCompatibility(MtbColt mtbColt, Runnable onComplete) {
mesRESTConsumer.getOrdiniLavorazioneMateriale(lineaProd.getValue().getCodJfas(), getIdMaterialeFromCollo(mtbColt), ordini -> {
if (ordini != null && ordini.size() > 0) {
onComplete.run();
} else {
this.mListener.confirmInconsistentDeposit(onComplete);
}
}, this::sendError);
}
private String getIdMaterialeFromCollo(MtbColt mtbColt) {
MtbAart articolo = mtbColt.getMtbColr().get(0).getMtbAart();
return UtilityString.isNullOrEmpty(articolo.getIdArtEqui()) ? articolo.getCodMart() : articolo.getIdArtEqui();
}
private void executeEAN128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
if (ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
handleSSCCBarcode(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public void settings() {
this.mListener.onSettingsRequest(lineaProd.getValue());
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public void startProductionLine(Integer hrNum) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(),
hrNum,
() -> this.mListener.successDialog("Operazione completata", this::loadLineDetails),
this::sendError);
}
private void startProduction(String codMart, String partitaMag) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag,
() -> this.mListener.successDialog("Operazione completata", this::loadLineDetails),
this::sendError);
}
public void stopProduction() {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(),
() -> this.mListener.successDialog("Operazione completata", this::onLineStop),
this::sendError);
}
private void onLineStop() {
this.mListener.onLineStop();
}
public void checkBarcodeAndStartOrdine(BarcodeScanDTO dto) {
this.sendOnLoadingStarted();
ProdLineStatusDTO prodLine = lineaProd.getValue();
mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> {
String codMart = ean128.Content;
String partitaMag = ean128.BatchLot;
if (!prodLine.isStarted()) {
this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!"));
} else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) {
this.startProduction(codMart, partitaMag);
} else {
this.mListener.confirmOrderClose(() -> {
this.startProduction(codMart, partitaMag);
});
}
}, this::sendError);
}
public void loadLineDetails() {
sendOnLoadingStarted();
if (lineaProd.getValue() == null) {
this.sendError(new Exception("Nessuna linea selezionata!"));
return;
}
productionLinesRESTConsumer.getLineDetails(lineaProd.getValue(), linea -> {
this.lineaProd.postValue(linea);
sendOnLoadingEnded();
}, this::sendError);
}
public void init(ProdLineStatusDTO lineaProd) {
this.lineaProd.setValue(lineaProd);
this.loadLineDetails();
}
public ProdLineStatusDTO getLineaProd() {
return lineaProd.getValue();
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void successDialog(String message, Runnable onComplete);
void showToast(String message, Runnable onComplete);
void requestQtaVersamento(MtbColr mtbColr, RunnableArgs<PickedQuantityDTO> onComplete);
void onSettingsRequest(ProdLineStatusDTO lineaProd);
void confirmInconsistentDeposit(Runnable onConfirm);
void onLineStop();
void confirmOrderClose(Runnable onConfirm);
}
public ProdDettaglioLineaViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
}

View File

@@ -0,0 +1,124 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class BottomSheetLineAction extends BottomSheetDialogFragment {
private BottomSheetLineActionsBinding mBinding;
private ProdLineStatusDTO prodLine;
private Runnable onChangeResourcesRequest;
private Runnable onChangeOrdersRequest;
private Runnable onLineCloseRequest;
private Runnable onRecoverRequest;
private Runnable onCancelAction;
public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, Runnable onChangeResourcesRequest, Runnable onChangeOrdersRequest, Runnable onLineCloseRequest, Runnable onRecoverRequest, Runnable onCancel) {
BottomSheetLineAction fragment = new BottomSheetLineAction();
fragment
.setProdLine(dto)
.setOnChangeResourcesRequest(onChangeResourcesRequest)
.setOnChangeOrdersRequest(onChangeOrdersRequest)
.setOnRecoverRequest(onRecoverRequest)
.setOnLineCloseRequest(onLineCloseRequest)
.setOnCancelAction(onCancel);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = BottomSheetLineActionsBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
mBinding.setView(this);
mBinding.setListModel(this.prodLine);
return mBinding.getRoot();
}
public BottomSheetLineAction setOnCancelAction(Runnable onCancelAction) {
this.onCancelAction = onCancelAction;
return this;
}
public BottomSheetLineAction setOnChangeResourcesRequest(Runnable onChangeResourcesRequest) {
this.onChangeResourcesRequest = onChangeResourcesRequest;
return this;
}
public BottomSheetLineAction setOnChangeOrdersRequest(Runnable onChangeOrdersRequest) {
this.onChangeOrdersRequest = onChangeOrdersRequest;
return this;
}
public BottomSheetLineAction setOnRecoverRequest(Runnable onRecoverRequest) {
this.onRecoverRequest = onRecoverRequest;
return this;
}
public BottomSheetLineAction setOnLineCloseRequest(Runnable onLineCloseRequest) {
this.onLineCloseRequest = onLineCloseRequest;
return this;
}
public ProdLineStatusDTO getProdLine() {
return prodLine;
}
public BottomSheetLineAction setProdLine(ProdLineStatusDTO prodLine) {
this.prodLine = prodLine;
return this;
}
public void onResourcesClicked() {
if (this.onChangeResourcesRequest != null) {
this.onChangeResourcesRequest.run();
}
this.dismiss();
}
public void onPlayClicked() {
if (this.onChangeOrdersRequest != null) {
this.onChangeOrdersRequest.run();
}
this.dismiss();
}
public void onStopClicked() {
if (this.onLineCloseRequest != null) {
this.onLineCloseRequest.run();
}
this.dismiss();
}
public void onRecoverClicked() {
if (this.onRecoverRequest != null) {
this.onRecoverRequest.run();
}
this.dismiss();
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
if (this.onCancelAction != null) {
onCancelAction.run();
}
super.onCancel(dialog);
}
}

View File

@@ -0,0 +1,77 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.databinding.DialogStartProductionBinding;
public class DialogRecoverUl extends BaseDialogFragment {
private int barcodeScannerIstanceID = -1;
private RunnableArgs<BarcodeScanDTO> onScanSuccessful;
private DialogStartProductionBinding mBinding;
public static DialogRecoverUl newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
Bundle args = new Bundle();
DialogRecoverUl fragment = new DialogRecoverUl();
fragment.setArguments(args);
fragment.setOnScanSuccessful(onScanSuccessful);
return fragment;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onDismiss(dialog);
}
public DialogRecoverUl setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
this.onScanSuccessful = onScanSuccessful;
return this;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DialogStartProductionBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
this.initBarcodeReader();
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBinding.getRoot();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(this::processBarcode)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void processBarcode(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.onScanSuccessful.run(barcodeScanDTO);
this.dismiss();
} else {
this.onError(new Exception("Il barcode scansionato non è valido!"));
}
}
}

View File

@@ -0,0 +1,105 @@
package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogStartProductionBinding;
public class DialogStartProduction extends BaseDialogFragment {
private int barcodeScannerIstanceID = -1;
private RunnableArgs<BarcodeScanDTO> onScanSuccessful;
private DialogStartProductionBinding mBinding;
private String title;
private String label;
public static DialogStartProduction newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
Bundle args = new Bundle();
DialogStartProduction fragment = new DialogStartProduction();
fragment.setArguments(args);
fragment.setOnScanSuccessful(onScanSuccessful);
return fragment;
}
public String getTitle() {
return title;
}
public DialogStartProduction setTitle(String title) {
this.title = title;
return this;
}
public String getLabel() {
return label;
}
public DialogStartProduction setLabel(String label) {
this.label = label;
return this;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onDismiss(dialog);
}
public DialogStartProduction setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessful) {
this.onScanSuccessful = onScanSuccessful;
return this;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DialogStartProductionBinding.inflate(inflater, container, false);
mBinding.setLifecycleOwner(this);
this.initBarcodeReader();
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
if (!UtilityString.isNullOrEmpty(title)) {
mBinding.titleText.setText(title);
}
if (!UtilityString.isNullOrEmpty(label)) {
mBinding.scanLabel.setText(label);
}
return mBinding.getRoot();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(this::processBarcode)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void processBarcode(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.dismiss();
this.onScanSuccessful.run(barcodeScanDTO);
} else {
this.onError(new Exception("Il barcode scansionato non è valido!"));
}
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import dagger.Subcomponent;
@Subcomponent
public interface ProdLineeProduzioneComponent {
@Subcomponent.Factory
interface Factory {
ProdLineeProduzioneComponent create();
}
void inject(ProdLineeProduzioneFragment prodLineeProduzioneFragment);
}

View File

@@ -0,0 +1,151 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import android.content.Context;
import android.os.Bundle;
import android.text.InputType;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaActivity;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdLineeProduzioneFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdLineeProduzioneViewModel.Listener {
@Inject
ProdLineeProduzioneViewModel mViewModel;
private final ObservableArrayList<ProdLineStatusDTO> mLinesObservableList = new ObservableArrayList<>();
private FragmentLineeProdBinding mBinding;
private ElevatedToolbar mToolbar;
private int barcodeScannerIstanceID = -1;
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data);
};
public static ProdLineeProduzioneFragment newInstance() {
return new ProdLineeProduzioneFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBinding = FragmentLineeProdBinding.inflate(inflater, container, false);
MainApplication.appComponent
.prodLineeProduzioneComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setLifecycleOwner(this);
this.initRecyclerView();
this.initBarcodeReader();
return mBinding.getRoot();
}
@Override
public void onStart() {
super.onStart();
mViewModel.init();
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
public void refreshLineeProd(List<ProdLineStatusDTO> linesList) {
this.mLinesObservableList.clear();
if (linesList != null) {
this.mLinesObservableList.addAll(linesList);
}
}
private void initRecyclerView() {
this.mViewModel.getProdLinesList().observe(getViewLifecycleOwner(), this::refreshLineeProd);
LinesListAdapter prodLinesListAdapter = new LinesListAdapter(this.requireActivity(), this.mLinesObservableList);
prodLinesListAdapter.setEmptyView(this.mBinding.linesListEmptyView);
this.mBinding.linesMainList.setAdapter(prodLinesListAdapter);
this.mBinding.linesMainList.setLayoutManager(new LinearLayoutManager(this.requireActivity()));
prodLinesListAdapter.setOnItemClicked(this.mViewModel::onLineSelected);
if (mToolbar != null)
mToolbar.setRecyclerView(this.mBinding.linesMainList);
}
public void requestResources(ProdLineStatusDTO prodLine) {
this.onLoadingEnded();
BarcodeManager.disable();
requireActivity().runOnUiThread(() -> {
DialogSimpleInputHelper.makeInputDialog(requireContext(), "Inserisci il numero di risorse da allocare", prodLine.getQtaAllocate().toString(), "n. risorse", qta -> {
this.onLoadingStarted();
try {
Integer hrNum = Integer.parseInt(qta);
this.mViewModel.startProductionLine(prodLine, hrNum);
} catch (NumberFormatException ex) {
this.onError(new Exception("Inserire un numero di risorse valido"));
}
}, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show();
});
}
@Override
public void successDialog(String message, Runnable onComplete) {
BarcodeManager.disable();
requireActivity().runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success),
new SpannableString(message), null, onComplete).show(getChildFragmentManager(), "successDialog"));
}
@Override
public void selectLine(ProdLineStatusDTO dto) {
this.onLoadingEnded();
BarcodeManager.disable();
if (!dto.isStarted()) {
this.requestResources(dto);
} else {
requireActivity().startActivity(ProdDettaglioLineaActivity.newInstance(requireActivity(), dto));
}
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.nav_prod_linee_title).toString());
}
}

View File

@@ -0,0 +1,16 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
@Module(subcomponents = ProdRientroMerceComponent.class)
public class ProdLineeProduzioneModule {
@Provides
ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) {
return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer);
}
}

View File

@@ -0,0 +1,100 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class ProdLineeProduzioneViewModel {
private final ProductionLinesRESTConsumer productionLinesRESTConsumer;
private final MutableLiveData<List<ProdLineStatusDTO>> prodLines = new MutableLiveData<>();
private Listener mListener;
@Inject
public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) {
this.productionLinesRESTConsumer = productionLinesRESTConsumer;
}
public void init() {
reloadLines();
}
private void reloadLines() {
sendOnLoadingStarted();
BarcodeManager.disable();
this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> {
BarcodeManager.enable();
prodLines.postValue(lineeProdList);
this.sendOnLoadingEnded();
}, this::sendError);
}
public MutableLiveData<List<ProdLineStatusDTO>> getProdLinesList() {
return prodLines;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) {
String codJfas = barcodeScanDTO.getStringValue();
ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null;
if (prodLine != null) {
this.onLineSelected(prodLine);
} else {
this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata"));
}
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public void startProductionLine(ProdLineStatusDTO prodLine, Integer hrNum) {
this.sendOnLoadingStarted();
this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(),
hrNum,
() -> this.mListener.successDialog("Operazione completata", this::reloadLines),
this::sendError);
}
public void onLineSelected(ProdLineStatusDTO lineSelected) {
mListener.selectLine(lineSelected);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void successDialog(String message, Runnable onComplete);
void selectLine(ProdLineStatusDTO prodLineStatusDTO);
}
}

View File

@@ -0,0 +1,162 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.dto;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
public class ProdLineStatusDTO {
private String codJfas;
private String descrizione;
private String codMdepLav;
private Date datetimeStart;
private Date datetimeEnd;
private String codMart;
private String partitaMag;
private BigDecimal maxAllocazione;
private Integer qtaAllocate;
private String listaOrd;
private String descrizioneProd;
public String getCodJfas() {
return codJfas;
}
public ProdLineStatusDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getDescrizione() {
return descrizione;
}
public ProdLineStatusDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public String getCodMdepLav() {
return codMdepLav;
}
public ProdLineStatusDTO setCodMdepLav(String codMdepLav) {
this.codMdepLav = codMdepLav;
return this;
}
public Date getDatetimeStart() {
return datetimeStart;
}
public ProdLineStatusDTO setDatetimeStart(Date datetimeStart) {
this.datetimeStart = datetimeStart;
return this;
}
public Date getDatetimeEnd() {
return datetimeEnd;
}
public ProdLineStatusDTO setDatetimeEnd(Date datetimeEnd) {
this.datetimeEnd = datetimeEnd;
return this;
}
public BigDecimal getMaxAllocazione() {
return maxAllocazione;
}
public ProdLineStatusDTO setMaxAllocazione(BigDecimal maxAllocazione) {
this.maxAllocazione = maxAllocazione;
return this;
}
public Integer getQtaAllocate() {
return qtaAllocate;
}
public ProdLineStatusDTO setQtaAllocate(Integer qtaAllocate) {
this.qtaAllocate = qtaAllocate;
return this;
}
public String getListaOrd() {
return listaOrd;
}
public ProdLineStatusDTO setListaOrd(String listaOrd) {
this.listaOrd = listaOrd;
return this;
}
public boolean isStarted() {
return datetimeStart != null && datetimeEnd == null;
}
public boolean isPaused() {
if (datetimeEnd == null) {
return false;
}
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
Calendar lastCloseTime = Calendar.getInstance();
lastCloseTime.setTime(datetimeEnd);
lastCloseTime.set(Calendar.MILLISECOND, 0);
lastCloseTime.set(Calendar.SECOND, 0);
lastCloseTime.set(Calendar.MINUTE, 0);
lastCloseTime.set(Calendar.HOUR_OF_DAY, 0);
return datetimeStart != null && datetimeEnd != null && today.equals(lastCloseTime);
}
public String getLabel() {
return codJfas + " - " + descrizione;
}
public String getRisorseLabel() {
return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : "");
}
public String getCodMart() {
return codMart;
}
public ProdLineStatusDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ProdLineStatusDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public String getDescrizioneProd() {
return descrizioneProd;
}
public ProdLineStatusDTO setDescrizioneProd(String descrizioneProd) {
this.descrizioneProd = descrizioneProd;
return this;
}
}

View File

@@ -0,0 +1,62 @@
package it.integry.integrywmsnative.gest.prod_linee_produzione.ui;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView;
import it.integry.integrywmsnative.databinding.FragmentLineeProdMainListModelBinding;
import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO;
public class LinesListAdapter extends ExtendedRecyclerView<ProdLineStatusDTO, LinesListAdapter.SingleItemViewHolder> {
private Context mContext;
private RunnableArgs<ProdLineStatusDTO> mOnItemClicked;
public LinesListAdapter(Context context, ObservableArrayList<ProdLineStatusDTO> myDataset) {
super(myDataset);
this.mContext = context;
}
@NonNull
@Override
public LinesListAdapter.SingleItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
FragmentLineeProdMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_linee_prod_main_list_model, parent, false);
return new LinesListAdapter.SingleItemViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull LinesListAdapter.SingleItemViewHolder holder, int position) {
final ProdLineStatusDTO line = mDataset.get(position);
holder.binding.setListModel(line);
holder.binding.executePendingBindings();
holder.binding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(line);
});
}
public void setOnItemClicked(RunnableArgs<ProdLineStatusDTO> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentLineeProdMainListModelBinding binding;
SingleItemViewHolder(FragmentLineeProdMainListModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
}

View File

@@ -59,6 +59,8 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
private FragmentProdRecuperoMaterialeBinding mBinding;
private int barcodeScannerIstanceID = -1;
private String codJfas;
private String fragmentResultKeyString;
private final ObservableArrayList<HistoryULsListModel> mHistoryULMutableData = new ObservableArrayList<>();
@@ -67,10 +69,22 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
}
public static ProdRecuperoMaterialeFragment newInstance() {
return newInstance(null, null);
}
public static ProdRecuperoMaterialeFragment newInstance(String codJfas, String keyString) {
ProdRecuperoMaterialeFragment fragment = new ProdRecuperoMaterialeFragment();
if (keyString != null) {
fragment.setFragmentResultKeyString(keyString);
}
fragment.setCodJfas(codJfas);
return fragment;
}
public static ProdRecuperoMaterialeFragment newInstance(String codJfas) {
return newInstance(codJfas, null);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@@ -89,6 +103,14 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
this.initBarcodeReader();
this.initRecyclerView();
this.addOnPreDestroy(() -> {
if (!UtilityString.isNullOrEmpty(fragmentResultKeyString)) {
Bundle result = new Bundle();
result.putString(fragmentResultKeyString, "result");
getParentFragmentManager().setFragmentResult(fragmentResultKeyString, result);
}
});
return mBinding.getRoot();
}
@@ -96,8 +118,12 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
@Override
public void onStart() {
super.onStart();
mViewModel.init();
this.addOnPreDestroy(() -> {
if (barcodeScannerIstanceID > -1) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
}
});
mViewModel.init(codJfas);
}
@@ -115,6 +141,24 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
BarcodeManager.enable();
}
public String getCodJfas() {
return codJfas;
}
public ProdRecuperoMaterialeFragment setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getFragmentResultKeyString() {
return fragmentResultKeyString;
}
public ProdRecuperoMaterialeFragment setFragmentResultKeyString(String fragmentResultKeyString) {
this.fragmentResultKeyString = fragmentResultKeyString;
return this;
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
@@ -133,7 +177,9 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
mBinding.prodRecuperoMaterialeMainList.setAdapter(adapter);
mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList);
if (mToolbar != null)
mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList);
}
private void refreshList(List<HistoryVersamentoProdULDTO> filteredList) {
@@ -230,11 +276,11 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -51,11 +51,11 @@ public class ProdRecuperoMaterialeViewModel {
this.mPrinterRESTConsumer = printerRESTConsumer;
}
public void init() {
public void init(String codJfas) {
this.sendOnLoadingStarted();
new Thread(() -> {
mProdRecuperMaterialeRESTConsumer.loadLastULVersate(ulList -> {
mProdRecuperMaterialeRESTConsumer.loadLastULVersate(codJfas, ulList -> {
this.mUlList.setValue(ulList);
this.sendOnLoadingEnded();
@@ -115,7 +115,10 @@ public class ProdRecuperoMaterialeViewModel {
qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol());
if (!UtilityBigDecimal.equalsTo(qtaDaEvadere, BigDecimal.ZERO)) {
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
if(item.getMtbAart().isFlagQtaCnfFissaBoolean())
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
else numCnfDaEvadere = item.getNumCnf();
}
this.sendOnItemDispatched(item,
@@ -151,27 +154,64 @@ public class ProdRecuperoMaterialeViewModel {
BigDecimal totalSumOfQtaCol = BigDecimal.ZERO;
BigDecimal totalSumOfNumCnf = BigDecimal.ZERO;
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
if (SettingsManager.iDB().isFlagVersamentoDirettoProduzione()) {
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
BigDecimal qtaColToSave;
BigDecimal numCnfToSave;
if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) {
numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else {
qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR);
}
totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave);
totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave);
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(item.getPartitaMag()))
.setQtaCol(qtaColToSave)
.setQtaCnf(inputQtaCnf)
.setNumCnf(numCnfToSave)
.setDescrizione(UtilityString.isNullOrEmpty(item.getMtbAart().getDescrizioneEstesa()) ? item.getMtbAart().getDescrizione() : item.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setNumColloRif(item.getNumColloRif())
.setDataColloRif(item.getDataColloRif())
.setGestioneRif(item.getGestioneRif())
.setSerColloRif(item.getSerColloRif())
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);
}
} else {
BigDecimal qtaColToSave;
BigDecimal numCnfToSave;
if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) {
numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
numCnfToSave = inputNumCnf;
qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else {
qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR);
qtaColToSave = inputQtaTot;
numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR);
}
totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave);
totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave);
totalSumOfQtaCol = qtaColToSave;
totalSumOfNumCnf = numCnfToSave;
numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1));
qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1));
final MtbColr mtbColrScarico = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(item.getPartitaMag()))
@@ -183,10 +223,7 @@ public class ProdRecuperoMaterialeViewModel {
.setNumColloRif(item.getNumColloRif())
.setDataColloRif(item.getDataColloRif())
.setGestioneRif(item.getGestioneRif())
.setSerColloRif(item.getSerColloRif())
.setDataOrd(ordine.getData())
.setNumOrd(ordine.getNumero())
.setRigaOrd(ordine.getRigaOrd());
.setSerColloRif(item.getSerColloRif());
mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColtScarico.getMtbColr().add(mtbColrScarico);

View File

@@ -16,6 +16,9 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO;
@@ -32,6 +35,10 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
public void loadLastULVersate(RunnableArgs<List<HistoryVersamentoProdULDTO>> onComplete, RunnableArgs<Exception> onFailed) {
loadLastULVersate(null, onComplete, onFailed);
}
public void loadLastULVersate(String codJfas, RunnableArgs<List<HistoryVersamentoProdULDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "WITH ul_list AS ( " +
" SELECT jtb_fasi.cod_jfas, " +
@@ -68,7 +75,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" AND mtb_colr.data_collo = mtb_colt.data_collo " +
" AND mtb_colr.ser_collo = mtb_colt.ser_collo " +
" AND mtb_colr.gestione = mtb_colt.gestione " +
" INNER JOIN dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " +
" " + (SettingsManager.iDB().isFlagVersamentoDirettoProduzione() ? "INNER" : "LEFT OUTER") + " join dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " +
" AND dtb_ord_steps.gestione = mtb_colr.gestione " +
" AND dtb_ord_steps.num_ord = mtb_colr.num_ord " +
" AND dtb_ord_steps.data_iniz is not null " +
@@ -76,6 +83,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart " +
" LEFT OUTER JOIN jtb_fasi ON mtb_colt.cod_jfas = jtb_fasi.cod_jfas " +
" WHERE jtb_fasi.cod_jfas IS NOT NULL " +
(UtilityString.isNullOrEmpty(codJfas) ? "" : " AND jtb_fasi.cod_jfas = " + UtilityDB.valueToString(codJfas)) +
" AND segno = -1 " +
" AND mtb_colr.data_collo > DATEADD(DAY, -5, GETDATE()) " +
" GROUP BY jtb_fasi.cod_jfas, " +
@@ -177,7 +185,8 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer {
" ISNULL(max_ul.hr, '') = ISNULL(ul_list.hr, '') AND " +
" max_ul.max_datetime_row = ul_list.datetime_row";
Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdULRestDTO>>() {}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdULRestDTO>>() {
}.getType();
this.mSystemRESTConsumer.<ArrayList<HistoryVersamentoProdULRestDTO>>processSql(sql, typeOfObjectsList, ulList -> {
if (ulList == null) {

View File

@@ -11,6 +11,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import java.util.ArrayList;
import java.util.List;
@@ -19,7 +20,9 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColr;
@@ -32,9 +35,18 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdRientroMerceFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdRientroMerceViewModel.Listener, BottomSheetFragmentLUContentView.Listener, BottomSheetMtbColrEditView.Listener {
public class ProdRientroMerceFragment extends BaseFragment implements
ITitledFragment,
IScrollableFragment,
ILifecycleFragment,
ProdRientroMerceViewModel.Listener,
BottomSheetFragmentLUContentView.Listener,
BottomSheetMtbColrEditView.Listener,
ProdRientroMerceOrderListFragment.OnRefreshListener {
public final ObservableField<Boolean> isLargeLayout = new ObservableField<>(false);
@Inject
ProdRientroMerceViewModel mViewModel;
@@ -56,20 +68,47 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
super.onCreate(savedInstanceState);
setRetainInstance(true);
boolean isLargeLayout = getResources().getBoolean(R.bool.large_layout);
this.isLargeLayout.set(isLargeLayout);
mProdRientroMerceOrderListFragment = ProdRientroMerceOrderListFragment.newInstance(mToolbar);
mProdRientroMerceOrderDetailFragment = ProdRientroMerceOrderDetailFragment.newInstance();
mProdRientroMerceOrderListFragment.setOnItemSelectedRunnable(mProdRientroMerceOrderDetailFragment::setOrder);
mProdRientroMerceOrderListFragment
.setOnItemSelectedRunnable(order -> {
if (!isLargeLayout) {
getChildFragmentManager()
.beginTransaction()
.show(mProdRientroMerceOrderDetailFragment)
.addToBackStack(ProdRientroMerceOrderDetailFragment.class.getName())
.commit();
}
mProdRientroMerceOrderDetailFragment.setOrder(order);
})
.setOnRefreshListener(this);
mProdRientroMerceOrderDetailFragment.setOnMtbColtClicked(item -> {
mBindings.bottomSheetMtbColrEdit.setMtbColr(item.getMtbColr().get(0));
mBindings.bottomSheetMtbColrEdit.expand();
});
getChildFragmentManager()
.beginTransaction()
.replace(R.id.order_list_fragment, mProdRientroMerceOrderListFragment)
.replace(R.id.order_detail_fragment, mProdRientroMerceOrderDetailFragment)
.commit();
if (isLargeLayout) {
getChildFragmentManager()
.beginTransaction()
.replace(R.id.left_side_fragment_container, mProdRientroMerceOrderListFragment)
.replace(R.id.right_side_fragment_container, mProdRientroMerceOrderDetailFragment)
.commit();
} else {
getChildFragmentManager()
.beginTransaction()
.add(R.id.full_width_container, mProdRientroMerceOrderListFragment)
.add(R.id.full_width_container, mProdRientroMerceOrderDetailFragment)
.hide(mProdRientroMerceOrderDetailFragment)
.commit();
}
MainApplication.appComponent
.prodRientroMerceComponent()
@@ -82,6 +121,8 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
@Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
mViewModel.setListener(this);
@@ -94,13 +135,13 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState == null) {
if (savedInstanceState == null) {
this.mViewModel.getOrdiniLavorazioneAperti().observe(this.getViewLifecycleOwner(), this::ordersUpdated);
mViewModel.init();
mViewModel.refreshOrderList();
}
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText;
@@ -139,7 +180,6 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
}
private void initBottomSheet() {
mBindings.bottomSheetMtbColrEdit.setListener(this);
mBindings.bottomSheetMtbColrEdit.disableEditButton();
@@ -157,7 +197,33 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> mProdRientroMerceOrderDetailFragment.deleteMtbColr(mtbColr),
() -> {}
).show(getActivity().getSupportFragmentManager(), "tag");
() -> {
}
).show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onOrderLoadingStarted() {
BarcodeManager.disable();
this.mProdRientroMerceOrderListFragment.onOrderLoadingStarted();
}
@Override
public void onOrderLoadingEnded() {
BarcodeManager.enable();
this.mProdRientroMerceOrderListFragment.onOrderLoadingEnded();
}
@Override
public void onRefresh() {
this.mViewModel.refreshOrderList();
}
@Override
public void onPreDestroy(Runnable onComplete) {
if(getChildFragmentManager().getBackStackEntryCount() > 0)
getChildFragmentManager().popBackStack();
else onComplete.run();
}
}

View File

@@ -7,7 +7,9 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.IOrdersLoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
@@ -25,12 +27,12 @@ public class ProdRientroMerceViewModel {
this.mMesRESTConsumer = mesRESTConsumer;
}
public void init() {
new Thread(this::sendOnLoadingStarted).start();
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
public void refreshOrderList() {
new Thread(this::sendOnOrdersLoadingStarted).start();
String codAnag = SettingsManager.iDB().getFilterFornitoreProd();
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, codAnag, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded();
this.sendOnOrdersLoadingEnded();
}, ex -> this.sendError(new OrdersLoadException(ex)));
}
@@ -51,12 +53,20 @@ public class ProdRientroMerceViewModel {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendOnOrdersLoadingStarted() {
if (this.mListener != null) mListener.onOrderLoadingStarted();
}
private void sendOnOrdersLoadingEnded() {
if (this.mListener != null) mListener.onOrderLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
public interface Listener extends ILoadingListener, IOrdersLoadingListener {
void onDataSaved();

View File

@@ -82,6 +82,8 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumNetKG = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumGrossKG = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<Integer> progress = new ObservableField<>(0);
public boolean isOrderColli = false;
public ProdRientroMerceOrderDetailFragment() {
// Required empty public constructor
@@ -113,11 +115,16 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mViewModel.setListener(this);
if (currentOrder.getValue() != null) {
refreshOrder();
isOrderColli = currentOrder.getValue().getQtaCnf().compareTo(BigDecimal.ONE) == 0;
}
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView();
this.initULScaleBluetoothConnection();
mBindings.executePendingBindings();
return mBindings.getRoot();
}
@@ -182,11 +189,15 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
}
public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order);
mBindings.invalidateAll();
mAdapter.clearDataset();
currentOrder.setValue(order);
mViewModel.setOrder(order);
refreshOrder();
}
private void refreshOrder() {
if (mBindings != null) mBindings.invalidateAll();
if (mAdapter != null) mAdapter.clearDataset();
if (mViewModel != null) mViewModel.setOrder(currentOrder.getValue());
}
private void refreshList(List<MtbColt> mtbColts) {
@@ -205,6 +216,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
}));
sumColliNumber.set(sumColli.get());
sumGrossKG.set(sumGross.get());
progress.set(currentOrder.getValue().getProgress());
sumNetKG.set(sumNet.get());
} else {
sumLUNumber.set(BigDecimal.ZERO);

View File

@@ -70,7 +70,7 @@ public class ProdRientroMerceOrderDetailViewModel {
.setCodJcom(currentOrder.getCodJcom())
.setCodJfas(pickedQuantityDTO.getJtbFasi() != null ? pickedQuantityDTO.getJtbFasi().getCodJfas() : null)
.setCodMart(currentOrder.getCodProd())
.setCodTcol(pickedQuantityDTO.getMtbTCol().getCodTcol())
.setCodTcol(pickedQuantityDTO.getMtbTCol() != null ? pickedQuantityDTO.getMtbTCol().getCodTcol() : null)
.setDataCollo(new Date())
.setDataOrd(currentOrder.getDataOrdD())
.setNumOrd(currentOrder.getNumOrd())

View File

@@ -129,15 +129,18 @@ public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapt
case START:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_play_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.green_800), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.VISIBLE);
break;
case PAUSE:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_pause_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.yellow_800), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.VISIBLE);
break;
case SCHEDULED:
default:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_clock_circle_outline_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.blue_700), android.graphics.PorterDuff.Mode.SRC_IN);
holder.mBinding.orderProgress.setVisibility(View.GONE);
break;
}
@@ -166,6 +169,8 @@ public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapt
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);
holder.mBinding.orderProgress.setProgress(listModel.getProgress());
holder.mBinding.executePendingBindings();
holder.mBinding.getRoot().setOnClickListener(v -> {

View File

@@ -36,12 +36,10 @@ import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ProdRientroMerceOrderListFragment extends Fragment {
private final ObservableArrayList<ProdRientroMerceOrderListModel> mOrdiniApertiMutableData = new ObservableArrayList<>();
private FragmentProdRientroMerceOrderListBinding mBindings = null;
private RunnableArgs<OrdineLavorazioneDTO> mOnItemSelectedRunnable;
private ElevatedToolbar mToolbar;
private OnRefreshListener onRefreshListener;
public ProdRientroMerceOrderListFragment() {
// Required empty public constructor
@@ -72,7 +70,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
mBindings.setLifecycleOwner(this);
if(savedInstanceState == null) this.initRecyclerView();
if (savedInstanceState == null) this.initRecyclerView();
return mBindings.getRoot();
}
@@ -86,13 +84,18 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData)
.setEmptyView(this.mBindings.emptyView)
.setOnItemChecked(x -> {
if(mOnItemSelectedRunnable != null) mOnItemSelectedRunnable.run(x.getOriginalModel());
if (mOnItemSelectedRunnable != null)
mOnItemSelectedRunnable.run(x.getOriginalModel());
});
this.mBindings.mainList.setAdapter(prodRientroMerceOrderListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mToolbar.setRecyclerView(mBindings.mainList);
this.mBindings.swiperefresh.setOnRefreshListener(() -> {
if (onRefreshListener != null) onRefreshListener.onRefresh();
});
}
public void pushOrderList(List<OrdineLavorazioneDTO> orderList) {
@@ -101,6 +104,14 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
}
public void onOrderLoadingStarted() {
this.mBindings.swiperefresh.setRefreshing(true);
}
public void onOrderLoadingEnded() {
this.mBindings.swiperefresh.setRefreshing(false);
}
private List<ProdRientroMerceOrderListModel> convertDataModelToListModel(List<OrdineLavorazioneDTO> dataList) {
@@ -109,7 +120,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataOrd() != null ? ordineLavorazioneDTO.getDataOrd() : "zzzzzzzz")).reversed()
.thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd));
if(dataList == null) return new ArrayList<>();
if (dataList == null) return new ArrayList<>();
List<ProdRientroMerceOrderListModel> notHiddenElements = Stream.of(dataList)
.sorted(comparator)
@@ -131,8 +142,12 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
listModel.setGroupTitle(x.getCodJfas());
if(!UtilityString.isNullOrEmpty(x.getRagSocAnag()))
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag());
if (!UtilityString.isNullOrEmpty(x.getDataConsCommessa())) {
listModel.setPreDescription("Consegna: " + UtilityDate.formatDate(x.getDataConsCommessaD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} else {
/* if (!UtilityString.isNullOrEmpty(x.getRagSocAnag()))
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag());*/
}
String testataOrdString = "" + x.getNumOrd();
listModel.setDescription(testataOrdString);
@@ -141,11 +156,13 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
listModel.setRightDescription(x.getCodJcom() != null ? (x.getDescCommessa() + " (" + x.getCodJcom() + ")") : "");
try {
listModel.setProgress(x.getProgress());
listModel.setRightSubDescription(x.getNumCnf().stripTrailingZeros().toPlainString() + " COL");
/*try {
listModel.setRightSubDescription(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} catch (Exception ex) {
}
}*/
listModel.setOriginalModel(x);
@@ -164,4 +181,13 @@ public class ProdRientroMerceOrderListFragment extends Fragment {
public RecyclerView getList() {
return mBindings.mainList;
}
public ProdRientroMerceOrderListFragment setOnRefreshListener(OnRefreshListener onRefreshListener) {
this.onRefreshListener = onRefreshListener;
return this;
}
public interface OnRefreshListener {
void onRefresh();
}
}

View File

@@ -11,6 +11,7 @@ public class ProdRientroMerceOrderListModel implements Cloneable {
private String subDescription;
private String rightDescription;
private String rightSubDescription;
private int progress;
private boolean hidden;
@@ -105,4 +106,13 @@ public class ProdRientroMerceOrderListModel implements Cloneable {
START,
SCHEDULED
}
public int getProgress() {
return progress;
}
public ProdRientroMerceOrderListModel setProgress(int progress) {
this.progress = progress;
return this;
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableFloat;
@@ -50,6 +51,7 @@ public class OrdineLavorazioneDTO {
private String dataScad;
private String partitaMagSuggested;
private String dataScadSuggested;
@@ -90,6 +92,8 @@ public class OrdineLavorazioneDTO {
private String descCommessa;
private String dataConsCommessa;
private BigDecimal prodStd;
private Object mtbColtToEdit;
@@ -135,6 +139,7 @@ public class OrdineLavorazioneDTO {
public String getDataOrd() {
return dataOrd;
}
public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(dataOrd);
}
@@ -490,4 +495,32 @@ public class OrdineLavorazioneDTO {
public OrdineLavorazioneStatoEnum getStatoEnum() {
return OrdineLavorazioneStatoEnum.fromString(getStato());
}
public String getDataConsCommessa() {
return dataConsCommessa;
}
public Date getDataConsCommessaD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataConsCommessa());
}
public void setDataConsCommessa(String dataConsCommessa) {
this.dataConsCommessa = dataConsCommessa;
}
public int getProgress() {
int progress = 0;
if (this.getQtaProd().compareTo(BigDecimal.ZERO) > 0) {
if (this.getQtaTrasferite().compareTo(this.getQtaProd()) > 0) {
progress = 100;
} else {
progress = this.getQtaTrasferite().multiply(BigDecimal.valueOf(100)).divide(this.getQtaProd(), 0, RoundingMode.UP).intValue();
}
}
return progress;
}
}

View File

@@ -108,8 +108,9 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE);
if (articoli.isEmpty() && isOrderNewProdsForced()) {
if (mOrdine.isOrderNewProducts() && articoli.isEmpty() && isOrderNewProdsForced()) {
this.mViewModel.orderNewProducts();
mOrdine.setOrderNewProducts(false);
}
});

View File

@@ -163,6 +163,7 @@ public class PVOrdineAcquistoEditViewModel {
articolo.setMerceDaRic(artGrid.getMerceDaRic());
articolo.setNewNoPromo(artGrid.isNewNoPromo());
articolo.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
articolo.setSystemNote(artGrid.generateSystemNote());
onSuccess.run(articolo);
} else {
@@ -219,7 +220,6 @@ public class PVOrdineAcquistoEditViewModel {
.isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
dto.setQtaOrd(dto.getQtaCnf());
articoliToSave.add(dto);
}
});

View File

@@ -28,6 +28,8 @@ public class ArtDTO {
private String dataScad;
private String systemNote;
public Integer getRigaOrd() {
return rigaOrd;
}
@@ -63,6 +65,7 @@ public class ArtDTO {
public String getDataIns() {
return dataIns;
}
public Date getDataInsD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataIns());
}
@@ -70,6 +73,7 @@ public class ArtDTO {
public void setDataIns(String dataIns) {
this.dataIns = dataIns;
}
public void setDataInsD(Date dataIns) {
setDataIns(UtilityDate.formatDate(dataIns, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH));
}
@@ -122,6 +126,7 @@ public class ArtDTO {
public void setDataScad(String dataScad) {
this.dataScad = dataScad;
}
public Date getDataScadD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataScad());
}
@@ -130,5 +135,12 @@ public class ArtDTO {
setDataScad(UtilityDate.formatDate(dataScad, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH));
}
public String getSystemNote() {
return systemNote;
}
public ArtDTO setSystemNote(String systemNote) {
this.systemNote = systemNote;
return this;
}
}

View File

@@ -75,6 +75,7 @@ public class OrdineAcquistoPvHelper {
Ordine ordine = new Ordine();
ordine.setDataIns(UtilityDate.getDateInstance());
ordine.setIdGriglia(griglia.getGrigliaId());
ordine.setOrderNewProducts(true);
mOrdineRepository.insert(ordine, id -> {
ordine.setOrdineId(id);
onSuccess.run(ordine);

View File

@@ -37,7 +37,6 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
@@ -319,18 +318,18 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
this.currentMtbColtObs.set(null);
thereIsAnOpenedUL.set(false);
if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();
this.mViewModel.requestLU();
/*if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();*/
}
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
)
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@@ -448,11 +447,11 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogSimpleMessageView.makeInfoDialog(
getActivity().getResources().getString(R.string.action_print_ul),
new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
getActivity().getResources().getString(R.string.action_print_ul),
new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");
;
}
@@ -460,11 +459,11 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@@ -496,6 +495,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
mViewModel.closeLU(false, onComplete);
mViewModel.closeLU(false);
}
}

View File

@@ -85,15 +85,18 @@ public class RettificaGiacenzeViewModel {
this.sendOnLoadingEnded();
this.sendOnLUOpenRequest((mtbColt, created) -> {
this.mCurrentMtbColt = mtbColt;
this.mIsCreatedLU = created;
this.sendLUOpened(mtbColt);
});
this.requestLU();
}, this::sendError);
}
public void requestLU() {
this.sendOnLUOpenRequest((mtbColt, created) -> {
this.mCurrentMtbColt = mtbColt;
this.mIsCreatedLU = created;
this.sendLUOpened(mtbColt);
});
}
public RettificaGiacenzeViewModel setListener(RettificaGiacenzeViewModel.Listener listener) {
this.mListener = listener;

View File

@@ -44,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
@@ -56,10 +57,12 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListView;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
@@ -70,6 +73,7 @@ import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShould
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -192,9 +196,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.initBarcodeReader();
this.initRecyclerView();
String reportNameSpedizioneChiudiOrdine = SettingsManager.iDB().getReportNameSpedizionChiudiOrdine();
closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(reportNameSpedizioneChiudiOrdine));
closeOrderButtonEnabled.set(SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose());
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
@@ -204,7 +206,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd();
if (!mEnableFakeGiacenza) this.onLoadingStarted();
mViewmodel.init(
codMdep,
!mEnableFakeGiacenza,
@@ -214,7 +215,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mSitArtOrd,
mTestateOrdini,
mColliRegistrati,
reportNameSpedizioneChiudiOrdine,
mGestioneCol, mSegnoCol, mDefaultCausaleUL,
mEnableQuantityReset,
useQtaOrd);
@@ -696,7 +696,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.addExtraItemsEnabled.set(false);
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(SettingsManager.iDB().getReportNameSpedizionChiudiOrdine()));
closeOrderButtonEnabled.set(SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose());
if (this.mShouldCloseActivity) super.onBackPressed();
}
@@ -726,11 +726,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.onLoadingEnded();
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete)
.show(getSupportFragmentManager(), "tag");
;
}
@@ -751,10 +751,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
)
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
)
.show(getSupportFragmentManager(), "tag");
}
@@ -853,12 +853,58 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}).show();
}
public void askShouldPrintPackingList(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogSimpleMessageView.makeInfoDialog(
getResources().getString(R.string.action_close_order),
new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
null,
() -> {
printOrderCloseDTO.setFlagPrintPackingList(true);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
}
},
() -> {
printOrderCloseDTO.setFlagPrintPackingList(false);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
}
}
)
.show(getSupportFragmentManager(), "tag");
}
public void askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, onComplete).show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView");
}
@Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO();
if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.askShouldPrintPackingList(printOrderCloseDTO, onComplete);
} else if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
}
}
@Override
public void onOrderClosed() {
this.onLoadingEnded();
this.onBackPressed();
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
@@ -894,4 +940,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}
}
}
@Override
public void onInfoAggiuntiveRequired(MtbColt mtbColt, RunnableArgss<String, MtbTCol> onComplete) {
InfoAggiuntiveLUDialog.newInstance(mtbColt, onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
}
}

View File

@@ -26,7 +26,6 @@ import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
@@ -37,14 +36,17 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOp
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.FiltroOrdineDTO;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportType;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
@@ -55,6 +57,7 @@ import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -66,6 +69,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUEx
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
public class SpedizioneViewModel {
@@ -91,7 +95,6 @@ public class SpedizioneViewModel {
private boolean mEnableCheckPartitaMag;
private boolean mCanOverflowOrderQuantity;
private boolean mShouldAskPesoLU;
private String mReportNameSpedizioneChiudiOrdine;
private boolean mIsNewLU;
private boolean mEnableQuantityReset;
private boolean mUseQtaOrd;
@@ -133,7 +136,6 @@ public class SpedizioneViewModel {
List<SitArtOrdDTO> pickingList,
List<OrdineUscitaInevasoDTO> testateOrdini,
List<MtbColt> colliRegistrati,
String reportNameSpedizioneChiudiOrdine,
GestioneEnum gestioneCol,
int segnoCol,
Integer defaultCausaleUL,
@@ -148,7 +150,6 @@ public class SpedizioneViewModel {
this.mEnableCheckPartitaMag = enableCheckPartitaMag;
this.mCanOverflowOrderQuantity = canOverflowOrderQuantity;
this.mShouldAskPesoLU = shouldAskPesoLU;
this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine;
this.mDefaultCausaleOfUL = defaultCausaleUL;
this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd;
@@ -305,6 +306,14 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
if (this.mListener != null) mListener.onCloseOrderPrintRequest(onComplete);
}
private void sendOnOrderClosed() {
if (this.mListener != null) mListener.onOrderClosed();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
@@ -749,6 +758,9 @@ public class SpedizioneViewModel {
this.getPickingList().postValue(pickingList);
} else {
MtbColt refMtbColt = matchedItem.getRefMtbColt();
if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) {
refMtbColt = matchedItem.getMtbColts().get(0);
}
MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null;
this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null);
}
@@ -1606,14 +1618,36 @@ public class SpedizioneViewModel {
} else {
if (mDefaultSegnoCol == -1) {
Runnable saveAction = () -> {
mColliMagazzinoRESTConsumer.updateDataFine(
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> {
if (shouldPrint)
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts));
else {
postCloseOperations(generatedMtbColts);
}
}), this::sendError);
if (SettingsManager.iDB().isFlagAskInfoAggiuntiveSpedizione()) {
this.mListener.onInfoAggiuntiveRequired(mCurrentMtbColt, (note, mtbTcol) -> {
mCurrentMtbColt.setAnnotazioni(note);
if (mtbTcol != null) {
mCurrentMtbColt.setMtbTCol(mtbTcol);
mCurrentMtbColt.setCodTcol(mtbTcol.getCodTcol());
} else {
mCurrentMtbColt.setMtbTCol(null);
mCurrentMtbColt.setCodTcol(null);
}
mColliMagazzinoRESTConsumer.updateDataFine(
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> {
if (shouldPrint)
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts));
else {
postCloseOperations(generatedMtbColts);
}
}), this::sendError);
});
} else {
mColliMagazzinoRESTConsumer.updateDataFine(
mCurrentMtbColt, () -> distribuisciLU((generatedMtbColts) -> {
if (shouldPrint)
printCollo(generatedMtbColts, () -> this.postCloseOperations(generatedMtbColts));
else {
postCloseOperations(generatedMtbColts);
}
}), this::sendError);
}
};
if (mShouldAskPesoLU) {
@@ -1853,49 +1887,86 @@ public class SpedizioneViewModel {
public void closeOrder() {
this.sendOnLoadingStarted();
Runnable onComplete = () -> this.sendOnLoadingEnded();
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdep, PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList == null || printerList.size() == 0) {
this.sendError(new NoPrintersFoundException());
onComplete.run();
return;
}
cyclicPrintPackingList(
this.mTestateOrdini.iterator(),
printerList.get(0),
onComplete,
ex -> this.sendLUPrintError(ex, onComplete));
}, this::sendError);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.sendOnCloseOrderPrintRequest(this::onCloseOrderPrintRequest);
}
}
private void cyclicPrintPackingList(@NotNull Iterator<OrdineUscitaInevasoDTO> sourceTestateOrdineVenditaIterator, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
private void onCloseOrderPrintRequest(PrintOrderCloseDTO dto) {
if (!dto.isFlagPrintPackingList() && !dto.isFlagPrintSSCC()) {
this.sendOnOrderClosed();
return;
}
List<DtbOrdt> closedOrders = Stream.of(this.mTestateOrdini).map(ord -> {
DtbOrdt ordV = new DtbOrdt();
ordV.setDataOrd(ord.getDataOrdS())
.setNumOrd(ord.getNumOrd())
.setGestione(ord.getGestione())
.setCodAnag(ord.getCodAnagOrd());
return ordV;
}).toList();
dto.setPrintList(closedOrders);
printClosedOrders(dto, this::sendOnOrderClosed, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded));
}
private void printClosedOrders(PrintOrderCloseDTO dto, Runnable onSuccess, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printClosedOrders(
dto,
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
onSuccess,
onAbort);
}
private void cyclicPrintPackingList(@NotNull Iterator<OrdineUscitaInevasoDTO> sourceTestateOrdineVenditaIterator, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceTestateOrdineVenditaIterator.hasNext()) {
singlePrintPackingList(sourceTestateOrdineVenditaIterator.next(), printerName, () -> {
cyclicPrintPackingList(sourceTestateOrdineVenditaIterator, printerName, onComplete, onAbort);
singlePrintPackingList(sourceTestateOrdineVenditaIterator.next(), () -> {
cyclicPrintPackingList(sourceTestateOrdineVenditaIterator, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void singlePrintPackingList(OrdineUscitaInevasoDTO ordineUscitaInevasoDTO, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
private void cyclicPrintListEtichette(@NotNull Iterator<OrdineUscitaInevasoDTO> sourceTestateOrdineVenditaIterator, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceTestateOrdineVenditaIterator.hasNext()) {
singlePrintListEtichette(sourceTestateOrdineVenditaIterator.next(), () -> {
cyclicPrintListEtichette(sourceTestateOrdineVenditaIterator, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void singlePrintPackingList(OrdineUscitaInevasoDTO ordineUscitaInevasoDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> params = new HashMap<>();
params.put("gestione", ordineUscitaInevasoDTO.getGestione());
params.put("num_ord", ordineUscitaInevasoDTO.getNumOrd());
params.put("data_ord", UtilityDate.formatDate(ordineUscitaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH));
this.mPrinterRESTConsumer.printReport(
printerName,
this.mReportNameSpedizioneChiudiOrdine,
this.mPrinterRESTConsumer.printReportType(
ReportType.WMS_SPEDIZIONE_PACKING_LIST_ORD,
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
ordineUscitaInevasoDTO.getCodAnagOrd(),
params,
onComplete,
onFailed);
}
private void singlePrintListEtichette(OrdineUscitaInevasoDTO ordineUscitaInevasoDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> params = new HashMap<>();
params.put("gestione", ordineUscitaInevasoDTO.getGestione());
params.put("num_ord", ordineUscitaInevasoDTO.getNumOrd());
params.put("data_ord", UtilityDate.formatDate(ordineUscitaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH));
this.mPrinterRESTConsumer.printReportType(
ReportType.WMS_SPEDIZIONE_ETICHETTE_SSCC_ORD,
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
ordineUscitaInevasoDTO.getCodAnagOrd(),
params,
1,
onComplete,
onFailed);
@@ -1944,10 +2015,15 @@ public class SpedizioneViewModel {
boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onInfoAggiuntiveRequired(MtbColt currentMtbColt, RunnableArgss<String, MtbTCol> onComplete);
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete);
void onOrderClosed();
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import dagger.Subcomponent;
@Subcomponent
public interface DialogPrintOrderSSCCListComponent {
@Subcomponent.Factory
interface Factory {
DialogPrintOrderSSCCListComponent create();
}
void inject(DialogPrintOrderSSCCListView dialogPrintOrderSSCCListView);
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogPrintOrderSSCCListComponent.class)
public class DialogPrintOrderSSCCListModule {
@Provides
DialogPrintOrderSSCCListViewModel providesDialogPrintOrderSSCCListViewModel() {
return new DialogPrintOrderSSCCListViewModel();
}
}

View File

@@ -0,0 +1,115 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RadioGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogPrintOrderSsccListBinding;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
@Inject
DialogPrintOrderSSCCListViewModel mViewModel;
private Context mContext;
private DialogPrintOrderSsccListBinding mBindings;
private final PrintOrderCloseDTO printOrderCloseDTO;
private final RunnableArgs<PrintOrderCloseDTO> onDialogClose;
public static DialogPrintOrderSSCCListView newInstance(
PrintOrderCloseDTO printOrderCloseDTO,
RunnableArgs<PrintOrderCloseDTO> onDismiss
) {
return new DialogPrintOrderSSCCListView(printOrderCloseDTO, onDismiss);
}
public DialogPrintOrderSSCCListView(@NotNull PrintOrderCloseDTO printOrderCloseDTO, @NotNull RunnableArgs<PrintOrderCloseDTO> onDismiss) {
this.printOrderCloseDTO = printOrderCloseDTO;
this.onDialogClose = onDismiss;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_print_order_sscc_list, container, false);
MainApplication.appComponent
.dialogPrintOrderSSCCListComponent()
.create()
.inject(this);
mBindings.setView(this);
setCancelable(true);
getDialog().setCanceledOnTouchOutside(true);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
}
public void onCheckChange(RadioGroup radioGroup, int id) {
this.printOrderCloseDTO.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId());
}
public void onPositiveClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(true);
this.dismiss();
}
public void onNegativeClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(false);
this.dismiss();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
this.onDialogClose.run(this.printOrderCloseDTO);
super.onDismiss(dialog);
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
this.onNegativeClick();
super.onCancel(dialog);
}
@Override
public void onStart() {
if (this.printOrderCloseDTO.isFlagSkipPrintedSSCC()) {
mBindings.printOnlyNew.setChecked(true);
} else {
mBindings.printAll.setChecked(true);
}
super.onStart();
}
@Override
public void onError(Exception ex) {
UtilityExceptions.defaultException(this.mContext, ex);
dismiss();
}
}

View File

@@ -0,0 +1,6 @@
package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list;
public class DialogPrintOrderSSCCListViewModel {
}

View File

@@ -0,0 +1,48 @@
package it.integry.integrywmsnative.gest.spedizione.model;
import java.util.List;
import it.integry.integrywmsnative.core.model.DtbOrdt;
public class PrintOrderCloseDTO {
private boolean flagPrintPackingList = false;
private boolean flagPrintSSCC = false;
private boolean flagSkipPrintedSSCC = true;
private List<DtbOrdt> printList;
public boolean isFlagPrintPackingList() {
return flagPrintPackingList;
}
public PrintOrderCloseDTO setFlagPrintPackingList(boolean flagPrintPackingList) {
this.flagPrintPackingList = flagPrintPackingList;
return this;
}
public boolean isFlagPrintSSCC() {
return flagPrintSSCC;
}
public PrintOrderCloseDTO setFlagPrintSSCC(boolean flagPrintSSCC) {
this.flagPrintSSCC = flagPrintSSCC;
return this;
}
public boolean isFlagSkipPrintedSSCC() {
return flagSkipPrintedSSCC;
}
public PrintOrderCloseDTO setFlagSkipPrintedSSCC(boolean flagSkipPrintedSSCC) {
this.flagSkipPrintedSSCC = flagSkipPrintedSSCC;
return this;
}
public List<DtbOrdt> getPrintList() {
return printList;
}
public PrintOrderCloseDTO setPrintList(List<DtbOrdt> printList) {
this.printList = printList;
return this;
}
}

View File

@@ -4,6 +4,7 @@ import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.InputType;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
@@ -21,15 +22,14 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding;
public class DialogSimpleInputHelper {
private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
Dialog dialog = new Dialog(mContext);
DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog);
DialogInputGeneralBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_input_general, null, false);
viewModel
.setOnPositive(()->{
.setOnPositive(() -> {
onPositiveClick.run(mBinding.generalInput.getText().toString());
})
@@ -38,50 +38,79 @@ public class DialogSimpleInputHelper {
mBinding.setViewmodel(viewModel);
//Title VIEW
mBinding.titleText.setText(titleText);
if (!UtilityString.isNullOrEmpty(hintText)){
if (!UtilityString.isNullOrEmpty(hintText)) {
mBinding.generalInput.setHint(hintText);
}
if (!UtilityString.isNullOrEmpty(defaultTextValue)){
if (!UtilityString.isNullOrEmpty(defaultTextValue)) {
mBinding.generalInput.setText(defaultTextValue);
}
if (inputType != null) {
mBinding.generalInput.setInputType(InputType.TYPE_CLASS_NUMBER);
}
//Content View
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(mBinding.getRoot());
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentWidth(mContext,dialog);
UtilityDialog.setTo90PercentWidth(mContext, dialog);
return dialog;
}
public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick) {
return makeBase(mContext,
title,
null,
null,
onPositiveClick,
onNegativeClick);
onNegativeClick,
null);
}
public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick){
public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick) {
return makeBase(mContext,
title,
defaultTextValue,
hintText,
onPositiveClick,
onNegativeClick);
onNegativeClick,
null);
}
public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
return makeBase(mContext,
title,
null,
null,
onPositiveClick,
onNegativeClick,
inputType);
}
public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs<String> onPositiveClick, Runnable onNegativeClick, Integer inputType) {
return makeBase(mContext,
title,
defaultTextValue,
hintText,
onPositiveClick,
onNegativeClick,
inputType);
}
}

View File

@@ -0,0 +1,12 @@
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidNotesException extends Exception {
public InvalidNotesException() {
super(UtilityResources.getString(R.string.empty_notes_input_message));
}
}

View File

@@ -26,9 +26,11 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel;
@@ -40,20 +42,24 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
private DialogNoteAggiuntiveNuovaUlBinding mBindings;
private final RunnableArgss<String, MtbTCol> mOnComplete;
private MtbColt currentMtbColt;
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
public ObservableField<String> additionalNotes = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new InfoAggiuntiveLUDialog(onComplete);
return new InfoAggiuntiveLUDialog(null, onComplete);
}
private InfoAggiuntiveLUDialog(@NotNull RunnableArgss<String, MtbTCol> onComplete) {
public static InfoAggiuntiveLUDialog newInstance(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new InfoAggiuntiveLUDialog(mtbColt, onComplete);
}
private InfoAggiuntiveLUDialog(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
super();
this.mOnComplete = onComplete;
this.currentMtbColt = mtbColt;
}
@@ -121,9 +127,17 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> {
codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo);
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
if (currentMtbColt != null && !UtilityString.isNullOrEmpty(currentMtbColt.getCodTcol()) && UtilityString.isNullOrEmpty(this.selectedMtbTcol.get())) {
MtbTCol tipoPedana = Stream.of(tipiCollo).filter(x -> x.getCodTcol().equalsIgnoreCase(currentMtbColt.getCodTcol())).findFirstOrElse(null);
if (tipoPedana != null) {
this.selectedMtbTcol.set(tipoPedana.getCodTcol() + " - " + tipoPedana.getDescrizione());
}
}
});
this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@@ -141,6 +155,9 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg
mBindings.buttonConfirm.setOnClickListener(v -> {
dismiss();
});
}
if (this.currentMtbColt != null) {
this.additionalNotes.set(currentMtbColt.getAnnotazioni());
}
}
}

View File

@@ -11,6 +11,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -147,7 +148,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
this.init();
if(mBluetoothDeviceInterface != null) {
if (mBluetoothDeviceInterface != null) {
// Listen to bluetooth events
mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x)));
enabledBluetoothDevice.set(true);
@@ -400,7 +401,11 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
// Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show();
// Let's send a message:
mBluetoothDeviceInterface.sendMessage("GW\r");
if (mBluetoothDeviceInterface != null) {
mBluetoothDeviceInterface.sendMessage("GW\r");
} else {
Toast.makeText(requireActivity(), "Nessun dispositivo BLUETOOTH configurato nelle impostazioni.", Toast.LENGTH_SHORT).show();
}
}
private void onMessageSent(String request) {
@@ -412,8 +417,8 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
String tmpResp = response.replace(".", "");
BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2,7));
BigDecimal netWeight = new BigDecimal(tmpResp.substring(8,13));
BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2, 7));
BigDecimal netWeight = new BigDecimal(tmpResp.substring(8, 13));
mViewModel.setPesoNetto(netWeight);
mViewModel.setPesoLordo(grossWeight);
@@ -424,7 +429,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult());
if(mBluetoothDeviceInterface != null)
if (mBluetoothDeviceInterface != null)
mBluetoothDeviceInterface.setListeners(null, null, null);
dismiss();

View File

@@ -30,13 +30,16 @@ public class DialogInputQuantityV2DTO {
private boolean canPartitaMagBeChanged = true;
private boolean isDataScadMandatory = false;
private boolean isNotesAllowed = false;
private boolean isNotesMandatory = false;
private boolean isNumCnfEditable = true;
private boolean isFocusOnStart = true;
private boolean canLUBeClosed;
private boolean saveOnImeDone = false;
private String partitaMag;
private String note;
private Date dataScad;
private RunnableArgsWithReturn<DialogInputQuantityV2ViewModel,String> suggestPartitaMag;
private RunnableArgsWithReturn<DialogInputQuantityV2ViewModel, String> suggestPartitaMag;
private boolean canOverflowOrderQuantity;
@@ -130,6 +133,15 @@ public class DialogInputQuantityV2DTO {
return this;
}
public boolean isFocusOnStart() {
return isFocusOnStart;
}
public DialogInputQuantityV2DTO setFocusOnStart(boolean focusOnStart) {
isFocusOnStart = focusOnStart;
return this;
}
public BigDecimal getTotalQtaAvailable() {
return UtilityBigDecimal.round(totalQtaAvailable);
}
@@ -217,7 +229,7 @@ public class DialogInputQuantityV2DTO {
}
public boolean isDataScadMandatory() {
return isDataScadMandatory ;
return isDataScadMandatory;
}
public boolean isNotesAllowed() {
@@ -229,6 +241,24 @@ public class DialogInputQuantityV2DTO {
return this;
}
public boolean isNotesMandatory() {
return isNotesMandatory;
}
public DialogInputQuantityV2DTO setNotesMandatory(boolean notesMandatory) {
isNotesMandatory = notesMandatory;
return this;
}
public boolean isNumCnfEditable() {
return isNumCnfEditable;
}
public DialogInputQuantityV2DTO setNumCnfEditable(boolean numCnfEditable) {
isNumCnfEditable = numCnfEditable;
return this;
}
public RunnableArgsWithReturn<DialogInputQuantityV2ViewModel, String> getSuggestPartitaMag() {
return suggestPartitaMag;
}

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.InputType;
import android.text.SpannableString;
@@ -24,6 +25,7 @@ import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.Date;
@@ -42,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@@ -57,6 +60,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private Runnable mOnAbort;
public ObservableField<Integer> currentTextNumCnfToTake = new ObservableField<>(0);
public ObservableField<Boolean> flagShowCnfToTakeLabel = new ObservableField<>(true);
public ObservableField<Integer> currentTextNumPezziToTake = new ObservableField<>(0);
public ObservableField<String> currentPartitaMag = new ObservableField<>();
@@ -79,14 +83,15 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public ObservableField<Boolean> enabledChangePartitaMag = new ObservableField<>(true);
public ObservableField<Boolean> enabledNotes = new ObservableField<>(false);
public ObservableField<Boolean> enabledLUCloseButton = new ObservableField<>(true);
private Handler mHandler = new Handler();
private Context context;
private DialogInputQuantityV2Binding mBindings;
private boolean mEnableDataCallback = true;
private boolean mObservablesInitated = false;
private int mBarcodeScannerIstanceID;
private boolean mFirstStart = true;
private boolean mAbort = true;
@@ -143,6 +148,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable())
.setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag())
.setNote(mDialogInputQuantityV2DTO.getNote())
.setIsNoteMandatory(mDialogInputQuantityV2DTO.isNotesMandatory())
.setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag())
.setDataScad(mDialogInputQuantityV2DTO.getDataScad());
@@ -166,7 +172,16 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
});
}
this.onLoadingEnded();
mBindings.inputNumCnfText.requestFocus();
if (mDialogInputQuantityV2DTO.isFocusOnStart()) {
mHandler.postDelayed(() -> {
if (mDialogInputQuantityV2DTO.isNumCnfEditable()) {
mBindings.inputNumCnfText.requestFocus();
} else {
UtilityFocus.focusTextBox(requireContext(), mBindings.inputQtaTotText);
}
}, 1000);
}
return mBindings.getRoot();
}
@@ -179,9 +194,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, () -> {
this.onLoadingEnded();
});
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
};
public void save() {
@@ -202,7 +215,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
if (mAbort) this.mOnAbort.run();
super.onDismiss(dialog);
@@ -212,18 +224,16 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public void onStart() {
super.onStart();
// if(!mFirstStart) {
this.init();
// mFirstStart = false;
// }
int onNumCnfInputChanged = SettingsManager.iDB().getOnNumCnfInputChanged();
int onQtaTotInputChanged = SettingsManager.iDB().getOnQtaTotInputChanged();
this.mViewModel.setListener(this);
this.mViewModel.init(onNumCnfInputChanged);
this.mViewModel.init(onNumCnfInputChanged, onQtaTotInputChanged);
}
private void init() {
private void initViewObservables() {
UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> {
if (this.mEnableDataCallback) {
@@ -240,11 +250,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
Date minDataScad = calendar.getTime();
if (minDataScad.after(value) && value.after(new Date())) {
DialogSimpleMessageView
.makeWarningDialog(new SpannableString("La data selezionata è precedente alla data di scadenza consigliata per l'articolo scelto ( " + mtbAart.getGgScadPartita() + " giorni) . Continuare?"), null, () -> {
this.mViewModel.setDataScad(value);
}, () -> {
this.currentDataScad.set(null);
})
.makeWarningDialog(new SpannableString("La data selezionata è precedente alla data di scadenza consigliata per l'articolo scelto ( " + mtbAart.getGgScadPartita() + " giorni) . Continuare?"), null, () -> this.mViewModel.setDataScad(value), () -> this.currentDataScad.set(null))
.show(requireActivity().getSupportFragmentManager(), "tag");
} else {
this.mViewModel.setDataScad(value);
@@ -280,6 +286,12 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}
});
}
private void initViewModelObservables() {
final ColorStateList textColorsNumCnf = this.mBindings.inputNumCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaCnf = this.mBindings.inputQtaCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaTot = this.mBindings.inputQtaTotLayout.getEditText().getTextColors();
@@ -319,7 +331,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
if (!this.enabledQtaTot.get()) {
this.enabledQtaTot.set(true);
} else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true);
this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable());
}
}
});
@@ -328,7 +340,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value);
if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.enabledNumCnf.set(!value);
this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable() && !value);
} else {
if (value) {
if (this.mViewModel.blockedQtaCnf.get()) {
@@ -340,11 +352,20 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
if (!this.enabledQtaCnf.get()) {
this.enabledQtaCnf.set(true);
} else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true);
this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable());
}
}
}
});
}
private void init() {
if (!mObservablesInitated) {
initViewObservables();
mObservablesInitated = true;
}
initViewModelObservables();
//Init double taps
this.mBindings.inputNumCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@@ -391,9 +412,10 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed());
this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg());
if (this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue() == 0)) {
this.currentTextNumCnfToTake.set(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue());
int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue();
if (this.mDialogInputQuantityV2DTO.getMtbAart().isFlagQtaCnfFissaBoolean() && this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue() == 0)) {
int numCnftoTake = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().divide(this.mDialogInputQuantityV2DTO.getQtaCnfOrd(), 0, RoundingMode.DOWN).intValue();
this.currentTextNumCnfToTake.set(numCnftoTake);
int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getQtaCnfOrd().intValue();
this.currentTextNumPezziToTake.set(qtaText);
} else {
this.currentTextNumCnfToTake.set(0);
@@ -435,6 +457,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg());
this.currentTaraTot.set(taraTot);
this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot));
this.flagShowCnfToTakeLabel.set(false);
}
this.mBindings.executePendingBindings();

View File

@@ -18,6 +18,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidExpireDateException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidNotesException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidQtaCnfQuantityException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowNumCnfAvailableQuantityException;
@@ -50,6 +51,7 @@ public class DialogInputQuantityV2ViewModel {
public Boolean shouldAskDataScad;
public Boolean shouldShowDataScad;
public Boolean isNoteMandatory;
private BigDecimal initialNumCnf;
private BigDecimal initialQtaCnf;
@@ -68,6 +70,7 @@ public class DialogInputQuantityV2ViewModel {
private boolean canOverflowOrderQuantity;
private boolean canPartitaMagBeChanged;
private int onNumCnfInputChanged;
private int onQtaTotInputChanged;
private Listener mListener;
@@ -78,8 +81,9 @@ public class DialogInputQuantityV2ViewModel {
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
}
public void init(int onNumCnfInputChanged) {
public void init(int onNumCnfInputChanged, int onQtaTotInputChanged) {
this.onNumCnfInputChanged = onNumCnfInputChanged;
this.onQtaTotInputChanged = onQtaTotInputChanged;
if (this.initialNumCnf != null && this.initialQtaTot != null && this.initialQtaCnf != null) {
this.internalNumCnf = this.initialNumCnf;
@@ -377,10 +381,22 @@ public class DialogInputQuantityV2ViewModel {
}
if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
else if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
switch (onNumCnfInputChanged) {
case UPDATE_QTA_CNF:
if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
else if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
break;
case UPDATE_QTA_TOT:
if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
break;
}
this.mListener.onDataChanged();
}
@@ -403,7 +419,8 @@ public class DialogInputQuantityV2ViewModel {
this.mListener.onError(new InvalidQtaCnfQuantityException());
return false;
} else if (mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
}
if (mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
if (suggestPartitaMagRunnable != null) {
internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) {
@@ -415,38 +432,45 @@ public class DialogInputQuantityV2ViewModel {
return false;
}
} else if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
return false;
} else if (this.shouldAskDataScad && this.internalDataScad == null) {
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
return false;
} else if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
return false;
} else if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd)) {
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd)) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
return false;
} else if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
return false;
} else if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable)) {
}
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable)) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
return false;
} else if (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
}
if (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
UtilityBigDecimal.equalsOrLowerThan(this.internalNumCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO)) {
@@ -455,6 +479,10 @@ public class DialogInputQuantityV2ViewModel {
return false;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException());
return false;
}
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
@@ -486,6 +514,14 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
public Boolean isNoteMandatory() {
return isNoteMandatory;
}
public DialogInputQuantityV2ViewModel setIsNoteMandatory(Boolean noteMandatory) {
isNoteMandatory = noteMandatory;
return this;
}
public MtbAart getMtbAart() {
return this.mtbAart.get();

View File

@@ -98,7 +98,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
setBarcodeListener(true);
}
@@ -110,7 +110,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
var filteredMtbColrList = mtbColrList;
if (mtbAart != null) {
if (mtbAart != null && filteredMtbColrList != null) {
filteredMtbColrList = Stream.of(filteredMtbColrList)
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.toList();

View File

@@ -115,7 +115,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
BarcodeManager.enable();
if(openedMtbColt == null) {
if (openedMtbColt == null) {
mOnComplete.run(null, false);
}
super.onDismiss(dialog);
@@ -126,7 +126,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
setBarcodeListener(true);
}
@@ -150,11 +150,11 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
@Override
public void onLUVenditaConfirmRequired(RunnableArgs<Boolean> onConfirm) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(getString(R.string.lu_gest_v_loading_alert)),
null, () -> {
onConfirm.run(true);
}, () -> {
onConfirm.run(false);
})
null, () -> {
onConfirm.run(true);
}, () -> {
onConfirm.run(false);
})
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M6,6h12v12H6z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 827 B

View File

@@ -0,0 +1,6 @@
<vector android:height="24dp" android:tint="#000000"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white"
android:fillType="evenOdd" android:pathData="M8,16h8V8H8V16zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2L12,2z"/>
</vector>

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple
xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorRipple"> <!-- ripple color -->
<!-- for Button -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/full_white"/>
</shape>
</item>
</ripple>

View File

@@ -193,7 +193,7 @@
android:layout_gravity="center"
android:layout_marginTop="2dp"
android:gravity="center"
android:visibility="@{view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 ? View.VISIBLE : View.GONE}">
android:visibility="@{view.flagShowCnfToTakeLabel &amp;&amp; (view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 )? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.LinearLayoutCompat

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