Compare commits

...

56 Commits

Author SHA1 Message Date
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
86507d41c7 Finish v1.36.07(400) 2023-11-27 09:55:51 +01:00
ea6585152c -> v1.36.07 (400) 2023-11-27 09:55:45 +01:00
01d7e433b5 Aggiornato Gradle Plugin 2023-11-27 09:54:26 +01:00
185288b221 Fix sul bottone annulla del DialogAskMagazzinoProssimita 2023-11-24 16:02:46 +01:00
ba35a6b32d Rimossa processSql e implentata chiamata ai servizi per retriveFabbisogno 2023-11-24 15:13:11 +01:00
04838ce08f Finish v1.36.06(399) 2023-11-21 14:49:14 +01:00
7c936bc387 Finish v1.36.06(399) 2023-11-21 14:49:13 +01:00
6c30400aa9 -> v1.36.06 (399) 2023-11-21 14:49:00 +01:00
03aa2b17ac Rinominata setup flagOverflowQuantityWarning 2023-11-21 13:07:41 +01:00
8c24f5f025 Aggiunto un messaggio di allert quando viene inserita una quantità superiore rispetto a quella presente nell'ordine. 2023-11-21 13:02:06 +01:00
7f9524e0b2 Alla lettura ean128 viene valorizzato il lotto nel collo 2023-11-17 11:25:00 +01:00
e6b50ef7da Aggiunta data consegna in picking di accettazione 2023-11-15 17:31:09 +01:00
2275db39b3 Aggiunta descrizione estesa ordine in picking di accettazione 2023-11-14 17:42:56 +01:00
3a3680b2b2 Finish v1.36.05(398) 2023-10-26 15:32:52 +02:00
2189acce5a Finish v1.36.05(398) 2023-10-26 15:32:51 +02:00
4a4e290a9c -> v1.36.05 (398) 2023-10-26 15:32:36 +02:00
1d92759653 Fix format data in DocInterni 2023-10-26 15:31:45 +02:00
bc9f4121ef Finish v1.36.04(397) 2023-10-20 16:11:15 +02:00
cc54c6decb Finish v1.36.04(397) 2023-10-20 16:11:14 +02:00
c592ba0795 -> v1.36.04 (397) 2023-10-20 16:11:09 +02:00
09d009bcc5 Fix height in dialog_basket_lu 2023-10-20 16:10:39 +02:00
95bc3031df Finish v1.36.03(396) 2023-10-06 11:34:58 +02:00
0aca5df3fe Finish v1.36.03(396) 2023-10-06 11:34:58 +02:00
2ce2b8b25c -> v1.36.03 (396) 2023-10-06 11:34:53 +02:00
bea30a5400 Fix su gestione P in caso di creazione UDC in accettazione ordini produzione 2023-10-06 11:34:09 +02:00
ebc0d22e9f Finish v1.36.02(395) 2023-10-04 18:55:23 +02:00
d520e18a30 Finish v1.36.02(395) 2023-10-04 18:55:23 +02:00
19122ed637 -> v1.36.02 (395) 2023-10-04 18:55:17 +02:00
138500a16f [CARELLI]
Cambiata condizione su gestione anag fornitore per documenti di trasferimento interno
2023-10-04 18:53:58 +02:00
8d93da11b1 Finish v1.36.01(394) 2023-10-02 17:46:25 +02:00
9db04fcd02 Finish v1.36.01(394) 2023-10-02 17:46:24 +02:00
70b2fbd47b -> v1.36.01 (394) 2023-10-02 17:45:57 +02:00
9361d786b4 Fix su gestione P in caso di creazione UDC in accettazione ordini produzione 2023-10-02 17:45:18 +02:00
c7db59b70f Fix su lista documenti nulla in accettazione da bolla 2023-10-02 16:51:33 +02:00
1008e2aece Implementato versamento materiale tramite articolo (senza riferimento UDC) 2023-09-29 18:17:25 +02:00
d2703fd495 Finish v1.36.00(393) 2023-09-27 11:54:49 +02:00
68f576fb93 Finish v1.36.00(393) 2023-09-27 11:54:49 +02:00
69758da7e2 -> v1.36.00 (393) 2023-09-27 11:54:43 +02:00
b832a593f4 Al click sull'item in accettazione bolla adesso viene gestito il dispatchRow classico 2023-09-27 11:39:55 +02:00
c115a6f9f1 Implementata gestione del versamento materiale a magazzino buffer 2023-09-26 17:45:22 +02:00
35210db708 Finish v1.35.01(392) 2023-09-21 10:37:47 +02:00
51728a8103 Finish v1.35.01(392) 2023-09-21 10:37:46 +02:00
3961721241 -> v1.35.01 (392) 2023-09-21 10:37:40 +02:00
5d5ca02c16 Merge remote-tracking branch 'origin/develop' into develop 2023-09-21 10:37:07 +02:00
be8739c167 Utilizzato lo stesso Gson Builder per Retrofit e altro 2023-09-21 10:37:01 +02:00
8c6b19a064 Utilizzato lo stesso Gson Builder per Retrofit e altro 2023-09-21 10:36:37 +02:00
8751b7c698 Finish v1.35.00(391) 2023-09-20 17:11:13 +02:00
95 changed files with 2841 additions and 1129 deletions

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

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<value>
<entry key="app">
<State />
</entry>
</value>
</component>
</project>

View File

@@ -9,7 +9,6 @@
<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="WMS.dynamic__base,WMS.dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="false" />
@@ -25,6 +24,8 @@
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
@@ -32,14 +33,21 @@
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java />
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 391
def appVersionName = '1.35.00'
def appVersionCode = 401
def appVersionName = '1.36.08'
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'

View File

@@ -69,6 +69,8 @@ import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceCompo
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.edit_articolo.DialogEditArticoloComponent;
@@ -102,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;
@@ -112,11 +116,14 @@ 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;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnComponent;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCComponent;
@@ -189,7 +196,11 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
MainAccettazioneBollaElencoModule.class,
AccettazioneBollaPickingModule.class,
DialogBindProductBarcodeWithPackageModule.class,
DialogAskUnknownBarcodeNotesModule.class
DialogAskUnknownBarcodeNotesModule.class,
ProdVersamentoMaterialeInBufferModule.class,
DialogInputQuantityToReturnModule.class,
DialogInfoAggiuntiveLUModule.class,
DialogAskLineaProdModule.class
})
public interface MainApplicationComponent {
@@ -275,8 +286,6 @@ public interface MainApplicationComponent {
DocInterniEditFormComponent.Factory docInterniEditFormComponent();
InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent();
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
DialogPrintOrderSSCCListComponent.Factory dialogPrintOrderSSCCListComponent();
@@ -316,8 +325,17 @@ public interface MainApplicationComponent {
AccettazioneBollaPickingComponent.Factory accettazioneBollaPickingComponent();
DialogBindProductBarcodeWithPackageComponent.Factory dialogBindProductBarcodeWithPackageComponent();
DialogAskUnknownBarcodeNotesComponent.Factory dialogAskUnknownBarcodeNotesComponent();
ProdVersamentoMaterialeInBufferComponent.Factory prodVersamentoMaterialeInBufferComponent();
DialogInputQuantityToReturnComponent.Factory dialogInputQuantityToReturnComponent();
DialogInfoAggiuntiveLUComponent.Factory dialogInfoAggiuntiveLUComponent();
DialogAskLineaProdComponent.Factory dialogAskLineaProdComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -32,6 +32,7 @@ import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
@@ -181,8 +182,11 @@ public class MainApplicationModule {
@Provides
@Singleton
ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer, EntityRESTConsumer entityRESTConsumer) {
return new ColliMagazzinoRESTConsumer(systemRESTConsumer, articoloRESTConsumer, entityRESTConsumer);
ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(SystemRESTConsumer systemRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
EntityRESTConsumer entityRESTConsumer,
SettingsManager settingsManager) {
return new ColliMagazzinoRESTConsumer(systemRESTConsumer, articoloRESTConsumer, entityRESTConsumer, settingsManager);
}
@Provides
@@ -271,8 +275,8 @@ public class MainApplicationModule {
@Provides
@Singleton
ColliLavorazioneRESTConsumer provideColliLavorazioneRESTConsumer() {
return new ColliLavorazioneRESTConsumer();
ColliLavorazioneRESTConsumer provideColliLavorazioneRESTConsumer(SettingsManager settingsManager) {
return new ColliLavorazioneRESTConsumer(settingsManager);
}
@Provides
@@ -281,4 +285,10 @@ public class MainApplicationModule {
return new MagazzinoAutomaticoRESTConsumer();
}
@Provides
@Singleton
MagazzinoBufferRESTConsumer provideMagazzinoBufferRESTConsumer() {
return new MagazzinoBufferRESTConsumer();
}
}

View File

@@ -2,8 +2,9 @@ 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.gest.accettazione_ordini_elenco.MainAccettazioneOrdiniElencoFragment;
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;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariFragment;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoFragment;
@@ -14,6 +15,7 @@ import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzion
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.DialogInfoSituazioneArticoloView;
@@ -84,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(GestioneEnum.VENDITA, SettingsManager.iDB().isFlagAskClienteInPickingLibero(), false)))
.addItem(new MenuItem()
.setID(R.id.nav_resi_cliente)
@@ -120,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(GestioneEnum.LAVORAZIONE, SettingsManager.iDB().isFlagAskClienteInPickingLibero(), false)))
.addItem(new MenuItem()
.setID(R.id.nav_prod_posizionamento_da_ord)
@@ -161,6 +163,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(R.drawable.ic_production_line)
.setDrawerIcon(R.drawable.ic_production_line)
.setFragmentFactory(ProdLineeProduzioneFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_prod_versamento_materiale_in_buffer)
.setCodMenu("MG066")
.setTitleText(R.string.prod_versamento_materiale_in_buffer_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(ProdVersamentoMaterialeInBufferFragment::newInstance))
).addGroup(
new MenuGroup()
.setGroupText(R.string.internal_handling)

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

@@ -1,24 +1,17 @@
package it.integry.integrywmsnative.core.rest;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Modifier;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateDeserializer;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateTimeDeserializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateSerializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateTimeSerializer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityGson;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
@@ -66,14 +59,7 @@ public class RESTBuilder {
String endpoint = protocol + "://" + host + (port > 0 ? ":" + port : "") + "/" + (addEmsApi ? "ems-api/" : "");
Gson gson = new GsonBuilder()
.setDateFormat("dd/MM/yyyy HH:mm:ss")
.excludeFieldsWithModifiers(Modifier.TRANSIENT)
.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer())
.registerTypeAdapter(LocalDate.class, new LocalDateSerializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer())
.create();
Gson gson = UtilityGson.createObject();
Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create(gson)).baseUrl(endpoint).client(client).build();

View File

@@ -1,10 +1,14 @@
package it.integry.integrywmsnative.core.rest.consumers;
import java.math.BigDecimal;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.interfaces.ColliCaricoRESTConsumerInterface;
import it.integry.integrywmsnative.core.rest.consumers.interfaces.ColliScaricoRESTConsumerInterface;
@@ -18,6 +22,7 @@ import it.integry.integrywmsnative.core.rest.model.udc.EditUDCRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.udc.EditUDCRowResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSFromArtRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
@@ -27,6 +32,7 @@ import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowResponseDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -35,6 +41,12 @@ import retrofit2.Response;
public class ColliLavorazioneRESTConsumer extends _BaseRESTConsumer implements ColliCaricoRESTConsumerInterface, ColliScaricoRESTConsumerInterface {
private final SettingsManager settingsManager;
public ColliLavorazioneRESTConsumer(SettingsManager settingsManager) {
this.settingsManager = settingsManager;
}
@Override
public void createUDC(CreateUDCRequestDTO createUDCRequestDTO, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
ColliLavorazioneRESTConsumerService colliLavorazioneRESTConsumerService = RESTBuilder.getService(ColliLavorazioneRESTConsumerService.class);
@@ -213,4 +225,43 @@ public class ColliLavorazioneRESTConsumer extends _BaseRESTConsumer implements C
}
});
}
public void createColloScaricoDaArticolo(MtbAart mtbAart,
String partitaMag,
MtbDepoPosizione posizione,
BigDecimal qta, BigDecimal qtaCnf, BigDecimal numCnf,
BigDecimal pesoNettoKg, BigDecimal pesoLordoKg,
Runnable onComplete, RunnableArgs<Exception> onFailed) {
CreateUDSFromArtRequestDTO createUDSFromArtRequestDTO = new CreateUDSFromArtRequestDTO()
.setCodMart(mtbAart.getCodMart())
.setCodMdep(settingsManager.getSettings().getUserSession().getDepo().getCodMdep())
.setPartitaMag(partitaMag)
.setPosizione(posizione != null ? posizione.getPosizione() : null)
.setQta(qta)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setPesoLordoKg(pesoLordoKg)
.setPesoNettoKg(pesoNettoKg);
if (posizione != null && posizione.isFlagLineaProduzione()) {
createUDSFromArtRequestDTO
.setCodJfas(posizione.getPosizione());
}
ColliLavorazioneRESTConsumerService colliLavorazioneRESTConsumerService = RESTBuilder.getService(ColliLavorazioneRESTConsumerService.class);
colliLavorazioneRESTConsumerService.createUDSFromArt(createUDSFromArtRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "lavorazione/createUDSFromArt", data -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -10,6 +10,7 @@ import it.integry.integrywmsnative.core.rest.model.udc.EditUDCRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.udc.EditUDCRowResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSFromArtRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
@@ -55,4 +56,7 @@ public interface ColliLavorazioneRESTConsumerService {
@POST("wms/lavorazione/deleteUDCRow")
Call<ServiceRESTResponse<Void>> deleteUDCRow(@Body DeleteUDCRowRequestDTO deleteUDCRowRequestDTO);
@POST("wms/lavorazione/createUDSFromArt")
Call<ServiceRESTResponse<Void>> createUDSFromArt(@Body CreateUDSFromArtRequestDTO createUDSFromArtRequestDTO);
}

View File

@@ -50,13 +50,16 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
private final SystemRESTConsumer mSystemRESTConsumer;
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final EntityRESTConsumer mEntityRESTConsumer;
private final SettingsManager mSettingsManager;
public ColliMagazzinoRESTConsumer(SystemRESTConsumer systemRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
EntityRESTConsumer entityRESTConsumer) {
EntityRESTConsumer entityRESTConsumer,
SettingsManager settingsManager) {
this.mSystemRESTConsumer = systemRESTConsumer;
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mEntityRESTConsumer = entityRESTConsumer;
this.mSettingsManager = settingsManager;
}
public void saveCollo(MtbColt mtbColtToSave, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
@@ -171,6 +174,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
saveCollo(newMtbColt, onComplete, onFailed);
}
public void createColliScaricoDaOrdineLavorazione(MtbColt sourceMtbColt, MtbColr sourceMtbColr, MtbDepoPosizione posizione, List<OrdineLavorazioneDTO> ordini, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
MtbColt newMtbColt = new MtbColt()
@@ -302,6 +306,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
public void fillMtbAartsOfMtbColts(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed);
}
public static void fillMtbAartsOfMtbColtsStatic(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<String> codMarts = new ArrayList<>();
@@ -651,7 +656,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public void canULBeDeleted(MtbColt mtbColt, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
CanULBeDeletedRequestDTO canULBeDeletedRequestDTO = new CanULBeDeletedRequestDTO()
.setMtbColt(mtbColt);
@@ -710,5 +714,4 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
}

View File

@@ -13,6 +13,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.JtbComt;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.core.utility.UtilityString;
@Singleton
public class CommessaRESTConsumer extends _BaseRESTConsumer {
@@ -26,6 +27,8 @@ public class CommessaRESTConsumer extends _BaseRESTConsumer {
public void getJtbComts(List<String> itemsToFind, RunnableArgs<List<JtbComt>> onComplete, RunnableArgs<Exception> onFailed) {
var whereCondMap = Stream.of(itemsToFind)
.withoutNulls()
.filter(x -> !UtilityString.isNullOrEmpty(x))
.map(x -> {
HashMap<String, Object> vars = new HashMap<>();
vars.put("cod_jcom", x);
@@ -33,6 +36,11 @@ public class CommessaRESTConsumer extends _BaseRESTConsumer {
})
.toList();
if(whereCondMap.isEmpty()) {
onComplete.run(new ArrayList<>());
return;
}
var whereCond = " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondMap);
Type typeOfObjectsList = new TypeToken<ArrayList<JtbComt>>() {}.getType();

View File

@@ -15,6 +15,7 @@ import it.integry.integrywmsnative.core.model.EntityBase;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.EsitoType;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityGson;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -83,7 +84,7 @@ public class EntityRESTConsumer extends _BaseRESTConsumer {
if (response.body() != null) {
ArrayList<T> responseList = new ArrayList<>();
Gson gson = new Gson();
Gson gson = UtilityGson.createObject();
// Type typeOfObjectsList = new TypeToken<T>() {}.getType();
for (ServiceRESTResponse<JsonObject> jsonSingleObject : response.body()) {

View File

@@ -0,0 +1,66 @@
package it.integry.integrywmsnative.core.rest.consumers;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class MagazzinoBufferRESTConsumer extends _BaseRESTConsumer {
public void isVersamentoStarted(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.isVersamentoStarted(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Boolean>> call, Response<ServiceRESTResponse<Boolean>> response) {
analyzeAnswer(response, "magazzino-buffer/isVersamentoStarted", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Boolean>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void startVersamentoMateriale(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.startVersamentoMateriale(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "magazzino-buffer/startVersamentoMateriale", data -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void endVersamentoMateriale(MtbDepoPosizione posizione, MagazzinoBufferVersamentoMaterialeCloseRequestDTO magazzinoBufferVersamentoMaterialeCloseRequestDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoBufferRESTConsumerService magazzinoBufferRESTConsumerService = RESTBuilder.getService(MagazzinoBufferRESTConsumerService.class);
magazzinoBufferRESTConsumerService.endVersamentoMateriale(posizione.getPosizione(), magazzinoBufferVersamentoMaterialeCloseRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Void>> call, Response<ServiceRESTResponse<Void>> response) {
analyzeAnswer(response, "magazzino-buffer/endVersamentoMateriale", data -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Void>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -0,0 +1,28 @@
package it.integry.integrywmsnative.core.rest.consumers;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
import retrofit2.http.Path;
public interface MagazzinoBufferRESTConsumerService {
@POST("wms/magazzino-buffer/{posizione}/isVersamentoStarted")
Call<ServiceRESTResponse<Boolean>> isVersamentoStarted(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO);
@POST("wms/magazzino-buffer/{posizione}/startVersamentoMateriale")
Call<ServiceRESTResponse<Void>> startVersamentoMateriale(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeRequestDTO magazzinoBufferVersamentoMaterialeRequestDTO);
@POST("wms/magazzino-buffer/{posizione}/endVersamentoMateriale")
Call<ServiceRESTResponse<Void>> endVersamentoMateriale(
@Path("posizione") String posizione,
@Body MagazzinoBufferVersamentoMaterialeCloseRequestDTO magazzinoBufferVersamentoMaterialeCloseRequestDTO);
}

View File

@@ -0,0 +1,41 @@
package it.integry.integrywmsnative.core.rest.model.magazzino_buffer;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbColt;
public class MagazzinoBufferVersamentoMaterialeCloseRequestDTO {
private MtbColt inputMtbColt;
private BigDecimal qtaTotDaScaricare;
private BigDecimal numCnfDaScaricare;
public MtbColt getInputMtbColt() {
return inputMtbColt;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setInputMtbColt(MtbColt inputMtbColt) {
this.inputMtbColt = inputMtbColt;
return this;
}
public BigDecimal getQtaTotDaScaricare() {
return qtaTotDaScaricare;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setQtaTotDaScaricare(BigDecimal qtaTotDaScaricare) {
this.qtaTotDaScaricare = qtaTotDaScaricare;
return this;
}
public BigDecimal getNumCnfDaScaricare() {
return numCnfDaScaricare;
}
public MagazzinoBufferVersamentoMaterialeCloseRequestDTO setNumCnfDaScaricare(BigDecimal numCnfDaScaricare) {
this.numCnfDaScaricare = numCnfDaScaricare;
return this;
}
}

View File

@@ -0,0 +1,18 @@
package it.integry.integrywmsnative.core.rest.model.magazzino_buffer;
import it.integry.integrywmsnative.core.model.MtbColt;
public class MagazzinoBufferVersamentoMaterialeRequestDTO {
private MtbColt inputMtbColt;
public MtbColt getInputMtbColt() {
return inputMtbColt;
}
public MagazzinoBufferVersamentoMaterialeRequestDTO setInputMtbColt(MtbColt inputMtbColt) {
this.inputMtbColt = inputMtbColt;
return this;
}
}

View File

@@ -0,0 +1,108 @@
package it.integry.integrywmsnative.core.rest.model.uds;
import java.math.BigDecimal;
public class CreateUDSFromArtRequestDTO {
private String codMart;
private String partitaMag;
private String codMdep;
private String posizione;
private String codJfas;
private BigDecimal qta;
private BigDecimal qtaCnf;
private BigDecimal numCnf;
private BigDecimal pesoNettoKg;
private BigDecimal pesoLordoKg;
public String getCodMart() {
return codMart;
}
public CreateUDSFromArtRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public CreateUDSFromArtRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public String getCodMdep() {
return codMdep;
}
public CreateUDSFromArtRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getPosizione() {
return posizione;
}
public CreateUDSFromArtRequestDTO setPosizione(String posizione) {
this.posizione = posizione;
return this;
}
public String getCodJfas() {
return codJfas;
}
public CreateUDSFromArtRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public BigDecimal getQta() {
return qta;
}
public CreateUDSFromArtRequestDTO setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public CreateUDSFromArtRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public CreateUDSFromArtRequestDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getPesoNettoKg() {
return pesoNettoKg;
}
public CreateUDSFromArtRequestDTO setPesoNettoKg(BigDecimal pesoNettoKg) {
this.pesoNettoKg = pesoNettoKg;
return this;
}
public BigDecimal getPesoLordoKg() {
return pesoLordoKg;
}
public CreateUDSFromArtRequestDTO setPesoLordoKg(BigDecimal pesoLordoKg) {
this.pesoLordoKg = pesoLordoKg;
return this;
}
}

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

@@ -69,6 +69,7 @@ public class DBSettingsModel {
private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false;
private boolean flagEnableFastPickAccettazioneBolla = false;
private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false;
private boolean flagOverflowQuantityWarning = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza;
@@ -556,4 +557,13 @@ public class DBSettingsModel {
this.flagDisableMandatoryTracciabilitaAccettazioneBolla = flagDisableMandatoryTracciabilitaAccettazioneBolla;
return this;
}
public boolean isFlagOverflowQuantityWarning() {
return flagOverflowQuantityWarning;
}
public DBSettingsModel setFlagOverflowQuantityWarning(boolean flagOverflowQuantityWarning) {
this.flagOverflowQuantityWarning = flagOverflowQuantityWarning;
return this;
}
}

View File

@@ -470,6 +470,12 @@ public class SettingsManager {
.setKeySection("FLAG_DISABLE_MANDATORY_TRACCIABILITA")
.setSetter(dbSettingsModelIstance::setFlagDisableMandatoryTracciabilitaAccettazioneBolla)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_OVERFLOW_QUANTITY_WARNING")
.setSetter(dbSettingsModelIstance::setFlagOverflowQuantityWarning)
.setDefaultValue(false));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();

View File

@@ -0,0 +1,28 @@
package it.integry.integrywmsnative.core.utility;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Modifier;
import java.time.LocalDate;
import java.time.LocalDateTime;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateDeserializer;
import it.integry.integrywmsnative.core.rest.deserializer.LocalDateTimeDeserializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateSerializer;
import it.integry.integrywmsnative.core.rest.serializer.LocalDateTimeSerializer;
public class UtilityGson {
public static Gson createObject() {
return new GsonBuilder()
.setDateFormat("dd/MM/yyyy HH:mm:ss")
.excludeFieldsWithModifiers(Modifier.TRANSIENT)
.registerTypeAdapter(LocalDate.class, new LocalDateDeserializer())
.registerTypeAdapter(LocalDate.class, new LocalDateSerializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer())
.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer())
.create();
}
}

View File

@@ -165,7 +165,9 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
//TODO: Filter here
this.mBolleInevaseMutableData.clear();
this.mBolleInevaseMutableData.addAll(convertDataModelToListModel(tmpList));
if(tmpList != null)
this.mBolleInevaseMutableData.addAll(convertDataModelToListModel(tmpList));
}
@Override
@@ -184,12 +186,13 @@ public class MainAccettazioneBollaElencoFragment extends BaseFragment implements
private List<MainAccettazioneBolleElencoListModel> convertDataModelToListModel(List<TestataBollaAccettazioneDTO> dataList) {
if(dataList == null)
return null;
final Comparator<TestataBollaAccettazioneDTO> comparer = Comparator.comparing(TestataBollaAccettazioneDTO::getListino)
.thenComparing(TestataBollaAccettazioneDTO::getRagSoc)
.thenComparing(TestataBollaAccettazioneDTO::getNumDoc);
return Stream.of(dataList)
.sorted(comparer)
.map(x -> {

View File

@@ -37,6 +37,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 +51,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 +63,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;
@@ -200,7 +200,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
});
adapter.setOnItemClicked(clickedItem -> {
this.mViewModel.manageDispatchBollaRow(clickedItem);
this.mViewModel.dispatchBollaRow(clickedItem);
});
}
@@ -447,9 +447,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

@@ -333,13 +333,13 @@ public class AccettazioneBollaPickingViewModel {
pickingObjectDTO.setTempPickData(pickData);
}
this.loadMatchedRows(matchPickingObject, mtbAart);
this.loadMatchedRows(matchPickingObject, mtbAart, pickData);
onComplete.run();
}
private void loadMatchedRows(List<PickingObjectDTO> matchedRows, MtbAart mtbAart) {
private void loadMatchedRows(List<PickingObjectDTO> matchedRows, MtbAart mtbAart, PickDataDTO pickDataDTO) {
if (matchedRows == null || matchedRows.size() == 0) {
manageNoArtFound(mtbAart);
manageNoArtFound(mtbAart, pickDataDTO);
} else if (matchedRows.size() == 1) {
this.manageDispatchBollaRow(matchedRows.get(0));
} else {
@@ -375,11 +375,12 @@ public class AccettazioneBollaPickingViewModel {
}
private void manageNoArtFound(MtbAart mtbAart) {
private void manageNoArtFound(MtbAart mtbAart, PickDataDTO pickDataDTO) {
if (SettingsManager.iDB().isFlagCanAddUnknownItemsAccettazioneBolla()) {
this.manageDispatchBollaRow(new PickingObjectDTO()
.setMtbAart(mtbAart));
.setMtbAart(mtbAart)
.setTempPickData(pickDataDTO));
} else
this.sendError(new NoArtsFoundException());
}
@@ -418,12 +419,21 @@ public class AccettazioneBollaPickingViewModel {
}
public void manageDispatchBollaRow(final PickingObjectDTO pickingObjectDTO) {
String partitaMag = null;
if(pickingObjectDTO.getTempPickData() != null){
if(pickingObjectDTO.getTempPickData().getManualPickDTO() != null){
if(pickingObjectDTO.getTempPickData().getManualPickDTO().getMtbPartitaMag() != null){
partitaMag = pickingObjectDTO.getTempPickData().getManualPickDTO().getMtbPartitaMag().getPartitaMag();
}
}
}
if (SettingsManager.iDB().isFlagEnableFastPickAccettazioneBolla()) {
this.saveNewRow(pickingObjectDTO,
BigDecimal.ONE,
pickingObjectDTO.getMtbAart().getQtaCnf(),
pickingObjectDTO.getMtbAart().getQtaCnf(),
null,
partitaMag,
null,
false);

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
@@ -33,6 +34,17 @@ public class SitArtOrdDTO {
private String descrizioneCommessa;
private String termCons;
private String descrizioneEstesaArt;
private String descrizioneEstesaOrd;
private Date dataCons;
public String getDescrizioneEstesaOrd() {
return descrizioneEstesaOrd;
}
public SitArtOrdDTO setDescrizioneEstesaOrd(String descrizioneEstesaOrd) {
this.descrizioneEstesaOrd = descrizioneEstesaOrd;
return this;
}
public String getCodJcom() {
return codJcom;
@@ -280,4 +292,13 @@ public class SitArtOrdDTO {
this.descrizioneEstesaArt = descrizioneEstesaArt;
return this;
}
public Date getDataCons() {
return dataCons;
}
public SitArtOrdDTO setDataCons(Date dataCons) {
this.dataCons = dataCons;
return this;
}
}

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,17 +44,18 @@ 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;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
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;
@@ -72,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;
@@ -110,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);
@@ -120,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()
@@ -141,6 +146,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
this.initBarcodeReader();
this.initRecyclerView();
this.initFilters();
this.initFab();
boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
@@ -151,6 +157,51 @@ 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;
});
// if (fabPopupMenu.getMenu() instanceof MenuBuilder) {
// var menuBuilder = (MenuBuilder) fabPopupMenu.getMenu();
// menuBuilder.setOptionalIconsVisible(true);
// for (var item : menuBuilder.getVisibleItems()) {
// var iconMarginPx =
// TypedValue.applyDimension(
// TypedValue.COMPLEX_UNIT_DIP, ICON_MARGIN.toFloat(), resources.displayMetrics)
// .toInt();
// if (item.icon != null) {
// if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
// item.icon = InsetDrawable(item.icon, iconMarginPx, 0, iconMarginPx,0)
// } else {
// item.icon =
// object : InsetDrawable(item.icon, iconMarginPx, 0, iconMarginPx, 0) {
// override fun getIntrinsicWidth(): Int {
// return intrinsicHeight + iconMarginPx + iconMarginPx
// }
// }
// }
// }
// }
// }
}
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@@ -415,6 +466,8 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
accettazioneOrdiniPickingListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneOrdiniPickingListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneOrdiniPickingListModel.setSubDescrizione1("Consegna: " + UtilityDate.formatDate(x.getSitArtOrdDTO().getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH));
accettazioneOrdiniPickingListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa());
if (x.getMtbAart() != null)
accettazioneOrdiniPickingListModel.setPosizione(x.getMtbAart().getPosizione());
@@ -585,8 +638,9 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
accettazioneOrdiniPickingListModel.setSecUntMis(UtilityResources.getString(R.string.unt_mis_col));
}
accettazioneOrdiniPickingListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneEstesaOrd());
if (x.getMtbAart() != null) {
accettazioneOrdiniPickingListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa());
accettazioneOrdiniPickingListModel.setPosizione(x.getMtbAart().getPosizione());
}
@@ -674,8 +728,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, () -> {
@@ -684,7 +742,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
}
public void showCreatedUL() {
this.mBindings.accettazioneOrdineInevasoFab.close(true);
this.fabPopupMenu.dismiss();
this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity);
}
@@ -769,9 +827,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
@@ -788,7 +849,7 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
}
@Override
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, LocalDate dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, LocalDate dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, String customArtDescription, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
@@ -807,7 +868,8 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
.setDataScad(dataScad)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(true)
.setCanOverflowOrderQuantity(canOverflowQuantity);
.setCanOverflowOrderQuantity(canOverflowQuantity)
.setCustomArtDescription(customArtDescription);
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View

View File

@@ -371,11 +371,23 @@ public class AccettazioneOrdiniPickingViewModel {
this.sendOnInfoAggiuntiveRequest((additionalNotes, tCol) -> {
final List<CreateUDCRequestOrderDTO> orders = Stream.of(this.mOrders)
.map(x -> new CreateUDCRequestOrderDTO()
.setDataCons(x.getDataConsD() != null ? UtilityDate.toLocalDate(x.getDataConsD()) : null)
.setDataOrd(UtilityDate.toLocalDate(x.getDataD()))
.setGestione(x.getGestione())
.setNumOrd(x.getNumero()))
.map(x -> {
final CreateUDCRequestOrderDTO createUDCRequestOrderDTO = new CreateUDCRequestOrderDTO()
.setDataCons(x.getDataConsD() != null ? UtilityDate.toLocalDate(x.getDataConsD()) : null)
.setDataOrd(UtilityDate.toLocalDate(x.getDataD()))
.setNumOrd(x.getNumero());
if(x.getGestioneEnum() == GestioneEnum.PRODUZIONE) {
if(x.isOrdTrasf())
createUDCRequestOrderDTO.setGestione(GestioneEnum.ACQUISTO.getText());
else
createUDCRequestOrderDTO.setGestione(GestioneEnum.LAVORAZIONE.getText());
} else {
createUDCRequestOrderDTO.setGestione(x.getGestione());
}
return createUDCRequestOrderDTO;
})
.toList();
final CreateUDCRequestDTO createUDCRequestDTO = new CreateUDCRequestDTO()
@@ -527,6 +539,7 @@ public class AccettazioneOrdiniPickingViewModel {
partitaMag,
dataScad,
true,
pickingObjectDTO.getSitArtOrdDTO().getDescrizioneEstesaOrd(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
pickedQuantityDTO.getNumCnf(),
@@ -613,6 +626,7 @@ public class AccettazioneOrdiniPickingViewModel {
mtbColrToEdit.getPartitaMag(),
mtbColrToEdit.getDataScadPartita(),
true,
null,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
@@ -871,6 +885,7 @@ public class AccettazioneOrdiniPickingViewModel {
String partitaMag,
LocalDate dataScad,
boolean canPartitaMagBeChanged,
String customArtDescription,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
@@ -890,6 +905,7 @@ public class AccettazioneOrdiniPickingViewModel {
dataScad,
canPartitaMagBeChanged,
true,
customArtDescription,
onComplete);
}
@@ -946,6 +962,7 @@ public class AccettazioneOrdiniPickingViewModel {
LocalDate dataScad,
boolean canPartitaMagBeChanged,
boolean canOverflowQuantity,
String customArtDescription,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterCodMartApplied(String codMartToFilter);

View File

@@ -21,6 +21,7 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.AccettazioneOrdineInevasoMainListGroupHeaderBinding;
@@ -119,7 +120,10 @@ public class AccettazioneOrdiniPickingListAdapter extends SectionedRecyclerViewA
holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione());
holder.mBinding.descrizione.setTextColor(pickingObjectDTO.isDescrizionePresente() ? Color.BLACK : Color.GRAY);
holder.mBinding.descrizione.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getDescrizione()) ? View.GONE : View.VISIBLE);
holder.mBinding.descrizioneSub1.setText(pickingObjectDTO.getSubDescrizione1());
holder.mBinding.descrizioneSub1.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getSubDescrizione1()) ? View.GONE : View.VISIBLE);
holder.mBinding.badge1.setText(pickingObjectDTO.getBadge1());
holder.mBinding.badge2.setText(pickingObjectDTO.getBadge2());

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordini_picking.ui;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.dto.PickingObjectDTO;

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

@@ -65,7 +65,7 @@ public class DialogSelectDocInfoViewModel extends ViewModel {
if (val.getGestioneDoc().equalsIgnoreCase("T")) {
return forn.getTipoAnag().equalsIgnoreCase("D") &&
forn.getGestioneAnag().equalsIgnoreCase(
val.getGestione().equalsIgnoreCase("V") ? "V" : "A"
val.getGestione().equalsIgnoreCase("V") ? "V" : "L"
);
} else {
return forn.getTipoAnag().equalsIgnoreCase("F");

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

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

@@ -37,6 +37,7 @@ 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;
@@ -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;
@@ -78,15 +80,18 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
public BindableBoolean isDocumentExportable = new BindableBoolean(false);
private final ObservableArrayList<SqlMtbColr> documentRowsObservableList = new ObservableArrayList<>();
public static Intent newInstance(Context context, SqlMtbColt document, List<DocumentoArtDTO> arts, TipoDocDTO tipoDoc) {
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,13 +108,14 @@ 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();
@@ -266,7 +272,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
var dataScad = data.getDataScad();
String partitaMag = null;
if (dataScad != null) partitaMag = UtilityDate.formatDate(dataScad, "yyyymmdd");
if (dataScad != null) partitaMag = UtilityDate.formatDate(dataScad, "yyyyMMdd");
return partitaMag;
});

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import org.json.JSONException;
@@ -10,6 +11,7 @@ import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
@@ -28,7 +30,10 @@ 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.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;
@@ -48,6 +53,7 @@ public class DocInterniEditFormViewModel {
public MutableLiveData<SqlMtbColt> document = new MutableLiveData<>();
public MutableLiveData<DocInterniSetupDTO> docInterniSetupDTO = new MutableLiveData<>();
public MutableLiveData<List<SqlMtbColr>> docRows = new MutableLiveData<>();
@Inject
@@ -236,6 +242,7 @@ public class DocInterniEditFormViewModel {
artDto.setColli(BigDecimal.valueOf(row.getNumCnf()));
artDto.setUntMis(row.getUntMis());
artDto.setCodMart(row.getCodMart());
artDto.setSystemNote(row.getNote());
if (row.getDataScad() != null) {
artDto.setDataScad(row.getDataScad());
}
@@ -257,35 +264,48 @@ 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)
.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() {

View File

@@ -42,7 +42,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 +53,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 +86,20 @@ 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(GestioneEnum gestioneEnum, boolean askCliente, boolean askLineaProd) {
PickingLiberoFragment fragment = new PickingLiberoFragment();
Bundle args = new Bundle();
args.putString("gestione", gestioneEnum.getText());
args.putBoolean("askCliente", askCliente);
args.putBoolean("askLineaProd", askLineaProd);
fragment.setArguments(args);
return fragment;
@@ -113,6 +117,8 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
setRetainInstance(true);
mCurrentGestione = GestioneEnum.fromString(getArguments().getString("gestione"));
mAskCliente = getArguments().getBoolean("askCliente");
mAskLineaProd = getArguments().getBoolean("askLineaProd");
}
@@ -139,8 +145,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 +268,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 +289,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 +305,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

@@ -32,14 +32,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 +67,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 +85,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;
}
}
@@ -279,46 +298,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 +358,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 +935,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 +995,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

@@ -93,6 +93,8 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
//Load fabbisogno
this.mViewModel.loadFabbisogno(startDate, endDate, codMdep, this::startPickingActivity);
// }
}, () -> {
popMe();
})
.show(getActivity().getSupportFragmentManager(), "tag");
}

View File

@@ -36,20 +36,22 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme
DialogAskMagazzinoProssimitaViewModel mViewModel;
private final RunnableArgsss<JtbFasi, Date, Date> mOnItemSelected;
private final Runnable mOnAbort;
private Context mContext;
private DialogAskMagazzinoProssimitaBinding mBindings;
// private JtbFasi mSelectedItem;
public static DialogAskMagazzinoProssimitaView newInstance(RunnableArgsss<JtbFasi, Date, Date> onItemSelected) {
return new DialogAskMagazzinoProssimitaView(onItemSelected);
public static DialogAskMagazzinoProssimitaView newInstance(RunnableArgsss<JtbFasi, Date, Date> onItemSelected, Runnable onAbort) {
return new DialogAskMagazzinoProssimitaView(onItemSelected, onAbort);
}
private DialogAskMagazzinoProssimitaView(RunnableArgsss<JtbFasi, Date, Date> onItemSelected) {
private DialogAskMagazzinoProssimitaView(RunnableArgsss<JtbFasi, Date, Date> onItemSelected, Runnable onAbort) {
super();
this.mOnItemSelected = onItemSelected;
this.mOnAbort = onAbort;
}
@Nullable
@@ -79,6 +81,7 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme
// } else {
// FBToast.warningToast(mContext, getResources().getString(R.string.please_select_an_item), Toast.LENGTH_LONG);
// }
mOnItemSelected.run(null, mViewModel.startDate, mViewModel.endDate);
}
});
@@ -86,6 +89,7 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme
@Override
public void onSingleClick(View v) {
getDialog().dismiss();
mOnAbort.run();
}
});
@@ -111,7 +115,6 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
mOnItemSelected.run(null, mViewModel.startDate, mViewModel.endDate);
}
private final View.OnClickListener onStartDateClickListener = new OnSingleClickListener() {

View File

@@ -10,10 +10,17 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumerService;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
@@ -26,254 +33,20 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
public void loadFabbisogno(Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "WITH input_values AS ( " +
" SELECT " + UtilityDB.valueToString(startDate) + " AS data_inizio, " +
" " + UtilityDB.valueToString(endDate) + " AS data_fine, " +
// " " + UtilityDB.valueToString(lineaProd) + " AS linea_prod, " +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep)," +
" withdraw_mtb_colr AS ( " +
" SELECT cod_mart, " +
" SUM(ISNULL(qta_col, 0)) as qta_col, " +
" SUM(ISNULL(num_cnf, 0)) as num_cnf, " +
" mtb_colr.data_ord, " +
" mtb_colr.num_ord, " +
" mtb_colr.gestione " +
" FROM mtb_colr " +
" INNER JOIN mtb_colt mc on mtb_colr.gestione = mc.gestione and mtb_colr.data_collo = mc.data_collo and " +
" mtb_colr.ser_collo = mc.ser_collo and mtb_colr.num_collo = mc.num_collo " +
" WHERE segno = -1 " +
" AND cod_dtip IS NULL " +
" GROUP BY cod_mart, " +
" mtb_colr.data_ord, " +
" mtb_colr.num_ord, " +
" mtb_colr.gestione " +
" ), " +
" custom_mtb_colr AS (SELECT cod_mart, " +
" SUM(qta_col) AS qta_col, " +
" SUM(num_cnf) AS num_cnf, " +
" posizione " +
" FROM mvw_sitart_udc_det_inventario " +
" GROUP BY cod_mart, posizione), " +
" grouped_ord AS ( " +
" SELECT dtb_ordr.cod_mart, " +
" dtb_ordt.cod_jfas, " +
" dtb_ordt.cod_mdep, " +
" dtb_ordt.gestione, " +
" CONVERT(NUMERIC(15, 5), SUM(dtb_ordr.qta_ord * dtb_ordr.rap_conv) - " +
" SUM(dtb_ordr.qta_evasa * dtb_ordr.rap_conv)) AS qta_ord, " +
" SUM(dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa) AS num_cnf_ord, " +
" SUM(ISNULL(withdraw_mtb_colr.qta_col, 0)) AS qta_col_scaricata, " +
" SUM(ISNULL(withdraw_mtb_colr.num_cnf, 0)) AS num_cnf_scaricata " +
" FROM dtb_ordr " +
" INNER JOIN dtb_ordt on dtb_ordr.gestione = dtb_ordt.gestione AND " +
" dtb_ordr.data_ord = dtb_ordt.data_ord AND " +
" dtb_ordr.num_ord = dtb_ordt.num_ord " +
" LEFT OUTER JOIN withdraw_mtb_colr " +
" ON withdraw_mtb_colr.gestione = dtb_ordt.gestione AND " +
" withdraw_mtb_colr.num_ord = dtb_ordt.num_ord AND " +
" withdraw_mtb_colr.data_ord = dtb_ordt.data_ord AND " +
" withdraw_mtb_colr.cod_mart = dtb_ordr.cod_mart " +
" CROSS APPLY input_values " +
" WHERE dtb_ordt.gestione = 'L' " +
" AND flag_evaso = 'I' " +
" AND flag_evaso_prod = 'I' " +
" AND dtb_ordr.flag_evaso_forzato = 'N' " +
" AND flag_annulla = 'N' " +
" AND dtb_ordt.cod_mdep = input_values.cod_mdep " +
" AND dtb_ordt.data_ord BETWEEN input_values.data_inizio AND input_values.data_fine " +
" GROUP BY dtb_ordr.cod_mart, dtb_ordt.cod_jfas, dtb_ordt.cod_mdep, dtb_ordt.gestione " +
" ), " +
" tmp_ord AS (SELECT grouped_ord.cod_mart, " +
" mtb_aart.unt_mis, " +
" grouped_ord.cod_jfas, " +
" SUM(qta_ord) - SUM(qta_col_scaricata) AS qta_ord, " +
" SUM(num_cnf_ord) - SUM(num_cnf_scaricata) AS num_cnf_ord " +
" FROM grouped_ord " +
" INNER JOIN mtb_aart ON grouped_ord.cod_mart = mtb_aart.cod_mart " +
" CROSS APPLY input_values " +
" GROUP BY grouped_ord.cod_mart, mtb_aart.unt_mis, grouped_ord.cod_jfas " +
" ), " +
" ord_without_positioned_mtb_colt AS ( " +
" SELECT tmp_ord.cod_mart, " +
" tmp_ord.cod_jfas, " +
" ISNULL(custom_mtb_colr_on_linea.posizione, tmp_ord.cod_jfas) AS posizione, " +
" unt_mis, " +
" qta_ord AS qta_ord_calc, " +
" num_cnf_ord AS num_cnf_ord_calc, " +
" ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata, " +
" ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata, " +
" qta_ord - ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_fabbisogno, " +
" num_cnf_ord - ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_fabbisogno " +
" FROM tmp_ord " +
" INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas " +
" AND tmp_ord.cod_jfas = jrl_fase_posizioni.posizione " +
" LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea " +
" ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND " +
" tmp_ord.cod_jfas = custom_mtb_colr_on_linea.posizione " +
" " +
" UNION ALL " +
" " +
" SELECT DISTINCT tmp_ord.cod_mart, " +
" null AS cod_jfas, " +
" jrl_fase_posizioni.posizione, " +
" unt_mis, " +
" 0 AS qta_ord_calc, " +
" 0 AS num_cnf_ord_calc, " +
" ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata, " +
" ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata, " +
" 0 AS qta_fabbisogno, " +
" 0 AS num_cnf_fabbisogno " +
" FROM tmp_ord " +
" INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas " +
" AND tmp_ord.cod_jfas <> jrl_fase_posizioni.posizione " +
" " +
" " +
" LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea " +
" ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND " +
" jrl_fase_posizioni.posizione = custom_mtb_colr_on_linea.posizione " +
" ) " +
"SELECT cod_mart, " +
" unt_mis, " +
" input_values.data_inizio, " +
" input_values.data_fine, " +
" SUM(qta_ord_calc) AS qta_ord, " +
" SUM(num_cnf_ord_calc) AS num_cnf_ord, " +
" SUM(qta_gia_posizionata) AS qta_col_versata, " +
" SUM(num_cnf_gia_posizionata) AS num_cnf_versata, " +
" SUM(qta_ord_calc - qta_gia_posizionata) AS qta_fabbisogno, " +
" SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) AS num_cnf_fabbisogno " +
"FROM ord_without_positioned_mtb_colt " +
"CROSS APPLY input_values " +
"GROUP BY cod_mart, unt_mis, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";
ProdFabbisognoLineeProdRESTConsumerService prodFabbisognoLineeProdRESTConsumerService = RESTBuilder.getService(ProdFabbisognoLineeProdRESTConsumerService.class);
prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(UtilityDate.formatDate(startDate, "yyyy-MM-dd"), UtilityDate.formatDate(endDate, "yyyy-MM-dd"), codMdep)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> call,
Response<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> response) {
analyzeAnswer(response, "retrieveFabbisogno", onComplete, onFailed);
}
/*
* Query splittata per cod_jfas (più pesante)
WITH input_values AS (SELECT '2021-02-15' AS data_inizio,
'2021-02-28' AS data_fine,
--'SC06' AS linea_prod,
'34' AS cod_mdep),
withdraw_mtb_colr AS (
SELECT cod_mart,
SUM(ISNULL(qta_col, 0)) as qta_col,
SUM(ISNULL(num_cnf, 0)) as num_cnf,
mtb_colr.data_ord,
mtb_colr.num_ord,
mtb_colr.gestione
FROM mtb_colr
INNER JOIN mtb_colt mc on mtb_colr.gestione = mc.gestione and mtb_colr.data_collo = mc.data_collo and
mtb_colr.ser_collo = mc.ser_collo and mtb_colr.num_collo = mc.num_collo
WHERE segno = -1
and cod_dtip IS NULL
GROUP BY cod_mart,
mtb_colr.data_ord,
mtb_colr.num_ord,
mtb_colr.gestione
),
custom_mtb_colr AS (SELECT cod_mart,
SUM(qta_col) AS qta_col,
SUM(num_cnf) AS num_cnf,
posizione
FROM mvw_sitart_udc_det_inventario
GROUP BY cod_mart, posizione),
grouped_ord AS (
SELECT dtb_ordr.cod_mart,
dtb_ordt.cod_jfas,
dtb_ordt.cod_mdep,
dtb_ordt.gestione,
CONVERT(NUMERIC(15, 5), SUM(dtb_ordr.qta_ord * dtb_ordr.rap_conv) -
SUM(dtb_ordr.qta_evasa * dtb_ordr.rap_conv)) AS qta_ord,
SUM(dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa) AS num_cnf_ord,
SUM(ISNULL(withdraw_mtb_colr.qta_col, 0)) AS qta_col_scaricata,
SUM(ISNULL(withdraw_mtb_colr.num_cnf, 0)) AS num_cnf_scaricata
FROM dtb_ordr
INNER JOIN dtb_ordt on dtb_ordr.gestione = dtb_ordt.gestione AND
dtb_ordr.data_ord = dtb_ordt.data_ord AND
dtb_ordr.num_ord = dtb_ordt.num_ord
LEFT OUTER JOIN withdraw_mtb_colr
ON withdraw_mtb_colr.gestione = dtb_ordt.gestione AND
withdraw_mtb_colr.num_ord = dtb_ordt.num_ord AND
withdraw_mtb_colr.data_ord = dtb_ordt.data_ord AND
withdraw_mtb_colr.cod_mart = dtb_ordr.cod_mart
CROSS APPLY input_values
WHERE dtb_ordt.gestione = 'L'
AND flag_evaso = 'I'
AND dtb_ordr.flag_evaso_forzato = 'N'
AND flag_annulla = 'N'
AND dtb_ordt.cod_mdep = input_values.cod_mdep
AND dtb_ordt.data_ord BETWEEN input_values.data_inizio AND input_values.data_fine
GROUP BY dtb_ordr.cod_mart, dtb_ordt.cod_jfas, dtb_ordt.cod_mdep, dtb_ordt.gestione
),
tmp_ord AS (SELECT grouped_ord.cod_mart,
mtb_aart.unt_mis,
grouped_ord.cod_jfas,
SUM(qta_ord) - SUM(qta_col_scaricata) AS qta_ord,
SUM(num_cnf_ord) - SUM(num_cnf_scaricata) AS num_cnf_ord
FROM grouped_ord
INNER JOIN mtb_aart ON grouped_ord.cod_mart = mtb_aart.cod_mart
CROSS APPLY input_values
GROUP BY grouped_ord.cod_mart, mtb_aart.unt_mis, grouped_ord.cod_jfas
),
ord_without_positioned_mtb_colt AS (
SELECT tmp_ord.cod_mart,
tmp_ord.cod_jfas,
ISNULL(custom_mtb_colr_on_linea.posizione, tmp_ord.cod_jfas) AS posizione,
unt_mis,
qta_ord AS qta_ord_calc,
num_cnf_ord AS num_cnf_ord_calc,
ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata,
ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata,
qta_ord - ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_fabbisogno,
num_cnf_ord - ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_fabbisogno
FROM tmp_ord
INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas
AND tmp_ord.cod_jfas = jrl_fase_posizioni.posizione
LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea
ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND
tmp_ord.cod_jfas = custom_mtb_colr_on_linea.posizione
UNION ALL
SELECT DISTINCT tmp_ord.cod_mart,
null AS cod_jfas,
jrl_fase_posizioni.posizione,
unt_mis,
0 AS qta_ord_calc,
0 AS num_cnf_ord_calc,
ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata,
ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata,
0 AS qta_fabbisogno,
0 AS num_cnf_fabbisogno
FROM tmp_ord
INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas
AND tmp_ord.cod_jfas <> jrl_fase_posizioni.posizione
LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea
ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND
jrl_fase_posizioni.posizione = custom_mtb_colr_on_linea.posizione
)
SELECT cod_mart,
cod_jfas,
posizione,
unt_mis,
qta_ord_calc AS qta_ord,
num_cnf_ord_calc AS num_cnf_ord,
qta_gia_posizionata AS qta_col_versata,
num_cnf_gia_posizionata AS num_cnf_versata,
qta_ord_calc - qta_gia_posizionata AS qta_fabbisogno,
num_cnf_ord_calc - num_cnf_gia_posizionata AS num_cnf_fabbisogno
FROM ord_without_positioned_mtb_colt
ORDER BY cod_mart, posizione
* */
Type typeOfObjectsList = new TypeToken<ArrayList<ProdFabbisognoLineeProdDTO>>() {}.getType();
this.mSystemRESTConsumer.processSql(sql, typeOfObjectsList, onComplete, onFailed);
@Override
public void onFailure(Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}

View File

@@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import retrofit2.Call;
import retrofit2.http.GET;
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);
}

View File

@@ -45,7 +45,9 @@ public class ProdRecuperoMaterialeViewModel {
@Inject
public ProdRecuperoMaterialeViewModel(ProdRecuperMaterialeRESTConsumer prodRecuperMaterialeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer) {
public ProdRecuperoMaterialeViewModel(ProdRecuperMaterialeRESTConsumer prodRecuperMaterialeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer) {
this.mProdRecuperMaterialeRESTConsumer = prodRecuperMaterialeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
@@ -53,27 +55,25 @@ public class ProdRecuperoMaterialeViewModel {
public void init(String codJfas) {
this.sendOnLoadingStarted();
new Thread(() -> {
mProdRecuperMaterialeRESTConsumer.loadLastULVersate(codJfas, ulList -> {
this.mUlList.setValue(ulList);
mProdRecuperMaterialeRESTConsumer.loadLastULVersate(codJfas, ulList -> {
this.mUlList.setValue(ulList);
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
this.sendOnLoadingEnded();
}, this::sendError);
}
public void processBarcodeDTO(BarcodeScanDTO data) {
if (UtilityBarcode.isEtichettaAnonima(data) || UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaUL(data);
this.executeEtichettaLU(data.getStringValue());
}
}
private void executeEtichettaUL(BarcodeScanDTO barcodeScanDTO) {
private void executeEtichettaLU(String sscc) {
this.sendOnLoadingStarted();
this.mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
this.sendOnLoadingEnded();
if (mtbColt != null) {
@@ -116,7 +116,7 @@ public class ProdRecuperoMaterialeViewModel {
if (!UtilityBigDecimal.equalsTo(qtaDaEvadere, BigDecimal.ZERO)) {
if(item.getMtbAart().isFlagQtaCnfFissaBoolean())
if (item.getMtbAart().isFlagQtaCnfFissaBoolean())
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
else numCnfDaEvadere = item.getNumCnf();
}

View File

@@ -1,97 +0,0 @@
package it.integry.integrywmsnative.gest.prod_recupero_materiale.views;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
import java.math.BigDecimal;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding;
public class InputQuantityToReturnDialog {
private Context mContext;
private Dialog currentDialog;
public static Dialog make(final Context context, MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
return new InputQuantityToReturnDialog(context, mtbAart, minQuantity, maxQuantity, onDialogDismiss).currentDialog;
}
private InputQuantityToReturnDialog(Context context, MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
this.mContext = context;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DialogInputQuantityToReturnBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_to_return, null, false);
currentDialog = new Dialog(context);
currentDialog.setContentView(bindings.getRoot());
currentDialog.setCanceledOnTouchOutside(false);
currentDialog.setCancelable(false);
currentDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
InputQuantityToReturnViewModel viewModel = new InputQuantityToReturnViewModel();
viewModel.setMtbAart(mtbAart)
.setMinQuantity(minQuantity)
.setMaxQuantity(maxQuantity);
bindings.setMViewModel(viewModel);
bindings.buttonConfirm.setOnClickListener(v -> {
currentDialog.dismiss();
onDialogDismiss.run(BigDecimal.ZERO);
});
bindings.buttonAbort.setOnClickListener(v -> {
currentDialog.dismiss();
onDialogDismiss.run(BigDecimal.ZERO);
});
}
public class InputQuantityToReturnViewModel {
public MtbAart mtbAart;
public BigDecimal minQuantity;
public BigDecimal maxQuantity;
public MtbAart getMtbAart() {
return mtbAart;
}
public InputQuantityToReturnViewModel setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public BigDecimal getMinQuantity() {
return minQuantity;
}
public InputQuantityToReturnViewModel setMinQuantity(BigDecimal minQuantity) {
this.minQuantity = minQuantity;
return this;
}
public BigDecimal getMaxQuantity() {
return maxQuantity;
}
public InputQuantityToReturnViewModel setMaxQuantity(BigDecimal maxQuantity) {
this.maxQuantity = maxQuantity;
return this;
}
}
}

View File

@@ -10,7 +10,6 @@ import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -19,17 +18,23 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.List;
import javax.inject.Inject;
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.di.BindableString;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -40,20 +45,27 @@ import it.integry.integrywmsnative.databinding.FragmentProdVersamentoMaterialeBi
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.VersamentoMerceOrdineLavListModel;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ui.ChooseOrdsLavFromListAdapter;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
public class ProdVersamentoMaterialeFragment extends BaseFragment implements ProdVersamentoMaterialeViewModel.Listener, ITitledFragment {
@Inject
ProdVersamentoMaterialeViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private FragmentProdVersamentoMaterialeBinding mBinding;
private final ObservableField<MtbColt> mCurrentMtbColt = new ObservableField<>();
private final ObservableField<Boolean> mCurrentMtbColtSet = new ObservableField<>(false);
private final ObservableArrayList<VersamentoMerceOrdineLavListModel> mCurrentOrders = new ObservableArrayList<>();
public final BindableString codPrimaryArt = new BindableString();
@@ -63,6 +75,8 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
public final ObservableField<Boolean> fabVisible = new ObservableField<>(false);
private int barcodeScannerIstanceID = -1;
public ProdVersamentoMaterialeFragment() {
// Required empty public constructor
}
@@ -76,7 +90,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setRetainInstance(true);
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_versamento_materiale, container, false);
mBinding = FragmentProdVersamentoMaterialeBinding.inflate(inflater, container, false);
MainApplication.appComponent
.prodVersamentoMaterialeComponent()
@@ -99,12 +113,15 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
this.mViewModel.init(SettingsManager.iDB().isFlagVersamentoDirettoProduzione());
this.initView();
this.openLU();
this.initBarcodeReader();
}
private void initView() {
this.mViewModel.getOpenedOrderLavMutableLiveList().observe(getViewLifecycleOwner(), this::refreshList);
this.mViewModel.getMtbColtMutableLiveData().observe(getViewLifecycleOwner(), this.mCurrentMtbColt::set);
this.mViewModel.getMtbColtMutableLiveData().observe(getViewLifecycleOwner(), value -> {
this.mCurrentMtbColt.set(value);
this.mCurrentMtbColtSet.set(true);
});
this.mViewModel.getMtbColrMutableLiveData().observe(getViewLifecycleOwner(), firstMtbColr -> {
codPrimaryArt.set(firstMtbColr.getCodMart());
@@ -174,44 +191,54 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
.toList();
}
private void openLU() {
DialogScanOrCreateLUView.newInstance(false, false, true, false, true, (mtbColt, created) -> {
if (mtbColt == null) {
popMe();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) && mtbColt.getSegno().equals(+1)) {
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU)
.show((requireActivity()).getSupportFragmentManager(), "tag");
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(mViewModel::processBarcodeDTO)
.setOnScanFailed(this::onError));
} else {
mViewModel.setMtbColt(mtbColt);
choosePosition();
}
} else {
this.onError(new Exception("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>"));
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
BarcodeManager.enable();
}
private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> {
// private void openLU() {
// DialogScanOrCreateLUView.newInstance(false, false, true, false, true, (mtbColt, created) -> {
// if (mtbColt == null) {
// popMe();
// } else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) && mtbColt.getSegno().equals(+1)) {
//
// if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
// DialogSimpleMessageView.makeWarningDialog(
// new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
// null, this::openLU)
// .show((requireActivity()).getSupportFragmentManager(), "tag");
//
// } else {
// mViewModel.setMtbColt(mtbColt);
// choosePosition();
// }
//
// } else {
// this.onError(new Exception("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>"));
// }
// }).show(requireActivity().getSupportFragmentManager(), "tag");
// }
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
mViewModel.setPosizione(mtbDepoPosizione);
}
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
}, this::onError).show(requireActivity().getSupportFragmentManager(), "tag");
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
private void recalcAllQuantities() {
if(this.mViewModel.getMtbColrMutableLiveData().getValue() == null) return;
if (this.mViewModel.getMtbColrMutableLiveData().getValue() == null) return;
BigDecimal residuoCol = this.mViewModel.getMtbColrMutableLiveData().getValue().getQtaCol();
BigDecimal residuoCnf = this.mViewModel.getMtbColrMutableLiveData().getValue().getNumCnf();
@@ -228,14 +255,14 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
.mapToInt(x -> x.getOriginalOrdineLavorazione().getHrNum())
.sum();
if(selectedOrders.size() > 0 && totalHr <= 0) {
if (selectedOrders.size() > 0 && totalHr <= 0) {
this.onError(new Exception("Il totale delle <b>risorse umane</b> è pari a 0"));
return;
}
fabVisible.set(selectedOrders.size() > 0);
for(VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : this.mCurrentOrders) {
for (VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : this.mCurrentOrders) {
versamentoMerceOrdineLavListModel.setNumCnfBigDecimal(BigDecimal.ZERO);
versamentoMerceOrdineLavListModel.setQtaBigDecimal(BigDecimal.ZERO);
@@ -243,23 +270,23 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
versamentoMerceOrdineLavListModel.getOriginalOrdineLavorazione().setNumCnfVersamento(0f);
}
for(VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : selectedOrders) {
for (VersamentoMerceOrdineLavListModel versamentoMerceOrdineLavListModel : selectedOrders) {
int usagePerc = (versamentoMerceOrdineLavListModel.getOriginalOrdineLavorazione().getHrNum() * 100) / totalHr;
BigDecimal usedCol;
BigDecimal usedCnf;
if (SettingsManager.iDB().isFlagForceAllToColli() || (versamentoMerceOrdineLavListModel.getOriginalMtbAart() != null && !versamentoMerceOrdineLavListModel.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())){
if (SettingsManager.iDB().isFlagForceAllToColli() || (versamentoMerceOrdineLavListModel.getOriginalMtbAart() != null && !versamentoMerceOrdineLavListModel.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
usedCnf = UtilityBigDecimal.divideAndRoundToInteger(residuoCnf.multiply(BigDecimal.valueOf(usagePerc)), BigDecimal.valueOf(100), RoundingMode.FLOOR);
if(UtilityBigDecimal.equalsOrLowerThan(usedCnf, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCnf, BigDecimal.ZERO)) {
if (UtilityBigDecimal.equalsOrLowerThan(usedCnf, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCnf, BigDecimal.ZERO)) {
usedCnf = BigDecimal.ONE;
}
usedCol = usedCnf.multiply(qtaCnf).setScale(0,BigDecimal.ROUND_FLOOR);
usedCol = usedCnf.multiply(qtaCnf).setScale(0, BigDecimal.ROUND_FLOOR);
} else {
usedCol = UtilityBigDecimal.divideAndRoundToInteger(residuoCol.multiply(BigDecimal.valueOf(usagePerc)), BigDecimal.valueOf(100), RoundingMode.FLOOR);
if (UtilityBigDecimal.equalsOrLowerThan(usedCol, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCol, BigDecimal.ZERO)){
if (UtilityBigDecimal.equalsOrLowerThan(usedCol, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(offsetCol, BigDecimal.ZERO)) {
usedCol = BigDecimal.ONE;
}
@@ -282,8 +309,8 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
Stream.of(selectedOrders)
.max((o1, o2) -> Integer.compare(o1.getOriginalOrdineLavorazione().getHrNum(), o2.getOriginalOrdineLavorazione().getHrNum())).get();
if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0){
if ( SettingsManager.iDB().isFlagForceAllToColli() || (majorOrder.getOriginalMtbAart() != null && !majorOrder.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0) {
if (SettingsManager.iDB().isFlagForceAllToColli() || (majorOrder.getOriginalMtbAart() != null && !majorOrder.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) {
majorOrder.setNumCnfBigDecimal(majorOrder.getNumCnfBigDecimal().add(offsetCnf));
majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(majorOrder.getNumCnfBigDecimal().floatValue());
@@ -307,7 +334,7 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
.map(VersamentoMerceOrdineLavListModel::getOriginalOrdineLavorazione)
.toList();
if(selectedOrders.size() > 0) {
if (selectedOrders.size() > 0) {
this.mViewModel.save(selectedOrders);
} else {
Toast.makeText(requireActivity(), "Nessun ordine selezionato!", Toast.LENGTH_SHORT).show();
@@ -316,6 +343,11 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
public ObservableField<Boolean> isCurrentMtbColtSettedObservable() {
return mCurrentMtbColtSet;
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_versamento_materiale_title_fragment).toString());
@@ -323,13 +355,53 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro
@Override
public void requestLUOpen() {
this.openLU();
// this.openLU();
}
@Override
public void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
choosePosition(onComplete);
}
@Override
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, String partitaMag, LocalDate dataScad, boolean canOverflowOrderQuantity, boolean canPartitaMagBeChanged, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaAvailable(totalQtaAvailable)
.setTotalNumCnfAvailable(totalNumCnfAvailable)
.setQtaCnfAvailable(qtaCnfAvailable)
.setTotalQtaToBeTaken(totalQtaToBeTaken)
.setTotalNumCnfToBeTaken(totalNumCnfToBeTaken)
.setQtaCnfToBeTaken(qtaCnfToBeTaken)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged);
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onError(Exception ex, boolean requestClose) {
super.onError(ex);
if(requestClose) popMe();
if (requestClose) popMe();
}
@Override

View File

@@ -2,15 +2,24 @@ package it.integry.integrywmsnative.gest.prod_versamento_materiale;
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.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@Module(subcomponents = ProdVersamentoMaterialeComponent.class)
public class ProdVersamentoMaterialeModule {
@Provides
ProdVersamentoMaterialeViewModel providesProdVersamentoMaterialeViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
return new ProdVersamentoMaterialeViewModel(colliMagazzinoRESTConsumer, mesRESTConsumer);
ProdVersamentoMaterialeViewModel providesProdVersamentoMaterialeViewModel(PosizioniRESTConsumer posizioniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MesRESTConsumer mesRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer) {
return new ProdVersamentoMaterialeViewModel(posizioniRESTConsumer, colliMagazzinoRESTConsumer, colliLavorazioneRESTConsumer, mesRESTConsumer, barcodeRESTConsumer, articoloRESTConsumer);
}
}

View File

@@ -2,28 +2,53 @@ package it.integry.integrywmsnative.gest.prod_versamento_materiale;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Iterator;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
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.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
public class ProdVersamentoMaterialeViewModel {
private final PosizioniRESTConsumer mPosizioniRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final ColliLavorazioneRESTConsumer mColliLavorazioneRESTConsumer;
private final MesRESTConsumer mMesRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private boolean mFlagVersamentoDirettoProduzione;
@@ -35,9 +60,18 @@ public class ProdVersamentoMaterialeViewModel {
private Listener mListener;
@Inject
public ProdVersamentoMaterialeViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
public ProdVersamentoMaterialeViewModel(PosizioniRESTConsumer posizioniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MesRESTConsumer mesRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer) {
this.mPosizioniRESTConsumer = posizioniRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer;
this.mMesRESTConsumer = mesRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mArticoloRESTConsumer = articoloRESTConsumer;
}
@@ -46,8 +80,213 @@ public class ProdVersamentoMaterialeViewModel {
}
public void setMtbColt(MtbColt mtbColt) {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) {
if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) {
this.executeEtichettaPosizione(barcodeScanDTO);
} else if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue());
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO);
} else if (UtilityBarcode.isEan13(barcodeScanDTO)) {
// this.executeEAN13(barcodeScanDTO);
}
}
private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue()))
.single();
this.executePosizione(foundPosizione);
}
private void executePosizione(MtbDepoPosizione posizione) {
this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> {
if (mtbColtList == null || mtbColtList.size() == 0) {
this.sendError(new NoLUFoundException());
} else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
this.onLUOpened(mtbColt);
}, this::sendError);
} else {
this.sendError(new TooManyLUFoundInMonoLUPositionException());
}
}, this::sendError);
}
private void executeEtichettaLU(String sscc) {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
this.onLUOpened(mtbColt);
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) {
mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc);
} else if (!UtilityString.isNullOrEmpty(barcodeProd)) {
this.loadArticolo(barcodeProd, ean128Model);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void loadArticolo(String barcodeProd, Ean128Model ean128Model) {
mArticoloRESTConsumer.searchByBarcode(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) {
MtbAart articolo = mtbAartList.get(0);
this.dispatchArt(articolo, ean128Model);
} else {
this.sendError(new NoResultFromBarcodeException(barcodeProd));
}
}, this::sendError);
}
private void dispatchArt(MtbAart mtbAart, Ean128Model ean128Model) {
PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
.setMtbAart(mtbAart)
.setTempPickData(PickDataDTO.fromEan128(ean128Model));
BigDecimal numCnfDaPrelevare = null;
BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null;
BigDecimal initialNumCnf;
BigDecimal initialQtaCnf;
BigDecimal initialQtaTot;
String partitaMag = null;
LocalDate dataScad = null;
if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
//Oppure le info del barcode scansionato
PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO();
qtaColDaPrelevare = manualPickDTO.getQtaTot();
numCnfDaPrelevare = manualPickDTO.getNumCnf();
if (mtbAart.isFlagQtaCnfFissaBoolean()) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
if (manualPickDTO.isEanPeso()) {
if (mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) {
if (UtilityBigDecimal.equalsTo(mtbAart.getPesoKg(), BigDecimal.ZERO)) {
this.sendError(new InvalidPesoKGException());
} else {
qtaColDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, mtbAart.getPesoKg());
}
}
}
} else if (qtaColDaPrelevare != null && numCnfDaPrelevare != null) {
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
if (!mtbAart.isFlagQtaCnfFissaBoolean()) {
numCnfDaPrelevare = UtilityBigDecimal.divideAndRoundToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
if (UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO))
numCnfDaPrelevare = BigDecimal.ONE;
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
} else {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
}
} else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
qtaColDaPrelevare = UtilityBigDecimal.multiply(numCnfDaPrelevare, qtaCnfDaPrelevare);
}
if (manualPickDTO.getMtbPartitaMag() != null) {
partitaMag = manualPickDTO.getMtbPartitaMag().getPartitaMag();
dataScad = manualPickDTO.getMtbPartitaMag().getDataScad();
}
initialNumCnf = numCnfDaPrelevare;
initialQtaCnf = qtaCnfDaPrelevare;
initialQtaTot = qtaColDaPrelevare;
} else {
initialNumCnf = BigDecimal.ONE;
initialQtaCnf = mtbAart.getQtaCnf();
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if (numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) {
initialNumCnf = BigDecimal.ONE;
initialQtaCnf = mtbAart.getQtaCnf();
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
this.sendOnItemDispatched(
pickingObjectDTO,
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
null,
null,
null,
null,
null,
null,
partitaMag,
dataScad,
false,
true,
(pickedQuantityDTO, shouldCloseLU) -> {
this.sendRequestChoosePosition(mtbDepoPosizione -> {
mColliLavorazioneRESTConsumer.createColloScaricoDaArticolo(mtbAart,
pickedQuantityDTO.getPartitaMag(),
mtbDepoPosizione,
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getNumCnf(),
null, null,
this::sendOnDataSaved,
this::sendError);
});
});
}
private void onLUOpened(MtbColt mtbColt) {
this.mtbColtMutableLiveData.setValue(mtbColt);
this.sendRequestChoosePosition(this::setPosizione);
}
@@ -77,7 +316,7 @@ public class ProdVersamentoMaterialeViewModel {
mtbDepoPosizione.getPosizione(),
getIdMaterialeFromCollo(mtbColt),
ordini -> {
if(ordini == null || ordini.isEmpty())
if (ordini == null || ordini.isEmpty())
this.sendError(new Exception("Nessun ordine compatibile con " + getIdMaterialeFromCollo(mtbColt) + " sulla linea " + mtbDepoPosizione.getPosizione()), true);
else {
setCurrentOrders(ordini, mtbColt.getMtbColr().get(0));
@@ -104,7 +343,6 @@ public class ProdVersamentoMaterialeViewModel {
}
private String getIdMaterialeFromCollo(MtbColt mtbColt) {
MtbAart articolo = mtbColt.getMtbColr().get(0).getMtbAart();
return UtilityString.isNullOrEmpty(articolo.getIdArtEqui()) ? articolo.getCodMart() : articolo.getIdArtEqui();
@@ -139,7 +377,6 @@ public class ProdVersamentoMaterialeViewModel {
}
public void save(List<OrdineLavorazioneDTO> selectedOrders) {
this.sendOnLoadingStarted();
@@ -154,16 +391,6 @@ public class ProdVersamentoMaterialeViewModel {
}
public MutableLiveData<MtbColt> getMtbColtMutableLiveData() {
return mtbColtMutableLiveData;
}
@@ -186,6 +413,10 @@ public class ProdVersamentoMaterialeViewModel {
if (this.mListener != null) mListener.requestLUOpen();
}
private void sendRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
if (this.mListener != null) mListener.onRequestChoosePosition(onComplete);
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
@@ -194,6 +425,40 @@ public class ProdVersamentoMaterialeViewModel {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
String partitaMag,
LocalDate dataScad,
boolean canOverflowOrderQuantity,
boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
totalQtaToBeTaken,
totalNumCnfToBeTaken,
qtaCnfToBeTaken,
partitaMag,
dataScad,
canOverflowOrderQuantity,
canPartitaMagBeChanged,
onComplete);
}
private void sendWarning(String warningText, Runnable action) {
if (this.mListener != null) mListener.onWarning(warningText, action);
}
@@ -214,6 +479,25 @@ public class ProdVersamentoMaterialeViewModel {
void requestLUOpen();
void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
String partitaMag,
LocalDate dataScad,
boolean canOverflowOrderQuantity,
boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onError(Exception ex, boolean requestClose);
void onWarning(String warningText, Runnable action);

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import dagger.Subcomponent;
@Subcomponent
public interface ProdVersamentoMaterialeInBufferComponent {
@Subcomponent.Factory
interface Factory {
ProdVersamentoMaterialeInBufferComponent create();
}
void inject(ProdVersamentoMaterialeInBufferFragment prodVersamentoMaterialeInBufferFragment);
}

View File

@@ -0,0 +1,126 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.math.BigDecimal;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.databinding.FragmentProdVersamentoMaterialeInBufferBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnView;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUView;
public class ProdVersamentoMaterialeInBufferFragment extends BaseFragment implements ProdVersamentoMaterialeInBufferViewModel.Listener {
@Inject
ProdVersamentoMaterialeInBufferViewModel mViewModel;
private FragmentProdVersamentoMaterialeInBufferBinding mBindings;
public ProdVersamentoMaterialeInBufferFragment() {
// Required empty public constructor
}
public static ProdVersamentoMaterialeInBufferFragment newInstance() {
return new ProdVersamentoMaterialeInBufferFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
setRetainInstance(true);
mBindings = FragmentProdVersamentoMaterialeInBufferBinding.inflate(inflater, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.prodVersamentoMaterialeInBufferComponent()
.create()
.inject(this);
mBindings.setViewmodel(mViewModel);
mViewModel.setListener(this);
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
this.openLU();
}
private void openLU() {
DialogScanOrCreateLUView.newInstance(false, false, true, false, true, (mtbColt, created) -> {
if (mtbColt == null) {
popMe();
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO ||
mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ||
mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) &&
mtbColt.getSegno() == 1) {
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU)
.show((requireActivity()).getSupportFragmentManager(), "tag");
} else {
mViewModel.setMtbColt(mtbColt);
choosePosition();
}
} else {
this.onError(new Exception("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>"));
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
}
private void choosePosition() {
DialogAskPositionOfLUView.makeBase(true, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
mViewModel.setPosizione(mtbDepoPosizione, () -> {
popMe();
});
}
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete) {
DialogInputQuantityToReturnView.newInstance(mViewModel.getMtbColr().getMtbAart(),
BigDecimal.ZERO,
mViewModel.getMtbColr().getNumCnf(),
onComplete)
.show(this.getParentFragmentManager(), DialogInputQuantityToReturnView.class.getName());
}
@Override
public void onError(Exception ex, boolean requestClose) {
super.onError(ex);
if (requestClose) popMe();
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
@Module(subcomponents = ProdVersamentoMaterialeInBufferComponent.class)
public class ProdVersamentoMaterialeInBufferModule {
@Provides
ProdVersamentoMaterialeInBufferViewModel providesProdVersamentoMaterialeInBufferViewModel(MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer) {
return new ProdVersamentoMaterialeInBufferViewModel(magazzinoBufferRESTConsumer);
}
}

View File

@@ -0,0 +1,110 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoBufferRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeCloseRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_buffer.MagazzinoBufferVersamentoMaterialeRequestDTO;
public class ProdVersamentoMaterialeInBufferViewModel {
private final MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer;
private ProdVersamentoMaterialeInBufferViewModel.Listener mListener;
private final MutableLiveData<MtbColt> mtbColtMutableLiveData = new MutableLiveData<>();
@Inject
public ProdVersamentoMaterialeInBufferViewModel(MagazzinoBufferRESTConsumer magazzinoBufferRESTConsumer) {
this.magazzinoBufferRESTConsumer = magazzinoBufferRESTConsumer;
}
public MutableLiveData<MtbColt> getMtbColtMutable() {
return mtbColtMutableLiveData;
}
public MtbColr getMtbColr() {
MtbColt mtbColt = mtbColtMutableLiveData.getValue();
if(mtbColt == null || mtbColt.getMtbColr() == null || mtbColt.getMtbColr().isEmpty()) return null;
return mtbColt.getMtbColr().get(0);
}
public void setMtbColt(MtbColt mtbColt) {
this.mtbColtMutableLiveData.setValue(mtbColt);
}
public void setPosizione(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) {
this.sendOnLoadingStarted();
var magazzinoRequest = new MagazzinoBufferVersamentoMaterialeRequestDTO()
.setInputMtbColt(mtbColtMutableLiveData.getValue());
magazzinoBufferRESTConsumer.isVersamentoStarted(mtbDepoPosizione, magazzinoRequest, versamentoStarted -> {
if (!versamentoStarted) {
magazzinoBufferRESTConsumer.startVersamentoMateriale(mtbDepoPosizione, magazzinoRequest, () -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
} else {
this.sendOnRequestColliQuantityToConfirm(inputQuantity -> {
if(inputQuantity == null) {
this.sendOnLoadingEnded();
onComplete.run();
return;
}
var closeRequest = new MagazzinoBufferVersamentoMaterialeCloseRequestDTO()
.setInputMtbColt(mtbColtMutableLiveData.getValue())
.setNumCnfDaScaricare(inputQuantity);
magazzinoBufferRESTConsumer.endVersamentoMateriale(mtbDepoPosizione, closeRequest, () -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
});
}
}, this::sendError);
}
public ProdVersamentoMaterialeInBufferViewModel setListener(ProdVersamentoMaterialeInBufferViewModel.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 sendOnRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete) {
if (this.mListener != null) mListener.onRequestColliQuantityToConfirm(onComplete);
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex, true);
}
public interface Listener extends ILoadingListener {
void onRequestColliQuantityToConfirm(RunnableArgs<BigDecimal> onComplete);
void onError(Exception ex, boolean requestClose);
}
}

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;
@@ -849,6 +849,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setWarnOnQuantityOverflow(SettingsManager.iDB().isFlagOverflowQuantityWarning())
.setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null)
@@ -1014,6 +1015,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

@@ -1,8 +1,6 @@
package it.integry.integrywmsnative.ui;
import android.animation.LayoutTransition;
import android.content.Context;
import androidx.viewpager.widget.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
@@ -10,6 +8,8 @@ import android.view.animation.Animation;
import android.view.animation.Interpolator;
import android.view.animation.Transformation;
import androidx.viewpager.widget.ViewPager;
public class DeactivatableViewPager extends ViewPager implements Animation.AnimationListener {
private View mCurrentView;
@@ -57,7 +57,7 @@ public class DeactivatableViewPager extends ViewPager implements Animation.Anima
height = getMinimumHeight();
}
int displayHeight = (int)(getResources().getDisplayMetrics().heightPixels*0.77);
int displayHeight = (int)(getResources().getDisplayMetrics().heightPixels*0.5);
if(height > displayHeight) height = displayHeight;

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,107 @@
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);
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);
dismiss();
}
}

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

@@ -8,6 +8,7 @@ import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -90,7 +91,7 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
public void onStart() {
super.onStart();
if(getDialog() != null) {
if (getDialog() != null) {
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
@@ -180,8 +181,12 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
} else {
BarcodeManager.enable();
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show();
}
} else {
Toast.makeText(requireContext(), "Barcode non riconosciuto", Toast.LENGTH_SHORT)
.show();
BarcodeManager.enable();
}
};

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

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInputQuantityToReturnComponent {
@Subcomponent.Factory
interface Factory {
DialogInputQuantityToReturnComponent create();
}
void inject(DialogInputQuantityToReturnView dialogInputQuantityToReturnView);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogInputQuantityToReturnComponent.class)
public class DialogInputQuantityToReturnModule {
@Provides
DialogInputQuantityToReturnViewModel providesDialogInputQuantityToReturnViewModel() {
return new DialogInputQuantityToReturnViewModel();
}
}

View File

@@ -0,0 +1,96 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
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 org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding;
public class DialogInputQuantityToReturnView extends BaseDialogFragment {
@Inject
DialogInputQuantityToReturnViewModel mViewModel;
private DialogInputQuantityToReturnBinding mBindings;
private Context mContext;
private final MtbAart mtbAart;
private final BigDecimal minQuantity;
private final BigDecimal maxQuantity;
private final RunnableArgs<BigDecimal> onDialogDismiss;
public static DialogInputQuantityToReturnView newInstance(@NotNull MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
return new DialogInputQuantityToReturnView(mtbAart, minQuantity, maxQuantity, onDialogDismiss);
}
private DialogInputQuantityToReturnView(@NotNull MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity, RunnableArgs<BigDecimal> onDialogDismiss) {
super();
this.mtbAart = mtbAart;
this.minQuantity = minQuantity;
this.maxQuantity = maxQuantity;
this.onDialogDismiss = onDialogDismiss;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogInputQuantityToReturnBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogInputQuantityToReturnComponent()
.create()
.inject(this);
mViewModel.init(mtbAart, minQuantity, maxQuantity);
mBindings.setViewModel(mViewModel);
setCancelable(false);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(isCancelable())
.setPositiveButton(R.string.confirm, (dialogInterface, i) -> {
onDialogDismiss.run(mViewModel.getInputQuanity());
})
.setNegativeButton(R.string.abort, (dialogInterface, i) -> {
onDialogDismiss.run(null);
})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
UtilityFocus.focusTextBox(requireContext(), mBindings.additionalNotesText);
}
}

View File

@@ -0,0 +1,39 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_to_return;
import androidx.databinding.ObservableField;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogInputQuantityToReturnViewModel {
private MtbAart mtbAart;
private BigDecimal minQuantity;
private BigDecimal maxQuantity;
public ObservableField<BigDecimal> inputQuantity = new ObservableField<>(BigDecimal.ZERO);
public void init(MtbAart mtbAart, BigDecimal minQuantity, BigDecimal maxQuantity) {
this.minQuantity = minQuantity;
this.maxQuantity = maxQuantity;
this.mtbAart = mtbAart;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public BigDecimal getMinQuantity() {
return minQuantity;
}
public BigDecimal getMaxQuantity() {
return maxQuantity;
}
public BigDecimal getInputQuanity() {
return inputQuantity.get();
}
}

View File

@@ -44,6 +44,7 @@ public class DialogInputQuantityV2DTO {
private boolean saveOnImeDone = false;
private boolean notifyProductLotStatus = false;
private boolean disableTracciabilitaCheck = false;
private boolean warnOnQuantityOverflow = false;
private StatoArticoloDTO statoPartitaMag;
@@ -54,6 +55,8 @@ public class DialogInputQuantityV2DTO {
private boolean canOverflowOrderQuantity;
private String customArtDescription;
public MtbAart getMtbAart() {
return mtbAart;
}
@@ -359,4 +362,22 @@ public class DialogInputQuantityV2DTO {
this.disableTracciabilitaCheck = disableTracciabilitaCheck;
return this;
}
public String getCustomArtDescription() {
return customArtDescription;
}
public DialogInputQuantityV2DTO setCustomArtDescription(String customArtDescription) {
this.customArtDescription = customArtDescription;
return this;
}
public boolean isWarnOnQuantityOverflow() {
return warnOnQuantityOverflow;
}
public DialogInputQuantityV2DTO setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this;
}
}

View File

@@ -48,6 +48,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@@ -151,6 +152,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mViewModel
.setMtbAart(mDialogInputQuantityV2DTO.getMtbAart())
.setArtDescription(UtilityString.isNull(mDialogInputQuantityV2DTO.getCustomArtDescription(), mDialogInputQuantityV2DTO.getMtbAart().getDescrizioneEstesa()))
.setInitialNumCnf(mDialogInputQuantityV2DTO.getInitialNumCnf())
.setInitialQtaCnf(mDialogInputQuantityV2DTO.getInitialQtaCnf())
.setInitialQtaTot(mDialogInputQuantityV2DTO.getInitialQtaTot())
@@ -168,6 +170,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.setTotalQtaAvailable(mDialogInputQuantityV2DTO.getTotalQtaAvailable())
.setCanInputZeroQuantity(mDialogInputQuantityV2DTO.isCanInputZeroQuantity())
.setCanOverflowOrderQuantity(mDialogInputQuantityV2DTO.isCanOverflowOrderQuantity())
.setWarnOnQuantityOverflow(mDialogInputQuantityV2DTO.isWarnOnQuantityOverflow())
.setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable())
.setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag())
.setNote(mDialogInputQuantityV2DTO.getNote())
@@ -254,19 +257,23 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
};
public void save() {
if (this.mViewModel.validate()) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
}
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
}
});
}
public void saveAndCloseLU() {
if (this.mViewModel.validate()) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true);
}
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true);
}
});
}
// @Override
@@ -530,4 +537,13 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onWarning(String text, RunnableArgs<Boolean> result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),
null,
() -> result.run(true),
() -> result.run(false)
).show(requireActivity().getSupportFragmentManager(), "tag");
}
}

View File

@@ -3,11 +3,14 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import androidx.databinding.ObservableField;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
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.rest.consumers.BarcodeRESTConsumer;
@@ -32,6 +35,7 @@ public class DialogInputQuantityV2ViewModel {
private final int UPDATE_QTA_TOT = 2;
public ObservableField<MtbAart> mtbAart = new ObservableField<>();
public BindableString artDescription = new BindableString();
public ObservableField<Boolean> blockedNumCnf = new ObservableField<>();
public ObservableField<Boolean> blockedQtaCnf = new ObservableField<>();
@@ -78,6 +82,7 @@ public class DialogInputQuantityV2ViewModel {
private int onNumCnfInputChanged;
private int onQtaTotInputChanged;
private boolean disableTracciabilitaCheck;
private boolean warnOnQuantityOverflow;
private Listener mListener;
@@ -236,6 +241,11 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
public DialogInputQuantityV2ViewModel setArtDescription(String artDescription) {
this.artDescription.set(artDescription);
return this;
}
public DialogInputQuantityV2ViewModel setInitialNumCnf(BigDecimal initialNumCnf) {
this.initialNumCnf = initialNumCnf;
return this;
@@ -326,6 +336,11 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this;
}
public DialogInputQuantityV2ViewModel setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) {
this.canPartitaMagBeChanged = canPartitaMagBeChanged;
return this;
@@ -450,11 +465,12 @@ public class DialogInputQuantityV2ViewModel {
this.blockedQtaTot.set(false);
}
public boolean validate() {
public void validate(RunnableArgs<Boolean> onValidated) {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidQtaCnfQuantityException());
return false;
onValidated.run(false);
return;
}
if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
@@ -462,51 +478,59 @@ public class DialogInputQuantityV2ViewModel {
internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) {
this.mListener.onError(new InvalidBatchLotException());
return false;
onValidated.run(false);
return;
}
} else {
this.mListener.onError(new InvalidBatchLotException());
return false;
onValidated.run(false);
return;
}
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
return false;
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
return false;
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
return false;
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
return false;
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
return false;
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
return false;
onValidated.run(false);
return;
}
if (!this.canInputZeroQuantity && (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
@@ -515,17 +539,36 @@ public class DialogInputQuantityV2ViewModel {
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException());
return false;
onValidated.run(false);
return;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException());
return false;
onValidated.run(false);
return;
}
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
return true;
//Gli ultimi due controlli sono in coda a causa della callBack di onWarning, non eseguirebbe i controlli messi dopo
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
onValidated.run(true);
}
public DialogInputQuantityV2ResultDTO getResult() {
@@ -536,7 +579,6 @@ public class DialogInputQuantityV2ViewModel {
.setQtaCnf(this.internalQtaCnf)
.setNote(this.internalNote)
.setQtaTot(this.internalQtaTot);
}
public void setListener(Listener listener) {
@@ -570,5 +612,6 @@ public class DialogInputQuantityV2ViewModel {
void onDataChanged();
void onError(Exception ex);
void onWarning(String text, RunnableArgs<Boolean> result);
}
}

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

@@ -147,6 +147,18 @@
android:textSize="16sp"
tools:text="DESCRIZIONE" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/descrizione_sub_1"
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginTop="2dp"
android:layout_toStartOf="@id/secondary_unt_mis"
android:layout_below="@+id/descrizione"
android:textColor="@android:color/black"
android:textSize="14sp"
tools:text="DATA ORD" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/secondary_unt_mis"

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,79 @@
</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">
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" />
<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.FloatingActionMenu-->
<!-- 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="@{view.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_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.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="@{() -> view.showCreatedUL()}"-->
<!-- fab:fab_label="@string/action_show_created_ul" />-->
</com.github.clans.fab.FloatingActionMenu>
<!-- <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="@{() -> view.createNewLU()}"-->
<!-- fab:fab_label="@string/action_create_ul" />-->
<!-- </com.github.clans.fab.FloatingActionMenu>-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -210,7 +223,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

@@ -24,7 +24,7 @@
android:layout_height="match_parent">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white"
@@ -51,7 +51,7 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
@@ -60,7 +60,7 @@
tools:context=".gest.contenuto_bancale.ContenutoBancaleActivity">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
@@ -69,7 +69,7 @@
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@@ -91,9 +91,9 @@
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@@ -113,9 +113,9 @@
android:textColor="@android:color/black"
android:textStyle="italic"
tools:text="Vito Falagario" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
@@ -136,9 +136,9 @@
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="A00F00C00L00" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
@@ -168,10 +168,10 @@
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="(Bari)" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.recyclerview.widget.RecyclerView
@@ -186,11 +186,11 @@
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<com.github.clans.fab.FloatingActionMenu

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

@@ -23,7 +23,7 @@
<it.integry.integrywmsnative.ui.DeactivatableViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:animateLayoutChanges="true">

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

@@ -12,64 +12,53 @@
type="android.content.Context" />
<variable
name="mViewModel"
type="it.integry.integrywmsnative.gest.prod_recupero_materiale.views.InputQuantityToReturnDialog.InputQuantityToReturnViewModel" />
name="viewModel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_to_return.DialogInputQuantityToReturnViewModel" />
</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="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
<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:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_blue_300"
android:gravity="center_horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_error_white_24dp"
android:layout_margin="24dp"/>
</RelativeLayout>
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<TextView
<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"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/action_insert_quantity"
android:gravity="center_horizontal"/>
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/action_insert_quantity" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial"
tools:text="descrizione estesa articolo"
android:text="@{UtilityString.isNullOrEmpty(mViewModel.mtbAart.descrizioneEstesa) ? mViewModel.mtbAart.descrizione : mViewModel.mtbAart.descrizioneEstesa}"
android:gravity="center"
android:layout_marginTop="16dp" />
android:text="@{UtilityString.isNullOrEmpty(viewModel.mtbAart.descrizioneEstesa) ? viewModel.mtbAart.descrizione : viewModel.mtbAart.descrizioneEstesa}"
android:gravity="center" />
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
@@ -89,96 +78,55 @@
android:layout_marginStart="4dp"
style="@style/TextViewMaterial"
tools:text="50.00"
android:text="@{UtilityNumber.decimalToString(mViewModel.maxQuantity)}"
android:text="@{UtilityNumber.decimalToString(viewModel.maxQuantity)}"
android:gravity="center" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout
android:orientation="vertical"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_left"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.20"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_right"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.80"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_left"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.20"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guide_right"
android:layout_width="0dp"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.80"/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/guide_left"
app:layout_constraintEnd_toStartOf="@id/guide_right"
android:layout_marginBottom="16dp"
style="@style/TextInputLayout.OutlinePrimary">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/level_number_layout"
android:layout_width="0dp"
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/guide_left"
app:layout_constraintEnd_toStartOf="@id/guide_right"
android:layout_marginBottom="16dp"
style="@style/TextInputLayout.OutlinePrimary">
android:hint="@string/quantity"
android:inputType="numberDecimal"
android:selectAllOnFocus="true"
app:binding="@{viewModel.inputQuantity}"
style="@style/TextInputEditText.OutlinePrimary"/>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/additional_notes_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/quantity"
android:inputType="numberDecimal"
style="@style/TextInputEditText.OutlinePrimary"/>
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="12dp"
android:paddingBottom="8dp"
android:gravity="bottom|center_horizontal">
<com.google.android.material.button.MaterialButton
android:id="@+id/button_abort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/colorPrimary"
android:layout_marginEnd="8dp"
android:text="@string/abort"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
app:icon="@drawable/ic_save_24dp"
android:text="@string/confirm"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -108,7 +108,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:singleLine="false"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
android:text="@{viewmodel.artDescription}"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />

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>

View File

@@ -21,19 +21,47 @@
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:reverse_visibility="@{view.isCurrentMtbColtSettedObservable()}"
tools:visibility="visible"
android:gravity="center_vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal"
android:gravity="center_horizontal">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/MaterialAlertDialog.Material3.Body.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:layout_marginEnd="12dp"
android:gravity="center_horizontal"
android:text="Scansiona un codice a barre per iniziare" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/distribute_ul"
android:gravity="center_horizontal"/>
android:orientation="vertical"
app:visibility="@{view.isCurrentMtbColtSettedObservable()}"
tools:visibility="gone">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"

View File

@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/gray_detail_background_round8"
android:orientation="vertical"
android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data creazione: "
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.getDataColloHumanLong()}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Posizione "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.posizione != null ? viewmodel.mtbColtMutable.posizione : `N/D`}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="A00F00C00L00" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Deposito "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbColtMutable.codMdep}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/show_created_ul"
android:icon="@drawable/ic_inventory_2_material3"
android:title="@string/action_show_created_ul" />
<item
android:id="@+id/create_ul"
android:icon="@drawable/ic_add_material3"
android:title="@string/action_create_ul" />
</menu>

View File

@@ -222,6 +222,7 @@
<string name="already_used_anonymous_barcode"><![CDATA[L\'etichetta scansionata è stata già utilizzata]]></string>
<string name="no_result_from_barcode">Il barcode scansionato non ha fornito alcun risultato</string>
<string name="no_result_from_linea_prod_barcode">Il barcode scansionato non riguarda una linea di produzione</string>
<string name="no_result_from_cod_mart">Il codice articolo non ha fornito alcun risultato</string>
<string name="multiple_results_from_barcode">Il barcode scansionato ha fornito molteplici risultati</string>
<string name="no_doc_type_selected">Nessun tipo documento selezionato</string>
@@ -330,6 +331,7 @@
<string name="prod_ordine_produzione_title_fragment">Accettazione da ordine</string>
<string name="prod_ordine_lavorazione_title_fragment">Picking da ordine</string>
<string name="prod_versamento_materiale_title_fragment">Versamento materiale</string>
<string name="prod_versamento_materiale_in_buffer_title_fragment">Versamento materiale in buffer</string>
<string name="prod_recupero_materiale_title_fragment">Recupero materiale</string>
<string name="please_select_an_item">Seleziona un elemento per continuare</string>

View File

@@ -26,6 +26,7 @@
<item name="nav_resi_cliente" type="id" />
<item name="nav_prod_ordine_produzione" type="id" />
<item name="nav_prod_versamento_materiale" type="id" />
<item name="nav_prod_versamento_materiale_in_buffer" type="id" />
<item name="nav_prod_ordine_lavorazione" type="id" />
<item name="nav_prod_recupero_materiale" type="id" />
<item name="nav_pv_ordini_acquisto" type="id" />

View File

@@ -227,7 +227,8 @@
<string name="no_doc_type_selected">No document type selected</string>
<string name="already_used_anonymous_barcode">The scanned label has already been used</string>
<string name="no_result_from_barcode">The scanned barcode did not produce any results</string>
<string name="no_result_from_barcode">The scanned barcode does not produce any results</string>
<string name="no_result_from_linea_prod_barcode">The scanned barcode does not represent any production line</string>
<string name="no_result_from_cod_mart">The item code did not produce any results</string>
<string name="please_open_lu">Before continuing open new LU</string>
<string name="multiple_results_from_barcode">The scanned barcode produced multiple results</string>
@@ -336,6 +337,7 @@
<string name="prod_ordine_produzione_title_fragment">Production picking</string>
<string name="prod_ordine_lavorazione_title_fragment">Manufacture picking</string>
<string name="prod_versamento_materiale_title_fragment">Deposit raw material</string>
<string name="prod_versamento_materiale_in_buffer_title_fragment">Deposit raw material in buffer</string>
<string name="prod_recupero_materiale_title_fragment">Recover raw material</string>
<string name="please_select_an_item">Please select an item before proceed</string>

View File

@@ -3,7 +3,7 @@
buildscript {
ext {
kotlin_version = '1.9.0'
agp_version = '8.1.1'
agp_version = '8.1.4'
}
repositories {