Compare commits

...

75 Commits

Author SHA1 Message Date
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
05314803bc Finish v1.27.3(290) 2022-05-26 16:18:34 +02:00
d165174345 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
fa52b8e040 Finish v1.25.3(280) 2022-04-14 16:27:34 +02:00
c80b5a9160 Finish v1.25.3(280) 2022-04-14 16:27:34 +02:00
65ac5590c7 -> v1.25.3 (280) 2022-04-14 16:27:27 +02:00
3cee7f2a95 Fix su visibilità dialogInputQuantity 2022-04-14 16:26:55 +02:00
3034b49586 Finish v1.25.2(279) 2022-04-13 17:25:19 +02:00
718ffb3124 Finish v1.25.2(279) 2022-04-13 17:25:18 +02:00
7173c49561 -> v1.25.2 (279) 2022-04-13 17:25:10 +02:00
4407f37f8c Bugfix vari 2022-04-13 17:24:20 +02:00
37a16f6292 Finish v1.25.1(278) 2022-04-11 19:17:26 +02:00
83d9e0c5f7 Finish v1.25.1(278) 2022-04-11 19:17:26 +02:00
d2249e031a -> v1.25.1 (278) 2022-04-11 19:17:21 +02:00
2522e67705 Merge remote-tracking branch 'origin/develop' into develop 2022-04-11 19:16:46 +02:00
371514157c Fix su peso tipo collo al posto della tara 2022-04-11 19:16:42 +02:00
de889045e6 Merge remote-tracking branch 'origin/develop' into develop 2022-04-11 13:18:04 +02:00
6225ba8207 corretta gestione flag per ordinare in automatico articoli in acquisti pv 2022-04-11 13:17:56 +02:00
36c9319bce Finish v1.25.0(277) 2022-04-11 12:09:47 +02:00
d4d494218b Finish v1.25.0(277) 2022-04-11 12:09:46 +02:00
a3d6b11c69 -> v1.25.0 (277) 2022-04-11 12:09:42 +02:00
852edf1b13 Implementata comunicazione con dispositivo bluetooth in fase di rientro merce da lav.
Rimosso printerName e quantity dalla stampa delle SSCC.
2022-04-11 12:08:58 +02:00
6806290d98 Finish v1.24.8(276) 2022-03-30 17:46:46 +02:00
66f7a51462 Finish v1.24.8(276) 2022-03-30 17:46:46 +02:00
0e1e69dc9a -> v1.24.8 (276) 2022-03-30 17:46:41 +02:00
2ef24fe6e9 impostato focus automatico sul campo numCnf 2022-03-30 17:45:57 +02:00
577f2041a1 Finish v1.24.7(275) 2022-03-29 11:05:53 +02:00
128 changed files with 4554 additions and 744 deletions

View File

@@ -1,18 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\ValerioC.STUDIO-ML\.android\avd\Nexus_S_API_30.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2022-03-29T07:39:18.735889700Z" />
<runningDeviceTargetsSelectedWithDialog>
<Target>
<type value="RUNNING_DEVICE_TARGET" />

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 275
def appVersionName = '1.24.7'
def appVersionCode = 291
def appVersionName = '1.27.4'
signingConfigs {
release {
@@ -78,11 +78,11 @@ android {
}
}
lintOptions {
abortOnError false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"]
lint {
abortOnError false
}
}
@@ -113,6 +113,7 @@ dependencies {
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.preference:preference-ktx:1.2.0'
implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0"
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
@@ -164,6 +165,14 @@ dependencies {
// testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.1"
// androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
// androidTestImplementation 'org.testng:testng:7.4.0'
//Bluetooth device manager
implementation 'com.github.harry1453:android-bluetooth-serial:v1.1'
// RxJava is also required.
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
}
repositories {

View File

@@ -8,6 +8,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<application
android:name=".MainApplication"
@@ -26,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 = 9, exportSchema = false)
@TypeConverters({
DateConverter.class,
BigDecimalConverter.class

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;
@@ -202,6 +205,14 @@ public class ArticoloGriglia {
this.newNoPromo = newNoPromo;
}
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,6 +233,7 @@ public class ArticoloGriglia {
articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(0);

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

@@ -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

@@ -0,0 +1,10 @@
package it.integry.integrywmsnative.core.exception;
public class BluetoothConnectionException extends Exception {
public BluetoothConnectionException(String btDeviceName, String btDeviceMac, Throwable th) {
super("Impossibile collegarsi al dispositivo bluetooth: " + btDeviceName + " [" + btDeviceMac + "]. Riprovare.");
initCause(th);
}
}

View File

@@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.exception;
import java.util.Locale;
public class InvalidConnectionException extends Exception {
public InvalidConnectionException(String host, int port, Throwable cause) {
super(String.format(Locale.ITALY, "Impossibile stabilire la connessione con il server (%s:%d)", host, port), cause);
}
}

View File

@@ -4,6 +4,11 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class NoResultFromBarcodeException extends Exception {
public NoResultFromBarcodeException() {
super(UtilityResources.getString(R.string.no_result_from_barcode));
}
public NoResultFromBarcodeException(String barcode) {
super(UtilityResources.getString(R.string.no_result_from_barcode) + " (" + barcode + ")");
}

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.core.expansion;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -55,37 +54,31 @@ public abstract class BaseFragment extends Fragment {
}
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
private void openProgress() {
Log.d("PROGRESS DIALOG", "OPENED");
new Thread(() -> {
if (!progressOpened && !this.mCurrentProgress.isAdded()) {
this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
}).start();
BarcodeManager.disable();
if (!progressOpened && !this.mCurrentProgress.isAdded()) {
this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
}
private void closeProgress() {
Log.d("PROGRESS DIALOG", "CLOSED");
new Thread(() -> {
if (progressOpened) {
this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}).start();
BarcodeManager.enable();
if (progressOpened) {
this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss();
});
}
}
public void onError(Exception ex) {
@@ -107,8 +100,13 @@ public abstract class BaseFragment extends Fragment {
}
protected void popMe() {
requireActivity().runOnUiThread(() -> {
((IPoppableActivity) requireActivity()).pop();
});
if (requireActivity() instanceof IPoppableActivity) {
requireActivity().runOnUiThread(() -> {
((IPoppableActivity) requireActivity()).pop();
});
} else {
requireActivity().getSupportFragmentManager().popBackStack();
}
}
}

View File

@@ -2,7 +2,7 @@ package it.integry.integrywmsnative.core.expansion;
import androidx.databinding.Observable;
public abstract class OnGeneralChangedCallback extends Observable.OnPropertyChangedCallback implements Runnable{
public abstract class OnGeneralChangedCallback extends Observable.OnPropertyChangedCallback implements Runnable {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {

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,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

@@ -5,6 +5,7 @@ import java.net.SocketTimeoutException;
import java.util.HashMap;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
/**
* Created by GiuseppeS on 22/03/2018.
@@ -15,12 +16,17 @@ public class CommonRESTException {
private static String MESSAGE_KEY = "message";
private static String EXCEPTION_KEY = "exception";
private static HashMap<String, HashMap<String, Object>> bindingExceptions = new HashMap() {{
put("Printer not found", new HashMap<String, Object>(){{
private static final HashMap<String, HashMap<String, Object>> bindingExceptions = new HashMap<>() {{
put("Printer not found", new HashMap<>() {{
put(MESSAGE_KEY, "Stampante non trovata");
put(EXCEPTION_KEY, NoPrintersFoundException.class);
}});
put("barcode non letto correttamente", new HashMap<>() {{
put(MESSAGE_KEY, "Barcode non letto correttamente");
put(EXCEPTION_KEY, NoResultFromBarcodeException.class);
}});
}};
@@ -42,13 +48,11 @@ public class CommonRESTException {
for(String key : bindingExceptions.keySet()) {
if(message.contains(key)) {
Class classType = (Class) bindingExceptions.get(key).get(EXCEPTION_KEY);
Class<?> classType = (Class<?>) bindingExceptions.get(key).get(EXCEPTION_KEY);
try {
return (Exception) classType.newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
} catch (IllegalAccessException | InstantiationException e) {
e.printStackTrace();
}
}

View File

@@ -21,6 +21,7 @@ public class RESTBuilder {
return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true);
}
public static <T> T getService(final Class<T> service, int timeout) {
return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true, true, timeout);
@@ -34,7 +35,7 @@ public class RESTBuilder {
return getService(service, host, port, addInterceptors, addEmsApi, 30);
}
public static <T> T getService(final Class<T> service, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout){
public static <T> T getService(final Class<T> service, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
clientBuilder.connectTimeout(timeout, TimeUnit.SECONDS);
@@ -43,7 +44,7 @@ public class RESTBuilder {
clientBuilder.retryOnConnectionFailure(true);
if(addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor());
if (addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor());
OkHttpClient client = clientBuilder.build();
@@ -62,4 +63,13 @@ public class RESTBuilder {
return retrofit.create(service);
}
public static String getDefaultHost() {
return SettingsManager.i().getServer().getHost();
}
public static int getDefaultPort() {
return SettingsManager.i().getServer().getPort();
}
}

View File

@@ -245,7 +245,14 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
MtbColt mtbColtToCreate = new MtbColt()
.initDefaultFields(gestione);
Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode);
Integer customNumCollo = null;
try {
customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode);
} catch (Exception ex) {
onFailed.run(ex);
}
String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE;
if (customNumCollo != null) {

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) {
GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class);
service.getGestSetupValues(stbGestSetupList).enqueue(new Callback<ServiceRESTResponse<List<StbGestSetup>>>() {
service.getGestSetupValues(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

@@ -161,7 +161,15 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", onComplete, onFailed);
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", sitArtOrds -> {
if (sitArtOrds != null) {
for (SitArtOrdDTO sitArtOrd : sitArtOrds) {
sitArtOrd.setCodMart(sitArtOrd.getCodMart().trim());
}
}
onComplete.run(sitArtOrds);
}, onFailed);
}
@Override
@@ -189,7 +197,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
" AND mtb_colt.ser_collo = mtb_colr.ser_collo " +
" AND mtb_colt.data_collo = mtb_colr.data_collo " +
" AND mtb_colt.num_collo = mtb_colr.num_collo " +
" WHERE " + whereCondGestione +
" WHERE " + whereCondGestione +
" AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " +
" AND mtb_colt.data_doc IS NULL AND ";

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

@@ -9,16 +9,18 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig;
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;
@@ -55,7 +57,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
});
}
public void printCollo(Type printerType, MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
public void printCollo(MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
// if (BuildConfig.DEBUG) {
// onComplete.run();
@@ -64,10 +66,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
Call<ServiceRESTResponse<Object>> callable = null;
if (printerType != null)
callable = printerService.printCollo(printerType.toString(), testataColloToPrint);
else
callable = printerService.printCollo(testataColloToPrint);
callable = printerService.printCollo(testataColloToPrint);
callable.enqueue(new Callback<>() {
@Override
@@ -119,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,11 +28,9 @@ public interface PrinterRESTConsumerService {
@Body JasperDTO jasperDTO
);
@POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo(
@Query("printerType") String printerType,
@Body MtbColt mtbColtToPrint
@POST("printReportType")
Call<ServiceRESTResponse<Object>> printReportType(
@Body ReportTypeDTO reportTypeDTO
);
@POST("wms/printEtichettaSSCC")
@@ -38,4 +38,10 @@ public interface PrinterRESTConsumerService {
@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

@@ -15,6 +15,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.lang.reflect.Type;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -23,6 +24,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.exception.InvalidConnectionException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.Azienda;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
@@ -47,37 +49,43 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
nativeSqlDTO.nativeSql = nativeSql;
SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class);
service.processSql(nativeSqlDTO).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "ProcessSql", o -> {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, (JsonDeserializer) (json, typeOfT, context) -> {
try {
return UtilityDate.recognizeDate(json.getAsString());
} catch (Exception e) {
throw new JsonParseException(e);
}
})
.create();
service
.processSql(nativeSqlDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "ProcessSql", o -> {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, (JsonDeserializer<?>) (json, typeOfT, context) -> {
try {
return UtilityDate.recognizeDate(json.getAsString());
} catch (Exception e) {
throw new JsonParseException(e);
}
})
.create();
String json = gson.toJson(o);
String json = gson.toJson(o);
InputStream ims = new ByteArrayInputStream(json.getBytes());
Reader reader = new InputStreamReader(ims);
T gsonObj = gson.fromJson(reader, clazz);
InputStream ims = new ByteArrayInputStream(json.getBytes());
Reader reader = new InputStreamReader(ims);
T gsonObj = gson.fromJson(reader, clazz);
onComplete.run(gsonObj);
}, onFailed);
}
onComplete.run(gsonObj);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
Logger.e(t, "ProcessSQL");
onFailed.run(new Exception(t));
}
});
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
Logger.e(t, "ProcessSQL");
if (t instanceof ConnectException)
onFailed.run(new InvalidConnectionException(RESTBuilder.getDefaultHost(), RESTBuilder.getDefaultPort(), t));
else
onFailed.run(new Exception(t));
}
});
}

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()) {
@@ -31,7 +31,6 @@ public class _BaseRESTConsumer {
}
} else {
Log.e(logTitle, response.body().getErrorMessage());
// callback.onFailed(new Exception(response.body().getErrorMessage()));
onFailed.run(CommonRESTException.tryRecognizeException(response.body().getErrorMessage()));
}
} else {
@@ -67,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());
@@ -77,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()));
}
@@ -114,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,7 +42,8 @@ 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 boolean flagAccettazioneUseQtaOrd = false;
private boolean flagPickLiberoAllowEmptyDest = false;
@@ -281,12 +282,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;
}
@@ -336,7 +346,7 @@ public class DBSettingsModel {
}
public boolean getFlagOrdinaArticoliOnScan() {
public boolean isFlagOrdinaArticoliOnScan() {
return flagOrdinaArticoliOnScan;
}

View File

@@ -270,10 +270,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")
@@ -327,7 +323,6 @@ 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));
@@ -344,8 +339,14 @@ public class SettingsManager {
if (onNumCnfInputChanged != null) {
dbSettingsModelIstance.setOnNumCnfInputChanged(onNumCnfInputChanged);
}
if (onComplete != null) onComplete.run();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", codMdep, (value) -> {
dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(value);
GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", codMdep, (setupValue) -> {
dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(setupValue);
if (onComplete != null) onComplete.run();
}, onFailed);
}, onFailed);
}, onFailed);
}

View File

@@ -3,16 +3,15 @@ package it.integry.integrywmsnative.core.utility;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -31,6 +30,11 @@ public class PermissionsHelper {
if(Build.VERSION.SDK_INT >= 23) {
//permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES);
}
if(Build.VERSION.SDK_INT >= 31) {
permissionsToAsk.add(Manifest.permission.BLUETOOTH_CONNECT);
}
String[] permissionArray = new String[permissionsToAsk.size()];
permissionsToAsk.toArray(permissionArray);

View File

@@ -13,10 +13,10 @@ public class UtilityBarcode {
public static boolean isBarcodeOrdineV(BarcodeScanDTO barcodeScanDTO) {
return (isEan13(barcodeScanDTO) || isEtichetta128(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("3");
return (isEan13(barcodeScanDTO) || isEtichetta128(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("3");
}
public static boolean isEtichettaAnonima(BarcodeScanDTO barcodeScanDTO){
public static boolean isEtichettaAnonima(BarcodeScanDTO barcodeScanDTO) {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128 && barcodeScanDTO.getStringValue().startsWith("U");
}
@@ -28,10 +28,14 @@ public class UtilityBarcode {
return fullYear.equalsIgnoreCase("" + currentYear);
}
public static boolean isEtichetta128(BarcodeScanDTO barcodeScanDTO){
public static boolean isEtichetta128(BarcodeScanDTO barcodeScanDTO) {
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);
}
@@ -42,12 +46,12 @@ public class UtilityBarcode {
String barcode = barcodeScanDTO.getStringValue();
boolean isPosizione = false;
if(SettingsManager.iDB().getAvailablePosizioni() != null) {
if (SettingsManager.iDB().getAvailablePosizioni() != null) {
Stream<MtbDepoPosizione> tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcode) && (!enableCheckCodMdep || currentCodMdep.equalsIgnoreCase(x.getCodMdep())));
if(tmpStream.count() > 0){
isPosizione = true;
if (tmpStream.count() > 0) {
isPosizione = true;
}
}
@@ -59,7 +63,6 @@ public class UtilityBarcode {
}
public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) {
return (isEtichetta128(barcodeScanDTO) || isEan13(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("2");
}
@@ -81,31 +84,31 @@ public class UtilityBarcode {
}
public static Integer getNumColloFromULAnonima(String barcode) {
if(!UtilityString.isNullOrEmpty(barcode)) {
public static Integer getNumColloFromULAnonima(String barcode) throws Exception {
if (!UtilityString.isNullOrEmpty(barcode)) {
barcode = barcode.trim();
return Integer.parseInt(barcode.substring(3));
try {
return Integer.parseInt(barcode.substring(3, 10));
} catch (NumberFormatException nfex) {
throw new Exception("Impossibile leggere il numero collo dal barcode: " + barcode);
}
} else
return null;
}
public static Integer getAnnoColloFromULAnonima(String barcode) {
if(barcode != null){
if (barcode != null) {
return Integer.parseInt(barcode.substring(1, 3));
} else
return null;
}
public static String convertITF14toEAN13(String barcodeITF14) {
String barcodeEAN13 = null;
if(barcodeITF14.length() == 14) {
if (barcodeITF14.length() == 14) {
barcodeEAN13 = barcodeITF14.substring(1, barcodeITF14.length() - 1).trim();
barcodeEAN13 += getEAN13CheckDigit(barcodeEAN13);
}
@@ -116,7 +119,7 @@ public class UtilityBarcode {
public static String convertITF14toNeutral(String barcodeITF14) {
String barcodeNeutral = null;
if(barcodeITF14.length() == 14) {
if (barcodeITF14.length() == 14) {
barcodeNeutral = barcodeITF14.substring(1, barcodeITF14.length() - 1);
}
@@ -124,10 +127,10 @@ public class UtilityBarcode {
}
private static String getEAN13CheckDigit(String ean) {
private static String getEAN13CheckDigit(String ean) {
if (ean.length() != 12) {
UtilityLogger.errorMe(new Exception("Please provide an input string of 12 chars. Current lenght: "+ean.length()));
UtilityLogger.errorMe(new Exception("Please provide an input string of 12 chars. Current lenght: " + ean.length()));
return null;
}
long tot = 0;
@@ -135,7 +138,7 @@ public class UtilityBarcode {
for (int i = 0; i < 12; i++) {
tot = tot + (Long.parseLong(String.valueOf(ean.charAt(i))) * (i % 2 == 0 ? 1 : 3));
}
return tot % 10 == 0 ? "0" : "" + ( 10 - ( tot % 10));
return tot % 10 == 0 ? "0" : "" + (10 - (tot % 10));
}
}

View File

@@ -11,14 +11,19 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.orhanobut.logger.Logger;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.exception.InvalidConnectionException;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class UtilityExceptions {
private static final Class<? extends Exception>[] FIREBASE_IGNORED_EXCEPTIONS = new Class[] {
private static final Class<?>[] FIREBASE_IGNORED_EXCEPTIONS = new Class[] {
InvalidConnectionException.class,
InvalidLUGestioneException.class,
InvalidLUException.class
};
public static void defaultException(Context context, Exception ex, DialogProgressView progressDialog) {

View File

@@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@@ -303,7 +302,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
}
filterLayoutView.show(getSupportFragmentManager(), "TAG");
if (!filterLayoutView.isAdded())
filterLayoutView.show(getSupportFragmentManager(), "TAG");
}
@Override
@@ -732,7 +732,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt) x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@@ -827,19 +826,20 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.setCanLUBeClosed(true)
.setCanOverflowOrderQuantity(canOverflowQuantity);
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, shouldCloseLU);
})
.setOnAbort(() -> this.mViewModel.resetMatchedRows())
.show(getSupportFragmentManager(), "tag");
if (!mDialogInputQuantityV2View.isVisible())
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, shouldCloseLU);
})
.setOnAbort(() -> this.mViewModel.resetMatchedRows())
.show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -221,10 +221,16 @@ public class AccettazionePickingViewModel {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
int numCollo = -1;
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, true, onComplete);
try {
numCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue());
this.createNewLU(
numCollo,
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, true, onComplete);
} catch (Exception ex) {
this.sendError(ex);
}
}
} else {
this.sendError(new AlreadyUsedAnonymousLabelException());
@@ -837,7 +843,6 @@ public class AccettazionePickingViewModel {
cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum());
this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.SECONDARIA,
cloneMtbColt,
() -> {
this.sendLUSuccessfullyPrinted();

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

@@ -112,7 +112,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 +148,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 +160,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 +173,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

@@ -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,6 +247,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
.setCanOverflowOrderQuantity(false)
.setCanLUBeClosed(false)
.setNotesAllowed(true)
.setNotesMandatory(this.viewModel.isNotesMandatory())
.setDataScadMandatory(flagTracciabilita)
.setCanPartitaMagBeChanged(flagTracciabilita)
.setSuggestPartitaMag(data -> {
@@ -249,13 +258,15 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
}
return partitaMag;
});
dialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO);
})
.setOnAbort(this::onLoadingEnded)
.show(getSupportFragmentManager(), "tag");
if (!dialogInputQuantityV2View.isAdded())
dialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO);
})
.setOnAbort(this::onLoadingEnded)
.show(getSupportFragmentManager(), "tag");
}
@Override

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

@@ -45,16 +45,14 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false);
private String mReportName;
private PrinterRESTConsumer.Type mPrinterType;
private static class Key {
private static final String MtbColtKey = "mtbColtKey";
private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName";
}
public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, String reportName) {
public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, String reportName) {
Intent myIntent = new Intent(context, ContenutoBancaleActivity.class);
String keyMtbColt = DataCache.addItem(item);
@@ -63,9 +61,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
String keyCanRecoverUL = DataCache.addItem(canRecoverUl);
myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL);
String keyPrinterType = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, keyPrinterType);
String keyReportName = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, keyReportName);
@@ -79,7 +74,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey)));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale);
@@ -97,7 +91,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mViewModel.setListener(this);
mViewModel.init(mtbColt.get(), mPrinterType, mReportName);
mViewModel.init(mtbColt.get(), mReportName);
recoverFabMenuVisible.set(canRecoverUL);
@@ -143,7 +137,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
this.bindings.contenutoBancaleFab.close(true);
this.onLoadingStarted();
try {
this.mPrinterRESTConsumer.printCollo(mPrinterType, mtbColt.get(),
this.mPrinterRESTConsumer.printCollo(mtbColt.get(),
() -> {
this.onLoadingEnded();

View File

@@ -5,7 +5,6 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
public class ContenutoBancaleViewModel {
@@ -19,7 +18,7 @@ public class ContenutoBancaleViewModel {
this.mDepositoRESTConsumer = depositoRESTConsumer;
}
public void init(MtbColt mtbColt, PrinterRESTConsumer.Type printerType, String defaultReportName) {
public void init(MtbColt mtbColt, String defaultReportName) {
}

View File

@@ -19,7 +19,6 @@ import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter;
@@ -30,7 +29,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private static class Key {
private static final String MtbColtsKey = "mtbColtsKey";
private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName";
private static final String FlagOnlyResiduo = "flagOnlyResiduo";
}
@@ -43,7 +41,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>();
private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName;
private boolean mFlagOnlyResiduo;
@@ -51,19 +48,19 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, String reportName) {
return createIntent(context, items, canRecoverUlAction, printerType, true, reportName);
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, String reportName) {
return createIntent(context, items, canRecoverUlAction, true, reportName);
}
public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
return createIntent(context, items, input -> canRecoverUl, printerType, onlyResiduo);
public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, boolean onlyResiduo) {
return createIntent(context, items, input -> canRecoverUl, onlyResiduo);
}
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
return createIntent(context, items, canRecoverUlAction, printerType, onlyResiduo, null);
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo) {
return createIntent(context, items, canRecoverUlAction, onlyResiduo, null);
}
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo, String reportName) {
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo, String reportName) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items);
@@ -72,9 +69,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
String canRecoverULKey = DataCache.addItem(canRecoverUlAction);
myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey);
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
@@ -97,7 +91,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
@@ -138,7 +131,7 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
}
public void startContenutoBancaleActivity(MtbColt item){
Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mPrinterType, mReportName);
Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mReportName);
startActivityForResult(myIntent, PICK_UL_REQUEST);
}

View File

@@ -75,10 +75,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
}
public static MainFragment newInstance() {
MainFragment fragment = new MainFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
return new MainFragment();
}
@Override

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;
@@ -180,6 +181,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
mViewModel.setListener(null);
super.onDestroy();
}
@@ -682,37 +685,38 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
break;
}
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
if (!filterLayoutView.isAdded())
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
}
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) {
@@ -777,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

@@ -337,20 +337,21 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(canLUBeClosed);
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());
if (!mDialogInputQuantityV2View.isVisible())
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());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override

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

@@ -318,23 +318,24 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
.setCanLUBeClosed(false)
.setCanPartitaMagBeChanged(false);
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());
if (!mDialogInputQuantityV2View.isVisible())
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());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -218,7 +218,6 @@ public class PickingResiViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint,
onComplete, onFailed);
@@ -303,10 +302,16 @@ public class PickingResiViewModel {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
int numCollo = -1;
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
try {
numCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue());
this.createNewLU(
numCollo,
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
} catch (Exception ex) {
this.sendError(ex);
}
}
} else {

View File

@@ -274,7 +274,8 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
break;
}
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
if (!filterLayoutView.isAdded())
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
}
@@ -382,8 +383,6 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
}
private void initJtbComtCache(Runnable onComplete) {
var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue()))
.flatMap(x -> Stream.of(x.getCodJcom()))

View File

@@ -0,0 +1,321 @@
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.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
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 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 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();
}
});
}
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;
}
public void onSettingsRequest(ProdLineStatusDTO lineaProd) {
BottomSheetLineAction.newInstance(lineaProd, this::requestResources, this::requestOrderChange, this::requestProductionStop, this::requestMaterialRecover, BarcodeManager::enable).show(getSupportFragmentManager(), "BottomSheetLineAction");
}
@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();
}
public void askForLUBarcode() {
this.onLoadingEnded();
this.runOnUiThread(() -> {
DialogStartProduction.newInstance((dto) -> {
this.mViewModel.checkBarcodeAndStartOrdine(dto);
},
UtilityResources.getString(R.string.title_open_lu),
UtilityResources.getString(R.string.scan_lu_to_recover)
).show(getSupportFragmentManager(), "DialogStartProduction");
});
}
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", 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()))
.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"));
}
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,
onConfirm,
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,238 @@
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"));
}
onComplete.run();
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.successDialog("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.sendError(new Exception("Nessun ordine compatibile disponibile sulla linea selezionata"));
}
}, 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 void beginMaterialRecover() {
this.mListener.askForLUBarcode();
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void successDialog(String message, Runnable onComplete);
void requestQtaVersamento(MtbColr mtbColr, RunnableArgs<PickedQuantityDTO> onComplete);
void onSettingsRequest(ProdLineStatusDTO lineaProd);
void onLineStop();
void askForLUBarcode();
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,117 @@
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 static DialogStartProduction newInstance(RunnableArgs<BarcodeScanDTO> onScanSuccessful, String title, String label) {
Bundle args = new Bundle();
DialogStartProduction fragment = new DialogStartProduction();
fragment.setTitle(title);
fragment.setLabel(label);
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.onScanSuccessful.run(barcodeScanDTO);
this.dismiss();
} 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", 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,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
private FragmentProdRecuperoMaterialeBinding mBinding;
private int barcodeScannerIstanceID = -1;
private String codJfas;
private final ObservableArrayList<HistoryULsListModel> mHistoryULMutableData = new ObservableArrayList<>();
@@ -67,7 +68,12 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
}
public static ProdRecuperoMaterialeFragment newInstance() {
return newInstance(null);
}
public static ProdRecuperoMaterialeFragment newInstance(String codJfas) {
ProdRecuperoMaterialeFragment fragment = new ProdRecuperoMaterialeFragment();
fragment.setCodJfas(codJfas);
return fragment;
}
@@ -96,8 +102,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 +125,15 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
BarcodeManager.enable();
}
public String getCodJfas() {
return codJfas;
}
public ProdRecuperoMaterialeFragment setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
@@ -133,7 +152,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) {
@@ -201,20 +222,22 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanLUBeClosed(canLUBeClosed);
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());
if (!mDialogInputQuantityV2View.isVisible())
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());
this.mViewModel.onItemDispatched(item, pickedQuantityDTO, sourceMtbColt);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
this.mViewModel.onItemDispatched(item, pickedQuantityDTO, sourceMtbColt);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
else this.onLoadingEnded();
}
@Override
@@ -228,11 +251,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();
@@ -151,27 +151,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 +220,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);
@@ -291,7 +325,6 @@ public class ProdRecuperoMaterialeViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint,
onComplete, onAbort);

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

@@ -117,10 +117,12 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
public void onDestroyView() {
super.onDestroyView();
for (Runnable onPreDestroy :
mOnPreDestroyList) {
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
mProdRientroMerceOrderDetailFragment.onDetach();
mProdRientroMerceOrderListFragment.onDetach();
}
@Override

View File

@@ -8,8 +8,8 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
public class ProdRientroMerceViewModel {
@@ -31,7 +31,7 @@ public class ProdRientroMerceViewModel {
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}, ex -> this.sendError(new OrdersLoadException(ex)));
}
public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() {

View File

@@ -1,10 +1,13 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.bluetooth.BluetoothDevice;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
@@ -12,10 +15,13 @@ import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.MutableLiveData;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import com.harrysoft.androidbluetoothserial.BluetoothSerialDevice;
import java.math.BigDecimal;
import java.util.ArrayList;
@@ -23,8 +29,11 @@ import java.util.List;
import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.exception.BluetoothConnectionException;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -36,6 +45,7 @@ import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView;
@@ -64,6 +74,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
private RunnableArgs<MtbColt> onMtbColtClicked;
private BluetoothManager bluetoothManager;
private BluetoothSerialDevice mConnectedBluetoothDevice;
public ObservableField<BigDecimal> sumLUNumber = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO);
@@ -103,6 +116,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView();
this.initULScaleBluetoothConnection();
return mBindings.getRoot();
}
@@ -121,10 +135,52 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mBindings.mainList.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(item -> {
if(this.onMtbColtClicked != null) this.onMtbColtClicked.run(item);
if (this.onMtbColtClicked != null) this.onMtbColtClicked.run(item);
});
}
private void initULScaleBluetoothConnection() {
bluetoothManager = BluetoothManager.getInstance();
if (bluetoothManager == null) {
// Bluetooth unavailable on this device :( tell the user
Toast.makeText(requireActivity(), "Bluetooth not available.", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext());
var btMacAddress = sharedPreferences.getString(MainSettingsFragment.KEY_PALLET_BT_DEVICE, null);
if (btMacAddress == null) {
Toast.makeText(requireActivity(), "Nessun dispositivo BLUETOOTH configurato nelle impostazioni.", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
var btName = Stream.of(bluetoothManager.getPairedDevicesList())
.filter(x -> x.getAddress().equalsIgnoreCase(btMacAddress))
.map(BluetoothDevice::getName)
.findFirstOrElse(null);
var disposableBluetooth = bluetoothManager.openSerialDevice(btMacAddress)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::onConnected, x -> this.onError(new BluetoothConnectionException(btName, btMacAddress, x)));
}
private void onConnected(BluetoothSerialDevice connectedDevice) {
Toast.makeText(requireActivity(), "Connesso a: " + connectedDevice.getMac(), Toast.LENGTH_LONG).show();
mConnectedBluetoothDevice = connectedDevice;
}
@Override
public void onDetach() {
if (mConnectedBluetoothDevice != null)
bluetoothManager.close();
super.onDetach();
}
public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order);
mBindings.invalidateAll();
@@ -134,7 +190,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
}
private void refreshList(List<MtbColt> mtbColts) {
if(mtbColts != null) {
if (mtbColts != null) {
sumLUNumber.set(new BigDecimal(mtbColts.size()));
AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO);
@@ -186,7 +242,8 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
" AND (data_fine IS NULL OR last_step = id_step) " +
"ORDER BY id_step DESC";
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {}.getType(), dtbOrdStep -> {
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {
}.getType(), dtbOrdStep -> {
this.onLoadingEnded();
@@ -203,7 +260,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
DialogInputLUProdView
.newInstance(dialogInputLUProdDTO, resultDTO -> {
.newInstance(mConnectedBluetoothDevice != null ? mConnectedBluetoothDevice.toSimpleDeviceInterface() : null, dialogInputLUProdDTO, resultDTO -> {
ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setPesoCollo(resultDTO.getPesoCollo())
@@ -255,8 +312,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default:
return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
}
else
} else
return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
@@ -271,8 +327,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default:
return ContextCompat.getColor(requireActivity(), R.color.blue_800);
}
}
else
} else
return ContextCompat.getColor(requireActivity(), R.color.blue_800);
}
@@ -287,8 +342,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default:
return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
}
}
else
} else
return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
}
@@ -303,8 +357,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default:
return ContextCompat.getColor(requireActivity(), R.color.blue_800);
}
}
else
} else
return ContextCompat.getColor(requireActivity(), R.color.blue_800);
}
}

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 {
@@ -192,7 +193,7 @@ public class PVOrdineAcquistoEditViewModel {
}
private boolean isAutoOrderOnScan() {
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
return SettingsManager.iDB().isFlagOrdinaArticoliOnScan();
}
private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {

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

@@ -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");
}
@@ -378,23 +377,24 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(canLUBeClosed);
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());
if (!mDialogInputQuantityV2View.isVisible())
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());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(() -> {
this.onLoadingEnded();
})
.show(requireActivity().getSupportFragmentManager(), "tag");
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
else this.onLoadingEnded();
}
@Override
@@ -447,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");
;
}
@@ -459,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");
}

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;
@@ -494,7 +497,7 @@ public class RettificaGiacenzeViewModel {
onComplete.run();
} else {
this.mPrinterRESTConsumer.printCollo(null, mCurrentMtbColt, () -> {
this.mPrinterRESTConsumer.printCollo(mCurrentMtbColt, () -> {
this.sendLUSuccessfullyPrinted();
onComplete.run();
}, ex -> this.sendLUPrintError(ex, onComplete));

View File

@@ -1,20 +1,34 @@
package it.integry.integrywmsnative.gest.settings;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import com.annimon.stream.Stream;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import java.util.ArrayList;
import java.util.Collection;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment {
public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment, Preference.OnPreferenceChangeListener {
private final ArrayList<Runnable> onPreDestroyList = new ArrayList<>();
public static final String KEY_PALLET_BT_DEVICE = "pallet_scale_bt_device";
private Collection<BluetoothDevice> btPairedDevices;
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.settings_category).toString());
@@ -23,8 +37,52 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.app_preferences, rootKey);
var palletScaleBtDeviceListPref = (ListPreference) findPreference(KEY_PALLET_BT_DEVICE);
setListPreferenceData(palletScaleBtDeviceListPref);
palletScaleBtDeviceListPref.setOnPreferenceChangeListener(this);
}
protected void setListPreferenceData(ListPreference lp) {
BluetoothManager bluetoothManager = BluetoothManager.getInstance();
if (bluetoothManager == null) {
// Bluetooth unavailable on this device :( tell the user
Toast.makeText(requireActivity(), "Bluetooth not available", Toast.LENGTH_LONG).show(); // Replace context with your context instance.
return;
}
btPairedDevices = bluetoothManager.getPairedDevicesList();
if(!Stream.of(btPairedDevices).anyMatch(x -> x.getAddress().equalsIgnoreCase(lp.getValue()))) {
lp.setValue(null);
}
updatePalletBtDeviceSummary(lp, lp.getValue());
if (!btPairedDevices.isEmpty()) {
CharSequence[] entries = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
.map(BluetoothDevice::getName)
.toList()
.toArray(entries);
CharSequence[] entryValues = new CharSequence[btPairedDevices.size()];
Stream.of(btPairedDevices)
.map(BluetoothDevice::getAddress)
.toList()
.toArray(entryValues);
lp.setEntries(entries);
lp.setEntryValues(entryValues);
} else {
lp.setEntries(new CharSequence[0]);
lp.setEntryValues(new CharSequence[0]);
lp.setDialogMessage("Nessun dispositivo bluetooth associato. Associane uno dalle impostazioni bluetooth prima di procedere.");
}
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
onPreDestroyList.add(onPreDestroy);
@@ -34,9 +92,34 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
public void onDestroyView() {
super.onDestroyView();
for (Runnable onPreDestroy :
onPreDestroyList) {
for (Runnable onPreDestroy : onPreDestroyList) {
onPreDestroy.run();
}
}
@Override
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
final int idx;
switch (preference.getKey()) {
case KEY_PALLET_BT_DEVICE:
final var palletScaleBtDeviceListPref = (ListPreference) preference;
updatePalletBtDeviceSummary(palletScaleBtDeviceListPref, (String) newValue);
break;
}
// Set result so knows to refresh itself
// getActivity().setResult(RESULT_OK);
return true;
}
private void updatePalletBtDeviceSummary(ListPreference listPref, String btDeviceAddress) {
String btDeviceName = Stream.of(btPairedDevices)
.filter(x -> x.getAddress().equalsIgnoreCase(btDeviceAddress))
.map(BluetoothDevice::getName)
.findFirstOrElse(UtilityResources.getString(R.string.pallet_scale_bt_device_selection_info));
listPref.setSummary(btDeviceName);
}
}

View File

@@ -6,6 +6,7 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import android.widget.Toast;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
@@ -44,7 +45,6 @@ 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.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -56,12 +56,14 @@ 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.ui.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel;
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;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
@@ -192,9 +194,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 +204,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 +213,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mSitArtOrd,
mTestateOrdini,
mColliRegistrati,
reportNameSpedizioneChiudiOrdine,
mGestioneCol, mSegnoCol, mDefaultCausaleUL,
mEnableQuantityReset,
useQtaOrd);
@@ -669,7 +667,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA, false);
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@@ -696,7 +694,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 +724,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 +749,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");
}
@@ -811,23 +809,25 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged);
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());
if (!mDialogInputQuantityV2View.isVisible())
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());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
else Toast.makeText(this, "Dialog già a video", Toast.LENGTH_LONG).show();
}
@Override
@@ -851,12 +851,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);

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,6 +36,7 @@ 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;
@@ -45,6 +45,7 @@ import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
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 +56,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 +68,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 +94,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 +135,6 @@ public class SpedizioneViewModel {
List<SitArtOrdDTO> pickingList,
List<OrdineUscitaInevasoDTO> testateOrdini,
List<MtbColt> colliRegistrati,
String reportNameSpedizioneChiudiOrdine,
GestioneEnum gestioneCol,
int segnoCol,
Integer defaultCausaleUL,
@@ -148,7 +149,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;
@@ -210,9 +210,9 @@ public class SpedizioneViewModel {
.distinct()
.toList();
if (foundGestioni != null && foundGestioni.size() > 1) {
if (foundGestioni.size() > 1) {
return;
} else if (foundGestioni != null && foundGestioni.size() == 1) {
} else if (foundGestioni.size() == 1) {
mDefaultGestioneOfUL = foundGestioni.get(0);
} else {
mDefaultGestioneOfUL = GestioneEnum.VENDITA;
@@ -305,6 +305,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();
}
@@ -511,10 +519,15 @@ public class SpedizioneViewModel {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
int numCollo = -1;
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
try {
numCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue());
this.createNewLU(numCollo,
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
} catch (Exception ex) {
this.sendError(ex);
}
}
} else {
@@ -744,6 +757,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);
}
@@ -1722,26 +1738,25 @@ public class SpedizioneViewModel {
if (!shouldPrint) {
onComplete.run();
} else {
cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
cyclicPrint(mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
}
});
}
private void cyclicPrint(PrinterRESTConsumer.Type printerType, @NotNull Iterator<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) {
private void cyclicPrint(@NotNull Iterator<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceMtbColts.hasNext()) {
singlePrint(printerType, sourceMtbColts.next(), () -> {
cyclicPrint(printerType, sourceMtbColts, onComplete, onAbort);
singlePrint(sourceMtbColts.next(), () -> {
cyclicPrint(sourceMtbColts, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void singlePrint(PrinterRESTConsumer.Type printerType, MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo(
printerType,
mtbColtToPrint,
onComplete,
onFailed);
@@ -1752,7 +1767,7 @@ public class SpedizioneViewModel {
this.sendOnLoadingStarted();
this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
this.mCurrentMtbColt.generaFiltroOrdineFromDTO(mDefaultFiltroOrdine);
this.mColliMagazzinoRESTConsumer.saveCollo(this.mCurrentMtbColt, savedMtbColt -> {
@@ -1849,49 +1864,85 @@ 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,6 +1995,10 @@ public class SpedizioneViewModel {
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

@@ -203,24 +203,26 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
.setCanPartitaMagBeChanged(canBatchLotBeChanged)
.setCanLUBeClosed(false);
this.requireActivity().runOnUiThread(() -> {
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
if (!mDialogInputQuantityV2View.isVisible())
this.requireActivity().runOnUiThread(() -> {
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());
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO);
onComplete.run(pickedQuantityDTO);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
});
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
});
else this.onLoadingEnded();
}
@Override

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

@@ -22,6 +22,7 @@ import androidx.fragment.app.DialogFragment;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.material.textfield.TextInputLayout;
import com.harrysoft.androidbluetoothserial.SimpleBluetoothDeviceInterface;
import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener;
@@ -52,10 +53,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
@Inject
DialogInputLUProdViewModel mViewModel;
private final SimpleBluetoothDeviceInterface mBluetoothDeviceInterface;
private final DialogInputLUProdDTO mDialogInputLUProdDTO;
private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete;
private final Runnable mOnAbort;
public ObservableField<Boolean> enabledBluetoothDevice = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
@@ -87,13 +91,14 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null;
public static DialogInputLUProdView newInstance(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
return new DialogInputLUProdView(dialogInputLUProdDTO, onComplete, onAbort);
public static DialogInputLUProdView newInstance(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
return new DialogInputLUProdView(bluetoothDeviceInterface, dialogInputLUProdDTO, onComplete, onAbort);
}
private DialogInputLUProdView(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
private DialogInputLUProdView(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
super();
this.mBluetoothDeviceInterface = bluetoothDeviceInterface;
this.mDialogInputLUProdDTO = dialogInputLUProdDTO;
this.mOnComplete = onComplete;
this.mOnAbort = onAbort;
@@ -104,7 +109,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
}
@@ -142,6 +146,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
super.onStart();
this.init();
if(mBluetoothDeviceInterface != null) {
// Listen to bluetooth events
mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x)));
enabledBluetoothDevice.set(true);
}
this.mViewModel.setListener(this);
this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent());
}
@@ -166,7 +177,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
});
UtilityObservable.addPropertyChanged(this.currentMtbTCol, (value) -> {
this.currentTaraPed.set(value.getOriginalModel().getTaraKg());
this.currentTaraPed.set(value.getOriginalModel().getPesoKg());
});
UtilityObservable.addPropertyChanged(this.selectedLineaProd, (value) -> {
@@ -385,10 +396,37 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
this.onDataChanged();
}
public void readWeightFromDevice() {
// Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show();
// Let's send a message:
mBluetoothDeviceInterface.sendMessage("GW\r");
}
private void onMessageSent(String request) {
// Toast.makeText(requireActivity(), "Aspitt nu mument", Toast.LENGTH_SHORT).show();
}
private void onMessageReceived(String response) {
// Toast.makeText(requireActivity(), "Ne awa: " + response, Toast.LENGTH_SHORT).show();
String tmpResp = response.replace(".", "");
BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2,7));
BigDecimal netWeight = new BigDecimal(tmpResp.substring(8,13));
mViewModel.setPesoNetto(netWeight);
mViewModel.setPesoLordo(grossWeight);
}
public void save() {
if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult());
if(mBluetoothDeviceInterface != null)
mBluetoothDeviceInterface.setListeners(null, null, null);
dismiss();
}
}

View File

@@ -158,8 +158,8 @@ public class DialogInputLUProdViewModel {
this.mListener.onDataChanged();
}
public void setPesoNetto(BigDecimal qtaTot) {
this.internalPesoNetto = qtaTot;
public void setPesoNetto(BigDecimal pesoNetto) {
this.internalPesoNetto = pesoNetto;
}
public void setTaraPed(BigDecimal taraPed) {

View File

@@ -30,13 +30,15 @@ public class DialogInputQuantityV2DTO {
private boolean canPartitaMagBeChanged = true;
private boolean isDataScadMandatory = false;
private boolean isNotesAllowed = false;
private boolean isNotesMandatory = false;
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 +132,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 +228,7 @@ public class DialogInputQuantityV2DTO {
}
public boolean isDataScadMandatory() {
return isDataScadMandatory ;
return isDataScadMandatory;
}
public boolean isNotesAllowed() {
@@ -229,6 +240,15 @@ public class DialogInputQuantityV2DTO {
return this;
}
public boolean isNotesMandatory() {
return isNotesMandatory;
}
public DialogInputQuantityV2DTO setNotesMandatory(boolean notesMandatory) {
isNotesMandatory = notesMandatory;
return this;
}
public RunnableArgsWithReturn<DialogInputQuantityV2ViewModel, String> getSuggestPartitaMag() {
return suggestPartitaMag;
}

View File

@@ -24,6 +24,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;
@@ -57,6 +58,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<>();
@@ -84,6 +86,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private DialogInputQuantityV2Binding mBindings;
private boolean mEnableDataCallback = true;
private boolean mObservablesInitated = false;
private int mBarcodeScannerIstanceID;
private boolean mFirstStart = true;
@@ -143,6 +146,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,6 +170,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
});
}
this.onLoadingEnded();
if (mDialogInputQuantityV2DTO.isFocusOnStart()) {
mBindings.inputNumCnfText.requestFocus();
}
return mBindings.getRoot();
}
@@ -201,9 +208,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
if(mAbort) this.mOnAbort.run();
if (mAbort) this.mOnAbort.run();
super.onDismiss(dialog);
}
@@ -212,7 +218,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
super.onStart();
// if(!mFirstStart) {
this.init();
this.init();
// mFirstStart = false;
// }
@@ -222,7 +228,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mViewModel.init(onNumCnfInputChanged);
}
private void init() {
private void initViewObservables() {
UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> {
if (this.mEnableDataCallback) {
@@ -279,6 +285,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();
@@ -344,6 +356,15 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}
}
});
}
private void init() {
if (!mObservablesInitated) {
initViewObservables();
mObservablesInitated = true;
}
initViewModelObservables();
//Init double taps
this.mBindings.inputNumCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@@ -391,8 +412,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
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();
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);
@@ -434,6 +456,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;
@@ -403,7 +405,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 +418,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 +465,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 +500,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>

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