Implementato rientro merce da produzione

This commit is contained in:
Giuseppe Scorrano 2021-07-19 19:17:19 +02:00
parent da4d66ecfe
commit 6da020c5cc
127 changed files with 6332 additions and 120 deletions

View File

@ -0,0 +1,60 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="app_agricoper" type="AndroidRunConfigurationType" factoryName="Android App" activateToolWindowBeforeRun="false">
<module name="WMS_Native.app" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
<option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
<option name="FORCE_STOP_RUNNING_APP" value="true" />
<option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<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" />
</Auto>
<Hybrid>
<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" />
</Hybrid>
<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" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="true" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_saporiveri,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri_pv,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri_pv,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_vgalimenti,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -7,7 +7,8 @@
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS_Native.dynamic__base,WMS_Native.dynamic_agricoper,WMS_Native.dynamic_frudis,WMS_Native.dynamic_gramm,WMS_Native.dynamic_ime,WMS_Native.dynamic_saporiveri,WMS_Native.dynamic_saporiveri_pv,dynamic__base,dynamic_frudis,dynamic_gramm,dynamic_ime,dynamic_saporiveri,dynamic_saporiveri_pv" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" />

View File

@ -75,13 +75,16 @@ android {
checkReleaseBuilds false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv", ":dynamic_saporiveri", ':dynamic_gramm']
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti", ":dynamic_ime", ":dynamic_frudis", ":dynamic_saporiveri_pv", ":dynamic_saporiveri", ':dynamic_gramm', ':dynamic_agricoper']
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.fragment:fragment:1.2.5'
androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})

View File

@ -25,14 +25,16 @@
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/Light"
android:windowSoftInputMode="adjustPan">
<intent-filter>
@ -48,7 +50,6 @@
android:windowSoftInputMode="adjustNothing" />
<activity
android:name=".gest.login.LoginActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".gest.lista_bancali.ListaBancaliActivity"

View File

@ -95,7 +95,7 @@ public class MainActivity extends BaseActivity
mBinding.appBarMain.mainSearch.setVisibility(View.GONE);
initGestMenu();
openMain();
if(savedInstanceState == null) openMain();
init();

View File

@ -17,6 +17,8 @@ import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisogn
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
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_ordini_acquisto.PVOrdineAcquistoGrigliaComponent;
@ -35,6 +37,8 @@ import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponen
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
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.input_lu_prod.DialogInputLUProdComponent;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule;
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.scan_art.DialogScanArtComponent;
@ -59,6 +63,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
PickingResiModule.class,
OrdiniUscitaElencoModule.class,
DialogInputQuantityV2Module.class,
DialogInputLUProdModule.class,
DialogScanArtModule.class,
DialogScanOrCreateLUModule.class,
ProdFabbisognoLineeProdModule.class,
@ -80,6 +85,7 @@ public interface MainApplicationComponent {
PickingResiComponent.Factory pickingResiComponent();
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
DialogInputLUProdComponent.Factory dialogInputLUProdComponent();
DialogScanArtComponent.Factory dialogScanArtComponent();
DialogScanOrCreateLUComponent.Factory dialogScanOrCreateLUComponent();
ProdFabbisognoLineeProdComponent.Factory prodFabbisognoLineeProdComponent();
@ -87,6 +93,8 @@ public interface MainApplicationComponent {
DialogAskMagazzinoProssimitaComponent.Factory dialogAskMagazzinoProssimitaComponent();
DialogChooseBatchLotComponent.Factory dialogChooseBatchLotComponent();
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
void inject(AppContext appContext);

View File

@ -12,6 +12,8 @@ import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@ -59,6 +61,18 @@ public class MainApplicationModule {
return new ArticoloRESTConsumer();
}
@Provides
@Singleton
MagazzinoRESTConsumer provideMagazzinoRESTConsumer() {
return new MagazzinoRESTConsumer();
}
@Provides
@Singleton
MesRESTConsumer provideMesRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new MesRESTConsumer(systemRESTConsumer);
}
@Provides
@Singleton
ColliMagazzinoRESTConsumer provideColliMagazzinoRESTConsumer(ArticoloRESTConsumer articoloRESTConsumer) {

View File

@ -84,6 +84,28 @@ public class Converters {
}
}
@BindingAdapter("binding")
public static void bindEditText(AppCompatTextView view, final ObservableField<String> observableField) {
Pair<ObservableField<String>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableField) {
if (pair != null) {
view.removeTextChangedListener(pair.second);
}
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(observableField != null) observableField.set(s.toString());
}
};
view.setTag(R.id.bound_observable, new Pair<>(observableField, watcher));
view.addTextChangedListener(watcher);
}
String newValue = observableField.get();
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue);
}
}
@BindingAdapter("binding")
public static void bindEditText(EditText view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
@ -106,6 +128,28 @@ public class Converters {
}
}
@BindingAdapter("binding")
public static void bindEditText(EditText view, final ObservableField<String> observableString) {
Pair<ObservableField<String>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableString) {
if (pair != null) {
view.removeTextChangedListener(pair.second);
}
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
observableString.set(s.toString());
}
};
view.setTag(R.id.bound_observable, new Pair<>(observableString, watcher));
view.addTextChangedListener(watcher);
}
String newValue = observableString.get();
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue);
}
}
@BindingAdapter("binding")
public static void bindTextInputEditText(TextInputEditText view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);

View File

@ -0,0 +1,6 @@
package it.integry.integrywmsnative.core.di.binders;
public class AutoCompleteTextViewBinders {
}

View File

@ -49,16 +49,38 @@ public class BaseDialogFragment extends DialogFragment {
this.mBarcodeListener = listen;
}
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
protected void openProgress() {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity());
}
});
// }).start();
}
protected void closeProgress() {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
// new Thread(() -> {
getActivity().runOnUiThread(() -> {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
});
// }).start();
}
}

View File

@ -4,6 +4,8 @@ import android.app.Dialog;
import androidx.fragment.app.Fragment;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
public class BaseFragment extends Fragment {
@ -32,4 +34,23 @@ public class BaseFragment extends Fragment {
});
// }).start();
}
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
public void onError(Exception ex) {
this.getActivity().runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
});
}
}

View File

@ -7,6 +7,7 @@ import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
@ -38,6 +39,28 @@ public abstract class ExtendedRecyclerView<T, VH extends RecyclerView.ViewHolder
return mDataset.size();
}
public void clearDataset() {
mDataset.clear();
notifyDataSetChanged();
}
public void updateDataset(List<T> updatedDataset) {
mDataset.clear();
if(updatedDataset != null && !updatedDataset.isEmpty()) {
mDataset.addAll(updatedDataset);
}
notifyDataSetChanged();
}
public void addDataset(List<T> insertDataset) {
if(insertDataset != null && !insertDataset.isEmpty()) {
mDataset.addAll(insertDataset);
notifyDataSetChanged();
}
}
public ExtendedRecyclerView<T, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();

View File

@ -0,0 +1,348 @@
package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal;
public class DtbOrdSteps extends EntityBase {
private String dataOrd;
private String gestione;
private Integer idRiga;
private Integer idStep;
private Integer numOrd;
private String activityId;
private String codAnag;
private String codDtip;
private String codJfas;
private String codMdep;
private String codProdPri;
private String dataDoc;
private String dataFine;
private String dataIniz;
private String descrizioneAttivita;
private String flagTipoTempo;
private Integer hrNum;
private BigDecimal hrTime;
private String idRigaDoc;
private String note;
private String numDoc;
private Integer numFase;
private BigDecimal qtaAllocata;
private BigDecimal qtaDisp;
private BigDecimal qtaDispImmessa;
private BigDecimal qtaImmesse;
private BigDecimal qtaInProd;
private BigDecimal qtaLav;
private BigDecimal qtaProd;
private BigDecimal qtaScartate;
private BigDecimal qtaTrasferite;
private BigDecimal rapConvLav;
private String serDoc;
private String untMisLav;
public String getDataOrd() {
return dataOrd;
}
public DtbOrdSteps setDataOrd(String dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public String getGestione() {
return gestione;
}
public DtbOrdSteps setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public Integer getIdRiga() {
return idRiga;
}
public DtbOrdSteps setIdRiga(Integer idRiga) {
this.idRiga = idRiga;
return this;
}
public Integer getIdStep() {
return idStep;
}
public DtbOrdSteps setIdStep(Integer idStep) {
this.idStep = idStep;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public DtbOrdSteps setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
public String getActivityId() {
return activityId;
}
public DtbOrdSteps setActivityId(String activityId) {
this.activityId = activityId;
return this;
}
public String getCodAnag() {
return codAnag;
}
public DtbOrdSteps setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodDtip() {
return codDtip;
}
public DtbOrdSteps setCodDtip(String codDtip) {
this.codDtip = codDtip;
return this;
}
public String getCodJfas() {
return codJfas;
}
public DtbOrdSteps setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getCodMdep() {
return codMdep;
}
public DtbOrdSteps setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodProdPri() {
return codProdPri;
}
public DtbOrdSteps setCodProdPri(String codProdPri) {
this.codProdPri = codProdPri;
return this;
}
public String getDataDoc() {
return dataDoc;
}
public DtbOrdSteps setDataDoc(String dataDoc) {
this.dataDoc = dataDoc;
return this;
}
public String getDataFine() {
return dataFine;
}
public DtbOrdSteps setDataFine(String dataFine) {
this.dataFine = dataFine;
return this;
}
public String getDataIniz() {
return dataIniz;
}
public DtbOrdSteps setDataIniz(String dataIniz) {
this.dataIniz = dataIniz;
return this;
}
public String getDescrizioneAttivita() {
return descrizioneAttivita;
}
public DtbOrdSteps setDescrizioneAttivita(String descrizioneAttivita) {
this.descrizioneAttivita = descrizioneAttivita;
return this;
}
public String getFlagTipoTempo() {
return flagTipoTempo;
}
public DtbOrdSteps setFlagTipoTempo(String flagTipoTempo) {
this.flagTipoTempo = flagTipoTempo;
return this;
}
public Integer getHrNum() {
return hrNum;
}
public DtbOrdSteps setHrNum(Integer hrNum) {
this.hrNum = hrNum;
return this;
}
public BigDecimal getHrTime() {
return hrTime;
}
public DtbOrdSteps setHrTime(BigDecimal hrTime) {
this.hrTime = hrTime;
return this;
}
public String getIdRigaDoc() {
return idRigaDoc;
}
public DtbOrdSteps setIdRigaDoc(String idRigaDoc) {
this.idRigaDoc = idRigaDoc;
return this;
}
public String getNote() {
return note;
}
public DtbOrdSteps setNote(String note) {
this.note = note;
return this;
}
public String getNumDoc() {
return numDoc;
}
public DtbOrdSteps setNumDoc(String numDoc) {
this.numDoc = numDoc;
return this;
}
public Integer getNumFase() {
return numFase;
}
public DtbOrdSteps setNumFase(Integer numFase) {
this.numFase = numFase;
return this;
}
public BigDecimal getQtaAllocata() {
return qtaAllocata;
}
public DtbOrdSteps setQtaAllocata(BigDecimal qtaAllocata) {
this.qtaAllocata = qtaAllocata;
return this;
}
public BigDecimal getQtaDisp() {
return qtaDisp;
}
public DtbOrdSteps setQtaDisp(BigDecimal qtaDisp) {
this.qtaDisp = qtaDisp;
return this;
}
public BigDecimal getQtaDispImmessa() {
return qtaDispImmessa;
}
public DtbOrdSteps setQtaDispImmessa(BigDecimal qtaDispImmessa) {
this.qtaDispImmessa = qtaDispImmessa;
return this;
}
public BigDecimal getQtaImmesse() {
return qtaImmesse;
}
public DtbOrdSteps setQtaImmesse(BigDecimal qtaImmesse) {
this.qtaImmesse = qtaImmesse;
return this;
}
public BigDecimal getQtaInProd() {
return qtaInProd;
}
public DtbOrdSteps setQtaInProd(BigDecimal qtaInProd) {
this.qtaInProd = qtaInProd;
return this;
}
public BigDecimal getQtaLav() {
return qtaLav;
}
public DtbOrdSteps setQtaLav(BigDecimal qtaLav) {
this.qtaLav = qtaLav;
return this;
}
public BigDecimal getQtaProd() {
return qtaProd;
}
public DtbOrdSteps setQtaProd(BigDecimal qtaProd) {
this.qtaProd = qtaProd;
return this;
}
public BigDecimal getQtaScartate() {
return qtaScartate;
}
public DtbOrdSteps setQtaScartate(BigDecimal qtaScartate) {
this.qtaScartate = qtaScartate;
return this;
}
public BigDecimal getQtaTrasferite() {
return qtaTrasferite;
}
public DtbOrdSteps setQtaTrasferite(BigDecimal qtaTrasferite) {
this.qtaTrasferite = qtaTrasferite;
return this;
}
public BigDecimal getRapConvLav() {
return rapConvLav;
}
public DtbOrdSteps setRapConvLav(BigDecimal rapConvLav) {
this.rapConvLav = rapConvLav;
return this;
}
public String getSerDoc() {
return serDoc;
}
public DtbOrdSteps setSerDoc(String serDoc) {
this.serDoc = serDoc;
return this;
}
public String getUntMisLav() {
return untMisLav;
}
public DtbOrdSteps setUntMisLav(String untMisLav) {
this.untMisLav = untMisLav;
return this;
}
}

View File

@ -105,4 +105,6 @@ public class MtbTCol {
this.circuito = circuito;
return this;
}
}

View File

@ -3,10 +3,8 @@ package it.integry.integrywmsnative.core.rest;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.sql.Date;
import java.util.concurrent.TimeUnit;
import it.integry.integrywmsnative.core.rest.deserializer.DateDeserializer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
@ -53,11 +51,12 @@ public class RESTBuilder {
String endpoint = "http://" + host + ":" + port + "/" + (addEmsApi ? "ems-api/" : "");
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new DateDeserializer())
.setDateFormat("dd/MM/yyyy HH:mm:ss")
.create();
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(endpoint)

View File

@ -40,11 +40,11 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getByCodMart(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
getByCodMartStatic(codMartToFind, onComplete, onFailed);
public void getByCodMarts(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
getByCodMartsStatic(codMartToFind, onComplete, onFailed);
}
public static void getByCodMartStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
public static void getByCodMartsStatic(List<String> codMartToFind, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
String joinedCods = Stream.of(codMartToFind)
.collect(Collectors.joining(","));
@ -67,4 +67,26 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getByCodMart(String codMartToFind, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumer.getByCodMart(codMartToFind).enqueue(new Callback<ServiceRESTResponse<MtbAart>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbAart>> call, Response<ServiceRESTResponse<MtbAart>> response) {
analyzeAnswer(response, "getByCodMart", (m) -> {
if(response.body().getEntityList() != null && !response.body().getEntityList().isEmpty()) {
onComplete.run(response.body().getEntityList().get(0));
} else onComplete.run(null);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbAart>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -418,7 +418,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if (arts != null && arts.size() > 0) {
for (MtbColt mtbColt : mtbColts) {

View File

@ -6,15 +6,18 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityDB;
@Singleton
public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
public static void getTipoCollo(String codTcol, RunnableArgs<MtbTCol> onComplete, RunnableArgs<Exception> onFailed) {
public void getTipoCollo(String codTcol, RunnableArgs<MtbTCol> onComplete, RunnableArgs<Exception> onFailed) {
String baseSql = "SELECT * " +
"FROM mtb_tcol " +
"WHERE cod_tcol = " + UtilityDB.valueToString(codTcol);
@ -36,7 +39,11 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public static void getTipiCollo(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
public void getTipiCollo(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
getTipiColloStatic(onComplete, onFailed);
}
public static void getTipiColloStatic(RunnableArgs<List<MtbTCol>> onComplete, RunnableArgs<Exception> onFailed) {
String baseSql = "SELECT * " +
"FROM mtb_tcol ";

View File

@ -1,31 +1,93 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
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_versamento_materiale.dto.OrdineLavorazioneDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class MesRESTConsumer extends _BaseRESTConsumer {
public static void getOrdiniLavorazioneMateriale(String codJfas, String idMateriale, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed){
private final SystemRESTConsumer mSystemRESTConsumer;
public MesRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.mSystemRESTConsumer = systemRESTConsumer;
}
public static void getOrdiniLavorazioneMateriale(String codJfas, String idMateriale, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazioneMateriale(codJfas,idMateriale).enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getAvailablePosizioni", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
mesRESTConsumerService.getOrdiniLavorazioneMateriale(codJfas, idMateriale)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazioneMateriale", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getOrdiniLavorazione(String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(flagEvaso, codJfas)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(UtilityDate.formatDate(dateStart, UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH), flagEvaso, codJfas)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {
analyzeAnswer(response, "getOrdiniLavorazione", (m) -> onComplete.run(response.body().getDto()), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getLineeProduzione(String codJfasParent, RunnableArgs<List<JtbFasi>> onComplete, RunnableArgs<Exception> onFailed) {
Type typeOfObjectsList = new TypeToken<ArrayList<JtbFasi>>() {}.getType();
this.mSystemRESTConsumer.processSql(
"SELECT * FROM jtb_fasi WHERE cod_jfas_parent = " + UtilityDB.valueToString(codJfasParent),
typeOfObjectsList,
onComplete,
onFailed);
}
}

View File

@ -14,4 +14,12 @@ public interface MesRESTConsumerService {
@GET("mes_v2/getOrdiniLavorazioneMateriale")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazioneMateriale(@Query("codJfas") String codJfas, @Query("idMateriale") String idMateriale);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
@GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas);
}

View File

@ -9,6 +9,7 @@ import java.lang.reflect.Type;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class DateDeserializer implements JsonDeserializer<Date> {
@ -16,6 +17,8 @@ public class DateDeserializer implements JsonDeserializer<Date> {
public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
if (UtilityString.isNullOrEmpty(date)) return null;
return UtilityDate.recognizeDateWithExceptionHandler(date);
}
}

View File

@ -0,0 +1,21 @@
package it.integry.integrywmsnative.core.rest.serializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class DateSerializer implements JsonSerializer<Date> {
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
String dateString = UtilityDate.formatDate(src, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
return src == null ? null : new JsonPrimitive(dateString);
}
}

View File

@ -2,10 +2,8 @@ package it.integry.integrywmsnative.core.utility;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import it.integry.integrywmsnative.core.exception.DateNotRecognizedException;
import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException;
@ -19,9 +17,15 @@ public class UtilityDate {
public static class COMMONS_DATE_FORMATS {
public static final String DMY_SLASH = "dd/MM/yyyy";
public static final String YMD_SLASH = "yyyy/MM/dd";
public static final String DM_SLASH = "dd/MM";
public static final String MD_SLASH = "MM/dd";
public static final String YMD_DASH = "yyyy-MM-dd";
public static final String DMY_TIME_SLASH = DMY_SLASH + " HH:mm:ss";
public static final String YMD_TIME_SLASH = YMD_SLASH + " HH:mm:ss";
public static final String DM_TIME_SLASH = DM_SLASH + " HH:mm";
public static final String MD_TIME_SLASH = MD_SLASH + " HH:mm";
public static final String TIME = "HH:mm";
public static final String TIME_W_SECS = "HH:mm:ss";
public static final String DM_HUMAN = "dd MMM";

View File

@ -8,6 +8,14 @@ import androidx.fragment.app.DialogFragment;
public class UtilityDialog {
public static void setTo60PercentWidth(Context context, DialogFragment dialog) {
int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.60);
dialog.getDialog().getWindow().setLayout(width, LinearLayout.LayoutParams.MATCH_PARENT);
}
public static void setTo90PercentWidth(Context context, Dialog dialog) {
int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.90);

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.utility;
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
@ -22,4 +23,14 @@ public class UtilityDimension {
return Math.round(px);
}
public static double getDisplayInchs(Activity activity) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
float yInches= metrics.heightPixels/metrics.ydpi;
float xInches= metrics.widthPixels/metrics.xdpi;
return Math.sqrt(xInches*xInches + yInches*yInches);
}
}

View File

@ -144,7 +144,7 @@ public class AccettazionePickingViewModel {
.map(SitArtOrdDTO::getCodMart)
.toList();
this.mArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;

View File

@ -7,11 +7,15 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@ -34,6 +38,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDimension;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
@ -68,7 +73,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
@ -78,13 +83,19 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false);
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mToolbar.setNestedScrollView(mBindings.fragmentMainScrollview);
init();
initGestMenu();
initVersion();
return mBindings.getRoot();
}
@Override
@ -128,7 +139,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
List<Exception> generatedErrors = new ArrayList<>();
Iterator sessionsIterator = ColliDataRecover.getAllSessionIDs().iterator();
Iterator<Integer> sessionsIterator = ColliDataRecover.getAllSessionIDs().iterator();
cyclicRecover(sessionsIterator, () -> {
@ -225,6 +236,10 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
int menuSpanCount = 2;
if(UtilityDimension.getDisplayInchs(this.getActivity()) > 8) menuSpanCount = 4;
else if(UtilityDimension.getDisplayInchs(this.getActivity()) > 6.5) menuSpanCount = 3;
for (MenuConfiguration.MenuGroup menuGroup : menuGroups) {
FragmentMainMenuGroupLayoutBinding groupBinding = DataBindingUtil.inflate(mLayoutInflater, R.layout.fragment_main_menu_group_layout, null, false);
@ -233,7 +248,7 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
MenuListAdapter menuListAdapter = new MenuListAdapter(getContext(), menuGroup.getItems());
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), 2));
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), menuSpanCount));
groupBinding.mainList.setAdapter(menuListAdapter);
groupBinding.mainList.setNestedScrollingEnabled(false);

View File

@ -63,7 +63,7 @@ public class PickingResiRESTConsumer {
.distinct()
.toList();
mArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
mArticoloRESTConsumer.getByCodMarts(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (DtbDocr value : values) {

View File

@ -262,7 +262,7 @@ public class ProdRecuperoMaterialeHelper {
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (HistoryVersamentoProdULDTO value : newUlList) {

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import dagger.Subcomponent;
@Subcomponent
public interface ProdRientroMerceComponent {
@Subcomponent.Factory
interface Factory {
ProdRientroMerceComponent create();
}
void inject(ProdRientroMerceFragment prodRientroMerceFragment);
}

View File

@ -0,0 +1,161 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import android.content.Context;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceBinding;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_list.ProdRientroMerceOrderListFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ProdRientroMerceFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdRientroMerceViewModel.Listener, BottomSheetFragmentLUContentView.Listener, BottomSheetMtbColrEditView.Listener {
@Inject
ProdRientroMerceViewModel mViewModel;
private AppCompatTextView mAppBarTitle;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private FragmentProdRientroMerceBinding mBindings;
private ProdRientroMerceOrderListFragment mProdRientroMerceOrderListFragment;
private ProdRientroMerceOrderDetailFragment mProdRientroMerceOrderDetailFragment;
private ElevatedToolbar mToolbar;
public static ProdRientroMerceFragment newInstance() {
return new ProdRientroMerceFragment();
}
@Override
public void onCreate(@Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mProdRientroMerceOrderListFragment = ProdRientroMerceOrderListFragment.newInstance(mToolbar);
mProdRientroMerceOrderDetailFragment = ProdRientroMerceOrderDetailFragment.newInstance();
mProdRientroMerceOrderListFragment.setOnItemSelectedRunnable(mProdRientroMerceOrderDetailFragment::setOrder);
mProdRientroMerceOrderDetailFragment.setOnMtbColtClicked(item -> {
mBindings.bottomSheetMtbColrEdit.setMtbColr(item.getMtbColr().get(0));
mBindings.bottomSheetMtbColrEdit.expand();
});
getChildFragmentManager()
.beginTransaction()
.replace(R.id.order_list_fragment, mProdRientroMerceOrderListFragment)
.replace(R.id.order_detail_fragment, mProdRientroMerceOrderDetailFragment)
.commit();
MainApplication.appComponent
.prodRientroMerceComponent()
.create()
.inject(this);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce, container, false);
mBindings.setLifecycleOwner(this);
mViewModel.setListener(this);
this.initBottomSheet();
return mBindings.getRoot();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if(savedInstanceState == null) {
this.mViewModel.getOrdiniLavorazioneAperti().observe(this.getViewLifecycleOwner(), this::ordersUpdated);
mViewModel.init();
}
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText;
mAppBarTitle.setText(context.getText(R.string.rientro_merce_fragment_title).toString());
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onDestroyView() {
super.onDestroyView();
for (Runnable onPreDestroy :
mOnPreDestroyList) {
onPreDestroy.run();
}
}
@Override
public void onDataSaved() {
}
private void ordersUpdated(List<OrdineLavorazioneDTO> ordiniLavorazioneList) {
this.mProdRientroMerceOrderListFragment.pushOrderList(ordiniLavorazioneList);
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
private void initBottomSheet() {
mBindings.bottomSheetMtbColrEdit.setListener(this);
mBindings.bottomSheetMtbColrEdit.disableEditButton();
mBindings.bottomSheetMtbColrEdit.init(mBindings.bottomSheetMtbColrEdit, mBindings.bottomSheetMtbColrEditBackground);
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
}
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> mProdRientroMerceOrderDetailFragment.deleteMtbColr(mtbColr),
() -> {}
).show(getActivity().getSupportFragmentManager(), "tag");
}
}

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
@Module(subcomponents = ProdRientroMerceComponent.class)
public class ProdRientroMerceModule {
@Provides
ProdRientroMerceViewModel providesProdRientroMerceViewModel(MesRESTConsumer mesRESTConsumer) {
return new ProdRientroMerceViewModel(mesRESTConsumer);
}
}

View File

@ -0,0 +1,68 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceViewModel {
private final MutableLiveData<List<OrdineLavorazioneDTO>> mOrdiniLavorazioneAperti = new MutableLiveData<>();
private Listener mListener;
private final MesRESTConsumer mMesRESTConsumer;
@Inject
public ProdRientroMerceViewModel(MesRESTConsumer mesRESTConsumer) {
this.mMesRESTConsumer = mesRESTConsumer;
}
public void init() {
new Thread(this::sendOnLoadingStarted).start();
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}
public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() {
return mOrdiniLavorazioneAperti;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onDataSaved();
void onError(Exception ex);
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import dagger.Subcomponent;
@Subcomponent
public interface ProdRientroMerceOrderDetailComponent {
@Subcomponent.Factory
interface Factory {
ProdRientroMerceOrderDetailComponent create();
}
void inject(ProdRientroMerceOrderDetailFragment prodRientroMerceOrderDetailFragment);
}

View File

@ -0,0 +1,277 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.MutableLiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdSteps;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ProdRientroMerceOrderDetailFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements ProdRientroMerceOrderDetailViewModel.Listener {
public final MutableLiveData<OrdineLavorazioneDTO> currentOrder = new MutableLiveData<>();
@Inject
ArticoloRESTConsumer mArticoloRESTConsumer;
@Inject
SystemRESTConsumer mSystemRESTConsumer;
@Inject
ProdRientroMerceOrderDetailViewModel mViewModel;
private FragmentProdRientroMerceOrderDetailBinding mBindings;
private ProdRientroMerceOrderDetailMtbColtListAdapter mAdapter;
private RunnableArgs<MtbColt> onMtbColtClicked;
public ProdRientroMerceOrderDetailFragment() {
// Required empty public constructor
}
public static ProdRientroMerceOrderDetailFragment newInstance() {
return new ProdRientroMerceOrderDetailFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_prod_rientro_merce_order_detail, container, false);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
MainApplication.appComponent
.prodRientroMerceOrderDetailComponent()
.create()
.inject(this);
mViewModel.setListener(this);
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView();
return mBindings.getRoot();
}
private void initRecyclerView() {
mBindings.mainList.setNestedScrollingEnabled(false);
mBindings.mainList.setHasFixedSize(true);
mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
mBindings.mainList.addItemDecoration(itemDecorator);
mAdapter = new ProdRientroMerceOrderDetailMtbColtListAdapter(new ObservableArrayList<>());
mAdapter.setEmptyView(mBindings.mtbColtEmptyView);
mBindings.mainList.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(item -> {
if(this.onMtbColtClicked != null) this.onMtbColtClicked.run(item);
});
}
public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order);
mBindings.invalidateAll();
mAdapter.clearDataset();
mViewModel.setOrder(order);
}
private void refreshList(List<MtbColt> mtbColts) {
mAdapter.updateDataset(mtbColts);
}
@Override
public void onDataSaved() {
}
public void addULButtonClick() {
this.openProgress();
String codProd = this.currentOrder.getValue().getCodProd();
mArticoloRESTConsumer.getByCodMart(codProd, mtbAart -> {
String sql = "SELECT TOP 1 * " +
"FROM ( " +
" SELECT MAX(id_step) OVER ( PARTITION BY gestione, num_ord, data_ord) as last_step, " +
" * " +
" FROM dtb_ord_steps " +
" WHERE cod_jfas IS NOT NULL " +
" AND gestione = " + UtilityDB.valueToString(this.currentOrder.getValue().getGestione()) +
" AND num_ord = " + UtilityDB.valueToString(this.currentOrder.getValue().getNumOrd()) +
" AND data_ord = " + UtilityDB.valueToString(this.currentOrder.getValue().getDataOrdD()) +
" ) tmp " +
"WHERE data_iniz IS NOT NULL " +
" AND (data_fine IS NULL OR last_step = id_step) " +
"ORDER BY id_step DESC";
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {}.getType(), dtbOrdStep -> {
this.closeProgress();
DialogInputLUProdDTO dialogInputLUProdDTO = new DialogInputLUProdDTO()
.setMtbAart(mtbAart)
.setNumCnf(this.currentOrder.getValue().getColliPedana())
.setQtaCnf(mtbAart.getQtaCnf())
.setQtaTot(this.currentOrder.getValue().getColliPedana().multiply(mtbAart.getQtaCnf()))
.setPartitaMag(this.currentOrder.getValue().getPartitaMag())
.setDataScad(this.currentOrder.getValue().getDataScadD())
.setCodJfasParent(this.currentOrder.getValue().getCodJfas())
.setCodTcol(this.currentOrder.getValue().getCodTcolUl())
.setSuggestedCodJfas(dtbOrdStep != null && dtbOrdStep.size() > 0 ? dtbOrdStep.get(0).getCodJfas() : null);
DialogInputLUProdView
.newInstance(dialogInputLUProdDTO, resultDTO -> {
ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setPesoCollo(resultDTO.getPesoCollo())
.setPesoNetto(resultDTO.getPesoNetto())
.setTaraPed(resultDTO.getTaraPed())
.setTaraCol(resultDTO.getTaraCol())
.setPesoLordo(resultDTO.getPesoLordo())
.setMtbTCol(resultDTO.getMtbTCol())
.setJtbFasi(resultDTO.getJtbFasi());
this.mViewModel.createLU(pickedQuantityDTO);
}, () -> {
this.closeProgress();
})
.show(getActivity().getSupportFragmentManager(), "tag");
}, this::onError);
}, this::onError);
}
public ProdRientroMerceOrderDetailFragment setOnMtbColtClicked(RunnableArgs<MtbColt> onMtbColtClicked) {
this.onMtbColtClicked = onMtbColtClicked;
return this;
}
public void editMtbColr(MtbColr mtbColr) {
}
public void deleteMtbColr(MtbColr mtbColr) {
MtbColt mtbColt = new MtbColt()
.setGestione(mtbColr.getGestione())
.setDataCollo(mtbColr.getDataColloS())
.setSerCollo(mtbColr.getSerCollo())
.setNumCollo(mtbColr.getNumCollo());
this.mViewModel.deleteLU(mtbColt);
}
public Drawable getOrderStatusIcon() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_play_circle_filled_24dp);
case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_pause_circle_filled_24dp);
case PROGRAMMATO:
default:
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
}
else
return ContextCompat.getDrawable(getActivity(), R.drawable.ic_clock_circle_outline_24dp);
}
public Integer getOrderStatusIconTintColor() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800);
case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800);
case PROGRAMMATO:
default:
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}
else
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
public Drawable getOrderStatusLabelBackgroud() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_success_text);
case PAUSA:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_warning_text);
case PROGRAMMATO:
default:
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text);
}
}
else
return ContextCompat.getDrawable(getActivity(), R.drawable.label_primary_text);
}
public Integer getOrderStatusLabelTextColor() {
if (currentOrder.getValue() != null) {
switch (currentOrder.getValue().getStatoEnum()) {
case IN_CORSO:
return ContextCompat.getColor(getActivity(), R.color.green_800);
case PAUSA:
return ContextCompat.getColor(getActivity(), R.color.yellow_800);
case PROGRAMMATO:
default:
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}
else
return ContextCompat.getColor(getActivity(), R.color.blue_800);
}
}

View File

@ -0,0 +1,24 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer;
@Module(subcomponents = ProdRientroMerceOrderDetailComponent.class)
public class ProdRientroMerceOrderDetailModule {
@Provides
ProdRientroMerceOrderDetailRESTConsumer provideProdRientroMerceOrderDetailRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new ProdRientroMerceOrderDetailRESTConsumer(systemRESTConsumer);
}
@Provides
ProdRientroMerceOrderDetailViewModel provideProdRientroMerceOrderDetailViewModel(
ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new ProdRientroMerceOrderDetailViewModel(prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@ -0,0 +1,89 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding;
public class ProdRientroMerceOrderDetailMtbColtListAdapter extends ExtendedRecyclerView<MtbColt, ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder> {
private OnItemClickListener mOnItemClickListener;
public ProdRientroMerceOrderDetailMtbColtListAdapter(ObservableArrayList<MtbColt> myDataset) {
super(myDataset);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
protected FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding mViewDataBinding;
public ViewHolder(FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
public void bind(MtbColt mtbColt) {
mViewDataBinding.setMtbColt(mtbColt);
mViewDataBinding.executePendingBindings();
}
}
@Override
public ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
FragmentProdRientroMerceOrderDetailMtbColtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_prod_rientro_merce_order_detail__mtb_colt_item_model, parent, false);
return new ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder(viewDataBinding);
}
@Override
public void onBindViewHolder(ProdRientroMerceOrderDetailMtbColtListAdapter.ViewHolder holder, int position) {
MtbColt mtbColt = mDataset.get(position);
holder.bind(mtbColt);
//Setting qty with unt_mis
// if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())){
// String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
//
// if(mtbColr.getMtbAart() != null) {
// text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : "";
// }
//
// holder.mViewDataBinding.qtaTextview.setText(text);
// } else {
// holder.mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col));
// }
holder.mViewDataBinding.getRoot().setOnClickListener(x -> {
if(mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(holder.mViewDataBinding.getMtbColt());
}
});
holder.mViewDataBinding.executePendingBindings();
}
public ProdRientroMerceOrderDetailMtbColtListAdapter setOnItemClickListener(ProdRientroMerceOrderDetailMtbColtListAdapter.OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
return this;
}
public interface OnItemClickListener {
void onItemClick(MtbColt item);
}
}

View File

@ -0,0 +1,91 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.model.MtbTCol;
public class ProdRientroMerceOrderDetailPickedQuantityDTO {
private BigDecimal numCnf;
private BigDecimal pesoCollo;
private BigDecimal pesoNetto;
private BigDecimal taraPed;
private BigDecimal taraCol;
private BigDecimal pesoLordo;
private MtbTCol mtbTCol;
private JtbFasi jtbFasi;
public BigDecimal getNumCnf() {
return numCnf;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getPesoCollo() {
return pesoCollo;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoCollo(BigDecimal pesoCollo) {
this.pesoCollo = pesoCollo;
return this;
}
public BigDecimal getPesoNetto() {
return pesoNetto;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoNetto(BigDecimal pesoNetto) {
this.pesoNetto = pesoNetto;
return this;
}
public BigDecimal getTaraPed() {
return taraPed;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setTaraPed(BigDecimal taraPed) {
this.taraPed = taraPed;
return this;
}
public BigDecimal getTaraCol() {
return taraCol;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setTaraCol(BigDecimal taraCol) {
this.taraCol = taraCol;
return this;
}
public BigDecimal getPesoLordo() {
return pesoLordo;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setPesoLordo(BigDecimal pesoLordo) {
this.pesoLordo = pesoLordo;
return this;
}
public MtbTCol getMtbTCol() {
return mtbTCol;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setMtbTCol(MtbTCol mtbTCol) {
this.mtbTCol = mtbTCol;
return this;
}
public JtbFasi getJtbFasi() {
return jtbFasi;
}
public ProdRientroMerceOrderDetailPickedQuantityDTO setJtbFasi(JtbFasi jtbFasi) {
this.jtbFasi = jtbFasi;
return this;
}
}

View File

@ -0,0 +1,144 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceOrderDetailViewModel {
public MutableLiveData<List<MtbColt>> mtbColtsOfOrder = new MutableLiveData<>();
private OrdineLavorazioneDTO currentOrder;
private final ProdRientroMerceOrderDetailRESTConsumer mProdRientroMerceOrderDetailRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private Listener mListener;
@Inject
public ProdRientroMerceOrderDetailViewModel(ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mProdRientroMerceOrderDetailRESTConsumer = prodRientroMerceOrderDetailRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void setOrder(OrdineLavorazioneDTO order) {
this.currentOrder = order;
refreshMtbColts();
}
private void refreshMtbColts() {
this.sendOnLoadingStarted();
this.mtbColtsOfOrder.postValue(null);
this.mProdRientroMerceOrderDetailRESTConsumer.getMtbColtsOfOrder(currentOrder, mtbColts -> {
for (MtbColt mtbColt : mtbColts) {
mtbColt.getMtbColr().get(0).setDescrizione(currentOrder.getDescrizioneProd());
}
this.mtbColtsOfOrder.postValue(mtbColts);
this.sendOnLoadingEnded();
}, this::sendError);
}
public void createLU(ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO) {
new Thread(this::sendOnLoadingStarted).start();
new Thread(() -> {
ImportColliDaProduzioneRequestDTO importColliDaProduzioneRequestDTO =
new ImportColliDaProduzioneRequestDTO()
.setColliBancale(pickedQuantityDTO.getNumCnf().intValue())
.setQtaCnf(pickedQuantityDTO.getPesoCollo())
.setQtaCol(pickedQuantityDTO.getPesoNetto())
.setCodJcom(currentOrder.getCodJcom())
.setCodJfas(pickedQuantityDTO.getJtbFasi().getCodJfas())
.setCodMart(currentOrder.getCodProd())
.setCodTcol(pickedQuantityDTO.getMtbTCol().getCodTcol())
.setDataCollo(new Date())
.setDataOrd(currentOrder.getDataOrdD())
.setNumOrd(currentOrder.getNumOrd())
.setGestione(currentOrder.getGestione())
.setPartitaMag(currentOrder.getPartitaMag())
.setFornitore(currentOrder.getRagSocAnag())
.setPesoLordo(pickedQuantityDTO.getPesoLordo())
.setPesoNetto(pickedQuantityDTO.getPesoNetto());
this.mProdRientroMerceOrderDetailRESTConsumer.importColloDaProduzione(importColliDaProduzioneRequestDTO, mtbColtSaved -> {
synchronized (this.mtbColtsOfOrder) {
refreshMtbColts();
}
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void deleteLU(MtbColt mtbColt) {
new Thread(this::sendOnLoadingStarted).start();
new Thread(() -> {
this.mProdRientroMerceOrderDetailRESTConsumer.deleteColloDaProduzione(mtbColt, () -> {
synchronized (this.mtbColtsOfOrder) {
Optional<MtbColt> mtbColtToRemove = Stream.of(this.mtbColtsOfOrder.getValue())
.filter(x -> x.getNumCollo().equals(mtbColt.getNumCollo()) &&
x.getSerCollo().equalsIgnoreCase(mtbColt.getSerCollo()) &&
x.getDataColloD().compareTo(mtbColt.getDataColloD()) == 0 &&
x.getGestione().equalsIgnoreCase(mtbColt.getGestione()))
.findFirst();
if (mtbColtToRemove.isPresent()) {
this.mtbColtsOfOrder.getValue().remove(mtbColtToRemove.get());
this.mtbColtsOfOrder.postValue(this.mtbColtsOfOrder.getValue());
}
}
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void setListener(Listener listener) {
this.mListener = listener;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public interface Listener extends ILoadingListener {
void onDataSaved();
void onError(Exception ex);
}
}

View File

@ -0,0 +1,155 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest;
import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import com.orhanobut.logger.Logger;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
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.UtilityQuery;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProdRientroMerceOrderDetailRESTConsumer extends _BaseRESTConsumer {
private final SystemRESTConsumer systemRESTConsumer;
@Inject
public ProdRientroMerceOrderDetailRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getMtbColtsOfOrder(OrdineLavorazioneDTO ordineLavorazioneDTO, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT mtb_colr.* " +
" 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 " +
" mtb_colr.num_ord = " + UtilityDB.valueToString(ordineLavorazioneDTO.getNumOrd()) + " AND" +
" mtb_colr.data_ord = " + UtilityDB.valueToString(ordineLavorazioneDTO.getDataOrdD()) + " AND" +
" mtb_colr.gestione = 'L' AND" +
" mc.segno = 1";
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColr>>() {
}.getType();
systemRESTConsumer.<List<MtbColr>>processSql(sql, typeOfObjectsList, mtbColrList -> {
if (mtbColrList != null && !mtbColrList.isEmpty()) {
List<HashMap<String, Object>> params = new ArrayList<>();
for (MtbColr mtbcolr :
mtbColrList) {
HashMap<String, Object> parm = new HashMap<>();
parm.put("data_collo", mtbcolr.getDataColloD());
parm.put("gestione", mtbcolr.getGestione());
parm.put("ser_collo", mtbcolr.getSerCollo());
parm.put("num_collo", mtbcolr.getNumCollo());
params.add(parm);
}
String mtbColtSql = "SELECT * FROM mtb_colt WHERE " + UtilityQuery.concatFieldListInWhereCond(params) + "";
Type mtbColtTypeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {
}.getType();
systemRESTConsumer.<List<MtbColt>>processSql(mtbColtSql, mtbColtTypeOfObjectsList, mtbColtList -> {
if(mtbColtList == null) mtbColtList = new ArrayList<>();
for (MtbColt mtbColt : mtbColtList) {
ObservableArrayList<MtbColr> mtbColrsRoAdd = new ObservableArrayList<>();
mtbColrsRoAdd.addAll(Stream.of(mtbColrList)
.filter(x -> x.getNumCollo().equals(mtbColt.getNumCollo()) &&
x.getDataColloD().compareTo(mtbColt.getDataColloD()) == 0 &&
x.getGestione().equals(mtbColt.getGestione()) &&
x.getSerCollo().equals(mtbColt.getSerCollo()))
.toList());
mtbColt.setMtbColr(mtbColrsRoAdd);
}
onComplete.run(mtbColtList);
}, onFailed);
} else {
onComplete.run(new ArrayList<>());
}
}, onFailed);
}
public void importColloDaProduzione(ImportColliDaProduzioneRequestDTO importColliDaProduzioneRequestDTO, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class);
service.importColloDaProduzione(importColliDaProduzioneRequestDTO).enqueue(new Callback<ServiceRESTResponse<MtbColt>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<MtbColt>> call, Response<ServiceRESTResponse<MtbColt>> response) {
analyzeAnswer(response, "importColliDaProduzione", mtbColt -> {
onComplete.run(mtbColt);
}, ex -> {
if(onFailed != null) onFailed.run(ex);
});
}
@Override
public void onFailure(Call<ServiceRESTResponse<MtbColt>> call, Throwable t) {
Logger.e(t, "importColliDaProduzione");
onFailed.run(new Exception(t));
}
});
}
public void deleteColloDaProduzione(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ProdRientroMerceOrderDetailRESTConsumerService service = RESTBuilder.getService(ProdRientroMerceOrderDetailRESTConsumerService.class);
service.deleteColloDaProduzione(mtbColtToDelete).enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "deleteColloDaProduzione", mtbColt -> {
onComplete.run();
}, ex -> {
if(onFailed != null) onFailed.run(ex);
});
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
Logger.e(t, "deleteColloDaProduzione");
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -0,0 +1,24 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
public interface ProdRientroMerceOrderDetailRESTConsumerService {
@POST("importColliDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColliDaProduzione(@Body List<ImportColliDaProduzioneRequestDTO> importColliDaProduzioneRequestDTO);
@POST("importColloDaProduzioneJson")
Call<ServiceRESTResponse<MtbColt>> importColloDaProduzione(@Body ImportColliDaProduzioneRequestDTO importColloDaProduzioneRequestDTO);
@POST("cancellaColloDaProduzione")
Call<ServiceRESTResponse<Object>> deleteColloDaProduzione(@Body MtbColt mtbColtToDelete);
}

View File

@ -0,0 +1,190 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto;
import java.math.BigDecimal;
import java.util.Date;
public class ImportColliDaProduzioneRequestDTO {
private String codMart;
private String codJcom;
private String partitaMag;
private BigDecimal pesoLordo;
private BigDecimal pesoNetto;
private String codTcol;
private String fornitore;
private int colliBancale;
private BigDecimal qtaCnf;
private Date dataCollo;
private Date dataOrd;
private int numOrd;
private String codJfas;
private String gestione;
private BigDecimal qtaCol;
private Integer rigaOrd;
private Integer numRisorse;
private String annotazioni;
public String getCodMart() {
return codMart;
}
public ImportColliDaProduzioneRequestDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getCodJcom() {
return codJcom;
}
public ImportColliDaProduzioneRequestDTO setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ImportColliDaProduzioneRequestDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public BigDecimal getPesoLordo() {
return pesoLordo;
}
public ImportColliDaProduzioneRequestDTO setPesoLordo(BigDecimal pesoLordo) {
this.pesoLordo = pesoLordo;
return this;
}
public BigDecimal getPesoNetto() {
return pesoNetto;
}
public ImportColliDaProduzioneRequestDTO setPesoNetto(BigDecimal pesoNetto) {
this.pesoNetto = pesoNetto;
return this;
}
public String getCodTcol() {
return codTcol;
}
public ImportColliDaProduzioneRequestDTO setCodTcol(String codTcol) {
this.codTcol = codTcol;
return this;
}
public String getFornitore() {
return fornitore;
}
public ImportColliDaProduzioneRequestDTO setFornitore(String fornitore) {
this.fornitore = fornitore;
return this;
}
public int getColliBancale() {
return colliBancale;
}
public ImportColliDaProduzioneRequestDTO setColliBancale(int colliBancale) {
this.colliBancale = colliBancale;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public ImportColliDaProduzioneRequestDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public Date getDataCollo() {
return dataCollo;
}
public ImportColliDaProduzioneRequestDTO setDataCollo(Date dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public Date getDataOrd() {
return dataOrd;
}
public ImportColliDaProduzioneRequestDTO setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public int getNumOrd() {
return numOrd;
}
public ImportColliDaProduzioneRequestDTO setNumOrd(int numOrd) {
this.numOrd = numOrd;
return this;
}
public String getCodJfas() {
return codJfas;
}
public ImportColliDaProduzioneRequestDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getGestione() {
return gestione;
}
public ImportColliDaProduzioneRequestDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public BigDecimal getQtaCol() {
return qtaCol;
}
public ImportColliDaProduzioneRequestDTO setQtaCol(BigDecimal qtaCol) {
this.qtaCol = qtaCol;
return this;
}
public Integer getRigaOrd() {
return rigaOrd;
}
public ImportColliDaProduzioneRequestDTO setRigaOrd(Integer rigaOrd) {
this.rigaOrd = rigaOrd;
return this;
}
public Integer getNumRisorse() {
return numRisorse;
}
public ImportColliDaProduzioneRequestDTO setNumRisorse(Integer numRisorse) {
this.numRisorse = numRisorse;
return this;
}
public String getAnnotazioni() {
return annotazioni;
}
public ImportColliDaProduzioneRequestDTO setAnnotazioni(String annotazioni) {
this.annotazioni = annotazioni;
return this;
}
}

View File

@ -0,0 +1,197 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListListGroupModelBinding;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListListModelBinding;
public class ProdRientroMerceOrderListAdapter extends SectionedRecyclerViewAdapter<ProdRientroMerceOrderListAdapter.SubheaderHolder, ProdRientroMerceOrderListAdapter.SingleItemViewHolder> {
private final Context mContext;
private final List<ProdRientroMerceOrderListModel> mDataset = new ArrayList<>();
private View mEmptyView;
private RunnableArgs<String> mOnGroupItemClicked;
private RunnableArgs<ProdRientroMerceOrderListModel> mOnItemChecked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
FragmentProdRientroMerceOrderListListModelBinding mBinding;
SubheaderHolder(FragmentProdRientroMerceOrderListListModelBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentProdRientroMerceOrderListListGroupModelBinding mBinding;
SingleItemViewHolder(FragmentProdRientroMerceOrderListListGroupModelBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
public ProdRientroMerceOrderListAdapter(Context context, ObservableArrayList<ProdRientroMerceOrderListModel> mutableDataSet) {
this.mContext = context;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
checkIfEmpty();
}
});
}
public ProdRientroMerceOrderListAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
this.mOnGroupItemClicked = onGroupItemClicked;
return this;
}
public ProdRientroMerceOrderListAdapter setOnItemChecked(RunnableArgs<ProdRientroMerceOrderListModel> onItemChecked) {
this.mOnItemChecked = onItemChecked;
return this;
}
public ProdRientroMerceOrderListAdapter setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
@Override
public ProdRientroMerceOrderListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
FragmentProdRientroMerceOrderListListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_rientro_merce_order_list__list_model, parent, false);
return new ProdRientroMerceOrderListAdapter.SubheaderHolder(binding);
}
@Override
public ProdRientroMerceOrderListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
FragmentProdRientroMerceOrderListListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_rientro_merce_order_list__list_group_model, parent, false);
return new ProdRientroMerceOrderListAdapter.SingleItemViewHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(ProdRientroMerceOrderListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
ProdRientroMerceOrderListModel pickingObjectDTO = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getGroupTitle()) ? View.GONE : View.VISIBLE);
subheaderHolder.mBinding.groupTitle.setText(Html.fromHtml(pickingObjectDTO.getGroupTitle()));
subheaderHolder.mBinding.getRoot().setOnClickListener(new OnSingleClickListener() {
@Override
public void onSingleClick(View v) {
if (mOnGroupItemClicked != null)
mOnGroupItemClicked.run(pickingObjectDTO.getGroupTitle());
}
});
}
@Override
public void onBindItemViewHolder(final ProdRientroMerceOrderListAdapter.SingleItemViewHolder holder, final int position) {
ProdRientroMerceOrderListModel listModel = this.mDataset.get(position);
switch (listModel.getIcon()) {
case START:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_play_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.green_800), android.graphics.PorterDuff.Mode.SRC_IN);
break;
case PAUSE:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_pause_circle_filled_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.yellow_800), android.graphics.PorterDuff.Mode.SRC_IN);
break;
case SCHEDULED:
default:
holder.mBinding.ordineStateIcon.setImageResource(R.drawable.ic_clock_circle_outline_24dp);
holder.mBinding.ordineStateIcon.setColorFilter(ContextCompat.getColor(mContext, R.color.blue_700), android.graphics.PorterDuff.Mode.SRC_IN);
break;
}
if (!UtilityString.isNullOrEmpty(listModel.getPreDescription())) {
holder.mBinding.preFirstRow.setText(Html.fromHtml(listModel.getPreDescription()));
holder.mBinding.preFirstRow.setVisibility(View.VISIBLE);
} else holder.mBinding.preFirstRow.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getDescription())) {
holder.mBinding.descrizione.setText(Html.fromHtml(listModel.getDescription()));
holder.mBinding.descrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.descrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getSubDescription())) {
holder.mBinding.subDescrizione.setText(Html.fromHtml(listModel.getSubDescription()));
holder.mBinding.subDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.subDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightDescription())) {
holder.mBinding.rightDescrizione.setText(Html.fromHtml(listModel.getRightDescription()));
holder.mBinding.rightDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightDescrizione.setVisibility(View.GONE);
if (!UtilityString.isNullOrEmpty(listModel.getRightSubDescription())) {
holder.mBinding.rightSubDescrizione.setText(Html.fromHtml(listModel.getRightSubDescription()));
holder.mBinding.rightSubDescrizione.setVisibility(View.VISIBLE);
} else holder.mBinding.rightSubDescrizione.setVisibility(View.GONE);
holder.mBinding.executePendingBindings();
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemChecked != null) this.mOnItemChecked.run(listModel);
});
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
ProdRientroMerceOrderListModel compare1 = this.mDataset.get(position);
ProdRientroMerceOrderListModel compare2 = this.mDataset.get(position + 1);
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return true;
}
@Override
public int getItemSize() {
return mDataset.size();
}
}

View File

@ -0,0 +1,167 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.ComparatorCompat;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderListBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
/**
* A simple {@link Fragment} subclass.
* Use the {@link ProdRientroMerceOrderListFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ProdRientroMerceOrderListFragment extends Fragment {
private final ObservableArrayList<ProdRientroMerceOrderListModel> mOrdiniApertiMutableData = new ObservableArrayList<>();
private FragmentProdRientroMerceOrderListBinding mBindings = null;
private RunnableArgs<OrdineLavorazioneDTO> mOnItemSelectedRunnable;
private ElevatedToolbar mToolbar;
public ProdRientroMerceOrderListFragment() {
// Required empty public constructor
}
public static ProdRientroMerceOrderListFragment newInstance(ElevatedToolbar elevatedToolbar) {
Bundle args = new Bundle();
args.putString("toolbarInstance", DataCache.addItem(elevatedToolbar));
final ProdRientroMerceOrderListFragment prodRientroMerceOrderListFragment = new ProdRientroMerceOrderListFragment();
prodRientroMerceOrderListFragment.setArguments(args);
return prodRientroMerceOrderListFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mToolbar = DataCache.retrieveItem(getArguments().getString("toolbarInstance"));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_rientro_merce_order_list, container, false);
mBindings.setLifecycleOwner(this);
if(savedInstanceState == null) this.initRecyclerView();
return mBindings.getRoot();
}
private void initRecyclerView() {
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider));
this.mBindings.mainList.addItemDecoration(itemDecorator);
ProdRientroMerceOrderListAdapter prodRientroMerceOrderListAdapter = new ProdRientroMerceOrderListAdapter(getActivity(), mOrdiniApertiMutableData)
.setEmptyView(this.mBindings.emptyView)
.setOnItemChecked(x -> {
if(mOnItemSelectedRunnable != null) mOnItemSelectedRunnable.run(x.getOriginalModel());
});
this.mBindings.mainList.setAdapter(prodRientroMerceOrderListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(getActivity()));
this.mToolbar.setRecyclerView(mBindings.mainList);
}
public void pushOrderList(List<OrdineLavorazioneDTO> orderList) {
this.mOrdiniApertiMutableData.clear();
this.mOrdiniApertiMutableData.addAll(convertDataModelToListModel(orderList));
}
private List<ProdRientroMerceOrderListModel> convertDataModelToListModel(List<OrdineLavorazioneDTO> dataList) {
ComparatorCompat<OrdineLavorazioneDTO> comparator = ComparatorCompat
.comparing(OrdineLavorazioneDTO::getCodJfas)
.thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataInizProd() != null ? ordineLavorazioneDTO.getDataInizProd() : "zzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd));
if(dataList == null) return new ArrayList<>();
List<ProdRientroMerceOrderListModel> notHiddenElements = Stream.of(dataList)
.sorted(comparator)
.map(x -> {
ProdRientroMerceOrderListModel listModel = new ProdRientroMerceOrderListModel();
switch (x.getStatoEnum()) {
case IN_CORSO:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.START);
break;
case PAUSA:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.PAUSE);
break;
case PROGRAMMATO:
default:
listModel.setIcon(ProdRientroMerceOrderListModel.StatoIconEnum.SCHEDULED);
break;
}
listModel.setGroupTitle(x.getCodJfas());
if(!UtilityString.isNullOrEmpty(x.getRagSocAnag()))
listModel.setPreDescription("Provenienza: " + x.getRagSocAnag());
String testataOrdString = "" + x.getNumOrd();
listModel.setDescription(testataOrdString);
listModel.setSubDescription(x.getDescrizioneProd());
listModel.setRightDescription(x.getCodJcom() != null ? (x.getDescCommessa() + " (" + x.getCodJcom() + ")") : "");
try {
listModel.setRightSubDescription(UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
} catch (Exception ex) {
}
listModel.setOriginalModel(x);
return listModel;
})
.toList();
return notHiddenElements;
}
public ProdRientroMerceOrderListFragment setOnItemSelectedRunnable(RunnableArgs<OrdineLavorazioneDTO> onItemSelectedRunnable) {
this.mOnItemSelectedRunnable = onItemSelectedRunnable;
return this;
}
public RecyclerView getList() {
return mBindings.mainList;
}
}

View File

@ -0,0 +1,108 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_list;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdRientroMerceOrderListModel implements Cloneable {
private String groupTitle;
private StatoIconEnum icon;
private String preDescription;
private String description;
private String subDescription;
private String rightDescription;
private String rightSubDescription;
private boolean hidden;
private OrdineLavorazioneDTO originalModel;
public String getGroupTitle() {
return groupTitle;
}
public ProdRientroMerceOrderListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public StatoIconEnum getIcon() {
return icon;
}
public ProdRientroMerceOrderListModel setIcon(StatoIconEnum icon) {
this.icon = icon;
return this;
}
public String getPreDescription() {
return preDescription;
}
public ProdRientroMerceOrderListModel setPreDescription(String preDescription) {
this.preDescription = preDescription;
return this;
}
public String getDescription() {
return description;
}
public ProdRientroMerceOrderListModel setDescription(String description) {
this.description = description;
return this;
}
public String getSubDescription() {
return subDescription;
}
public ProdRientroMerceOrderListModel setSubDescription(String subDescription) {
this.subDescription = subDescription;
return this;
}
public String getRightDescription() {
return rightDescription;
}
public ProdRientroMerceOrderListModel setRightDescription(String rightDescription) {
this.rightDescription = rightDescription;
return this;
}
public String getRightSubDescription() {
return rightSubDescription;
}
public ProdRientroMerceOrderListModel setRightSubDescription(String rightSubDescription) {
this.rightSubDescription = rightSubDescription;
return this;
}
public boolean isHidden() {
return hidden;
}
public ProdRientroMerceOrderListModel setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public OrdineLavorazioneDTO getOriginalModel() {
return originalModel;
}
public ProdRientroMerceOrderListModel setOriginalModel(OrdineLavorazioneDTO originalModel) {
this.originalModel = originalModel;
return this;
}
public static enum StatoIconEnum {
PAUSE,
START,
SCHEDULED
}
}

View File

@ -152,7 +152,7 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrd
OrdineLavorazioneDTO ordine = checkableOrdineLavoro.getItem().getOrdineLav();
checkableOrdineLavoro.setTestata(UtilityString.formatHtmlStringFromResId(R.string.ord_testata, String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDateOrd(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)).toString());
checkableOrdineLavoro.setTestata(UtilityString.formatHtmlStringFromResId(R.string.ord_testata, String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)).toString());
checkableOrdineLavoro.getChecked().resetOnPropertyChangedCallback();
checkableOrdineLavoro.getChecked().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {

View File

@ -1,12 +1,9 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableFloat;
import it.integry.integrywmsnative.core.exception.DateNotRecognizedException;
import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineLavorazioneDTO {
@ -77,6 +74,8 @@ public class OrdineLavorazioneDTO {
private String codAnag;
private String ragSocAnag;
private String rifOrd;
private String codVdes;
@ -136,8 +135,8 @@ public class OrdineLavorazioneDTO {
public String getDataOrd() {
return dataOrd;
}
public Date getDateOrd() throws ParseException, TimeNotRecognizedException, DateNotRecognizedException {
return UtilityDate.recognizeDate(dataOrd);
public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(dataOrd);
}
public void setDataOrd(String dataOrd) {
@ -196,6 +195,10 @@ public class OrdineLavorazioneDTO {
return dataIniz;
}
public Date getDataInizD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataIniz());
}
public void setDataIniz(String dataIniz) {
this.dataIniz = dataIniz;
}
@ -204,6 +207,10 @@ public class OrdineLavorazioneDTO {
return dataFine;
}
public Date getDataFineD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataFine());
}
public void setDataFine(String dataFine) {
this.dataFine = dataFine;
}
@ -276,6 +283,10 @@ public class OrdineLavorazioneDTO {
return dataScad;
}
public Date getDataScadD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataScad());
}
public void setDataScad(String dataScad) {
this.dataScad = dataScad;
}
@ -308,6 +319,10 @@ public class OrdineLavorazioneDTO {
return dataInizProd;
}
public Date getDataInizProdD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataInizProd());
}
public void setDataInizProd(String dataInizProd) {
this.dataInizProd = dataInizProd;
}
@ -328,6 +343,14 @@ public class OrdineLavorazioneDTO {
this.codAnag = codAnag;
}
public String getRagSocAnag() {
return ragSocAnag;
}
public void setRagSocAnag(String ragSocAnag) {
this.ragSocAnag = ragSocAnag;
}
public String getRifOrd() {
return rifOrd;
}
@ -463,4 +486,8 @@ public class OrdineLavorazioneDTO {
public void setNumCnfVersamento(float numCnfVersamento) {
this.numCnfVersamento.set(numCnfVersamento);
}
public OrdineLavorazioneStatoEnum getStatoEnum() {
return OrdineLavorazioneStatoEnum.fromString(getStato());
}
}

View File

@ -0,0 +1,26 @@
package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
public enum OrdineLavorazioneStatoEnum {
IN_CORSO("IN CORSO"),
PROGRAMMATO("PROGRAMMATO"),
PAUSA("IN PAUSA");
private String text;
OrdineLavorazioneStatoEnum(String text) {
this.text = text;
}
public String getText() {
return this.text;
}
public static OrdineLavorazioneStatoEnum fromString(String text) {
for (OrdineLavorazioneStatoEnum b : OrdineLavorazioneStatoEnum.values()) {
if (b.text.equalsIgnoreCase(text)) return b;
}
return null;
}
}

View File

@ -178,7 +178,7 @@ public class SpedizioneViewModel {
.map(SitArtOrdDTO::getCodMart)
.toList();
this.mArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;

View File

@ -188,7 +188,7 @@ public class UltimeConsegneClienteRESTConsumer {
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> {
if (arts != null && arts.size() > 0) {
for (DtbDocr value : values) {

View File

@ -147,17 +147,6 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onLivelloPosizioneRequired(MtbDepoPosizione posizione, RunnableArgs<MtbDepoPosizione> onComplete) {
@ -237,13 +226,4 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
});
});
}
@Override
public void onError(Exception ex) {
this.getActivity().runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
});
}
}

View File

@ -1,19 +1,15 @@
package it.integry.integrywmsnative.ui;
import android.animation.ObjectAnimator;
import android.animation.StateListAnimator;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ScrollView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import androidx.cardview.widget.CardView;
import androidx.core.view.ViewCompat;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.RecyclerView;
@ -73,12 +69,26 @@ public class ElevatedToolbar extends CardView {
}
};
View.OnScrollChangeListener recyclerViewScrollChangeListener = (view, i, i1, i2, i3) -> {
if(!view.canScrollVertically(-1)) {
resetElevation();
} else {
setCardElevation(CARD_ELEVATION);
}
};
public void setRecyclerView(RecyclerView recyclerView) {
this.mRecyclerView = recyclerView;
resetElevation();
if(mRecyclerView != null) {
mRecyclerView.setOnScrollListener(recyclerViewScrollListener);
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// mRecyclerView.addOnScrollListener(recyclerViewScrollChangeListener);
// } else {
mRecyclerView.addOnScrollListener(recyclerViewScrollListener);
// }
} else {
Log.e("ElevatedToolbar", "RecyclerView is NULL");

View File

@ -101,10 +101,6 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie
mBinding.textviewArtDescription.setText(mContext.getResources().getQuantityString(R.plurals.articles, mtbColrs.size()));
}
public void collapseMtbColrActionSheet(){
this.mBinding.bottomSheetMtbColrEdit.collapse();
}
public BottomSheetFragmentLUContentView setListener(Listener listener) {
this.mListener = listener;
return this;

View File

@ -5,6 +5,7 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.MtbColr;
@ -18,6 +19,8 @@ public class BottomSheetMtbColrEditView extends BottomSheetFragmentBaseView {
private BottomSheetMtbColrEditBinding mBinding;
private BottomSheetMtbColrEditViewModel mViewModel;
public ObservableField<Boolean> enabledEditButton = new ObservableField<>(true);
public ObservableField<Boolean> enabledDeleteButton = new ObservableField<>(true);
private Listener mListener;
@ -75,6 +78,22 @@ public class BottomSheetMtbColrEditView extends BottomSheetFragmentBaseView {
}
public void enableEditButton() {
this.enabledEditButton.set(true);
}
public void disableEditButton() {
this.enabledEditButton.set(false);
}
public void enableDeleteButton() {
this.enabledDeleteButton.set(true);
}
public void disableDeleteButton() {
this.enabledDeleteButton.set(false);
}
public BottomSheetMtbColrEditViewModel getViewModelInstance() {
return this.mViewModel;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
package it.integry.integrywmsnative.view.dialogs.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInputLUProdComponent {
@Subcomponent.Factory
interface Factory {
DialogInputLUProdComponent create();
}
void inject(DialogInputLUProdView dialogInputLUProdView);
}

View File

@ -0,0 +1,103 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import java.math.BigDecimal;
import java.util.Date;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogInputLUProdDTO {
private MtbAart mtbAart;
private BigDecimal numCnf;
private BigDecimal qtaCnf;
private BigDecimal qtaTot;
private String partitaMag;
private Date dataScad;
private String codJfasParent;
private String codTcol;
private String suggestedCodJfas;
public MtbAart getMtbAart() {
return mtbAart;
}
public DialogInputLUProdDTO setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public DialogInputLUProdDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public DialogInputLUProdDTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public DialogInputLUProdDTO setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public DialogInputLUProdDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public Date getDataScad() {
return dataScad;
}
public DialogInputLUProdDTO setDataScad(Date dataScad) {
this.dataScad = dataScad;
return this;
}
public String getCodJfasParent() {
return codJfasParent;
}
public DialogInputLUProdDTO setCodJfasParent(String codJfasParent) {
this.codJfasParent = codJfasParent;
return this;
}
public String getCodTcol() {
return codTcol;
}
public DialogInputLUProdDTO setCodTcol(String codTcol) {
this.codTcol = codTcol;
return this;
}
public String getSuggestedCodJfas() {
return suggestedCodJfas;
}
public DialogInputLUProdDTO setSuggestedCodJfas(String suggestedCodJfas) {
this.suggestedCodJfas = suggestedCodJfas;
return this;
}
}

View File

@ -0,0 +1,16 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
@Module(subcomponents = DialogInputLUProdComponent.class)
public class DialogInputLUProdModule {
@Provides
DialogInputLUProdViewModel providesDialogInputLUProdViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
return new DialogInputLUProdViewModel(magazzinoRESTConsumer, mesRESTConsumer);
}
}

View File

@ -0,0 +1,92 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.model.MtbTCol;
public class DialogInputLUProdResultDTO {
private BigDecimal numCnf;
private BigDecimal pesoCollo;
private BigDecimal pesoNetto;
private BigDecimal taraPed;
private BigDecimal taraCol;
private BigDecimal pesoLordo;
private MtbTCol mtbTCol;
private JtbFasi jtbFasi;
public BigDecimal getNumCnf() {
return numCnf;
}
public DialogInputLUProdResultDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getPesoCollo() {
return pesoCollo;
}
public DialogInputLUProdResultDTO setPesoCollo(BigDecimal pesoCollo) {
this.pesoCollo = pesoCollo;
return this;
}
public BigDecimal getPesoNetto() {
return pesoNetto;
}
public DialogInputLUProdResultDTO setPesoNetto(BigDecimal pesoNetto) {
this.pesoNetto = pesoNetto;
return this;
}
public BigDecimal getTaraPed() {
return taraPed;
}
public DialogInputLUProdResultDTO setTaraPed(BigDecimal taraPed) {
this.taraPed = taraPed;
return this;
}
public BigDecimal getTaraCol() {
return taraCol;
}
public DialogInputLUProdResultDTO setTaraCol(BigDecimal taraCol) {
this.taraCol = taraCol;
return this;
}
public BigDecimal getPesoLordo() {
return pesoLordo;
}
public DialogInputLUProdResultDTO setPesoLordo(BigDecimal pesoLordo) {
this.pesoLordo = pesoLordo;
return this;
}
public MtbTCol getMtbTCol() {
return mtbTCol;
}
public DialogInputLUProdResultDTO setMtbTCol(MtbTCol mtbTCol) {
this.mtbTCol = mtbTCol;
return this;
}
public JtbFasi getJtbFasi() {
return jtbFasi;
}
public DialogInputLUProdResultDTO setJtbFasi(JtbFasi jtbFasi) {
this.jtbFasi = jtbFasi;
return this;
}
}

View File

@ -0,0 +1,410 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
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 android.widget.AdapterView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.fragment.app.DialogFragment;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.material.textfield.TextInputLayout;
import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.math.RoundingMode;
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.JtbFasi;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputLuProdBinding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLULineeProdAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLULineeProdListModel;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel;
public class DialogInputLUProdView extends BaseDialogFragment implements DialogInputLUProdViewModel.Listener {
@Inject
DialogInputLUProdViewModel mViewModel;
private final DialogInputLUProdDTO mDialogInputLUProdDTO;
private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete;
private final Runnable mOnAbort;
public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
public ObservableField<String> selectedLineaProd = new ObservableField<>();
public ObservableField<DialogInputLULineeProdListModel> currentLineaProd = new ObservableField<>();
public ObservableField<MtbAart> currentMtbAart = new ObservableField<>();
public ObservableField<BigDecimal> currentNumCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentPesoCollo = new ObservableField<>();
public ObservableField<BigDecimal> currentPesoNetto = new ObservableField<>();
public ObservableField<BigDecimal> currentTaraPed = new ObservableField<>();
public ObservableField<BigDecimal> currentTaraCol = new ObservableField<>();
public ObservableField<BigDecimal> currentPesoLordo = new ObservableField<>();
public ObservableField<Boolean> enabledLineeProd = new ObservableField<>(false);
public ObservableField<Boolean> enabledNumCnf = new ObservableField<>(true);
public ObservableField<Boolean> enabledQtaCnf = new ObservableField<>(false);
public ObservableField<Boolean> enabledQtaTot = new ObservableField<>(false);
public ObservableField<Boolean> enabledTaraPed = new ObservableField<>(false);
public ObservableField<Boolean> enabledTaraCol = new ObservableField<>(false);
public ObservableField<Boolean> enabledPesoLordo = new ObservableField<>(true);
private DialogInputLuProdBinding mBindings;
private boolean mEnableDataCallback = true;
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null;
public static DialogInputLUProdView newInstance(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
return new DialogInputLUProdView(dialogInputLUProdDTO, onComplete, onAbort);
}
private DialogInputLUProdView(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
super();
this.mDialogInputLUProdDTO = dialogInputLUProdDTO;
this.mOnComplete = onComplete;
this.mOnAbort = onAbort;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_lu_prod, container, false);
mBindings.setLifecycleOwner(this);
mBindings.toolbar.setTitle("Creazione pedana");
MainApplication.appComponent
.dialogInputLUProdComponent()
.create()
.inject(this);
this.mViewModel
.setMtbAart(mDialogInputLUProdDTO.getMtbAart())
.setInitialNumCnf(mDialogInputLUProdDTO.getNumCnf())
.setInitialPesoCollo(mDialogInputLUProdDTO.getQtaCnf())
.setInitialPesoNetto(mDialogInputLUProdDTO.getQtaTot());
mBindings.setView(this);
mBindings.setViewmodel(this.mViewModel);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
this.init();
this.mViewModel.setListener(this);
this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent());
}
private void init() {
UtilityObservable.addPropertyChanged(this.currentMtbAart, (value) -> {
this.currentTaraCol.set(value.getTaraKg());
});
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());
}
}
});
UtilityObservable.addPropertyChanged(this.currentMtbTCol, (value) -> {
this.currentTaraPed.set(value.getOriginalModel().getTaraKg());
});
UtilityObservable.addPropertyChanged(this.selectedLineaProd, (value) -> {
if(this.lineeProdArrayAdapter != null && this.lineeProdArrayAdapter.getDataset() != null) {
Optional<DialogInputLULineeProdListModel> selectedItem = Stream.of(this.lineeProdArrayAdapter.getDataset())
.filter(x -> x.toString().equals(value))
.findFirst();
if(selectedItem.isPresent()) {
currentLineaProd.set(selectedItem.get());
this.mViewModel.setInternalLineaProd(selectedItem.get().getOriginalModel());
}
}
});
UtilityObservable.addPropertyChanged(this.currentNumCnf, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setNumCnf(value);
}
});
UtilityObservable.addPropertyChanged(this.currentPesoCollo, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setPesoCollo(value);
}
});
UtilityObservable.addPropertyChanged(this.currentPesoNetto, (value) -> {
if(value != null) {
this.currentPesoNetto.set(value.setScale(0, RoundingMode.HALF_UP));
}
if (this.mEnableDataCallback) {
this.mViewModel.setPesoNetto(value);
}
});
UtilityObservable.addPropertyChanged(this.currentTaraPed, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setTaraPed(value);
}
});
UtilityObservable.addPropertyChanged(this.currentTaraCol, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setTaraCol(value);
}
});
UtilityObservable.addPropertyChanged(this.currentPesoLordo, (value) -> {
if(value != null) {
this.currentPesoLordo.set(value.setScale(0, RoundingMode.HALF_UP));
}
if (this.mEnableDataCallback) {
this.mViewModel.setPesoLordo(value);
}
});
final ColorStateList textColorsNumCnf = this.mBindings.inputNumCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaCnf = this.mBindings.inputQtaCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaTot = this.mBindings.inputQtaTotLayout.getEditText().getTextColors();
final ColorStateList textColorsTaraPed = this.mBindings.inputTaraPedLayout.getEditText().getTextColors();
final ColorStateList textColorsTaraCol = this.mBindings.inputTaraColLayout.getEditText().getTextColors();
final ColorStateList textColorsPesoLor = this.mBindings.inputPesoLordoLayout.getEditText().getTextColors();
UtilityObservable.addPropertyChanged(this.mViewModel.blockedNumCnf, (value) -> {
toggleTextInputLayoutError(textColorsNumCnf, this.mBindings.inputNumCnfLayout, value);
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedPesoCollo, (value) -> {
toggleTextInputLayoutError(textColorsQtaCnf, this.mBindings.inputQtaCnfLayout, value);
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedPesoNetto, (value) -> {
toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value);
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedTaraPed, (value) -> {
toggleTextInputLayoutError(textColorsTaraPed, this.mBindings.inputTaraPedLayout, value);
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedTaraCol, (value) -> {
toggleTextInputLayoutError(textColorsTaraCol, this.mBindings.inputTaraColLayout, value);
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedPesoLordo, (value) -> {
toggleTextInputLayoutError(textColorsPesoLor, this.mBindings.inputPesoLordoLayout, value);
});
//Init double taps
this.mBindings.inputNumCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedNumCnf.set(!mViewModel.blockedNumCnf.get());
}
}));
this.mBindings.inputQtaCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedPesoCollo.set(!mViewModel.blockedPesoCollo.get());
}
}));
this.mBindings.inputQtaTotText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedPesoNetto.set(!mViewModel.blockedPesoNetto.get());
}
}));
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);
}
});
this.mBindings.filledExposedDropdownCodTcol.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
currentLineaProd.set(lineeProdArrayAdapter.getItem(i));
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
currentLineaProd.set(null);
}
});
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)
.filter(x -> x.getCodTcol().equalsIgnoreCase(mDialogInputLUProdDTO.getCodTcol()))
.findFirst();
if(optTCol.isPresent())
selectedMtbTcol.set(new DialogInputLUProdTipoColloListModel().setOriginalModel(optTCol.get()).toString());
}
});
this.mViewModel.getLineeProd().observe(getViewLifecycleOwner(), lineeProd -> {
this.enabledLineeProd.set(lineeProd != null && lineeProd.size() > 0);
lineeProdArrayAdapter = new DialogInputLULineeProdAdapter(getActivity(), R.layout.array_adapter_single_item, lineeProd);
mBindings.filledExposedDropdownCodJfas.setAdapter(lineeProdArrayAdapter);
if(mDialogInputLUProdDTO.getSuggestedCodJfas() != null) {
Optional<JtbFasi> optFas = Stream.of(lineeProd)
.filter(x -> x.getCodJfas().equalsIgnoreCase(mDialogInputLUProdDTO.getSuggestedCodJfas()))
.findFirst();
if(optFas.isPresent())
selectedLineaProd.set(new DialogInputLULineeProdListModel().setOriginalModel(optFas.get()).toString());
}
});
this.currentMtbAart.set(mDialogInputLUProdDTO.getMtbAart());
}
private void toggleTextInputLayoutError(ColorStateList originalColorStateList, TextInputLayout textInputLayout, boolean isError) {
if (isError) {
textInputLayout.setErrorEnabled(true);
textInputLayout.setError(" ");
textInputLayout.setErrorIconDrawable(null);
textInputLayout.getEditText().setTextColor(ContextCompat.getColor(getActivity(), R.color.red_600));
textInputLayout.setHintTextAppearance(R.style.ErrorFloatingLabel);
} else {
textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
textInputLayout.getEditText().setTextColor(originalColorStateList);
textInputLayout.setHintTextAppearance(R.style.NormalFloatingLabel);
}
}
public void resetValues() {
this.mViewModel.blockedNumCnf.set(false);
this.mViewModel.blockedPesoLordo.set(false);
this.currentNumCnf.set(mDialogInputLUProdDTO.getNumCnf());
}
public void save() {
if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult());
dismiss();
}
}
@Override
public void onDataChanged() {
this.mEnableDataCallback = false;
this.currentNumCnf.set(this.mViewModel.getNumCnf());
this.currentPesoCollo.set(this.mViewModel.getPesoCollo());
this.currentPesoNetto.set(this.mViewModel.getPesoNetto());
this.currentTaraPed.set(this.mViewModel.getTaraPed());
this.currentTaraCol.set(this.mViewModel.getTaraCol());
this.currentPesoLordo.set(this.mViewModel.getPesoLordo());
this.mBindings.executePendingBindings();
this.mEnableDataCallback = true;
}
@Override
public void onError(Exception ex) {
this.onLoadingEnded();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
}

View File

@ -0,0 +1,268 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.JtbFasi;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidGrossWeightQuantityException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidProductionLineException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidNumCnfQuantityException;
public class DialogInputLUProdViewModel {
public ObservableField<MtbAart> mtbAart = new ObservableField<>();
public ObservableField<Boolean> blockedNumCnf = new ObservableField<>(false);
public ObservableField<Boolean> blockedPesoCollo = new ObservableField<>(false);
public ObservableField<Boolean> blockedPesoNetto = new ObservableField<>(false);
public ObservableField<Boolean> blockedTaraPed = new ObservableField<>(false);
public ObservableField<Boolean> blockedTaraCol = new ObservableField<>(false);
public ObservableField<Boolean> blockedPesoLordo = new ObservableField<>(false);
private final MutableLiveData<List<MtbTCol>> mTipiColloLiveData = new MutableLiveData<>();
private final MutableLiveData<List<JtbFasi>> mLineeProdLiveData = new MutableLiveData<>();
private BigDecimal initialNumCnf;
private BigDecimal initialPesoCollo;
private BigDecimal internalNumCnf;
private BigDecimal internalPesoCollo;
private BigDecimal internalPesoNetto;
private BigDecimal internalTaraPed;
private BigDecimal internalTaraCol;
private BigDecimal internalPesoLordo;
private MtbTCol internalTipoPed;
private JtbFasi internalLineaProd;
private Listener mListener;
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
private final MesRESTConsumer mMesRESTConsumer;
@Inject
public DialogInputLUProdViewModel(MagazzinoRESTConsumer magazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) {
this.mMagazzinoRESTConsumer = magazzinoRESTConsumer;
this.mMesRESTConsumer = mesRESTConsumer;
}
public void init(String codJfasParent) {
new Thread(this::sendOnLoadingStarted).start();
mMagazzinoRESTConsumer.getTipiCollo(tipiCollo -> {
this.mTipiColloLiveData.postValue(tipiCollo);
mMesRESTConsumer.getLineeProduzione(codJfasParent, jtbFasi -> {
this.mLineeProdLiveData.postValue(jtbFasi);
this.internalPesoLordo = calcPesoLordo();
this.mListener.onDataChanged();
this.sendOnLoadingEnded();
}, this::sendError);
}, this::sendError);
}
public MutableLiveData<List<MtbTCol>> getTipiCollo() {
return this.mTipiColloLiveData;
}
public MutableLiveData<List<JtbFasi>> getLineeProd() {
return this.mLineeProdLiveData;
}
public BigDecimal getNumCnf() {
return this.internalNumCnf;
}
public BigDecimal getPesoCollo() {
return this.internalPesoCollo;
}
public BigDecimal getPesoNetto() {
return this.internalPesoNetto;
}
public BigDecimal getTaraPed() {
return this.internalTaraPed;
}
public BigDecimal getTaraCol() {
return this.internalTaraCol;
}
public BigDecimal getPesoLordo() {
return this.internalPesoLordo;
}
public DialogInputLUProdViewModel setMtbAart(MtbAart mtbAart) {
this.mtbAart.set(mtbAart);
return this;
}
public DialogInputLUProdViewModel setInitialNumCnf(BigDecimal numCnf) {
this.initialNumCnf = numCnf;
this.internalNumCnf = numCnf;
return this;
}
public DialogInputLUProdViewModel setInitialPesoCollo(BigDecimal pesoCollo) {
this.initialPesoCollo = pesoCollo;
this.internalPesoCollo = pesoCollo;
return this;
}
public DialogInputLUProdViewModel setInitialPesoNetto(BigDecimal pesoNetto) {
this.internalPesoNetto = pesoNetto;
return this;
}
public void setNumCnf(BigDecimal numCnf) {
this.internalNumCnf = numCnf;
this.blockedNumCnf.set(!(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) || numCnf == null));
if (this.internalNumCnf != null) {
if (!this.blockedPesoLordo.get()) {
this.internalPesoNetto = UtilityBigDecimal.multiply(numCnf, this.internalPesoCollo);
this.internalPesoLordo = calcPesoLordo();
} else {
BigDecimal taraPed = internalTaraPed != null ? internalTaraPed : BigDecimal.ZERO;
this.internalPesoCollo = UtilityBigDecimal.divide(this.internalPesoLordo.subtract(taraPed), internalNumCnf).subtract(internalTaraCol);
this.internalPesoNetto = UtilityBigDecimal.multiply(this.internalNumCnf, internalPesoCollo);
}
}
this.mListener.onDataChanged();
}
public void setPesoCollo(BigDecimal pesoCollo) {
this.internalPesoCollo = pesoCollo;
this.internalPesoLordo = calcPesoLordo();
this.mListener.onDataChanged();
}
public void setPesoNetto(BigDecimal qtaTot) {
this.internalPesoNetto = qtaTot;
}
public void setTaraPed(BigDecimal taraPed) {
this.internalTaraPed = taraPed;
if (!this.blockedPesoLordo.get()) {
if(internalNumCnf == null) internalNumCnf = initialNumCnf;
this.internalPesoNetto = UtilityBigDecimal.multiply(internalNumCnf, this.internalPesoCollo);
this.internalPesoLordo = calcPesoLordo();
} else {
this.internalPesoCollo = UtilityBigDecimal.divide(this.internalPesoLordo.subtract(taraPed), internalNumCnf).subtract(internalTaraCol);
this.internalPesoNetto = UtilityBigDecimal.multiply(this.internalNumCnf, internalPesoCollo);
}
this.mListener.onDataChanged();
}
public void setTaraCol(BigDecimal taraCol) {
this.internalTaraCol = taraCol;
}
public void setPesoLordo(BigDecimal pesoLordo) {
this.internalPesoLordo = pesoLordo;
this.blockedPesoLordo.set(!(UtilityBigDecimal.equalsTo(pesoLordo, BigDecimal.ZERO) || pesoLordo == null));
if (internalPesoLordo != null) {
if(internalNumCnf == null) internalNumCnf = initialNumCnf;
BigDecimal taraPed = internalTaraPed != null ? internalTaraPed : BigDecimal.ZERO;
this.internalPesoCollo = UtilityBigDecimal.divide(this.internalPesoLordo.subtract(taraPed), internalNumCnf).subtract(internalTaraCol);
this.internalPesoNetto = UtilityBigDecimal.multiply(this.internalNumCnf, internalPesoCollo);
} else {
this.internalPesoCollo = this.initialPesoCollo;
this.internalPesoNetto = UtilityBigDecimal.multiply(this.internalNumCnf, internalPesoCollo);
}
this.mListener.onDataChanged();
}
public DialogInputLUProdViewModel setInternalTipoPed(MtbTCol internalTipoPed) {
this.internalTipoPed = internalTipoPed;
return this;
}
public DialogInputLUProdViewModel setInternalLineaProd(JtbFasi internalLineaProd) {
this.internalLineaProd = internalLineaProd;
return this;
}
private BigDecimal calcPesoLordo() {
BigDecimal taraPed = internalTaraPed != null ? internalTaraPed : BigDecimal.ZERO;
return UtilityBigDecimal.multiply(this.internalNumCnf, this.internalPesoCollo.add(internalTaraCol)).add(taraPed);
}
public boolean validate() {
if (this.internalNumCnf == null || UtilityBigDecimal.equalsOrLowerThan(this.internalNumCnf, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidNumCnfQuantityException());
return false;
} else if (this.internalPesoLordo == null || UtilityBigDecimal.equalsOrLowerThan(this.internalPesoLordo, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidGrossWeightQuantityException());
return false;
} else if(this.internalLineaProd == null) {
this.mListener.onError(new InvalidProductionLineException());
return false;
}
return true;
}
public DialogInputLUProdResultDTO getResult() {
return new DialogInputLUProdResultDTO()
.setNumCnf(this.internalNumCnf)
.setPesoCollo(this.internalPesoCollo)
.setPesoNetto(this.internalPesoNetto)
.setTaraPed(this.internalTaraPed)
.setTaraCol(this.internalTaraCol)
.setPesoLordo(this.internalPesoLordo)
.setMtbTCol(this.internalTipoPed)
.setJtbFasi(this.internalLineaProd);
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public interface Listener extends ILoadingListener {
void onDataChanged();
void onError(Exception ex);
}
}

View File

@ -0,0 +1,34 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter;
import android.content.Context;
import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import java.util.List;
import it.integry.integrywmsnative.core.model.JtbFasi;
public class DialogInputLULineeProdAdapter extends ArrayAdapter<DialogInputLULineeProdListModel> {
private final List<DialogInputLULineeProdListModel> mDataset;
public DialogInputLULineeProdAdapter(@NonNull Context context, int resource, @NonNull List<JtbFasi> objects) {
super(context, resource);
this.mDataset = Stream.of(objects).map(x -> new DialogInputLULineeProdListModel()
.setOriginalModel(x))
.toList();
addAll(mDataset);
}
public List<DialogInputLULineeProdListModel> getDataset() {
return this.mDataset;
}
public JtbFasi getOriginalModelItem(int position) {
return mDataset.get(position).getOriginalModel();
}
}

View File

@ -0,0 +1,22 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter;
import it.integry.integrywmsnative.core.model.JtbFasi;
public class DialogInputLULineeProdListModel {
private JtbFasi originalModel;
public JtbFasi getOriginalModel() {
return originalModel;
}
public DialogInputLULineeProdListModel setOriginalModel(JtbFasi originalModel) {
this.originalModel = originalModel;
return this;
}
@Override
public String toString() {
return originalModel.getCodJfas();
}
}

View File

@ -0,0 +1,35 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter;
import android.content.Context;
import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbTCol;
public class DialogInputLUProdTipoColloAdapter extends ArrayAdapter<DialogInputLUProdTipoColloListModel> {
private final List<DialogInputLUProdTipoColloListModel> mDataset;
public DialogInputLUProdTipoColloAdapter(@NonNull Context context, int resource, @NonNull List<MtbTCol> objects) {
super(context, resource);
this.mDataset = Stream.of(objects).map(x -> new DialogInputLUProdTipoColloListModel()
.setOriginalModel(x))
.toList();
addAll(mDataset);
}
public List<DialogInputLUProdTipoColloListModel> getDataset() {
return this.mDataset;
}
public MtbTCol getOriginalModelItem(int position) {
return mDataset.get(position).getOriginalModel();
}
}

View File

@ -0,0 +1,25 @@
package it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter;
import org.jetbrains.annotations.NotNull;
import it.integry.integrywmsnative.core.model.MtbTCol;
public class DialogInputLUProdTipoColloListModel {
private MtbTCol originalModel;
public MtbTCol getOriginalModel() {
return originalModel;
}
public DialogInputLUProdTipoColloListModel setOriginalModel(MtbTCol originalModel) {
this.originalModel = originalModel;
return this;
}
@NotNull
@Override
public String toString() {
return originalModel.getCodTcol() + " - " + originalModel.getDescrizione();
}
}

View File

@ -5,7 +5,6 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import androidx.databinding.DataBindingUtil;
@ -14,12 +13,10 @@ import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
@ -96,7 +93,7 @@ public class DialogInputPeso {
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
MagazzinoRESTConsumer.getTipiCollo(codTcols -> {
MagazzinoRESTConsumer.getTipiColloStatic(codTcols -> {
this.codTcolList = codTcols;
List<String> codTcolDescriptions = Stream.of(codTcols)

View File

@ -3,6 +3,8 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.Html;
import android.text.InputType;
@ -135,6 +137,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
mBindings.inputQtaTotText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
}
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return mBindings.getRoot();
}
@ -362,6 +365,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public void onError(Exception ex) {
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");;
.show(getActivity().getSupportFragmentManager(), "tag");
}
}

View File

@ -15,10 +15,10 @@ import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidExpireDateException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidQtaCnfQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidQuantityException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidExpireDateException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidQtaCnfQuantityException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowNumCnfAvailableQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowNumCnfOrderedQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQtaTotAvailableQuantityException;

View File

@ -0,0 +1,6 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/>
<path android:fillColor="@android:color/white" android:pathData="M12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM11,16H9V8h2V16zM15,16h-2V8h2V16z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M9,16h2L11,8L9,8v8zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM13,16h2L15,8h-2v8z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM9.5,16.5v-9l7,4.5L9.5,16.5z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M10,16.5l6,-4.5 -6,-4.5v9zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- View background color -->
<solid
android:color="@color/blue_100" >
</solid>
<!-- View border color and width -->
<stroke
android:width="1dp"
android:color="@color/blue_800" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="4dp" >
</corners>
</shape>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- View background color -->
<solid
android:color="@color/green_100" >
</solid>
<!-- View border color and width -->
<stroke
android:width="1dp"
android:color="@color/green_800" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="4dp" >
</corners>
</shape>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- View background color -->
<solid
android:color="@color/yellow_100" >
</solid>
<!-- View border color and width -->
<stroke
android:width="1dp"
android:color="@color/yellow_800" >
</stroke>
<!-- The radius makes the corners rounded -->
<corners
android:radius="4dp" >
</corners>
</shape>

View File

@ -0,0 +1,366 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="androidx.core.content.ContextCompat"/>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="it.integry.integrywmsnative.R" />
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView" />
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minWidth="550dp"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/reset_values"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/ic_erase_96"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.resetValues()}"
android:tint="@android:color/white"/>
</androidx.appcompat.widget.Toolbar>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Dialog.DialogTitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="@{viewmodel.mtbAart.codMart}"
android:textColor="@color/colorPrimary"
tools:text="COD MART (Partita mag)" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:singleLine="false"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1">
<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"
android:layout_weight="@{view.enabledLineeProd ? 0.34f : 1f}"
android:hint="@string/lu_type"
android:paddingEnd="2dp"
tools:layout_weight="0.34">
<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"
android:singleLine="true"
app:binding="@{view.selectedMtbTcol}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_cod_jfas"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_weight="0.66"
android:hint="@string/production_line"
android:paddingStart="2dp"
app:visibility="@{view.enabledLineeProd}">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown_cod_jfas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:nextFocusForward="@id/input_num_cnf_text"
android:singleLine="true"
app:binding="@{view.selectedLineaProd}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_num_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledNumCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_num_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledNumCnf}"
android:hint="@string/pcks_x_ped"
android:imeOptions="actionDone"
android:inputType="number"
app:binding="@{view.currentNumCnf}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledQtaCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledQtaCnf ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledQtaCnf}"
android:hint="@string/kg_x_pck"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
app:binding="@{view.currentPesoCollo}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_tot_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false"
android:imeOptions="actionDone">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_tot_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledQtaTot ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledQtaTot}"
android:hint="@string/net_weight"
android:inputType="number"
app:binding="@{view.currentPesoNetto}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_tara_ped_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledTaraPed}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_tara_ped_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledTaraPed ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledTaraPed}"
android:hint="@string/tare_lu"
android:imeOptions="actionDone"
android:inputType="number"
app:binding="@{view.currentTaraPed}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_tara_col_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledTaraCol}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_tara_col_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledTaraCol ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledTaraCol}"
android:hint="@string/tare_pckg"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
app:binding="@{view.currentTaraCol}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_peso_lordo_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledPesoLordo}"
android:focusableInTouchMode="false"
android:imeOptions="actionDone"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_peso_lordo_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/gross_weight"
android:inputType="number"
app:binding="@{view.currentPesoLordo}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:weightSum="1">
<com.google.android.material.button.MaterialButton
android:id="@+id/abort_btn"
style="@style/Button.DangerFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:layout_weight="0.4"
android:onClick="@{() -> view.dismiss()}"
android:paddingEnd="3dp"
android:text="@string/abort"
app:icon="@drawable/ic_close_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/save_btn"
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="0dp"
android:layout_weight="0.45"
android:onClick="@{() -> view.save()}"
android:paddingEnd="3dp"
android:text="@string/confirm"
app:icon="@drawable/ic_save_24"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,587 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2ViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View" />
</data>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minWidth="550dp"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
</androidx.appcompat.widget.Toolbar>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Dialog.DialogTitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="@{viewmodel.mtbAart.codMart}"
android:textColor="@color/colorPrimary"
tools:text="COD MART (Partita mag)" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Dialog.DialogSubTitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="@{viewmodel.mtbAart.diacod}"
android:textColor="@color/red_600"
android:visibility="@{UtilityString.isNullOrEmpty(viewmodel.mtbAart.diacod) ? View.GONE : View.VISIBLE}"
tools:text="DIACOD" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:singleLine="false"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{viewmodel.totalNumCnfOrd != null || viewmodel.totalQtaOrd != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/qta_ord_panel"
android:text="@string/total_ordered"
android:textColor="@android:color/black" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/qta_ord_panel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalNumCnfOrd)}"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="@string/unt_mis_col"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalQtaOrd)}"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@{viewmodel.mtbAart.untMis}"
android:textColor="@android:color/black"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="2dp"
android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner"
android:backgroundTint="@color/green_600"
android:orientation="vertical"
android:padding="8dp"
android:visibility="@{viewmodel.totalNumCnfToBeTaken != null || viewmodel.totalQtaToBeTaken != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/to_be_taken"
android:textColor="@android:color/white" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalNumCnfToBeTaken)}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="@string/unt_mis_col"
android:textColor="@android:color/white"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalQtaToBeTaken)}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@{viewmodel.mtbAart.untMis}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@android:color/white"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="2dp"
android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner"
android:backgroundTint="@color/colorPrimary"
android:orientation="vertical"
android:padding="8dp"
android:visibility="@{viewmodel.totalNumCnfAvailable != null || viewmodel.totalQtaAvailable != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/total_available"
android:textColor="@android:color/white" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalNumCnfAvailable)}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="@string/unt_mis_col"
android:textColor="@android:color/white"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(viewmodel.totalQtaAvailable)}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@{viewmodel.mtbAart.untMis}"
android:textColor="@android:color/white"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@android:color/white"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@color/gray_400" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="2">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_partita_mag_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}"
android:enabled="@{view.enabledChangePartitaMag}"
android:paddingEnd="4dp"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_partita_mag_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/batch_lot"
android:imeOptions="actionDone"
android:inputType="text"
app:binding="@{view.currentPartitaMag}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_data_scad_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledChangePartitaMag}"
android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_data_scad_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="false"
android:hint="@string/expire_date"
android:inputType="text"
app:binding="@{view.currentDataScad}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_num_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledNumCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_num_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/num_pcks"
android:imeOptions="actionDone"
android:inputType="number"
app:binding="@{view.currentNumCnf}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledQtaCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp"
android:visibility="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? View.VISIBLE : View.GONE}">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/qty_x_pck"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
app:binding="@{view.currentQtaCnf}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_tot_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false"
android:imeOptions="actionDone"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_tot_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/tot_qty"
android:inputType="numberDecimal"
app:binding="@{view.currentQtaTot}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:weightSum="1">
<com.google.android.material.button.MaterialButton
android:id="@+id/close_lu_btn"
style="@style/Button.PrimaryOutline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="4dp"
android:layout_weight="0.4"
android:onClick="@{() -> view.saveAndCloseLU()}"
android:text="@string/action_close_ul"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/colorPrimary"
app:visibility="@{view.enabledLUCloseButton}" />
<com.google.android.material.button.MaterialButton
android:id="@+id/abort_btn"
style="@style/Button.DangerFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:layout_weight="0.3"
android:onClick="@{() -> view.dismiss()}"
android:paddingEnd="3dp"
app:icon="@drawable/ic_close_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/save_btn"
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="0dp"
android:layout_weight="0.3"
android:onClick="@{() -> view.save()}"
android:paddingEnd="3dp"
app:icon="@drawable/ic_save_24"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -7,6 +7,7 @@
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="android.view.View" />
<variable
name="view"
@ -158,7 +159,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.50" />
app:layout_constraintGuide_percent="@{!view.enabledEditButton ? 0f : (!view.enabledDeleteButton ? 1f : 0.50f)}"
tools:layout_constraintGuide_percent="0.5f"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
@ -167,6 +169,8 @@
android:orientation="vertical"
android:clickable="true"
android:focusable="true"
android:enabled="false"
app:visibility="@{view.enabledEditButton}"
app:singleClick="@{() -> view.editMtbColr()}"
app:layout_constraintEnd_toStartOf="@id/guideline_action"
app:layout_constraintStart_toStartOf="parent"
@ -181,13 +185,15 @@
android:scaleX="1.5"
android:scaleY="1.5"
android:src="@drawable/ic_edit_24dp"
android:tint="@color/green_600" />
android:tint="@color/green_600"
android:duplicateParentState="true"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edit" />
android:text="@string/edit"
android:duplicateParentState="true" />
</androidx.appcompat.widget.LinearLayoutCompat>
@ -198,6 +204,7 @@
android:orientation="vertical"
android:clickable="true"
android:focusable="true"
app:visibility="@{view.enabledDeleteButton ? View.VISIBLE : View.GONE}"
app:singleClick="@{() -> view.deleteMtbColr()}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/guideline_action"

View File

@ -391,7 +391,8 @@
android:layout_height="match_parent"
android:background="#99000000"
android:visibility="gone"
singleClick="@{() -> view.collapseMtbColrActionSheet()}"/>
android:clickable="true"
android:focusable="true"/>
<it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView
android:id="@+id/bottom_sheet__mtb_colr_edit"

View File

@ -95,7 +95,7 @@
android:textSize="14sp"
android:text="@{`Preparato da: ` + mtbColt.preparatoDa}"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColt.preparatoDa) ? View.INVISIBLE : View.VISIBLE}"
tools:text="Preparato da: Lisa Sportelli" />
tools:text="Preparato da: Utente" />
</LinearLayout>
</LinearLayout>

View File

@ -0,0 +1,353 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@android:color/white">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/reset_values"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/ic_erase_96"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.resetValues()}"
android:tint="@android:color/white"/>
</androidx.appcompat.widget.Toolbar>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Dialog.DialogTitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text="@{viewmodel.mtbAart.codMart}"
android:textColor="@color/colorPrimary"
tools:text="COD MART (Partita mag)" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:singleLine="false"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="1">
<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"
android:layout_weight="@{view.enabledLineeProd ? 0.34f : 1f}"
android:hint="@string/lu_type"
tools:layout_weight="0.34"
android:paddingEnd="2dp">
<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/input_cod_jfas"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:visibility="@{view.enabledLineeProd}"
android:layout_weight="0.66"
android:hint="@string/production_line"
android:paddingStart="2dp">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown_cod_jfas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:imeOptions="actionNext"
android:inputType="textNoSuggestions"
android:nextFocusForward="@id/input_num_cnf_text"
app:binding="@{view.selectedLineaProd}"
android:singleLine="true" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_num_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="@{view.enabledNumCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp"
android:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_num_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/pcks_x_ped"
android:enabled="@{view.enabledNumCnf}"
android:imeOptions="actionDone"
android:inputType="number"
app:binding="@{view.currentNumCnf}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_cnf_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledQtaCnf}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledQtaCnf ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledQtaCnf}"
android:hint="@string/kg_x_pck"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
app:binding="@{view.currentPesoCollo}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_qta_tot_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false"
android:imeOptions="actionDone">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_tot_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledQtaTot ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledQtaTot}"
android:hint="@string/net_weight"
android:inputType="number"
app:binding="@{view.currentPesoNetto}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_tara_ped_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledTaraPed}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_tara_ped_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledTaraPed ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledTaraPed}"
android:hint="@string/tare_lu"
android:imeOptions="actionDone"
android:inputType="number"
app:binding="@{view.currentTaraPed}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_tara_col_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledTaraCol}"
android:focusableInTouchMode="false"
android:paddingEnd="4dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_tara_col_text"
style="@style/TextInputEditText.OutlinePrimary"
android:textColor="@{ContextCompat.getColor(context, view.enabledTaraCol ? android.R.color.black : R.color.gray_400)}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{view.enabledTaraCol}"
android:hint="@string/tare_pckg"
android:imeOptions="actionDone"
android:inputType="numberDecimal"
app:binding="@{view.currentTaraCol}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_peso_lordo_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{view.enabledPesoLordo}"
android:focusableInTouchMode="false"
android:imeOptions="actionDone"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_peso_lordo_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/gross_weight"
android:inputType="number"
app:binding="@{view.currentPesoLordo}" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:weightSum="1">
<com.google.android.material.button.MaterialButton
android:id="@+id/abort_btn"
style="@style/Button.DangerFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:layout_weight="0.4"
android:onClick="@{() -> view.dismiss()}"
android:paddingEnd="3dp"
android:text="@string/abort"
app:icon="@drawable/ic_close_24dp"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/save_btn"
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginEnd="0dp"
android:layout_weight="0.45"
android:onClick="@{() -> view.save()}"
android:paddingEnd="3dp"
android:text="@string/confirm"
app:icon="@drawable/ic_save_24"
app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@ -6,9 +6,7 @@
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.utility.UtilityBigDecimal" />
<import type="android.view.View" />

View File

@ -331,7 +331,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#99000000"
android:visibility="gone" />
android:visibility="gone"
android:clickable="true"
android:focusable="true" />
<it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView
android:id="@+id/bottom_sheet__mtb_colr_edit"

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