Compare commits

...

37 Commits

Author SHA1 Message Date
afcaa82069 Finish v1.45.04(486) 2025-03-19 18:22:08 +01:00
d44b6f00c6 -> v1.45.04 (486) 2025-03-19 18:22:03 +01:00
de68c3b49f Merge remote-tracking branch 'origin/develop' into develop 2025-03-19 18:20:07 +01:00
0591b60fad Rimossa randomizzazione dati Verifica Giacenze 2025-03-19 18:18:42 +01:00
4186d90a32 Finish v1.45.03(485) 2025-03-18 17:54:28 +01:00
bb21441c3d Finish v1.45.03(485) 2025-03-18 17:54:27 +01:00
12b1b89713 -> v1.45.03 (485) 2025-03-18 17:54:15 +01:00
4d29e2ab41 In accettazione bolla sitemato ordinamento righe e aggiunto controllo anomalie 2025-03-18 17:50:48 +01:00
2e37e874c3 Finish v1.45.02(484) 2025-03-18 12:17:24 +01:00
c99e32998b Finish v1.45.02(484) 2025-03-18 12:17:23 +01:00
22ce078c74 -> v1.45.02 (484) 2025-03-18 12:17:19 +01:00
a93d80b2e2 Fix su handler in spedizione 2025-03-18 12:16:41 +01:00
fa7d561189 Finish v1.45.01(483) 2025-03-17 11:51:25 +01:00
2c59e9beec Finish v1.45.01(483) 2025-03-17 11:51:24 +01:00
01af72bd2f -> v1.45.01 (483) 2025-03-17 11:51:18 +01:00
2f42958394 Fix su Rettifica Giacenze 2025-03-17 11:50:41 +01:00
fba3801994 Finish v1.45.00(482) 2025-03-14 18:20:01 +01:00
7ec722fc26 Finish v1.45.00(482) 2025-03-14 18:20:00 +01:00
64295d565a -> v1.45.00 (482) 2025-03-14 18:19:57 +01:00
2db0027fff Correzioni Verifica Giacenze 2025-03-14 18:19:09 +01:00
80dac639da Completata gestione verifica giacenze 2025-03-14 13:12:16 +01:00
a4fcc87088 Finish v1.44.12(481) 2025-03-12 19:29:55 +01:00
be1b993239 Finish v1.44.12(481) 2025-03-12 19:29:55 +01:00
63f9912347 -> v1.44.12 (481) 2025-03-12 19:29:49 +01:00
b887172032 Fix caricamento in closeOrder Spedizione 2025-03-12 19:28:18 +01:00
6229a1a4b1 Aggiornato DialogScanArt 2025-03-06 12:16:38 +01:00
a9028e65d9 Finish v1.44.11(480) 2025-03-04 11:02:32 +01:00
ba413e4d05 Finish v1.44.11(480) 2025-03-04 11:02:31 +01:00
6f759d969d -> v1.44.11 (480) 2025-03-04 11:02:26 +01:00
6f06eaf0a0 Rimosso vecchio dialog livello posizione 2025-03-04 10:57:35 +01:00
993191c083 Aggiornati dialog ask posizione e fixati problemi sul dismiss dei dialog 2025-03-04 10:56:19 +01:00
329d53f8d0 Migliorato controllo di generazione documenti carico/scarico durante il picking libero. 2025-03-03 18:09:39 +01:00
c3c3d32dfe Finish v1.44.10(479) 2025-03-03 11:52:21 +01:00
1756124b89 Finish v1.44.10(479) 2025-03-03 11:52:21 +01:00
5bc3619d6b -> v1.44.10 (479) 2025-03-03 11:52:17 +01:00
7ec04ac8da Fix su dialog caricamento in accettazione ordini 2025-03-03 11:51:31 +01:00
b31ea475c6 Finish v1.44.09(478) 2025-03-03 10:12:14 +01:00
120 changed files with 5506 additions and 1006 deletions

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

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

View File

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

View File

@@ -122,5 +122,10 @@ Create the following layout resource file [dialog_${dashName}.xml]
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if(getDialog() != null) getDialog().dismiss();
}
}

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 478
def appVersionName = '1.44.09'
def appVersionCode = 486
def appVersionName = '1.45.04'
signingConfigs {
release {
@@ -192,7 +192,8 @@ dependencies {
implementation 'org.greenrobot:eventbus:3.3.1'
//Barcode generator
implementation group: 'com.google.zxing', name: 'core', version: '3.5.3'
// implementation group: 'com.google.zxing', name: 'core', version: '3.5.3'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0'
}
repositories {

File diff suppressed because it is too large Load Diff

View File

@@ -89,6 +89,8 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArt
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoComponent;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeComponent;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeModule;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.settings.MainSettingsComponent;
@@ -114,8 +116,14 @@ import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetM
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule;
import it.integry.integrywmsnative.view.dialogs.ask_commessa.DialogAskCommessaComponent;
import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoComponent;
import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoModule;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneComponent;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneModule;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUComponent;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUModule;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule;
import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent;
@@ -132,6 +140,8 @@ import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBat
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtComponent;
import it.integry.integrywmsnative.view.dialogs.create_new_art.DialogCreateNewArtModule;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoComponent;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoModule;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUModule;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent;
@@ -233,7 +243,12 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
DialogAskVettoreModule.class,
DialogCreateNewArtModule.class,
DialogSwitchUserDepoModule.class,
DialogUpdateAvailableModule.class
DialogUpdateAvailableModule.class,
DialogAskPositionOfLUModule.class,
DialogAskLivelloPosizioneModule.class,
VerificaGiacenzeModule.class,
DialogExtraInfoModule.class,
DialogAskDepositoModule.class
})
public interface MainApplicationComponent {
@@ -392,6 +407,16 @@ public interface MainApplicationComponent {
DialogUpdateAvailableComponent.Factory dialogUpdateAvailableComponent();
DialogAskPositionOfLUComponent.Factory dialogAskPositionOfLUComponent();
DialogAskLivelloPosizioneComponent.Factory dialogAskLivelloPosizioneComponent();
VerificaGiacenzeComponent.Factory verificaGiacenzeComponent();
DialogExtraInfoComponent.Factory dialogExtraInfoComponent();
DialogAskDepositoComponent.Factory dialogAskDepositoComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -33,6 +33,7 @@ import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
@@ -162,8 +163,8 @@ public class MainApplicationModule {
@Provides
@Singleton
ArticoloRESTConsumer provideArticoloRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
return new ArticoloRESTConsumer(restBuilder, systemRESTConsumer);
ArticoloRESTConsumer provideArticoloRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) {
return new ArticoloRESTConsumer(restBuilder, executorService, systemRESTConsumer);
}
@Provides
@@ -238,8 +239,8 @@ public class MainApplicationModule {
@Provides
@Singleton
SystemRESTConsumer provideSystemRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
return new SystemRESTConsumer(executorService, restBuilder);
SystemRESTConsumer provideSystemRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new SystemRESTConsumer(restBuilder, executorService);
}
@Provides
@@ -268,8 +269,14 @@ public class MainApplicationModule {
@Provides
@Singleton
GiacenzaRESTConsumer provideGiacenzaRESTConsumer(RESTBuilder restBuilder, ArticoloRESTConsumer articoloRESTConsumer) {
return new GiacenzaRESTConsumer(restBuilder, articoloRESTConsumer);
GiacenzaRESTConsumer provideGiacenzaRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, ArticoloRESTConsumer articoloRESTConsumer) {
return new GiacenzaRESTConsumer(restBuilder, executorService, articoloRESTConsumer);
}
@Provides
@Singleton
GiacenzaPvRESTConsumer provideGiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
return new GiacenzaPvRESTConsumer(restBuilder, executorService);
}
@Provides

View File

@@ -19,6 +19,7 @@ import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposi
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment;
import it.integry.integrywmsnative.gest.pv_verifica_giacenze.VerificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloView;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment;
@@ -242,6 +243,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.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)
@@ -250,6 +252,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setDrawerIcon(R.drawable.ic_documents_outline)
.setFragmentFactory(DocInterniFragment::newInstance))
.addItem(new MenuItem()
.setCodMenu("MG075")
.setID(it.integry.integrywmsnative.R.id.nav_pv_verifica_giacenze)
.setTitleText(R.string.verifica_giacenze_menu)
.setTitleIcon(R.drawable.ic_dashboard_verifica_giacenze)
.setDrawerIcon(R.drawable.ic_drawer_verifica_giacenze)
.setFragmentFactory(VerificaGiacenzeFragment::newInstance))
// .addItem(new MenuItem()
// .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi)
// .setTitleText(it.integry.integrywmsnative.R.string.transmitted_orders)

View File

@@ -49,14 +49,14 @@ public class MainContext {
//this.initAuthSession(() -> {
this.initDeviceId(() -> {
// this.initDeviceId(() -> {
this.initDBData(() -> {
this.initMenu(() -> {
if (mListener != null) mListener.onContextInitialized();
});
});
});
// });
//});
@@ -96,9 +96,9 @@ public class MainContext {
SettingsManager.i().getUserSession().setDeviceId(fid.getResult());
SettingsManager.update();
systemRESTConsumer.registerDevice(onComplete, ex -> {
if (mListener != null) mListener.onError(new SpannedString(ex.getMessage()));
});
// systemRESTConsumer.registerDevice(onComplete, ex -> {
// if (mListener != null) mListener.onError(new SpannedString(ex.getMessage()));
// });
});
}

View File

@@ -22,14 +22,18 @@ import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao;
import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao;
import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao;
import it.integry.integrywmsnative.core.data_store.db.dao.RawDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeDao;
import it.integry.integrywmsnative.core.data_store.db.dao.VerificaGiacenzeRowDao;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
@Database(entities = {
ArticoloGriglia.class,
@@ -38,10 +42,12 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
ArticoloOrdine.class,
SqlMtbColt.class,
SqlMtbColr.class,
InventarioRoomDTO.class,
InventarioRowRoomDTO.class
InventarioEntity.class,
InventarioRowRoomDTO.class,
VerificaGiacenzeEntity.class,
VerificaGiacenzeRowEntity.class
},
version = 17)
version = 18)
@TypeConverters({
DateConverter.class,
BigDecimalConverter.class,
@@ -70,7 +76,8 @@ public abstract class AppDatabase extends RoomDatabase {
.addMigrations(MIGRATION_13_14)
.addMigrations(MIGRATION_14_15)
.addMigrations(MIGRATION_15_16)
.addMigrations(MIGRATION_16_17);
.addMigrations(MIGRATION_16_17)
.addMigrations(MIGRATION_17_18);
sInstance = builder.build();
}
@@ -95,6 +102,10 @@ public abstract class AppDatabase extends RoomDatabase {
public abstract InventarioRowDao inventarioRowDao();
public abstract VerificaGiacenzeDao verificaGiacenzeDao();
public abstract VerificaGiacenzeRowDao verificaGiacenzeRowDao();
static final Migration MIGRATION_10_11 = new Migration(10, 11) {
@@ -182,4 +193,28 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("DROP TABLE _inventario_rows_old;");
}
};
static final Migration MIGRATION_17_18 = new Migration(17, 18) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE IF NOT EXISTS verifica_giacenze (_id INTEGER PRIMARY KEY AUTOINCREMENT, cod_mdep TEXT NOT NULL, data INTEGER, remote_sync_date INTEGER);");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze__id ON verifica_giacenze (_id);");
database.execSQL("CREATE TABLE IF NOT EXISTS verifica_giacenze_rows (" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"parent_id INTEGER, " +
"created_at INTEGER DEFAULT CURRENT_TIMESTAMP, " +
"cod_mart TEXT, " +
"partita_mag TEXT, " +
"descrizione TEXT, " +
"qta_in_giacenza REAL NOT NULL DEFAULT 0, " +
"qta REAL NOT NULL DEFAULT 0, " +
"num_cnf REAL NOT NULL DEFAULT 0, " +
"qta_cnf REAL NOT NULL DEFAULT 0, " +
"scan_cod_barre TEXT, " +
"remote_sync_date INTEGER, " +
"FOREIGN KEY(parent_id) REFERENCES verifica_giacenze(_id) ON UPDATE NO ACTION ON DELETE CASCADE );");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze_rows__id ON verifica_giacenze_rows (_id)");
database.execSQL("CREATE INDEX IF NOT EXISTS index_verifica_giacenze_rows_parent_id ON verifica_giacenze_rows (parent_id)");
}
};
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,8 @@
package it.integry.integrywmsnative.core.exception;
public class InvalidCodMdepBarcodeException extends RuntimeException {
public InvalidCodMdepBarcodeException(String message) {
super(message);
}
}

View File

@@ -1,10 +0,0 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class InvalidCodMdepException extends Exception {
public InvalidCodMdepException() {
super(UtilityResources.getString(R.string.invalid_codmdep));
}
}

View File

@@ -0,0 +1,16 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class InvalidCodMdepLUException extends Exception {
public InvalidCodMdepLUException() {
super(UtilityResources.getString(R.string.invalid_codmdep_error_message));
}
public InvalidCodMdepLUException(String codMdep) {
super(UtilityResources.getString(R.string.invalid_codmdep_error_message) + "(" + codMdep + ")");
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -30,6 +31,9 @@ public abstract class BaseFragment extends Fragment {
@Inject
public ExecutorService executorService;
@Inject
public Handler handler;
protected ElevatedToolbar mToolbar;
protected final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@@ -79,7 +83,7 @@ public abstract class BaseFragment extends Fragment {
}
public void onError(Exception ex) {
requireActivity().runOnUiThread(() -> {
handler.post(() -> {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex);
BarcodeManager.enable();
@@ -102,7 +106,7 @@ public abstract class BaseFragment extends Fragment {
protected void popMe() {
if (requireActivity() instanceof IPoppableActivity) {
requireActivity().runOnUiThread(() -> {
handler.post(() -> {
((IPoppableActivity) requireActivity()).pop();
});
} else {

View File

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

View File

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

View File

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

View File

@@ -5,7 +5,7 @@ import android.os.Parcelable;
import java.math.BigDecimal;
public class MtbDepo extends EntityBase implements Parcelable {
public class MtbDepo extends EntityBase {
private String codMdep;
@@ -41,79 +41,6 @@ public class MtbDepo extends EntityBase implements Parcelable {
type = "mtb_depo";
}
protected MtbDepo(Parcel in) {
codMdep = in.readString();
descrizione = in.readString();
flagVal = in.readString();
codAnag = in.readString();
indirizzo = in.readString();
cap = in.readString();
citta = in.readString();
prov = in.readString();
tel = in.readString();
nazione = in.readString();
fax = in.readString();
eMail = in.readString();
sitoWeb = in.readString();
codVdes = in.readString();
serie = in.readString();
flagMovimentabile = in.readString();
codJfas = in.readString();
codVlis = in.readString();
codCcau = in.readString();
codCcon = in.readString();
codDtip = in.readString();
codDtipFat = in.readString();
flagContoVendita = in.readString();
flagTipoNegozio = in.readString();
codMdepReso = in.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(codMdep);
dest.writeString(descrizione);
dest.writeString(flagVal);
dest.writeString(codAnag);
dest.writeString(indirizzo);
dest.writeString(cap);
dest.writeString(citta);
dest.writeString(prov);
dest.writeString(tel);
dest.writeString(nazione);
dest.writeString(fax);
dest.writeString(eMail);
dest.writeString(sitoWeb);
dest.writeString(codVdes);
dest.writeString(serie);
dest.writeString(flagMovimentabile);
dest.writeString(codJfas);
dest.writeString(codVlis);
dest.writeString(codCcau);
dest.writeString(codCcon);
dest.writeString(codDtip);
dest.writeString(codDtipFat);
dest.writeString(flagContoVendita);
dest.writeString(flagTipoNegozio);
dest.writeString(codMdepReso);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<MtbDepo> CREATOR = new Creator<>() {
@Override
public MtbDepo createFromParcel(Parcel in) {
return new MtbDepo(in);
}
@Override
public MtbDepo[] newArray(int size) {
return new MtbDepo[size];
}
};
public String getCodMdep() {
return codMdep;

View File

@@ -52,9 +52,12 @@ public class RESTBuilder {
public <T> T getService(final Class<T> service, String protocol, String host, int port, boolean addInterceptors, boolean addEmsApi, int timeout) {
OkHttpClient.Builder clientBuilder = getDefaultHttpClient();
timeout = 0;
clientBuilder.connectTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.readTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.writeTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.callTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.retryOnConnectionFailure(true);

View File

@@ -10,6 +10,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Singleton;
@@ -26,7 +29,6 @@ import it.integry.integrywmsnative.core.rest.model.articolo.RetrieveArticoloByCo
import it.integry.integrywmsnative.core.rest.model.articolo.SaveArticoloRequestDTO;
import it.integry.integrywmsnative.core.rest.model.articolo.SaveArticoloResponseDTO;
import it.integry.integrywmsnative.core.rest.model.articolo.SearchArticoloByBarcodeRequestDTO;
import it.integry.integrywmsnative.core.rest.model.articolo.SearchArticoloByBarcodeResponseDTO;
import it.integry.integrywmsnative.core.rest.model.articolo.UpdateBarcodeImballoRequestDTO;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import retrofit2.Call;
@@ -36,10 +38,12 @@ import retrofit2.Response;
public class ArticoloRESTConsumer extends _BaseRESTConsumer {
private final RESTBuilder restBuilder;
private final ExecutorService executorService;
private final SystemRESTConsumer systemRESTConsumer;
public ArticoloRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
public ArticoloRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, SystemRESTConsumer systemRESTConsumer) {
this.restBuilder = restBuilder;
this.executorService = executorService;
this.systemRESTConsumer = systemRESTConsumer;
}
@@ -78,28 +82,30 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
});
}
public void searchByBarcode(String barcodeProd, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
public List<MtbAart> searchByBarcodeSynchronized(String barcodeProd) throws Exception {
ArticoloRESTConsumerService articoloRESTConsumerService = restBuilder.getService(ArticoloRESTConsumerService.class);
var request = new SearchArticoloByBarcodeRequestDTO()
.setBarcode(barcodeProd)
.setOnlyActive(true);
articoloRESTConsumerService
var response = articoloRESTConsumerService
.searchByBarcode(request)
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<SearchArticoloByBarcodeResponseDTO>> call, Response<ServiceRESTResponse<SearchArticoloByBarcodeResponseDTO>> response) {
analyzeAnswer(response, "searchByBarcode", (m) -> {
onComplete.run(response.body().getDto().getArts());
}, onFailed);
}
.execute();
@Override
public void onFailure(Call<ServiceRESTResponse<SearchArticoloByBarcodeResponseDTO>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
analyzeAnswer(response, "searchByBarcode");
return response.body().getDto().getArts();
}
public void searchByBarcode(String barcodeProd, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var mtbAarts = searchByBarcodeSynchronized(barcodeProd);
if (onComplete != null) onComplete.run(mtbAarts);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
public void findIfIsKit(MtbAart mtbAart, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed){
@@ -122,45 +128,48 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
});
}
public void getByCodMarts(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
var codMarts = Stream.of(codMartToFind)
.withoutNulls()
.distinct().toList();
public List<MtbAart> getByCodMartsSynchronized(List<String> codMartToFind) throws Exception {
var codMarts = codMartToFind.parallelStream()
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toUnmodifiableList());
ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer
var response = articoloRESTConsumer
.getByCodMart(new RetrieveArticoloByCodMartRequestDTO()
.setCodMarts(codMarts))
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<MtbAart>>> call, Response<ServiceRESTResponse<List<MtbAart>>> response) {
analyzeAnswer(response, "getByCodMart", onComplete, onFailed);
}
.execute();
return analyzeAnswer(response, "getByCodMart");
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<MtbAart>>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
public void getByCodMarts(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var mtbAarts = getByCodMartsSynchronized(codMartToFind);
if (onComplete != null) onComplete.run(mtbAarts);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
public List<StatoArticoloDTO> getStatoPartitaSynchronized(String codMart, String partitaMag) throws Exception {
ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class);
var response = articoloRESTConsumer.getStatoPartita(codMart, partitaMag).execute();
var data = analyzeAnswer(response, "getStatoPartita");
return data;
}
public void getStatoPartita(String codMart, String partitaMag, RunnableArgs<List<StatoArticoloDTO>> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getStatoPartita(codMart, partitaMag).enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<StatoArticoloDTO>>> call, Response<ServiceRESTResponse<List<StatoArticoloDTO>>> response) {
analyzeAnswer(response, "getStatoPartita", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<StatoArticoloDTO>>> call, @NonNull final Exception e) {
onFailed.run(e);
executorService.execute(() -> {
try {
var response = getStatoPartitaSynchronized(codMart, partitaMag);
if (onComplete != null) onComplete.run(response);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
@@ -172,7 +181,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getArtsGroups(List<String> groupsToFind, RunnableArgs<List<MtbGrup>> onComplete, RunnableArgs<Exception> onFailed) {
public List<MtbGrup> getArtsGroupsSynchronized(List<String> groupsToFind) throws Exception {
var whereCondMap = Stream.of(groupsToFind)
.map(x -> {
HashMap<String, Object> vars = new HashMap<>();
@@ -186,7 +195,18 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
Type typeOfObjectsList = new TypeToken<ArrayList<MtbGrup>>() {
}.getType();
this.systemRESTConsumer.processSql("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList, onComplete, onFailed);
return this.systemRESTConsumer.processSqlSynchronized("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList);
}
public void getArtsGroups(List<String> groupsToFind, RunnableArgs<List<MtbGrup>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var data = getArtsGroupsSynchronized(groupsToFind);
if (onComplete != null) onComplete.run(data);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}

View File

@@ -16,6 +16,10 @@ public class BarcodeRESTConsumer extends _BaseRESTConsumer {
this.ean128Service = ean128Service;
}
public Ean128Model decodeEan128Synchronized(BarcodeScanDTO barcodeScanDTO) throws Exception {
return this.ean128Service.decode(barcodeScanDTO);
}
public void decodeEan128(BarcodeScanDTO barcodeObj, RunnableArgs<Ean128Model> onComplete, RunnableArgs<Exception> onFailed) {
try {
onComplete.run(this.ean128Service.decode(barcodeObj));

View File

@@ -0,0 +1,41 @@
package it.integry.integrywmsnative.core.rest.consumers;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewVerificaRequestDTO;
public class GiacenzaPvRESTConsumer extends _BaseRESTConsumer {
private final RESTBuilder restBuilder;
private final ExecutorService executorService;
public GiacenzaPvRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
this.restBuilder = restBuilder;
this.executorService = executorService;
}
public List<GiacenzaPvDTO> retrieveGiacenzeSynchronized(String codMdep) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 120);
var response = giacenzaPvRESTConsumerService.retrieve(codMdep)
.execute();
var giacenzeList = analyzeAnswer(response, "retrieve-giacenze-pv");
return giacenzeList != null ? giacenzeList : new ArrayList<>();
}
public void saveNewVerificaSynchronized(SaveNewVerificaRequestDTO saveNewVerificaRequest) throws Exception {
GiacenzaPvRESTConsumerService giacenzaPvRESTConsumerService = restBuilder.getService(GiacenzaPvRESTConsumerService.class, 0);
var response = giacenzaPvRESTConsumerService.saveNewVerifica(saveNewVerificaRequest)
.execute();
analyzeAnswer(response, "save-verifica-pv");
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewVerificaRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface GiacenzaPvRESTConsumerService {
@GET("giacenza/retrieve")
Call<ServiceRESTResponse<List<GiacenzaPvDTO>>> retrieve(@Query("codMdep") String codMdep);
@POST("wms/pv/verifica_giacenze/save_new_verifica")
Call<ServiceRESTResponse<Void>> saveNewVerifica(@Body SaveNewVerificaRequestDTO saveNewVerificaRequest);
}

View File

@@ -7,6 +7,8 @@ import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Singleton;
@@ -28,52 +30,55 @@ import retrofit2.Response;
public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
private final RESTBuilder restBuilder;
private final ExecutorService executorService;
private final ArticoloRESTConsumer mArticoloRESTConsumer;
public GiacenzaRESTConsumer(RESTBuilder restBuilder, ArticoloRESTConsumer articoloRESTConsumer) {
public GiacenzaRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService, ArticoloRESTConsumer articoloRESTConsumer) {
this.restBuilder = restBuilder;
this.executorService = executorService;
this.mArticoloRESTConsumer = articoloRESTConsumer;
}
public void getGiacenzeInPosizione(MtbDepoPosizione posizione, RunnableArgs<List<MvwSitArtUdcDetInventario>> onComplete, RunnableArgs<Exception> onFailed) {
public List<MvwSitArtUdcDetInventario> getGiacenzeInPosizioneSynchronized(MtbDepoPosizione posizione) throws Exception {
GiacenzaRESTConsumerService giacenzaRESTConsumerService = restBuilder.getService(GiacenzaRESTConsumerService.class);
giacenzaRESTConsumerService.retrieveAvailableItems(posizione.getPosizione()).enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> call, Response<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> response) {
analyzeAnswer(response, "getGiacenzeInPosizione", inventarioList -> {
var response = giacenzaRESTConsumerService.retrieveAvailableItems(posizione.getPosizione())
.execute();
if(inventarioList != null && !inventarioList.isEmpty()){
List<String> codMarts = Stream.of(inventarioList)
.map(x -> x.getCodMart().trim())
.toList();
var inventarioList = analyzeAnswer(response, "getGiacenzeInPosizione");
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var row : inventarioList) {
if (inventarioList != null && !inventarioList.isEmpty()) {
List<String> codMarts = inventarioList.stream()
.map(x -> x.getCodMart().trim())
.collect(Collectors.toList());
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))
.findFirst();
var mtbAarts = mArticoloRESTConsumer.getByCodMartsSynchronized(codMarts);
for (var row : inventarioList) {
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))
.findFirst();
if (mtbAartOpt.isPresent()) {
foundMtbAart = mtbAartOpt.get();
}
if (mtbAartOpt.isPresent()) {
foundMtbAart = mtbAartOpt.get();
}
row.setMtbAart(foundMtbAart);
}
onComplete.run(inventarioList);
}, onFailed);
}else{
onComplete.run(new ArrayList<>());
}
}, onFailed);
row.setMtbAart(foundMtbAart);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> call, @NonNull final Exception e) {
onFailed.run(e);
return inventarioList;
}
return new ArrayList<>();
}
public void getGiacenzeInPosizione(MtbDepoPosizione posizione, RunnableArgs<List<MvwSitArtUdcDetInventario>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var result = getGiacenzeInPosizioneSynchronized(posizione);
if (onComplete != null) onComplete.run(result);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
@@ -92,8 +97,8 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var articoli : inventarioList) {
List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventario = articoli.getMvwSitArtUdcDetInventarioDTO();
if (mvwSitArtUdcDetInventario != null && !mvwSitArtUdcDetInventario.isEmpty()){
for (var row : mvwSitArtUdcDetInventario){
if (mvwSitArtUdcDetInventario != null && !mvwSitArtUdcDetInventario.isEmpty()) {
for (var row : mvwSitArtUdcDetInventario) {
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))

View File

@@ -27,7 +27,6 @@ import it.integry.integrywmsnative.core.rest.model.MailRequestDTO;
import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO;
import it.integry.integrywmsnative.core.rest.model.system.RegisterDeviceRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityGson;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -40,9 +39,9 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
private final ExecutorService executorService;
private final RESTBuilder restBuilder;
public SystemRESTConsumer(ExecutorService executorService, RESTBuilder restBuilder) {
this.executorService = executorService;
public SystemRESTConsumer(RESTBuilder restBuilder, ExecutorService executorService) {
this.restBuilder = restBuilder;
this.executorService = executorService;
}
public LatestAppVersionInfoDTO retrieveUpdatesInfoSynchronized(boolean betaVersion) throws Exception {
@@ -57,56 +56,37 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
return analyzeAnswerGeneric(response, "updates");
}
public void registerDevice(final Runnable onSuccess, final RunnableArgs<Exception> onFailed) {
RegisterDeviceRequestDTO registerDeviceRequestDTO = new RegisterDeviceRequestDTO()
.setApp("WMS");
SystemRESTConsumerService systemRESTConsumerService = restBuilder.getService(SystemRESTConsumerService.class);
systemRESTConsumerService.registerDevice(registerDeviceRequestDTO)
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "device/register", Void -> onSuccess.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
}
public <T> void processSql(String nativeSql, final Type clazz, final RunnableArgs<T> onComplete, final RunnableArgs<Exception> onFailed) {
public <T> T processSqlSynchronized(String nativeSql, final Type clazz) throws Exception {
NativeSqlRequestDTO nativeSqlDTO = new NativeSqlRequestDTO()
.setNativeSql(nativeSql);
SystemRESTConsumerService service = restBuilder.getService(SystemRESTConsumerService.class);
service
var response = service
.processSql(nativeSqlDTO)
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "ProcessSql", o -> {
Gson gson = UtilityGson.createObject();
.execute();
var data = analyzeAnswer(response, "processSql");
Gson gson = UtilityGson.createObject();
String json = gson.toJson(data);
InputStream ims = new ByteArrayInputStream(json.getBytes());
Reader reader = new InputStreamReader(ims);
T gsonObj = gson.fromJson(reader, clazz);
return gsonObj;
}
String json = gson.toJson(o);
InputStream ims = new ByteArrayInputStream(json.getBytes());
Reader reader = new InputStreamReader(ims);
T gsonObj = gson.fromJson(reader, clazz);
onComplete.run(gsonObj);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
public <T> void processSql(String nativeSql, final Type clazz, final RunnableArgs<T> onComplete, final RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
T result = processSqlSynchronized(nativeSql, clazz);
if (onComplete != null) onComplete.run(result);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}

View File

@@ -7,7 +7,6 @@ import it.integry.integrywmsnative.core.rest.model.MailRequestDTO;
import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.system.LatestAppVersionInfoDTO;
import it.integry.integrywmsnative.core.rest.model.system.RegisterDeviceRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
@@ -19,9 +18,6 @@ public interface SystemRESTConsumerService {
@GET("wms/currentVersion")
Call<LatestAppVersionInfoDTO> retrieveUpdatesInfo(@Query("suffix") String suffix);
@POST("device/register")
Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO);
@POST("processSql")
Call<ServiceRESTResponse<Object>> processSql(@Body NativeSqlRequestDTO nativeSqlDTO);

View File

@@ -337,7 +337,7 @@ public class Ean128Model {
public String Internal3; //Cod-Jfas
///<summary>Informazioni interne</summary>
public String Internal4;
public String Internal4; //Cod-Mdep
///<summary>Informazioni interne</summary>
public String Internal5;

View File

@@ -0,0 +1,69 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.math.BigDecimal;
import java.util.Date;
public class GiacenzaPvDTO {
private String codMart;
private String descrizione;
private BigDecimal qtaInv;
private Date dtaInventario;
private String codMdep;
private BigDecimal incomingStock;
public String getCodMart() {
return codMart;
}
public GiacenzaPvDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public GiacenzaPvDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQtaInv() {
return qtaInv;
}
public GiacenzaPvDTO setQtaInv(BigDecimal qtaInv) {
this.qtaInv = qtaInv;
return this;
}
public Date getDtaInventario() {
return dtaInventario;
}
public GiacenzaPvDTO setDtaInventario(Date dtaInventario) {
this.dtaInventario = dtaInventario;
return this;
}
public String getCodMdep() {
return codMdep;
}
public GiacenzaPvDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public BigDecimal getIncomingStock() {
return incomingStock;
}
public GiacenzaPvDTO setIncomingStock(BigDecimal incomingStock) {
this.incomingStock = incomingStock;
return this;
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.core.rest.model.pv;
public class SaveNewVerificaRequestDTO {
private VerificaGiacenzeDTO data;
public VerificaGiacenzeDTO getData() {
return data;
}
public SaveNewVerificaRequestDTO setData(VerificaGiacenzeDTO data) {
this.data = data;
return this;
}
}

View File

@@ -0,0 +1,41 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.time.LocalDateTime;
import java.util.List;
import it.integry.integrywmsnative.core.model.BaseRestDTO;
public class VerificaGiacenzeDTO extends BaseRestDTO {
private String codMdep;
private LocalDateTime dataVerifica;
private List<VerificaGiacenzeRowDTO> rows;
public String getCodMdep() {
return codMdep;
}
public VerificaGiacenzeDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public LocalDateTime getDataVerifica() {
return dataVerifica;
}
public VerificaGiacenzeDTO setDataVerifica(LocalDateTime dataVerifica) {
this.dataVerifica = dataVerifica;
return this;
}
public List<VerificaGiacenzeRowDTO> getRows() {
return rows;
}
public VerificaGiacenzeDTO setRows(List<VerificaGiacenzeRowDTO> rows) {
this.rows = rows;
return this;
}
}

View File

@@ -0,0 +1,78 @@
package it.integry.integrywmsnative.core.rest.model.pv;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.BaseRestDTO;
public class VerificaGiacenzeRowDTO extends BaseRestDTO {
private String codMart;
private String partitaMag;
private BigDecimal qtaInGiacenza;
private BigDecimal qta;
private BigDecimal qtaCnf;
private BigDecimal numCnf;
private String barcode;
public String getCodMart() {
return codMart;
}
public VerificaGiacenzeRowDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public VerificaGiacenzeRowDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getQtaInGiacenza() {
return qtaInGiacenza;
}
public void setQtaInGiacenza(BigDecimal qtaInGiacenza) {
this.qtaInGiacenza = qtaInGiacenza;
}
public BigDecimal getQta() {
return qta;
}
public VerificaGiacenzeRowDTO setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public VerificaGiacenzeRowDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public VerificaGiacenzeRowDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public String getBarcode() {
return barcode;
}
public VerificaGiacenzeRowDTO setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
}

View File

@@ -1,15 +0,0 @@
package it.integry.integrywmsnative.core.rest.model.system;
public class RegisterDeviceRequestDTO {
private String app;
public String getApp() {
return app;
}
public RegisterDeviceRequestDTO setApp(String app) {
this.app = app;
return this;
}
}

View File

@@ -1,14 +1,17 @@
package it.integry.integrywmsnative.core.utility;
import android.graphics.Bitmap;
import android.graphics.Color;
import com.annimon.stream.Stream;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.barcode_base_android_library.model.BarcodeType;
@@ -17,6 +20,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UtilityBarcode {
public static final char FNC1 = 0x00f1;
public static boolean isBarcodeOrdineV(BarcodeScanDTO barcodeScanDTO) {
return (isEan13(barcodeScanDTO) || isEtichetta128(barcodeScanDTO)) && barcodeScanDTO.getStringValue().startsWith("3");
@@ -161,15 +165,15 @@ public class UtilityBarcode {
}
public static Bitmap generateBarcodeImage(String barcode, int width, int height) throws Exception {
if(barcode == null) return null;
if (barcode == null) return null;
BarcodeType barcodeType;
if(barcode.length() == 8)
if (barcode.length() == 8)
barcodeType = BarcodeType.EAN8;
else if(barcode.length() == 13)
else if (barcode.length() == 13)
barcodeType = BarcodeType.EAN13;
else if(barcode.length() == 14)
else if (barcode.length() == 14)
barcodeType = BarcodeType.INTERLEAVED_2OF5;
else throw new Exception("Barcode " + barcode + " non valido");
@@ -177,25 +181,49 @@ public class UtilityBarcode {
}
public static Bitmap generateBarcodeImage(String barcode, BarcodeType type, int width, int height) throws Exception {
// Genera la matrice del codice a barre
MultiFormatWriter writer = new MultiFormatWriter();
BarcodeFormat barcodeFormat = switch (type) {
case EAN8 -> BarcodeFormat.EAN_8;
case EAN13 -> BarcodeFormat.EAN_13;
case INTERLEAVED_2OF5 -> BarcodeFormat.ITF;
case CODE128 -> BarcodeFormat.CODE_128;
default -> throw new Exception("Barcode " + barcode + " non valido (tipo: " + type + ")");
};
if (barcode == null) return null;
BitMatrix bitMatrix = writer.encode(barcode, barcodeFormat, width, height);
Bitmap bitmap = null;
// Crea un bitmap a partire dalla matrice
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
bitmap.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE);
if (type == BarcodeType.EAN128) {
if(barcode.charAt(0) != FNC1) {
barcode = FNC1 + barcode;
}
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "ISO-8859-1");
hints.put(EncodeHintType.MARGIN, 10); // Quiet zone
// Crea il codice a barre
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
BitMatrix bitMatrix = multiFormatWriter.encode(
barcode,
BarcodeFormat.CODE_128,
width, // Larghezza
height, // Altezza
hints
);
// Converti in bitmap
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
bitmap = barcodeEncoder.createBitmap(bitMatrix);
} else {
BarcodeFormat barcodeFormat = switch (type) {
case EAN8 -> BarcodeFormat.EAN_8;
case EAN13 -> BarcodeFormat.EAN_13;
case INTERLEAVED_2OF5 -> BarcodeFormat.ITF;
case CODE128 -> BarcodeFormat.CODE_128;
default ->
throw new Exception("Barcode " + barcode + " non valido (tipo: " + type + ")");
};
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bitMatrix = writer.encode(barcode, barcodeFormat, width, height);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
bitmap = barcodeEncoder.createBitmap(bitMatrix);
}
return bitmap;

View File

@@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.Gravity;
@@ -690,4 +691,15 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
}
}
}
@Override
public void onConfirmAnomalie(int anomalie, RunnableArgs<Boolean> onConfirm) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(String.format(getString(R.string.confirm_anomalie), anomalie))),
null, () -> {
onConfirm.run(true);
}, () -> {
onConfirm.run(false);
})
.show(getSupportFragmentManager(), "tag");
}
}

View File

@@ -643,7 +643,6 @@ public class AccettazioneBollaPickingViewModel {
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setPartitaMag(partitaMag)
// .setCodJcom(pickingObjectDTO.getSitBollaAccettazione().getCodJcom())
.setDataDoc(sitBolla != null ? sitBolla.getDataDoc() : firstAvailableBolla.getDataDoc())
.setNumDoc(sitBolla != null ? sitBolla.getNumDoc() : firstAvailableBolla.getNumDoc())
.setCodDtip(sitBolla != null ? sitBolla.getCodDtip() : firstAvailableBolla.getCodDtip())
@@ -662,7 +661,7 @@ public class AccettazioneBollaPickingViewModel {
.setMtbAart(pickingObjectDTO.getMtbAart());
pickingObjectDTO.getWithdrawMtbColrs().add(insertedMtbColr);
mCurrentMtbColt.getMtbColr().add(insertedMtbColr);
mCurrentMtbColt.getMtbColr().add(0, insertedMtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
resetMatchedRows();
@@ -801,21 +800,42 @@ public class AccettazioneBollaPickingViewModel {
} else {
CloseUDCRequestDTO closeUDCRequestDTO = new CloseUDCRequestDTO()
.setMtbColt(mCurrentMtbColt);
mColliCaricoRESTConsumer.closeUDC(closeUDCRequestDTO, closeUDCResponse -> {
Runnable onVersamentoCompleted = () -> {
managePrintCollo(this::postCloseOperations);
ObservableArrayList<MtbColr> mtbColr = mCurrentMtbColt.getMtbColr();
List<PickingObjectDTO> pickingList = getPickingList().getValue();
this.sendLUClosed();
this.sendOnLoadingEnded();
};
int listCount = pickingList != null ? pickingList.size() : 0;
int anomalie = listCount > 0 ? listCount - mtbColr.size() : 0;
manageVersamentoAutomatico(onVersamentoCompleted);
}, this::sendError);
if (anomalie == 0){
closeUdc(closeUDCRequestDTO);
} else {
onConfirmAnomalie(anomalie, canBeClose -> {
if (canBeClose) {
closeUdc(closeUDCRequestDTO);
} else {
this.sendOnLoadingEnded();
}
});
}
}
}, this::sendError);
}
private void closeUdc(CloseUDCRequestDTO closeUDCRequestDTO){
mColliCaricoRESTConsumer.closeUDC(closeUDCRequestDTO, closeUDCResponse -> {
Runnable onVersamentoCompleted = () -> {
managePrintCollo(this::postCloseOperations);
this.sendLUClosed();
this.sendOnLoadingEnded();
};
manageVersamentoAutomatico(onVersamentoCompleted);
}, this::sendError);
}
private void manageVersamentoAutomatico(Runnable onComplete) {
if (!SettingsManager.iDB().isFlagAccettazioneBollaAskVersamentoAutomatico()) {
@@ -1038,6 +1058,9 @@ public class AccettazioneBollaPickingViewModel {
return this;
}
private void onConfirmAnomalie(int anomalie, RunnableArgs<Boolean> onConfirm){
if (this.mListener != null) mListener.onConfirmAnomalie(anomalie, onConfirm);
}
public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener {
@@ -1075,6 +1098,8 @@ public class AccettazioneBollaPickingViewModel {
void onUnknownBarcodeScanned(String barcode, RunnableArgs<String> done, Runnable abort);
void onConfirmAnomalie(int anomalie, RunnableArgs<Boolean> onConfirm);
}
}

View File

@@ -2,12 +2,10 @@ package it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.ObservableArrayList;
@@ -17,7 +15,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import it.integry.integrywmsnative.R;
@@ -65,29 +62,10 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
this.mShowSecondaryUntMis = showSecondaryUntMis;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@RequiresApi(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
@Override
public void onChanged(ObservableList sender) {
List<AccettazioneBollaPickingListModel> listaOrdinata = new ArrayList<>();
if (!sender.isEmpty()) {
listaOrdinata = new ArrayList<>(sender);
Collections.sort(listaOrdinata, (a, b) -> {
boolean condA = a.getQtaEvasa().floatValue() > 0;
boolean condB = b.getQtaEvasa().floatValue() > 0;
if (condA && !condB) {
return -1;
} else if (!condA && condB) {
return 1;
}
return 0;
});
}
mDataset.clear();
mDataset.addAll(listaOrdinata);
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
}

View File

@@ -654,8 +654,16 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
this.fabPopupMenu.dismiss();
this.onLoadingStarted();
this.mViewModel.createNewLU(null, null, null, false, () -> {
this.onLoadingEnded();
executorService.execute(() -> {
try {
//Aggiunto perchè a volte rimaneva il dialog di caricamento avanti a tutto
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
this.mViewModel.createNewLU(null, null, null, false, () -> {
this.onLoadingEnded();
});
});
}

View File

@@ -99,7 +99,7 @@ public class ArticoliInGiacenzaFragment extends BaseFragment implements ITitledF
}
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
@@ -107,7 +107,7 @@ public class ArticoliInGiacenzaFragment extends BaseFragment implements ITitledF
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
})
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -20,7 +20,7 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
@@ -94,7 +94,7 @@ public class ElencoInventariFragment extends BaseFragment implements ITitledFrag
mBinding.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
});
var itemType = new Type<InventarioRoomDTO, FragmentElencoInventarioListSingleItemBinding>(R.layout.fragment_elenco_inventario_list_single_item, BR.item);
var itemType = new Type<InventarioEntity, FragmentElencoInventarioListSingleItemBinding>(R.layout.fragment_elenco_inventario_list_single_item, BR.item);
itemType.onClick(x -> {
var item = x.getBinding().getItem();
@@ -123,7 +123,7 @@ public class ElencoInventariFragment extends BaseFragment implements ITitledFrag
});
new LiveAdapter(mViewModel.getInventarioList(), this)
.map(InventarioRoomDTO.class, itemType)
.map(InventarioEntity.class, itemType)
.into(this.mBinding.inventarioList);
@@ -152,8 +152,8 @@ public class ElencoInventariFragment extends BaseFragment implements ITitledFrag
}
@Override
public void onInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> listaArts) {
startPicking(inventarioRoomDTO, listaArts);
public void onInventarioLoaded(InventarioEntity inventarioEntity, List<InventarioArtDTO> listaArts) {
startPicking(inventarioEntity, listaArts);
}
@Override
@@ -173,8 +173,8 @@ public class ElencoInventariFragment extends BaseFragment implements ITitledFrag
}
private void startPicking(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> listArts) {
PickingInventarioActivity.startActivity(requireContext(), inventarioRoomDTO, listArts);
private void startPicking(InventarioEntity inventarioEntity, List<InventarioArtDTO> listArts) {
PickingInventarioActivity.startActivity(requireContext(), inventarioEntity, listArts);
}
@Override
@@ -196,13 +196,13 @@ public class ElencoInventariFragment extends BaseFragment implements ITitledFrag
.show(requireActivity().getSupportFragmentManager(), "tag");
}
public void deleteInventarioRequest(InventarioRoomDTO inventarioRoomDTO) {
public void deleteInventarioRequest(InventarioEntity inventarioEntity) {
DialogYesNoView
.newInstance(null, "Vuoi cancellare l'inventario?",
dialogResponse -> {
switch (dialogResponse) {
case YES:
this.mViewModel.deleteInventario(inventarioRoomDTO);
this.mViewModel.deleteInventario(inventarioEntity);
break;
case NO:

View File

@@ -7,7 +7,7 @@ import com.annimon.stream.Stream;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
@@ -25,7 +25,7 @@ public class ElencoInventariViewModel {
private final SettingsManager settingsManager;
private Listener listener;
private LiveData<List<InventarioRoomDTO>> inventarioList;
private LiveData<List<InventarioEntity>> inventarioList;
private final String codMdep;
@@ -52,7 +52,7 @@ public class ElencoInventariViewModel {
inventarioList = null;
}
public LiveData<List<InventarioRoomDTO>> getInventarioList() {
public LiveData<List<InventarioEntity>> getInventarioList() {
return inventarioList;
}
@@ -101,12 +101,12 @@ public class ElencoInventariViewModel {
}
public void createNewInventario(long inventoryId, String zone, RunnableArgss<InventarioRoomDTO, List<InventarioArtDTO>> onComplete) {
public void createNewInventario(long inventoryId, String zone, RunnableArgss<InventarioEntity, List<InventarioArtDTO>> onComplete) {
this.sendOnLoadingStarted();
var codMdep = settingsManager.getSettings().getUserSession().getDepo().getCodMdep();
var createdInventario = new InventarioRoomDTO();
var createdInventario = new InventarioEntity();
createdInventario.setIdInventario(inventoryId);
createdInventario.setZona(zone);
createdInventario.setCodMdep(codMdep);
@@ -121,8 +121,8 @@ public class ElencoInventariViewModel {
});
}
public void deleteInventario(InventarioRoomDTO inventarioRoomDTO) {
inventarioRepository.delete(inventarioRoomDTO, null, this::sendOnError);
public void deleteInventario(InventarioEntity inventarioEntity) {
inventarioRepository.delete(inventarioEntity, null, this::sendOnError);
}
@@ -134,8 +134,8 @@ public class ElencoInventariViewModel {
if (listener != null) listener.onInventarioInfoRequest(onComplete);
}
private void sendOnInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> listaArts) {
if (listener != null) listener.onInventarioLoaded(inventarioRoomDTO, listaArts);
private void sendOnInventarioLoaded(InventarioEntity inventarioEntity, List<InventarioArtDTO> listaArts) {
if (listener != null) listener.onInventarioLoaded(inventarioEntity, listaArts);
}
private void sendCreateInventarioRequest(long inventoryId, String zone) {
@@ -170,7 +170,7 @@ public class ElencoInventariViewModel {
void onInventarioInfoRequest(RunnableArgss<Long, String> onComplete);
void onInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> listaArts);
void onInventarioLoaded(InventarioEntity inventarioEntity, List<InventarioArtDTO> listaArts);
void onInventoriesLoadingStarted();

View File

@@ -14,7 +14,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.databinding.BottomSheetInventarioActionsViewBinding;
public class BottomSheetInventarioActionsView extends BottomSheetDialogFragment {
@@ -28,9 +28,9 @@ public class BottomSheetInventarioActionsView extends BottomSheetDialogFragment
private BottomSheetInventarioActionsViewBinding mBinding;
private Listener mListener;
private final InventarioRoomDTO inputItem;
private final InventarioEntity inputItem;
public BottomSheetInventarioActionsView(InventarioRoomDTO inputItem) {
public BottomSheetInventarioActionsView(InventarioEntity inputItem) {
this.inputItem = inputItem;
}

View File

@@ -2,17 +2,17 @@ package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_act
import androidx.lifecycle.MutableLiveData;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
public class BottomSheetInventarioActionsViewModel {
private final MutableLiveData<InventarioRoomDTO> mCurrentItem = new MutableLiveData<>();
private final MutableLiveData<InventarioEntity> mCurrentItem = new MutableLiveData<>();
public void init(InventarioRoomDTO item) {
public void init(InventarioEntity item) {
this.mCurrentItem.postValue(item);
}
public MutableLiveData<InventarioRoomDTO> getCurrentItem() {
public MutableLiveData<InventarioEntity> getCurrentItem() {
return mCurrentItem;
}
}

View File

@@ -25,7 +25,7 @@ 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.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -64,10 +64,10 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn
private int barcodeScannerIstanceID;
//Pass here all external parameters
public static void startActivity(Context context, InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> inventarioArts) {
public static void startActivity(Context context, InventarioEntity inventarioEntity, List<InventarioArtDTO> inventarioArts) {
Intent myIntent = new Intent(context, PickingInventarioActivity.class);
String keyExtraItem = DataCache.addItem(inventarioRoomDTO);
String keyExtraItem = DataCache.addItem(inventarioEntity);
myIntent.putExtra(KEY_INVENTARIO, keyExtraItem);
String keyExtraArtsItem = DataCache.addItem(inventarioArts);

View File

@@ -12,7 +12,7 @@ import java.util.ArrayList;
import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO;
import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository;
@@ -41,7 +41,7 @@ public class PickingInventarioViewModel extends ViewModel {
private final BarcodeRESTConsumer barcodeRESTConsumer;
private final InventarioRepository inventarioRepository;
private final InventarioRowRepository inventarioRowRepository;
public MutableLiveData<InventarioRoomDTO> currentInventario = new MutableLiveData<>();
public MutableLiveData<InventarioEntity> currentInventario = new MutableLiveData<>();
public LiveData<List<InventarioRowRoomDTO>> currentInventarioRows = new MutableLiveData<>();
private boolean canAddUnknownItems;
private boolean flagShouldAskToCreateOrUpdateRowInventario;
@@ -56,14 +56,14 @@ public class PickingInventarioViewModel extends ViewModel {
this.barcodeRESTConsumer = barcodeRESTConsumer;
}
public void init(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> inventarioArts, boolean canAddUnknownItems, boolean flagShouldAskToCreateOrUpdateRowInventario) {
public void init(InventarioEntity inventarioEntity, List<InventarioArtDTO> inventarioArts, boolean canAddUnknownItems, boolean flagShouldAskToCreateOrUpdateRowInventario) {
this.canAddUnknownItems = canAddUnknownItems;
this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario;
this.sendOnLoadingStarted();
this.currentInventario.postValue(inventarioRoomDTO);
this.currentInventarioRows = inventarioRowRepository.retrieve(inventarioRoomDTO.getId());
this.currentInventario.postValue(inventarioEntity);
this.currentInventarioRows = inventarioRowRepository.retrieve(inventarioEntity.getId());
this.availableInventarioArts = inventarioArts == null ? new ArrayList<>() : inventarioArts;
UtilityLiveData.observeOnce(this.currentInventarioRows, data -> {
@@ -73,7 +73,7 @@ public class PickingInventarioViewModel extends ViewModel {
this.sendOnLoadingEnded();
}
public LiveData<InventarioRoomDTO> getCurrentInventario() {
public LiveData<InventarioEntity> getCurrentInventario() {
return currentInventario;
}

View File

@@ -49,6 +49,7 @@ import it.integry.integrywmsnative.databinding.ActivityMainBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.extra_info.DialogExtraInfoView;
public class MainActivity extends BaseActivity
implements NavigationView.OnNavigationItemSelectedListener, IPoppableActivity {
@@ -185,6 +186,10 @@ public class MainActivity extends BaseActivity
} else {
if (id == R.id.nav_home) {
this.pop();
} else if (id == R.id.nav_extra_info) {
this.showExtraInfoDialog();
} else if (id == R.id.nav_settings) {
fragment = new MainSettingsFragment();
this.adaptViewToFragment(fragment);
@@ -203,6 +208,11 @@ public class MainActivity extends BaseActivity
return true;
}
private void showExtraInfoDialog() {
DialogExtraInfoView.newInstance()
.show(getSupportFragmentManager(), "extra-info");
}
private void initGestMenu() {
Menu menu = mBinding.navView.getMenu();
@@ -236,6 +246,8 @@ public class MainActivity extends BaseActivity
SubMenu subMenu = menu.addSubMenu(R.string.other);
subMenu.add(R.id.nav_extra_info, R.id.nav_extra_info, 0, R.string.informations)
.setIcon(R.drawable.ic_information_outline_24dp);
subMenu.add(R.id.nav_home, R.id.nav_settings, 0, R.string.general_settings)
.setIcon(R.drawable.ic_settings_24dp);
subMenu.add(R.id.nav_logout, R.id.nav_logout, 0, R.string.logout)

View File

@@ -17,7 +17,7 @@ import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
@@ -252,7 +252,7 @@ public class PickingLiberoViewModel {
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, articolo, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}, this::sendError);
} else {
@@ -283,7 +283,7 @@ public class PickingLiberoViewModel {
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtScanned, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
} else {
this.sendError(new NoLUFoundException());
@@ -945,11 +945,21 @@ public class PickingLiberoViewModel {
var closeUDSRequest = new CloseUDSRequestDTO()
.setMtbColt(mCurrentMtbColt);
if (this.mDefaultGestione == GestioneEnum.LAVORAZIONE) {
if (this.mDefaultGestione == GestioneEnum.LAVORAZIONE && SettingsManager.iDB().isProduzioneGeneraDocScar()) {
if(SettingsManager.iDB().getInternalCodAnags() == null || SettingsManager.iDB().getInternalCodAnags().isEmpty()) {
this.sendError(new Exception("Nessuna anagrafica aziendale configurata. Assicurarsi di aver abilitato il flag FLAG_USE_COD_ANAG_AZIENDALE."));
return;
}
closeUDSRequest
.setCreateDocument(SettingsManager.iDB().isProduzioneGeneraDocScar())
.setDocumentCodDtip(SettingsManager.iDB().getProduzioneCodDtipScar())
.setDocumentCodAnag(SettingsManager.iDB().getInternalCodAnags().stream().filter(InternalCodAnagsDTO::isFornitore).findFirst().get().getCodAnag());
.setDocumentCodAnag(SettingsManager.iDB().getInternalCodAnags().stream()
.filter(InternalCodAnagsDTO::isFornitore)
.findFirst()
.get()
.getCodAnag());
}
this.mColliScaricoRESTConsumer.closeUDS(closeUDSRequest, response -> {

View File

@@ -252,7 +252,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
};
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
@@ -260,7 +260,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
})
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -224,7 +224,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
// }
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
@@ -232,7 +232,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
})
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -14,7 +14,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
@@ -116,7 +116,7 @@ public class ProdVersamentoMaterialeViewModel {
if (codMdepIsValid) {
this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}, this::sendError);
} else {
@@ -135,7 +135,7 @@ public class ProdVersamentoMaterialeViewModel {
if (codMdepIsValid) {
this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}, this::sendError);
}

View File

@@ -95,7 +95,7 @@ public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implem
private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(true, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
@@ -105,7 +105,7 @@ public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implem
});
}
}, this::onError)
})
.show(requireActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_verifica_giacenze;
import dagger.Subcomponent;
@Subcomponent
public interface VerificaGiacenzeComponent {
@Subcomponent.Factory
interface Factory {
VerificaGiacenzeComponent create();
}
void inject(VerificaGiacenzeFragment VerificaGiacenzeFragment);
}

View File

@@ -0,0 +1,342 @@
package it.integry.integrywmsnative.gest.pv_verifica_giacenze;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.BR;
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_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeRowMapper;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentVerificaGiacenzeBinding;
import it.integry.integrywmsnative.databinding.ListaVerificaGiacenzePickedItemListModelBinding;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemDTO;
import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_deposito.DialogAskDepositoView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
public class VerificaGiacenzeFragment extends BaseFragment implements ITitledFragment, VerificaGiacenzeViewModel.Listener, BottomSheetItemEditView.Listener<VerificaGiacenzeRowEntity> {
@Inject
VerificaGiacenzeViewModel mViewModel;
@Inject
DialogInputQuantityV2View dialogInputQuantityV2View;
@Inject
VerificaGiacenzeRowMapper verificaGiacenzeRowMapper;
private FragmentVerificaGiacenzeBinding mBindings;
private int barcodeScannerIstanceID = -1;
public VerificaGiacenzeFragment() {
// Required empty public constructor
}
public static VerificaGiacenzeFragment newInstance() {
return new VerificaGiacenzeFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setRetainInstance(true);
mBindings = FragmentVerificaGiacenzeBinding.inflate(inflater, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.verificaGiacenzeComponent()
.create()
.inject(this);
mBindings.setView(this);
mBindings.setViewModel(mViewModel);
mViewModel.setListener(this);
this.init();
return mBindings.getRoot();
}
private void init() {
executorService.execute(() -> {
boolean recoveredSession = false;
String codMdep = null;
try {
if (mViewModel.isAnotherVerificaGiacenzeInProgress()) {
boolean recover = askToRecoverPrevious();
if (recover) {
// Recover data
var latestVerifica = mViewModel.recoverLast();
codMdep = latestVerifica.getCodMdep();
recoveredSession = true;
} else {
// Start new
mViewModel.clearPreviousSessions();
codMdep = this.askDeposito();
}
} else {
//Clear to be sure everything is clean
mViewModel.clearPreviousSessions();
codMdep = this.askDeposito();
}
} catch (Exception e) {
this.onError(e);
}
if (codMdep == null) {
popMe();
return;
}
try {
this.onLoadingStarted();
mViewModel.loadDeposito(codMdep);
if (!recoveredSession) mViewModel.createNew(codMdep);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
popMe();
}
this.initRecyclerView();
this.initBarcodeReader();
});
}
private boolean askToRecoverPrevious() throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1);
AtomicReference<Boolean> response = new AtomicReference<>();
DialogYesNoView.newInstance("Recupero verifica", "Vuoi recuperare la verifica precedente?", result -> {
response.set(result == DialogConsts.Results.YES);
countDownLatch.countDown();
})
.show(getChildFragmentManager(), "ask-recover");
countDownLatch.await();
return response.get();
}
private String askDeposito() throws InterruptedException {
CountDownLatch countDownLatch = new CountDownLatch(1);
AtomicReference<String> codMdepAtomic = new AtomicReference<>();
DialogAskDepositoView.newInstance(codMdep -> {
codMdepAtomic.set(codMdep);
countDownLatch.countDown();
})
.show(getChildFragmentManager(), "ask-deposito");
countDownLatch.await();
return codMdepAtomic.get();
}
private void initRecyclerView() {
var itemType = new Type<VerificaGiacenzeRowEntity, ListaVerificaGiacenzePickedItemListModelBinding>(R.layout.lista_verifica_giacenze_picked_item_list_model, BR.item);
itemType.areItemSame((item1, item2) -> item1.getId().equals(item2.getId()));
itemType.areContentsTheSame(VerificaGiacenzeRowEntity::equals);
itemType.onClick(x -> {
openItemAction(x.getBinding().getItem());
return null;
});
handler.post(() -> {
new LiveAdapter(mViewModel.getCurrentVerificaRows(), this)
.map(VerificaGiacenzeRowEntity.class, itemType)
.onNoData(isNoData -> {
this.mBindings.verificaGiacenzeList.setVisibility(isNoData ? View.GONE : View.VISIBLE);
this.mBindings.emptyView.setVisibility(isNoData ? View.VISIBLE : View.GONE);
return null;
})
.into(this.mBindings.verificaGiacenzeList);
});
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(requireContext(), ex, false)));
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
executorService.execute(() -> {
try {
this.mViewModel.processBarcodeDTO(data);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
}
});
};
private void openItemAction(VerificaGiacenzeRowEntity item) {
var anagrafica = mViewModel.searchAnagraficaByCodMart(item.getCodMart());
var inputData = new BottomSheetItemDTO<VerificaGiacenzeRowEntity>()
.setOriginalItem(item)
.setCodMart(item.getCodMart())
.setPartitaMag(item.getPartitaMag())
.setDescrizione(item.getDescrizione())
.setQta(item.getQta())
.setNumCnf(item.getNumConf())
.setUntMis(anagrafica.getUntMis());
new BottomSheetItemEditView(inputData)
.setListener(this)
.show(getParentFragmentManager(), "bottom-item-actions");
}
@Override
public void onItemEditRequest(VerificaGiacenzeRowEntity item) {
var anagrafica = mViewModel.searchAnagraficaByCodMart(item.getCodMart());
executorService.execute(() -> {
try {
mViewModel.loadArticolo(anagrafica);
} catch (Exception ex) {
onError(ex);
}
});
}
@Override
public void onItemDeleteRequest(VerificaGiacenzeRowEntity data) {
mViewModel.deleteRow(data);
}
public PickedQuantityDTO onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal inWarehouseNumCnf,
BigDecimal inWarehouseQtaTot,
BigDecimal incomingNumCnf,
BigDecimal incomingQtaTot,
String partitaMag,
LocalDate dataScad) {
CountDownLatch countDownLatch = new CountDownLatch(1);
AtomicReference<PickedQuantityDTO> result = new AtomicReference<>();
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalNumCnfInWarehouse(inWarehouseNumCnf)
.setTotalQtaInWarehouse(inWarehouseQtaTot)
.setTotalQtaOrd(incomingQtaTot)
.setTotalNumCnfOrd(incomingNumCnf)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanLUBeClosed(false);
if (!dialogInputQuantityV2View.isVisible())
handler.post(() -> {
dialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
result.set(pickedQuantityDTO);
countDownLatch.countDown();
})
.setOnAbort(() -> {
result.set(null);
countDownLatch.countDown();
})
.show(requireActivity().getSupportFragmentManager(), "tag");
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
this.onError(e);
}
return result.get();
}
public void saveAndClose() {
this.onLoadingStarted();
executorService.execute(() -> {
try {
mViewModel.save();
this.onLoadingEnded();
popMe();
} catch (Exception e) {
this.onError(e);
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
BarcodeManager.removeCallback(barcodeScannerIstanceID);
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(R.string.verifica_giacenze_menu);
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.integrywmsnative.gest.pv_verifica_giacenze;
import android.os.Handler;
import java.util.concurrent.ExecutorService;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRowRepository;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeMapper;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
@Module(subcomponents = VerificaGiacenzeComponent.class)
public class VerificaGiacenzeModule {
@Provides
VerificaGiacenzeViewModel providesVerificaGiacenzeViewModel(ExecutorService executorService, Handler handler, VerificaGiacenzeMapper verificaGiacenzeMapper, VerificaGiacenzeRepository verificaGiacenzeRepository, VerificaGiacenzeRowRepository verificaGiacenzeRowRepository, GiacenzaPvRESTConsumer giacenzaPvRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) {
return new VerificaGiacenzeViewModel(executorService, handler, verificaGiacenzeMapper, giacenzaPvRESTConsumer, verificaGiacenzeRepository, verificaGiacenzeRowRepository, articoloRESTConsumer);
}
}

View File

@@ -0,0 +1,377 @@
package it.integry.integrywmsnative.gest.pv_verifica_giacenze;
import android.os.Handler;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeEntity;
import it.integry.integrywmsnative.core.data_store.db.entity.VerificaGiacenzeRowEntity;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRepository;
import it.integry.integrywmsnative.core.data_store.db.respository_new.VerificaGiacenzeRowRepository;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.mapper.VerificaGiacenzeMapper;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaPvRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.rest.model.pv.GiacenzaPvDTO;
import it.integry.integrywmsnative.core.rest.model.pv.SaveNewVerificaRequestDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class VerificaGiacenzeViewModel {
private final ExecutorService executorService;
private final Handler handler;
private final VerificaGiacenzeMapper verificaGiacenzeMapper;
private final GiacenzaPvRESTConsumer giacenzaPvRESTConsumer;
private final VerificaGiacenzeRepository verificaGiacenzeRepository;
private final VerificaGiacenzeRowRepository verificaGiacenzeRowRepository;
private final ArticoloRESTConsumer articoloRESTConsumer;
private Listener listener;
private MutableLiveData<VerificaGiacenzeEntity> currentVerifica = new MutableLiveData<>();
private final MutableLiveData<List<VerificaGiacenzeRowEntity>> currentVerificaRows = new MutableLiveData<>(new ArrayList<>());
private List<GiacenzaPvDTO> currentLoadedGiacenza = null;
private List<MtbAart> currentLoadedAnagrafiche = null;
@Inject
public VerificaGiacenzeViewModel(ExecutorService executorService,
Handler handler,
VerificaGiacenzeMapper verificaGiacenzeMapper,
GiacenzaPvRESTConsumer giacenzaPvRESTConsumer,
VerificaGiacenzeRepository verificaGiacenzeRepository,
VerificaGiacenzeRowRepository verificaGiacenzeRowRepository,
ArticoloRESTConsumer articoloRESTConsumer) {
this.executorService = executorService;
this.handler = handler;
this.verificaGiacenzeMapper = verificaGiacenzeMapper;
this.giacenzaPvRESTConsumer = giacenzaPvRESTConsumer;
this.verificaGiacenzeRepository = verificaGiacenzeRepository;
this.verificaGiacenzeRowRepository = verificaGiacenzeRowRepository;
this.articoloRESTConsumer = articoloRESTConsumer;
}
public boolean isAnotherVerificaGiacenzeInProgress() {
return verificaGiacenzeRepository.isAnotherVerificaGiacenzeInProgress(5);
}
public void clearPreviousSessions() {
verificaGiacenzeRepository.clearPreviousSessions();
}
public void delete() {
verificaGiacenzeRepository.delete(currentVerifica.getValue());
currentVerifica.postValue(null);
currentVerificaRows.postValue(new ArrayList<>());
currentLoadedGiacenza = null;
currentLoadedAnagrafiche = null;
}
public LiveData<VerificaGiacenzeEntity> getCurrentVerifica() {
return currentVerifica;
}
public LiveData<List<VerificaGiacenzeRowEntity>> getCurrentVerificaRows() {
return currentVerificaRows;
}
public void loadDeposito(String codMdep) throws Exception {
currentLoadedGiacenza = this.giacenzaPvRESTConsumer.retrieveGiacenzeSynchronized(codMdep);
if (currentLoadedGiacenza == null) {
throw new Exception("Errore nel recupero delle giacenze");
}
var codMartsToRetrieve = currentLoadedGiacenza.parallelStream()
.map(GiacenzaPvDTO::getCodMart)
.collect(Collectors.toUnmodifiableList());
currentLoadedAnagrafiche = this.articoloRESTConsumer.getByCodMartsSynchronized(codMartsToRetrieve);
if (currentLoadedAnagrafiche == null) {
throw new Exception("Errore nel recupero delle anagrafiche");
}
currentLoadedAnagrafiche.forEach(x -> x.setFlagTracciabilita("N"));
}
public void randomizeElements(int elementsCount) {
for(int i = 0; i < elementsCount; i++) {
var randomIndex = (int) (Math.random() * currentLoadedAnagrafiche.size());
var randomAnagrafica = currentLoadedAnagrafiche.get(randomIndex);
var foundGiacenza = currentLoadedGiacenza.parallelStream()
.filter(x -> x.getCodMart().equalsIgnoreCase(randomAnagrafica.getCodMart()))
.findFirst()
.orElse(null);
var qtaGiacenza = foundGiacenza != null ? foundGiacenza.getQtaInv() : BigDecimal.ZERO;
var rowToInsert = new VerificaGiacenzeRowEntity();
rowToInsert.setParentId(currentVerifica.getValue().getId());
rowToInsert.setCodMart(randomAnagrafica.getCodMart());
rowToInsert.setDescrizione(randomAnagrafica.getDescrizione());
rowToInsert.setScanCodBarre(randomAnagrafica.getBarCode());
rowToInsert.setNumConf(BigDecimal.valueOf((int) (Math.random() * 100)));
rowToInsert.setQtaConf(randomAnagrafica.getQtaCnf());
rowToInsert.setQta(UtilityBigDecimal.multiply(rowToInsert.getNumConf(), randomAnagrafica.getQtaCnf()));
rowToInsert.setQtaInGiacenza(qtaGiacenza);
insertRow(rowToInsert);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
public void createNew(String codMdep) {
var verificaGiacenzeEntity = new VerificaGiacenzeEntity();
verificaGiacenzeEntity.setCodMdep(codMdep);
verificaGiacenzeEntity.setData(LocalDateTime.now());
verificaGiacenzeEntity.setVerificaGiacenzeRowList(new ArrayList<>());
verificaGiacenzeRepository.insert(verificaGiacenzeEntity);
currentVerifica.postValue(verificaGiacenzeEntity);
}
public VerificaGiacenzeEntity recoverLast() {
var entity = verificaGiacenzeRepository.retrieveLast();
currentVerifica.postValue(entity);
currentVerificaRows.postValue(entity.getVerificaGiacenzeRowList());
return entity;
}
public void save() throws Exception {
if(currentVerificaRows.getValue().isEmpty()) {
delete();
return;
}
currentVerifica.getValue().setVerificaGiacenzeRowList(currentVerificaRows.getValue());
SaveNewVerificaRequestDTO saveRequest = new SaveNewVerificaRequestDTO()
.setData(verificaGiacenzeMapper.mapRoomToRest(currentVerifica.getValue()));
giacenzaPvRESTConsumer.saveNewVerificaSynchronized(saveRequest);
delete();
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception {
if (UtilityBarcode.isEanPeso(barcodeScanDTO)) {
var ean13 = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
this.loadArticolo(ean13.getPrecode());
} else {
this.loadArticolo(barcodeScanDTO.getStringValue());
}
}
private void loadArticolo(String barcodeProd) throws NoArtsFoundException, CloneNotSupportedException {
var foundMtbAart = searchAnagraficaByBarcode(barcodeProd);
if (foundMtbAart == null)
throw new NoArtsFoundException();
loadArticolo(foundMtbAart);
}
public void loadArticolo(MtbAart mtbAart) throws NoArtsFoundException, CloneNotSupportedException {
var foundGiacenza = currentLoadedGiacenza.parallelStream()
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.findFirst()
.orElse(null);
var numCnfGiacenza = foundGiacenza != null ? UtilityBigDecimal.divide(foundGiacenza.getQtaInv(), mtbAart.getQtaCnf()) : BigDecimal.ZERO;
var qtaCnfGiacenza = mtbAart.getQtaCnf();
var qtaGiacenza = foundGiacenza != null ? foundGiacenza.getQtaInv() : BigDecimal.ZERO;
var incomingNumCnf = foundGiacenza != null && foundGiacenza.getIncomingStock() != null ? UtilityBigDecimal.divide(foundGiacenza.getIncomingStock(), mtbAart.getQtaCnf()) : null;
var incomingQta = foundGiacenza != null && foundGiacenza.getIncomingStock() != null ? foundGiacenza.getIncomingStock() : null;
var initialNumCnf = BigDecimal.ZERO;
var initialQtaTot = BigDecimal.ZERO;
boolean isNewRow = false;
var rowToSave = currentVerificaRows.getValue().parallelStream()
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.findFirst()
.orElse(null);
if (rowToSave == null) {
isNewRow = true;
rowToSave = new VerificaGiacenzeRowEntity();
rowToSave.setParentId(currentVerifica.getValue().getId());
rowToSave.setCodMart(mtbAart.getCodMart());
rowToSave.setPartitaMag(null);
rowToSave.setDescrizione(mtbAart.getDescrizione());
rowToSave.setScanCodBarre(mtbAart.getBarCode());
} else {
rowToSave = rowToSave.clone();
initialNumCnf = rowToSave.getNumConf();
initialQtaTot = rowToSave.getQta();
}
var pickedQuantity = this.sendOnItemDispatched(mtbAart,
initialNumCnf,
qtaCnfGiacenza,
initialQtaTot,
numCnfGiacenza,
qtaGiacenza,
incomingNumCnf,
incomingQta,
null,
null
);
if (pickedQuantity == null)
return;
rowToSave.setNumConf(pickedQuantity.getNumCnf());
rowToSave.setQtaConf(pickedQuantity.getQtaCnf());
rowToSave.setQta(pickedQuantity.getQtaTot());
rowToSave.setQtaInGiacenza(qtaGiacenza);
if (isNewRow) {
insertRow(rowToSave);
} else {
updateRow(rowToSave);
}
}
public MtbAart searchAnagraficaByCodMart(String codMart) {
return currentLoadedAnagrafiche.parallelStream()
.filter(mtbAart -> codMart.equalsIgnoreCase(mtbAart.getCodMart()))
.findFirst()
.orElse(null);
}
public MtbAart searchAnagraficaByBarcode(String barcode) {
return currentLoadedAnagrafiche.parallelStream()
.filter(mtbAart -> barcode.equals(mtbAart.getBarCode()))
.findFirst()
.orElse(null);
}
public void insertRow(VerificaGiacenzeRowEntity rowEntity) {
verificaGiacenzeRowRepository.insert(rowEntity, insertedData -> {
handler.post(() -> {
currentVerificaRows.getValue().add(insertedData);
notifyRowChanged();
});
}, this::sendError);
}
public void updateRow(VerificaGiacenzeRowEntity rowEntity) {
var indexInList = -1;
List<VerificaGiacenzeRowEntity> value = currentVerificaRows.getValue();
for (int i = 0; i < value.size(); i++) {
VerificaGiacenzeRowEntity entity = value.get(i);
if (Objects.equals(entity.getId(), rowEntity.getId())) {
indexInList = i;
break;
}
}
int finalIndexInList = indexInList;
verificaGiacenzeRowRepository.update(rowEntity, updatedData -> {
handler.post(() -> {
currentVerificaRows.getValue().set(finalIndexInList, updatedData);
notifyRowChanged();
});
}, this::sendError);
}
public void deleteRow(VerificaGiacenzeRowEntity rowEntity) {
verificaGiacenzeRowRepository.delete(rowEntity, () -> {
handler.post(() -> {
currentVerificaRows.getValue().remove(rowEntity);
notifyRowChanged();
});
}, this::sendError);
}
private void notifyRowChanged() {
currentVerificaRows.postValue(currentVerificaRows.getValue());
}
private PickedQuantityDTO sendOnItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal inWarehouseNumCnf,
BigDecimal inWarehouseQtaTot,
BigDecimal incomingNumCnf,
BigDecimal incomingQtaTot,
String partitaMag,
LocalDate dataScad) {
if (listener != null)
return this.listener.onItemDispatched(mtbAart,
initialNumCnf, initialQtaCnf, initialQtaTot,
inWarehouseNumCnf, inWarehouseQtaTot,
incomingNumCnf, incomingQtaTot,
partitaMag, dataScad);
return null;
}
public void setListener(Listener listener) {
this.listener = listener;
}
private void sendError(Exception ex) {
if (listener != null)
this.listener.onError(ex);
}
public interface Listener {
PickedQuantityDTO onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal inWarehouseNumCnf,
BigDecimal inWarehouseQtaTot,
BigDecimal incomingNumCnf,
BigDecimal incomingQtaTot,
String partitaMag,
LocalDate dataScad);
void onError(Exception ex);
}
}

View File

@@ -268,46 +268,49 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onFornitoriLoaded(ArrayList<FornitoreDTO> fornitoriList) {
AutoCompleteFornitoreAdapter autoCompleteFornitoreAdapter = new AutoCompleteFornitoreAdapter(getActivity(), fornitoriList);
mBinding.autoCompleteFornitori.setAdapter(autoCompleteFornitoreAdapter);
mBinding.autoCompleteFornitori.setDropDownWidth(getActivity().getResources().getDisplayMetrics().widthPixels);
handler.post(() -> {
mBinding.inputCodArtDescrForn.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
resetAllError();
AutoCompleteFornitoreAdapter autoCompleteFornitoreAdapter = new AutoCompleteFornitoreAdapter(getActivity(), fornitoriList);
mBinding.autoCompleteFornitori.setAdapter(autoCompleteFornitoreAdapter);
mBinding.autoCompleteFornitori.setDropDownWidth(getActivity().getResources().getDisplayMetrics().widthPixels);
if (UtilityString.isNullOrEmpty(mBinding.autoCompleteFornitori.getText().toString())) {
setError(mBinding.autoCompleteFornitoriLayout, getActivity().getResources().getText(R.string.error).toString());
mBinding.inputCodArtDescrForn.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
resetAllError();
if (UtilityString.isNullOrEmpty(mBinding.autoCompleteFornitori.getText().toString())) {
setError(mBinding.autoCompleteFornitoriLayout, getActivity().getResources().getText(R.string.error).toString());
return true;
}
if (UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrForn.getText().toString())) {
setError(mBinding.layoutCodArtDescrForn, getActivity().getResources().getText(R.string.error).toString());
return true;
}
mViewModel.searchArtFor(
mBinding.autoCompleteFornitori.getText().toString(),
mBinding.inputCodArtDescrForn.getText().toString());
return true;
}
return false;
});
if (UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrForn.getText().toString())) {
setError(mBinding.layoutCodArtDescrForn, getActivity().getResources().getText(R.string.error).toString());
mBinding.inputCodArtDescrInt.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
resetAllError();
if (UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrInt.getText().toString())) {
setError(mBinding.layoutCodArtDescrInt, getActivity().getResources().getText(R.string.error).toString());
return true;
}
mViewModel.searchArtInt(mBinding.inputCodArtDescrInt.getText().toString(), null, null);
return true;
}
mViewModel.searchArtFor(
mBinding.autoCompleteFornitori.getText().toString(),
mBinding.inputCodArtDescrForn.getText().toString());
return true;
}
return false;
});
mBinding.inputCodArtDescrInt.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
resetAllError();
if (UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrInt.getText().toString())) {
setError(mBinding.layoutCodArtDescrInt, getActivity().getResources().getText(R.string.error).toString());
return true;
}
mViewModel.searchArtInt(mBinding.inputCodArtDescrInt.getText().toString(), null, null);
return true;
}
return false;
return false;
});
});
}
@@ -339,21 +342,25 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onLUOpened(MtbColt mtbColt) {
initAdapter();
handler.post(() -> {
initAdapter();
this.currentMtbColtObs.set(mtbColt);
thereIsAnOpenedUL.set(true);
this.currentMtbColtObs.set(mtbColt);
thereIsAnOpenedUL.set(true);
});
}
@Override
public void onLUClosed() {
destroyAdapter();
handler.post(() -> {
destroyAdapter();
this.currentMtbColtObs.set(null);
thereIsAnOpenedUL.set(false);
this.currentMtbColtObs.set(null);
thereIsAnOpenedUL.set(false);
this.mViewModel.requestLU();
/*if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();*/
this.mViewModel.requestLU();
/*if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();*/
});
}
@Override
@@ -456,7 +463,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Override
public void onRowSaved() {
Snackbar.make(getView(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R. color. green_500))
.setBackgroundTint(getResources().getColor(R.color.green_500))
.show();
}
@@ -529,7 +536,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) {
case YES:
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null);
} else {
@@ -539,7 +546,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
onComplete.run(true, null);
}
}
}, this::onError)
})
.show(requireActivity().getSupportFragmentManager(), "tag");
break;

View File

@@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.SpannableString;
import android.view.Gravity;
@@ -96,6 +97,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
@Inject
Handler handler;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private final ObservableArrayList<SpedizioneListModel> mSpedizioneMutableData = new ObservableArrayList<>();
@@ -715,30 +719,36 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
};
public void addExtraItem() {
DialogScanArtView
.newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColr) -> {
if (status == DialogConsts.Results.YES) {
this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr);
}
}, pickMagazzinoAutomaticoPosizione -> {
this.onLoadingStarted();
this.mViewmodel.executeEmptyMagazzinoAutomaticoRequest(pickMagazzinoAutomaticoPosizione, this::onLoadingEnded);
})
.show(getSupportFragmentManager(), "tag");
handler.post(() -> {
DialogScanArtView
.newInstance(!mEnableFakeGiacenza, (status, mtbAart, ean128Model, mtbColr) -> {
if (status == DialogConsts.Results.YES) {
this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr);
}
}, pickMagazzinoAutomaticoPosizione -> {
this.onLoadingStarted();
this.mViewmodel.executeEmptyMagazzinoAutomaticoRequest(pickMagazzinoAutomaticoPosizione, this::onLoadingEnded);
})
.show(getSupportFragmentManager(), "tag");
});
}
public void startManualSearch() {
BarcodeManager.disable();
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre", codice -> {
handler.post(() -> {
BarcodeManager.disable();
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre", codice -> {
this.onScanSuccessful.run(new BarcodeScanDTO().setStringValue(codice).setType(BarcodeType.CODE128));
BarcodeManager.enable();
this.onScanSuccessful.run(new BarcodeScanDTO().setStringValue(codice).setType(BarcodeType.CODE128));
BarcodeManager.enable();
}, BarcodeManager::enable).show();
}, BarcodeManager::enable).show();
});
}
public void removeListFilter() {
this.mViewmodel.resetMatchedRows();
handler.post(() -> {
this.mViewmodel.resetMatchedRows();
});
}
@@ -754,26 +764,30 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void trackPackaging() {
this.fabPopupMenu.dismiss();
handler.post(() -> {
this.fabPopupMenu.dismiss();
DialogTracciamentoImballiView.newInstance(imballiData -> {
DialogTracciamentoImballiView.newInstance(imballiData -> {
if (imballiData != null && !imballiData.isEmpty()) {
DialogAskVettoreView.newInstance(mViewmodel.getDefaultVettore(), vettoreData -> {
mViewmodel.registraImballi(vettoreData, imballiData);
})
.show(getSupportFragmentManager(), DialogAskVettoreView.class.getName());
}
}).show(getSupportFragmentManager(), DialogTracciamentoImballiView.class.getName());
if (imballiData != null && !imballiData.isEmpty()) {
DialogAskVettoreView.newInstance(mViewmodel.getDefaultVettore(), vettoreData -> {
mViewmodel.registraImballi(vettoreData, imballiData);
})
.show(getSupportFragmentManager(), DialogAskVettoreView.class.getName());
}
}).show(getSupportFragmentManager(), DialogTracciamentoImballiView.class.getName());
});
}
public void showCreatedUL() {
this.fabPopupMenu.dismiss();
handler.post(() -> {
this.fabPopupMenu.dismiss();
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
});
}
@@ -785,50 +799,60 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onLUOpened(MtbColt mtbColt) {
this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione());
noLUPresent.set(false);
handler.post(() -> {
this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione());
noLUPresent.set(false);
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R. color. green_500))
.show();
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R.color.green_500))
.show();
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
});
}
@Override
public void onLUClosed() {
this.addExtraItemsEnabled.set(false);
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
handler.post(() -> {
this.addExtraItemsEnabled.set(false);
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
if (this.mShouldCloseActivity) super.onBackPressed();
if (this.mShouldCloseActivity) super.onBackPressed();
});
}
@Override
public void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete) {
DialogInputPesoLUView.newInstance(null, new BigDecimal(50), new BigDecimal(55), (newCodTcol, newNetWeight, newGrossWeight) -> {
onComplete.run(newCodTcol, netWeightKG, grossWeightKG);
})
.show(getSupportFragmentManager(), "tag");
handler.post(() -> {
DialogInputPesoLUView.newInstance(null, new BigDecimal(50), new BigDecimal(55), (newCodTcol, newNetWeight, newGrossWeight) -> {
onComplete.run(newCodTcol, netWeightKG, grossWeightKG);
})
.show(getSupportFragmentManager(), "tag");
});
}
@Override
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
handler.post(() -> {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
});
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogYesNoView.newInstance(getString(R.string.action_print),
String.format(getString(R.string.message_print_packing_list), "Packing List"),
result -> {
onComplete.run(result == DialogConsts.Results.YES);
})
.show(getSupportFragmentManager(), "dialog-print");
handler.post(() -> {
DialogYesNoView.newInstance(getString(R.string.action_print),
String.format(getString(R.string.message_print_packing_list), "Packing List"),
result -> {
onComplete.run(result == DialogConsts.Results.YES);
})
.show(getSupportFragmentManager(), "dialog-print");
});
}
@Override
@@ -845,41 +869,49 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onFilterApplied(String newValue) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
handler.post(() -> {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
});
}
@Override
public void onFilterRemoved() {
this.mBindings.filteredArtsInListExpandableLayout.collapse(true);
this.mBindings.descriptionFilterText.setText("");
handler.post(() -> {
this.mBindings.filteredArtsInListExpandableLayout.collapse(true);
this.mBindings.descriptionFilterText.setText("");
});
}
@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)
)
.show(getSupportFragmentManager(), "tag");
handler.post(() -> {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
)
.show(getSupportFragmentManager(), "tag");
});
}
@Override
public void onError(Exception ex, boolean useSnackbar) {
this.onLoadingEnded();
handler.post(() -> {
this.onLoadingEnded();
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
if(useSnackbar)
Snackbar.make(mBindings.getRoot(), Objects.requireNonNull(ex.getMessage()), Snackbar.LENGTH_LONG).show();
else
UtilityExceptions.defaultException(this, ex);
}
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
if (useSnackbar)
Snackbar.make(mBindings.getRoot(), Objects.requireNonNull(ex.getMessage()), Snackbar.LENGTH_LONG).show();
else
UtilityExceptions.defaultException(this, ex);
}
BarcodeManager.enable();
BarcodeManager.enable();
});
}
@Override
@@ -958,13 +990,13 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) {
case YES:
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null);
} else {
onComplete.run(true, mtbDepoPosizione);
}
}, this::onError).show(getSupportFragmentManager(), "tag");
}).show(getSupportFragmentManager(), "tag");
break;
case NO:
@@ -1057,7 +1089,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onRowSaved() {
Snackbar.make(mBindings.getRoot(), R.string.data_saved, Snackbar.LENGTH_SHORT)
.setBackgroundTint(getResources().getColor(R. color. green_500))
.setBackgroundTint(getResources().getColor(R.color.green_500))
.show();
}

View File

@@ -1,5 +1,9 @@
package it.integry.integrywmsnative.gest.spedizione;
import android.os.Handler;
import java.util.concurrent.ExecutorService;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
@@ -38,7 +42,9 @@ public class SpedizioneModule {
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer,
ImballiRESTConsumer imballiRESTConsumer,
MagazzinoRESTConsumer magazzinoRESTConsumer) {
MagazzinoRESTConsumer magazzinoRESTConsumer,
ExecutorService executorService,
Handler handler) {
return new SpedizioneViewModel(articoloRESTConsumer,
barcodeRESTConsumer,
colliDataRecoverService,
@@ -51,7 +57,9 @@ public class SpedizioneModule {
colliLavorazioneRESTConsumer,
magazzinoAutomaticoRESTConsumer,
imballiRESTConsumer,
magazzinoRESTConsumer);
magazzinoRESTConsumer,
executorService,
handler);
}
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.spedizione;
import android.os.Handler;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
@@ -14,6 +16,7 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Inject;
@@ -22,7 +25,7 @@ import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.EmptyLUException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepLUException;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@@ -140,9 +143,13 @@ public class SpedizioneViewModel {
private final MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer;
private final ImballiRESTConsumer mImballiRESTConsumer;
private final ExecutorService executorService;
private final Handler handler;
private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer;
private MagazzinoRESTConsumer magazzinoRESTConsumer;
@Inject
public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
@@ -156,7 +163,9 @@ public class SpedizioneViewModel {
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer,
ImballiRESTConsumer imballiRESTConsumer,
MagazzinoRESTConsumer magazzinoRESTConsumer) {
MagazzinoRESTConsumer magazzinoRESTConsumer,
ExecutorService executorService,
Handler handler) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService;
@@ -170,6 +179,8 @@ public class SpedizioneViewModel {
this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer;
this.mImballiRESTConsumer = imballiRESTConsumer;
this.magazzinoRESTConsumer = magazzinoRESTConsumer;
this.executorService = executorService;
this.handler = handler;
}
@@ -576,7 +587,7 @@ public class SpedizioneViewModel {
if (codMdepIsValid) {
this.createNewLU(null, null, () -> searchArtFromUL(mtbColt, onComplete));
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}
@@ -621,7 +632,7 @@ public class SpedizioneViewModel {
if (codMdepIsValid) {
this.searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
} else {
this.sendError(new EmptyLUException());
@@ -644,7 +655,7 @@ public class SpedizioneViewModel {
if (codMdepIsValid) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
} else {
this.sendError(new InvalidLUException());
@@ -674,7 +685,7 @@ public class SpedizioneViewModel {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
if(SettingsManager.iDB().isFlagSpedizioneEnableManualPick()) {
if (SettingsManager.iDB().isFlagSpedizioneEnableManualPick()) {
PickDataDTO pickDataDTO = PickDataDTO.fromEan128(ean128Model);
this.loadArticolo(barcodeProd, pickDataDTO, onComplete);
@@ -1480,10 +1491,10 @@ public class SpedizioneViewModel {
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
if (removeFilters)
resetMatchedRows();
else
//Refresh della lista forzato
this.mPickingList.postValue(this.mPickingList.getValue());
resetMatchedRows();
else
//Refresh della lista forzato
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendOnRowSaved();
this.sendOnLoadingEnded();
@@ -1518,7 +1529,7 @@ public class SpedizioneViewModel {
.findFirst()
.orElse(null);
if(!UtilityString.isNullOrEmpty(newTipoUL) && newMtbTcol == null) {
if (!UtilityString.isNullOrEmpty(newTipoUL) && newMtbTcol == null) {
this.sendError(new Exception("Impossibile riconoscere il tipo UL " + newTipoUL));
onComplete.run();
return;
@@ -2015,16 +2026,17 @@ public class SpedizioneViewModel {
}
public void resetMatchedRows() {
for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO.setTempPickData(null).setHidden(false);
}
handler.post(() -> {
for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO.setTempPickData(null).setHidden(false);
}
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
});
}
public void closeOrder() {
this.sendOnLoadingStarted();
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.sendOnCloseOrderPrintRequest(this::onCloseOrderPrintRequest);
} else {

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.versamento_merce;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
@@ -34,8 +35,8 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.ask_livello_posizione.DialogAskLivelloPosizioneView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -51,6 +52,9 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
@Inject
Handler handler;
private FragmentMainVersamentoMerceBinding mBindings = null;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@@ -151,25 +155,26 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
@Override
public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
this.getActivity().runOnUiThread(() -> {
DialogAskLivelloPosizione.make(getActivity(), posizione, false, onComplete, this::onError);
handler.post(() -> {
DialogAskLivelloPosizioneView.newInstance(posizione, false, onComplete, this::onError)
.show(requireActivity().getSupportFragmentManager(), "ask-livello-posizione");
});
}
@Override
public void onSpostamentoTraDepConfirmRequired(String sourceCodMdep, String destinationCodMdep, RunnableArgs<Boolean> onComplete) {
this.getActivity().runOnUiThread(() -> {
handler.post(() -> {
DialogSimpleMessageView.makeWarningDialog(Html.fromHtml("Stai spostando una UL dal deposito <b>" + sourceCodMdep + "</b> al deposito <b>" + destinationCodMdep + "</b>"),
null,
() -> onComplete.run(true),
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");
.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
@Override
public void onArtsChooseRequired(List<MtbColr> mtbColrList, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
this.requireActivity().runOnUiThread(() -> {
handler.post(() -> {
DialogChooseArtsFromMtbColrList
.newInstance(mtbColrList, data -> {
if(data == null || data.isEmpty()) {

View File

@@ -14,7 +14,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepLUException;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.exception.NoArtsInLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@@ -141,7 +141,7 @@ public class VersamentoMerceViewModel {
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}, this::sendError);
} else {
@@ -198,7 +198,7 @@ public class VersamentoMerceViewModel {
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else this.sendError(new InvalidCodMdepLUException());
}
}

View File

@@ -0,0 +1,79 @@
package it.integry.integrywmsnative.view.bottom_sheet__item_edit;
import java.math.BigDecimal;
public class BottomSheetItemDTO<T> {
private T originalItem;
private String codMart;
private String partitaMag;
private String descrizione;
private BigDecimal qta;
private BigDecimal numCnf;
private String untMis;
public T getOriginalItem() {
return originalItem;
}
public BottomSheetItemDTO<T> setOriginalItem(T originalItem) {
this.originalItem = originalItem;
return this;
}
public String getCodMart() {
return codMart;
}
public BottomSheetItemDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public BottomSheetItemDTO<T> setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public String getDescrizione() {
return descrizione;
}
public BottomSheetItemDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQta() {
return qta;
}
public BottomSheetItemDTO setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public BottomSheetItemDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public String getUntMis() {
return untMis;
}
public BottomSheetItemDTO setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
}

View File

@@ -1,58 +0,0 @@
package it.integry.integrywmsnative.view.bottom_sheet__item_edit;
import java.math.BigDecimal;
public class BottomSheetItemEditDTO {
private String codMart;
private String descrizioneArticolo;
private BigDecimal qta;
private BigDecimal numCnf;
private String untMis;
public String getCodMart() {
return codMart;
}
public BottomSheetItemEditDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizioneArticolo() {
return descrizioneArticolo;
}
public BottomSheetItemEditDTO setDescrizioneArticolo(String descrizioneArticolo) {
this.descrizioneArticolo = descrizioneArticolo;
return this;
}
public BigDecimal getQta() {
return qta;
}
public BottomSheetItemEditDTO setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public BottomSheetItemEditDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public String getUntMis() {
return untMis;
}
public BottomSheetItemEditDTO setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
}

View File

@@ -1,18 +1,22 @@
package it.integry.integrywmsnative.view.bottom_sheet__item_edit;
import android.content.Context;
import android.util.AttributeSet;
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 androidx.databinding.ObservableField;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.databinding.BottomSheetItemEditViewBinding;
import it.integry.integrywmsnative.view.bottom_sheet__base.BottomSheetFragmentBaseView;
public class BottomSheetItemEditView extends BottomSheetFragmentBaseView {
public class BottomSheetItemEditView extends BottomSheetDialogFragment {
@Inject
@@ -21,33 +25,41 @@ public class BottomSheetItemEditView extends BottomSheetFragmentBaseView {
public ObservableField<Boolean> enabledEditButton = new ObservableField<>(true);
public ObservableField<Boolean> enabledDeleteButton = new ObservableField<>(true);
private final BottomSheetItemEditViewBinding mBinding;
private BottomSheetItemEditViewBinding mBinding;
private Listener mListener;
public BottomSheetItemEditView(Context context, AttributeSet attrs) {
super(context, attrs);
mBinding = BottomSheetItemEditViewBinding.inflate(LayoutInflater.from(context), this, true);
private final BottomSheetItemDTO<?> itemData;
public BottomSheetItemEditView(BottomSheetItemDTO<?> itemData) {
this.itemData = itemData;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainApplication.appComponent
.bottomSheetItemEditComponent()
.create()
.inject(this);
mBinding.setViewModel(mViewModel);
mBinding.setView(this);
mViewModel.init(this.itemData);
}
public BottomSheetItemEditView setItem(BottomSheetItemEditDTO item) {
this.mBinding.invalidateAll();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = BottomSheetItemEditViewBinding.inflate(inflater, container, true);
this.mViewModel.init(item);
mBinding.setLifecycleOwner(this);
mBinding.setView(this);
mBinding.setViewModel(mViewModel);
this.mBinding.executePendingBindings();
this.parentView.requestLayout();
mBinding.executePendingBindings();
return this;
return mBinding.getRoot();
}
public BottomSheetItemEditView enableEditButton() {
@@ -73,36 +85,24 @@ public class BottomSheetItemEditView extends BottomSheetFragmentBaseView {
public void editItem() {
if(this.mListener != null) this.mListener.onItemEdit();
this.collapse();
if(this.mListener != null) this.mListener.onItemEditRequest(itemData.getOriginalItem());
this.dismiss();
}
public void deleteItem() {
if(this.mListener != null) this.mListener.onItemDelete();
this.collapse();
if(this.mListener != null) this.mListener.onItemDeleteRequest(itemData.getOriginalItem());
this.dismiss();
}
@Override
protected void onStateChangedCallback(State newState) {
if(newState == State.COLLAPSED) this.mViewModel.init(null);
}
@Override
protected void onSlideCallback(float slideOffset) {
}
public BottomSheetItemEditView setListener(Listener listener) {
public BottomSheetItemEditView setListener(Listener<?> listener) {
this.mListener = listener;
return this;
}
public interface Listener {
void onItemEdit();
public interface Listener<U> {
void onItemEditRequest(U data);
void onItemDelete();
void onItemDeleteRequest(U data);
}
}

View File

@@ -4,13 +4,13 @@ import androidx.lifecycle.MutableLiveData;
public class BottomSheetItemEditViewModel {
private final MutableLiveData<BottomSheetItemEditDTO> mCurrentItem = new MutableLiveData<>();
private final MutableLiveData<BottomSheetItemDTO<?>> mCurrentItem = new MutableLiveData<>();
public void init(BottomSheetItemEditDTO item) {
public void init(BottomSheetItemDTO<?> item) {
this.mCurrentItem.postValue(item);
}
public MutableLiveData<BottomSheetItemEditDTO> getCurrentItem() {
public MutableLiveData<BottomSheetItemDTO<?>> getCurrentItem() {
return mCurrentItem;
}
}

View File

@@ -12,13 +12,10 @@ import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol;
public class BottomSheetFragmentLUContentViewModel {
public ObservableField<MtbColt> mtbColt = new ObservableField<>();
public ObservableField<String> pesoKg = new ObservableField<>();
public ObservableField<String> pesoNettoKg = new ObservableField<>();
private Listener mListener;
private MtbColrListener mMtbColrListener;
public void closeCurrentLU() {
if (this.mListener != null) this.mListener.onBottomSheetLUClose();
@@ -42,11 +39,6 @@ public class BottomSheetFragmentLUContentViewModel {
return this;
}
public BottomSheetFragmentLUContentViewModel setMtbColrListener(MtbColrListener mtbColrListener) {
this.mMtbColrListener = mtbColrListener;
return this;
}
public void refreshPesi() {
MtbColt collo = this.mtbColt.get();
if (collo == null) return;
@@ -77,8 +69,4 @@ public class BottomSheetFragmentLUContentViewModel {
void onBottomSheetLUClose();
}
public interface MtbColrListener {
}
}

View File

@@ -35,6 +35,8 @@ public class BottomSheetMtbColrEditModalView extends BottomSheetDialogFragment {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -103,4 +105,78 @@ public class BottomSheetMtbColrEditModalView extends BottomSheetDialogFragment {
void onMtbColrDelete(MtbColr mtbColr);
}
// public static class Data<T> {
// private T originalItem;
// private String codMart;
// private String partitaMag;
// private String descrizione;
// private String untMis;
//
// private BigDecimal qta;
// private BigDecimal numCnf;
//
// public T getOriginalItem() {
// return originalItem;
// }
//
// public Data<T> setOriginalItem(T originalItem) {
// this.originalItem = originalItem;
// return this;
// }
//
// public String getCodMart() {
// return codMart;
// }
//
// public Data<T> setCodMart(String codMart) {
// this.codMart = codMart;
// return this;
// }
//
// public String getPartitaMag() {
// return partitaMag;
// }
//
// public Data<T> setPartitaMag(String partitaMag) {
// this.partitaMag = partitaMag;
// return this;
// }
//
// public String getDescrizione() {
// return descrizione;
// }
//
// public Data<T> setDescrizione(String descrizione) {
// this.descrizione = descrizione;
// return this;
// }
//
// public String getUntMis() {
// return untMis;
// }
//
// public Data<T> setUntMis(String untMis) {
// this.untMis = untMis;
// return this;
// }
//
// public BigDecimal getQta() {
// return qta;
// }
//
// public Data<T> setQta(BigDecimal qta) {
// this.qta = qta;
// return this;
// }
//
// public BigDecimal getNumCnf() {
// return numCnf;
// }
//
// public Data<T> setNumCnf(BigDecimal numCnf) {
// this.numCnf = numCnf;
// return this;
// }
// }
}

View File

@@ -1,162 +0,0 @@
package it.integry.integrywmsnative.view.dialogs;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import androidx.fragment.app.FragmentActivity;
import com.google.android.material.textfield.TextInputLayout;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
public class DialogAskLivelloPosizione {
private Context mContext;
private MtbDepoPosizione mtbDepoPosizione;
private Dialog mDialog;
private RunnableArgs<MtbDepoPosizione> onComplete;
private RunnableArgs<Exception> onFailed;
private TextInputLayout livelloTextInputLayout;
private boolean completedFLow = false;
public static void make(FragmentActivity activity, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
activity.runOnUiThread(() -> {
new DialogAskLivelloPosizione(activity, mtbDepoPosizione, canAbort, onComplete, onFailed).mDialog.show();
});
}
public DialogAskLivelloPosizione(Context context, MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
mContext = context;
this.mtbDepoPosizione = mtbDepoPosizione;
this.onComplete = onComplete;
this.onFailed = onFailed;
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View currentView = inflater.inflate(R.layout.dialog_ask_livello_of_position, null, false);
mDialog = new Dialog(mContext);
mDialog.setContentView(currentView);
mDialog.setCanceledOnTouchOutside(false);
mDialog.setCancelable(false);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentWidth(mContext, mDialog);
mDialog.setOnDismissListener(dialog -> {
if(!completedFLow) onComplete.run(null);
});
mDialog.setOnShowListener(dialog -> {
if(!canAbort) currentView.findViewById(R.id.button_abort).setVisibility(View.GONE);
currentView.findViewById(R.id.button_confirm).setOnClickListener(v -> {
String levelNumber = ((TextView)currentView.findViewById(R.id.level_number)).getText().toString();
onLevelConfirm(levelNumber);
});
currentView.findViewById(R.id.button_abort).setOnClickListener(v -> {
onLevelAbort();
});
livelloTextInputLayout = currentView.findViewById(R.id.level_number_layout);
UtilityFocus.focusTextBox(mContext, livelloTextInputLayout.getEditText());
livelloTextInputLayout.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(livelloTextInputLayout.getEditText().getText() != null) {
validateLevel(livelloTextInputLayout.getEditText().getText().toString());
} else resetLevelError();
}
@Override
public void afterTextChanged(Editable s) {
}
});
});
}
private void onLevelConfirm(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length()-1);
newPosizione += levelString;
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(newPosizione);
if(foundPosizione != null) {
resetLevelError();
completedFLow = true;
onComplete.run(foundPosizione);
mDialog.dismiss();
} else {
setLevelError(mContext.getResources().getString(R.string.not_valid));
}
}
private void validateLevel(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length()-1);
newPosizione += levelString;
if(UtilityPosizione.getFromCache(newPosizione) != null) {
resetLevelError();
} else setLevelError(mContext.getResources().getString(R.string.not_valid));
}
private void setLevelError(String message){
livelloTextInputLayout.setErrorEnabled(true);
livelloTextInputLayout.setError(message);
livelloTextInputLayout.setErrorIconDrawable(null);
}
private void resetLevelError() {
livelloTextInputLayout.setError(null);
}
private void onLevelAbort() {
completedFLow = true;
onComplete.run(null);
mDialog.dismiss();
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_deposito;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskDepositoComponent {
@Subcomponent.Factory
interface Factory {
DialogAskDepositoComponent create();
}
void inject(DialogAskDepositoView dialogAskDepositoView);
}

View File

@@ -0,0 +1,17 @@
package it.integry.integrywmsnative.view.dialogs.ask_deposito;
import android.os.Handler;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@Module(subcomponents = DialogAskDepositoComponent.class)
public class DialogAskDepositoModule {
@Provides
DialogAskDepositoViewModel providesDialogAskDepositoViewModel(Handler handler, BarcodeRESTConsumer barcodeRESTConsumer) {
return new DialogAskDepositoViewModel(handler, barcodeRESTConsumer);
}
}

View File

@@ -0,0 +1,126 @@
package it.integry.integrywmsnative.view.dialogs.ask_deposito;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.concurrent.ExecutorService;
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.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.DialogAskDepositoBinding;
public class DialogAskDepositoView extends BaseDialogFragment implements DialogAskDepositoViewModel.Listener {
@Inject
DialogAskDepositoViewModel mViewModel;
@Inject
ExecutorService executorService;
private DialogAskDepositoBinding mBindings;
private Context mContext;
private int mBarcodeScannerIstanceID;
private final RunnableArgs<String> onComplete;
//Pass here all external parameters
public static DialogAskDepositoView newInstance(RunnableArgs<String> onComplete) {
return new DialogAskDepositoView(onComplete);
}
private DialogAskDepositoView(RunnableArgs<String> onComplete) {
super();
this.onComplete = onComplete;
MainApplication.appComponent
.dialogAskDepositoComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogAskDepositoBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setNeutralButton(R.string.abort, null)
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onStart() {
super.onStart();
this.initBarcode();
mViewModel.setListener(this);
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
if (onComplete != null) onComplete.run(mViewModel.getCodMdep().getValue());
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
this.onLoadingStarted();
executorService.execute(() -> {
try {
this.mViewModel.processBarcodeDTO(data);
this.onLoadingEnded();
} catch (Exception e) {
this.onError(e);
}
});
};
@Override
public void onDepositoLoaded() {
dismiss();
}
}

View File

@@ -0,0 +1,78 @@
package it.integry.integrywmsnative.view.dialogs.ask_deposito;
import android.os.Handler;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepBarcodeException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class DialogAskDepositoViewModel {
Handler handler;
BarcodeRESTConsumer barcodeRESTConsumer;
private MutableLiveData<String> codMdep = new MutableLiveData<>();
private Listener listener;
public DialogAskDepositoViewModel(Handler handler, BarcodeRESTConsumer barcodeRESTConsumer) {
this.handler = handler;
this.barcodeRESTConsumer = barcodeRESTConsumer;
}
public LiveData<String> getCodMdep() {
return codMdep;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception {
if (UtilityBarcode.isEan128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO);
} else
throw new NoResultFromBarcodeException(barcodeScanDTO.getStringValue());
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) throws Exception {
var ean128Model = barcodeRESTConsumer.decodeEan128Synchronized(barcodeScanDTO);
if (UtilityString.isNullOrEmpty(ean128Model.Internal4)) {
throw new InvalidCodMdepBarcodeException(barcodeScanDTO.getStringValue());
}
// AvailableCodMdepsDTO availableCodMdepsDTO = SettingsManager.iDB().getAvailableCodMdep().stream()
// .filter(x -> x.getCodMdep().equalsIgnoreCase(ean128Model.Internal4))
// .findFirst()
// .orElse(null);
//
// if (availableCodMdepsDTO == null) {
// throw new InvalidCodMdepBarcodeException(barcodeScanDTO.getStringValue());
// }
handler.post(() -> {
this.codMdep.setValue(ean128Model.Internal4);
this.sendOnDepositoLoaded();
});
}
private void sendOnDepositoLoaded() {
if (listener != null) {
listener.onDepositoLoaded();
}
}
public void setListener(Listener listener) {
this.listener = listener;
}
public interface Listener {
void onDepositoLoaded();
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskLivelloPosizioneComponent {
@Subcomponent.Factory
interface Factory {
DialogAskLivelloPosizioneComponent create();
}
void inject(DialogAskLivelloPosizioneView dialogAskLivelloPosizioneView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogAskLivelloPosizioneComponent.class)
public class DialogAskLivelloPosizioneModule {
@Provides
DialogAskLivelloPosizioneViewModel providesDialogAskLivelloPosizioneViewModel() {
return new DialogAskLivelloPosizioneViewModel();
}
}

View File

@@ -0,0 +1,177 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
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.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.databinding.DialogAskLivelloPosizioneBinding;
public class DialogAskLivelloPosizioneView extends BaseDialogFragment {
@Inject
DialogAskLivelloPosizioneViewModel mViewModel;
private MtbDepoPosizione mtbDepoPosizione;
private boolean canAbort;
private RunnableArgs<MtbDepoPosizione> onComplete;
private RunnableArgs<Exception> onFailed;
private DialogAskLivelloPosizioneBinding mBindings;
private Context mContext;
private boolean completedFLow = false;
//Pass here all external parameters
public static DialogAskLivelloPosizioneView newInstance(MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
return new DialogAskLivelloPosizioneView(mtbDepoPosizione, canAbort, onComplete, onFailed);
}
private DialogAskLivelloPosizioneView(MtbDepoPosizione mtbDepoPosizione, boolean canAbort, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
super();
this.mtbDepoPosizione = mtbDepoPosizione;
this.onComplete = onComplete;
this.onFailed = onFailed;
this.canAbort = canAbort;
MainApplication.appComponent
.dialogAskLivelloPosizioneComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogAskLivelloPosizioneBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(false);
var alertDialogBuilder = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialogInterface, i) -> {
String levelNumber = mBindings.levelNumber.getText().toString();
onLevelConfirm(levelNumber);
});
if (canAbort)
alertDialogBuilder.setNeutralButton(R.string.abort, ((dialogInterface, i) -> {
onLevelAbort();
}));
var alertDialog = alertDialogBuilder.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override
public void onShow(DialogInterface dialogInterface) {
UtilityFocus.focusTextBox(mContext, mBindings.levelNumberLayout.getEditText());
mBindings.levelNumberLayout.getEditText().addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (mBindings.levelNumberLayout.getEditText().getText() != null) {
validateLevel(mBindings.levelNumberLayout.getEditText().getText().toString());
} else resetLevelError();
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
if(!completedFLow) onComplete.run(null);
}
private void onLevelConfirm(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length() - 1);
newPosizione += levelString;
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(newPosizione);
if (foundPosizione != null) {
resetLevelError();
completedFLow = true;
onComplete.run(foundPosizione);
dismiss();
} else {
setLevelError(mContext.getResources().getString(R.string.not_valid));
}
}
private void validateLevel(String levelString) {
String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length() - 1);
newPosizione += levelString;
if (UtilityPosizione.getFromCache(newPosizione) != null) {
resetLevelError();
} else setLevelError(mContext.getResources().getString(R.string.not_valid));
}
private void setLevelError(String message) {
mBindings.levelNumberLayout.setErrorEnabled(true);
mBindings.levelNumberLayout.setError(message);
mBindings.levelNumberLayout.setErrorIconDrawable(null);
}
private void resetLevelError() {
mBindings.levelNumberLayout.setError(null);
}
private void onLevelAbort() {
completedFLow = true;
onComplete.run(null);
dismiss();
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.ask_livello_posizione;
public class DialogAskLivelloPosizioneViewModel {
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskPositionOfLUComponent {
@Subcomponent.Factory
interface Factory {
DialogAskPositionOfLUComponent create();
}
void inject(DialogAskPositionOfLUView dialogAskPositionOfLUView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogAskPositionOfLUComponent.class)
public class DialogAskPositionOfLUModule {
@Provides
DialogAskPositionOfLUViewModel providesDialogAskPositionOfLUViewModel() {
return new DialogAskPositionOfLUViewModel();
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
@@ -20,7 +21,10 @@ import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
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;
@@ -33,41 +37,49 @@ import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.databinding.DialogAskPositionOfLuBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
public class DialogAskPositionOfLUView extends BaseDialogFragment implements DialogInterface.OnShowListener {
public class DialogAskPositionOfLUView extends BaseDialogFragment {
@Inject
DialogAskPositionOfLUViewModel mViewModel;
private DialogAskPositionOfLuBinding mBindings;
private DialogAskPositionOfLUAdapter viewpagerAdapter;
private int mBarcodeScannerIstanceID;
private boolean mCheckForLineaProd;
private Context mContext;
private int mBarcodeScannerInstanceID;
private MtbDepoPosizione currentMtbDepoPosizione;
private RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete;
private RunnableArgs<Exception> onFailed;
private TextInputLayout livelloTextInputLayout;
private boolean mCheckForLineaProd = false;
private RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete = null;
private boolean completedFlow = false;
private TextInputLayout livelloTextInputLayout;
public static DialogAskPositionOfLUView makeBase(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
return new DialogAskPositionOfLUView(checkForLineaProd, onComplete, onFailed);
//Pass here all external parameters
public static DialogAskPositionOfLUView newInstance(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete) {
return new DialogAskPositionOfLUView(checkForLineaProd, onComplete);
}
private DialogAskPositionOfLUView(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
private DialogAskPositionOfLUView(boolean checkForLineaProd, RunnableArgss<DialogConsts.Results, MtbDepoPosizione> onComplete) {
super();
this.mCheckForLineaProd = checkForLineaProd;
this.onComplete = onComplete;
this.onFailed = onFailed;
MainApplication.appComponent
.dialogAskPositionOfLUComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.initBarcode();
this.mContext = requireContext();
mBindings = DialogAskPositionOfLuBinding.inflate(LayoutInflater.from(requireActivity()), null, false);
mBindings = DialogAskPositionOfLuBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
List<Integer> views = new ArrayList<>();
@@ -78,11 +90,16 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
mBindings.viewpager.setAdapter(viewpagerAdapter);
mBindings.viewpager.beginFakeDrag();
var alertDialog = new MaterialAlertDialogBuilder(requireContext())
this.initBarcode();
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(false)
.setCancelable(isCancelable())
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@@ -97,6 +114,11 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
}
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override
public void onShow(DialogInterface dialog) {
((AppCompatTextView) viewpagerAdapter.getPage(0)
@@ -142,7 +164,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError));
@@ -151,7 +173,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
if (!completedFlow) onComplete.run(DialogConsts.Results.ABORT, null);
super.onDismiss(dialog);
}
@@ -237,4 +259,5 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
onComplete.run(DialogConsts.Results.ABORT, null);
dismiss();
}
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu;
public class DialogAskPositionOfLUViewModel {
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.extra_info;
import dagger.Subcomponent;
@Subcomponent
public interface DialogExtraInfoComponent {
@Subcomponent.Factory
interface Factory {
DialogExtraInfoComponent create();
}
void inject(DialogExtraInfoView dialogExtraInfoView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.extra_info;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogExtraInfoComponent.class)
public class DialogExtraInfoModule {
@Provides
DialogExtraInfoViewModel providesDialogExtraInfoViewModel() {
return new DialogExtraInfoViewModel();
}
}

View File

@@ -0,0 +1,96 @@
package it.integry.integrywmsnative.view.dialogs.extra_info;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeType;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.databinding.DialogExtraInfoBinding;
public class DialogExtraInfoView extends BaseDialogFragment {
@Inject
DialogExtraInfoViewModel mViewModel;
private DialogExtraInfoBinding mBindings;
private Context mContext;
private static final char FNC1 = 0x00f1;
//Pass here all external parameters
public static DialogExtraInfoView newInstance() {
return new DialogExtraInfoView();
}
private DialogExtraInfoView() {
super();
MainApplication.appComponent
.dialogExtraInfoComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogExtraInfoBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setNeutralButton(R.string.action_close, null)
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override
public void onStart() {
super.onStart();
try {
this.initDepositBarcodeBitmap();
} catch (Exception e) {
this.onError(e);
}
}
private void initDepositBarcodeBitmap() throws Exception {
String currentCodMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String barcode = "94" + currentCodMdep;
Bitmap barcodeBitmap = UtilityBarcode.generateBarcodeImage(barcode, BarcodeType.EAN128, 500, 170);
mBindings.barcodeCurrentDeposit.setImageBitmap(barcodeBitmap);
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.extra_info;
public class DialogExtraInfoViewModel {
}

View File

@@ -1,24 +1,25 @@
package it.integry.integrywmsnative.view.dialogs.scan_art;
import android.app.Dialog;
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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.jetbrains.annotations.NotNull;
import java.util.stream.Collectors;
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.BaseDialogFragment;
@@ -37,6 +38,8 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
@Inject
DialogScanArtViewModel mViewModel;
private Context mContext;
private final boolean mForceOnlyUL;
private DialogScanArtBinding mBindings;
@@ -53,44 +56,57 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
private DialogScanArtView(boolean forceOnlyUL, RunnableArgssss<DialogConsts.Results, MtbAart, Ean128Model, MtbColr> onItemChoosed, RunnableArgs<MtbDepoPosizione> onMagazzinoAutomaticoPickingRequest) {
super();
mForceOnlyUL = forceOnlyUL;
onPickingCompleted = onItemChoosed;
this.onMagazzinoAutomaticoPickingRequest = onMagazzinoAutomaticoPickingRequest;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.initBarcode();
mBindings = DialogScanArtBinding.inflate(inflater, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogScanArtComponent()
.create()
.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
this.initBarcode();
mBindings = DialogScanArtBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
this.mViewModel
.setForceOnlyUL(mForceOnlyUL)
.setListener(this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setCancelable(false);
mBindings.buttonNo.setOnClickListener(v -> {
onPickingCompleted.run(DialogConsts.Results.ABORT, null, null, null);
dismiss();
});
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setNegativeButton(R.string.abort, (dialogInterfact, i) -> {
onPickingCompleted.run(DialogConsts.Results.ABORT, null, null, null);
})
.create();
return mBindings.getRoot();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if (getDialog() != null) getDialog().dismiss();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
BarcodeManager.enable();
super.onDismiss(dialog);
}
@@ -99,7 +115,6 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
setBarcodeListener(true);
}
@@ -112,9 +127,9 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
var filteredMtbColrList = mtbColrList;
if (mtbAart != null && filteredMtbColrList != null) {
filteredMtbColrList = Stream.of(filteredMtbColrList)
filteredMtbColrList = filteredMtbColrList.stream()
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()))
.toList();
.collect(Collectors.toList());
}
if (filteredMtbColrList != null && filteredMtbColrList.size() > 1) {
@@ -140,11 +155,4 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
dismiss();
});
};
@Override
public void onError(Exception ex) {
super.onError(ex);
BarcodeManager.enable();
}
}

View File

@@ -35,7 +35,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
DialogScanOrCreateLUViewModel mViewModel;
private DialogScanOrCreateLuBinding mBindings;
private int mBarcodeScannerIstanceID;
private int mBarcodeScannerInstanceID;
private final RunnableArgss<MtbColt, Boolean> mOnComplete;
private MtbColt openedMtbColt;
@@ -109,15 +109,22 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
alertDialog.setOnDismissListener(this);
return alertDialog;
}
@Override
public void dismiss() {
if(getDialog() != null) getDialog().dismiss();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
BarcodeManager.enable();
BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
if (openedMtbColt == null) {
mOnComplete.run(null, false);
}
@@ -125,8 +132,10 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
@@ -165,6 +174,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
public void onLUOpened(MtbColt mtbColt, boolean created) {
this.openedMtbColt = mtbColt;
mOnComplete.run(mtbColt, created);
dismiss();
}

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