Compare commits

...

60 Commits

Author SHA1 Message Date
f03fe78ed3 Finish v1.38.00(410) 2024-01-23 11:16:14 +01:00
77cf6ac4db -> v1.38.00 (410) 2024-01-23 11:16:08 +01:00
48d1a34c52 Merge remote-tracking branch 'origin/develop' into develop 2024-01-23 11:14:46 +01:00
258f150dbb Fix in accettazione ordini di produzione: venivano raggruppati gli ordini di lavoro sotto il primo ordine trovato 2024-01-23 11:14:15 +01:00
14783dfef5 Fix codMdep in chiusura ul 2024-01-22 15:32:40 +01:00
e62e5d11f0 Impedito prelevamento merce posizionata su depositi diversi 2024-01-19 17:27:38 +01:00
648d908e95 In rettifica giacenze passo lista mtbaart in caso di ean128 2024-01-17 12:11:44 +01:00
db3eb1b062 Aggiunto nella sezione Approvvigionamento avanti elenco degli ordini e filtro per numOrd 2024-01-17 09:14:44 +01:00
fb2bed2dbf Fix per Tuidi 2024-01-16 11:54:45 +01:00
f45010650a Finish v1.37.01(409) 2024-01-15 13:36:44 +01:00
6022cfea1f Finish v1.37.01(409) 2024-01-15 13:36:43 +01:00
1ceb8c9cf9 -> v1.37.01 (409) 2024-01-15 13:36:34 +01:00
3c86db62c0 Fix per Tuidi 2024-01-15 13:34:38 +01:00
49687efc16 Finish v1.37.00(408) 2024-01-12 13:15:31 +01:00
62835878a6 Finish v1.37.00(408) 2024-01-12 13:15:30 +01:00
02cd92f2dd -> v1.37.00 (408) 2024-01-12 12:42:51 +01:00
1014043c53 Completato versamento materiale su ordine 2024-01-12 12:39:31 +01:00
bd087fbf73 Finish v1.36.14(407) 2024-01-10 11:05:29 +01:00
12a1ce1654 Finish v1.36.14(407) 2024-01-10 11:05:27 +01:00
fbb7d414f1 -> v1.36.14 (407) 2024-01-10 11:05:22 +01:00
a09ed92945 Aggiunto flag in setup per permettere o meno il recupero delle UL in accettazione bolla 2024-01-10 11:02:56 +01:00
0194a5a49d Finish v1.36.13(406) 2024-01-09 18:43:35 +01:00
112110e10f Finish v1.36.13(406) 2024-01-09 18:43:34 +01:00
8045d8b4e9 -> v1.36.13 (406) 2024-01-09 18:43:29 +01:00
d839d94d34 Aggiunto parametro ID in fase di SaveTerminalino in Documenti Interni 2024-01-09 18:42:42 +01:00
5728481a94 Migliorie processBarcode in PVOrdineAcquistoEditActivity 2024-01-09 18:23:13 +01:00
4b1632c265 Probabile fix per popup caricamento in PVOrdineAcquistoEditActivity 2024-01-09 18:06:06 +01:00
b95863d66d Sostituito fab in doc interni edit form con Material3 2024-01-09 18:01:29 +01:00
2e360e8104 Aggiunta la cancellazione delle udc create 2024-01-09 15:51:15 +01:00
7c52a692e3 Merge remote-tracking branch 'origin/develop' into develop 2024-01-08 12:05:17 +01:00
17e3b8856c Inserendo il PLU in fase di inventario entra in modifica quantità 2024-01-08 12:05:12 +01:00
550cf3506e AGP Update 2024-01-08 10:20:18 +01:00
243d0d1d30 Finish v1.36.12(405) 2024-01-05 18:25:59 +01:00
98649e3a42 Finish v1.36.12(405) 2024-01-05 18:25:59 +01:00
9dabbee1c7 -> v1.36.12 (405) 2024-01-05 18:25:52 +01:00
1c9f4de437 Fix null point in approvvigionamento linee 2024-01-02 16:26:02 +01:00
b6bd8d5e01 Finish v1.36.11(404) 2023-12-19 16:09:23 +01:00
502ff6f684 Finish v1.36.11(404) 2023-12-19 16:09:23 +01:00
50e58446b4 -> v1.36.11 (404) 2023-12-19 16:08:57 +01:00
f8df1ffa96 Fix assegnazione lotto in export documenti interni 2023-12-19 16:04:05 +01:00
adf80ae3f5 Finish v1.36.10(403) 2023-12-15 15:31:32 +01:00
d81f623ee6 Finish v1.36.10(403) 2023-12-15 15:31:30 +01:00
84c6b7099b -> v1.36.10 (403) 2023-12-15 15:31:19 +01:00
965a60b6e8 Cambiato fab button in accettazione bolla 2023-12-15 12:01:24 +01:00
4ba1b847e7 Fix su tara non presente in anagrafica articolo. Cambiato servizio di retrieve by codMart. 2023-12-15 10:16:44 +01:00
f5ad8e8b64 Merge tag 'v1.36.09(402)' into develop
Finish v1.36.09(402)
2023-12-13 15:56:58 +01:00
4863b31bb6 Finish v1.36.09(402) 2023-12-13 15:56:58 +01:00
8411b0fc17 Fix documenti interni nullpoint 2023-12-13 15:56:30 +01:00
6541f17555 Fix warning partita scaduta e blocco per partita inattiva 2023-12-13 10:13:16 +01:00
143a6c9e9c Aggiunti codici e descrizioni di gruppo e sotto gruppo merceologico in approvvigionamento linee 2023-12-06 15:05:13 +01:00
8ef216318e Finish v1.36.08(401) 2023-12-04 17:01:29 +01:00
946d3e6593 Finish v1.36.08(401) 2023-12-04 17:01:28 +01:00
0bdc3a0638 -> v1.36.08 (401) 2023-12-04 17:01:17 +01:00
49782755bc Finish RemoveSetupCheckFornitore 2023-12-04 16:41:34 +01:00
2c5fb3ba48 Merge branch 'develop' into feature/RemoveSetupCheckFornitore 2023-12-04 16:41:13 +01:00
bf732a1182 Aggiunte note in colli 2023-12-04 16:40:08 +01:00
a73ecc1e81 Implementate nuove logiche picking libero per scarichi di lavorazione 2023-12-01 17:00:20 +01:00
818351f1d0 Rimossa setup checkForniore e fatto controllo con dati passati dai servizi 2023-11-30 15:17:31 +01:00
27577d10cf Completato refactoring DialogInfoAggiuntiveLU 2023-11-28 10:38:09 +01:00
09dd2ef31e Finish v1.36.07(400) 2023-11-27 09:55:52 +01:00
121 changed files with 2805 additions and 1073 deletions

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

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AppInsightsSettings">
<option name="selectedTabId" value="Android Vitals" />
</component>
</project>

26
.idea/deploymentTargetDropDown.xml generated Normal file
View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<value>
<entry key="Prod_Android.WMS.app">
<State>
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="20119B1E55" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-01-15T11:45:15.850312500Z" />
</State>
</entry>
<entry key="app">
<State />
</entry>
</value>
</component>
</project>

View File

@@ -9,6 +9,7 @@
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="false" />

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 400
def appVersionName = '1.36.07'
def appVersionCode = 410
def appVersionName = '1.38.00'
signingConfigs {
release {
@@ -34,7 +34,7 @@ android {
defaultConfig {
applicationId "it.integry.integrywmsnative"
minSdkVersion 21
targetSdkVersion 33
targetSdkVersion 34
versionCode appVersionCode
versionName appVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -88,11 +88,11 @@ android {
abortOnError false
}
namespace 'it.integry.integrywmsnative'
compileSdk 33
compileSdk 34
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations'
@@ -113,10 +113,10 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.9.0'
implementation 'com.google.android.material:material:1.10.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation('androidx.preference:preference-ktx:1.2.1') {
exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel'
@@ -152,7 +152,7 @@ dependencies {
implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM
def room_version = "2.5.2"
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

View File

@@ -104,6 +104,8 @@ import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetM
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalModule;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdComponent;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent;
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent;
@@ -114,7 +116,8 @@ import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.Di
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotModule;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialogComponent;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUComponent;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUModule;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdComponent;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUComponent;
@@ -195,7 +198,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DialogBindProductBarcodeWithPackageModule.class,
DialogAskUnknownBarcodeNotesModule.class,
ProdVersamentoMaterialeInBufferModule.class,
DialogInputQuantityToReturnModule.class
DialogInputQuantityToReturnModule.class,
DialogInfoAggiuntiveLUModule.class,
DialogAskLineaProdModule.class
})
public interface MainApplicationComponent {
@@ -281,8 +286,6 @@ public interface MainApplicationComponent {
DocInterniEditFormComponent.Factory docInterniEditFormComponent();
InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent();
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
DialogPrintOrderSSCCListComponent.Factory dialogPrintOrderSSCCListComponent();
@@ -329,6 +332,10 @@ public interface MainApplicationComponent {
DialogInputQuantityToReturnComponent.Factory dialogInputQuantityToReturnComponent();
DialogInfoAggiuntiveLUComponent.Factory dialogInfoAggiuntiveLUComponent();
DialogAskLineaProdComponent.Factory dialogAskLineaProdComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.class_router.configs;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoFragment;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.MainAccettazioneOrdiniElencoFragment;
import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniFragment;
@@ -85,7 +86,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleText(R.string.free_picking)
.setTitleIcon(R.drawable.ic_dashboard_picking_libero)
.setDrawerIcon(R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.VENDITA)))
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(R.string.free_picking, GestioneEnum.VENDITA, SettingsManager.iDB().isFlagAskClienteInPickingLibero(), false)))
.addItem(new MenuItem()
.setID(R.id.nav_resi_cliente)
@@ -121,7 +122,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleText(R.string.free_lav_picking)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_libero)
.setDrawerIcon(R.drawable.ic_black_barcode_scanner)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE)))
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(R.string.free_lav_picking, GestioneEnum.LAVORAZIONE, SettingsManager.iDB().isFlagAskClienteInPickingLibero(), false)))
.addItem(new MenuItem()
.setID(R.id.nav_prod_posizionamento_da_ord)
@@ -170,6 +171,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdVersamentoMaterialeInBufferFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_versamento_su_ordine)
.setCodMenu("MG068")
.setTitleText(R.string.prod_versamento_su_ordine_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_su_ord)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(R.string.prod_versamento_su_ordine_title_fragment, GestioneEnum.LAVORAZIONE, false, true)))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)

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 InvalidCodMdepException extends Exception {
public InvalidCodMdepException() {
super(UtilityResources.getString(R.string.invalid_codmdep));
}
}

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 class InvalidLineaProdBarcodeException extends Exception {
public InvalidLineaProdBarcodeException() {
super(UtilityResources.getString(R.string.no_result_from_linea_prod_barcode));
}
public InvalidLineaProdBarcodeException(String barcode) {
super(UtilityResources.getString(R.string.no_result_from_linea_prod_barcode) + " (" + barcode + ")");
}
}

View File

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

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.model.dto;
import java.util.Date;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
public class StatoArticoloDTO {
private String codMart;
@@ -17,7 +19,7 @@ public class StatoArticoloDTO {
private Integer ggUtili;
private Integer statoArt;
private StatoPartitaMag statoArt;
public String getCodMart() {
return codMart;
@@ -82,11 +84,11 @@ public class StatoArticoloDTO {
return this;
}
public Integer getStatoArt() {
public StatoPartitaMag getStatoArt() {
return statoArt;
}
public StatoArticoloDTO setStatoArt(Integer statoArt) {
public StatoArticoloDTO setStatoArt(StatoPartitaMag statoArt) {
this.statoArt = statoArt;
return this;
}

View File

@@ -2,9 +2,10 @@ package it.integry.integrywmsnative.core.model.secondary;
public enum StatoPartitaMag {
IN_SCADENZA(1),
SCADUTO(2),
NON_IN_SCADENZA(3);
SCADUTO(1),
IN_SCADENZA(2),
NON_IN_SCADENZA(3),
DISATTIVO(4);
private final int text;

View File

@@ -78,14 +78,12 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
.setCodMarts(codMarts))
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> {
onComplete.run(response.body().getEntityList());
}, onFailed);
public void onResponse(Call<ServiceRESTResponse<List<MtbAart>>> call, Response<ServiceRESTResponse<List<MtbAart>>> response) {
analyzeAnswer(response, "getByCodMart", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbAart>> call, Throwable t) {
public void onFailure(Call<ServiceRESTResponse<List<MtbAart>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
@@ -112,26 +110,9 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
public void getByCodMart(String codMartToFind, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getByCodMart(
new RetrieveArticoloByCodMartRequestDTO()
.setCodMarts(Collections.singletonList(codMartToFind)))
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> {
if (response.body().getEntityList() != null && !response.body().getEntityList().isEmpty()) {
onComplete.run(response.body().getEntityList().get(0));
} else onComplete.run(null);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbAart>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
getByCodMarts(Collections.singletonList(codMartToFind), artList -> {
onComplete.run(artList != null && !artList.isEmpty() ? artList.get(0) : null);
}, onFailed);
}

View File

@@ -21,7 +21,7 @@ public interface ArticoloRESTConsumerService {
Call<ServiceRESTResponse<SearchArticoloByBarcodeResponseDTO>> searchByBarcode(@Body() SearchArticoloByBarcodeRequestDTO searchArticoloByBarcodeRequest);
@POST("wms/articolo/retrieveByCodMart")
Call<ServiceRESTResponse<MtbAart>> getByCodMart(@Body RetrieveArticoloByCodMartRequestDTO retrieveArticoloByCodMartRequest);
Call<ServiceRESTResponse<List<MtbAart>>> getByCodMart(@Body RetrieveArticoloByCodMartRequestDTO retrieveArticoloByCodMartRequest);
@POST("wms/articolo/updateBarcodeImballo")
Call<ServiceRESTResponse<Void>> updateBarcodeImballo(@Body UpdateBarcodeImballoRequestDTO updateBarcodeImballoRequest);

View File

@@ -18,6 +18,7 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
@@ -696,6 +697,11 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public void printUL(PrintULRequestDTO printULRequestDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
if (BuildConfig.DEBUG) {
onComplete.run();
return;
}
ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
colliMagazzinoRESTConsumerService.printUL(printULRequestDTO)

View File

@@ -64,10 +64,10 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
}
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getOrdiniLavorazione(String flagEvaso, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(UtilityDate.formatDate(dateStart, UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH), flagEvaso, codJfas)
mesRESTConsumerService.getOrdiniLavorazione(flagEvaso)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {

View File

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

View File

@@ -0,0 +1,22 @@
package it.integry.integrywmsnative.core.rest.deserializer;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import java.lang.reflect.Type;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
public class StatoPartitaMagDeserializer implements JsonDeserializer<StatoPartitaMag> {
@Override
public StatoPartitaMag deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json.isJsonNull()) {
return null;
}
int text = json.getAsInt();
return StatoPartitaMag.from(text);
}
}

View File

@@ -10,7 +10,11 @@ public class CreateUDSRequestDTO {
private Integer numCollo;
private String serCollo;
private int causaleCollo;
private String codJfas;
private String codAnag;
private String codVdes;
private String rifOrd;
private boolean orderRequired;
private List<CreateUDSRequestOrderDTO> orders;
public String getCodMdep() {
@@ -67,6 +71,51 @@ public class CreateUDSRequestDTO {
return this;
}
public String getCodJfas() {
return codJfas;
}
public CreateUDSRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getCodAnag() {
return codAnag;
}
public CreateUDSRequestDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodVdes() {
return codVdes;
}
public CreateUDSRequestDTO setCodVdes(String codVdes) {
this.codVdes = codVdes;
return this;
}
public String getRifOrd() {
return rifOrd;
}
public CreateUDSRequestDTO setRifOrd(String rifOrd) {
this.rifOrd = rifOrd;
return this;
}
public boolean isOrderRequired() {
return orderRequired;
}
public CreateUDSRequestDTO setOrderRequired(boolean orderRequired) {
this.orderRequired = orderRequired;
return this;
}
public List<CreateUDSRequestOrderDTO> getOrders() {
return orders;
}

View File

@@ -0,0 +1,19 @@
package it.integry.integrywmsnative.core.rest.serializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class StatoPartitaMagSerializer implements JsonSerializer<StatoPartitaMag> {
@Override
public JsonElement serialize(StatoPartitaMag src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.getText());
}
}

View File

@@ -40,7 +40,6 @@ public class DBSettingsModel {
private boolean flagOrdinaArticoliOnScan;
private boolean flagConsentiFuoriPianoLogistico;
private boolean flagConsentiOrdineSenzaGriglia;
private String docInterniCheckFornitore;
private String produzioneDefaultCodAnag;
private boolean flagPrintPackingListOnOrderClose;
private boolean flagPrintEtichetteOnOrderClose;
@@ -55,6 +54,7 @@ public class DBSettingsModel {
private boolean notifyLotStatus = false;
private boolean groupShippingByCommodityGroup = true;
private boolean groupPoductionByCommodityGroup;
private boolean showCodFornSpedizione = true;
private boolean flagCanCreateInventario = true;
private boolean flagCanAddUnknownItemsInventario = true;
@@ -69,6 +69,7 @@ public class DBSettingsModel {
private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false;
private boolean flagEnableFastPickAccettazioneBolla = false;
private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false;
private boolean flagAllowULRecoverAccettazioneBolla = true;
private boolean flagOverflowQuantityWarning = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
@@ -332,15 +333,6 @@ public class DBSettingsModel {
return this;
}
public String getDocInterniCheckFornitore() {
return docInterniCheckFornitore;
}
public DBSettingsModel setDocInterniCheckFornitore(String docInterniCheckFornitore) {
this.docInterniCheckFornitore = docInterniCheckFornitore;
return this;
}
public boolean isFlagAccettazioneUseQtaOrd() {
return flagAccettazioneUseQtaOrd;
}
@@ -558,6 +550,15 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagAllowULRecoverAccettazioneBolla() {
return flagAllowULRecoverAccettazioneBolla;
}
public DBSettingsModel setFlagAllowULRecoverAccettazioneBolla(boolean flagAllowULRecoverAccettazioneBolla) {
this.flagAllowULRecoverAccettazioneBolla = flagAllowULRecoverAccettazioneBolla;
return this;
}
public boolean isFlagOverflowQuantityWarning() {
return flagOverflowQuantityWarning;
}
@@ -566,4 +567,13 @@ public class DBSettingsModel {
this.flagOverflowQuantityWarning = flagOverflowQuantityWarning;
return this;
}
public boolean isGroupPoductionByCommodityGroup() {
return groupPoductionByCommodityGroup;
}
public DBSettingsModel setGroupPoductionByCommodityGroup(boolean groupPoductionByCommodityGroup) {
this.groupPoductionByCommodityGroup = groupPoductionByCommodityGroup;
return this;
}
}

View File

@@ -272,6 +272,12 @@ public class SettingsManager {
.setSection("PRODUZIONE")
.setKeySection("FILTER_FORNTIORE_PROD")
.setSetter(dbSettingsModelIstance::setFilterFornitoreProd));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FLAG_GROUP_BY_GRP_MERC")
.setSetter(dbSettingsModelIstance::setGroupPoductionByCommodityGroup)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@@ -334,11 +340,6 @@ public class SettingsManager {
.setSection("ORDINI_A")
.setKeySection("FLAG_CONSENTI_ORDINE_SENZA_GRIGLIA")
.setSetter(dbSettingsModelIstance::setFlagConsentiOrdineSenzaGriglia));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PVM")
.setSection("DOC_INTERNI")
.setKeySection("CHECK_FORNITORE")
.setSetter(dbSettingsModelIstance::setDocInterniCheckFornitore));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE")
@@ -470,6 +471,12 @@ public class SettingsManager {
.setKeySection("FLAG_DISABLE_MANDATORY_TRACCIABILITA")
.setSetter(dbSettingsModelIstance::setFlagDisableMandatoryTracciabilitaAccettazioneBolla)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ALLOW_UL_RECOVER")
.setSetter(dbSettingsModelIstance::setFlagAllowULRecoverAccettazioneBolla)
.setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")

View File

@@ -1,7 +1,12 @@
package it.integry.integrywmsnative.core.utility;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class UtilityDB {
@@ -32,4 +37,9 @@ public class UtilityDB {
return valueString;
}
public static String listValueToString(List<String> lista) {
lista = Stream.of(lista).map(UtilityDB::valueToString).toList();
return StringUtils.join(lista,",");
}
}

View File

@@ -184,6 +184,16 @@ public class UtilityDate {
} else return null;
}
public static String formatDate(String dateToFormat, String format) {
if (dateToFormat != null) {
LocalDateTime data = recognizeLocalDateTimeWithExceptionHandler(dateToFormat);
if (data != null) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return data.format(dateTimeFormatter);
}else return null;
} else return null;
}
public static boolean isBeforeToday(LocalDateTime inputDate) {
return inputDate != null && inputDate.toLocalDate().isBefore(getNow());
}

View File

@@ -7,10 +7,13 @@ import java.lang.reflect.Modifier;
import java.time.LocalDate;
import java.time.LocalDateTime;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateDeserializer;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateTimeDeserializer;
import it.integry.integrywmsnative.core.rest.deserializer.StatoPartitaMagDeserializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateSerializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateTimeSerializer;
import it.integry.integrywmsnative.core.rest.serializer.StatoPartitaMagSerializer;
public class UtilityGson {
@@ -22,6 +25,8 @@ public class UtilityGson {
.registerTypeAdapter(LocalDate.class, new LocalDateSerializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer())
.registerTypeAdapter(StatoPartitaMag.class, new StatoPartitaMagDeserializer())
.registerTypeAdapter(StatoPartitaMag.class, new StatoPartitaMagSerializer())
.create();
}

View File

@@ -0,0 +1,31 @@
package it.integry.integrywmsnative.core.utility;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
public class UtilitySHA1 {
public static String getSha1Hex(String clearString)
{
try
{
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
messageDigest.update(clearString.getBytes(StandardCharsets.UTF_8));
byte[] bytes = messageDigest.digest();
StringBuilder buffer = new StringBuilder();
for (byte b : bytes)
{
buffer.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
return buffer.toString();
}
catch (Exception ignored)
{
ignored.printStackTrace();
return null;
}
}
}

View File

@@ -16,8 +16,6 @@ public class SitBollaAccettazioneDTO {
private BigDecimal qtaDoc;
private BigDecimal qtaCnfDoc;
private BigDecimal numCnfDoc;
private BigDecimal qtaAccettata;
private BigDecimal numCnfAccettata;
private BigDecimal qtaDaAccettare;
private BigDecimal numCnfDaAccettare;
@@ -111,24 +109,6 @@ public class SitBollaAccettazioneDTO {
return this;
}
public BigDecimal getQtaAccettata() {
return qtaAccettata;
}
public SitBollaAccettazioneDTO setQtaAccettata(BigDecimal qtaAccettata) {
this.qtaAccettata = qtaAccettata;
return this;
}
public BigDecimal getNumCnfAccettata() {
return numCnfAccettata;
}
public SitBollaAccettazioneDTO setNumCnfAccettata(BigDecimal numCnfAccettata) {
this.numCnfAccettata = numCnfAccettata;
return this;
}
public BigDecimal getQtaDaAccettare() {
return qtaDaAccettare;
}

View File

@@ -6,9 +6,11 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.Gravity;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.databinding.ObservableArrayList;
import androidx.preference.PreferenceManager;
@@ -37,6 +39,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
@@ -50,7 +53,6 @@ import it.integry.integrywmsnative.databinding.ActivityAccettazioneBollaPickingB
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.SitBollaAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.AccettazioneBollaPickingOrderBy;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListAdapter;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListModel;
@@ -63,7 +65,7 @@ import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico
import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView;
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.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView;
@@ -98,6 +100,10 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
private List<TestataBollaAccettazioneDTO> testataBolle;
private List<SitBollaAccettazioneDTO> sitArts;
private PopupMenu fabPopupMenu;
//Pass here all external parameters
public static void startActivity(Context context, List<TestataBollaAccettazioneDTO> testataBolle, List<SitBollaAccettazioneDTO> sitArts) {
Intent myIntent = new Intent(context, AccettazioneBollaPickingActivity.class);
@@ -121,7 +127,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
mBindings = ActivityAccettazioneBollaPickingBinding.inflate(getLayoutInflater());
mBindings.setLifecycleOwner(this);
mBindings.setAccettazioneView(this);
mBindings.setView(this);
setContentView(mBindings.getRoot());
@@ -145,6 +151,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
this.initBarcodeReader();
this.initRecyclerView();
// this.initFilters();
this.initFab();
boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
@@ -204,6 +211,36 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
});
}
private void initFab() {
fabPopupMenu = new PopupMenu(this, this.mBindings.accettazioneOrdineInevasoFab,
(Gravity.END | Gravity.BOTTOM),
androidx.appcompat.R.attr.popupMenuStyle,
com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu);
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.accettazione_ordine_inevaso_fab_menu, fabPopupMenu.getMenu());
fabPopupMenu.getMenu().findItem(R.id.show_created_ul).setVisible(SettingsManager.iDB().isFlagAllowULRecoverAccettazioneBolla());
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.show_created_ul) {
showCreatedUL();
} else if (itemId == R.id.create_ul) {
createNewLU();
}
return false;
});
}
public void showFabMenu() {
fabPopupMenu.show();
}
private void refreshList() {
runOnUiThread(() -> {
@@ -315,15 +352,13 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
};
public void createNewLU() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.fabPopupMenu.dismiss();
this.onLoadingStarted();
this.mViewModel.createNewLU(null, null, false, this::onLoadingEnded);
}
public void showCreatedUL() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.fabPopupMenu.dismiss();
this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity);
}
@@ -447,9 +482,8 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
@Override
public void onInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete) {
runOnUiThread(() -> {
DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
});
DialogInfoAggiuntiveLUView.newInstance(onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName());
}
@Override

View File

@@ -5,10 +5,12 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.PopupMenu;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.preference.PreferenceManager;
@@ -42,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
@@ -53,7 +56,6 @@ import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.core.model.dto.AlreadyRegisteredUDCDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.dto.AccettazioneOrdineInevasoOrderBy;
@@ -73,7 +75,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView;
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.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView;
@@ -111,6 +113,8 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
private boolean mShowSecondaryUntMis = true;
private PopupMenu fabPopupMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -121,7 +125,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_accettazione_ordine_inevaso);
mBindings.setLifecycleOwner(this);
mBindings.setAccettazioneView(this);
mBindings.setView(this);
MainApplication.appComponent
.accettazionePickingComponent()
@@ -142,6 +146,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
this.initBarcodeReader();
this.initRecyclerView();
this.initFilters();
this.initFab();
boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
@@ -152,6 +157,28 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
useQtaOrd);
}
private void initFab() {
fabPopupMenu = new PopupMenu(this, this.mBindings.accettazioneOrdineInevasoFab,
(Gravity.END | Gravity.BOTTOM),
androidx.appcompat.R.attr.popupMenuStyle,
com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu);
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.accettazione_ordine_inevaso_fab_menu, fabPopupMenu.getMenu());
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.show_created_ul) {
showCreatedUL();
} else if (itemId == R.id.create_ul) {
createNewLU();
}
return false;
});
}
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@@ -678,8 +705,12 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
};
public void showFabMenu() {
fabPopupMenu.show();
}
public void createNewLU() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.fabPopupMenu.dismiss();
this.onLoadingStarted();
this.mViewModel.createNewLU(null, null, false, () -> {
@@ -688,8 +719,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
}
public void showCreatedUL() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.fabPopupMenu.dismiss();
this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity);
}
@@ -773,9 +803,12 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
@Override
public void onInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete) {
runOnUiThread(() -> {
DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
});
// runOnUiThread(() -> {
// DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
// });
DialogInfoAggiuntiveLUView.newInstance(onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName());
}
@Override

View File

@@ -178,6 +178,6 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
@Override
public void onDocumentEditRequest(SqlMtbColt document, List<DocumentoArtDTO> arts) {
requireActivity()
.startActivity(DocInterniEditFormActivity.newInstance(requireActivity(), document, arts, mViewModel.getTipoDoc()));
.startActivity(DocInterniEditFormActivity.newInstance(requireActivity(), document, arts, mViewModel.getTipoDoc(), mDocInterniSetupDTO));
}
}

View File

@@ -3,10 +3,9 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.dialog;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
import com.annimon.stream.Stream;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.exception.DocumentRequiredException;
@@ -34,24 +33,11 @@ public class DialogSelectDocInfoViewModel extends ViewModel {
private final MutableLiveData<Boolean> noteRequired = new MutableLiveData<>(false);
public DialogSelectDocInfoViewModel() {
tipoDoc.observeForever(val ->
fornitoreRequired.postValue(
val != null &&
(val.getGestioneDoc().equals("T") ||
val.getGestioneDoc().equals("A") ||
(val.getGestioneDoc().equals("P") &&
!val.getGestione().equals("L")))));
tipoDoc.observeForever(val -> fornitoreRequired.postValue(val != null && (val.getGestioneDoc().equals("T") || val.getGestioneDoc().equals("A") || (val.getGestioneDoc().equals("P") && !val.getGestione().equals("L")))));
tipoDoc.observeForever(val ->
documentRequired.postValue(
val != null &&
val.getGestioneDoc().equalsIgnoreCase("P") && !val.getGestione().equalsIgnoreCase("L")));
tipoDoc.observeForever(val -> documentRequired.postValue(val != null && val.getGestioneDoc().equalsIgnoreCase("P") && !val.getGestione().equalsIgnoreCase("L")));
tipoDoc.observeForever(val ->
noteRequired.postValue(
val != null &&
val.getGestioneDoc().equals("P") &&
val.getGestione().equals("L")));
tipoDoc.observeForever(val -> noteRequired.postValue(val != null && val.getGestioneDoc().equals("P") && val.getGestione().equals("L")));
}
public MutableLiveData<List<FornitoreDTO>> getAvailableFornitori() {
@@ -60,18 +46,15 @@ public class DialogSelectDocInfoViewModel extends ViewModel {
public void setFornitori(List<FornitoreDTO> fornitori) {
tipoDoc.observeForever(val -> {
availableFornitori.postValue(Stream.of(fornitori)
.filter(forn -> {
if (val.getGestioneDoc().equalsIgnoreCase("T")) {
return forn.getTipoAnag().equalsIgnoreCase("D") &&
forn.getGestioneAnag().equalsIgnoreCase(
val.getGestione().equalsIgnoreCase("V") ? "V" : "L"
);
} else {
return forn.getTipoAnag().equalsIgnoreCase("F");
}
})
.toList());
List<FornitoreDTO> availableFornitoriList = fornitori.stream().filter(forn -> {
if (val.getGestioneDoc().equalsIgnoreCase("T")) {
return forn.getTipoAnag().equalsIgnoreCase("D") && forn.getGestioneAnag().equalsIgnoreCase(val.getGestione().equalsIgnoreCase("V") ? "V" : "L");
} else {
return forn.getTipoAnag().equalsIgnoreCase("F");
}
}).collect(Collectors.toList());
availableFornitori.postValue(availableFornitoriList);
});
}

View File

@@ -0,0 +1,25 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.dto;
public class CheckFornitoreDTO {
private String codDtip;
private Boolean flagCheckPartitaMag;
public String getCodDtip() {
return codDtip;
}
public CheckFornitoreDTO setCodDtip(String codDtip) {
this.codDtip = codDtip;
return this;
}
public Boolean getFlagCheckPartitaMag() {
return flagCheckPartitaMag;
}
public CheckFornitoreDTO setFlagCheckPartitaMag(Boolean flagCheckPartitaMag) {
this.flagCheckPartitaMag = flagCheckPartitaMag;
return this;
}
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.contab_doc_interni.dto;
import java.util.List;
public class FornitoreDTO {
@@ -13,6 +15,8 @@ public class FornitoreDTO {
private String gestioneAnag;
private List<CheckFornitoreDTO> checkFornitoreDTO;
public String getCodAnag() {
return codAnag;
@@ -57,4 +61,13 @@ public class FornitoreDTO {
public String getLabel() {
return this.codAnag + (this.codVdes != null ? " - "+ this.codVdes : "") +" ( " + this.descrizione+" )";
}
public List<CheckFornitoreDTO> getCheckFornitoreDTO() {
return checkFornitoreDTO;
}
public FornitoreDTO setCheckFornitoreDTO(List<CheckFornitoreDTO> checkFornitoreDTO) {
this.checkFornitoreDTO = checkFornitoreDTO;
return this;
}
}

View File

@@ -17,6 +17,8 @@ public class SaveDTO {
private ColloDTO colloDTO;
private InventarioDTO inventarioDTO;
private String UUID;
public String getGestione() {
return gestione;
}
@@ -112,4 +114,13 @@ public class SaveDTO {
public void setInventarioDTO(InventarioDTO inventarioDTO) {
this.inventarioDTO = inventarioDTO;
}
public String getUUID() {
return UUID;
}
public SaveDTO setUUID(String UUID) {
this.UUID = UUID;
return this;
}
}

View File

@@ -6,6 +6,7 @@ public class TipoDocDTO {
private String descrizione;
private String gestione;
private String gestioneDoc;
private boolean flagChkTracciabilita;
private boolean requireNote = false;
public String getCodDtip() {
@@ -52,4 +53,13 @@ public class TipoDocDTO {
this.requireNote = requireNote;
return this;
}
public boolean isFlagChkTracciabilita() {
return flagChkTracciabilita;
}
public TipoDocDTO setFlagChkTracciabilita(boolean flagChkTracciabilita) {
this.flagChkTracciabilita = flagChkTracciabilita;
return this;
}
}

View File

@@ -3,9 +3,11 @@ 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.Gravity;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.PopupMenu;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -26,7 +28,6 @@ import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableInteger;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
@@ -37,11 +38,11 @@ import it.integry.integrywmsnative.core.model.MtbUntMis;
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.DocInterniSetupDTO;
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;
@@ -55,6 +56,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
private static final String DATA_KEY_DOCUMENT = "document";
private static final String DATA_KEY_PRODUCTS_LIST = "productsList";
private static final String DATA_KEY_TIPO_DOC = "docType";
private static final String DATA_KEY_DOC_INTERNI = "docInterniSetup";
@Inject
MtbColrDataSource documentRowsRepository;
@@ -75,18 +77,23 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
public BindableString codMgrp = new BindableString();
public BindableString codAnag = new BindableString();
public BindableInteger prodsCount = new BindableInteger(0);
public BindableBoolean isDocumentExportable = new BindableBoolean(false);
private final ObservableArrayList<SqlMtbColr> documentRowsObservableList = new ObservableArrayList<>();
public static Intent newInstance(Context context, SqlMtbColt document, List<DocumentoArtDTO> arts, TipoDocDTO tipoDoc) {
private PopupMenu fabPopupMenu;
public static Intent newInstance(Context context, SqlMtbColt document, List<DocumentoArtDTO> arts, TipoDocDTO tipoDoc, DocInterniSetupDTO mDocInterniSetupDTO) {
Intent myIntent = new Intent(context, DocInterniEditFormActivity.class);
String doc = DataCache.addItem(document);
String productsKey = DataCache.addItem(arts);
String docType = DataCache.addItem(tipoDoc);
String docInterniSetup = DataCache.addItem(mDocInterniSetupDTO);
myIntent.putExtra(DATA_KEY_DOCUMENT, doc);
myIntent.putExtra(DATA_KEY_PRODUCTS_LIST, productsKey);
myIntent.putExtra(DATA_KEY_TIPO_DOC, docType);
myIntent.putExtra(DATA_KEY_DOC_INTERNI, docInterniSetup);
return myIntent;
}
@@ -103,16 +110,18 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
SqlMtbColt document = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_DOCUMENT));
List<DocumentoArtDTO> productList = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_PRODUCTS_LIST));
TipoDocDTO docType = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_TIPO_DOC));
DocInterniSetupDTO docInterniSetupDTO = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_DOC_INTERNI));
this.initViewModel();
this.viewModel.setDocInterniSetupDTO(docInterniSetupDTO);
this.viewModel.setDocument(document);
this.viewModel.setProductsList(productList);
this.viewModel.setTipoDoc(docType);
this.initView();
this.initBindables();
this.initRecyclerView();
this.initFab();
}
private void initBindables() {
@@ -145,7 +154,8 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
setSupportActionBar(binding.toolbar);
binding.toolbar.setTitle(R.string.edit_doc);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FabMenuCustomAnimations.changeIconOnFocus(binding.closeActivityFab, R.drawable.ic_menu_24dp, R.drawable.ic_close_24dp);
// FabMenuCustomAnimations.changeIconOnFocus(binding.closeActivityFab, R.drawable.ic_menu_24dp, R.drawable.ic_close_24dp);
}
@@ -156,6 +166,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
private void initRecyclerView() {
this.viewModel.docRows.observe(this, this::refreshList);
DocumentRowsListAdapter listAdapter = new DocumentRowsListAdapter(this, documentRowsObservableList);
listAdapter.setEmptyView(binding.scanArtSpinner);
binding.documentRowsList.setAdapter(listAdapter);
@@ -167,11 +178,58 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
});
}
private void initFab() {
fabPopupMenu = new PopupMenu(this, this.binding.mainFab,
(Gravity.END | Gravity.BOTTOM),
androidx.appcompat.R.attr.popupMenuStyle,
com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu);
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.doc_interni_edit_fab_menu, fabPopupMenu.getMenu());
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.export_document) {
viewModel.exportDocument();
} else if (itemId == R.id.delete_document) {
viewModel.deleteDocument();
} else if (itemId == R.id.hold_document) {
viewModel.holdDocument();
}
return false;
});
refreshFabMenu();
}
private void refreshFabMenu() {
fabPopupMenu.getMenu()
.findItem(R.id.export_document)
.setVisible(isDocumentExportable());
}
public void showFabMenu() {
fabPopupMenu.show();
}
public void closeFabMenu() {
fabPopupMenu.dismiss();
}
private void refreshList(List<SqlMtbColr> sqlMtbColrs) {
this.documentRowsObservableList.clear();
this.documentRowsObservableList.addAll(this.viewModel.docRows.getValue());
this.prodsCount.set(this.viewModel.docRows.getValue().size());
this.refreshFabMenu();
}
private boolean isDocumentExportable() {
return prodsCount.get() > 0;
}
public void closeEdit() {
this.onBackPressed();
@@ -192,7 +250,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
super.onStart();
SqlMtbColt document = this.viewModel.getDocument();
if (document == null) {
Toast.makeText(this, "Nesusn documento selezionato!", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Nessun documento selezionato!", Toast.LENGTH_SHORT).show();
closeEdit();
return;
}
@@ -224,7 +282,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Override
public void onRowsChanged(List<SqlMtbColr> rows) {
this.prodsCount.set(rows.size());
this.isDocumentExportable.set(rows.size() > 0);
}
@Override
@@ -277,7 +334,8 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO);
})
.setOnAbort(() -> {})
.setOnAbort(() -> {
})
.show(getSupportFragmentManager(), "tag");
}
@@ -288,7 +346,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Override
public void onDocDeleted() {
this.binding.closeActivityFab.close(true);
this.closeFabMenu();
this.closeEdit();
}
@@ -332,7 +390,8 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
DialogSelectDocRowsView.newInstance(dataset, data -> {
this.viewModel.dispatchRowEdit((SqlMtbColr) data.getOriginalModel(), articolo.isFlagTracciabilita(), articolo.isUntMisDigitale());
}, () -> {})
}, () -> {
})
.show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew");
}

View File

@@ -4,12 +4,10 @@ import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import org.json.JSONException;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
@@ -27,8 +25,12 @@ import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilitySHA1;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ArtDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.CheckFornitoreDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ColloDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipoDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
@@ -44,10 +46,10 @@ public class DocInterniEditFormViewModel {
private TipoDocDTO tipoDoc;
private boolean isCheckPartitaMag = false;
private JSONObject checkFornitoreRules = null;
public MutableLiveData<SqlMtbColt> document = new MutableLiveData<>();
public MutableLiveData<DocInterniSetupDTO> docInterniSetupDTO = new MutableLiveData<>();
public MutableLiveData<List<SqlMtbColr>> docRows = new MutableLiveData<>();
@Inject
@@ -59,12 +61,6 @@ public class DocInterniEditFormViewModel {
}
public void init() {
try {
var docInterniCheckFornitore = SettingsManager.iDB().getDocInterniCheckFornitore();
this.checkFornitoreRules = docInterniCheckFornitore != null ? new JSONObject(docInterniCheckFornitore) : null;
} catch (JSONException e) {
e.printStackTrace();
}
}
@@ -207,7 +203,12 @@ public class DocInterniEditFormViewModel {
private SaveDTO getSaveDto() {
SqlMtbColt document = this.getDocument();
String UUID = SettingsManager.i().getUserSession().getDeviceId() + "-" + document.getId();
UUID = UtilitySHA1.getSha1Hex(UUID);
SaveDTO saveDTO = new SaveDTO();
saveDTO.setUUID(UUID);
saveDTO.setIdDisp("1");
saveDTO.setGestione(document.getGestione());
saveDTO.setCodMdep(document.getCodMdep());
@@ -236,6 +237,8 @@ public class DocInterniEditFormViewModel {
artDto.setColli(BigDecimal.valueOf(row.getNumCnf()));
artDto.setUntMis(row.getUntMis());
artDto.setCodMart(row.getCodMart());
artDto.setSystemNote(row.getNote());
artDto.setPartitaMag(row.getPartitaMag());
if (row.getDataScad() != null) {
artDto.setDataScad(row.getDataScad());
}
@@ -257,35 +260,54 @@ public class DocInterniEditFormViewModel {
this.initCheckFornitore();
}
public void setDocInterniSetupDTO(DocInterniSetupDTO docInterniSetupDTO) {
this.docInterniSetupDTO.setValue(docInterniSetupDTO);
}
private void initCheckFornitore() {
SqlMtbColt doc = this.document.getValue();
List<FornitoreDTO> fornitori = Objects.requireNonNull(this.docInterniSetupDTO.getValue()).getFornitori();
List<TipoDocDTO> tipoDocDTO = Objects.requireNonNull(this.docInterniSetupDTO.getValue()).getTipiDoc();
this.isCheckPartitaMag = false;
if (doc == null)
if (doc == null || fornitori == null || tipoDocDTO == null)
return;
boolean isCheckPartitaMag = false;
List<FornitoreDTO> filterFornitori = Stream.of(fornitori)
.filter(x -> x.getCodAnag().equals(doc.getCodAnag()))
.toList();
List<CheckFornitoreDTO> checkFornitoreDTO;
try {
if (this.checkFornitoreRules != null && this.checkFornitoreRules.has("value")) {
isCheckPartitaMag = this.checkFornitoreRules.getBoolean("value");
} else if (this.checkFornitoreRules != null) {
String key = doc.getCodAnag();
if (doc.getCodVdes() != null && !doc.getCodVdes().isEmpty()) {
key += "-" + doc.getCodVdes();
}
if (this.checkFornitoreRules.has(key) &&
((String) ((JSONObject) this.checkFornitoreRules.get(key))
.get(doc.getCodDtipProvv()))
.equalsIgnoreCase("check-partitaMag")) {
isCheckPartitaMag = true;
}
TipoDocDTO tipoDoc = Stream.of(tipoDocDTO)
.filter(x -> x.getCodDtip().equals(doc.getCodDtipProvv()))
.findFirst()
.get();
if (tipoDoc.isFlagChkTracciabilita()) {
this.isCheckPartitaMag = tipoDoc.isFlagChkTracciabilita();
} else {
if (filterFornitori.isEmpty())
return;
if (doc.getCodVdes() == null) {
checkFornitoreDTO = Stream.of(filterFornitori)
.filter(x -> x.getCodVdes() == null).findFirst().get().getCheckFornitoreDTO();
} else {
checkFornitoreDTO = Stream.of(filterFornitori)
.filterNot(x -> x.getCodVdes() == null)
.filter(x -> x.getCodVdes().equals(doc.getCodVdes())).findFirst().get().getCheckFornitoreDTO();
}
if (checkFornitoreDTO != null) {
CheckFornitoreDTO flagCheck = Stream.of(checkFornitoreDTO)
.filter(x -> x.getCodDtip().equals(doc.getCodDtipProvv())).findFirstOrElse(null);
if (flagCheck == null)
return;
this.isCheckPartitaMag = flagCheck.getFlagCheckPartitaMag();
}
} catch (JSONException e) {
this.sendError(e);
}
this.isCheckPartitaMag = isCheckPartitaMag;
}
public SqlMtbColt getDocument() {
@@ -330,6 +352,7 @@ public class DocInterniEditFormViewModel {
row.setQtaCol(resultDTO.getQtaTot().floatValue());
row.setNote(resultDTO.getNote());
row.setDataScad(resultDTO.getDataScad());
row.setPartitaMag(resultDTO.getPartitaMag());
if (row.getId() > 0) {
this.mtbColrRepository.update(row, id -> {
this.fetchDocumentRows();

View File

@@ -4,8 +4,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.Gravity;
import androidx.appcompat.widget.PopupMenu;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
@@ -18,8 +21,10 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO;
import it.integry.integrywmsnative.databinding.ActivityContenutoBancaleBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ui.ContenutoBancaleListAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
@@ -38,11 +43,14 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
@Inject
PrinterRESTConsumer mPrinterRESTConsumer;
@Inject
ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
public final ObservableField<MtbColt> mtbColt = new ObservableField<>();
public final ObservableField<String> descrizioneDepo = new ObservableField<>();
public ObservableField<Boolean> fabVisible = new ObservableField<>(true);
public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false);
private PopupMenu fabPopupMenu;
private String mReportName;
@@ -95,11 +103,11 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
recoverFabMenuVisible.set(canRecoverUL);
initRecyclerView();
initColloInfo();
this.initRecyclerView();
this.initColloInfo();
this.initFab();
}
private void initRecyclerView() {
this.bindings.contenutoBancaleMainList.setNestedScrollingEnabled(false);
@@ -115,13 +123,39 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
this.bindings.contenutoBancaleMainList.setAdapter(adapter);
}
private void initColloInfo() {
mDepositoRESTConsumer.getDepoByCodMdep(mtbColt.get().getCodMdep(), depo -> {
descrizioneDepo.set("(" + depo.getDescrizione() + ")");
}, this::onError);
}
private void initFab() {
fabPopupMenu = new PopupMenu(this, this.bindings.accettazioneOrdineInevasoFab,
(Gravity.END | Gravity.BOTTOM),
androidx.appcompat.R.attr.popupMenuStyle,
com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu);
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.contenuto_bancale_fab_menu, fabPopupMenu.getMenu());
if(mtbColt.get().isDocumentPresent()){
fabPopupMenu.getMenu().removeItem(R.id.delete_ul);
}
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
if (itemId == R.id.recover_ul) {
this.recoverUL();
} else if (itemId == R.id.print_ul) {
this.printUL();
} else if (itemId == R.id.delete_ul) {
this.deleteUL();
}
return false;
});
}
public void recoverUL() {
Intent data = new Intent();
@@ -132,9 +166,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
this.finish();
}
public void printUL() {
this.bindings.contenutoBancaleFab.close(true);
this.onLoadingStarted();
try {
this.mPrinterRESTConsumer.printCollo(mtbColt.get(),
@@ -153,11 +185,42 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
}
}
public void deleteUL() {
String text = getResources().getString(R.string.alert_delete_UL);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
this.onLoadingStarted();
try {
DeleteULRequestDTO deleteULRequestDTO = new DeleteULRequestDTO()
.setMtbColt(this.mtbColt.get());
mColliMagazzinoRESTConsumer.deleteUL(deleteULRequestDTO, () -> {
Intent data = new Intent();
String key = DataCache.addItem(this.mtbColt.get());
String keyDeleteUL = DataCache.addItem(true);
data.putExtra("key", key)
.putExtra("keyDeleteUL", keyDeleteUL);
this.onLoadingEnded();
this.setResult(RESULT_OK, data);
this.finish();
}, this::onError);
} catch (Exception ex) {
this.onError(ex);
}
}), () -> {
}).show(this.getSupportFragmentManager(), "tag");
}
public void showFabMenu() {
fabPopupMenu.show();
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
getOnBackPressedDispatcher().onBackPressed();
return true;
}
}

View File

@@ -276,7 +276,7 @@ public class PickingInventarioViewModel extends ViewModel {
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if (inventarioArtDTO.isPlu()) {
if (pickingObjectDTO.getTempPickData() != null && inventarioArtDTO.isPlu()) {
this.saveNewRow(pickingObjectDTO, initialNumCnf, initialQtaCnf, initialQtaTot, null, barcode);
} else {

View File

@@ -24,7 +24,7 @@ import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivi
import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
public class ListaBancaliActivity extends BaseActivity implements ListaBancaliViewModel.Listener{
public class ListaBancaliActivity extends BaseActivity implements ListaBancaliViewModel.Listener {
private static class Key {
private static final String MtbColtsKey = "mtbColtsKey";
@@ -47,7 +47,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private static final int PICK_UL_REQUEST = 1; // The request code
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, String reportName) {
return createIntent(context, items, canRecoverUlAction, true, reportName);
}
@@ -126,17 +125,16 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
getOnBackPressedDispatcher().onBackPressed();
return true;
}
public void startContenutoBancaleActivity(MtbColt item){
public void startContenutoBancaleActivity(MtbColt item) {
Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mReportName);
startActivityForResult(myIntent, PICK_UL_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
@@ -144,9 +142,20 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
if (requestCode == PICK_UL_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
Object keyDeleteUL = DataCache.retrieveItem(data.getStringExtra("keyDeleteUL"));
boolean deleteUL = keyDeleteUL != null && (boolean) keyDeleteUL;
if (deleteUL) {
this.onLoadingStarted();
MtbColt item = DataCache.retrieveItem(data.getStringExtra("key"));
mtbColts.remove(item);
this.initRecyclerView();
this.onLoadingEnded();
} else {
this.setResult(RESULT_OK, data);
this.finish();
}
this.setResult(RESULT_OK, data);
this.finish();
}
}
}

View File

@@ -213,10 +213,16 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
(recoveredMtbColt.getGestioneEnum() == GestioneEnum.VENDITA ||
recoveredMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE)) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
if(recoveredMtbColtDto.getTestateOrdini() != null &&
!recoveredMtbColtDto.getTestateOrdini().isEmpty()){
codMdep = recoveredMtbColtDto.getTestateOrdini().get(0).getCodMdep();
}
var closeUDSRequestDto = new CloseUDSRequestDTO()
.setMtbColt(recoveredMtbColt)
//.setPrintSSCC(shouldPrint)
.setOrderCodMdep(recoveredMtbColtDto.getTestateOrdini().get(0).getCodMdep());
.setOrderCodMdep(codMdep);
RunnableArgs<CloseUDSResponseDTO> onRequestComplete = closeUDSResponseDto -> {
colliDataRecoverService.closeSession(recoveredMtbColtID);

View File

@@ -7,7 +7,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterAutom
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView;

View File

@@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterAutom
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView;
@@ -825,6 +825,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
int alreadyRegisteredUL = alreadyRegisteredMtbColts.size();
boolean divideByGrpMerc = SettingsManager.iDB().isGroupShippingByCommodityGroup();
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, orders.size()), orders.size())
+ "<br />" +
@@ -839,7 +841,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
mCurrentGestioneCol,
mCurrentSegnoCol,
MtbColr.Causale.DEFAULT,
mDialogRowInfo)
mDialogRowInfo,
divideByGrpMerc)
).show(getActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -65,33 +65,31 @@ public class OrdiniUscitaElencoViewModel {
this.sendOnLoadingStarted();
new Thread(() -> {
Date loadingStartDate = new Date();
Date loadingStartDate = new Date();
this.mOrdiniRESTConsumer.getOrdiniInevasi(this.mCurrentCodMdep, mCurrentGestioneOrd,
ordiniLavorazione -> {
this.mOrderList.postValue(Stream.of(ordiniLavorazione)
.map(x -> {
try {
return OrdiniUscitaElencoDTO.fromParent(x);
} catch (Exception ex) {
return null;
}
})
.toList());
this.mOrdiniRESTConsumer.getOrdiniInevasi(this.mCurrentCodMdep, mCurrentGestioneOrd,
ordiniLavorazione -> {
this.mOrderList.postValue(Stream.of(ordiniLavorazione)
.map(x -> {
try {
return OrdiniUscitaElencoDTO.fromParent(x);
} catch (Exception ex) {
return null;
}
})
.toList());
long forcedDelaySecs = (new Date().getTime() - loadingStartDate.getTime()) / 1000;
long forcedDelaySecs = (new Date().getTime() - loadingStartDate.getTime()) / 1000;
if (2 - forcedDelaySecs > 0) {
try {
Thread.sleep((2 - forcedDelaySecs) * 1000);
} catch (Exception ignored) {
}
if (2 - forcedDelaySecs > 0) {
try {
Thread.sleep((2 - forcedDelaySecs) * 1000);
} catch (Exception ignored) {
}
}
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
this.sendOnLoadingEnded();
}, this::sendError);
}

View File

@@ -8,6 +8,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
@@ -42,7 +43,6 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.FragmentPickingLiberoBinding;
@@ -54,6 +54,7 @@ import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteView;
import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -86,16 +87,21 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
private int barcodeScannerIstanceID = -1;
private GestioneEnum mCurrentGestione;
private boolean mAskCliente;
private boolean mAskLineaProd;
public PickingLiberoFragment() {
// Required empty public constructor
}
public static PickingLiberoFragment newInstance(GestioneEnum gestioneEnum) {
public static PickingLiberoFragment newInstance(@StringRes int title, GestioneEnum gestioneEnum, boolean askCliente, boolean askLineaProd) {
PickingLiberoFragment fragment = new PickingLiberoFragment();
Bundle args = new Bundle();
args.putInt("title", title);
args.putString("gestione", gestioneEnum.getText());
args.putBoolean("askCliente", askCliente);
args.putBoolean("askLineaProd", askLineaProd);
fragment.setArguments(args);
return fragment;
@@ -104,7 +110,6 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mToolbarTitleText = titleText;
mToolbarTitleText.setText(context.getText(R.string.free_picking_title_fragment).toString());
}
@Override
@@ -113,6 +118,11 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
setRetainInstance(true);
mCurrentGestione = GestioneEnum.fromString(getArguments().getString("gestione"));
mAskCliente = getArguments().getBoolean("askCliente");
mAskLineaProd = getArguments().getBoolean("askLineaProd");
mToolbarTitleText.setText(getText(getArguments().getInt("title")).toString());
}
@@ -139,8 +149,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
this.initRecyclerView();
boolean flagAskCliente = SettingsManager.iDB().isFlagAskClienteInPickingLibero();
mViewModel.init(flagAskCliente, mCurrentGestione);
mViewModel.init(mAskCliente, mAskLineaProd, mCurrentGestione);
return mBindings.getRoot();
}
@@ -263,7 +272,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show(requireActivity().getSupportFragmentManager(), "tag");
).show(requireActivity().getSupportFragmentManager(), DialogSimpleMessageView.class.getName());
}
@Override
@@ -284,7 +293,13 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) {
DialogAskClienteView.newInstance(onComplete, onAbort)
.show(requireActivity().getSupportFragmentManager(), "tag");
.show(requireActivity().getSupportFragmentManager(), DialogAskClienteView.class.getName());
}
@Override
public void onLULineaProdRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
DialogAskLineaProdView.newInstance(onComplete, onAbort)
.show(getParentFragmentManager(), DialogAskLineaProdView.class.getName());
}
@Override
@@ -294,7 +309,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
onAbort.run();
BarcodeManager.enable();
})
.show(requireActivity().getSupportFragmentManager(), "tag");
.show(requireActivity().getSupportFragmentManager(), DialogChooseArtsFromMtbColrList.class.getName());
}
@Override

View File

@@ -6,7 +6,9 @@ import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@@ -21,8 +23,17 @@ public class PickingLiberoModule {
BarcodeRESTConsumer barcodeRESTConsumer,
PosizioniRESTConsumer posizioniRESTConsumer,
GiacenzaRESTConsumer giacenzaRESTConsumer,
MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer
MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer
) {
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer, giacenzaRESTConsumer, magazzinoAutomaticoRESTConsumer);
return new PickingLiberoViewModel(articoloRESTConsumer,
colliMagazzinoRESTConsumer,
barcodeRESTConsumer,
posizioniRESTConsumer,
giacenzaRESTConsumer,
magazzinoAutomaticoRESTConsumer,
colliLavorazioneRESTConsumer,
colliSpedizioneRESTConsumer);
}
}

View File

@@ -13,6 +13,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
@@ -32,14 +33,18 @@ import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.interfaces.ColliScaricoRESTConsumerInterface;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
@@ -63,8 +68,12 @@ public class PickingLiberoViewModel {
private final GiacenzaRESTConsumer mGiacenzaRESTConsumer;
private final MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer;
private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer;
private final ColliLavorazioneRESTConsumer mColliLavorazioneRESTConsumer;
private final ColliSpedizioneRESTConsumer mColliSpedizioneRESTConsumer;
private boolean mFlagAskCliente;
private boolean mFlagAskLineaProd;
private GestioneEnum mDefaultGestione;
@@ -77,19 +86,30 @@ public class PickingLiberoViewModel {
BarcodeRESTConsumer barcodeRESTConsumer,
PosizioniRESTConsumer posizioniRESTConsumer,
GiacenzaRESTConsumer giacenzaRESTConsumer,
MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer) {
MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mPosizioniRESTConsumer = posizioniRESTConsumer;
this.mGiacenzaRESTConsumer = giacenzaRESTConsumer;
this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer;
this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer;
this.mColliSpedizioneRESTConsumer = colliSpedizioneRESTConsumer;
}
public void init(boolean flagAskCliente, GestioneEnum defaultGestione) {
public void init(boolean flagAskCliente, boolean flagAskLineaProd, GestioneEnum defaultGestione) {
this.mFlagAskCliente = defaultGestione == GestioneEnum.VENDITA && flagAskCliente;
this.mFlagAskLineaProd = defaultGestione == GestioneEnum.LAVORAZIONE && flagAskLineaProd;
this.mDefaultGestione = defaultGestione;
switch (mDefaultGestione) {
case LAVORAZIONE -> this.mColliScaricoRESTConsumer = mColliLavorazioneRESTConsumer;
case VENDITA -> this.mColliScaricoRESTConsumer = mColliSpedizioneRESTConsumer;
}
}
@@ -192,7 +212,14 @@ public class PickingLiberoViewModel {
}
} else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
pickMerceULtoUL(mtbColt, articolo, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, articolo, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
@@ -216,7 +243,14 @@ public class PickingLiberoViewModel {
if (mtbColtScanned == null) {
this.sendError(new NoLUFoundException());
} else if ((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) {
pickMerceULtoUL(mtbColtScanned, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColtScanned.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtScanned, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else {
this.sendError(new NoLUFoundException());
}
@@ -279,46 +313,57 @@ public class PickingLiberoViewModel {
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
if (this.mFlagAskCliente) {
this.sendLUClienteRequired((vtbDest, codJcom) -> {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete);
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, onComplete);
}, () -> {
});
} else {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, null, onComplete);
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, onComplete);
}
}
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJcom, Runnable onComplete) {
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) {
if (this.mFlagAskLineaProd) {
this.sendLULineaProdRequired(codJfas -> {
createNewLU_PostLineaProdAsk(customNumCollo, customSerCollo, vtbDest, codJfas, onComplete);
}, () -> {
});
} else {
createNewLU_PostLineaProdAsk(customNumCollo, customSerCollo, vtbDest, null, onComplete);
}
}
private void createNewLU_PostLineaProdAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJfas, Runnable onComplete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields(mDefaultGestione)
var createUDSRequest = new CreateUDSRequestDTO()
.setRifOrd(mDefaultGestione == GestioneEnum.LAVORAZIONE ? "PICKING LIBERO" : null)
// .setCodAnag(SettingsManager.iDB().getProduzioneDefaultCodAnag())
.setSegno(-1)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setOrderRequired(mFlagAskLineaProd);
if (customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
createUDSRequest.setNumCollo(customNumCollo);
}
if (!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
createUDSRequest.setSerCollo(customSerCollo);
}
if (!UtilityString.isNullOrEmpty(codJfas)) {
createUDSRequest.setCodJfas(codJfas);
}
if (vtbDest != null) {
mtbColt.setCodAnag(vtbDest.getCodAnag());
mtbColt.setCodVdes(vtbDest.getCodVdes());
createUDSRequest.setCodAnag(vtbDest.getCodAnag());
createUDSRequest.setCodVdes(vtbDest.getCodVdes());
}
if (!UtilityString.isNullOrEmpty(codJcom)) {
mtbColt.setCodJcom(codJcom);
}
mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
mColliScaricoRESTConsumer.createUDS(createUDSRequest, mtbColt -> {
mtbColt
.setNumCollo(value.getNumCollo())
.setDataCollo(value.getDataColloS())
.setMtbColr(new ObservableArrayList<>());
this.mCurrentMtbColt = mtbColt;
@@ -328,6 +373,43 @@ public class PickingLiberoViewModel {
if (onComplete != null) onComplete.run();
this.sendLUOpened(mtbColt);
}, this::sendError);
// MtbColt mtbColt = new MtbColt();
// mtbColt.initDefaultFields(mDefaultGestione)
// .setRifOrd(mDefaultGestione == GestioneEnum.LAVORAZIONE ? "PICKING LIBERO" : null)
// .setSegno(-1)
// .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
//
// if (customNumCollo != null) {
// mtbColt.setNumCollo(customNumCollo);
// }
//
// if (!UtilityString.isNullOrEmpty(customSerCollo)) {
// mtbColt.setSerCollo(customSerCollo);
// }
//
// if (vtbDest != null) {
// mtbColt.setCodAnag(vtbDest.getCodAnag());
// mtbColt.setCodVdes(vtbDest.getCodVdes());
// }
//
// if (!UtilityString.isNullOrEmpty(codJcom)) {
// mtbColt.setCodJcom(codJcom);
// }
// mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
// mtbColt
// .setNumCollo(value.getNumCollo())
// .setDataCollo(value.getDataColloS())
// .setMtbColr(new ObservableArrayList<>());
//
// this.mCurrentMtbColt = mtbColt;
//
// this.sendOnLoadingEnded();
//
// if (onComplete != null) onComplete.run();
// this.sendLUOpened(mtbColt);
// }, this::sendError);
}
private void dispatchArt(MtbAart mtbAart, Ean128Model ean128Model) {
@@ -868,6 +950,10 @@ public class PickingLiberoViewModel {
if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort);
}
private void sendLULineaProdRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
if (this.mListener != null) mListener.onLULineaProdRequired(onComplete, onAbort);
}
private void sendArtSelectionRequest(List<MtbColr> mtbColrsToPick, MtbAart mtbAart, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort) {
if (this.mListener != null)
mListener.onArtSelectionRequest(mtbColrsToPick, mtbAart, onComplete, onAbort);
@@ -924,6 +1010,8 @@ public class PickingLiberoViewModel {
void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort);
void onLULineaProdRequired(RunnableArgs<String> onComplete, Runnable onAbort);
void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, MtbAart mtbAart, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,

View File

@@ -52,7 +52,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -276,7 +276,8 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override
public void onInfoAggiuntiveRequired(RunnableArgss<String, MtbTCol> onComplete) {
DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
DialogInfoAggiuntiveLUView.newInstance(onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName());
}
@Override

View File

@@ -2,7 +2,7 @@ package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
import java.util.HashMap;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;

View File

@@ -19,6 +19,7 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@@ -41,7 +42,7 @@ import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElenc
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.AccettazioneOrdiniPickingActivity;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.OrdineProduzioneFilterViewModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
@@ -302,7 +303,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
private List<MainListProdOrdineProduzioneElencoListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) {
return Stream.of(dataList)
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
//.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
.map(x -> {
MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel();
@@ -313,15 +314,20 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
.filter(y -> y.getBarcode().equals(x.getBarcode()))
.map(y -> new MainListProdOrdineProduzioneElencoClienteListModel()
.setPrimaryText(y.getRifOrd())
.setRightText(y.getCodJcom())
.setOriginalModel(y))
.toList();
// List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
// .filter(y -> y.getBarcode().equals(x.getBarcode()))
// .map(y -> new MainListProdOrdineProduzioneElencoClienteListModel()
// .setPrimaryText(y.getRifOrd())
// .setRightText(y.getCodJcom())
// .setOriginalModel(y))
// .toList();
listModel.setClientiListModel(clienti);
MainListProdOrdineProduzioneElencoClienteListModel cliente = new MainListProdOrdineProduzioneElencoClienteListModel()
.setPrimaryText(x.getRifOrd())
.setRightText(x.getCodJcom())
.setOriginalModel(x);
listModel.setClientiListModel(Collections.singletonList(cliente));
return listModel;
})

View File

@@ -0,0 +1,20 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import java.util.HashMap;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
public class ProdFabbisognoLineeProdBindings {
public static final int NUM_ORD_FILTER_ID = 0;
public static final HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {{
put(NUM_ORD_FILTER_ID, new FilterChipDTO()
.setID(NUM_ORD_FILTER_ID)
.setFilterChipText("Numero ordine")
.setFilterLayoutView(new FilterNumeroOrdineLayoutView()));
}};
}

View File

@@ -8,29 +8,54 @@ import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeListSingleItemBinding;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaView;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeTitleItemBinding;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.GroupTitleModel;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.filters.ProdFabbisognoLineeProdFilterViewModel;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
/**
* A simple {@link Fragment} subclass.
@@ -39,12 +64,15 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso
*/
public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITitledFragment, ProdFabbisognoLineeProdViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false);
@Inject
ProdFabbisognoLineeProdViewModel mViewModel;
private final ArrayList<Runnable> mOnPreDestroyList = new ArrayList<>();
private final ObservableArrayList<Object> mProdFabbisognoItemModel = new ObservableArrayList<>();
private FragmentProdFabbisognoLineeProdBinding mBindings;
private ProdFabbisognoLineeProdFilterViewModel mFilterViewModel = new ProdFabbisognoLineeProdFilterViewModel();
public ProdFabbisognoLineeProdFragment() {
// Required empty public constructor
@@ -66,13 +94,18 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_fabbisogno_linee_prod, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.prodFabbisognoLineeProdComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
this.initFilters();
return mBindings.getRoot();
}
@@ -80,25 +113,162 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
@Override
public void onStart() {
super.onStart();
this.mViewModel.setListener(this);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
DialogAskMagazzinoProssimitaView
.newInstance((jtbFase, startDate, endDate) -> {
// if (jtbFase == null) {
// ((IPoppableActivity) getActivity()).pop();
// } else {
//Load fabbisogno
this.mViewModel.loadFabbisogno(startDate, endDate, codMdep, this::startPickingActivity);
// }
}, () -> {
popMe();
})
.show(getActivity().getSupportFragmentManager(), "tag");
mViewModel.init();
}
private void initRecyclerView() {
mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
mFilterViewModel.init(mViewModel.getOrdiniList().getValue());
this.refreshList(null);
});
var itemTypeHeader = new Type<GroupTitleModel, FragmentProdFabbisognoLineeTitleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_title_item, BR.item);
var itemType = new Type<ProdFabbisognoLineeItemModelDto, FragmentProdFabbisognoLineeListSingleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_list_single_item, BR.item);
itemTypeHeader.onClick(x -> {
var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get());
Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) y).getOrdineLavorazioneDTO().getCodJfas().equals(item.getTitle()))
.forEach(y -> {
((ProdFabbisognoLineeItemModelDto) y).getSelected().set(item.selected.get());
});
fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
return null;
});
itemType.onClick(x -> {
var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get());
fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
return null;
});
new LiveAdapter(mProdFabbisognoItemModel)
.map(GroupTitleModel.class, itemTypeHeader)
.map(ProdFabbisognoLineeItemModelDto.class, itemType)
.into(this.mBindings.inventarioList);
}
private void refreshList(List<ProdFabbisognoLineeItemModelDto> filteredList) {
List<ProdFabbisognoLineeItemModelDto> tmpList;
if (filteredList != null) {
tmpList = filteredList;
} else if (mFilterViewModel != null) {
mFilterViewModel.applyAllTests();
tmpList = mFilterViewModel.getCurrentList().getValue();
} else {
tmpList = mViewModel.getOrdiniList().getValue();
}
this.mProdFabbisognoItemModel.clear();
if (tmpList != null) {
this.mProdFabbisognoItemModel.addAll(convertDataModelToListModel(tmpList));
}
}
private List<Object> convertDataModelToListModel(List<ProdFabbisognoLineeItemModelDto> itemModel) {
Stream.of(itemModel)
.sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas()))
.toList();
List<Object> listaFinale = new ArrayList<>();
String currentGroup = null;
for (ProdFabbisognoLineeItemModelDto item : itemModel) {
OrdineLavorazioneDTO ordineLavorazione = item.getOrdineLavorazioneDTO();
String codJfas = ordineLavorazione.getCodJfas();
if (!codJfas.equals(currentGroup)) {
listaFinale.add(new GroupTitleModel().setTitle(codJfas));
currentGroup = codJfas;
}
listaFinale.add(item);
}
return listaFinale;
}
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@Override
public void run() {
refreshList(null);
}
};
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
for (var filterChipDTO : ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet()) {
FilterChipView filterChipView = new FilterChipView(
requireActivity(),
filterChipDTO.getValue().getFilterChipText(),
v -> initBottomSheetDialogFilter(filterChipDTO.getValue()));
if (filterChipDTO.getKey() == ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID) {
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mFilterViewModel.getCurrentNumOrdsPredicate().get() == null) {
filterChipView.disableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView);
mBindings.filterChips.smoothScrollTo(0, 0);
} else {
filterChipView.enableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView, 0);
mBindings.filterChips.smoothScrollTo(0, 0);
}
}
});
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null));
}
this.mBindings.filterChipsGroup.addView(filterChipView);
}
}
private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) {
filterChipDTO
.getFilterLayoutView()
.setFilterName(filterChipDTO.getFilterChipText())
.setContext(requireActivity());
var filterLayoutView = filterChipDTO
.getFilterLayoutView();
if (filterChipDTO.getID() == ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID) {
((FilterNumeroOrdineLayoutView) filterLayoutView)
.setAllNumOrds(mFilterViewModel.getAllNumOrds())
.setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds())
.setOnFilterApplied(mFilterViewModel::setNumOrdFilter)
.setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()))
.filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get()))
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.toList());
}
if (!filterLayoutView.isAdded())
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
}
@Override
public void onDestroy() {
@@ -106,6 +276,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
onPreDestroy.run();
}
mViewModel.setListener(null);
super.onDestroy();
}
@@ -114,6 +285,30 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.prod_fabbisogno_linee_prod_title).toString());
}
public void dispatchOrders() {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String ordini = UtilityDB.listValueToString(Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd().toString())
.toList());
Date dataInizio = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrdD())
.min(Date::compareTo)
.orElse(null);
Date dataFine = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrdD())
.max(Date::compareTo)
.orElse(null);
this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, this::startPickingActivity);
}
private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
@@ -125,7 +320,11 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
.setQtaOrd(x.getQtaFabbisogno())
.setNumCnfOrd(x.getNumCnfFabbisogno())
.setQtaCnfOrd(UtilityBigDecimal.divide(x.getQtaFabbisogno(), x.getNumCnfFabbisogno()))
.setFlagEnablePickManuale(false);
.setFlagEnablePickManuale(false)
.setCodMgrp(x.getCodMgrp())
.setDescrizioneMgrp(x.getDescrizioneMgrp())
.setCodMsgr(x.getCodMsgr())
.setDescrizioneMsgr(x.getDescrizioneMsgr());
sitArtOrdDTO.getExtraInfo().put("dataInizio", x.getDataInizio());
sitArtOrdDTO.getExtraInfo().put("dataFine", x.getDataFine());
@@ -134,16 +333,17 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
})
.toList();
boolean divideByGrpMerc = SettingsManager.iDB().isGroupPoductionByCommodityGroup();
SpedizioneActivity.startActivity(getActivity(),
sitArtOrdDTOS,
null,
new ArrayList<>(),
new ArrayList<>(),
GestioneEnum.LAVORAZIONE,
+1,
MtbColr.Causale.VERSAMENTO,
DialogRowInfoProdFabbisognoLineeProdView.class);
popMe();
DialogRowInfoProdFabbisognoLineeProdView.class,
divideByGrpMerc);
}

View File

@@ -2,14 +2,17 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
@Module(subcomponents = ProdFabbisognoLineeProdComponent.class)
public class ProdFabbisognoLineeProdModule {
@Provides
ProdFabbisognoLineeProdViewModel providesProdFabbisognoLineeProdViewModel(ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer) {
return new ProdFabbisognoLineeProdViewModel(prodFabbisognoLineeProdRESTConsumer);
ProdFabbisognoLineeProdViewModel providesProdFabbisognoLineeProdViewModel(
ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer,
MesRESTConsumer mesRESTConsumer) {
return new ProdFabbisognoLineeProdViewModel(prodFabbisognoLineeProdRESTConsumer, mesRESTConsumer);
}
}

View File

@@ -1,41 +1,86 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.exception.NoOrdersScheduledException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.GroupTitleModel;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeProdViewModel {
private final ProdFabbisognoLineeProdRESTConsumer mProdFabbisognoLineeProdRESTConsumer;
private final MesRESTConsumer mMesRESTConsumer;
private Listener mListener;
public ProdFabbisognoLineeProdViewModel(ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer) {
private final MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> ordiniList = new MutableLiveData<>();
public ProdFabbisognoLineeProdViewModel(
ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer,
MesRESTConsumer mesRESTConsumer) {
this.mProdFabbisognoLineeProdRESTConsumer = prodFabbisognoLineeProdRESTConsumer;
this.mMesRESTConsumer = mesRESTConsumer;
}
public void init() {
loadData();
}
public void loadFabbisogno(Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete) {
public void loadData() {
this.sendOnLoadingStarted();
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(startDate, endDate, codMdep, jtbFasi -> {
if (jtbFasi != null) Stream.of(jtbFasi)
.forEach(x -> x
.setDataInizio(startDate)
.setDataFine(endDate));
this.mMesRESTConsumer.getOrdiniLavorazione("I", ordini -> {
List<ProdFabbisognoLineeItemModelDto> itemModel = Stream.of(ordini)
.filter(x -> x.getCodMdep().equals(SettingsManager.i().getUserSession().getDepo().getCodMdep()))
.map(ord -> new ProdFabbisognoLineeItemModelDto()
.setOrdineLavorazioneDTO(ord)
)
.sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas()))
.toList();
ordiniList.postValue(itemModel);
this.sendOnLoadingEnded();
onComplete.run(jtbFasi);
}, this::sendError);
}
public LiveData<List<ProdFabbisognoLineeItemModelDto>> getOrdiniList() {
return ordiniList;
}
public void loadFabbisogno(String ordini, String codMdep, Date dataInizio, Date dataFine, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete) {
this.sendOnLoadingStarted();
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(ordini, codMdep, jtbFasi -> {
if (jtbFasi != null) {
Stream.of(jtbFasi)
.forEach(x -> {
x.setDataInizio(dataInizio);
x.setDataFine(dataFine);
});
this.sendOnLoadingEnded();
onComplete.run(jtbFasi);
} else {
this.mListener.onError(new NoOrdersScheduledException());
}
}, this::sendError);
}

View File

@@ -0,0 +1,22 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class GroupTitleModel {
public BindableBoolean selected = new BindableBoolean();
public String title;
public BindableBoolean getSelected() {
return selected;
}
public String getTitle() {
return title;
}
public GroupTitleModel setTitle(String title) {
this.title = title;
return this;
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeItemModelDto {
public BindableBoolean selected = new BindableBoolean();
public OrdineLavorazioneDTO ordineLavorazioneDTO;
public BindableBoolean getSelected() {
return selected;
}
public OrdineLavorazioneDTO getOrdineLavorazioneDTO() {
return ordineLavorazioneDTO;
}
public ProdFabbisognoLineeItemModelDto setOrdineLavorazioneDTO(OrdineLavorazioneDTO ordineLavorazioneDTO) {
this.ordineLavorazioneDTO = ordineLavorazioneDTO;
return this;
}
}

View File

@@ -16,6 +16,10 @@ public class ProdFabbisognoLineeProdDTO {
private BigDecimal numCnfFabbisogno;
private Date dataInizio;
private Date dataFine;
private String codMgrp;
private String descrizioneMgrp;
private String codMsgr;
private String descrizioneMsgr;
public ProdFabbisognoLineeProdDTO() {
}
@@ -118,4 +122,40 @@ public class ProdFabbisognoLineeProdDTO {
this.dataFine = dataFine;
return this;
}
public String getCodMgrp() {
return codMgrp;
}
public ProdFabbisognoLineeProdDTO setCodMgrp(String codMgrp) {
this.codMgrp = codMgrp;
return this;
}
public String getDescrizioneMgrp() {
return descrizioneMgrp;
}
public ProdFabbisognoLineeProdDTO setDescrizioneMgrp(String descrizioneMgrp) {
this.descrizioneMgrp = descrizioneMgrp;
return this;
}
public String getCodMsgr() {
return codMsgr;
}
public ProdFabbisognoLineeProdDTO setCodMsgr(String codMsgr) {
this.codMsgr = codMsgr;
return this;
}
public String getDescrizioneMsgr() {
return descrizioneMsgr;
}
public ProdFabbisognoLineeProdDTO setDescrizioneMsgr(String descrizioneMsgr) {
this.descrizioneMsgr = descrizioneMsgr;
return this;
}
}

View File

@@ -0,0 +1,74 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.filters;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
public class ProdFabbisognoLineeProdFilterViewModel {
private final ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> currentNumOrdsPredicate = new ObservableField<>();
private List<ProdFabbisognoLineeItemModelDto> initialList;
private final MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> currentList = new MutableLiveData<>();
public void init(List<ProdFabbisognoLineeItemModelDto> initialList){
this.initialList = initialList;
this.currentList.setValue(this.initialList);
}
public MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> getCurrentList() {
return this.currentList;
}
public void setNumOrdFilter(List<Integer> numOrds){
if (numOrds == null || numOrds.isEmpty()) currentNumOrdsPredicate.set(null);
else{
currentNumOrdsPredicate.set(x -> numOrds.contains(x.getOrdineLavorazioneDTO().getNumOrd()));
}
}
public void applyAllTests(){
List<ProdFabbisognoLineeItemModelDto> returnList = null;
if (currentNumOrdsPredicate.get() == null){
returnList = this.initialList;
}else {
Stream<ProdFabbisognoLineeItemModelDto> tmpStream = Stream.of(this.initialList)
.filter(x -> (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))));
returnList = tmpStream.toList();
}
this.currentList.setValue(returnList);
}
public ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> getCurrentNumOrdsPredicate() {
return currentNumOrdsPredicate;
}
public List<Integer> getAllNumOrds(){
return Stream
.of(Objects.requireNonNull(initialList))
.filter(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null)
.sortBy(x -> -x.getOrdineLavorazioneDTO().getNumOrd())
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null ? x.getOrdineLavorazioneDTO().getNumOrd() : null)
.distinct()
.toList();
}
public List<Integer> getAvailableNumOrds(){
if (currentNumOrdsPredicate.get() == null) return getAllNumOrds();
else {
return Stream.of(this.initialList)
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.distinct()
.toList();
}
}
}

View File

@@ -32,9 +32,9 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
}
public void loadFabbisogno(Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void loadFabbisogno(String numOrd, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
ProdFabbisognoLineeProdRESTConsumerService prodFabbisognoLineeProdRESTConsumerService = RESTBuilder.getService(ProdFabbisognoLineeProdRESTConsumerService.class);
prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(UtilityDate.formatDate(startDate, "yyyy-MM-dd"), UtilityDate.formatDate(endDate, "yyyy-MM-dd"), codMdep)
prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(numOrd, codMdep)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> call,

View File

@@ -13,7 +13,5 @@ import retrofit2.http.Query;
public interface ProdFabbisognoLineeProdRESTConsumerService
{
@GET("wms/approvvigionamento/retrieveFabbisogno")
Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> loadFabbisogno(@Query("startDate") String startDate,
@Query("endDate") String endDate,
@Query("codMdep") String codMdep);
Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> loadFabbisogno(@Query("numOrd") String numOrd, @Query("codMdep") String codMdep);
}

View File

@@ -14,6 +14,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
@@ -109,7 +110,14 @@ public class ProdVersamentoMaterialeViewModel {
this.sendError(new NoLUFoundException());
} else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
this.onLUOpened(mtbColt);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
@@ -122,7 +130,12 @@ public class ProdVersamentoMaterialeViewModel {
private void executeEtichettaLU(String sscc) {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
this.onLUOpened(mtbColt);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError);
}

View File

@@ -94,6 +94,8 @@ public class OrdineLavorazioneDTO {
private String dataConsCommessa;
private String descrizioneAttivita;
private BigDecimal prodStd;
private Object mtbColtToEdit;
@@ -523,4 +525,12 @@ public class OrdineLavorazioneDTO {
return progress;
}
public String getDescrizioneAttivita() {
return descrizioneAttivita;
}
public OrdineLavorazioneDTO setDescrizioneAttivita(String descrizioneAttivita) {
this.descrizioneAttivita = descrizioneAttivita;
return this;
}
}

View File

@@ -207,12 +207,12 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
}
@Override
public void confirmCheckForUnlistedProduct(String barcode) {
public void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete) {
DialogSimpleMessageView.makeInfoDialog(getText(R.string.info).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_order_unlisted_item)),
null,
() -> {
this.mViewModel.loadArticolo(barcode);
this.mViewModel.loadArticolo(barcode, onComplete);
}, this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExceedingQtyOrder");
}
@@ -255,8 +255,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
DialogSimpleMessageView.makeInfoDialog(getText(R.string.warning).toString(),
Html.fromHtml(getResources().getString(R.string.confirm_export_invalid_product)),
null,
onConfirm
,
onConfirm,
this::onLoadingEnded).show(getSupportFragmentManager(), "confirmExportInvalidProducts");
}

View File

@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import javax.inject.Inject;
@@ -25,7 +26,6 @@ import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloOrdinab
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;
@@ -157,38 +157,49 @@ public class PVOrdineAcquistoEditViewModel {
}
public void processBarcode(String barcode) {
try {
this.sendOnLoadingStarted();
Runnable onComplete = BarcodeManager::enable;
BarcodeManager.disable();
try {
List<ArticoloOrdinabileDTO> listArticoli = findArticoliByBarcode(barcode);
if (listArticoli == null || listArticoli.isEmpty())
onNoArtsFoundByBarcode(barcode, onComplete);
else
addArtFromGriglia(listArticoli, onComplete);
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);
});
}
} catch (Exception e) {
this.sendError(e);
BarcodeManager.enable();
onComplete.run();
}
}
private void onNoArtsFoundByBarcode(String barcode, Runnable onComplete) throws NoResultFromBarcodeException {
if (SettingsManager.iDB().isFlagConsentiFuoriPianoLogistico() && UtilityString.isNullOrEmpty(mCurrentOrdine.getCodAlis())) {
this.mListener.confirmCheckForUnlistedProduct(barcode, onComplete);
} else {
throw new NoResultFromBarcodeException(barcode);
}
}
private void addArtFromGriglia(List<ArticoloOrdinabileDTO> listArticoli, Runnable onComplete) {
if (listArticoli.size() == 1) {
this.addArticoloToOrdine(
listArticoli.get(0),
onComplete,
this::sendError
);
} else {
this.mListener.chooseArtFromList(listArticoli, (art) -> {
this.addArticoloToOrdine(
art,
onComplete,
this::sendError);
});
}
}
private void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad) {
try {
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError);
@@ -256,10 +267,11 @@ public class PVOrdineAcquistoEditViewModel {
return articolo;
}
public List<ArticoloOrdinabileDTO> matchArticoliForBarcode(String barcode) throws NoArtsInGridException, MultipleResultFromBarcodeException, NoResultFromBarcodeException {
public List<ArticoloOrdinabileDTO> findArticoliByBarcode(String barcode) throws NoArtsInGridException {
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
throw new NoArtsInGridException();
}
List<ArticoloOrdinabileDTO> articoli = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().contains(barcode) ||
@@ -366,13 +378,17 @@ public class PVOrdineAcquistoEditViewModel {
if (this.mListener != null) mListener.onError(ex);
}
public void loadArticolo(String barcode) {
public void loadArticolo(String barcode, Runnable onComplete) {
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);
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());
@@ -381,7 +397,8 @@ public class PVOrdineAcquistoEditViewModel {
} else {
mArticoliGriglia.add(articolo);
}
this.processBarcode(barcode);
this.addArtFromGriglia(Collections.singletonList(existingArt), onComplete);
};
if (grigliaDTO == null || grigliaDTO.getArticoli().isEmpty()) {
@@ -400,7 +417,6 @@ public class PVOrdineAcquistoEditViewModel {
addArtToOrder.run(newArt);
}, this::sendError);
}
@@ -420,7 +436,7 @@ public class PVOrdineAcquistoEditViewModel {
void onError(Exception ex);
void confirmCheckForUnlistedProduct(String barcode);
void confirmCheckForUnlistedProduct(String barcode, Runnable onComplete);
void confirmExportInvalidProducts(Runnable onConfirm);

View File

@@ -168,7 +168,7 @@ public class RettificaGiacenzeViewModel {
if (onComplete != null) onComplete.run();
if (mtbAartList != null && mtbAartList.size() > 0) {
this.dispatchArt(mtbAartList.get(0), pickData);
this.dispatchArts(mtbAartList);
} else {
this.sendError(new NoResultFromBarcodeException(barcodeProd));
}

View File

@@ -73,7 +73,7 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListView;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -126,7 +126,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
GestioneEnum gestioneCol,
int segnoCol,
Integer defaultCausaleUL,
Class<? extends BaseDialogRowInfoView> infoDialogClassType) {
Class<? extends BaseDialogRowInfoView> infoDialogClassType,
boolean divideByGrpMerc) {
Intent myIntent = new Intent(context, SpedizioneActivity.class);
String keyPickingList = DataCache.addItem(ordini);
@@ -150,6 +151,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
String keyInfoDialogClassType = DataCache.addItem(infoDialogClassType);
myIntent.putExtra("keyInfoDialogClassType", keyInfoDialogClassType);
String keyDivideByGrpMerc = DataCache.addItem(divideByGrpMerc);
myIntent.putExtra("keyDivideByGrpMerc", keyDivideByGrpMerc);
context.startActivity(myIntent);
}
@@ -164,6 +168,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mSegnoCol = DataCache.retrieveItem(getIntent().getStringExtra("keySegnoCol"));
mDefaultCausaleUL = DataCache.retrieveItem(getIntent().getStringExtra("keyDefaultCausaleCol"));
mInfoDialogClassType = DataCache.retrieveItem(getIntent().getStringExtra("keyInfoDialogClassType"));
mDivideByGrpMerc = DataCache.retrieveItem(getIntent().getStringExtra("keyDivideByGrpMerc"));
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_spedizione);
@@ -178,7 +183,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mFlagShowCodForn = SettingsManager.iDB().isShowCodFornSpedizione();
mDivideByGrpMerc = SettingsManager.iDB().isGroupShippingByCommodityGroup();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
mEnableQuantityReset = sharedPreferences.getBoolean("picking_uscita_enable_quantity_reset", true);
@@ -1015,6 +1019,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onInfoAggiuntiveRequired(MtbColt mtbColt, RunnableArgss<String, MtbTCol> onComplete) {
DialogInfoAggiuntiveLU.newInstance(mtbColt, onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog");
DialogInfoAggiuntiveLUView.newInstance(mtbColt, onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName());
}
}

View File

@@ -20,6 +20,7 @@ import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.EmptyLUException;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@@ -158,7 +159,7 @@ public class SpedizioneViewModel {
this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd;
if (testateOrdini != null) {
if (testateOrdini != null && testateOrdini.size() > 0) {
this.mIsOrdTrasf = Stream.of(testateOrdini).map(OrdineUscitaInevasoDTO::isOrdTrasf).withoutNulls().distinctBy(x -> x).findFirst().get();
}
@@ -238,19 +239,18 @@ public class SpedizioneViewModel {
mDefaultFiltroOrdine.add(filtro);
});
}
if (mDefaultGestioneOfUL == GestioneEnum.VENDITA) {
mColliScaricoRESTConsumer = mColliSpedizioneRESTConsumer;
if (mDefaultGestioneOfUL == GestioneEnum.VENDITA) {
mColliScaricoRESTConsumer = mColliSpedizioneRESTConsumer;
} else if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == -1) {
mColliScaricoRESTConsumer = mColliLavorazioneRESTConsumer;
} else if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == +1) {
mColliScaricoRESTConsumer = mColliLavorazioneRESTConsumer;
} else {
this.sendError(new NotImplementedException(String.format("Gestione %s e segno %d non gestito", mDefaultGestioneOfUL.getText(), mDefaultSegnoCol)));
}
} else if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == -1) {
mColliScaricoRESTConsumer = mColliLavorazioneRESTConsumer;
} else if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == +1) {
mColliScaricoRESTConsumer = mColliLavorazioneRESTConsumer;
} else {
this.sendError(new NotImplementedException(String.format("Gestione %s e segno %d non gestito", mDefaultGestioneOfUL.getText(), mDefaultSegnoCol)));
}
}
@@ -492,7 +492,13 @@ public class SpedizioneViewModel {
}
} else {
this.createNewLU(null, null, () -> searchArtFromUL(mtbColt, onComplete));
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.createNewLU(null, null, () -> searchArtFromUL(mtbColt, onComplete));
} else this.sendError(new InvalidCodMdepException());
}
}, this::sendError);
@@ -530,7 +536,14 @@ public class SpedizioneViewModel {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
this.searchArtFromUL(mtbColt, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else {
this.sendError(new EmptyLUException());
}
@@ -546,8 +559,17 @@ public class SpedizioneViewModel {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if (mtbColt.getSegno() != -1) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException());
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else {
this.sendError(new InvalidLUException());
}
} else {
this.sendError(new EmptyLUException());
}
@@ -773,6 +795,8 @@ public class SpedizioneViewModel {
MtbColt refMtbColt = matchedItem.getRefMtbColt();
if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) {
refMtbColt = matchedItem.getMtbColts().get(0);
} else if (matchedItem.getTempPickData().getSourceMtbColt() != null) {
refMtbColt = matchedItem.getTempPickData().getSourceMtbColt();
}
MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null;
this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null);
@@ -860,8 +884,6 @@ public class SpedizioneViewModel {
} else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, refMtbColr, null, canPartitaMagBeChanged);
}
}
private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr refMtbColr, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) {
@@ -1487,11 +1509,13 @@ public class SpedizioneViewModel {
var clonedLuToClose = (MtbColt) this.mCurrentMtbColt.clone();
clonedLuToClose.setMtbColr(null);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
if(mTestateOrdini != null && !mTestateOrdini.isEmpty()) codMdep = mTestateOrdini.get(0).getCodMdep();
var closeUDSRequestDto = new CloseUDSRequestDTO()
.setMtbColt(clonedLuToClose)
//.setPrintSSCC(shouldPrint)
.setOrderCodMdep(mTestateOrdini.get(0).getCodMdep());
.setOrderCodMdep(codMdep);
this.mColliSpedizioneRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> {
onComplete.run(closeResponse.getGeneratedMtbColts());

View File

@@ -14,6 +14,7 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.exception.NoArtsInLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@@ -135,7 +136,12 @@ public class VersamentoMerceViewModel {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
//TAKE HERE
pickMerceULtoUL(mtbColt, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError);
} else {
@@ -184,11 +190,23 @@ public class VersamentoMerceViewModel {
if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
onComplete.run();
pickMerceULtoUL(mtbColtAnonimo, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtAnonimo, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError);
} else {
pickMerceULtoUL(mtbColt, onComplete);
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters;
package it.integry.integrywmsnative.ui.filter_chips.filters;
import android.os.Bundle;
import android.view.LayoutInflater;

View File

@@ -103,7 +103,8 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie
List<MtbColr> mtbColrs = mViewModel.getObservableMtbColt().get().getMtbColr();
mBinding.textviewArtCounter.setText(String.valueOf(mtbColrs.size()));
mBinding.textviewArtDescription.setText(mContext.getResources().getQuantityString(R.plurals.articles, mtbColrs.size()));
mViewModel.calcPesi();
mViewModel.refreshPesi();
}
public BottomSheetFragmentLUContentView setListener(Listener listener) {

View File

@@ -41,7 +41,7 @@ public class BottomSheetFragmentLUContentViewModel {
return this;
}
public void calcPesi() {
public void refreshPesi() {
MtbColt collo = this.mtbColt.get();
if (collo == null) return;
@@ -52,7 +52,7 @@ public class BottomSheetFragmentLUContentViewModel {
for (MtbColr mtbColr : collo.getMtbColr()) {
MtbAart articolo = mtbColr.getMtbAart();
if (articolo == null || articolo.getPesoKg() == null)
if (articolo == null || articolo.getPesoKg() == null || articolo.getTaraKg() == null)
continue;
BigDecimal pesoRiga = articolo.isFlagQtaCnfFissaBoolean() ? mtbColr.getNumCnf().multiply(articolo.getPesoKg()) : mtbColr.getQtaCol();

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_linea_prod;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskLineaProdComponent {
@Subcomponent.Factory
interface Factory {
DialogAskLineaProdComponent create();
}
void inject(DialogAskLineaProdView dialogAskLineaProdView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_linea_prod;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogAskLineaProdComponent.class)
public class DialogAskLineaProdModule {
@Provides
DialogAskLineaProdViewModel providesDialogAskLineaProdViewModel() {
return new DialogAskLineaProdViewModel();
}
}

View File

@@ -0,0 +1,115 @@
package it.integry.integrywmsnative.view.dialogs.ask_linea_prod;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.databinding.DialogAskLineaProdBinding;
public class DialogAskLineaProdView extends BaseDialogFragment implements DialogAskLineaProdViewModel.Listener {
@Inject
DialogAskLineaProdViewModel mViewModel;
private final RunnableArgs<String> onComplete;
private final Runnable onAbort;
private DialogAskLineaProdBinding mBindings;
private Context mContext;
private int mBarcodeScannerIstanceID;
//Pass here all external parameters
public static DialogAskLineaProdView newInstance(RunnableArgs<String> onComplete, Runnable onAbort) {
return new DialogAskLineaProdView(onComplete, onAbort);
}
private DialogAskLineaProdView(RunnableArgs<String> onComplete, Runnable onAbort) {
super();
this.onComplete = onComplete;
this.onAbort = onAbort;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogAskLineaProdBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogAskLineaProdComponent()
.create()
.inject(this);
mViewModel.setListener(this);
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setNegativeButton(R.string.abort, (dialogInterface, i) -> {
if(this.onAbort != null) this.onAbort.run();
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
alertDialog.setOnDismissListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.initBarcode();
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, BarcodeManager::enable);
};
@Override
public void onProductionLineSelected(String codJfas) {
this.onComplete.run(codJfas);
requireActivity().runOnUiThread(this::dismiss);
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
super.onDismiss(dialog);
}
}

View File

@@ -0,0 +1,60 @@
package it.integry.integrywmsnative.view.dialogs.ask_linea_prod;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLineaProdBarcodeException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
public class DialogAskLineaProdViewModel {
private Listener mListener;
public void processBarcodeDTO(BarcodeScanDTO data, Runnable onComplete) {
if (UtilityBarcode.isEtichettaPosizione(data)) {
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(data.getStringValue());
if (!foundPosizione.isFlagLineaProduzione()) {
this.sendError(new InvalidLineaProdBarcodeException(data.getStringValue()));
onComplete.run();
return;
}
onComplete.run();
this.sendOnProductionLineSelected(foundPosizione.getPosizione());
} else {
this.sendError(new NoResultFromBarcodeException());
onComplete.run();
}
}
public DialogAskLineaProdViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendOnProductionLineSelected(String codJfas) {
if (this.mListener != null) mListener.onProductionLineSelected(codJfas);
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onProductionLineSelected(String codJfas);
}
}

View File

@@ -0,0 +1,10 @@
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InactiveBatchLotException extends Exception {
public InactiveBatchLotException(String lotto) {
super(String.format(UtilityResources.getString(R.string.batch_lot_not_enabled), lotto));
}
}

View File

@@ -1,163 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
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 android.widget.AdapterView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel;
public class DialogInfoAggiuntiveLU extends BaseDialogFragment implements InfoAggiuntiveLUDialogViewModel.Listener {
@Inject
InfoAggiuntiveLUDialogViewModel mViewModel;
private DialogNoteAggiuntiveNuovaUlBinding mBindings;
private final RunnableArgss<String, MtbTCol> mOnComplete;
private MtbColt currentMtbColt;
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
public ObservableField<String> additionalNotes = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
public static DialogInfoAggiuntiveLU newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new DialogInfoAggiuntiveLU(null, onComplete);
}
public static DialogInfoAggiuntiveLU newInstance(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
return new DialogInfoAggiuntiveLU(mtbColt, onComplete);
}
private DialogInfoAggiuntiveLU(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete) {
super();
this.mOnComplete = onComplete;
this.currentMtbColt = mtbColt;
}
@Override
public void onStart() {
super.onStart();
this.init();
UtilityDialog.setTo90PercentWidth(requireActivity(), this);
this.mViewModel.setListener(this);
this.mViewModel.init();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.infoAggiuntiveLUDialogComponent()
.create()
.inject(this);
mBindings.setView(this);
mBindings.setViewModel(this.mViewModel);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().setCanceledOnTouchOutside(false);
getDialog().setCancelable(false);
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
return mBindings.getRoot();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
if (mOnComplete != null)
mOnComplete.run(additionalNotes.get(), mViewModel.getInternalTipoPed());
super.onDismiss(dialog);
}
private void init() {
UtilityObservable.addPropertyChanged(this.selectedMtbTcol, (value) -> {
if (this.codTcolArrayAdapter != null && this.codTcolArrayAdapter.getDataset() != null) {
Optional<DialogInputLUProdTipoColloListModel> selectedItem = Stream.of(this.codTcolArrayAdapter.getDataset())
.filter(x -> x.toString().equals(value))
.findFirst();
if (selectedItem.isPresent()) {
currentMtbTCol.set(selectedItem.get());
this.mViewModel.setInternalTipoPed(selectedItem.get().getOriginalModel());
}
}
});
this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> {
codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo);
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
if (currentMtbColt != null && !UtilityString.isNullOrEmpty(currentMtbColt.getCodTcol()) && UtilityString.isNullOrEmpty(this.selectedMtbTcol.get())) {
MtbTCol tipoPedana = Stream.of(tipiCollo).filter(x -> x.getCodTcol().equalsIgnoreCase(currentMtbColt.getCodTcol())).findFirstOrElse(null);
if (tipoPedana != null) {
this.selectedMtbTcol.set(tipoPedana.getCodTcol() + " - " + tipoPedana.getDescrizione());
}
}
});
this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
currentMtbTCol.set(codTcolArrayAdapter.getItem(i));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
currentMtbTCol.set(null);
}
});
mBindings.buttonConfirm.setOnClickListener(v -> {
dismiss();
});
if (this.currentMtbColt != null) {
this.additionalNotes.set(currentMtbColt.getAnnotazioni());
}
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInfoAggiuntiveLUComponent {
@Subcomponent.Factory
interface Factory {
DialogInfoAggiuntiveLUComponent create();
}
void inject(DialogInfoAggiuntiveLUView dialogInfoAggiuntiveLUView);
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
@Module(subcomponents = DialogInfoAggiuntiveLUComponent.class)
public class DialogInfoAggiuntiveLUModule {
@Provides
DialogInfoAggiuntiveLUViewModel providesDialogInfoAggiuntiveLUViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer) {
return new DialogInfoAggiuntiveLUViewModel(magazzinoRESTConsumer);
}
}

View File

@@ -0,0 +1,163 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.ObservableField;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.jetbrains.annotations.NotNull;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogInfoAggiuntiveLuBinding;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel;
public class DialogInfoAggiuntiveLUView extends BaseDialogFragment implements DialogInfoAggiuntiveLUViewModel.Listener {
@Inject
DialogInfoAggiuntiveLUViewModel mViewModel;
public ObservableField<String> additionalNotes = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
private DialogInfoAggiuntiveLuBinding mBindings;
private Context mContext;
private final RunnableArgss<String, MtbTCol> mOnComplete;
private final Runnable mOnAbort;
private final MtbColt currentMtbColt;
public static DialogInfoAggiuntiveLUView newInstance(@NotNull RunnableArgss<String, MtbTCol> onComplete, @NotNull Runnable onAbort) {
return new DialogInfoAggiuntiveLUView(null, onComplete, onAbort);
}
public static DialogInfoAggiuntiveLUView newInstance(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete, @NotNull Runnable onAbort) {
return new DialogInfoAggiuntiveLUView(mtbColt, onComplete, onAbort);
}
private DialogInfoAggiuntiveLUView(MtbColt mtbColt, @NotNull RunnableArgss<String, MtbTCol> onComplete, @NotNull Runnable onAbort) {
super();
this.mOnComplete = onComplete;
this.mOnAbort = onAbort;
this.currentMtbColt = mtbColt;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogInfoAggiuntiveLuBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogInfoAggiuntiveLUComponent()
.create()
.inject(this);
mBindings.setView(this);
mBindings.setViewModel(mViewModel);
mViewModel.setListener(this);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialogInterface, i) -> {
mOnComplete.run(additionalNotes.get(), currentMtbTCol.get() != null ? currentMtbTCol.get().getOriginalModel() : null);
})
.setNegativeButton(R.string.abort, (dialogInterface, i) -> {
this.mOnAbort.run();
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.init();
this.mViewModel.init();
}
private void init() {
if (this.currentMtbColt != null)
this.additionalNotes.set(currentMtbColt.getAnnotazioni());
var codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(requireContext(),
R.layout.array_adapter_single_item,
this.mViewModel.getTipiCollo());
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
this.mViewModel.getTipiCollo().observe(this, tipiCollo -> {
if (currentMtbColt != null && !UtilityString.isNullOrEmpty(currentMtbColt.getCodTcol()) && UtilityString.isNullOrEmpty(this.selectedMtbTcol.get())) {
tipiCollo.stream()
.filter(x -> x.getCodTcol().equalsIgnoreCase(currentMtbColt.getCodTcol()))
.findFirst()
.ifPresent(tipoPedana -> this.selectedMtbTcol.set(tipoPedana.getCodTcol() + " - " + tipoPedana.getDescrizione()));
}
});
UtilityObservable.addPropertyChanged(this.selectedMtbTcol, (value) -> {
if (codTcolArrayAdapter.getDataset() != null) {
codTcolArrayAdapter.getDataset().stream()
.filter(x -> x.toString().equals(value))
.findFirst()
.ifPresent(tipoPedana -> {
currentMtbTCol.set(tipoPedana);
});
}
});
this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
currentMtbTCol.set(codTcolArrayAdapter.getItem(i));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
currentMtbTCol.set(null);
}
});
}
}

View File

@@ -10,23 +10,21 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingL
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
public class InfoAggiuntiveLUDialogViewModel {
public class DialogInfoAggiuntiveLUViewModel {
public final MutableLiveData<List<MtbTCol>> tipiCollo = new MutableLiveData<>();
private MtbTCol internalTipoPed;
private final MutableLiveData<List<MtbTCol>> tipiCollo = new MutableLiveData<>();
private Listener mListener;
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
@Inject
public InfoAggiuntiveLUDialogViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer) {
this.mMagazzinoRESTConsumer = magazzinoRESTConsumer;
public DialogInfoAggiuntiveLUViewModel(MagazzinoRESTConsumer mMagazzinoRESTConsumer) {
this.mMagazzinoRESTConsumer = mMagazzinoRESTConsumer;
}
public void init() {
new Thread(this::sendOnLoadingStarted).start();
this.sendOnLoadingStarted();
mMagazzinoRESTConsumer.getTipiCollo(tipiCollo -> {
this.tipiCollo.postValue(tipiCollo);
@@ -35,19 +33,14 @@ public class InfoAggiuntiveLUDialogViewModel {
}
public MutableLiveData<List<MtbTCol>> getTipiCollo() {
return this.tipiCollo;
return tipiCollo;
}
public void setInternalTipoPed(MtbTCol internalTipoPed) {
this.internalTipoPed = internalTipoPed;
public void setListener(Listener listener) {
this.mListener = listener;
}
public MtbTCol getInternalTipoPed() {
return internalTipoPed;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
@@ -60,13 +53,9 @@ public class InfoAggiuntiveLUDialogViewModel {
if (this.mListener != null) mListener.onError(ex);
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
}
}
}

View File

@@ -1,15 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
import dagger.Subcomponent;
@Subcomponent
public interface InfoAggiuntiveLUDialogComponent {
@Subcomponent.Factory
interface Factory {
InfoAggiuntiveLUDialogComponent create();
}
void inject(DialogInfoAggiuntiveLU infoAggiuntiveLUDialog);
}

View File

@@ -1,15 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
@Module(subcomponents = InfoAggiuntiveLUDialogComponent.class)
public class InfoAggiuntiveLUDialogModule {
@Provides
InfoAggiuntiveLUDialogViewModel providesInfoAggiuntiveLUDialogViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer) {
return new InfoAggiuntiveLUDialogViewModel(magazzinoRESTConsumer);
}
}

View File

@@ -328,10 +328,11 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
}
});
codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, this.mViewModel.getTipiCollo());
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
this.mViewModel.getTipiCollo().observe(getViewLifecycleOwner(), tipiCollo -> {
codTcolArrayAdapter = new DialogInputLUProdTipoColloAdapter(getActivity(), R.layout.array_adapter_single_item, tipiCollo);
mBindings.filledExposedDropdownCodTcol.setAdapter(codTcolArrayAdapter);
if (mDialogInputLUProdDTO.getCodTcol() != null) {
Optional<MtbTCol> optTCol = Stream.of(tipiCollo)

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
@@ -13,15 +14,20 @@ import it.integry.integrywmsnative.core.model.MtbTCol;
public class DialogInputLUProdTipoColloAdapter extends ArrayAdapter<DialogInputLUProdTipoColloListModel> {
private final List<DialogInputLUProdTipoColloListModel> mDataset;
private List<DialogInputLUProdTipoColloListModel> mDataset;
public DialogInputLUProdTipoColloAdapter(@NonNull Context context, int resource, @NonNull List<MtbTCol> objects) {
public DialogInputLUProdTipoColloAdapter(@NonNull Context context, int resource, @NonNull MutableLiveData<List<MtbTCol>> inputData) {
super(context, resource);
this.mDataset = Stream.of(objects).map(x -> new DialogInputLUProdTipoColloListModel()
.setOriginalModel(x))
.toList();
addAll(mDataset);
inputData.observeForever(data -> {
mDataset = Stream.of(data)
.map(x -> new DialogInputLUProdTipoColloListModel()
.setOriginalModel(x))
.toList();
clear();
addAll(mDataset);
});
}
public List<DialogInputLUProdTipoColloListModel> getDataset() {

View File

@@ -41,7 +41,6 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
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.UtilityDate;
@@ -177,7 +176,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.setIsNoteMandatory(mDialogInputQuantityV2DTO.isNotesMandatory())
.setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag())
.setDataScad(mDialogInputQuantityV2DTO.getDataScad())
.setDisableTracciabilitaCheck(mDialogInputQuantityV2DTO.isDisableTracciabilitaCheck());
.setDisableTracciabilitaCheck(mDialogInputQuantityV2DTO.isDisableTracciabilitaCheck())
.setStatoArt(mDialogInputQuantityV2DTO.getStatoPartitaMag() != null ? mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt() : null);
mBindings.setView(this);
mBindings.setViewmodel(this.mViewModel);
@@ -215,24 +215,23 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}
private void initProductLotStatusNotification() {
StatoPartitaMag statoPartitaMag = StatoPartitaMag.from(this.mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt());
if (statoPartitaMag == null)
if (this.mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt() == null)
return;
this.mBindings.inputDataScadLayout.setEndIconMode(TextInputLayout.END_ICON_CUSTOM);
switch (statoPartitaMag) {
case SCADUTO:
switch (this.mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt()) {
case IN_SCADENZA -> {
this.mBindings.inputDataScadLayout.setEndIconDrawable(R.drawable.ic_baseline_warning_24);
this.mBindings.inputDataScadLayout.setEndIconTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), com.tfb.fbtoast.R.color.warn_color)));
break;
case IN_SCADENZA:
}
case SCADUTO -> {
this.mBindings.inputDataScadLayout.setEndIconDrawable(R.drawable.ic_baseline_warning_24);
this.mBindings.inputDataScadLayout.setEndIconTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), com.tfb.fbtoast.R.color.error_color)));
break;
default:
}
case NON_IN_SCADENZA -> {
this.mBindings.inputDataScadLayout.setEndIconDrawable(R.drawable.ic_check_white_24dp);
this.mBindings.inputDataScadLayout.setEndIconTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), com.tfb.fbtoast.R.color.success_color)));
}
}
}

View File

@@ -13,12 +13,14 @@ import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.exception.InactiveBatchLotException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidExpireDateException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidNotesException;
@@ -88,6 +90,8 @@ public class DialogInputQuantityV2ViewModel {
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private StatoPartitaMag statoArt;
@Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
@@ -336,6 +340,11 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
public DialogInputQuantityV2ViewModel setStatoArt(StatoPartitaMag statoArt) {
this.statoArt = statoArt;
return this;
}
public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this;
@@ -488,6 +497,12 @@ public class DialogInputQuantityV2ViewModel {
}
}
if(this.statoArt == StatoPartitaMag.DISATTIVO){
this.mListener.onError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520L200,520L200,440L440,440L440,200L520,200L520,440L760,440L760,520L520,520L520,760L440,760L440,520Z"/>
</vector>

View File

@@ -0,0 +1,56 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="512dp"
android:height="512dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:pathData="M440,52.86h-77.9l-20.3,405.3h117.3L440,52.86z"
android:fillColor="#BF360C"/>
<path
android:pathData="M352.5,244.86h-42.7v-64l-128,64v-64l-128,64v213.3h298.7V244.86z"
android:fillColor="#E64A19"/>
<path
android:pathData="M96.5,287.56h42.7v42.7H96.5V287.56z"
android:fillColor="#FFC107"/>
<path
android:pathData="M181.8,287.56h42.7v42.7h-42.7V287.56z"
android:fillColor="#FFC107"/>
<path
android:pathData="M267.2,287.56h42.7v42.7h-42.7V287.56z"
android:fillColor="#FFC107"/>
<path
android:pathData="M96.5,372.86h42.7v42.7H96.5V372.86z"
android:fillColor="#FFC107"/>
<path
android:pathData="M181.8,372.86h42.7v42.7h-42.7V372.86z"
android:fillColor="#FFC107"/>
<path
android:pathData="M267.2,372.86h42.7v42.7h-42.7V372.86z"
android:fillColor="#FFC107"/>
<path
android:pathData="M194.35,50.39l-51.17,7.68c0.85,5.66 -3.07,10.91 -8.68,11.75c-5.61,0.84 -10.91,-3.07 -11.75,-8.68l-51.17,7.68c-11.27,1.69 -19.1,12.28 -17.41,23.55l24.56,163.69c1.69,11.27 12.28,19.1 23.55,17.41l122.78,-18.43c11.27,-1.69 19.1,-12.28 17.41,-23.55L217.9,67.74C216.22,56.52 205.63,48.69 194.35,50.39z"
android:fillColor="#455A64"/>
<path
android:pathData="M222.76,239.64L99.98,258.06c-3.07,0.46 -5.44,-1.29 -5.9,-4.36L69.51,90.01c-0.46,-3.07 1.29,-5.44 4.36,-5.9l122.78,-18.43c3.07,-0.46 5.44,1.29 5.9,4.36l24.56,163.69C227.59,236.85 225.83,239.18 222.76,239.64z"
android:fillColor="#FFFFFF"/>
<path
android:pathData="M143.18,58.06c0.85,5.66 -3.07,10.91 -8.68,11.75c-5.61,0.84 -10.91,-3.07 -11.75,-8.68l-35.83,5.38L90,86.99c0.85,5.66 6.14,9.52 11.75,8.68l71.6,-10.75c5.66,-0.85 9.52,-6.14 8.68,-11.75l-3.07,-20.48L143.18,58.06z"
android:fillColor="#90A4AE"/>
<path
android:pathData="M129.89,39.12c-11.27,1.69 -19.1,12.28 -17.41,23.55c1.69,11.27 12.28,19.1 23.55,17.41s19.1,-12.28 17.41,-23.55C151.75,45.25 141.16,37.43 129.89,39.12zM134.5,69.81c-5.66,0.85 -10.91,-3.07 -11.75,-8.68c-0.84,-5.61 3.07,-10.91 8.68,-11.75s10.91,3.07 11.75,8.68C144.02,63.68 140.16,68.96 134.5,69.81z"
android:fillColor="#90A4AE"/>
<path
android:pathData="M177.94,129.2l-39.13,52.95l-24.79,-18.79l-10.88,14.73l39.92,29.07l49.57,-67.07L177.94,129.2z"
android:fillColor="#2958B7"/>
<path
android:pathData="M244.48,302.31l34.54,7.54"
android:fillColor="#00BCD4"/>
<path
android:pathData="M279.08,309.86"
android:fillColor="#00BCD4"/>
<path
android:pathData="M244.48,302.31c8.49,-38.92 -17.51,-77.83 -58.05,-86.67l7.25,-33.22c59.55,12.99 97.84,70.16 85.35,127.43l30.23,6.59L249,364.24l-34.87,-68.55L244.48,302.31L244.48,302.31"
android:strokeWidth="10"
android:fillColor="#6DBE45"
android:strokeColor="#FFFFFF"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,840Q247,840 223.5,816.5Q200,793 200,760L200,240L160,240L160,160L360,160L360,120L600,120L600,160L800,160L800,240L760,240L760,760Q760,793 736.5,816.5Q713,840 680,840L280,840ZM680,240L280,240L280,760Q280,760 280,760Q280,760 280,760L680,760Q680,760 680,760Q680,760 680,760L680,240ZM360,680L440,680L440,320L360,320L360,680ZM520,680L600,680L600,320L520,320L520,680ZM280,240L280,240L280,760Q280,760 280,760Q280,760 280,760L280,760Q280,760 280,760Q280,760 280,760L280,240Z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M200,880Q167,880 143.5,856.5Q120,833 120,800L120,349Q102,338 91,320.5Q80,303 80,280L80,160Q80,127 103.5,103.5Q127,80 160,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,280Q880,303 869,320.5Q858,338 840,349L840,800Q840,833 816.5,856.5Q793,880 760,880L200,880ZM200,360L200,800Q200,800 200,800Q200,800 200,800L760,800Q760,800 760,800Q760,800 760,800L760,360L200,360ZM160,280L800,280Q800,280 800,280Q800,280 800,280L800,160Q800,160 800,160Q800,160 800,160L160,160Q160,160 160,160Q160,160 160,160L160,280Q160,280 160,280Q160,280 160,280ZM360,560L600,560L600,480L360,480L360,560ZM480,580L480,580L480,580Q480,580 480,580Q480,580 480,580L480,580Q480,580 480,580Q480,580 480,580L480,580Z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M640,320L640,200L320,200L320,320L240,320L240,120L720,120L720,320L640,320ZM160,400L160,400Q160,400 171.5,400Q183,400 200,400L760,400Q777,400 788.5,400Q800,400 800,400L800,400L720,400L720,400L240,400L240,400L160,400ZM720,500Q737,500 748.5,488.5Q760,477 760,460Q760,443 748.5,431.5Q737,420 720,420Q703,420 691.5,431.5Q680,443 680,460Q680,477 691.5,488.5Q703,500 720,500ZM640,760L640,600L320,600L320,760L640,760ZM720,840L240,840L240,680L80,680L80,440Q80,389 115,354.5Q150,320 200,320L760,320Q811,320 845.5,354.5Q880,389 880,440L880,680L720,680L720,840ZM800,600L800,440Q800,423 788.5,411.5Q777,400 760,400L200,400Q183,400 171.5,411.5Q160,423 160,440L160,600L240,600L240,520L720,520L720,600L800,600Z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,838Q319,823 239.5,732.5Q160,642 160,520Q160,454 186,393.5Q212,333 260,288L317,345Q279,379 259.5,424Q240,469 240,520Q240,608 296,675.5Q352,743 440,758L440,838ZM520,838L520,758Q607,742 663.5,675Q720,608 720,520Q720,420 650,350Q580,280 480,280L477,280L521,324L465,380L325,240L465,100L521,156L477,200L480,200Q614,200 707,293Q800,386 800,520Q800,641 720.5,731.5Q641,822 520,838Z"/>
</vector>

View File

@@ -21,6 +21,8 @@
android:id="@+id/accettazione_main_list_group_item_container_checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:enabled="false"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="1dp"
app:checked="@{selected}" />

View File

@@ -10,7 +10,7 @@
<import type="android.view.View" />
<variable
name="accettazioneView"
name="view"
type="it.integry.integrywmsnative.gest.accettazione_bolla_picking.AccettazioneBollaPickingActivity" />
</data>
@@ -84,7 +84,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
app:visibility="@{accettazioneView.noItemsToPick}">
app:visibility="@{view.noItemsToPick}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
@@ -133,66 +133,16 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.github.clans.fab.FloatingActionMenu
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:visibility="@{accettazioneView.noLUPresent}"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorSecondary"
fab:menu_colorPressed="@color/colorSecondaryDark"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_box"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.showCreatedUL()}"
fab:fab_label="@string/action_show_created_ul" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.createNewLU()}"
fab:fab_label="@string/action_create_ul" />
</com.github.clans.fab.FloatingActionMenu>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:onClick="@{() -> view.showFabMenu()}"
app:srcCompat="@drawable/ic_add_24dp"
app:visibility="@{view.noLUPresent}"
style="?attr/floatingActionButtonPrimaryStyle" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -214,7 +164,7 @@
app:behavior_hideable="false"
app:behavior_peekHeight="66dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:visibility="@{accettazioneView.bottomSheetEnabled}"
app:visibility="@{view.bottomSheetEnabled}"
app:parentView="@id/bottom_sheet_lu_content" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -5,7 +5,7 @@
<import type="android.view.View" />
<variable
name="accettazioneView"
name="view"
type="it.integry.integrywmsnative.gest.accettazione_ordini_picking.AccettazioneOrdiniPickingActivity" />
</data>
@@ -80,7 +80,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
app:visibility="@{accettazioneView.noItemsToPick}">
app:visibility="@{view.noItemsToPick}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
@@ -129,66 +129,18 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.github.clans.fab.FloatingActionMenu
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:visibility="@{accettazioneView.noLUPresent}"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorSecondary"
fab:menu_colorPressed="@color/colorSecondaryDark"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_box"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.showCreatedUL()}"
fab:fab_label="@string/action_show_created_ul" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.createNewLU()}"
fab:fab_label="@string/action_create_ul" />
</com.github.clans.fab.FloatingActionMenu>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:onClick="@{() -> view.showFabMenu()}"
app:srcCompat="@drawable/ic_add_24dp"
app:visibility="@{view.noLUPresent}"
style="?attr/floatingActionButtonPrimaryStyle" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -210,7 +162,7 @@
app:behavior_hideable="false"
app:behavior_peekHeight="66dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:visibility="@{accettazioneView.bottomSheetEnabled}"
app:visibility="@{view.bottomSheetEnabled}"
app:parentView="@id/bottom_sheet_lu_content" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -267,81 +267,15 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.floatingactionbutton.FloatingActionButton
style="?attr/floatingActionButtonPrimaryStyle"
android:id="@+id/main_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:singleClick="@{() -> view.showFabMenu()}"
app:srcCompat="@drawable/ic_menu_24dp" />
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/close_activity_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@+id/linearLayout2"
app:layout_anchorGravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu_icon="@drawable/ic_menu_24dp"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/success_color"
fab:menu_colorPressed="@color/green_400"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/export_document"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_upload"
android:visibility="@{view.isDocumentExportable.get() ? View.VISIBLE : View.GONE}"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.exportDocument()}"
fab:fab_label="@string/export_document" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/delete_document"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_delete_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.deleteDocument()}"
fab:fab_label="@string/delete_document" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/save_document"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check_black_24dp"
android:visibility="visible"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.holdDocument()}"
fab:fab_label="@string/save_document" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -2,12 +2,15 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="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.R" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="android.text.Html" />
<variable
name="viewModel"
@@ -170,6 +173,29 @@
tools:text="(Bari)" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal"
android:visibility="@{view.mtbColt.getNumDoc() != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.TextBoxLittleDashboard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="Documento:" />
<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:textColor="@android:color/black"
android:text="@{Html.fromHtml(context.getString(R.string.doc_testata, view.mtbColt.getNumDoc(), view.mtbColt.getDataDoc()))}"
tools:text="n. 123 del 29/03/2023" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
@@ -192,67 +218,88 @@
</androidx.appcompat.widget.LinearLayoutCompat>
<!-- <com.github.clans.fab.FloatingActionMenu-->
<!-- android:id="@+id/contenuto_bancale_fab"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:visibility="@{view.fabVisible}"-->
<!-- fab:menu_animationDelayPerItem="50"-->
<!-- fab:menu_backgroundColor="@color/white_bg_alpha"-->
<!-- fab:menu_buttonSpacing="0dp"-->
<!-- fab:menu_colorNormal="@color/colorSecondary"-->
<!-- fab:menu_colorPressed="@color/colorSecondaryDark"-->
<!-- fab:menu_fab_size="normal"-->
<!-- fab:menu_labels_colorNormal="@color/white"-->
<!-- fab:menu_labels_colorPressed="@color/white_pressed"-->
<!-- fab:menu_labels_colorRipple="#66FFFFFF"-->
<!-- fab:menu_labels_cornerRadius="3dp"-->
<!-- fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"-->
<!-- fab:menu_labels_margin="0dp"-->
<!-- fab:menu_labels_padding="8dp"-->
<!-- fab:menu_labels_paddingBottom="4dp"-->
<!-- fab:menu_labels_paddingLeft="8dp"-->
<!-- fab:menu_labels_paddingRight="8dp"-->
<!-- fab:menu_labels_paddingTop="4dp"-->
<!-- fab:menu_labels_position="left"-->
<!-- fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"-->
<!-- fab:menu_labels_showShadow="true"-->
<!-- fab:menu_labels_textColor="@color/black_semi_transparent"-->
<!-- fab:menu_labels_textSize="18sp"-->
<!-- fab:menu_openDirection="up"-->
<!-- fab:menu_shadowColor="#66000000"-->
<!-- fab:menu_shadowRadius="4dp"-->
<!-- fab:menu_shadowXOffset="1dp"-->
<!-- fab:menu_shadowYOffset="3dp"-->
<!-- fab:menu_showShadow="true">-->
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/contenuto_bancale_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:visibility="@{view.fabVisible}"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorSecondary"
fab:menu_colorPressed="@color/colorSecondaryDark"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<!-- <com.github.clans.fab.FloatingActionButton-->
<!-- android:id="@+id/accettazione_ordine_inevaso_fab_item1"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:scaleX="-1"-->
<!-- android:src="@drawable/ic_recover_ul_24dp"-->
<!-- app:fab_colorNormal="@color/white"-->
<!-- app:fab_colorPressed="@color/white_pressed"-->
<!-- app:fab_colorRipple="#66FFFFFF"-->
<!-- app:onClick="@{() -> view.recoverUL()}"-->
<!-- app:visibility="@{view.recoverFabMenuVisible}"-->
<!-- fab:fab_label="@string/action_recover_ul" />-->
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleX="-1"
android:src="@drawable/ic_recover_ul_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> view.recoverUL()}"
app:visibility="@{view.recoverFabMenuVisible}"
fab:fab_label="@string/action_recover_ul" />
<!-- <com.github.clans.fab.FloatingActionButton-->
<!-- android:id="@+id/accettazione_ordine_inevaso_fab_item2"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:src="@drawable/ic_print_24dp"-->
<!-- app:fab_colorNormal="@color/white"-->
<!-- app:fab_colorPressed="@color/white_pressed"-->
<!-- app:fab_colorRipple="#66FFFFFF"-->
<!-- app:onClick="@{() -> view.printUL()}"-->
<!-- fab:fab_label="@string/action_print_ul" />-->
<com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_print_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> view.printUL()}"
fab:fab_label="@string/action_print_ul" />
<!-- <com.github.clans.fab.FloatingActionButton-->
<!-- android:id="@+id/accettazione_ordine_inevaso_fab_item3"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:src="@drawable/ic_delete_24dp"-->
<!-- app:fab_colorNormal="@color/white"-->
<!-- app:fab_colorPressed="@color/white_pressed"-->
<!-- app:fab_colorRipple="#66FFFFFF"-->
<!-- app:visibility="@{!view.mtbColt.documentPresent}"-->
<!-- app:onClick="@{() -> view.deleteUL()}"-->
<!-- fab:fab_label="@string/action_delete_ul" />-->
</com.github.clans.fab.FloatingActionMenu>
<!-- </com.github.clans.fab.FloatingActionMenu>-->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:onClick="@{() -> view.showFabMenu()}"
app:srcCompat="@drawable/ic_menu_24dp"
style="?attr/floatingActionButtonPrimaryStyle" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="Linea produzione" />
<androidx.appcompat.widget.LinearLayoutCompat
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginHorizontal="16dp">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginStart="8dp"
android:layout_marginEnd="12dp"
android:layout_gravity="center_vertical"
android:gravity="center_horizontal"
style="@style/TextAppearance.Material3.BodyMedium"
android:text="Scansiona il codice a barre di una linea di produzione"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUView" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLUViewModel" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/lu_info" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_cod_tcol"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@id/title_text"
app:layout_constraintBottom_toTopOf="@id/level_number_layout"
android:visibility="@{viewModel.tipiCollo.empty ? View.GONE : View.VISIBLE}"
android:hint="@string/lu_type">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown_cod_tcol"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:nextFocusForward="@id/filled_exposed_dropdown_cod_jfas"
app:binding="@{view.selectedMtbTcol}"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/input_cod_tcol">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_additional_notes"
app:binding="@{view.additionalNotes}"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -1,124 +0,0 @@
<?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">
<data>
<import type="android.text.Html" />
<import type="it.integry.integrywmsnative.R" />
<variable
name="mContext"
type="android.content.Context" />
<import type="android.view.View" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU" />
<variable
name="viewModel"
type="it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialogViewModel" />
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.cardview.widget.CardView
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@color/light_blue_300"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:padding="24dp"
android:background="@drawable/dialog_card_child_bg">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/lu_info"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_cod_tcol"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@id/title_text"
app:layout_constraintBottom_toTopOf="@id/level_number_layout"
android:visibility="@{viewModel.tipiCollo.empty ? View.GONE : View.VISIBLE}"
android:hint="@string/lu_type">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown_cod_tcol"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:nextFocusForward="@id/filled_exposed_dropdown_cod_jfas"
app:binding="@{view.selectedMtbTcol}"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/input_cod_tcol">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_additional_notes"
app:binding="@{view.additionalNotes}"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/confirm"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/level_number_layout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
</layout>

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