Compare commits

...

91 Commits

Author SHA1 Message Date
c34d7dc777 Finish v1.33.05(376) 2023-05-10 12:27:34 +02:00
705dd96a0e -> v1.33.05 (376) 2023-05-10 12:27:28 +02:00
10128a1bae Merge remote-tracking branch 'origin/develop' into develop 2023-05-10 12:25:28 +02:00
54d40ca06e [CARELLI - Ordini acquisto]
- aggiunta setup per abilitare l'ordine multi griglia
[SAPORI VERI - Ordini acquisto]
- Il dialog di caricamento non sparisce alla chiusura del dialog di inserimento qta
- il calcolo della qtaTotale viene arrotondato troppo (5*0.30=1.51)
2023-05-10 12:25:19 +02:00
6251c0f1ac Finish v1.33.04(375) 2023-05-10 11:49:46 +02:00
e4aa2d19d9 Finish v1.33.04(375) 2023-05-10 11:49:46 +02:00
3caed63b7f -> v1.33.04 (375) 2023-05-10 11:49:34 +02:00
75bc046cf5 Merge remote-tracking branch 'origin/develop' into develop 2023-05-10 11:47:52 +02:00
97d27b047d Fix sulla porta TCP nel caso non fosse esplicita 2023-05-10 11:47:36 +02:00
44e00f4f98 Finish v1.33.03(374) 2023-05-04 13:11:34 +02:00
81b053ee06 Finish v1.33.03(374) 2023-05-04 13:11:33 +02:00
f1b5a7ec1b -> v1.33.03 (374) 2023-05-04 13:11:28 +02:00
2d4211d329 [SMETAR - Spedizione]
risolto bug nullPointer in picking da magazzino automatico di articolo senza giacenza
2023-05-04 13:09:09 +02:00
c5ba78eeda Finish v1.33.02(373) 2023-05-03 16:35:01 +02:00
1faaef7062 Finish v1.33.02(373) 2023-05-03 16:35:01 +02:00
762c5fd5b5 -> v1.33.02 (373) 2023-05-03 16:34:55 +02:00
9af5970ec7 [Carelli - Inventario]
risolto bug in aggiunta articolo
2023-05-03 16:33:49 +02:00
3a5836ba4b Finish v1.33.01(372) 2023-04-28 12:56:41 +02:00
72b0e29ae6 Finish v1.33.01(372) 2023-04-28 12:56:40 +02:00
e0cc802b62 -> v1.33.01 (372) 2023-04-28 12:56:32 +02:00
2d4d9cef4e Merge remote-tracking branch 'origin/develop' into develop 2023-04-28 12:55:49 +02:00
4a8a21b970 Fix su ricerca articoli per posizione in Picking Libero 2023-04-28 12:55:20 +02:00
5103a53c11 [CARELLI - ORDINI ACQUISTO]
Risolto bug quantità raddoppiate in primo inserimento articolo
2023-04-26 17:16:39 +02:00
11c4cba70c Finish v1.33.00(371) 2023-04-26 12:48:01 +02:00
b1dba20973 Finish v1.33.00(371) 2023-04-26 12:48:01 +02:00
920c22083b -> v1.33.00 (371) 2023-04-26 12:47:54 +02:00
f9230ac341 Implementata gestione device id 2023-04-26 12:47:14 +02:00
6344c4b77d Finish v1.32.30(370) 2023-04-18 15:33:45 +02:00
d4c111dedc Finish v1.32.30(370) 2023-04-18 15:33:45 +02:00
65dda1d5c0 -> v1.32.30 (370) 2023-04-18 15:33:19 +02:00
4a7406fda1 Controllate qta > 0 in caso di missione per magazzino automatico 2023-04-18 15:32:02 +02:00
ef17e7a0c7 Merge remote-tracking branch 'origin/develop' into develop 2023-04-18 15:31:29 +02:00
c45850555e Compiled with JDK17 2023-04-18 15:31:04 +02:00
303690eed2 Finish v1.32.29(369) 2023-04-13 19:12:39 +02:00
ae62b26edf Finish v1.32.29(369) 2023-04-13 19:12:38 +02:00
2e39754c20 -> v1.32.29 (369) 2023-04-13 19:12:29 +02:00
0ae6bbcd96 CARELLI - aggiunto dettaglio griglie in ordini acquisto
CARELLI - impostata qta default in inserimento qta da ordinare ad 1 ct in ordini di acquisto
CARELLI - aggiunto flag stampa in chiusura ul spedizione
2023-04-13 19:11:43 +02:00
529455931d Finish v1.32.28(368) 2023-04-04 10:37:00 +02:00
46d0510ed8 Finish v1.32.28(368) 2023-04-04 10:36:59 +02:00
b02e12d76e -> v1.32.28 (368) 2023-04-04 10:36:46 +02:00
c6bbde2b67 Implementato in Rettifica Giacenze il controllo della setup che determina la creazione dei documenti in Spedizione 2023-04-04 10:35:57 +02:00
cfbb27a67b Abilitato controllo del num_cnf solo se l'articolo non è a qta_cnf fissa 2023-04-03 18:03:23 +02:00
35283fc11b Finish v1.32.27(367) 2023-04-03 14:15:58 +02:00
c3d62f88b4 Finish v1.32.27(367) 2023-04-03 14:15:58 +02:00
fc8469bf07 -> v1.32.27 (367) 2023-04-03 14:15:52 +02:00
400f1440db Completata gestione delle unità di misura in colli nel popup informativo 2023-04-03 14:09:31 +02:00
ad12e7e65b Finish v1.32.26(366) 2023-04-03 10:20:33 +02:00
a63e3817b5 Finish v1.32.26(366) 2023-04-03 10:20:33 +02:00
cbd772bf7e -> v1.32.26 (366) 2023-04-03 10:20:27 +02:00
e90bd46a42 Implementata gestione delle qta in arrivo durante la preparazione della merce in spedizione. Sistemata gestione popup informativo in spedizione. 2023-04-03 10:19:56 +02:00
96bd5d516c Aggiunta qta in arrivo nella retrieve della situazione ordini 2023-03-31 09:38:56 +02:00
d9306e13c2 Finish v1.32.25(365) 2023-03-30 09:47:37 +02:00
fc80baeaee Finish v1.32.25(365) 2023-03-30 09:47:36 +02:00
c0b49b68f7 -> v1.32.25 (365) 2023-03-30 09:47:26 +02:00
73242bc208 Merge remote-tracking branch 'origin/develop' into develop 2023-03-30 09:44:48 +02:00
d4b60a51bd [Carelli - Ordini acquisto]
corretto bug modifica articolo non in listino
2023-03-30 09:44:39 +02:00
1bc687c79a Finish v1.32.24(364) 2023-03-29 19:29:16 +02:00
3a6b0949d4 Finish v1.32.24(364) 2023-03-29 19:29:15 +02:00
bfc03a4ef9 -> v1.32.24 (364) 2023-03-29 19:29:07 +02:00
4dfa796790 Fix su delete degli inventari già scaricati ed eliminati lato server 2023-03-29 19:28:33 +02:00
f0db805c84 Implementato numero di cifre decimali in spedizione 2023-03-29 17:32:44 +02:00
0cc742e103 Finish v1.32.23(363) 2023-03-29 16:47:02 +02:00
d01319c417 Finish v1.32.23(363) 2023-03-29 16:47:02 +02:00
c0b9496041 -> v1.32.23 (363) 2023-03-29 16:46:56 +02:00
d4e7832f80 Fix su ordinamento per data_scan in dialog di situazione articolo 2023-03-29 16:46:25 +02:00
cb4f9e68f5 Finish v1.32.22(362) 2023-03-29 13:48:54 +02:00
ac4a5b1d34 Finish v1.32.22(362) 2023-03-29 13:48:54 +02:00
39ebc9d367 -> v1.32.22 (362) 2023-03-29 13:48:48 +02:00
7ef0299282 Implementato popup che chiede se modificare o aggiungere una riga nel caso di articolo già inventariato 2023-03-29 13:48:22 +02:00
6a998d6605 Refactoring UI pannello di informazioni lista documenti interni 2023-03-29 12:54:36 +02:00
9eb4b0a621 Finish v1.32.21(361) 2023-03-29 11:15:21 +02:00
f55080f7ca Finish v1.32.21(361) 2023-03-29 11:15:20 +02:00
7fb6109e18 -> v1.32.21 (361) 2023-03-29 11:15:13 +02:00
f419944699 Refactoring UI pannello di informazioni documento interno caricato 2023-03-29 11:14:41 +02:00
8de54a504b Corrette logiche di ricerca cod_mart / barcode nei documenti interni 2023-03-29 10:49:39 +02:00
6f2be2b459 Rimossi mutable live data sulle variabili interne della gestione Documenti Interni 2023-03-29 10:19:56 +02:00
fa413aba25 Merge remote-tracking branch 'origin/develop' into develop 2023-03-28 19:29:59 +02:00
ab6eeb91a6 [Documenti interni]
gestito annullamento selezione righe da modificare
2023-03-28 19:29:52 +02:00
16cbe01157 Merge remote-tracking branch 'origin/develop' into develop 2023-03-28 19:21:42 +02:00
16cb685bb3 Ordinate le righe documento in descending in editazione di un documento interno.
Implementato dialog custom per gli articoli disponibili all'inventario / documenti interni con la possibilità di specificare se l'articolo è stato già aggiunto.
2023-03-28 19:20:44 +02:00
28501c5509 [CARELLI - Ordini Acquisto]
Gestita selezione articolo se il barcode letto restituisce molteplici articoli
2023-03-28 19:17:08 +02:00
79c4bdad48 Aggiunta causale nella lista degli inventari 2023-03-28 16:24:03 +02:00
68007ebc8e Utilitzzati i live data nella lista dei documenti caricati da sqlite 2023-03-28 16:14:36 +02:00
c5eec26f8d Merge remote-tracking branch 'origin/develop' into develop 2023-03-28 13:23:08 +02:00
5c3f8d8717 [CARELLI - Ordini Acquisto]
risolto problema barcode disabilitato dopo selezione articolo
2023-03-28 13:23:02 +02:00
43aa0f0324 Merge remote-tracking branch 'origin/develop' into develop 2023-03-28 12:19:50 +02:00
4ab7bf27d7 Refactoring DialogSelectDocRows 2023-03-28 12:19:42 +02:00
28f4ac4414 [CARELLI - Ordini Acquisto]
Corretto controllo su ordini chiusi a fine validità lisitno
2023-03-28 12:11:14 +02:00
60414c949e Merge remote-tracking branch 'origin/develop' into develop 2023-03-27 11:45:33 +02:00
ff09147968 [CARELLI - Ordini Acquisto]
Aggiunto controllo modifica ed esportazione ordini con listino non valido
2023-03-27 11:44:20 +02:00
762ab2719d Finish v1.32.20(360) 2023-03-27 11:41:30 +02:00
122 changed files with 4843 additions and 1019 deletions

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 360
def appVersionName = '1.32.20'
def appVersionCode = 376
def appVersionName = '1.33.05'
signingConfigs {
release {
@@ -31,8 +31,6 @@ android {
}
}
compileSdkVersion 33
defaultConfig {
applicationId "it.integry.integrywmsnative"
minSdkVersion 21
@@ -65,8 +63,8 @@ android {
android.buildFeatures.buildConfig true
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
coreLibraryDesugaringEnabled true
}
@@ -90,8 +88,7 @@ android {
abortOnError false
}
namespace 'it.integry.integrywmsnative'
compileSdk 33
}
dependencies {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -67,8 +67,10 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamento
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderModule;
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;
@@ -174,7 +176,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
BottomSheetMtbColrEditModalModule.class,
DialogChooseArtsFromMtbAartListModule.class,
MainSettingsModule.class,
DialogInfoSituazioneArticoloModule.class
DialogInfoSituazioneArticoloModule.class,
DialogSelectArtToOrderModule.class
})
public interface MainApplicationComponent {
@@ -258,8 +261,6 @@ public interface MainApplicationComponent {
DialogSelectDocInfoComponent.Factory dialogSelectDocInfoNewViewComponent();
DialogSelectDocRowsComponent.Factory dialogSelectDocRowsComponent();
DocInterniEditFormComponent.Factory docInterniEditFormComponent();
InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent();
@@ -294,6 +295,10 @@ public interface MainApplicationComponent {
DialogInfoSituazioneArticoloComponent.Factory dialogInfoSituazioneArticoloComponent();
DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent();
DialogSelectArtToOrderComponent.Factory dialogSelectArtToOrderNewComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -89,8 +89,8 @@ public class MainApplicationModule {
@Provides
@Singleton
MainContext providesMainContextNew(MenuService menuService, AppDatabase appDatabase) {
return new MainContext(mApplication.getApplicationContext(), menuService, appDatabase);
MainContext providesMainContextNew(MenuService menuService, AppDatabase appDatabase, SystemRESTConsumer systemRESTConsumer) {
return new MainContext(mApplication.getApplicationContext(), menuService, appDatabase, systemRESTConsumer);
}
@Provides

View File

@@ -201,7 +201,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni)
.setTitleText(it.integry.integrywmsnative.R.string.doc_interni)
.setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni)
.setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni)
.setDrawerIcon(R.drawable.ic_documents_outline)
.setFragmentFactory(DocInterniFragment::newInstance))
// .addItem(new MenuItem()

View File

@@ -6,6 +6,8 @@ import android.text.SpannableString;
import android.text.Spanned;
import android.text.SpannedString;
import com.google.firebase.installations.FirebaseInstallations;
import java.net.ConnectException;
import javax.inject.Singleton;
@@ -13,6 +15,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.menu.MenuService;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityThread;
@@ -23,13 +26,15 @@ public class MainContext {
private final Context applicationContext;
private final MenuService menuService;
private final AppDatabase appDatabase;
private final SystemRESTConsumer systemRESTConsumer;
private Listener mListener;
public MainContext(Context applicationContext, MenuService menuService, AppDatabase appDatabase) {
public MainContext(Context applicationContext, MenuService menuService, AppDatabase appDatabase, SystemRESTConsumer systemRESTConsumer) {
this.applicationContext = applicationContext;
this.menuService = menuService;
this.appDatabase = appDatabase;
this.systemRESTConsumer = systemRESTConsumer;
}
public void init() {
@@ -40,10 +45,13 @@ public class MainContext {
exception.printStackTrace();
}
this.initDBData(() -> {
this.initMenu(() -> {
if (mListener != null) mListener.onContextInitialized();
this.initDeviceId(() -> {
this.initDBData(() -> {
this.initMenu(() -> {
if (mListener != null) mListener.onContextInitialized();
});
});
});
@@ -52,6 +60,25 @@ public class MainContext {
}
private void initDeviceId(Runnable onComplete) {
if (SettingsManager.i().getUserSession().getDeviceId() != null) {
onComplete.run();
return;
}
FirebaseInstallations.getInstance().getId().addOnCompleteListener(fid -> {
SettingsManager.i().getUserSession().setDeviceId(fid.getResult());
SettingsManager.update();
systemRESTConsumer.registerDevice(onComplete, ex -> {
if (mListener != null) mListener.onError(new SpannedString(ex.getMessage()));
});
});
}
public void logout(Runnable onLoggedOut) {
menuService.invalidateCache();
UtilityThread.executeParallel(() -> {

View File

@@ -40,7 +40,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
InventarioRoomDTO.class,
InventarioRowRoomDTO.class
},
version = 15)
version = 17)
@TypeConverters({
DateConverter.class,
BigDecimalConverter.class,
@@ -67,7 +67,9 @@ public abstract class AppDatabase extends RoomDatabase {
.addMigrations(MIGRATION_11_12)
.addMigrations(MIGRATION_12_13)
.addMigrations(MIGRATION_13_14)
.addMigrations(MIGRATION_14_15);
.addMigrations(MIGRATION_14_15)
.addMigrations(MIGRATION_15_16)
.addMigrations(MIGRATION_16_17);
sInstance = builder.build();
}
@@ -155,4 +157,25 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS index_articoli_ordine_id_ordine_cod_mart ON articoli_ordine (id_ordine, cod_mart);");
}
};
static final Migration MIGRATION_15_16 = new Migration(15, 16) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
}
};
static final Migration MIGRATION_16_17 = new Migration(16, 17) {
@Override
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE inventario_rows RENAME TO _inventario_rows_old;");
database.execSQL("DROP INDEX index_inventario_rows__id;");
database.execSQL("DROP INDEX index_inventario_rows_parent_id;");
database.execSQL("CREATE TABLE inventario_rows (_id INTEGER PRIMARY KEY AUTOINCREMENT, parent_id INTEGER, cod_mart TEXT, partita_mag TEXT, descrizione TEXT, qta REAL NOT NULL DEFAULT 0, num_cnf REAL NOT NULL DEFAULT 0, qta_cnf REAL NOT NULL DEFAULT 0, unt_mis TEXT NOT NULL DEFAULT '0', data_ora_inv INTEGER, scan_cod_barre TEXT, zona TEXT, remote_sync_date INTEGER, FOREIGN KEY(parent_id) REFERENCES inventari(_id) ON UPDATE NO ACTION ON DELETE CASCADE);");
database.execSQL("INSERT INTO inventario_rows SELECT * FROM _inventario_rows_old;");
database.execSQL("CREATE INDEX index_inventario_rows__id ON inventario_rows (_id);");
database.execSQL("CREATE INDEX index_inventario_rows_parent_id ON inventario_rows (parent_id)");
database.execSQL("DROP TABLE _inventario_rows_old;");
}
};
}

View File

@@ -24,6 +24,6 @@ public interface MtbColrDao {
@Delete
void delete(SqlMtbColr mtbColr);
@Query("SELECT * from mtb_colr where id_collo = :idDocument")
@Query("SELECT * FROM mtb_colr WHERE id_collo = :idDocument ORDER BY id DESC")
List<SqlMtbColr> getDocumentRows(long idDocument);
}

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.data_store.db.dao;
import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
@@ -33,7 +34,7 @@ public interface MtbColtDao {
" AND ( mtb_colt.data_doc = :dataDoc OR (mtb_colt.data_doc is null and :dataDoc is null)) " +
" AND ( mtb_colt.num_doc = :numDoc OR (mtb_colt.num_doc is null and :numDoc is null)) " +
" and cod_dtip is null group by mtb_colt.id")
List<DocInternoWrapper> getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc);
LiveData<List<DocInternoWrapper>> getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc);
@Query("SELECT ifnull(MAX(num_collo),0) +1 as num_collo from mtb_colt")
Integer getNextNumCollo();

View File

@@ -94,6 +94,9 @@ public class ArticoloOrdine {
@Ignore
private int bgTint;
@Ignore
private boolean invalid = false;
public Integer getArticoloOrdineId() {
return articoloOrdineId;
@@ -236,15 +239,15 @@ public class ArticoloOrdine {
}
public BigDecimal getQtaCnfPrevistaVendita() {
return qtaPrevistaVendita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaPrevistaVendita.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
return qtaPrevistaVendita == null || qtaPrevistaVendita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaPrevistaVendita.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
}
public BigDecimal getQtaCnfProposta() {
return qtaProposta.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaProposta.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
return qtaProposta == null || qtaProposta.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaProposta.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
}
public BigDecimal getQtaCnfGiacenza() {
return giacenza.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : giacenza.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
return giacenza == null || giacenza.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : giacenza.divide(BigDecimal.valueOf(qtaCnf), 0, RoundingMode.CEILING);
}
public boolean isNewNoPromo() {
@@ -300,4 +303,13 @@ public class ArticoloOrdine {
this.ctMaxOrd = ctMaxOrd;
return this;
}
public boolean isInvalid() {
return invalid;
}
public ArticoloOrdine setInvalid(boolean invalid) {
this.invalid = invalid;
return this;
}
}

View File

@@ -17,7 +17,8 @@ import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInte
@ForeignKey(
entity = InventarioRoomDTO.class,
parentColumns = {BaseSyncDTO.Columns.ID},
childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID}
childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID},
onDelete = ForeignKey.CASCADE
)
}
)

View File

@@ -51,6 +51,7 @@ public class Ordine {
private boolean orderNewProducts = false;
@ColumnInfo(name = "id_griglia")
@Nullable
private Integer idGriglia;
@ColumnInfo(name = "cod_alis")
@@ -80,11 +81,11 @@ public class Ordine {
this.annotazioni = annotazioni;
}
public int getIdGriglia() {
public Integer getIdGriglia() {
return idGriglia;
}
public void setIdGriglia(int idGriglia) {
public void setIdGriglia(Integer idGriglia) {
this.idGriglia = idGriglia;
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.core.data_store.db.repository;
import androidx.lifecycle.LiveData;
import java.util.Date;
import java.util.List;
@@ -17,7 +19,7 @@ public interface MtbColtRepository {
void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs<Exception> onError);
void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs<List<DocInternoWrapper>> onSuccess, RunnableArgs<Exception> onError);
LiveData<List<DocInternoWrapper>> getDocuments(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc);
void getNextNumCollo(RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onError);

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_store.db.repository.datasource;
import android.os.Handler;
import androidx.lifecycle.LiveData;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
@@ -50,10 +52,8 @@ public class SqlMtbColtDataSource extends BaseDataSource implements MtbColtRepos
}
@Override
public void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs<List<DocInternoWrapper>> onSuccess, RunnableArgs<Exception> onError) {
execute(() -> mMtbColtDao.getLocalDocumentsByCodDtip(codDtip, codAnag, codVdes, dataDoc, numDoc),
onSuccess,
onError);
public LiveData<List<DocInternoWrapper>> getDocuments(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc) {
return mMtbColtDao.getLocalDocumentsByCodDtip(codDtip, codAnag, codVdes, dataDoc, numDoc);
}
@Override

View File

@@ -58,7 +58,7 @@ public abstract class _BaseRepository<
.collect(Collectors.toList());
var dataToDelete = finalLocalData.stream()
.filter(x -> x.isSyncronized() && finalRemoteData.stream().noneMatch(y -> keyComparator.run(y, x)))
.filter(x -> finalRemoteData.stream().noneMatch(y -> keyComparator.run(y, x)))
.collect(Collectors.toList());
var dataToInsert = finalRemoteData.stream()

View File

@@ -1,10 +1,9 @@
package it.integry.integrywmsnative.core.di;
import java.math.BigDecimal;
import java.math.RoundingMode;
import androidx.databinding.BaseObservable;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
@@ -20,7 +19,7 @@ public class BindableFloat extends BaseObservable {
if(numberOfDigits > CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS) numberOfDigits = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS;
return new BigDecimal(get());
return BigDecimal.valueOf(get());
}
public Float get(boolean defaultIfNull) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -68,28 +68,6 @@ public class MtbColt extends EntityBase {
private Boolean disablePrint;
private String ragSocCliente;
public void generaFiltroOrdine() throws Exception {
if (this.gestione == null) {
throw new Exception("Impossibile creare il filtro dell'ordine se la gestione non è valorizzata");
}
if (this.dataOrd == null) {
throw new Exception("Impossibile creare il filtro dell'ordine se la data dell'ordine non è valorizzata");
}
if (this.numOrd == null) {
throw new Exception("Impossibile creare il filtro dell'ordine se il numero dell'ordine non è valorizzato");
}
Date dateOrd = UtilityDate.recognizeDate(this.dataOrd);
String dateYMD = UtilityDate.formatDate(dateOrd, UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH);
this.filtroOrdini = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ROOT><FILTER><DTB_ORDT><GESTIONE type=\"V\">" + this.gestione + "</GESTIONE><DATA_ORD type=\"D\">" + dateYMD + "</DATA_ORD><NUM_ORD type=\"N\">" + this.numOrd + "</NUM_ORD></DTB_ORDT></FILTER></ROOT>";
}
private ObservableArrayList<MtbColr> mtbColr = new ObservableArrayList<>();
public ObservableArrayList<MtbColr> getMtbColr() {

View File

@@ -39,7 +39,6 @@ public class MvwSitArtUdcDetInventario {
private String codJfas;
private MtbAart mtbAart;
public String getGestione() {
return gestione;
}
@@ -283,7 +282,6 @@ public class MvwSitArtUdcDetInventario {
return this;
}
public MtbColr toMtbColr() {
return new MtbColr()
.setCodJcom(getCodJcom())

View File

@@ -22,6 +22,7 @@ public class HttpInterceptor implements Interceptor {
final String PROFILE_DB = SettingsManager.i().getUserSession() == null ? null : SettingsManager.i().getUserSession().getProfileDB();
final String USERNAME = SettingsManager.i().getUser().getUsername();
final String PASSWORD = SettingsManager.i().getUser().getPassword();
final String DEVICE_ID = SettingsManager.i().getUserSession().getDeviceId();
final Request request = chain.request();
final HttpUrl url = request.url().newBuilder()
@@ -36,6 +37,7 @@ public class HttpInterceptor implements Interceptor {
.addHeader("Accept", "*/*")
.addHeader("username", USERNAME != null ? USERNAME : "")
.addHeader("password", PASSWORD != null ? PASSWORD : "")
.addHeader("device_id", DEVICE_ID != null ? DEVICE_ID : "")
.url(url).build();
return chain.proceed(newRequest);

View File

@@ -63,7 +63,7 @@ public class RESTBuilder {
OkHttpClient client = clientBuilder.build();
String endpoint = protocol + "://" + host + ":" + port + "/" + (addEmsApi ? "ems-api/" : "");
String endpoint = protocol + "://" + host + (port > 0 ? ":" + port : "") + "/" + (addEmsApi ? "ems-api/" : "");
Gson gson = new GsonBuilder()

View File

@@ -6,6 +6,7 @@ import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -14,6 +15,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@@ -58,6 +60,8 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
public static void getByCodMartsStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
String joinedCods = Stream.of(codMartToFind)
.withoutNulls()
.distinct()
.collect(Collectors.joining(","));
@@ -131,8 +135,55 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
Type typeOfObjectsList = new TypeToken<ArrayList<MtbGrup>>() {
}.getType();
this.systemRESTConsumer.processSql("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList, onComplete, onFailed);
this.systemRESTConsumer.processSql("SELECT * FROM mtb_grup " + whereCond, typeOfObjectsList, onComplete, onFailed);
}
public void getUntMisArts(List<String> inputUntMis, RunnableArgs<List<MtbUntMis>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> whereCondList = Stream.of(inputUntMis)
.distinct()
.withoutNulls()
.map(x -> {
HashMap<String, Object> data = new HashMap<>();
data.put("unt_mis", x);
return data;
})
.toList();
var whereCond = whereCondList.isEmpty() ? "" : " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondList);
Type typeOfObjectsList = new TypeToken<ArrayList<MtbUntMis>>() {
}.getType();
this.systemRESTConsumer.processSql("SELECT * FROM mtb_unt_mis " + whereCond, typeOfObjectsList, onComplete, onFailed);
}
public void fillMtbAartsWithMtbUntMis(List<MtbAart> inputMtbAart, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
var inputUntMis = new ArrayList<String>();
if (inputMtbAart != null && !inputMtbAart.isEmpty()) {
inputUntMis.addAll(Stream.of(inputMtbAart)
.map(MtbAart::getUntMis)
.withoutNulls()
.distinct()
.toList());
}
if (inputUntMis.isEmpty()) {
onComplete.run(inputMtbAart);
return;
}
getUntMisArts(inputUntMis, mtbUntMiss -> {
for (var item : inputMtbAart) {
var mtbUntMis = Stream.of(mtbUntMiss).filter(x -> x.getUntMis().equalsIgnoreCase(item.getUntMis()))
.findFirstOrElse(null);
if (mtbUntMis != null)
item.setMtbUntMis(Collections.singletonList(mtbUntMis));
}
onComplete.run(inputMtbAart);
}, onFailed);
}
}

View File

@@ -53,7 +53,7 @@ public class DocumentRESTConsumer extends _BaseRESTConsumer {
public void loadDocumentoAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs<RetrieveDocumentoArtsResponseDTO> onComplete, RunnableArgs<Exception> onFailed) {
public void loadDocumentAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs<RetrieveDocumentoArtsResponseDTO> onComplete, RunnableArgs<Exception> onFailed) {
var inventarioRESTConsumerService = RESTBuilder.getService(DocumentiRESTConsumerService.class);
inventarioRESTConsumerService.retrieveArts(codDtip, codMgrp, codAnagForn)
.enqueue(new Callback<>() {

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.rest.consumers;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Singleton;
@@ -13,6 +14,7 @@ import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationIncomingItemDto;
import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationResponseDto;
import it.integry.integrywmsnative.core.utility.UtilityString;
import retrofit2.Call;
@@ -120,7 +122,10 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<InstantItemSituationResponseDto>> call, Response<ServiceRESTResponse<InstantItemSituationResponseDto>> response) {
analyzeAnswer(response, "getInstantItemSituation", onComplete, onFailed);
analyzeAnswer(response, "getInstantItemSituation", data -> {
fillInstantItemSituationWithMtbAarts(data, onComplete, onFailed);
}, onFailed);
}
@Override
@@ -130,5 +135,54 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
});
}
private void fillInstantItemSituationWithMtbAarts(InstantItemSituationResponseDto data, RunnableArgs<InstantItemSituationResponseDto> onComplete, RunnableArgs<Exception> onFailed) {
var inputCodMarts = new ArrayList<String>();
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
inputCodMarts.addAll(Stream.of(data.getIncomingItems())
.map(InstantItemSituationIncomingItemDto::getCodMart)
.toList());
}
if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) {
inputCodMarts.addAll(Stream.of(data.getAvailableItems())
.map(MvwSitArtUdcDetInventario::getCodMart)
.toList());
}
if (inputCodMarts.isEmpty()) {
onComplete.run(data);
return;
}
mArticoloRESTConsumer.getByCodMarts(inputCodMarts, mtbAarts -> {
mArticoloRESTConsumer.fillMtbAartsWithMtbUntMis(mtbAarts, newMtbAarts -> {
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
for (var item : data.getIncomingItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) {
for (var item : data.getAvailableItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
onComplete.run(data);
}, onFailed);
}, onFailed);
}
}

View File

@@ -61,7 +61,10 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
.filter(x -> !UtilityString.isNullOrEmpty(x.getPartitaMag()))
.forEach(x -> {
if (!Stream.of(batchLotsToSearch).anyMatch(batchLotToSearch -> batchLotToSearch.getCodMart().equalsIgnoreCase(x.getCodMart()) && batchLotToSearch.getPartitaMag().equalsIgnoreCase(x.getPartitaMag()))) {
if (!Stream.of(batchLotsToSearch)
.anyMatch(batchLotToSearch ->
batchLotToSearch.getCodMart().equalsIgnoreCase(x.getCodMart()) &&
batchLotToSearch.getPartitaMag().equalsIgnoreCase(x.getPartitaMag()))) {
MtbPartitaMag mtbPartitaMag = new MtbPartitaMag()
.setCodMart(x.getCodMart())
.setPartitaMag(x.getPartitaMag());

View File

@@ -29,6 +29,7 @@ import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
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.RegisterDeviceRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -39,6 +40,27 @@ import retrofit2.Response;
@Singleton
public class SystemRESTConsumer extends _BaseRESTConsumer {
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 Callback<>() {
@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, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public <T> void processSql(String nativeSql, final Type clazz, final RunnableArgs<T> onComplete, final RunnableArgs<Exception> onFailed) {
NativeSqlRequestDTO nativeSqlDTO = new NativeSqlRequestDTO();
nativeSqlDTO.nativeSql = nativeSql;

View File

@@ -6,6 +6,7 @@ import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
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.RegisterDeviceRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
@@ -14,6 +15,9 @@ import retrofit2.http.Query;
public interface SystemRESTConsumerService {
@POST("device/register")
Call<ServiceRESTResponse<Void>> registerDevice(@Body RegisterDeviceRequestDTO registerDeviceRequestDTO);
@POST("processSql")
Call<ServiceRESTResponse<Object>> processSql(@Body NativeSqlRequestDTO nativeSqlDTO);

View File

@@ -28,6 +28,7 @@ public class SitArtOrdDTO {
private String descrizioneMsfa;
private String untord;
private BigDecimal qtaOmg;
private BigDecimal qtaArrivo;
private final HashMap<String, Object> extraInfo = new HashMap<>();
@@ -232,4 +233,13 @@ public class SitArtOrdDTO {
this.qtaOmg = qtaOmg;
return this;
}
public BigDecimal getQtaArrivo() {
return qtaArrivo;
}
public SitArtOrdDTO setQtaArrivo(BigDecimal qtaArrivo) {
this.qtaArrivo = qtaArrivo;
return this;
}
}

View File

@@ -3,6 +3,8 @@ package it.integry.integrywmsnative.core.rest.model.giacenza;
import java.math.BigDecimal;
import java.time.LocalDate;
import it.integry.integrywmsnative.core.model.MtbAart;
public class InstantItemSituationIncomingItemDto {
private BigDecimal qtaOrd;
@@ -21,6 +23,7 @@ public class InstantItemSituationIncomingItemDto {
private String codJcom;
private String codMdep;
private String untMis;
private MtbAart mtbAart;
public BigDecimal getQtaOrd() {
return qtaOrd;
@@ -85,4 +88,13 @@ public class InstantItemSituationIncomingItemDto {
public String getUntMis() {
return untMis;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public InstantItemSituationIncomingItemDto setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
}

View File

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

@@ -38,10 +38,13 @@ public class DBSettingsModel {
private boolean flagSpedizioneUseQtaOrd;
private boolean flagOrdinaNuoviArticoliInGriglia;
private boolean flagOrdinaArticoliOnScan;
private boolean flagConsentiFuoriPianoLogistico;
private boolean flagConsentiOrdineSenzaGriglia;
private String docInterniCheckFornitore;
private String produzioneDefaultCodAnag;
private boolean flagPrintPackingListOnOrderClose;
private boolean flagPrintEtichetteOnOrderClose;
private boolean flagPrintEtichetteOnLUClose;
private int onNumCnfInputChanged = 1;
private int onQtaTotInputChanged = 1;
private boolean flagAccettazioneUseQtaOrd = false;
@@ -55,6 +58,9 @@ public class DBSettingsModel {
private boolean showCodFornSpedizione = true;
private boolean flagCanCreateInventario = true;
private boolean flagCanAddUnknownItemsInventario = true;
private boolean flagShouldAskToCreateOrUpdateRowInventario = false;
private String commessaMagazzino;
private boolean flagGeneraDocumentoSpedizione = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza;
@@ -281,6 +287,15 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagPrintEtichetteOnLUClose() {
return flagPrintEtichetteOnLUClose;
}
public DBSettingsModel setFlagPrintEtichetteOnLUClose(boolean flagPrintEtichetteOnLUClose) {
this.flagPrintEtichetteOnLUClose = flagPrintEtichetteOnLUClose;
return this;
}
public int getOnNumCnfInputChanged() {
return onNumCnfInputChanged;
}
@@ -416,4 +431,49 @@ public class DBSettingsModel {
this.flagCanAddUnknownItemsInventario = flagCanAddUnknownItemsInventario;
return this;
}
public boolean isFlagShouldAskToCreateOrUpdateRowInventario() {
return flagShouldAskToCreateOrUpdateRowInventario;
}
public DBSettingsModel setFlagShouldAskToCreateOrUpdateRowInventario(boolean flagShouldAskToCreateOrUpdateRowInventario) {
this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario;
return this;
}
public boolean isFlagConsentiFuoriPianoLogistico() {
return flagConsentiFuoriPianoLogistico;
}
public DBSettingsModel setFlagConsentiFuoriPianoLogistico(boolean flagConsentiFuoriPianoLogistico) {
this.flagConsentiFuoriPianoLogistico = flagConsentiFuoriPianoLogistico;
return this;
}
public boolean isFlagConsentiOrdineSenzaGriglia() {
return flagConsentiOrdineSenzaGriglia;
}
public DBSettingsModel setFlagConsentiOrdineSenzaGriglia(boolean flagConsentiOrdineSenzaGriglia) {
this.flagConsentiOrdineSenzaGriglia = flagConsentiOrdineSenzaGriglia;
return this;
}
public String getCommessaMagazzino() {
return commessaMagazzino;
}
public DBSettingsModel setCommessaMagazzino(String commessaMagazzino) {
this.commessaMagazzino = commessaMagazzino;
return this;
}
public boolean isFlagGeneraDocumentoSpedizione() {
return flagGeneraDocumentoSpedizione;
}
public DBSettingsModel setFlagGeneraDocumentoSpedizione(boolean flagGeneraDocumentoSpedizione) {
this.flagGeneraDocumentoSpedizione = flagGeneraDocumentoSpedizione;
return this;
}
}

View File

@@ -15,6 +15,7 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.StbGestSetup;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
@@ -24,6 +25,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.utility.UtilityFirebase;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
@Singleton
public class SettingsManager {
@@ -108,6 +110,7 @@ public class SettingsManager {
};
RunnableArgs<Exception> tmpOnFailed = ex -> {
UtilityLogger.error(ex);
perfTrace.putAttribute("failed", "true");
if (!(ex instanceof SocketTimeoutException)) onFailed.run(ex);
else
@@ -305,6 +308,14 @@ public class SettingsManager {
.setGestName("PVM")
.setSection("ORDINI_A")
.setKeySection("ORDINA_ARTICOLI_ON_SCAN"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM")
.setSection("ORDINI_A")
.setKeySection("FLAG_CONSENTI_ORIDNE_DA_GRIGLIA"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM")
.setSection("ORDINI_A")
.setKeySection("FLAG_CONSENTI_ORIDNE_SENZA_GRIGLIA"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PVM")
.setSection("DOC_INTERNI")
@@ -325,6 +336,10 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_ETICHETTE_ON_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_PRINT_ETICHETTE_ON_LU_CLOSE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@@ -357,6 +372,18 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("INVENTARIO")
.setKeySection("FLAG_CAN_ADD_UNKNOWN_ITEMS"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("INVENTARIO")
.setKeySection("FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("COMMESSA_MAGAZZINO"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("GENERA_DOC"));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mGestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> {
@@ -381,8 +408,11 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagPickLiberoAllowEmptyDest(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_DEST", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaArticoliOnScan(getValueFromList(list, "ORDINI_A", "ORDINA_ARTICOLI_ON_SCAN", Boolean.class));
dbSettingsModelIstance.setFlagConsentiFuoriPianoLogistico(getValueFromList(list, "ORDINI_A", "FLAG_CONSENTI_ORIDNE_DA_GRIGLIA", Boolean.class));
dbSettingsModelIstance.setFlagConsentiOrdineSenzaGriglia(getValueFromList(list, "ORDINI_A", "FLAG_CONSENTI_ORIDNE_SENZA_GRIGLIA", Boolean.class));
dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", Boolean.class));
dbSettingsModelIstance.setFlagPrintEtichetteOnLUClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_LU_CLOSE", Boolean.class, true));
dbSettingsModelIstance.setFlagAskInfoAggiuntiveSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_ASK_INFO_AGGIUNTIVE", Boolean.class));
dbSettingsModelIstance.setFilterFornitoreProd(getValueFromList(list, "PRODUZIONE", "FILTER_FORNTIORE_PROD", String.class));
dbSettingsModelIstance.setCodDtipOrdTrasfV(getValueFromList(list, "SPEDIZIONE", "COD_DTIP_ORD_TRASF", String.class));
@@ -391,6 +421,9 @@ public class SettingsManager {
dbSettingsModelIstance.setGroupShippingByCommodityGroup(getValueFromList(list, "SPEDIZIONE", "FLAG_GROUP_BY_GRP_MERC", Boolean.class, Boolean.FALSE));
dbSettingsModelIstance.setFlagCanCreateInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_CREATE_INVENTARIO", Boolean.class, Boolean.TRUE));
dbSettingsModelIstance.setFlagCanAddUnknownItemsInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_ADD_UNKNOWN_ITEMS", Boolean.class, Boolean.TRUE));
dbSettingsModelIstance.setFlagShouldAskToCreateOrUpdateRowInventario(getValueFromList(list, "INVENTARIO", "FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW", Boolean.class, Boolean.FALSE));
dbSettingsModelIstance.setCommessaMagazzino(getValueFromList(list, "SETUP", "COMMESSA_MAGAZZINO", String.class, CommonConst.Config.COMMESSA_MAG));
dbSettingsModelIstance.setFlagGeneraDocumentoSpedizione(getValueFromList(list, "SPEDIZIONE", "GENERA_DOC", Boolean.class, Boolean.FALSE));
String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class);
if (notePerdita != null)
@@ -420,7 +453,7 @@ public class SettingsManager {
.filter(x -> x.getSection().equalsIgnoreCase(section) && x.getKeySection().equalsIgnoreCase(keySectionName))
.findFirstOrElse(null);
if(value != null) {
if (value != null) {
if (clazz == String.class) {
return clazz.cast(value.getValue());
} else if (clazz == Boolean.class) {
@@ -428,6 +461,12 @@ public class SettingsManager {
} else if (clazz == Integer.class && value.getValue() != null) {
return clazz.cast(Integer.parseInt(value.getValue()));
}
} else if (defaultValue == null) {
if (clazz == Boolean.class) {
return clazz.cast(Boolean.FALSE);
} else if (clazz == Integer.class) {
return clazz.cast(0);
}
}
return defaultValue;

View File

@@ -95,10 +95,19 @@ public class SettingsModel {
}
public static class UserSession {
private String deviceId;
private String profileDB;
private AvailableCodMdepsDTO depo;
private Integer defaultOrdinamentoPickingAccettazione = 0;
public String getDeviceId() {
return deviceId;
}
public void setDeviceId(String deviceId) {
this.deviceId = deviceId;
}
public String getProfileDB() {
return profileDB;
}

View File

@@ -27,9 +27,11 @@ public class UpdatesManager {
public void init(AppCompatActivity activityContext) {
this.mContext = activityContext;
final String baseEndpoint = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() +
(SettingsManager.i().getServer().getPort() > 0 ? ":" + SettingsManager.i().getServer().getPort() : "");
String currentVersionUrl = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "/ems-api/wms/currentVersion";
String currentDownloadUrl = SettingsManager.i().getServer().getProtocol() + "://" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "/ems-api/wms/android-release.apk";
final String currentVersionUrl = baseEndpoint + "/ems-api/wms/currentVersion";
final String currentDownloadUrl = baseEndpoint + "/ems-api/wms/android-release.apk";
AppUpdater appUpdater = new AppUpdater(mContext)

View File

@@ -40,7 +40,6 @@ public class PermissionsHelper {
}
String[] permissionArray = new String[permissionsToAsk.size()];
permissionsToAsk.toArray(permissionArray);

View File

@@ -0,0 +1,12 @@
package it.integry.integrywmsnative.core.utility;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UntMisUtils {
public static boolean shouldBeShowInColli(MtbAart mtbAart) {
return SettingsManager.iDB().isFlagForceAllToColli() || (mtbAart == null || !mtbAart.isFlagQtaCnfFissaBoolean());
}
}

View File

@@ -36,6 +36,10 @@ public class UtilityBarcode {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128;
}
public static boolean isCode128(BarcodeScanDTO barcodeScanDTO) {
return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128;
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
return isEtichettaPosizione(barcodeScanDTO, true);
}

View File

@@ -41,9 +41,15 @@ public class UtilityServer {
public static void isEmsApiAvailable(final String protocol, final String serverAddress, final int serverTCPport, final Runnable onComplete, final RunnableArgs<Exception> onFailed) {
new Thread(() -> {
String url = null;
if(serverTCPport > 0)
url = String.format("%s://%s:%d/ems-api/system/ok", protocol, serverAddress, serverTCPport);
else
url = String.format("%s://%s/ems-api/system/ok", protocol, serverAddress);
Request request = new Request.Builder()
.url(String.format("%s://%s:%d/ems-api/system/ok", protocol, serverAddress, serverTCPport))
.url(url)
.build();
try {

View File

@@ -290,7 +290,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.ordered_articles, (int) artsCounter)),
null,
() -> {

View File

@@ -389,7 +389,7 @@ public class AccettazionePickingViewModel {
.distinct()
.toList();
if (codAnags != null && codAnags.size() == 1) {
if (codAnags.size() == 1) {
mtbColt.setCodAnag(codAnags.get(0));
}
@@ -399,7 +399,7 @@ public class AccettazionePickingViewModel {
.distinct()
.toList();
if (rifOrds != null && rifOrds.size() == 1) {
if (rifOrds.size() == 1) {
mtbColt.setRifOrd(rifOrds.get(0));
}
@@ -409,16 +409,9 @@ public class AccettazionePickingViewModel {
.distinct()
.toList();
if (numDataOrds != null && numDataOrds.size() == 1) {
if (numDataOrds.size() == 1) {
mtbColt.setNumOrd(mOrders.get(0).getNumero());
mtbColt.setDataOrd(mOrders.get(0).getData());
try {
mtbColt.generaFiltroOrdine();
} catch (Exception ex) {
this.sendError(ex);
return;
}
}
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> {

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni;
import android.content.Context;
import android.os.Bundle;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -30,7 +29,6 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoResponseDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView;
@@ -85,8 +83,6 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
mBinding.setView(this);
mBinding.setViewModel(mViewModel);
mViewModel.mtbGrup.observe(getViewLifecycleOwner(), mtbGrup -> mViewModel.fetchProducts());
mViewModel.dtbTipi.observe(getViewLifecycleOwner(), dtbTipi -> mViewModel.fetchDocuments());
this.initRecyclerView();
return mBinding.getRoot();
@@ -100,7 +96,8 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
if (!this.mViewModel.hasDocDetails()) {
mViewModel.init();
} else {
this.mViewModel.fetchDocuments();
this.onLoadingStarted();
this.mViewModel.fetchDocuments(this::onLoadingEnded);
}
}
@@ -126,27 +123,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
@Override
public void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection) {
mViewModel.setSelectedDocDetails(selection);
if (selection.isFornitoreRequired()) {
mBinding.codAnagContainer.setVisibility(View.VISIBLE);
} else {
mBinding.codAnagContainer.setVisibility(View.GONE);
}
// if (selection.getGruppoArt() != null) {
// mBinding.mtbGrpContainer.setVisibility(View.VISIBLE);
// } else {
// mBinding.mtbGrpContainer.setVisibility(View.GONE);
// }
if (selection.isDocumentRequired()) {
mBinding.docContainer.setVisibility(View.VISIBLE);
mBinding.document.setText(Html.fromHtml(getString(R.string.doc_testata, String.valueOf(selection.getNumDoc()), UtilityDate.formatDate(selection.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))));
} else {
mBinding.docContainer.setVisibility(View.GONE);
}
mBinding.invalidateAll();
}
@Override
@@ -167,12 +144,9 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
.show(requireActivity().getSupportFragmentManager(), "tag");
}
public void showInfoArtDialog() {
}
private void initRecyclerView() {
this.mViewModel.getDocsList().observe(getViewLifecycleOwner(), this::refreshList);
DocInterniListAdapter docInterniListAdapter = new DocInterniListAdapter(this.requireActivity(), this.mDocInterniMutableData);
docInterniListAdapter.setEmptyView(this.mBinding.docInterniEmptyView);
this.mBinding.docInterniMainList.setAdapter(docInterniListAdapter);

View File

@@ -1,8 +1,8 @@
package it.integry.integrywmsnative.gest.contab_doc_interni;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -37,12 +37,12 @@ public class DocInterniViewModel {
private List<DocumentoArtDTO> availableArts;
private final MutableLiveData<List<DocInternoWrapper>> mDocsList = new MutableLiveData<>();
public final MutableLiveData<TipoDocDTO> dtbTipi = new MutableLiveData<>();
public final MutableLiveData<GruppoArticoloDTO> mtbGrup = new MutableLiveData<>();
public final MutableLiveData<FornitoreDTO> fornitore = new MutableLiveData<>();
public final MutableLiveData<Date> dataDoc = new MutableLiveData<>();
public final MutableLiveData<String> numDoc = new MutableLiveData<>();
public final MutableLiveData<String> note = new MutableLiveData<>();
public TipoDocDTO dtbTipi;
public GruppoArticoloDTO mtbGrup;
public FornitoreDTO fornitore;
public Date dataDoc;
public String numDoc;
public String note;
public final BindableInteger artsSize = new BindableInteger(0);
@Inject
@@ -52,8 +52,6 @@ public class DocInterniViewModel {
this.docInterniRESTConsumer = docInterniRESTConsumer;
this.documentRepository = documentRepository;
this.documentRESTConsumer = documentRESTConsumer;
this.mDocsList.setValue(new ArrayList<>());
}
@@ -83,26 +81,27 @@ public class DocInterniViewModel {
return this;
}
public MutableLiveData<List<DocInternoWrapper>> getDocsList() {
public LiveData<List<DocInternoWrapper>> getDocsList() {
return mDocsList;
}
public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection) {
this.fornitore = selection.getFornitore();
this.dtbTipi = selection.getTipoDoc();
this.fornitore.postValue(selection.getFornitore());
this.dtbTipi.postValue(selection.getTipoDoc());
this.mtbGrup = selection.getGruppoArt();
this.dataDoc = selection.getDataDoc();
this.numDoc = selection.getNumDoc() != null ? selection.getNumDoc().toString() : null;
this.note = selection.getNote();
this.mtbGrup.postValue(selection.getGruppoArt());
this.dataDoc.postValue(selection.getDataDoc());
this.numDoc.postValue(selection.getNumDoc() != null ? selection.getNumDoc().toString() : null);
this.note.postValue(selection.getNote());
this.sendOnLoadingStarted();
fetchProducts(() -> {
fetchDocuments(this::sendOnLoadingEnded);
});
}
public void fetchProducts() {
this.productsFetched = false;
this.sendOnLoadingStarted();
documentRESTConsumer.loadDocumentoAvailableArts(
public void fetchProducts(Runnable onComplete) {
documentRESTConsumer.loadDocumentAvailableArts(
this.getCodDtip(),
this.getCodMgrp(),
this.getCodAnagForn(),
@@ -111,30 +110,33 @@ public class DocInterniViewModel {
this.availableArts = data.getArts();
this.artsSize.set(this.availableArts.size());
if (this.docsFetched)
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
}
public void fetchDocuments() {
this.docsFetched = false;
this.sendOnLoadingStarted();
String codAnag = null, codVdes = null;
FornitoreDTO fornitore = this.fornitore.getValue();
public void fetchDocuments(Runnable onComplete) {
String codAnag = null;
String codVdes = null;
FornitoreDTO fornitore = this.fornitore;
if (fornitore != null) {
codAnag = fornitore.getCodAnag();
codVdes = fornitore.getCodVdes();
}
documentRepository.getLocalDocumentsByCodDtip(this.getCodDtip(), codAnag, codVdes, dataDoc.getValue(), numDoc.getValue(), list -> {
documentRepository.getNextNumCollo(nextNumCollo -> {
this.mDocsList.postValue(list);
this.setNextNumCollo(nextNumCollo);
this.docsFetched = true;
if (this.productsFetched) {
this.sendOnLoadingEnded();
}
}, this::sendError);
var docsList = documentRepository.getDocuments(this.getCodDtip(),
codAnag, codVdes, dataDoc, numDoc);
docsList.observeForever(data -> {
this.mDocsList.postValue(data);
});
documentRepository.getNextNumCollo(nextNumCollo -> {
this.setNextNumCollo(nextNumCollo);
this.docsFetched = true;
onComplete.run();
}, this::sendError);
}
@@ -143,31 +145,28 @@ public class DocInterniViewModel {
}
private String getCodDtip() {
if (this.dtbTipi.getValue() == null) {
if (this.dtbTipi == null) {
return null;
}
return this.dtbTipi.getValue().getCodDtip();
return this.dtbTipi.getCodDtip();
}
public TipoDocDTO getTipoDoc() {
if (this.dtbTipi.getValue() == null) {
return null;
}
return this.dtbTipi.getValue();
return this.dtbTipi;
}
private String getCodMgrp() {
if (this.mtbGrup.getValue() == null) {
if (this.mtbGrup == null) {
return null;
}
return this.mtbGrup.getValue().getCodMgrp();
return this.mtbGrup.getCodMgrp();
}
private String getCodAnagForn() {
if (this.fornitore.getValue() == null) {
if (this.fornitore == null) {
return null;
}
return this.fornitore.getValue().getCodAnag();
return this.fornitore.getCodAnag();
}
public void editDocument(SqlMtbColt document) {
@@ -176,7 +175,7 @@ public class DocInterniViewModel {
public void newDocument() {
SqlMtbColt document = new SqlMtbColt();
if (this.dtbTipi.getValue() == null) {
if (this.dtbTipi == null) {
this.sendError(new NoDocTypeSelectedException());
return;
}
@@ -184,18 +183,18 @@ public class DocInterniViewModel {
document.setCodMgrp(this.getCodMgrp());
document.setDataCollo(new Date());
document.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep());
document.setAnnotazioni(this.note.getValue());
document.setAnnotazioni(this.note);
document.setSegno(-1);
document.setSerCollo("/");
document.setNumCollo(this.nextNumCollo);
document.setGestione("L");
document.setDataDoc(this.dataDoc.getValue());
if (this.numDoc.getValue() != null) {
document.setNumDoc(Integer.parseInt(this.numDoc.getValue()));
document.setDataDoc(this.dataDoc);
if (this.numDoc != null) {
document.setNumDoc(Integer.parseInt(this.numDoc));
}
if (this.fornitore.getValue() != null) {
document.setCodAnag(this.fornitore.getValue().getCodAnag());
document.setCodVdes(this.fornitore.getValue().getCodVdes());
if (this.fornitore != null) {
document.setCodAnag(this.fornitore.getCodAnag());
document.setCodVdes(this.fornitore.getCodVdes());
}
documentRepository.insert(document, id -> {
document.setId(id);
@@ -204,7 +203,7 @@ public class DocInterniViewModel {
}
public boolean hasDocDetails() {
return this.dtbTipi.getValue() != null;
return this.dtbTipi != null;
}
public interface Listener extends ILoadingListener {

View File

@@ -1,85 +0,0 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.dto;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class DialogChooseRowFromListaDocRowsListModel {
private String codMart;
private String descrizione;
private String qtaOrdReadable;
private String barcode;
private boolean isNew;
private SqlMtbColr originalModel;
private BindableBoolean checked = new BindableBoolean(false);
public DialogChooseRowFromListaDocRowsListModel() {
}
public BindableBoolean getChecked() {
return checked;
}
public DialogChooseRowFromListaDocRowsListModel setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
public void toggleCheck() {
this.checked.set(!this.checked.get());
}
public String getCodMart() {
return codMart;
}
public DialogChooseRowFromListaDocRowsListModel setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public DialogChooseRowFromListaDocRowsListModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public String getQtaOrdReadable() {
return qtaOrdReadable;
}
public DialogChooseRowFromListaDocRowsListModel setQtaOrdReadable(String qtaOrdReadable) {
this.qtaOrdReadable = qtaOrdReadable;
return this;
}
public String getBarcode() {
return barcode;
}
public DialogChooseRowFromListaDocRowsListModel setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
public boolean isNew() {
return isNew;
}
public DialogChooseRowFromListaDocRowsListModel setNew(boolean aNew) {
isNew = aNew;
return this;
}
public SqlMtbColr getOriginalModel() {
return originalModel;
}
public DialogChooseRowFromListaDocRowsListModel setOriginalModel(SqlMtbColr originalModel) {
this.originalModel = originalModel;
return this;
}
}

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.annotation.Nullable;
@@ -41,13 +40,15 @@ import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipoDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -128,7 +129,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
if (document.getCodAnag() != null) {
this.codAnag.set(document.getCodAnag() + (document.getCodVdes() != null ? " - " + document.getCodVdes() : ""));
} else {
this.binding.supplierLayout.setVisibility(View.GONE);
this.codAnag.set(null);
}
this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv()));
@@ -136,7 +137,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
if (document.getNumDoc() != null && document.getDataDoc() != null) {
this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), UtilityDate.formatDate(document.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
} else {
this.binding.docRifLayout.setVisibility(View.GONE);
this.documentRifHeader.set(null);
}
}
@@ -184,7 +185,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
"Ricerca articolo",
null,
"Cod articolo / Barcode",
barcodeProd -> this.viewModel.loadArticolo(barcodeProd, null), BarcodeManager::enable).show();
barcodeProd -> this.viewModel.loadArticoloByCodMartOrBarcode(barcodeProd), BarcodeManager::enable).show();
}
@@ -230,7 +231,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Override
public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita, boolean isUntMisDig) {
this.onLoadingStarted();
MtbAart mtbAart = new MtbAart();
mtbAart.setBarCode(row.getCodBarre());
mtbAart.setDiacod(row.getCodBarre());
@@ -279,7 +279,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO);
})
.setOnAbort(this::onLoadingEnded)
.setOnAbort(() -> {})
.show(getSupportFragmentManager(), "tag");
}
@@ -320,13 +320,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Override
public void onMultipleRowsFound(List<SqlMtbColr> rows, DocumentoArtDTO articolo) {
DialogSelectDocRowsView.newInstance(rows, (row) -> {
this.onLoadingEnded();
if (row != null) {
this.viewModel.dispatchRowEdit(row, articolo.isFlagTracciabilita(), articolo.isUntMisDigitale());
}
}
).show(this.getSupportFragmentManager(), "dialogSelectDocRows");
List<DialogSelectDocRowsItemListModel<Object>> dataset =
Stream.of(rows)
.map(x -> new DialogSelectDocRowsItemListModel<>()
.setCodMart(x.getCodMart())
.setBarcode(x.getCodBarre())
.setOriginalModel(x)
.setNew(x.getId() < 1)
.setDescrizione(x.getDescrizione())
.setQtaOrd(BigDecimal.valueOf(x.getQtaCol()))
.setUntMisOrd(x.getUntMis()))
.toList();
DialogSelectDocRowsView.newInstance(dataset, data -> {
this.viewModel.dispatchRowEdit((SqlMtbColr) data.getOriginalModel(), articolo.isFlagTracciabilita(), articolo.isUntMisDigitale());
}, () -> {})
.show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew");
}
private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) {
@@ -358,19 +367,24 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
}
public void showInfoArtDialog() {
var listaMtbAart = Stream.of(this.viewModel.getProductsList())
.map(x -> new MtbAart()
.map(x -> new DialogAvailableItemListModel()
.setCodMart(x.getCodMart())
.setUntMis(x.getUntMis())
.setDescrizione(x.getDescrizione())
.setDescrizioneEstesa(x.getDescrizione())
.setQtaCnf(x.getQtaCnf()))
.setDescrizioneEstesa(x.getDescrizione()))
.toList();
new DialogChooseArtFromListaArtsView(false, listaMtbAart, null)
.show(getSupportFragmentManager(), "tag");
for (var documentRow : viewModel.getDocumentRows()) {
var codMart = documentRow.getCodMart();
Stream.of(listaMtbAart)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart))
.forEach(x -> x.setAggiunto(true));
}
new DialogAvailableItemsView(listaMtbAart)
.show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView");
}
}

View File

@@ -4,13 +4,11 @@ import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
@@ -21,6 +19,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource;
import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.NoResultFromCodMartException;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
@@ -37,17 +36,17 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua
public class DocInterniEditFormViewModel {
@Inject
MtbColrDataSource mtbColrRepository;
@Inject
MtbColtRepository mtbColtRepository;
private final MtbColrDataSource mtbColrRepository;
private final MtbColtRepository mtbColtRepository;
private final DocInterniRESTConsumer docInterniRESTConsumer;
private DocInterniEditFormViewModel.Listener listener;
private Listener listener;
private List<DocumentoArtDTO> productsList;
private HashMap<String, String> flattedBarcodesCodMarts;
private TipoDocDTO tipoDoc;
private boolean isCheckPartitaMag = false;
private JSONObject checkFornitoreRules = null;
public MutableLiveData<SqlMtbColt> document = new MutableLiveData<>();
public MutableLiveData<List<SqlMtbColr>> docRows = new MutableLiveData<>();
@@ -129,16 +128,29 @@ public class DocInterniEditFormViewModel {
this.listener.onDocumentHoldRequest();
}
public void loadArticolo(String barcodeProd, Ean128Model ean128Model) {
public void loadArticoloByCodMartOrBarcode(String codMart) {
var matchedArt = Stream.of(productsList)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart) ||
x.getBarcode().contains(codMart))
.findFirst()
.orElse(null);
if (matchedArt == null) {
this.sendError(new NoResultFromCodMartException(codMart));
return;
}
loadArticolo(matchedArt, null);
}
public void loadArticoloByBarcode(String barcodeProd, Ean128Model ean128Model) {
DocumentoArtDTO matchedArt;
String usedBarcode = null;
String leftBarcode = StringUtils.leftPad(barcodeProd, 13, '0');
matchedArt = Stream.of(productsList)
.filter(x -> x.getCodMart().equalsIgnoreCase(barcodeProd) ||
leftBarcode.equalsIgnoreCase(x.getCodMart()) ||
x.getBarcode().contains(barcodeProd))
.filter(x -> x.getBarcode().contains(barcodeProd))
.findFirst()
.orElse(null);
@@ -151,15 +163,17 @@ public class DocInterniEditFormViewModel {
return;
}
List<SqlMtbColr> rows = this.getRowsForArticolo(matchedArt, usedBarcode);
loadArticolo(matchedArt, usedBarcode);
}
private void loadArticolo(DocumentoArtDTO documentoArtDTO, String usedBarcode) {
List<SqlMtbColr> rows = this.getRowsForArticolo(documentoArtDTO, usedBarcode);
if (rows.size() > 1) {
this.listener.onMultipleRowsFound(rows, matchedArt);
this.listener.onMultipleRowsFound(rows, documentoArtDTO);
} else {
this.dispatchRowEdit(rows.get(0), matchedArt.isFlagTracciabilita(), matchedArt.isUntMisDigitale());
this.dispatchRowEdit(rows.get(0), documentoArtDTO.isFlagTracciabilita(), documentoArtDTO.isUntMisDigitale());
}
}
private List<SqlMtbColr> getRowsForArticolo(DocumentoArtDTO articolo, String barcode) {
@@ -284,13 +298,6 @@ public class DocInterniEditFormViewModel {
public void setProductsList(List<DocumentoArtDTO> productsList) {
this.productsList = productsList;
this.flattedBarcodesCodMarts = new HashMap<>();
for (DocumentoArtDTO documentArt : productsList) {
for (String barcode : documentArt.getBarcode()) {
this.flattedBarcodesCodMarts.put(barcode, documentArt.getCodMart());
}
}
}
public void processBarcode(BarcodeScanDTO dto) {
@@ -303,7 +310,7 @@ public class DocInterniEditFormViewModel {
this.executeEtichettaEanPeso(barcodeScanDTO);
} else {
this.loadArticolo(barcodeScanDTO.getStringValue(), null);
this.loadArticoloByBarcode(barcodeScanDTO.getStringValue(), null);
}
}
@@ -311,7 +318,7 @@ public class DocInterniEditFormViewModel {
private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO) {
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128());
this.loadArticoloByBarcode(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128());
} catch (Exception ex) {
this.sendError(ex);
}

View File

@@ -10,7 +10,5 @@ public interface DialogSelectDocRowsComponent {
DialogSelectDocRowsComponent create();
}
void inject(DialogSelectDocRowsView dialogSelectDocInfoView);
}
void inject(DialogSelectDocRowsView dialogSelectDocRowsView);
}

View File

@@ -0,0 +1,90 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class DialogSelectDocRowsItemListModel<T> {
private String codMart;
private String descrizione;
private BigDecimal qtaOrd;
private String untMisOrd;
private String barcode;
private boolean isNew;
private T originalModel;
private BindableBoolean checked = new BindableBoolean(false);
public String getCodMart() {
return codMart;
}
public DialogSelectDocRowsItemListModel<T> setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public DialogSelectDocRowsItemListModel<T> setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public DialogSelectDocRowsItemListModel<T> setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public String getUntMisOrd() {
return untMisOrd;
}
public DialogSelectDocRowsItemListModel<T> setUntMisOrd(String untMisOrd) {
this.untMisOrd = untMisOrd;
return this;
}
public String getBarcode() {
return barcode;
}
public DialogSelectDocRowsItemListModel<T> setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
public boolean isNew() {
return isNew;
}
public DialogSelectDocRowsItemListModel<T> setNew(boolean aNew) {
isNew = aNew;
return this;
}
public T getOriginalModel() {
return originalModel;
}
public DialogSelectDocRowsItemListModel<T> setOriginalModel(T originalModel) {
this.originalModel = originalModel;
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public DialogSelectDocRowsItemListModel<T> setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
}

View File

@@ -1,9 +1,14 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogSelectDocRowsComponent.class)
public class DialogSelectDocRowsModule {
@Provides
DialogSelectDocRowsViewModel providesDialogSelectDocRowsNewViewModel() {
return new DialogSelectDocRowsViewModel();
}
}
}

View File

@@ -1,143 +1,128 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows;
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 android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
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.SqlMtbColr;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.DialogChooseRowFromListaDocRowsLayoutBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DialogChooseRowFromListaDocRowsListModel;
import kotlin.Unit;
import it.integry.integrywmsnative.databinding.DialogSelectDocRowsBinding;
import it.integry.integrywmsnative.databinding.DialogSelectDocRowsItemModelBinding;
/**
* @noinspection rawtypes
*/
public class DialogSelectDocRowsView extends BaseDialogFragment {
private final RunnableArgs<SqlMtbColr> onRowSelected;
private final List<SqlMtbColr> listArts;
private final MutableLiveData<List<DialogChooseRowFromListaDocRowsListModel>> listModels = new MutableLiveData<>();
private DialogChooseRowFromListaDocRowsLayoutBinding binding;
public MutableLiveData<SqlMtbColr> selectedRow = new MutableLiveData<>();
public static DialogSelectDocRowsView newInstance(
List<SqlMtbColr> listArts,
RunnableArgs<SqlMtbColr> onDismiss
) {
return new DialogSelectDocRowsView(listArts, onDismiss);
@Inject
DialogSelectDocRowsViewModel mViewModel;
private DialogSelectDocRowsBinding mBindings;
private Context mContext;
private final List<DialogSelectDocRowsItemListModel<Object>> listArts;
private final RunnableArgs<DialogSelectDocRowsItemListModel> onConfirm;
private final Runnable onAbort;
//Pass here all external parameters
public static DialogSelectDocRowsView newInstance(List<DialogSelectDocRowsItemListModel<Object>> listArts,
RunnableArgs<DialogSelectDocRowsItemListModel> onConfirm,
Runnable onAbort) {
return new DialogSelectDocRowsView(listArts, onConfirm, onAbort);
}
private DialogSelectDocRowsView(List<SqlMtbColr> listArts, RunnableArgs<SqlMtbColr> onDismiss) {
private DialogSelectDocRowsView(List<DialogSelectDocRowsItemListModel<Object>> listArts,
RunnableArgs<DialogSelectDocRowsItemListModel> onConfirm,
Runnable onAbort) {
super();
this.onRowSelected = onDismiss;
this.listArts = listArts;
this.onConfirm = onConfirm;
this.onAbort = onAbort;
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
if (onRowSelected != null) onRowSelected.run(this.selectedRow.getValue());
}
@Nullable
@NonNull
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_row_from_lista_doc_rows_layout, container, false);
binding.setLifecycleOwner(this);
MainApplication
.appComponent
.dialogSelectDocRowsComponent()
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogSelectDocRowsBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogSelectDocRowsNewComponent()
.create()
.inject(this);
binding.setView(this);
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
initView();
this.refreshList();
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialog, which) -> {
final DialogSelectDocRowsItemListModel<Object> selectedItem = Stream.of(listArts)
.filter(x -> x.getChecked().get())
.findFirstOrElse(null);
if (selectedItem != null)
this.onConfirm.run(selectedItem);
})
.setNegativeButton(R.string.abort, (dialog, which) -> {
if (this.onAbort != null) this.onAbort.run();
})
.create();
binding.positiveButton.setOnClickListener(view -> {
getDialog().dismiss();
});
binding.negativeButton.setOnClickListener(view -> {
this.selectedRow.setValue(null);
getDialog().dismiss();
});
this.onLoadingEnded();
return binding.getRoot();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
private void refreshList() {
var list = Stream.of(this.listArts).map(row -> {
DialogChooseRowFromListaDocRowsListModel model = new DialogChooseRowFromListaDocRowsListModel();
model.setCodMart(row.getCodMart());
model.setBarcode(row.getCodMart());
model.setOriginalModel(row);
model.setNew(row.getId() < 1);
model.setDescrizione(row.getDescrizione());
model.setQtaOrdReadable(row.getQtaCol() + "\n" + row.getUntMis());
model.getChecked().addOnPropertyChangedCallback(() -> {
this.checkRow(row, model.getChecked().get());
});
return model;
}).toList();
this.listModels.postValue(list);
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.listArts.get(0).getChecked().set(true);
this.initRecyclerView();
}
private void checkRow(SqlMtbColr row, boolean checked) {
if (checked) {
this.selectedRow.setValue(row);
var models = this.listModels.getValue();
if (models != null && !models.isEmpty()) {
Stream.of(models).filter(model -> model.getOriginalModel().getId() != row.getId()).forEach(model -> {
model.getChecked().set(false);
});
}
} else {
var selectedRow = this.selectedRow.getValue();
if (selectedRow != null && selectedRow.getId() == row.getId()) {
this.selectedRow.setValue(null);
}
private void initRecyclerView() {
var itemType = new Type<DialogSelectDocRowsItemListModel, DialogSelectDocRowsItemModelBinding>(R.layout.dialog_select_doc_rows__item_model, BR.row);
// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId()));
itemType.areContentsTheSame(DialogSelectDocRowsItemListModel::equals);
itemType.onClick(x -> {
resetChecks();
x.getBinding().getRow().getChecked().set(true);
return null;
});
new LiveAdapter(listArts)
.map(DialogSelectDocRowsItemListModel.class, itemType)
.into(this.mBindings.itemList);
}
private void resetChecks() {
for (var item : listArts) {
item.getChecked().set(false);
}
}
private void initView() {
initArrayAdapters();
}
private void initArrayAdapters() {
new LiveAdapter(listModels, getViewLifecycleOwner(), BR.row)
.map(DialogChooseRowFromListaDocRowsListModel.class, R.layout.dialog_choose_row_from_lista_doc_rows__item_model)
.onNoData(noData -> {
binding.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE);
return Unit.INSTANCE;
}
).into(binding.listaDocRows);
}
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows;
public class DialogSelectDocRowsViewModel {
}

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.inventario;
import androidx.lifecycle.LiveData;
import com.annimon.stream.Stream;
import java.util.List;
import java.util.Objects;
@@ -65,8 +67,7 @@ public class ElencoInventariViewModel {
this.sendCreateInventarioRequest(inventoryId, zone);
} else {
var matchedInventory = getInventarioList().getValue()
.stream()
var matchedInventory = Stream.of(getInventarioList().getValue())
.filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) &&
!x.isSyncronized())
.findFirst()

View File

@@ -36,11 +36,14 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityPickingInventarioBinding;
import it.integry.integrywmsnative.databinding.ActivityPickingInventarioListItemBinding;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView;
import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions.BottomSheetInventarioRowActionsView;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel;
import it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemsView;
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;
@@ -98,7 +101,8 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn
mViewModel.init(
DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO)),
DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO_ARTS)),
SettingsManager.iDB().isFlagCanAddUnknownItemsInventario());
SettingsManager.iDB().isFlagCanAddUnknownItemsInventario(),
SettingsManager.iDB().isFlagShouldAskToCreateOrUpdateRowInventario());
initToolbar();
initBarcodeReader();
@@ -235,12 +239,52 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onItemAlreadyFound(InventarioArtDTO matchedArt, List<InventarioRowRoomDTO> alreadyScannedItems) {
final List<DialogSelectDocRowsItemListModel<Object>> dialogSelectDocRowsItemListModels = Stream.of(alreadyScannedItems)
.map(x -> new DialogSelectDocRowsItemListModel<>()
.setBarcode(x.getScanCodBarre())
.setCodMart(x.getCodMart())
.setDescrizione(x.getDescrizione())
.setQtaOrd(x.getQta())
.setUntMisOrd(x.getUntMis())
.setNew(false)
.setOriginalModel(x))
.toList();
dialogSelectDocRowsItemListModels.add(new DialogSelectDocRowsItemListModel<>()
.setCodMart(matchedArt.getCodMart())
.setDescrizione(matchedArt.getDescrizione())
.setQtaOrd(BigDecimal.ZERO)
.setUntMisOrd(matchedArt.getUntMis())
.setNew(true));
DialogSelectDocRowsView.newInstance(dialogSelectDocRowsItemListModels, data -> {
if(data.isNew())
this.mViewModel.dispatchRowInsert(null, matchedArt, null);
else
this.mViewModel.dispatchRowEdit(matchedArt.toMtbAart(), (InventarioRowRoomDTO) data.getOriginalModel());
}, () -> {
}).show(this.getSupportFragmentManager(), "DialogSelectDocRowsView");
}
public void showAvailableArts() {
var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts())
.map(InventarioArtDTO::toMtbAart)
.map(DialogAvailableItemListModel::fromMtbAart)
.toList();
new DialogChooseArtFromListaArtsView(false, listaMtbAart, null)
.show(getSupportFragmentManager(), "tag");
for (var inventoryItem : mViewModel.currentInventarioRows.getValue()) {
var codMart = inventoryItem.getCodMart();
Stream.of(listaMtbAart)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart))
.forEach(x -> x.setAggiunto(true));
}
new DialogAvailableItemsView(listaMtbAart)
.show(getSupportFragmentManager(), "DialogAvailableInventarioItemsView");
}
}

View File

@@ -4,6 +4,8 @@ import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
@@ -37,6 +39,7 @@ public class PickingInventarioViewModel extends ViewModel {
private final InventarioRowRepository inventarioRowRepository;
private boolean canAddUnknownItems;
private boolean flagShouldAskToCreateOrUpdateRowInventario;
public MutableLiveData<InventarioRoomDTO> currentInventario = new MutableLiveData<>();
public LiveData<List<InventarioRowRoomDTO>> currentInventarioRows = new MutableLiveData<>();
@@ -51,8 +54,9 @@ public class PickingInventarioViewModel extends ViewModel {
this.inventarioRowRepository = inventarioRowRepository;
}
public void init(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> inventarioArts, boolean canAddUnknownItems) {
public void init(InventarioRoomDTO inventarioRoomDTO, List<InventarioArtDTO> inventarioArts, boolean canAddUnknownItems, boolean flagShouldAskToCreateOrUpdateRowInventario) {
this.canAddUnknownItems = canAddUnknownItems;
this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario;
this.sendOnLoadingStarted();
@@ -159,24 +163,41 @@ public class PickingInventarioViewModel extends ViewModel {
if (canAddUnknownItems && matchedArt == null) {
matchedArt = new InventarioArtDTO()
.setBarcode(barcodeList)
.setFlagQtaCnfFissa(true)
.setPlu(false)
.setUntMis("PZ")
.setQtaCnf(BigDecimal.ONE);
.setBarcode(barcodeList)
.setFlagQtaCnfFissa(true)
.setPlu(false)
.setUntMis("PZ")
.setQtaCnf(BigDecimal.ONE);
}
if (matchedArt != null) {
this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model);
var alreadyScannedItems = searchArtInAlreadyScannedItems(matchedArt);
if (alreadyScannedItems == null || alreadyScannedItems.isEmpty() || !flagShouldAskToCreateOrUpdateRowInventario)
this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model);
else {
this.sendOnItemAlreadyFound(matchedArt, alreadyScannedItems);
}
onComplete.run();
} else
this.sendError(new NoResultFromBarcodeException(barcodeProd));
}
private List<InventarioRowRoomDTO> searchArtInAlreadyScannedItems(InventarioArtDTO inventarioArtDTO) {
final List<InventarioRowRoomDTO> inventarioRows = this.currentInventarioRows.getValue();
if (inventarioRows == null) return null;
return Stream.of(inventarioRows)
.filter(x -> x.getCodMart().equalsIgnoreCase(inventarioArtDTO.getCodMart()))
.toList();
}
private void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) {
public void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) {
var mtbAart = inventarioArtDTO.toMtbAart();
mtbAart.setFlagTracciabilita("N");
@@ -290,7 +311,7 @@ public class PickingInventarioViewModel extends ViewModel {
}
}
private void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) {
public void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) {
final PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
.setMtbAart(mtbAart);
@@ -393,6 +414,11 @@ public class PickingInventarioViewModel extends ViewModel {
onComplete);
}
private void sendOnItemAlreadyFound(InventarioArtDTO matchedArt, List<InventarioRowRoomDTO> alreadyScannedItems) {
if(this.mListener != null)
this.mListener.onItemAlreadyFound(matchedArt, alreadyScannedItems);
}
public PickingInventarioViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
@@ -419,5 +445,7 @@ public class PickingInventarioViewModel extends ViewModel {
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onItemAlreadyFound(InventarioArtDTO matchedArt, List<InventarioRowRoomDTO> alreadyScannedItems);
}
}

View File

@@ -6,6 +6,8 @@ import android.text.Html;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil;
import com.google.firebase.installations.FirebaseInstallations;
import java.util.List;
import javax.inject.Inject;
@@ -16,6 +18,7 @@ import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityWindow;
import it.integry.integrywmsnative.databinding.ActivityLoginBinding;
@@ -29,6 +32,9 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen
@Inject
LoginViewModel mViewmodel;
@Inject
SystemRESTConsumer systemRESTConsumer;
public BindableString username = new BindableString();
public BindableString password = new BindableString();
@@ -119,9 +125,13 @@ public class LoginActivity extends BaseActivity implements LoginViewModel.Listen
private void showProfileDBSelectionDialog(final String protocol, final String host, final int port, final List<String> availableProfiles) {
Runnable onComplete = () -> {
SettingsManager.update();
startSplashActivity();
FirebaseInstallations.getInstance().getId().addOnCompleteListener(fid -> {
SettingsManager.i().getUserSession().setDeviceId(fid.getResult());
SettingsManager.update();
systemRESTConsumer.registerDevice(this::startSplashActivity, this::onError);
});
};
loginButtonEnabled.set(true);

View File

@@ -797,7 +797,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
listModel.setSubDescription(x.getRifOrd());
if(x.getDataConsD() != null) {
if (x.getDataConsD() != null) {
String testataDataConsString = String.format(getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
listModel.setRightDescription(testataDataConsString);
}
@@ -861,7 +861,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, orders.size()), orders.size())
+ "<br />" +
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size())
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.ordered_articles, codMarts.size())
+ "<br />" +
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,

View File

@@ -356,7 +356,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.ordered_articles, (int) artsCounter)),
null,
() -> {

View File

@@ -5,22 +5,14 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import androidx.databinding.DataBindingUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding;
public class InputQuantityToReturnDialog {

View File

@@ -13,9 +13,11 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.math.BigDecimal;
import java.util.List;
import javax.inject.Inject;
@@ -36,7 +38,9 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding;
import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderItemListModel;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList.DialogSelectArtToOrderView;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskActionView;
@@ -165,7 +169,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
() -> {
this.deleteArticolo(articoloOrdine);
BarcodeManager.enable();
}).show(getSupportFragmentManager(), "tag");
}, BarcodeManager::enable).show(getSupportFragmentManager(), "tag");
}
@@ -191,7 +195,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
}
this.mViewModel.refreshListArticoli(onSuccess);
}, null).show(this.getSupportFragmentManager(), "DialogEditArticoloView");
}, this::onLoadingEnded).show(this.getSupportFragmentManager(), "DialogEditArticoloView");
}
@Override
@@ -202,6 +206,16 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
onSuccess, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder");
}
@Override
public void confirmCheckForUnlistedProduct(String barcode) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)),
null,
() -> {
this.mViewModel.loadArticolo(barcode);
}, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder");
}
@Override
public int getColorFromResource(int resId) {
return getResources().getColor(resId);
@@ -236,4 +250,34 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
}
@Override
public void confirmExportInvalidProducts(Runnable onConfirm) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_export_invalid_product)),
null,
onConfirm
,
this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExportInvalidProducts");
}
@Override
public void chooseArtFromList(List<ArticoloOrdinabileDTO> listArticoli, RunnableArgs<ArticoloOrdinabileDTO> onArtChosen) {
List<DialogSelectArtToOrderItemListModel<Object>> dataset =
Stream.of(listArticoli)
.map(x -> new DialogSelectArtToOrderItemListModel<>()
.setCodMart(x.getCodMart())
.setBarcode(x.getSelectedBarcode())
.setOriginalModel(x)
.setNew(mViewModel.isArtInOrder(x))
.setDescrizione(x.getDescrizione())
.setQtaOrd(BigDecimal.valueOf(x.getQtaOrd()))
.setCodAlis(x.getCodAlis())
.setUntMisOrd(x.getUntMis()))
.toList();
DialogSelectArtToOrderView.newInstance(dataset,
data -> onArtChosen.run((ArticoloOrdinabileDTO) data.getOriginalModel()),
this::onLoadingEnded)
.show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew");
}
}

View File

@@ -8,8 +8,8 @@ import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.stream.Collectors;
import javax.inject.Inject;
@@ -22,7 +22,10 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGriglia
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.exception.ArtNotFoundInGridException;
import it.integry.integrywmsnative.core.exception.EmptyOrderException;
import it.integry.integrywmsnative.core.exception.ExpiredProductListException;
import it.integry.integrywmsnative.core.exception.MultipleResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.NoArtsInGridException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -31,6 +34,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsu
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class PVOrdineAcquistoEditViewModel {
@@ -58,6 +62,8 @@ public class PVOrdineAcquistoEditViewModel {
private List<ArticoloOrdinabileDTO> mArticoliGriglia = new ArrayList<>();
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
private Calendar dataInizioModifica;
public PVOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
GrigliaRepository grigliaRepository,
@@ -75,6 +81,14 @@ public class PVOrdineAcquistoEditViewModel {
this.mCurrentOrdine = ordine;
mArticoliGriglia.clear();
mArticoliGriglia.addAll(articoliGriglia);
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
this.dataInizioModifica = today;
this.refreshListArticoli();
}
@@ -82,10 +96,21 @@ public class PVOrdineAcquistoEditViewModel {
refreshListArticoli(null);
}
public boolean isOrderSessionInvalid() {
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
return today.after(this.dataInizioModifica);
}
public void refreshListArticoli(Runnable onSuccess) {
this.sendOnLoadingStarted();
this.loadArticoli(mCurrentOrdine, articoli -> {
articoli = Stream.of(articoli).map(this::completeDataArticoli).sorted((a, b) -> a.getDataIns().after(b.getDataIns()) ? -1 : 1).toList();
this.mArticoli.postValue(articoli);
this.sendOnLoadingEnded();
if (onSuccess != null)
@@ -109,6 +134,8 @@ public class PVOrdineAcquistoEditViewModel {
art.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
art.setCtMaxOrd(BigDecimal.valueOf(artGrid.getCtMaxOrd()));
art.setSystemNote(artGrid.generateSystemNote());
} else {
art.setInvalid(true);
}
return art;
}
@@ -133,15 +160,29 @@ public class PVOrdineAcquistoEditViewModel {
try {
this.sendOnLoadingStarted();
ArticoloOrdinabileDTO articoloDTO = getArticoloFromBarcode(barcode);
if (articoloDTO == null) {
throw new NoResultFromBarcodeException(barcode);
List<ArticoloOrdinabileDTO> listArticoli = matchArticoliForBarcode(barcode);
if (listArticoli == null || listArticoli.isEmpty()) {
if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) {
this.mListener.confirmCheckForUnlistedProduct(barcode);
return;
} else {
throw new NoResultFromBarcodeException(barcode);
}
}
if (listArticoli.size() == 1) {
this.addArticoloToOrdine(
listArticoli.get(0),
this::sendOnLoadingEnded,
this::sendError
);
} else {
this.mListener.chooseArtFromList(listArticoli, (art) -> {
this.addArticoloToOrdine(
art,
this::sendOnLoadingEnded,
this::sendError);
});
}
this.addArticoloToOrdine(
articoloDTO,
this::sendOnLoadingEnded,
this::sendError
);
} catch (Exception e) {
this.sendError(e);
BarcodeManager.enable();
@@ -163,17 +204,19 @@ public class PVOrdineAcquistoEditViewModel {
var articolo = foundArt != null ? completeDataArticoli(foundArt) : convertToArticoloOrdine(art, mCurrentOrdine);
Runnable saveAction = () -> {
articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf());
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, () -> this.refreshListArticoli(onSuccess), onFail);
};
if (isAutoOrderOnScan()) {
if (!UtilityBigDecimal.isNullOrZero(articolo.getCtMaxOrd()) && UtilityBigDecimal.greaterThan(BigDecimal.valueOf(articolo.getQtaOrd() + articolo.getQtaCnf()), articolo.getCtMaxOrd())) {
if (!UtilityBigDecimal.isNullOrZero(articolo.getCtMaxOrd()) && UtilityBigDecimal.greaterThan(BigDecimal.valueOf(articolo.getQtaOrd() + articolo.getQtaCnf()), articolo.getCtMaxOrd().multiply(BigDecimal.valueOf(articolo.getQtaCnf())))) {
mListener.confirmExceedingQtyOrder(saveAction);
} else {
saveAction.run();
}
} else {
articolo.setQtaOrd(articolo.getQtaOrd() > 0f ? articolo.getQtaOrd() : articolo.getQtaCnf());
this.sendOnItemDispatched(articolo, onSuccess);
}
@@ -197,7 +240,6 @@ public class PVOrdineAcquistoEditViewModel {
articolo.setFlagQtaMultipla(art.getFlagQtaMultipla());
articolo.setQtaMinOrdinabile(art.getQtaMinOrdinabile());
articolo.setMerceDaRic(art.getMerceDaRic());
articolo.setQtaCnf(art.getQtaCnf());
articolo.setUntMis(art.getUntMis());
articolo.setDescrizione(art.getDescrizione());
articolo.setDataIns(UtilityDate.getDateInstance());
@@ -207,29 +249,27 @@ public class PVOrdineAcquistoEditViewModel {
articolo.setQtaProposta(art.getQtaProposta());
articolo.setNewNoPromo(art.isNewNoPromo());
articolo.setSystemNote(art.generateSystemNote());
articolo.setQtaOrd(art.getQtaOrd());
articolo.setQtaCnf(art.getQtaCnf() > 0f ? art.getQtaCnf() : 1);
articolo.setCodAlis(art.getCodAlis());
articolo.setCtMaxOrd(BigDecimal.valueOf(art.getCtMaxOrd()));
return articolo;
}
public ArticoloOrdinabileDTO getArticoloFromBarcode(String barcode) throws NoArtsInGridException {
public List<ArticoloOrdinabileDTO> matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException {
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
throw new NoArtsInGridException();
}
ArticoloOrdinabileDTO art = Stream.of(mArticoliGriglia).filter(articolo ->
List<ArticoloOrdinabileDTO> articoli = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().contains(barcode) ||
articolo.getBarcode().contains(StringUtils.leftPad(barcode, 13, "0"))
)
).map((art) -> art.setSelectedBarcode(barcode))
// .sortBy(x -> x.getSortByBarcodeCondition(barcode))
.findFirst().orElse(null);
if (art != null) {
art.setSelectedBarcode(barcode);
}
return art;
.toList();
return articoli;
}
@@ -238,9 +278,9 @@ public class PVOrdineAcquistoEditViewModel {
}
private List<ArticoloOrdinabileDTO> getNewArticoli() {
return mArticoliGriglia.stream()
return Stream.of(mArticoliGriglia)
.filter(x -> x.getQtaOrd() > 0f)
.collect(Collectors.toList());
.toList();
}
public void orderNewProducts() {
@@ -280,19 +320,34 @@ public class PVOrdineAcquistoEditViewModel {
public void exportOrdine(Runnable onComplete) {
this.sendOnLoadingStarted();
if (mArticoli.getValue() == null) {
if (isOrderSessionInvalid()) {
this.sendError(new ExpiredProductListException());
return;
}
if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) {
this.sendError(new EmptyOrderException());
return;
}
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();
onComplete.run();
Runnable saveOrdine = () -> {
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), codMdep, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
}, this::sendError);
};
if (Stream.of(mArticoli.getValue()).anyMatch(ArticoloOrdine::isInvalid)) {
this.mListener.confirmExportInvalidProducts(saveOrdine);
return;
}
saveOrdine.run();
}, this::sendError);
}
private void sendOnItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess) {
@@ -311,6 +366,51 @@ public class PVOrdineAcquistoEditViewModel {
if (this.mListener != null) mListener.onError(ex);
}
public void loadArticolo(String barcode) {
this.sendOnLoadingStarted();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
pvOrdiniAcquistoRESTConsumer.retrieveArticolo(null, codMdep, barcode, (grigliaDTO) -> {
RunnableArgs<ArticoloOrdinabileDTO> addArtToOrder = (articolo) -> {
ArticoloOrdinabileDTO existingArt = Stream.of(mArticoliGriglia).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null);
if (existingArt != null) {
List<String> barcodes = existingArt.getBarcode();
barcodes.addAll(articolo.getBarcode());
barcodes = Stream.of(barcodes).distinct().toList();
existingArt.setBarcode(barcodes);
} else {
mArticoliGriglia.add(articolo);
}
this.processBarcode(barcode);
};
if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) {
this.sendError(new ArtNotFoundInGridException());
return;
}
if (grigliaDTO.getArticoli().size() > 1) {
this.mListener.chooseArtFromList(grigliaDTO.getArticoli(), addArtToOrder);
return;
}
ArticoloOrdinabileDTO newArt = Stream.of(grigliaDTO.getArticoli()).findFirstOrElse(null);
if (newArt == null) {
this.sendError(new ArtNotFoundInGridException());
return;
}
addArtToOrder.run(newArt);
}, this::sendError);
}
public boolean isArtInOrder(ArticoloOrdinabileDTO articolo) {
if (mArticoli.getValue() == null || mArticoli.getValue().isEmpty()) {
return false;
}
return Stream.of(mArticoli.getValue()).noneMatch(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()));
}
public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine, Runnable onSuccess);
@@ -319,6 +419,12 @@ public class PVOrdineAcquistoEditViewModel {
int getColorFromResource(int resId);
void onError(Exception ex);
void confirmCheckForUnlistedProduct(String barcode);
void confirmExportInvalidProducts(Runnable onConfirm);
void chooseArtFromList(List<ArticoloOrdinabileDTO> listArticoli, RunnableArgs<ArticoloOrdinabileDTO> onArtChosen);
}
public PVOrdineAcquistoEditViewModel setListener(Listener listener) {

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import dagger.Subcomponent;

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import dagger.Module;
import dagger.Provides;

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import android.content.DialogInterface;
import android.graphics.Color;
@@ -85,7 +85,7 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
this.mViewModel
.setListener(this)
.setCurrentArticolo(this.mArticolo)
.setInitialQtaCnf(BigDecimal.valueOf(mArticolo.getQtaCnf()))
.setInitialQtaCnf(BigDecimal.valueOf(mArticolo.getQtaCnf()).setScale(5, RoundingMode.HALF_UP))
.setInitialNumCnf(UtilityBigDecimal.divide(BigDecimal.valueOf(mArticolo.getQtaOrd()), BigDecimal.valueOf(mArticolo.getQtaCnf())).setScale(0, RoundingMode.CEILING))
.setInitialQtaTot(BigDecimal.valueOf(mArticolo.getQtaOrd()));

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo;
import java.math.BigDecimal;
import java.math.RoundingMode;

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import dagger.Subcomponent;
@Subcomponent
public interface DialogSelectArtToOrderComponent {
@Subcomponent.Factory
interface Factory {
DialogSelectArtToOrderComponent create();
}
void inject(DialogSelectArtToOrderView DialogSelectArtView);
}

View File

@@ -0,0 +1,101 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class DialogSelectArtToOrderItemListModel<T> {
private String codMart;
private String descrizione;
private BigDecimal qtaOrd;
private String untMisOrd;
private String barcode;
private String codAlis;
private boolean isNew;
private T originalModel;
private BindableBoolean checked = new BindableBoolean(false);
public String getCodMart() {
return codMart;
}
public DialogSelectArtToOrderItemListModel<T> setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizione() {
return descrizione;
}
public DialogSelectArtToOrderItemListModel<T> setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public DialogSelectArtToOrderItemListModel<T> setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public String getUntMisOrd() {
return untMisOrd;
}
public DialogSelectArtToOrderItemListModel<T> setUntMisOrd(String untMisOrd) {
this.untMisOrd = untMisOrd;
return this;
}
public String getBarcode() {
return barcode;
}
public DialogSelectArtToOrderItemListModel<T> setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
public boolean isNew() {
return isNew;
}
public DialogSelectArtToOrderItemListModel<T> setNew(boolean aNew) {
isNew = aNew;
return this;
}
public T getOriginalModel() {
return originalModel;
}
public DialogSelectArtToOrderItemListModel<T> setOriginalModel(T originalModel) {
this.originalModel = originalModel;
return this;
}
public BindableBoolean getChecked() {
return checked;
}
public DialogSelectArtToOrderItemListModel<T> setChecked(BindableBoolean checked) {
this.checked = checked;
return this;
}
public String getCodAlis() {
return codAlis;
}
public DialogSelectArtToOrderItemListModel<T> setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogSelectArtToOrderComponent.class)
public class DialogSelectArtToOrderModule {
@Provides
DialogSelectArtToOrderViewModel providesDialogSelectArtNewViewModel() {
return new DialogSelectArtToOrderViewModel();
}
}

View File

@@ -0,0 +1,130 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
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.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
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.databinding.DialogSelectArtToOrderBinding;
import it.integry.integrywmsnative.databinding.DialogSelectArtToOrderItemModelBinding;
/**
* @noinspection rawtypes
*/
public class DialogSelectArtToOrderView extends BaseDialogFragment {
@Inject
DialogSelectArtToOrderViewModel mViewModel;
private DialogSelectArtToOrderBinding mBindings;
private Context mContext;
private final List<DialogSelectArtToOrderItemListModel<Object>> listArts;
private final RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm;
private final Runnable onAbort;
//Pass here all external parameters
public static DialogSelectArtToOrderView newInstance(List<DialogSelectArtToOrderItemListModel<Object>> listArts,
RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm,
Runnable onAbort) {
return new DialogSelectArtToOrderView(listArts, onConfirm, onAbort);
}
private DialogSelectArtToOrderView(List<DialogSelectArtToOrderItemListModel<Object>> listArts,
RunnableArgs<DialogSelectArtToOrderItemListModel> onConfirm,
Runnable onAbort) {
super();
this.listArts = listArts;
this.onConfirm = onConfirm;
this.onAbort = onAbort;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogSelectArtToOrderBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogSelectArtToOrderNewComponent()
.create()
.inject(this);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialog, which) -> {
final DialogSelectArtToOrderItemListModel<Object> selectedItem = Stream.of(listArts)
.filter(x -> x.getChecked().get())
.findFirstOrElse(null);
if (selectedItem != null)
this.onConfirm.run(selectedItem);
})
.setNegativeButton(R.string.abort, (dialog, which) -> {
if (this.onAbort != null) this.onAbort.run();
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.listArts.get(0).getChecked().set(true);
this.initRecyclerView();
}
private void initRecyclerView() {
var itemType = new Type<DialogSelectArtToOrderItemListModel, DialogSelectArtToOrderItemModelBinding>(R.layout.dialog_select_art_to_order__item_model, BR.row);
// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId()));
itemType.areContentsTheSame(DialogSelectArtToOrderItemListModel::equals);
itemType.onClick(x -> {
resetChecks();
x.getBinding().getRow().getChecked().set(true);
return null;
});
new LiveAdapter(listArts)
.map(DialogSelectArtToOrderItemListModel.class, itemType)
.into(this.mBindings.itemList);
}
private void resetChecks() {
for (var item : listArts) {
item.getChecked().set(false);
}
}
}

View File

@@ -0,0 +1,5 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.selectArtFromList;
public class DialogSelectArtToOrderViewModel {
}

View File

@@ -14,8 +14,15 @@ import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
@@ -30,6 +37,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaReposito
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.exception.ExpiredProductListException;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
@@ -107,6 +115,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
} else {
setGriglia(griglia);
setListaArticoli(listArticoli);
this.onGrigliaRetrieved();
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
@@ -117,6 +126,33 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString());
}
private void onGrigliaRetrieved() {
if (UtilityString.isNullOrEmpty(mGriglia.getCodAlis())) {
Map<String, Long> downloadedGrids = Stream.of(mListArticoli).collect(Collectors.groupingBy(ArticoloOrdinabileDTO::getCodAlis, Collectors.counting()));
if (downloadedGrids != null && !downloadedGrids.isEmpty()) {
List<String> gridsDetails = Stream.of(downloadedGrids)
.map((el) -> "<b>" + el.getKey() + ":</b> " + el.getValue() + " " + getResources().getQuantityString(R.plurals.available_articles, el.getValue().intValue()))
.toList();
DialogSimpleMessageView.makeInfoDialog(getText(R.string.grid_details).toString(),
Html.fromHtml(
String.format(getResources().getQuantityString(R.plurals.loaded_grids_message, (int) downloadedGrids.size()), downloadedGrids.size())
+ "<br /><br />" +
StringUtils.join(gridsDetails, "<br/>")),
null,
this::fetchOrders)
.show(requireActivity().getSupportFragmentManager(), "downloadedGridDetails");
} else {
fetchOrders();
}
} else {
fetchOrders();
}
}
private void setGriglia(Griglia griglia) {
mGriglia = griglia;
mBinding.fabNewOrder.setVisibility(View.VISIBLE);
@@ -127,12 +163,18 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
mBinding.descrLis.setText(griglia.getDescrLisa());
}
mBinding.descrDepo.setText(griglia.getDescrDepo());
fetchOrders();
}
private void setListaArticoli(List<ArticoloOrdinabileDTO> listArticoli) {
mListArticoli.clear();
mListArticoli.addAll(listArticoli);
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
this.mPvOrdiniAcquistoGrigliaViewModel.setDataCaricamentoListino(today);
mBinding.countArtLis.setText(String.valueOf(listArticoli.size()));
}
@@ -152,7 +194,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
mBinding.ordiniAEmptyView.setVisibility(ordini == null || ordini.size() <= 0 ? View.VISIBLE : View.GONE);
refreshRenderedOrdini(ordini);
mAdapter.updateItems(mRenderedOrderList);
if (mRenderedOrderList.size() <= 0 && mRedirectToNewOrder) {
if (mRenderedOrderList.isEmpty() && mRedirectToNewOrder) {
createNewOrder();
} else {
mRedirectToNewOrder = false;
@@ -172,6 +214,10 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
}
private void editOrdine(Ordine ordine) {
if (this.mPvOrdiniAcquistoGrigliaViewModel.isProductListSessionInvalid()) {
this.onError(new ExpiredProductListException());
return;
}
requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine, mListArticoli));
}
@@ -207,6 +253,10 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
}
public void createNewOrder() {
if (this.mPvOrdiniAcquistoGrigliaViewModel.isProductListSessionInvalid()) {
this.onError(new ExpiredProductListException());
return;
}
this.onLoadingStarted();
mPvOrdiniAcquistoGrigliaViewModel.createNewOrder(mGriglia, order -> {

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.pv_ordini_acquisto;
import java.util.Calendar;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
@@ -18,6 +20,8 @@ public class PVOrdiniAcquistoGrigliaViewModel {
private final OrdineRepository ordineRepository;
private final GrigliaRepository grigliaRepository;
private Calendar dataCaricamentoListino;
@Inject
public PVOrdiniAcquistoGrigliaViewModel(PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer,
ArticoloGrigliaRepository articoloGrigliaRepository,
@@ -45,4 +49,23 @@ public class PVOrdiniAcquistoGrigliaViewModel {
ordineRepository.delete(ordine, onSuccess, onFail);
}
public Calendar getDataCaricamentoListino() {
return dataCaricamentoListino;
}
public PVOrdiniAcquistoGrigliaViewModel setDataCaricamentoListino(Calendar dataCaricamentoListino) {
this.dataCaricamentoListino = dataCaricamentoListino;
return this;
}
public boolean isProductListSessionInvalid() {
Calendar today = Calendar.getInstance();
today.set(Calendar.MILLISECOND, 0);
today.set(Calendar.SECOND, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.HOUR_OF_DAY, 0);
return today.after(this.dataCaricamentoListino);
}
}

View File

@@ -23,6 +23,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinabileDTO;
import it.integry.integrywmsnative.core.exception.GridNotFoundException;
import it.integry.integrywmsnative.core.exception.GridNotSelectedException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@@ -36,6 +37,7 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
private DialogScanCodiceGrigliaBinding mBinding;
private int mBarcodeScannerIstanceID;
public boolean canIgnoreGrid;
private final RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> mOnDialogDismiss;
@@ -53,6 +55,7 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloOrdinabileDTO>> onDialogDismiss) {
super();
mOnDialogDismiss = onDialogDismiss;
canIgnoreGrid = SettingsManager.iDB().isFlagConsentiOrdineSenzaGriglia();
}
@NonNull
@@ -80,6 +83,12 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
}
public void ignore() {
if (!this.canIgnoreGrid) {
this.onError(new GridNotSelectedException());
return;
}
BarcodeManager.disable();
RunnableArgs<Exception> mOnError = exception -> {

View File

@@ -217,7 +217,8 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
mViewModel.init(
SettingsManager.i().getUser().getFullname(),
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
mCurrentGestione);
mCurrentGestione,
SettingsManager.iDB().isFlagGeneraDocumentoSpedizione());
}
@Override

View File

@@ -57,6 +57,7 @@ public class RettificaGiacenzeViewModel {
private String mCurrentUser;
private String mCurrentCodMdep;
private boolean mIsCreatedLU;
private boolean generaDocIfVendita;
private boolean mAnyEditDone = false;
@@ -74,10 +75,11 @@ public class RettificaGiacenzeViewModel {
}
public void init(String currentUser, String currentCodMdep, GestioneEnum defaultGestione) {
public void init(String currentUser, String currentCodMdep, GestioneEnum defaultGestione, boolean generaDocIfVendita) {
this.mCurrentUser = currentUser;
this.mCurrentCodMdep = currentCodMdep;
this.mDefaultGestione = defaultGestione;
this.generaDocIfVendita = generaDocIfVendita;
this.sendOnLoadingStarted();
@@ -352,7 +354,6 @@ public class RettificaGiacenzeViewModel {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
// if (!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
mtbColr
.setQtaCol(BigDecimal.ZERO)
.setNumCnf(BigDecimal.ZERO)
@@ -382,39 +383,6 @@ public class RettificaGiacenzeViewModel {
if (shouldCloseLU) closeLU(true, null);
}, this::sendError);
// } else {
// mtbColr
// .setQtaCol(qtaTot)
// .setQtaCnf(qtaCnf)
// .setNumCnf(numCnf);
//
// MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
// cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
//
// cloneMtbColt.setMtbColr(new ObservableArrayList<>());
//
// cloneMtbColt.getMtbColr().add(mtbColr);
//
// mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
// mtbColr
// .setDataCollo(value.getDataColloS())
// .setNumCollo(value.getNumCollo())
// .setGestione(value.getGestione())
// .setSerCollo(value.getSerCollo())
// .setRiga(value.getMtbColr().get(0).getRiga())
// .setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
// .setMtbAart(pickingObjectDTO.getMtbAart());
//
// mCurrentMtbColt.getMtbColr().add(mtbColr);
//
// this.mAnyEditDone = true;
//
// this.sendOnRowSaved();
// this.sendOnLoadingEnded();
//
// if (shouldCloseLU) closeLU(true, null);
// }, this::sendError);
// }
}
@@ -482,7 +450,7 @@ public class RettificaGiacenzeViewModel {
}
private void createDoc(MtbColt mtbColt, Runnable onComplete) {
if (!(mtbColt.getGestioneEnum() == GestioneEnum.VENDITA && mtbColt.getSegno() == -1)) {
if (!(mtbColt.getGestioneEnum() == GestioneEnum.VENDITA && mtbColt.getSegno() == -1) || !generaDocIfVendita) {
onComplete.run();
return;
}

View File

@@ -47,10 +47,13 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
@Inject
public AppContext appContext;
@Inject
public SystemRESTConsumer systemRESTConsumer;
@Inject
public DialogProgressView mCurrentProgress;
@Inject
public ExecutorService executorService;

View File

@@ -46,6 +46,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UntMisUtils;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
@@ -175,7 +176,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
setSupportActionBar(mBindings.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mFlagShowCodForn = SettingsManager.iDB().isShowCodFornSpedizione();
mDivideByGrpMerc = SettingsManager.iDB().isGroupShippingByCommodityGroup();
@@ -337,12 +338,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
qtaColWithdrawRows.addAndGet(row.getQtaCol());
});
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
if (!anyLUPresent) {
spedizioneListModel.setGroupTitle(!mEnableFakeGiacenza ? getString(R.string.picking_not_available) : "");
spedizioneListModel.setBadge2(getCommessa(x.getSitArtOrdDTO().getCodJcom()));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
if (UntMisUtils.shouldBeShowInColli(x.getMtbAart())) {
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
@@ -378,15 +378,19 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
cloneModel.setGroupTitle(String.format("%s: %s", getString(R.string.position_text), UtilityString.isNullOrEmpty(mtbColtToPick.getPosizione()) ? "N.A." : mtbColtToPick.getPosizione()));
MtbColr mtbColrToDispatch = mtbColtToPick.getMtbColr() != null && mtbColtToPick.getMtbColr().size() > 0 ? mtbColtToPick.getMtbColr().get(0) : null;
if (mtbColrToDispatch != null && !UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag())) {
cloneModel.setSubDescrizione1(String.format(getString(R.string.batch_lot_text), mtbColrToDispatch.getPartitaMag()));
cloneModel.setBadge2(mtbColrToDispatch.getCodJcom());
if (mtbColrToDispatch != null) {
if(!UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag()))
cloneModel.setSubDescrizione1(String.format(getString(R.string.batch_lot_text), mtbColrToDispatch.getPartitaMag()));
if (!UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getCodJcom())) {
cloneModel.setBadge2(getCommessa(mtbColrToDispatch.getCodJcom()));
}
}
cloneModel.setSourceMtbColr(mtbColrToDispatch);
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
if (UntMisUtils.shouldBeShowInColli(x.getMtbAart())) {
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
@@ -514,9 +518,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModel.setGroupTitle(groupTitle);
if (!anyLUPresent) {
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
spedizioneListModel.setBadge2(getCommessa(x.getSitArtOrdDTO().getCodJcom()));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
if (UntMisUtils.shouldBeShowInColli(x.getMtbAart())) {
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
@@ -547,9 +551,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
MtbColr mtbColrToDispatch = mtbColtToPick.getMtbColr() != null && mtbColtToPick.getMtbColr().size() > 0 ? mtbColtToPick.getMtbColr().get(0) : null;
if (mtbColrToDispatch != null && !UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag())) {
cloneModel.setSubDescrizione1(String.format(getString(R.string.batch_lot_text), mtbColrToDispatch.getPartitaMag()));
cloneModel.setBadge2(mtbColrToDispatch.getCodJcom());
if (mtbColrToDispatch != null) {
if (!UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag()))
cloneModel.setSubDescrizione1(String.format(getString(R.string.batch_lot_text), mtbColrToDispatch.getPartitaMag()));
cloneModel.setBadge2(getCommessa(mtbColrToDispatch.getCodJcom()));
}
cloneModel.setSourceMtbColr(mtbColrToDispatch);
@@ -632,6 +638,19 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
return sortedList;
}
private String getCommessa(String codJcom) {
var commessaMagazzino = SettingsManager.iDB().getCommessaMagazzino();
if(UtilityString.isNullOrEmpty(commessaMagazzino)) {
return UtilityString.isNull(codJcom, "Magazzino").toUpperCase();
} else {
if(commessaMagazzino.equalsIgnoreCase(codJcom) || codJcom == null)
return "Magazzino".toUpperCase();
else
return codJcom.toUpperCase();
}
}
private boolean isThereAnyItemToPick(List<PickingObjectDTO> dataList) {
return Stream.of(dataList)
.anyMatch(x -> !x.isHidden());

View File

@@ -588,7 +588,9 @@ public class SpedizioneViewModel {
private void executeMagazzinoAutomatico(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) {
var magazzinoAutomaticoPickableArts = Stream.of(Objects.requireNonNull(this.mPickingList.getValue()))
.filter(x -> Stream.of(x.getMtbColts()).anyMatch(y -> y.getPosizione() != null && y.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione())))
.filter(x -> Stream.of(x.getMtbColts()).anyMatch(y -> y.getPosizione() != null && y.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione())) &&
x.getSitArtOrdDTO() != null &&
UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaOrd(), BigDecimal.ZERO))
.toList();
var mtbAarts = Stream.of(magazzinoAutomaticoPickableArts)
@@ -609,6 +611,10 @@ public class SpedizioneViewModel {
.findFirst()
.orElse(null);
if (pickingObjectDTO == null) {
continue;
}
MagazzinoAutomaticoPickItemRequestDTO itemDto = new MagazzinoAutomaticoPickItemRequestDTO(selectedArt.getCodMart())
.setQtaTot(pickingObjectDTO.getSitArtOrdDTO().getQtaOrd())
.setNumCnf(pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd())
@@ -652,7 +658,12 @@ public class SpedizioneViewModel {
if (mEnableGiacenza) {
Stream.of(pickingList).forEach(pickingObjectDTO -> {
if (Stream.of(pickingObjectDTO.getMtbColts()).anyMatch(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) && x.getDataColloS().equals(scannedUL.getDataColloS()) && x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) && (scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE))) {
if (Stream.of(pickingObjectDTO.getMtbColts())
.anyMatch(x ->
Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
x.getDataColloS().equals(scannedUL.getDataColloS()) &&
x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) &&
(scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE))) {
matchPickingObject.add(pickingObjectDTO);
}
@@ -679,7 +690,13 @@ public class SpedizioneViewModel {
ObservableArrayList<MtbColr> cloneMtbColrs = (ObservableArrayList<MtbColr>) cloneMtbColt.getMtbColr().clone();
Stream.of(cloneMtbColt.getMtbColr()).filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getSitArtOrdDTO().getCodMart()) && UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getSitArtOrdDTO().getCodTagl()) && UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getSitArtOrdDTO().getCodCol()) && (!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), matchedObject.getSitArtOrdDTO().getPartitaMag()) || UtilityString.isNullOrEmpty(matchedObject.getSitArtOrdDTO().getPartitaMag())))).forEach(cloneMtbColrs::remove);
Stream.of(cloneMtbColt.getMtbColr())
.filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getSitArtOrdDTO().getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getSitArtOrdDTO().getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getSitArtOrdDTO().getCodCol()) &&
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), matchedObject.getSitArtOrdDTO().getPartitaMag()) ||
UtilityString.isNullOrEmpty(matchedObject.getSitArtOrdDTO().getPartitaMag()))))
.forEach(cloneMtbColrs::remove);
cloneMtbColt.setMtbColr(cloneMtbColrs);
@@ -1404,7 +1421,7 @@ public class SpedizioneViewModel {
filledMtbColts,
positionedMtbColts -> {
this.askPrint(shouldPrint, positionedMtbColts, () -> {
this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> {
Stream.of(positionedMtbColts)
.filter(x -> !this.mColliRegistrati.contains(x))
.forEach(x -> this.mColliRegistrati.add(x));

View File

@@ -119,7 +119,7 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
availableItems = new ArrayList<>();
availableItems = Stream.of(availableItems)
.filter(x -> UtilityDate.isAfterToday(x.getDataScad()))
.filter(x -> x.getDataScad() == null || UtilityDate.isAfterToday(x.getDataScad()))
.toList();
if(availableItems.isEmpty())
@@ -141,7 +141,7 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
var itemListCommessaNotMatchMatch = Stream.of(itemList)
.filter(dialogInfoSituazioneArticoloAvailableListItem -> !dialogInfoSituazioneArticoloAvailableListItem.isCommessaMatch())
.sortBy(x -> x.getDataScad())
.sortBy(x -> x.getDataScad() == null ? UtilityDate.getNow() : x.getDataScad())
.toList();

View File

@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
@@ -150,8 +151,18 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
holder.mBinding.freeQty.setVisibility(View.GONE);
}
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaEvasa()));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaTot()));
int cifreDec = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS;
if (pickingObjectDTO.getOriginalModel().getMtbAart() != null &&
pickingObjectDTO.getOriginalModel().getMtbAart().getMtbUntMis() != null &&
!pickingObjectDTO.getOriginalModel().getMtbAart().getMtbUntMis().isEmpty()) {
var mtbUntMis = pickingObjectDTO.getOriginalModel().getMtbAart().getMtbUntMis().get(0);
if (mtbUntMis.isFlagDig()) cifreDec = 0;
else cifreDec = Math.min(mtbUntMis.getCifreDec().intValue(), CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS);
}
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaEvasa(), cifreDec));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaTot(), cifreDec));
holder.mBinding.untMis.setText(pickingObjectDTO.getUntMis());
holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getUntMis()) ? View.GONE : View.VISIBLE);

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.view.dialogs;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -19,14 +20,19 @@ public class DialogAskActionView extends BaseDialogFragment {
private final Runnable mOnEditSelected;
private final Runnable mOnDeleteSelected;
private boolean runOnDismissAction = true;
private final Runnable mOnDismiss;
public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete) {
return new DialogAskActionView(title, subtitle, onEdit, onDelete);
public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete, Runnable onDismiss) {
return new DialogAskActionView(title, subtitle, onEdit, onDelete, onDismiss);
}
private DialogAskActionView(String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected) {
public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete) {
return newInstance(title, subtitle, onEdit, onDelete, null);
}
private DialogAskActionView(String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected, Runnable onDismiss) {
super();
mTitle = title;
@@ -34,6 +40,7 @@ public class DialogAskActionView extends BaseDialogFragment {
mOnEditSelected = onEditSelected;
mOnDeleteSelected = onDeleteSelected;
mOnDismiss = onDismiss;
}
@NonNull
@@ -53,14 +60,23 @@ public class DialogAskActionView extends BaseDialogFragment {
}
public void onEdit() {
runOnDismissAction = false;
dismiss();
mOnEditSelected.run();
}
public void onDelete() {
runOnDismissAction = false;
dismiss();
mOnDeleteSelected.run();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
if (runOnDismissAction && mOnDismiss != null) {
mOnDismiss.run();
}
super.onDismiss(dialog);
}
}

View File

@@ -0,0 +1,44 @@
package it.integry.integrywmsnative.view.dialogs.available_items;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogAvailableItemListModel {
private String codMart;
private String descrizioneEstesa;
private boolean aggiunto;
public boolean isAggiunto() {
return aggiunto;
}
public DialogAvailableItemListModel setAggiunto(boolean aggiunto) {
this.aggiunto = aggiunto;
return this;
}
public String getCodMart() {
return codMart;
}
public DialogAvailableItemListModel setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDescrizioneEstesa() {
return descrizioneEstesa;
}
public DialogAvailableItemListModel setDescrizioneEstesa(String descrizioneEstesa) {
this.descrizioneEstesa = descrizioneEstesa;
return this;
}
public static DialogAvailableItemListModel fromMtbAart(MtbAart mtbAart) {
return new DialogAvailableItemListModel()
.setCodMart(mtbAart.getCodMart())
.setDescrizioneEstesa(mtbAart.getDescrizioneEstesa());
}
}

View File

@@ -0,0 +1,65 @@
package it.integry.integrywmsnative.view.dialogs.available_items;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.List;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class DialogAvailableItemsView extends BaseDialogFragment {
private final List<DialogAvailableItemListModel> mListaArts;
public DialogAvailableItemsView(List<DialogAvailableItemListModel> listaArts) {
super();
this.mListaArts = listaArts;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
var binding = DialogChooseArtFromListaArtBinding.inflate(LayoutInflater.from(requireContext()));
binding.titleText.setText(R.string.articoli_disponibili);
initRecyclerView(binding, mListaArts);
var alertDialog = new MaterialAlertDialogBuilder(requireContext())
.setView(binding.getRoot())
.setCancelable(false)
.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(this);
return alertDialog;
}
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<DialogAvailableItemListModel> dataset) {
binding.itemsList.setHasFixedSize(true);
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider));
binding.itemsList.addItemDecoration(itemDecorator);
new LiveAdapter(dataset, BR.item)
.map(DialogAvailableItemListModel.class, R.layout.dialog_available_intventario_items__item_model)
.into(binding.itemsList);
}
}

View File

@@ -31,7 +31,7 @@ public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter<Di
}
public void bind(MtbAart mtbAart) {
mViewDataBinding.setMtbAart(mtbAart);
mViewDataBinding.setItem(mtbAart);
mViewDataBinding.executePendingBindings();
}
}

View File

@@ -59,13 +59,13 @@ public class DialogChooseArtFromListaArtsView extends BaseDialogFragment {
}
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbAart> dataset) {
binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false);
binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true);
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(requireContext()));
binding.itemsList.setNestedScrollingEnabled(false);
binding.itemsList.setHasFixedSize(true);
binding.itemsList.setLayoutManager(new LinearLayoutManager(requireContext()));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireContext(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator);
binding.itemsList.addItemDecoration(itemDecorator);
IRecyclerItemClicked<MtbAart> onItemClickListener = (item, position) -> {
if (mOnItemChoosed != null) {
@@ -77,7 +77,7 @@ public class DialogChooseArtFromListaArtsView extends BaseDialogFragment {
DialogChooseArtFromListaArtsAdapter mCurrentAdapter = new DialogChooseArtFromListaArtsAdapter(
requireContext(), dataset, this.mEnableSelection ? onItemClickListener : null);
binding.dialogChooseArtFromListaArtMainList.setAdapter(mCurrentAdapter);
binding.itemsList.setAdapter(mCurrentAdapter);
}
}

View File

@@ -158,8 +158,11 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment implemen
mBindings.listaArts.setHasFixedSize(true);
this.mtbColrItemModels = Stream.of(this.inputMtbColrList)
.map(x -> new DialogChooseArtsFromMtbColrListItemModel()
.setMtbColr(x))
.map(x -> {
x.setUntMis(x.getMtbAart() != null && x.getMtbAart().getFirstUntMis() != null ? x.getMtbAart().getFirstUntMis().getUntMis() : null);
return new DialogChooseArtsFromMtbColrListItemModel()
.setMtbColr(x);
})
.toList();
this.hiddenMtbColrItemModels.setValue(this.mtbColrItemModels);
@@ -294,12 +297,12 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment implemen
this.articoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) {
this.mBindings.mainSearch.setQuery(barcodeProd, false);
MtbAart articolo = mtbAartList.get(0);
this.mBindings.mainSearch.setQuery(articolo.getCodMart(), false);
this.searchArtInList(mtbAartList.get(0), ean128Model);
onLoadingEnded();
} else {
DialogCommon.showNoArtFoundDialog(mContext, this::onLoadingEnded);

View File

@@ -32,7 +32,7 @@ public class DialogChooseArtFromListaMtbColrAdapter extends RecyclerView.Adapter
}
public void bind(MtbAart mtbAart) {
mViewDataBinding.setMtbAart(mtbAart);
mViewDataBinding.setItem(mtbAart);
mViewDataBinding.executePendingBindings();
}
}

View File

@@ -55,18 +55,18 @@ public class DialogChooseArtFromListaMtbColrView {
}
private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List<MtbColr> dataset) {
binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false);
binding.itemsList.setNestedScrollingEnabled(false);
binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true);
binding.itemsList.setHasFixedSize(true);
binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext));
binding.itemsList.setLayoutManager(new LinearLayoutManager(currentContext));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(currentContext, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider));
binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator);
binding.itemsList.addItemDecoration(itemDecorator);
currentAdapter = new DialogChooseArtFromListaMtbColrAdapter(currentContext, dataset, onItemClicked);
binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter);
binding.itemsList.setAdapter(currentAdapter);
}
private IRecyclerItemClicked<MtbColr> onItemClicked = (item, position) -> {

View File

@@ -44,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
@@ -513,7 +514,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
BigDecimal taraTot = articolo.getTaraKg() != null ? this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()) : BigDecimal.ZERO;
this.currentTaraTot.set(taraTot);
this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot));
this.currentPesoLordo.set(UtilityBigDecimal.getGreaterBetween(this.mViewModel.getQtaTot(), BigDecimal.ZERO).add(taraTot));
this.flagShowCnfToTakeLabel.set(false);
}

View File

@@ -483,7 +483,8 @@ public class DialogInputQuantityV2ViewModel {
return false;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd)) {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
return false;
@@ -495,7 +496,8 @@ public class DialogInputQuantityV2ViewModel {
return false;
}
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable)) {
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
return false;

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="96dp"
android:height="96dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M6,2C4.906,2 4,2.906 4,4L4,20C4,21.094 4.906,22 6,22L18,22C19.094,22 20,21.094 20,20L20,8L14,2L6,2zM6,4L13,4L13,9L18,9L18,20L6,20L6,4zM8,12L8,14L16,14L16,12L8,12zM8,16L8,18L16,18L16,16L8,16z"
android:fillColor="#5B5B5B"/>
</vector>

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M5,1C3.9,1 3,1.9 3,3L3,17L5,17L5,3L17,3L17,1L5,1zM9,5C7.9,5 7,5.9 7,7L7,21C7,22.1 7.9,23 9,23L20,23C21.1,23 22,22.1 22,21L22,10L17,5L9,5zM9,7L16,7L16,11L20,11L20,21L9,21L9,7zM11,13L11,15L18,15L18,13L11,13zM11,17L11,19L18,19L18,17L11,17z"
android:fillColor="#5B5B5B"/>
</vector>

View File

@@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M21.2,12l0.6,-1.9c0.5,-1.4 -0.2,-3 -1.5,-3.7l-1.8,-0.9l-0.9,-1.8c-0.7,-1.3 -2.2,-2 -3.7,-1.5L12,2.8l-1.9,-0.6c-1.4,-0.5 -3,0.2 -3.7,1.5L5.5,5.5L3.7,6.4c-1.3,0.7 -2,2.2 -1.5,3.7L2.8,12l-0.6,1.9c-0.5,1.4 0.2,3 1.5,3.7l1.8,0.9l0.9,1.8c0.7,1.3 2.3,2 3.7,1.5l1.9,-0.6l1.9,0.6c1.4,0.5 3,-0.2 3.7,-1.5l0.9,-1.8l1.8,-0.9c1.3,-0.7 2,-2.2 1.5,-3.7L21.2,12zM11,16.4l-3.7,-3.7l1.4,-1.4l2.3,2.3l5.3,-5.3l1.4,1.4L11,16.4z"
android:fillColor="#2e7d32"/>
<path
android:pathData="M11,16.4l-3.7,-3.7l1.4,-1.4l2.3,2.3l5.3,-5.3l1.4,1.4z"
android:fillColor="#FFFFFF"/>
</vector>

View File

@@ -71,136 +71,158 @@
</it.integry.integrywmsnative.ui.ElevatedToolbar>
<RelativeLayout
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/gray_detail_background_round16"
android:padding="16dp">
android:layout_margin="12dp"
app:cardCornerRadius="16dp"
app:cardElevation="4dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_toStartOf="@id/info_arts_button"
android:layout_alignParentStart="true">
android:background="@color/colorPrimary"
android:orientation="horizontal"
android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/document_label"
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/order_identifier"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
app:binding="@{view.documentHeader}"
tools:text="#documentId" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/doc_rif_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/document_rif_label"
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/document_rif"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
app:binding="@{view.documentRifHeader}"
tools:text="#documentId" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/supplier_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fornitore"
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_anag"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@android:color/black"
android:textStyle="italic"
app:binding="@{view.codAnag}"
tools:text="F000 - 01" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="16dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_document_outline"
android:tint="@color/white" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginTop="2dp"
android:layout_toStartOf="@id/loaded_arts_info_layout"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxDashboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:binding="@{view.documentHeader}"
android:textColor="@android:color/white"
tools:text="670" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/loaded_arts_info_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:orientation="horizontal"
app:singleClick="@{() -> view.showInfoArtDialog()}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(viewModel.productsList.size())}"
tools:text="10250" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="articoli" />
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_black_barcode_scanner"
android:tint="@color/white" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/prod_count"
android:textColor="@android:color/black" />
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/count_art_ord"
style="@style/AppTheme.NewMaterial.Text.Small"
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Rif:" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="Non definito"
android:textStyle="italic"
app:visibility="@{view.documentRifHeader.get().empty}" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
app:binding="@{view.documentRifHeader}"
app:reverse_visibility="@{view.documentRifHeader.get().empty}" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@android:color/black"
android:textStyle="bold"
app:binding="@{view.prodsCount}"
tools:text="10" />
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Fornitore:" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="Non definito"
android:textStyle="italic"
app:visibility="@{view.codAnag.get().empty}" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
app:binding="@{view.codAnag}"
app:reverse_visibility="@{view.codAnag.get().empty}" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/info_arts_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:src="@drawable/ic_information_outline_24dp"
app:singleClick="@{() -> view.showInfoArtDialog()}" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/document_rows_list"
@@ -209,7 +231,9 @@
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp"
android:paddingEnd="2dp" />
android:paddingEnd="2dp"
tools:itemCount="5"
tools:listitem="@layout/activity_contab_doc_interno_row__list_single_item" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/scan_art_spinner"

View File

@@ -163,7 +163,8 @@
app:layout_constraintTop_toBottomOf="@id/header_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
app:layout_constraintBottom_toBottomOf="parent"
tools:listitem="@layout/fragment_pv_articoli_ordine_acquisto__list_single_item" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/scan_art_spinner"
@@ -266,7 +267,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable
name="item"
type="it.integry.integrywmsnative.view.dialogs.available_items.DialogAvailableItemListModel" />
</data>
<RelativeLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:orientation="vertical"
android:paddingBottom="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/already_inventariato"
android:text="@{item.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
android:layout_marginTop="8dp"
tools:text="COD MART" />
<RelativeLayout
android:id="@+id/already_inventariato"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginTop="4dp"
android:orientation="horizontal"
android:visibility="@{item.aggiunto ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/already_inventariato_text"
style="@style/AppTheme.NewMaterial.Text.ExtraSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="-12dp"
android:layout_toEndOf="@id/already_inventariato_icon"
android:paddingEnd="4dp"
android:background="@drawable/badge_round_corner_without_padding"
android:backgroundTint="@color/green_800"
android:gravity="center_vertical"
android:paddingStart="12dp"
android:text="Aggiunto"
android:textColor="@android:color/white" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/already_inventariato_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_verified_account__green_800" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/cod_mart_label"
android:ellipsize="end"
android:text="@{item.descrizioneEstesa}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
</RelativeLayout>
</layout>

View File

@@ -35,9 +35,11 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/dialog_choose_art_from_lista_art__main_list"
android:id="@+id/items_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/dialog_choose_art_from_lista_art__item_model"
tools:itemCount="5"/>

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