diff --git a/app/build.gradle b/app/build.gradle index ced10526..10937b3b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 197 - def appVersionName = '1.16.15' + def appVersionCode = 198 + def appVersionName = '1.16.16' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 5570812b..01231fa9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.class_router.ClassRouter; import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration; import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration; import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.data_store.db.AppDatabase; import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; @@ -42,6 +43,7 @@ import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.update.UpdatesManager; +import it.integry.integrywmsnative.core.utility.UtilityContext; import it.integry.integrywmsnative.core.utility.UtilitySettings; import it.integry.integrywmsnative.databinding.ActivityMainBinding; import it.integry.integrywmsnative.gest.login.LoginActivity; @@ -59,6 +61,9 @@ public class MainActivity extends BaseActivity @Inject AppDatabase mAppDatabase; + @Inject + ColliDataRecoverService mColliDataRecoverService; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -68,10 +73,13 @@ public class MainActivity extends BaseActivity .create() .inject(this); + mColliDataRecoverService.init(this); + mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); setContentView(mBinding.getRoot()); UpdatesManager.init(this); + UtilityContext.initMainActivity(this); setSupportActionBar(mBinding.appBarMain.toolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 4c9015d0..a502c910 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -27,6 +27,10 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent; import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; 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; @@ -44,6 +48,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule; RettificaGiacenzeModule.class, SpedizioneModule.class, AccettazionePickingModule.class, + UltimeConsegneClienteModule.class, + UltimiArriviFornitoreModule.class, PickingResiModule.class, OrdiniUscitaElencoModule.class, DialogInputQuantityV2Module.class, @@ -60,6 +66,8 @@ public interface MainApplicationComponent { RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent(); SpedizioneComponent.Factory spedizioneComponent(); AccettazionePickingComponent.Factory accettazionePickingComponent(); + UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent(); + UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent(); PickingResiComponent.Factory pickingResiComponent(); OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent(); DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component(); diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index e57d8cf2..e15b89e4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -38,7 +38,7 @@ public class MainApplicationModule { @Provides @Singleton ColliDataRecoverService provideColliDataRecoverService() { - return new ColliDataRecoverService(mContext); + return new ColliDataRecoverService(); } @Provides diff --git a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java index da5608bf..d25bb38d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java @@ -6,22 +6,21 @@ import android.content.pm.PackageManager; import android.os.Bundle; import android.text.SpannableString; import android.view.LayoutInflater; -import android.widget.TextView; + +import androidx.databinding.DataBindingUtil; import java.util.ArrayList; import java.util.List; -import androidx.appcompat.app.AppCompatActivity; -import androidx.databinding.DataBindingUtil; - import it.integry.integrywmsnative.core.context.MainContext; import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.PermissionsHelper; +import it.integry.integrywmsnative.core.utility.UtilityContext; import it.integry.integrywmsnative.databinding.ActivitySplashBinding; import it.integry.integrywmsnative.gest.login.LoginActivity; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class SplashActivity extends BaseActivity { @@ -39,6 +38,8 @@ public class SplashActivity extends BaseActivity { mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_splash, null, false); setContentView(mBinding.getRoot()); + UtilityContext.initMainActivity(this); + initAppVersion(); initPermissions(this::init); @@ -49,10 +50,10 @@ public class SplashActivity extends BaseActivity { onComplete.run(); }, permanentlyDenied -> { if(permanentlyDenied) { - DialogSimpleMessageHelper.makeErrorDialog(this, - new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> { + DialogSimpleMessageView.makeErrorDialog(new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> { this.finish(); - }).show(); + }) + .show(getSupportFragmentManager(), "tag"); } else { initPermissions(onComplete); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java index 8f752c4d..3498373e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java @@ -9,7 +9,6 @@ import com.orhanobut.logger.Logger; import javax.inject.Inject; import it.integry.integrywmsnative.BuildConfig; -import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; import it.integry.integrywmsnative.core.data_store.db.AppDatabase; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.Stash; @@ -41,8 +40,6 @@ public class AppContext { this.initCrashlytics(); this.initLogger(); - - this.initRecoverColli(); } @@ -77,9 +74,5 @@ public class AppContext { Logger.addLogAdapter(new AndroidLogAdapter()); } - private void initRecoverColli() { - ColliDataRecover.init(mContext); - } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java index 8d425f15..63b81354 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/MainContext.java @@ -1,21 +1,25 @@ package it.integry.integrywmsnative.core.context; import android.content.Context; +import android.text.Html; import android.text.SpannableString; +import android.text.Spanned; import androidx.appcompat.app.AppCompatActivity; import java.lang.reflect.Method; +import java.net.ConnectException; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.class_router.ClassRouter; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilitySettings; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class MainContext { @@ -37,6 +41,8 @@ public class MainContext { this.initReflections(); this.initServerStatusChecker(); + + ColliDataRecover.init(mContext); } @@ -46,11 +52,23 @@ public class MainContext { private void initDBData(Runnable onComplete) { SettingsManager.loadDBVariables(onComplete, ex -> { - DialogSimpleMessageHelper.makeErrorDialog(mContext, - new SpannableString(ex.getMessage()), null, mContext::finish, R.string.logout, () -> { + + Spanned message = null; + + if (ex.getCause() != null && ex.getCause() instanceof ConnectException) { + message = Html.fromHtml("Impossibile collegarsi all'host " + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + ". Riprovare più tardi."); + } else if (ex.getMessage().startsWith("Status 404:")) { + message = Html.fromHtml("Errore 404. Non è stato possibile soddisfare la richiesta sull'host " + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + ". Riprovare più tardi."); + } else { + message = new SpannableString(ex.getMessage()); + } + + DialogSimpleMessageView.makeErrorDialog( + message, null, mContext::finish, R.string.logout, () -> { UtilitySettings.logout(); MainApplication.exit(); - }).show(); + }) + .show(mContext.getSupportFragmentManager(), "tag"); } ); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java index ea14d912..fadeef43 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java @@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_recover; import android.content.Context; +import androidx.appcompat.app.AppCompatActivity; + import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.google.android.gms.common.util.IOUtils; @@ -107,11 +109,11 @@ public class ColliDataRecover { } } - private static Context mContext; + private static AppCompatActivity mContext; private static List mtbColtsSessions = new ArrayList<>(); - public static void init(Context context) { + public static void init(AppCompatActivity context) { mContext = context; if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java index 6d14cd1c..ca313714 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecoverService.java @@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_recover; import android.content.Context; +import androidx.appcompat.app.AppCompatActivity; + import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.google.android.gms.common.util.IOUtils; @@ -28,20 +30,21 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; public class ColliDataRecoverService { - private final Context mContext; + private AppCompatActivity mContext; private List mtbColtsSessions = new ArrayList<>(); @Inject - public ColliDataRecoverService(Context context) { - this.mContext = context; + public ColliDataRecoverService() { + } + + public void init(AppCompatActivity appCompatActivity) { + this.mContext = appCompatActivity; if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) { loadLocalFile(); } } - - public boolean thereIsAnExistantSession() { return mtbColtsSessions.size() > 0; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/view/ExtendedSectionedRecyclerView.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/view/ExtendedSectionedRecyclerView.java new file mode 100644 index 00000000..a4aeb37c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/view/ExtendedSectionedRecyclerView.java @@ -0,0 +1,56 @@ +package it.integry.integrywmsnative.core.expansion.view; + +import android.view.View; + +import androidx.databinding.ObservableArrayList; +import androidx.databinding.ObservableList; +import androidx.recyclerview.widget.RecyclerView; + +import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; + +import java.util.ArrayList; + +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; + +public abstract class ExtendedSectionedRecyclerView + extends SectionedRecyclerViewAdapter { + + protected ArrayList mDataset = new ArrayList<>(); + private View mEmptyView; + + public ExtendedSectionedRecyclerView(ObservableArrayList myDataset) { + mDataset.addAll(myDataset); + + myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() { + @Override + public void onChanged(ObservableList sender) { + mDataset.clear(); + mDataset.addAll(sender); + notifyDataSetChanged(); + notifyDataChanged(); + checkIfEmpty(); + } + }); + + checkIfEmpty(); + } + + public ExtendedSectionedRecyclerView setEmptyView(View emptyView) { + this.mEmptyView = emptyView; + this.checkIfEmpty(); + return this; + } + + @Override + public int getItemSize() { + return this.mDataset.size(); + } + + private void checkIfEmpty() { + if (mEmptyView != null) { + final boolean emptyViewVisible = getItemSize() == 0; + mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index 052908a4..173231f7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -549,7 +549,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { mtbColtToSaveClone.setMtbColr(new ObservableArrayList<>()); if (posizione == null) mtbColtToSaveClone.setPosizione(null); - else mtbColtToSaveClone.setPosizione(posizione.getPosizione()); + else mtbColtToSaveClone + .setPosizione(posizione.getPosizione()) + .setCodMdep(posizione.getCodMdep()); ColliMagazzinoRESTConsumer.saveColloStatic(mtbColtToSaveClone, mtbColt -> { if (onComplete != null) onComplete.run(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java index d5fda18d..9964f933 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java @@ -8,12 +8,11 @@ import java.util.List; import javax.inject.Singleton; -import it.integry.integrywmsnative.core.rest.RESTBuilder; -import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; -import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.utility.UtilityDB; import retrofit2.Call; import retrofit2.Callback; @@ -28,8 +27,30 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{ this.mSystemRESTConsumer = systemRESTConsumer; } + public void getPosizioneFromString(String posizione, RunnableArgs onComplete, RunnableArgs onFailed) { + String sql = "SELECT TOP 1 mtb_depo_posizioni.*," + + " CASE WHEN jtb_fasi.cod_jfas IS NULL THEN 'N' ELSE 'S' END AS flag_linea_produzione " + + " FROM mtb_depo_posizioni " + + " LEFT OUTER JOIN jtb_fasi " + + " ON mtb_depo_posizioni.posizione = jtb_fasi.cod_jfas " + + " WHERE posizione = " + UtilityDB.valueToString(posizione); + + SystemRESTConsumer.processSqlStatic(sql, MtbDepoPosizione.class, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbDepoPosizione value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + public static void getAvailablePosizioni(RunnableArgs> onComplete, RunnableArgs onFailed) { - String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); +// String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + String codMdep = null; PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class); posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback>>() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 080ec666..e639a508 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -33,6 +33,7 @@ public class DBSettingsModel { private boolean flagForceAllToColli; private boolean flagSpedizioneEnableManualPick; private boolean flagSpedizioneCanSelectMultipleOrders; + private boolean flagSpedizioneUseQtaOrd; private String produzioneDefaultCodAnag; private String reportNameSpedizionChiudiOrdine; @@ -234,6 +235,15 @@ public class DBSettingsModel { return this; } + public boolean isFlagSpedizioneUseQtaOrd() { + return flagSpedizioneUseQtaOrd; + } + + public DBSettingsModel setFlagSpedizioneUseQtaOrd(boolean flagSpedizioneUseQtaOrd) { + this.flagSpedizioneUseQtaOrd = flagSpedizioneUseQtaOrd; + return this; + } + public String getProduzioneDefaultCodAnag() { return produzioneDefaultCodAnag; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 0f4f626f..7c6472f6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -258,6 +258,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SPEDIZIONE") .setKeySection("REPORT_PACKING_LIST")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("FLAG_USE_QTA_ORD")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -281,6 +285,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class)); + dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); if(onComplete != null) onComplete.run(); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index 7d6c8bc4..1148410b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -33,19 +33,24 @@ public class UtilityBarcode { } public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { + return isEtichettaPosizione(barcodeScanDTO, true); + } + + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, boolean enableCheckCodMdep) { + String currentCodMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + String barcode = barcodeScanDTO.getStringValue(); boolean isPosizione = false; if(SettingsManager.iDB().getAvailablePosizioni() != null) { Stream tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) - .filter(x -> x.getPosizione().equalsIgnoreCase(barcode)); + .filter(x -> x.getPosizione().equalsIgnoreCase(barcode) && (!enableCheckCodMdep || currentCodMdep.equalsIgnoreCase(x.getCodMdep()))); if(tmpStream.count() > 0){ isPosizione = true; } } - return isPosizione; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityContext.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityContext.java index f1e73285..a7cc3a5c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityContext.java @@ -2,17 +2,28 @@ package it.integry.integrywmsnative.core.utility; import android.content.Context; +import androidx.appcompat.app.AppCompatActivity; + public class UtilityContext { private static Context mApplicationContext; + private static AppCompatActivity mMainActivity; public static void initApplicationContext(Context context) { mApplicationContext = context; } + public static void initMainActivity(AppCompatActivity mainActivity) { + mMainActivity = mainActivity; + } + public static Context getApplicationContext() { return mApplicationContext; } + public static AppCompatActivity getMainActivity() { + return mMainActivity; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java index 97b0d387..7a602ae4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java @@ -4,12 +4,15 @@ import android.app.Dialog; import android.content.Context; import android.text.SpannableString; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + import com.google.firebase.crashlytics.FirebaseCrashlytics; import com.orhanobut.logger.Logger; import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.rest.CommonRESTException; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class UtilityExceptions { @@ -43,8 +46,17 @@ public class UtilityExceptions { if(ex.getCause() != null) errorMessage += "
" + ex.getCause().getMessage(); } - if(context != null) { - DialogSimpleMessageHelper.makeErrorDialog(context, new SpannableString(errorMessage), null, null).show(); + FragmentManager fm = null; + + if(context != null && context instanceof FragmentActivity) { + fm = ((FragmentActivity) context).getSupportFragmentManager(); + } else if(UtilityContext.getMainActivity() != null) { + fm = UtilityContext.getMainActivity().getSupportFragmentManager(); + } + + if(fm != null) { + DialogSimpleMessageView.makeErrorDialog(new SpannableString(errorMessage), null, null) + .show(fm, "tag"); } if(!BuildConfig.DEBUG) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index 21b1f0c0..cbbeea5b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -68,11 +68,11 @@ public class UtilityString { } public static Spanned formatHtmlString(String format, String... params){ - return Html.fromHtml(String.format(format,params)); + return Html.fromHtml(String.format(format, (Object[]) params)); } public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){ - return Html.fromHtml(String.format(UtilityResources.getString(stringId),params)); + return Html.fromHtml(String.format(UtilityResources.getString(stringId), (Object[]) params)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index 49744814..24c56ab8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -41,7 +41,7 @@ import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity; import it.integry.integrywmsnative.ui.ElevatedToolbar; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IScrollableFragment { @@ -187,8 +187,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag .count(); - DialogSimpleMessageHelper.makeInfoDialog(getActivity(), - getText(R.string.orders).toString(), + DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter) + "

" + "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)), @@ -203,14 +202,17 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag myIntent.putExtra("keySitArts", cacheSitArtItemID); getActivity().startActivity(myIntent); - }).show(); + }).show(getActivity().getSupportFragmentManager(), "tag"); }, ex -> { progress.dismiss(); String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); if(errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage(); - DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + + DialogSimpleMessageView + .makeErrorDialog(new SpannableString(errorMessage), null, null) + .show(getActivity().getSupportFragmentManager(), "tag"); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 77621f8e..cb91bac0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; @@ -245,7 +245,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { numCnfEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getNumCnf) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -254,14 +254,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc qta col BigDecimal qtaEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getQtaCol) .reduce(BigDecimal.ZERO, BigDecimal::add); } - if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { accettazioneListModel.setQtaEvasa(numCnfEvasa); accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere()); @@ -308,7 +307,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { numCnfEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getNumCnf) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -317,14 +316,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc qta col BigDecimal qtaEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getQtaCol) .reduce(BigDecimal.ZERO, BigDecimal::add); } - if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { accettazioneListModel.setQtaEvasa(numCnfEvasa); accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere()); @@ -371,7 +369,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { numCnfEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getNumCnf) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -380,7 +378,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc qta col BigDecimal qtaEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getQtaCol) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -431,7 +429,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { numCnfEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getNumCnf) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -440,7 +438,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta //Calc qta col BigDecimal qtaEvasa = BigDecimal.ZERO; - if(x.getWithdrawMtbColrs().size() > 0) { + if (x.getWithdrawMtbColrs().size() > 0) { qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) .map(MtbColr::getQtaCol) .reduce(BigDecimal.ZERO, BigDecimal::add); @@ -535,7 +533,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta public void startListaBancaliRegistratiActivity(ArrayList mtbColts) { Intent myIntent = ListaBancaliActivity.createIntent(this, - Stream.of(mtbColts).map(x -> (MtbColt)x).toList(), + Stream.of(mtbColts).map(x -> (MtbColt) x).toList(), input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(), PrinterRESTConsumer.Type.SECONDARIA, ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO)); @@ -546,7 +544,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta public void onLUSuccessullyPrinted() { Resources res = getResources(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); - DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) + .show(getSupportFragmentManager(), "tag"); } @Override @@ -556,13 +556,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void onLUPrintError(Exception ex, Runnable onComplete) { this.closeProgress(); - DialogSimpleMessageHelper.makeErrorDialog( - this, + DialogSimpleMessageView.makeErrorDialog( new SpannableString(ex.getMessage()), null, null, R.string.button_ignore_print, - onComplete).show(); + onComplete) + .show(getSupportFragmentManager(), "tag"); } @Override @@ -599,7 +599,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta public void onError(Exception ex) { this.closeProgress(); - if(ex instanceof InvalidPesoKGException) { + if (ex instanceof InvalidPesoKGException) { UtilityToast.showToast(ex.getMessage()); } else { UtilityExceptions.defaultException(this, ex, mCurrentProgress); @@ -664,12 +664,11 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageHelper.makeWarningDialog(this, - new SpannableString(text), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false) - ).show(); + ).show(getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index 9a238cc1..41097b74 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -98,10 +98,13 @@ public class AccettazionePickingViewModel { public void init(List orders, List sitArts, String codMdep) { this.mOrders = orders; - this.mSitArts = sitArts; this.mDefaultCodMdep = codMdep; - getEmptyPickingList(sitArts, pickingObjectList -> { + this.mSitArts = Stream.of(sitArts) + .filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) + .toList(); + + getEmptyPickingList(this.mSitArts, pickingObjectList -> { this.mPickingList.postValue(pickingObjectList); }); @@ -136,6 +139,7 @@ public class AccettazionePickingViewModel { } private void getEmptyPickingList(List sitArtOrdList, RunnableArgs> onComplete) { + List codMarts = Stream.of(sitArtOrdList) .map(SitArtOrdDTO::getCodMart) .toList(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java index 4cf28074..f4a5ab67 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java @@ -24,7 +24,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import static android.app.Activity.RESULT_OK; @@ -118,7 +118,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked Resources res = mContext.getResources(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); - DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) + .show(mContext.getSupportFragmentManager(), "tag"); }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); } catch (Exception ex) { @@ -128,7 +130,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked } else { progress.dismiss(); String errorMessage = "Nessuna stampante configurata"; - DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(errorMessage), null, null) + .show(mContext.getSupportFragmentManager(), "tag");; } }, ex -> { UtilityExceptions.defaultException(mContext, ex, progress); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java index 91b797c0..ff43799c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java @@ -28,7 +28,7 @@ import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.login.core.LoginHelper; import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; import it.integry.integrywmsnative.gest.login.dto.LoginDTO; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class LoginViewModel { @@ -192,22 +192,22 @@ public class LoginViewModel { private void onLoginFailed(final Spanned message){ mProgress.dismiss(); loginButtonEnabled.set(true); - mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog( - mActivity, + mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeErrorDialog( message, null, - null).show()); + null) + .show(mActivity.getSupportFragmentManager(), "tag")); } private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List availableProfiles){ mProgress.dismiss(); - mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeSuccessDialog( - mActivity, + mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog( title, message, null, - () -> showProfileDBSelectionDialog(host, port, availableProfiles)).show()); + () -> showProfileDBSelectionDialog(host, port, availableProfiles)) + .show(mActivity.getSupportFragmentManager(), "tag")); } private void showProfileDBSelectionDialog(final String host, final int port, final List availableProfiles){ diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index 72acdc52..52f687d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -7,8 +7,6 @@ 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.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; @@ -33,7 +31,6 @@ import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; -import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; @@ -53,9 +50,9 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaEl import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.ui.ElevatedToolbar; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, ILifecycleFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener { +public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener { public BindableBoolean fabVisible = new BindableBoolean(false); @@ -132,8 +129,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); + public void onStart() { + super.onStart(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol); @@ -141,6 +138,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF @Override public void onDestroy() { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } @@ -259,12 +258,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF .forEach(x -> x.getSelectedObservable().set(false)); } - @Override - public void onPreDestroy(Runnable onComplete) { - BarcodeManager.removeCallback(barcodeScannerIstanceID); - onComplete.run(); - } - @Override public void onCreateActionBar(AppCompatTextView titleText, Context context) { titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString()); @@ -278,7 +271,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF .toList(); this.mViewModel.loadPicking(selectedOrders); - } @@ -315,8 +307,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF int alreadyRegisteredUL = alreadyRegisteredMtbColts.size(); - DialogSimpleMessageHelper.makeInfoDialog(getActivity(), - getText(R.string.orders).toString(), + DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, orders.size()), orders.size()) + "
" + "" + codMarts.size() + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size()) @@ -324,7 +315,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF "" + alreadyRegisteredUL + " " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)), null, () -> SpedizioneActivity.startActivity(getActivity(), sitArts, orders, alreadyRegisteredMtbColts, mCurrentGestioneCol, mCurrentSegnoCol, MtbColr.Causale.DEFAULT, mDialogRowInfo) - ).show(); + ).show(getActivity().getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java index 8e2ec39d..ac86b7d6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java @@ -18,6 +18,7 @@ import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneExceptio import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoOrderFoundException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; @@ -282,10 +283,7 @@ public class OrdiniUscitaElencoViewModel { if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts); } - public interface Listener { - void onLoadingStarted(); - - void onLoadingEnded(); + public interface Listener extends ILoadingListener { void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java index bf6c709b..bad33b1e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java @@ -55,7 +55,7 @@ import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; @@ -268,12 +268,11 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageHelper.makeWarningDialog(getActivity(), - new SpannableString(text), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false) - ).show(); + ).show(getActivity().getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java index 782fb055..ecdaf0ae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java @@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityResources; @@ -49,9 +50,9 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; -import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener { @@ -179,9 +180,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag this.mBindings.mainList.setAdapter(pickingResiListAdapter); this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this)); - pickingResiListAdapter.setOnItemClicked(clickedItem -> { + pickingResiListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> { if (!noLUPresent.get()) { - this.mViewmodel.dispatchOrdineRow(clickedItem); + this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt); } }); } @@ -190,7 +191,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag private List convertDataModelToListModel(List dataList) { List pickingResiListModels = new ArrayList<>(); - Stream.of(dataList) + List tmpList = Stream.of(dataList) + .filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getQtaDoc(), BigDecimal.ZERO)) + .toList(); + + Stream.of(tmpList) .sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga()) .forEach(x -> { @@ -251,6 +256,10 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag }); } + public void removeListFilter() { + this.mViewmodel.resetMatchedRows(); + } + @Override public void onMtbColrEdit(MtbColr mtbColr) { this.mViewmodel.dispatchRowEdit(mtbColr); @@ -321,11 +330,23 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag this.openProgress(); onComplete.run(pickedQuantityDTO, shouldCloseLU); }, () -> { -// this.mViewmodel.resetMatchedRows(); + this.mViewmodel.resetMatchedRows(); }) .show(getSupportFragmentManager(), "tag"); } + @Override + public void onFilterApplied(String newValue) { + this.mBindings.filteredArtsInListExpandableLayout.expand(true); + this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : ""); + } + + @Override + public void onFilterRemoved() { + this.mBindings.filteredArtsInListExpandableLayout.collapse(true); + this.mBindings.descriptionFilterText.setText(""); + } + @Override public void onRowSaved() { FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); @@ -334,12 +355,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageHelper.makeWarningDialog(this, - new SpannableString(text), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false) - ).show(); + ).show(getSupportFragmentManager(), "tag"); } @Override @@ -362,7 +382,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag public void onLUSuccessullyPrinted() { Resources res = getResources(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); - DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) + .show(getSupportFragmentManager(), "tag"); } @Override @@ -373,13 +395,13 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag @Override public void onLUPrintError(Exception ex, Runnable onComplete) { this.closeProgress(); - DialogSimpleMessageHelper.makeErrorDialog( - this, + DialogSimpleMessageView.makeErrorDialog( new SpannableString(ex.getMessage()), null, null, R.string.button_ignore_print, - onComplete).show(); + onComplete) + .show(getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index 84cd3e22..4c7a3f64 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -14,7 +14,11 @@ import java.util.List; import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; +import it.integry.integrywmsnative.core.exception.InvalidLUException; +import it.integry.integrywmsnative.core.exception.NoArtsFoundException; +import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; @@ -25,6 +29,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; @@ -39,6 +44,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException; import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; public class PickingResiViewModel { @@ -229,23 +235,26 @@ public class PickingResiViewModel { private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) { this.mColliRegistrati.add(mtbColt); - Stream.of(this.mPickingList.getValue()) - .forEach(x -> { - List withdraws = x.getWithdrawRows(); + List tmpList = getPickingList().getValue(); - for (int k = 0; k < withdraws.size(); k++) { - MtbColr withdrawRow = withdraws.get(k); - x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol())); - } + for (int i = 0; i < tmpList.size(); i++) { + WithdrawableDtbDocr x = tmpList.get(i); + List withdraws = x.getWithdrawRows(); - x.getWithdrawRows().clear(); + for (int k = 0; k < withdraws.size(); k++) { + MtbColr withdrawRow = withdraws.get(k); + x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol())); + } - if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) { - this.mPickingList.getValue().remove(x); - } - }); + x.getWithdrawRows().clear(); - this.mPickingList.postValue(this.mPickingList.getValue()); + if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) { + tmpList.remove(x); + i--; + } + } + + this.mPickingList.postValue(tmpList); onComplete.run(); } @@ -259,41 +268,232 @@ public class PickingResiViewModel { //Se il collo non esiste allora lo creo associandolo a questa etichetta anonima //invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul //dell'etichetta anonima -// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete); + this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete); } else { -// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete); + this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete); } } else { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { //Cerco gli articoli presenti nell'ul dell'etichetta anonima -// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); } else { -// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete); + this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete); } } } - public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) { + private void processBarcodeNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.createNewLU( + null, + null, + () -> processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete)); + } + + + private void processBarcodeAlreadyOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) + this.executeEtichettaEan128(barcodeScanDTO, onComplete); + + + } else onComplete.run(); + } + + + private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> { + + if (mtbColt == null) { + + if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) { + this.sendError(new NotCurrentYearLUException()); + } else { + + this.createNewLU( + UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()), + CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete); + } + } else { + + this.createNewLU( + null, + null, + () -> searchArtFromUL(mtbColt, onComplete) + ); + } + + }, this::sendError); + } + + private void executeEtichettaLU(String SSCC, Runnable onComplete) { + mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + if (mtbColt.getSegno() != -1) { + searchArtFromUL(mtbColt, onComplete); + } else this.sendError(new InvalidLUException()); + } else { + this.sendError(new NoArtsFoundException()); + } + + }, this::sendError); + } + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + String barcodeProd = null; + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if (!UtilityString.isNullOrEmpty(ean128Model.Content)) + barcodeProd = ean128Model.Content; + + + if (!UtilityString.isNullOrEmpty(barcodeProd)) { + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + this.executeEtichettaLU(ean128Model.Sscc, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + onComplete.run(); + } + }, this::sendError); + } + + private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) { + + final List pickingList = mPickingList.getValue(); + final List matchPickingObject = new ArrayList<>(); + + + //Controllo se nel collo ho degli articoli che corrispondono per codice / taglia / colore / lotto + Stream.of(scannedUL.getMtbColr()) + .filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart())) + .forEach(x -> { + + for (WithdrawableDtbDocr pickingObject : pickingList) { + //Da verificare se il controllo per partita deve essere sempre effettuato + if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getCodMart()) && + UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getCodTagl()) && + UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol())) { + + if (!matchPickingObject.contains(pickingObject)) { + matchPickingObject.add(pickingObject); + } + + } + } + }); + + for (WithdrawableDtbDocr matchedObject : matchPickingObject) { + MtbColt cloneMtbColt = (MtbColt) scannedUL.clone(); + ObservableArrayList cloneMtbColrs = (ObservableArrayList) cloneMtbColt.getMtbColr().clone(); + + + Stream.of(cloneMtbColt.getMtbColr()) + .filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getCodMart()) && + UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getCodTagl()) && + UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol()))) + .forEach(cloneMtbColrs::remove); + + cloneMtbColt.setMtbColr(cloneMtbColrs); + + PickDataDTO tempPickData = new PickDataDTO() + .setSourceMtbColt(cloneMtbColt); + + matchedObject.setTempPickData(tempPickData); + } + + + this.loadMatchedRows(matchPickingObject); + onComplete.run(); + } + + + private void loadMatchedRows(List matchedRows) { + if (matchedRows == null || matchedRows.size() == 0) { + this.sendError(new NoArtsFoundException()); + } else if (matchedRows.size() == 1) { + WithdrawableDtbDocr matchedItem = matchedRows.get(0); + + if (matchedItem.getWithdrawRows() != null && matchedItem.getWithdrawRows().size() > 1) { + + List pickingList = mPickingList.getValue(); + + Stream.of(pickingList) + .filter(x -> x != matchedItem) + .forEach(x -> x.setHidden(true)); + + this.sendFilterApplied(null); + this.getPickingList().postValue(pickingList); + } else { + this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt()); + } + + } else { + List pickingList = mPickingList.getValue(); + + for (int i = 0; i < pickingList.size(); i++) { + if (!matchedRows.contains(pickingList.get(i))) { + pickingList.get(i).setHidden(true); + } + } + + this.sendFilterApplied(null); + this.getPickingList().postValue(pickingList); + + } + } + + + public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr, final MtbColt refMtbColt) { BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc(); BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf(); BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf(); + //TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta + MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ? + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null; + + BigDecimal totalAvailableQtaCol; + BigDecimal totalAvailableQtaCnf; + BigDecimal totalAvailableNumCnf; + + if (mtbColrToDispatch != null) { + totalAvailableQtaCol = mtbColrToDispatch.getQtaCol(); + totalAvailableQtaCnf = mtbColrToDispatch.getQtaCnf(); + totalAvailableNumCnf = mtbColrToDispatch.getNumCnf(); + } else { + totalAvailableQtaCol = totalQtaDoc; + totalAvailableQtaCnf = qtaCnfDoc; + totalAvailableNumCnf = totalNumCnfDoc; + } this.sendOnItemDispatched( withdrawableDtbDocr.getMtbAart(), - totalNumCnfDoc, - qtaCnfDoc, - totalQtaDoc, - totalQtaDoc, - totalNumCnfDoc, - qtaCnfDoc, + totalAvailableNumCnf, + totalAvailableQtaCnf, + totalAvailableQtaCol, + totalAvailableQtaCol, + totalAvailableNumCnf, + totalAvailableQtaCnf, withdrawableDtbDocr.getPartitaMag(), withdrawableDtbDocr.getDataScadPartitaMagD(), (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(withdrawableDtbDocr, + refMtbColt, pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaTot(), @@ -328,7 +528,7 @@ public class PickingResiViewModel { } - public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { + public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { this.sendOnLoadingStarted(); final MtbColr mtbColr = new MtbColr() @@ -348,6 +548,39 @@ public class PickingResiViewModel { .setDataDoc(withdrawableDtbDocr.getDataDocS()) .setIdRigaDoc(withdrawableDtbDocr.getIdRiga()); + //TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta + MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null && + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ? + withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null; + + if (mtbColrToDispatch != null) { + if (UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol())) + mCurrentMtbColt.setCodTcol(UtilityString.empty2null(withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getCodTcol())); + + mtbColr + .setCodJcom(UtilityString.empty2null(mtbColrToDispatch.getCodJcom())) + .setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo())) + .setNumColloRif(mtbColrToDispatch.getNumCollo()) + .setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione())) + .setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS())); + + + if (mtbColrToDispatch.getPesoNettoKg() != null) { + //Proporzione + BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol()); + mtbColr.setPesoNettoKg(pesoNettoKg); + } + + if (mtbColrToDispatch.getPesoLordoKg() != null) { + //Proporzione + BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol()); + mtbColr.setPesoLordoKg(pesoLordoKg); + } + } + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); @@ -482,6 +715,17 @@ public class PickingResiViewModel { }); } + public void resetMatchedRows() { + for (WithdrawableDtbDocr pickingObjectDTO : this.mPickingList.getValue()) { + pickingObjectDTO + .setTempPickData(null) + .setHidden(false); + } + + this.mPickingList.postValue(this.mPickingList.getValue()); + this.sendFilterRemoved(); + } + public MutableLiveData> getPickingList() { return mPickingList; @@ -549,6 +793,14 @@ public class PickingResiViewModel { if (this.mListener != null) mListener.onRowSaved(); } + private void sendFilterApplied(String newValue) { + if (this.mListener != null) mListener.onFilterApplied(newValue); + } + + private void sendFilterRemoved() { + if (this.mListener != null) mListener.onFilterRemoved(); + } + public PickingResiViewModel setListener(Listener listener) { this.mListener = listener; @@ -572,5 +824,9 @@ public class PickingResiViewModel { Date dataScad, RunnableArgss onComplete); + void onFilterApplied(String newValue); + + void onFilterRemoved(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java index 28a198ba..30459d32 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java @@ -20,7 +20,8 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding; @@ -31,7 +32,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter mDataset = new ArrayList<>(); - private RunnableArgs mOnItemClicked; + private RunnableArgss mOnItemClicked; static class SubheaderHolder extends RecyclerView.ViewHolder { PickingResiMainListItemHeaderBinding mBinding; @@ -65,7 +66,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter onItemClicked) { + public void setOnItemClicked(RunnableArgss onItemClicked) { this.mOnItemClicked = onItemClicked; } @@ -123,7 +124,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter { if (this.mOnItemClicked != null) - this.mOnItemClicked.run(pickingResiListModel.getOriginalModel()); + this.mOnItemClicked.run(pickingResiListModel.getOriginalModel(), pickingResiListModel.getSourceMtbColt()); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java index d5816c64..fe12ed1e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.picking_resi.core; import java.math.BigDecimal; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; public class PickingResiListModel { @@ -19,6 +20,7 @@ public class PickingResiListModel { private boolean active; private WithdrawableDtbDocr mOriginalModel; + private MtbColt mSourceMtbColt; public String getGroupTitle() { return groupTitle; @@ -100,4 +102,13 @@ public class PickingResiListModel { this.mOriginalModel = originalModel; return this; } + + public MtbColt getSourceMtbColt() { + return mSourceMtbColt; + } + + public PickingResiListModel setSourceMtbColt(MtbColt sourceMtbColt) { + this.mSourceMtbColt = sourceMtbColt; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java index 08fabdd5..b8a79a8a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java @@ -5,13 +5,18 @@ import java.util.List; import it.integry.integrywmsnative.core.model.DtbDocr; import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.dto.PickDataDTO; public class WithdrawableDtbDocr extends DtbDocr { private String gestione; - private List withdrawRows = new ArrayList<>(); + private PickDataDTO tempPickData; + private MtbColt refMtbColt; + private boolean hidden = false; + public WithdrawableDtbDocr() { super(); } @@ -33,4 +38,31 @@ public class WithdrawableDtbDocr extends DtbDocr { this.gestione = gestione; return this; } + + public MtbColt getRefMtbColt() { + return refMtbColt; + } + + public WithdrawableDtbDocr setRefMtbColt(MtbColt refMtbColt) { + this.refMtbColt = refMtbColt; + return this; + } + + public PickDataDTO getTempPickData() { + return tempPickData; + } + + public WithdrawableDtbDocr setTempPickData(PickDataDTO tempPickData) { + this.tempPickData = tempPickData; + return this; + } + + public boolean isHidden() { + return hidden; + } + + public WithdrawableDtbDocr setHidden(boolean hidden) { + this.hidden = hidden; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index 1cdc39ef..df721f6b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -41,7 +41,7 @@ import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.Or import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; /** * A simple {@link Fragment} subclass. @@ -137,7 +137,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); if (errorMessage == null) errorMessage = ex.getMessage(); - DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeErrorDialog(new SpannableString(errorMessage), null, null) + .show(getActivity().getSupportFragmentManager(), "tag"); } ); } @@ -197,8 +199,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit .distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione()) .count(); - DialogSimpleMessageHelper.makeInfoDialog(getActivity(), - getText(R.string.orders).toString(), + DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter) + "

" + "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)), @@ -213,7 +214,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit myIntent.putExtra("keySitArts", cacheSitArtItemID); getActivity().startActivity(myIntent); - }).show(); + }).show(getActivity().getSupportFragmentManager(), "tag"); }, @@ -224,7 +225,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); if (errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage(); - DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeErrorDialog(new SpannableString(errorMessage), null, null) + .show(getActivity().getSupportFragmentManager(), "tag"); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java index 1f53fb66..917fadf0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java @@ -42,7 +42,7 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuper import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.view.dialogs.DialogCommon; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; @@ -386,13 +386,13 @@ public class ProdRecuperoMaterialeViewModel { }, ex -> { progress.dismiss(); String errorMessage = ex.getMessage(); - DialogSimpleMessageHelper.makeErrorDialog( - mContext, + DialogSimpleMessageView.makeErrorDialog( new SpannableString(errorMessage), null, null, R.string.button_ignore_print, - onComplete).show(); + onComplete) + .show(mContext.getSupportFragmentManager(), "tag"); }); } catch (Exception ex) { @@ -402,7 +402,9 @@ public class ProdRecuperoMaterialeViewModel { } else { progress.dismiss(); String errorMessage = "Nessuna stampante configurata"; - DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, onComplete).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(errorMessage), null, onComplete) + .show(mContext.getSupportFragmentManager(), "tag"); } }, ex -> { UtilityExceptions.defaultException(mContext, ex, progress); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java index 21bfaabd..9e729256 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/core/ChooseOrdsLavFromListAdapter.java @@ -6,6 +6,7 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.ViewGroup; +import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.databinding.Observable; import androidx.recyclerview.widget.RecyclerView; @@ -32,7 +33,7 @@ import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentChooseOrdsLavFromListItemModelBinding; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter { @@ -57,11 +58,12 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter Per una corretta suddivisione delle quantità registra le risorse.")), null, () -> { itemModel.getChecked().set(false); - }).show(); + }) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); return; } if (!itemModel.isChecked()) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java index 1a8a927c..ce53400b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java @@ -8,6 +8,7 @@ import android.text.SpannableString; import android.view.View; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.ObservableField; import androidx.recyclerview.widget.LinearLayoutManager; @@ -44,7 +45,7 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavo import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; @@ -75,7 +76,7 @@ public class ProdVersamentoMaterialViewModel { mMtbColr = mtbColr; mBinding.descrArt.setText(mtbColr.getDescrizione()); mBinding.codArt.setText(mtbColr.getCodMart()); - mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - "+ mtbColr.getMtbPartitaMag().getDescrizione() : "")); + mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - " + mtbColr.getMtbPartitaMag().getDescrizione() : "")); if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) { String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); @@ -96,18 +97,20 @@ public class ProdVersamentoMaterialViewModel { } else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) && mtbColt.getSegno().equals(+1)) { if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")), - null, this::openLU).show(); + null, this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } else { setMtbColt(mtbColt); choosePosition(); } } else { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml("Sono accettate solamente UL di Acquisto o Lavorazione di CARICO")), - null, this::openLU).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di Acquisto o Lavorazione di CARICO")), + null, this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } }).show(); } @@ -123,28 +126,36 @@ public class ProdVersamentoMaterialViewModel { createColloScarico(mtbDepoPosizione); } else { if (mtbColt == null || mtbColt.get() == null || mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size() <= 0) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")), - null, this::openLU).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")), + null, this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); return; } else if (mtbColt.get().getMtbColr().size() > 1) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione.
Per versare i colli restanti ripetere l'operazione di versamento.")), - null, () -> { - cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione); - }).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione.
Per versare i colli restanti ripetere l'operazione di versamento.")), + null, () -> { + cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione); + }) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); return; } - MesRESTConsumer.getOrdiniLavorazioneMateriale(mtbDepoPosizione.getPosizione(), getIdMaterialeFromCollo(mtbColt.get()), ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione), e -> DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml(e.getMessage())), - null, this::openLU).show()); + MesRESTConsumer.getOrdiniLavorazioneMateriale( + mtbDepoPosizione.getPosizione(), + getIdMaterialeFromCollo(mtbColt.get()), + ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione), + e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())), + null, + this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag")); } } else { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")), - null, this::openLU).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")), + null, this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } } @@ -243,8 +254,8 @@ public class ProdVersamentoMaterialViewModel { richiediOrdiniPerVersamento(ordini, mtbDepoPosizione); } } - , e -> DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml(e.getMessage())), - null, this::openLU).show()); + , e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())), + null, this::openLU) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag")); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 913f46dc..4da7c280 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -42,7 +42,7 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrd import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.view.dialogs.DialogAskAction; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class PVOrdineAcquistoEditActivity extends BaseActivity { @@ -135,7 +135,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { private void deleteArticolo(ArticoloOrdine articoloOrdine) { String text = "Stai per eliminare l'articolo " + articoloOrdine.getDescrizione() + " dall'ordine,
sei sicuro?"; - DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> { + DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> { final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); mhelper.removeArticoloFromOrdine(articoloOrdine, () -> { progress.dismiss(); @@ -146,7 +146,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { runOnUiThread(() -> UtilityExceptions.defaultException(this, e)); }); }), () -> { - }).show(); + }).show(getSupportFragmentManager(), "tag"); } private void handleException(Exception ex) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 1b9f3b68..065c665c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -47,7 +47,7 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLis import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.DialogAskAction; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment { @@ -142,7 +142,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled }), (e) -> { progress.dismiss(); String errorMessage = e.getMessage(); - getActivity().runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show()); + getActivity().runOnUiThread(() -> DialogSimpleMessageView + .makeErrorDialog(new SpannableString(errorMessage), null, null) + .show(getActivity().getSupportFragmentManager(), "tag")); }); } @@ -198,7 +200,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private void deleteOrdine(Ordine ordine) { String text = "Stai per eliminare un ordine sei sicuro?"; - DialogSimpleMessageHelper.makeWarningDialog(getActivity(), new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> { + DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> { final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity()); mHelper.deleteOrder(ordine, () -> { getActivity().runOnUiThread(() -> { @@ -211,7 +213,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e)); }); }), () -> { - }).show(); + }).show(getActivity().getSupportFragmentManager(), "tag"); } private void refreshRenderedOrdini(List ordini) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 610376c9..1366e3e7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; @@ -360,12 +360,12 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageHelper.makeWarningDialog(getActivity(), - new SpannableString(text), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false) - ).show(); + ) + .show(getActivity().getSupportFragmentManager(), "tag"); } @Override @@ -471,29 +471,31 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme public void onLUSuccessullyPrinted() { Resources res = getResources(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); - DialogSimpleMessageHelper.makeSuccessDialog(getActivity(), res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) + .show(getActivity().getSupportFragmentManager(), "tag"); } @Override public void onLUPrintRequest(RunnableArgs onComplete) { - DialogSimpleMessageHelper.makeInfoDialog( - getActivity(), + DialogSimpleMessageView.makeInfoDialog( getActivity().getResources().getString(R.string.action_print_ul), new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)), null, () -> onComplete.run(true), - () -> onComplete.run(false)).show(); + () -> onComplete.run(false)) + .show(getActivity().getSupportFragmentManager(), "tag");; } @Override public void onLUPrintError(Exception ex, Runnable onComplete) { - DialogSimpleMessageHelper.makeErrorDialog( - getActivity(), + DialogSimpleMessageView.makeErrorDialog( new SpannableString(ex.getMessage()), null, null, R.string.button_ignore_print, - onComplete).show(); + onComplete) + .show(getActivity().getSupportFragmentManager(), "tag"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 2aa9f89b..a613a931 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -67,7 +67,7 @@ import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.camera_barcode_reader.DialogCameraBarcodeReader; import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; @@ -198,6 +198,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV(); boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione(); boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); + boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd(); if (mEnableGiacenza) this.openProgress(); mViewmodel.init( @@ -211,7 +212,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo mColliRegistrati, reportNameSpedizioneChiudiOrdine, mGestioneCol, mSegnoCol, mDefaultCausaleUL, - mEnableQuantityReset); + mEnableQuantityReset, + useQtaOrd); } @Override @@ -265,7 +267,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo ((SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()) || clickedItem.getTempPickData() != null)) { - this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt); + this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt, + SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()); } }); } @@ -719,7 +722,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void onLUSuccessullyPrinted() { Resources res = getResources(); String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); - DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageView + .makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null) + .show(getSupportFragmentManager(), "tag");; } @Override @@ -730,13 +735,14 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onLUPrintError(Exception ex, Runnable onComplete) { this.closeProgress(); - DialogSimpleMessageHelper.makeErrorDialog( - this, + DialogSimpleMessageView.makeErrorDialog( new SpannableString(ex.getMessage()), null, null, R.string.button_ignore_print, - onComplete).show(); + onComplete) + .show(getSupportFragmentManager(), "tag"); + ; } @Override @@ -754,12 +760,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageHelper.makeWarningDialog(this, - new SpannableString(text), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), null, () -> onComplete.run(true), () -> onComplete.run(false) - ).show(); + ) + .show(getSupportFragmentManager(), "tag"); } @Override @@ -793,6 +799,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, RunnableArgss onComplete) { DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() .setMtbAart(mtbAart) @@ -811,7 +818,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo .setPartitaMag(partitaMag) .setDataScad(dataScad) .setCanOverflowOrderQuantity(canOverflowOrderQuantity) - .setCanLUBeClosed(true); + .setCanLUBeClosed(true) + .setCanPartitaMagBeChanged(canPartitaMagBeChanged); DialogInputQuantityV2View .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 6d50da2d..66e56442 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -95,6 +95,7 @@ public class SpedizioneViewModel { private String mReportNameSpedizioneChiudiOrdine; private boolean mIsNewLU; private boolean mEnableQuantityReset; + private boolean mUseQtaOrd; private MtbColt mCurrentMtbColt = null; @@ -137,7 +138,8 @@ public class SpedizioneViewModel { GestioneEnum gestioneCol, int segnoCol, Integer defaultCausaleUL, - boolean enableQuantityReset) { + boolean enableQuantityReset, + boolean useQtaOrd) { this.sendOnLoadingStarted(); this.mDefaultCodMdep = codMdep; @@ -150,6 +152,7 @@ public class SpedizioneViewModel { this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine; this.mDefaultCausaleOfUL = defaultCausaleUL; this.mEnableQuantityReset = enableQuantityReset; + this.mUseQtaOrd = useQtaOrd; if (enableGiacenza) { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { @@ -361,6 +364,7 @@ public class SpedizioneViewModel { String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canBatchLotBeChanged, RunnableArgss onComplete) { if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO, mtbAart, @@ -379,6 +383,7 @@ public class SpedizioneViewModel { partitaMag, dataScad, canOverflowOrderQuantity, + canBatchLotBeChanged, onComplete); } @@ -732,7 +737,7 @@ public class SpedizioneViewModel { this.sendFilterApplied(null); this.getPickingList().postValue(pickingList); } else { - this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt()); + this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt(), false); } } else { @@ -751,7 +756,7 @@ public class SpedizioneViewModel { } - public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt) { + public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) { BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd(); BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd(); @@ -900,7 +905,9 @@ public class SpedizioneViewModel { this.sendOnItemDispatched( pickingObjectDTO, pickingObjectDTO.getMtbAart(), - null, null, null, + mUseQtaOrd ? numCnfDaPrelevare : null, + mUseQtaOrd ? qtaCnfDaPrelevare : null, + mUseQtaOrd ? qtaColDaPrelevare : null, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, @@ -913,6 +920,7 @@ public class SpedizioneViewModel { partitaMag, dataScad, mCanOverflowOrderQuantity, + canPartitaMagBeChanged, (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(pickingObjectDTO, finalRefMtbColt, @@ -1052,6 +1060,7 @@ public class SpedizioneViewModel { partitaMag, dataScad, mCanOverflowOrderQuantity, + true, (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(pickingObjectDTO, finalRefMtbColt, @@ -1188,6 +1197,7 @@ public class SpedizioneViewModel { partitaMag, dataScad, mCanOverflowOrderQuantity, + false, (pickedQuantityDTO, shouldCloseLU) -> { this.saveEditedRow(mtbColrToEdit, pickedQuantityDTO.getNumCnf(), @@ -1848,6 +1858,7 @@ public class SpedizioneViewModel { String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canBatchLotBeChanged, RunnableArgss onComplete); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteComponent.java new file mode 100644 index 00000000..5b62e34f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.ultime_consegne_cliente; + +import dagger.Subcomponent; + +@Subcomponent +public interface UltimeConsegneClienteComponent { + + @Subcomponent.Factory + interface Factory{ + UltimeConsegneClienteComponent create(); + } + + void inject(UltimeConsegneClienteFragment ultimeConsegneClienteFragment); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java index 084b8c01..3e209187 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java @@ -7,38 +7,62 @@ 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.databinding.ObservableArrayList; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding; -import it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel; +import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; -public class UltimeConsegneClienteFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment { +public class UltimeConsegneClienteFragment extends BaseFragment implements UltimeConsegneClienteViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment { private final List mOnPreDestroyList = new ArrayList<>(); private ElevatedToolbar mToolbar; - private UltimeConsegneClienteViewModel mViewModel; + private int barcodeScannerIstanceID = -1; + + private final ObservableArrayList mDocumentiMutableData = new ObservableArrayList<>(); + + @Inject + UltimeConsegneClienteViewModel mViewModel; + + private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel; + + private FragmentMainUltimeConsegneClienteBinding mBindings; public UltimeConsegneClienteFragment() { // Required empty public constructor } public static UltimeConsegneClienteFragment newInstance() { - UltimeConsegneClienteFragment fragment = new UltimeConsegneClienteFragment(); - Bundle args = new Bundle(); - - fragment.setArguments(args); - return fragment; + return new UltimeConsegneClienteFragment(); } @@ -46,21 +70,158 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - FragmentMainUltimeConsegneClienteBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false); + mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false); - mViewModel = new UltimeConsegneClienteViewModel(getActivity(), mBinding); + MainApplication.appComponent + .ultimeConsegneClienteComponent() + .create() + .inject(this); - mBinding.setViewmodel(mViewModel); + mViewModel.setListener(this); - mToolbar.setRecyclerView(mBinding.recyclerView); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + + this.initRecyclerView(); +// this.initBarcodeReader(); // Inflate the layout for this fragment - return mBinding.getRoot(); + return mBindings.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + mViewModel.init(codMdep); + + this.mBindings.mainFab.hide(); + this.mBindings.mainFab.setOnClickListener(v -> { + dispatchConsegne(); + }); + + this.mViewModel.getDocuments().observe(this, this::refreshList); + + openFilterDialog(); + } + + + public void openFilterDialog() { + this.mViewModel.loadCodAnagClienti(gtbAnags -> { + DialogUltimeConsegneFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> { + mAppliedFilterViewModel = filter; + refreshItems(); + }).show(); + }); + } + + + private void initRecyclerView() { + UltimeConsegneMainListAdapter mAdapter = + new UltimeConsegneMainListAdapter(getActivity(), mDocumentiMutableData); + mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); + mAdapter.setEmptyView(mBindings.emptyView); + + mBindings.recyclerView.setHasFixedSize(true); + mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + mBindings.recyclerView.setAdapter(mAdapter); +// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView); + + + if(mToolbar != null) + mToolbar.setRecyclerView(mBindings.recyclerView); + + } + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + BarcodeManager.enable(); + } + + private final RunnableArgs onScanSuccessful = data -> { + BarcodeManager.disable(); + + this.mViewModel.processBarcodeDTO(data, () -> { + BarcodeManager.enable(); + }); + }; + + private void refreshList(List documentList) { + this.mDocumentiMutableData.clear(); + this.mDocumentiMutableData.addAll(sort(documentList)); + } + + private void refreshItems() { + this.openProgress(); + + String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; + String currentCodAnagFilter = null; + + Optional singleGtbAnag = Stream.of(this.mViewModel.getGtbAnagClienti().getValue()) + .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) + .findSingle(); + + if (singleGtbAnag.isPresent()) { + currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + } + + this.mViewModel.loadConsegneClienti(currentCodAnagFilter, + null, + -1, + 548 + ); + + } + + private List sort(List dataset) { + List sortedDataset = Stream.of(dataset) + .sortBy(DocumentoResoDTO::getRagSoc) + .toList(); + + return sortedDataset; + } + + + private void onSingleSelectionChanged(DocumentoResoDTO dto) { + List selectedOrders = getSelectedItems(); + + if (dto.isSelected()) { + Stream.of(selectedOrders) + .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) + .forEach(x -> x.setSelected(false)); + } + + if (selectedOrders != null && selectedOrders.size() > 0) { + mBindings.mainFab.show(); + } else { + mBindings.mainFab.hide(); + } + } + + + private List getSelectedItems() { + return Stream.of(this.mDocumentiMutableData) + .filter(DocumentoResoDTO::isSelected) + .toList(); + } + + + private void dispatchConsegne() { + List selectedConsegne = getSelectedItems(); + + PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1); + } + + @Override public void onDestroy() { - for(Runnable onPreDestroy : mOnPreDestroyList) { + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } super.onDestroy(); @@ -78,11 +239,30 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr @Override public void onFilterClick() { - mViewModel.openFilterDialog(); + openFilterDialog(); } @Override public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + + @Override + public void onLoadingStarted() { + BarcodeManager.disable(); + this.openProgress(); + } + + @Override + public void onLoadingEnded() { + this.closeProgress(); + BarcodeManager.enable(); + } + + @Override + public void onError(Exception ex) { + this.closeProgress(); + UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); + BarcodeManager.enable(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteModule.java new file mode 100644 index 00000000..2af8378d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteModule.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.gest.ultime_consegne_cliente; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer; + +@Module(subcomponents = UltimeConsegneClienteComponent.class) +public class UltimeConsegneClienteModule { + + @Singleton + @Provides + UltimeConsegneClienteRESTConsumer providesUltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + return new UltimeConsegneClienteRESTConsumer(systemRESTConsumer); + } + + @Provides + UltimeConsegneClienteViewModel providesUltimeConsegneClienteViewModel( + UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + return new UltimeConsegneClienteViewModel(ultimeConsegneClienteRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java new file mode 100644 index 00000000..7bb95f7d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java @@ -0,0 +1,181 @@ +package it.integry.integrywmsnative.gest.ultime_consegne_cliente; + +import androidx.lifecycle.MutableLiveData; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.exception.NoLUFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer; + +public class UltimeConsegneClienteViewModel { + + + private final MutableLiveData> mGtbAnagClienti = new MutableLiveData<>(); + private final MutableLiveData> mDocuments = new MutableLiveData<>(); + + private final UltimeConsegneClienteRESTConsumer mUltimeConsegneClienteRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + + private Listener mListener; + + private String mCodMdep; + + @Inject + public UltimeConsegneClienteViewModel( + UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + this.mUltimeConsegneClienteRESTConsumer = ultimeConsegneClienteRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + } + + + public void init(String codMdep) { + this.mCodMdep = codMdep; + } + + public void loadCodAnagClienti(RunnableArgs> onComplete) { + this.sendOnLoadingStarted(); + + this.mUltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> { + mGtbAnagClienti.postValue(gtbAnags); + this.sendOnLoadingEnded(); + + onComplete.run(gtbAnags); + }, this::sendError); + } + + + public void loadConsegneClienti(String codAnag, String codMart, int limitDocsForCli, int limitDays) { + this.sendOnLoadingStarted(); + + this.mUltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> { + this.mDocuments.postValue(documentList); + this.sendOnLoadingEnded(); + }, this::sendError); + } + + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + this.sendOnLoadingStarted(); + + RunnableArgs> onBarcodeScanComplete = orderList -> { + onComplete.run(); + this.sendOnLoadingEnded(); + }; + + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete); + } else { + onComplete.run(); + } + } + + + private void executeEtichettaLU(String SSCC, RunnableArgs> onComplete) { + this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + +// if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) { +// //GET BY COMMESSA COLLO +// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> { +// +// if(orderList != null && orderList.size() > 0) { +// List numOrds = Stream.of(orderList) +// .map(DtbOrdt::getNumOrd) +// .toList(); +// +// List filteredOrders = Stream.of(mOrderList.getValue()) +// .filter(x -> numOrds.contains(x.getNumOrd())).toList(); +// +// onComplete.run(filteredOrders); +// } else { +// this.sendError(new NoOrderFoundException()); +// } +// +// }, this::sendError); +// +// } else { +// this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA)); +// } +// + } else { + this.sendError(new NoLUFoundException()); + } + + }, this::sendError); + } + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgs> onComplete) { + this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + String barcodeProd = null; + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if (!UtilityString.isNullOrEmpty(ean128Model.Content)) + barcodeProd = ean128Model.Content; + + + if (!UtilityString.isNullOrEmpty(barcodeProd)) { + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + this.executeEtichettaLU(ean128Model.Sscc, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + this.sendError(new NoLUFoundException()); + } + }, this::sendError); + } + + + public MutableLiveData> getGtbAnagClienti() { + return mGtbAnagClienti; + } + + public MutableLiveData> getDocuments() { + return mDocuments; + } + + public UltimeConsegneClienteViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + public interface Listener extends ILoadingListener { + void onError(Exception ex); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java similarity index 70% rename from app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneMainListAdapter.java rename to app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java index 8ea28c19..f3f68b3e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneMainListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneMainListAdapter.java @@ -1,44 +1,31 @@ -package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel; +package it.integry.integrywmsnative.gest.ultime_consegne_cliente; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.RecyclerView; -import com.annimon.stream.Stream; -import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; - -import java.util.ArrayList; import java.util.Calendar; -import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListHeaderBinding; import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListSingleItemBinding; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; -public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { +public class UltimeConsegneMainListAdapter extends ExtendedSectionedRecyclerView { private Context mContext; - private List mDataset; - private ArrayList mSectionTitleItems; - private RunnableArgs mOnSelectionChanged; - @Override - public String getSectionTitle(int position) { - return mSectionTitleItems.get(position); - } static class SubheaderHolder extends RecyclerView.ViewHolder { @@ -65,12 +52,9 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter< - public UltimeConsegneMainListAdapter(Context context, ArrayList dataset) { - super(); + public UltimeConsegneMainListAdapter(Context context, ObservableArrayList mutableDataSet) { + super(mutableDataSet); this.mContext = context; - this.mDataset = new ArrayList<>(); - - updateItems(sort(dataset)); } @@ -146,45 +130,6 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter< return false; } - @Override - public int getItemSize() { - return this.mDataset.size(); - } - - - - public void updateItems(List updatedDataset) { - mDataset.clear(); - mDataset.addAll(sort(updatedDataset)); - notifyDataSetChanged(); - notifyDataChanged(); - } - - - private List sort(List dataset) { - this.mSectionTitleItems = new ArrayList<>(); - - List sortedDataset = Stream.of(dataset) - .sortBy(DocumentoResoDTO::getRagSoc) - .toList(); - - - Stream.of(sortedDataset) - .map(DocumentoResoDTO::getRagSoc) - .distinct() - .forEach(x -> { - this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - - long count = Stream.of(dataset) - .filter(y -> y.getRagSoc().equalsIgnoreCase(x)) - .count(); - - - for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - }); - - return sortedDataset; - } public void setOnSelectionChanged(RunnableArgs mSelectionChanged) { this.mOnSelectionChanged = mSelectionChanged; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java index 9a17b389..2a59a397 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java @@ -8,6 +8,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import javax.inject.Singleton; + import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; @@ -20,65 +22,61 @@ import it.integry.integrywmsnative.core.utility.UtilityQuery; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +@Singleton public class UltimeConsegneClienteRESTConsumer { - public static void getAvailableCodAnagClienti(RunnableArgs> onComplete, RunnableArgs onFailed) { + private final SystemRESTConsumer systemRESTConsumer; + + public UltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + this.systemRESTConsumer = systemRESTConsumer; + } + + public void getAvailableCodAnagClienti(RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " + "FROM gtb_anag " + "INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " + "WHERE flag_stato = 'A'"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } - public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { + public void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "SELECT consegne.*, " + " rag_soc," + " dtb_doct.gestione " + "FROM WMS_GetUltimeConsegneClienti(" + - UtilityDB.valueToString(limitConsegnePerCli) + ", " + - UtilityDB.valueToString(codAnag) + ", " + - UtilityDB.valueToString(codMart) + ", " + - UtilityDB.valueToString(codMdep) + ", " + - UtilityDB.valueToString(limitDays) + ") consegne " + + UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " + + UtilityDB.valueToString(codAnag) + ", " + + UtilityDB.valueToString(codMart) + ", " + + UtilityDB.valueToString(codMdep) + ", " + + UtilityDB.valueToString(limitDays) + ") consegne " + "INNER JOIN dtb_doct ON consegne.num_doc = dtb_doct.num_doc AND consegne.data_doc = dtb_doct.data_doc AND consegne.cod_anag = dtb_doct.cod_anag AND consegne.cod_dtip = dtb_doct.cod_dtip AND consegne.ser_doc = dtb_doct.ser_doc " + "LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " + "ORDER BY rag_soc, " + " counter_consegna "; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } - public static void loadDocRowFromConsegna(List consegne, RunnableArgs> onComplete, RunnableArgs onFailed) { List> filterCond = new ArrayList<>(); - for(int i = 0; i < consegne.size(); i++) { + for (int i = 0; i < consegne.size(); i++) { HashMap filter = new HashMap<>(); filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD()); @@ -172,17 +170,18 @@ public class UltimeConsegneClienteRESTConsumer { " (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " + " dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" + " ( " + - UtilityQuery.concatFieldListInWhereCond(filterCond) + + UtilityQuery.concatFieldListInWhereCond(filterCond) + " ) " + "ORDER BY cod_mart"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); + Type typeOfObjectsList = new TypeToken>() { + }.getType(); SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { @Override public void onSuccess(ArrayList values) { - if(values != null && values.size() > 0){ + if (values != null && values.size() > 0) { List codMarts = Stream.of(values) .map(DtbDocr::getCodMart) .withoutNulls() @@ -191,7 +190,7 @@ public class UltimeConsegneClienteRESTConsumer { ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> { - if(arts != null && arts.size() > 0) { + if (arts != null && arts.size() > 0) { for (DtbDocr value : values) { MtbAart foundMtbAart = null; @@ -199,7 +198,7 @@ public class UltimeConsegneClienteRESTConsumer { List mtbAartStream = Stream.of(arts) .filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList(); - if(mtbAartStream != null && mtbAartStream.size() > 0){ + if (mtbAartStream != null && mtbAartStream.size() > 0) { foundMtbAart = mtbAartStream.get(0); } @@ -207,19 +206,19 @@ public class UltimeConsegneClienteRESTConsumer { } - if(onComplete != null) onComplete.run(values); + if (onComplete != null) onComplete.run(values); } }, onFailed); } else { - if(onComplete != null) onComplete.run(values); + if (onComplete != null) onComplete.run(values); } } @Override public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + if (onFailed != null) onFailed.run(ex); } }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java deleted file mode 100644 index c264dd79..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/viewmodel/UltimeConsegneClienteViewModel.java +++ /dev/null @@ -1,146 +0,0 @@ -package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel; - -import android.app.Dialog; -import android.content.Context; -import android.view.View; - -import androidx.recyclerview.widget.LinearLayoutManager; - -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; - -import java.util.ArrayList; -import java.util.List; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; -import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding; -import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; -import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato; -import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer; - -public class UltimeConsegneClienteViewModel { - - private Context mContext; - private FragmentMainUltimeConsegneClienteBinding mBinding; - - private UltimeConsegneMainListAdapter mAdapter; - private List mItems; - private List mRenderedItems = new ArrayList<>(); - - private List mAvailableGtbAnags = null; - - private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel; - - public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) { - this.mContext = context; - this.mBinding = binding; - - this.mBinding.mainFab.hide(); - this.mBinding.mainFab.setOnClickListener(v -> { - dispatchConsegne(); - }); - - openFilterDialog(); - } - - public void openFilterDialog() { - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> { - mAvailableGtbAnags = gtbAnags; - progressDialog.dismiss(); - - DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> { - mAppliedFilterViewModel = filter; - refreshItems(); - }).show(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); - } - - private void initDataAdapter(ArrayList dataset) { - mAdapter = new UltimeConsegneMainListAdapter(mContext, dataset); - mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); - - mBinding.recyclerView.setHasFixedSize(true); - mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); - mBinding.recyclerView.setAdapter(mAdapter); - mBinding.fastscroll.setRecyclerView(mBinding.recyclerView); - - } - - private void refreshItems(){ - - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; - String currentCodAnagFilter = null; - - Optional singleGtbAnag = Stream.of(mAvailableGtbAnags) - .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) - .findSingle(); - - if(singleGtbAnag.isPresent()) { - currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); - } - - UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti( - SettingsManager.i().getUserSession().getDepo().getCodMdep(), - currentCodAnagFilter, - null, - null, - 548, - consegne -> { - this.mItems = consegne; - - this.initDataAdapter(consegne); - mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE); - - mRenderedItems.clear(); - if(this.mItems != null) mRenderedItems.addAll(this.mItems); - mAdapter.updateItems(mRenderedItems); - - progressDialog.dismiss(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); - } - - private void onSingleSelectionChanged(DocumentoResoDTO dto) { - List selectedOrders = getSelectedItems(); - - if(dto.isSelected()) { - Stream.of(selectedOrders) - .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) - .forEach(x -> x.setSelected(false)); - } - - if(selectedOrders != null && selectedOrders.size() > 0) { - mBinding.mainFab.show(); - } - else { - mBinding.mainFab.hide(); - } - } - - private List getSelectedItems() { - return Stream.of(this.mItems) - .filter(DocumentoResoDTO::isSelected) - .toList(); - } - - - private void dispatchConsegne() { - List selectedConsegne = getSelectedItems(); - - PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1); - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java new file mode 100644 index 00000000..e0211f75 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore; + +import dagger.Subcomponent; + +@Subcomponent +public interface UltimiArriviFornitoreComponent { + + @Subcomponent.Factory + interface Factory{ + UltimiArriviFornitoreComponent create(); + } + + void inject(UltimiArriviFornitoreFragment ultimiArriviFornitoreFragment); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java index a5716dd9..6b008c8f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java @@ -7,41 +7,70 @@ 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.databinding.ObservableArrayList; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; +import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; /** - * A simple {@link Fragment} subclass. + * A simple {@link BaseFragment} subclass. */ -public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment { +public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener { private final List mOnPreDestroyList = new ArrayList<>(); private ElevatedToolbar mToolbar; - private UltimiArriviFornitoreViewModel mViewModel; + private int barcodeScannerIstanceID = -1; + + private final ObservableArrayList mDocumentiMutableData = new ObservableArrayList<>(); + + @Inject + UltimiArriviFornitoreViewModel mViewModel; + + private FragmentUltimiArriviFornitoreBinding mBindings; + private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; public UltimiArriviFornitoreFragment() { // Required empty public constructor } public static UltimiArriviFornitoreFragment newInstance() { - UltimiArriviFornitoreFragment fragment = new UltimiArriviFornitoreFragment(); - Bundle args = new Bundle(); - - fragment.setArguments(args); - return fragment; + return new UltimiArriviFornitoreFragment(); } @@ -49,21 +78,155 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); + mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false); - mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding); + MainApplication.appComponent + .ultimiArriviFornitoreComponent() + .create() + .inject(this); - mBinding.setViewmodel(mViewModel); + mViewModel.setListener(this); - mToolbar.setRecyclerView(mBinding.recyclerView); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + this.initRecyclerView(); + this.initBarcodeReader(); // Inflate the layout for this fragment - return mBinding.getRoot(); + return mBindings.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + mViewModel.init(codMdep); + + this.mBindings.mainFab.hide(); + this.mBindings.mainFab.setOnClickListener(v -> { + dispatchConsegne(); + }); + + this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList); + + openFilterDialog(); + } + + + public void openFilterDialog() { + this.mViewModel.loadCodAnagFornitori(gtbAnags -> { + DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> { + mAppliedFilterViewModel = filter; + filterItems(null); + }).show(); + }); + } + + + private void initRecyclerView() { + UltimiArriviFornitoreListAdapter mAdapter = + new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData); + mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); + mAdapter.setEmptyView(mBindings.emptyView); + + mBindings.recyclerView.setHasFixedSize(true); + mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + mBindings.recyclerView.setAdapter(mAdapter); +// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView); + + if (mToolbar != null) + mToolbar.setRecyclerView(mBindings.recyclerView); + + } + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + BarcodeManager.enable(); + } + + private final RunnableArgs onScanSuccessful = data -> { + BarcodeManager.disable(); + + this.mViewModel.processBarcodeDTO(data, () -> { + BarcodeManager.enable(); + }); + }; + + private void refreshList(List documentList) { + this.mDocumentiMutableData.clear(); + this.mDocumentiMutableData.addAll(sort(documentList)); + } + + private void filterItems(List filteredMtbAarts) { + this.openProgress(); + + String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; + String currentCodAnagFilter = null; + + Optional singleGtbAnag = Stream.of(mViewModel.getGtbAnagClienti().getValue()) + .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) + .findSingle(); + + if (singleGtbAnag.isPresent()) { + currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + } + + this.mViewModel.loadArriviFornitori(currentCodAnagFilter, + filteredMtbAarts, + -1, + 365); + } + + private List sort(List dataset) { + List items = Stream.of(dataset) + .sortBy(DocumentoResoDTO::getRagSoc) + .toList(); + return items; + + } + + private void onSingleSelectionChanged(DocumentoResoDTO dto) { + List selectedOrders = getSelectedItems(); + + if(dto.isSelected()) { + Stream.of(selectedOrders) + .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) + .forEach(x -> x.setSelected(false)); + } + + if(selectedOrders != null && selectedOrders.size() > 0) { + mBindings.mainFab.show(); + } + else { + mBindings.mainFab.hide(); + } + } + + + private List getSelectedItems() { + return Stream.of(this.mDocumentiMutableData) + .filter(DocumentoResoDTO::isSelected) + .toList(); + } + + private void dispatchConsegne() { + List selectedConsegne = getSelectedItems(); + + PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); + } + + @Override public void onDestroy() { - for(Runnable onPreDestroy : mOnPreDestroyList) { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } super.onDestroy(); @@ -80,12 +243,9 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr } - - - @Override public void onFilterClick() { - mViewModel.openFilterDialog(); + openFilterDialog(); } @@ -93,4 +253,40 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + + @Override + public void onLoadingStarted() { + BarcodeManager.disable(); + this.openProgress(); + } + + @Override + public void onLoadingEnded() { + this.closeProgress(); + BarcodeManager.enable(); + } + + @Override + public void onError(Exception ex) { + this.closeProgress(); + UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); + BarcodeManager.enable(); + } + + @Override + public void onMtbColtScanned(MtbColt scannedMtbColt) { + + DialogChooseArtsFromListaArts + .make(getActivity(), scannedMtbColt.getMtbColr(), items -> { + + List mtbAarts = Stream.of(items) + .map(MtbColr::getMtbAart) + .toList(); + + filterItems(mtbAarts); + + }, null) + .show(); + + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java new file mode 100644 index 00000000..fcb4e8fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreModule.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; +import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; + +@Module(subcomponents = UltimiArriviFornitoreComponent.class) +public class UltimiArriviFornitoreModule { + + @Singleton + @Provides + UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer); + } + + @Provides + UltimiArriviFornitoreViewModel providesUltimiArriviFornitoreViewModel( + UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + return new UltimiArriviFornitoreViewModel(ultimiArriviFornitoreRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java index a34152fe..8249b12e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreListAdapter.java @@ -6,38 +6,29 @@ import android.view.View; import android.view.ViewGroup; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.RecyclerView; -import com.annimon.stream.Stream; -import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; - -import java.util.ArrayList; import java.util.Calendar; import java.util.List; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding; -import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; -public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { +public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView { private Context mContext; - private List mDataset; - private ArrayList mSectionTitleItems; - private RunnableArgs mOnSelectionChanged; - @Override - public String getSectionTitle(int position) { - return mSectionTitleItems.get(position); - } - static class SubheaderHolder extends RecyclerView.ViewHolder { @@ -64,13 +55,9 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt - public UltimiArriviFornitoreListAdapter(Context context, ArrayList dataset) { - super(); + public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList mutableDataSet) { + super(mutableDataSet); this.mContext = context; - this.mDataset = new ArrayList<>(); - this.mSectionTitleItems = new ArrayList<>(); - - mDataset.addAll(sort(dataset)); } @@ -152,7 +139,7 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt public void updateItems(List updatedDataset) { mDataset.clear(); - mDataset.addAll(sort(updatedDataset)); + mDataset.addAll(updatedDataset); notifyDataSetChanged(); notifyDataChanged(); } @@ -163,28 +150,5 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt } - private List sort(List dataset) { - List items = Stream.of(dataset) - .sortBy(DocumentoResoDTO::getRagSoc) - .toList(); - - - Stream.of(items) - .map(DocumentoResoDTO::getRagSoc) - .distinct() - .forEach(x -> { - this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - - long count = Stream.of(dataset) - .filter(y -> y.getRagSoc().equalsIgnoreCase(x)) - .count(); - - - for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0))); - }); - return items; - - } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java index ad4787de..7b17b4eb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java @@ -1,154 +1,192 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core; -import android.app.Dialog; -import android.content.Context; -import android.view.View; +import androidx.lifecycle.MutableLiveData; -import androidx.recyclerview.widget.LinearLayoutManager; - -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; - -import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.R; +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.exception.InvalidLUException; +import it.integry.integrywmsnative.core.exception.NoLUFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; -import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; -import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; public class UltimiArriviFornitoreViewModel { - private Context mContext; - private FragmentUltimiArriviFornitoreBinding mBinding; + private final MutableLiveData> mGtbAnagClienti = new MutableLiveData<>(); + private final MutableLiveData> mDocuments = new MutableLiveData<>(); - private List mItems; - private List mRenderedItems = new ArrayList<>(); + private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; - private List mAvailableGtbAnags = null; + private Listener mListener; - private UltimiArriviFornitoreListAdapter mAdapter; + private String mCodMdep; - private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel; - - public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) { - this.mContext = context; - this.mBinding = binding; - - this.mBinding.mainFab.hide(); - this.mBinding.mainFab.setOnClickListener(v -> { - dispatchConsegne(); - }); - - openFilterDialog(); + @Inject + public UltimiArriviFornitoreViewModel( + UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + this.mUltimiArriviFornitoreRESTConsumer = ultimiArriviFornitoreRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; } - - private void initDataAdapter(ArrayList dataset) { - mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset); - mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged); - - mBinding.recyclerView.setHasFixedSize(true); - mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); - mBinding.recyclerView.setAdapter(mAdapter); - mBinding.fastscroll.setRecyclerView(mBinding.recyclerView); - + public void init(String codMdep) { + this.mCodMdep = codMdep; } - public void openFilterDialog() { - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + public void loadCodAnagFornitori(RunnableArgs> onComplete) { + this.sendOnLoadingStarted(); - UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { - mAvailableGtbAnags = gtbAnags; - progressDialog.dismiss(); + this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> { + mGtbAnagClienti.postValue(gtbAnags); + this.sendOnLoadingEnded(); - DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> { - mAppliedFilterViewModel = filter; - refreshItems(); - }).show(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); + onComplete.run(gtbAnags); + }, this::sendError); + } + + public void loadArriviFornitori(String codAnag, List mtbAarts, int limitDocsForCli, int limitDays) { + this.sendOnLoadingStarted(); + + this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> { + this.mDocuments.postValue(documentList); + this.sendOnLoadingEnded(); + }, this::sendError); } - private void dispatchConsegne() { - List selectedConsegne = getSelectedItems(); + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { - PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1); - } + this.sendOnLoadingStarted(); - private List getSelectedItems() { - return Stream.of(this.mItems) - .filter(DocumentoResoDTO::isSelected) - .toList(); - } + Runnable onBarcodeScanComplete = () -> { + onComplete.run(); + this.sendOnLoadingEnded(); + }; - - private void refreshItems(){ - - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; - String currentCodAnagFilter = null; - - Optional singleGtbAnag = Stream.of(mAvailableGtbAnags) - .filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter)) - .findSingle(); - - if(singleGtbAnag.isPresent()) { - currentCodAnagFilter = singleGtbAnag.get().getCodAnag(); + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete); + } else { + onComplete.run(); } - - - UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori( - SettingsManager.i().getUserSession().getDepo().getCodMdep(), - currentCodAnagFilter, - null, - null, - 365, - consegne -> { - this.mItems = consegne; - - this.initDataAdapter(consegne); - - mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE); - - mRenderedItems.clear(); - if(this.mItems != null) mRenderedItems.addAll(this.mItems); - mAdapter.updateItems(mRenderedItems); - - progressDialog.dismiss(); - }, ex -> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); - - } - private void onSingleSelectionChanged(DocumentoResoDTO dto) { - List selectedOrders = getSelectedItems(); + private void executeEtichettaLU(String SSCC, Runnable onComplete) { + this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { - if(dto.isSelected()) { - Stream.of(selectedOrders) - .filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc())) - .forEach(x -> x.setSelected(false)); - } + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + if(mtbColt.getSegno() > 0) { - if(selectedOrders != null && selectedOrders.size() > 0) { - mBinding.mainFab.show(); - } - else { - mBinding.mainFab.hide(); - } + this.sendOnMtbColtScanned(mtbColt); + +// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> { +// +// if(orderList != null && orderList.size() > 0) { +// List numOrds = Stream.of(orderList) +// .map(DtbOrdt::getNumOrd) +// .toList(); +// +// List filteredOrders = Stream.of(mOrderList.getValue()) +// .filter(x -> numOrds.contains(x.getNumOrd())).toList(); +// +// onComplete.run(filteredOrders); +// } else { +// this.sendError(new NoOrderFoundException()); +// } +// +// }, this::sendError); + } else { + this.sendError(new InvalidLUException()); + } + } else { + this.sendError(new NoLUFoundException()); + } + + }, this::sendError); + } + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + String barcodeProd = null; + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if (!UtilityString.isNullOrEmpty(ean128Model.Content)) + barcodeProd = ean128Model.Content; + + + if (!UtilityString.isNullOrEmpty(barcodeProd)) { + + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + this.executeEtichettaLU(ean128Model.Sscc, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + this.sendError(new NoLUFoundException()); + } + }, this::sendError); + } + + + + + + + + + public MutableLiveData> getGtbAnagClienti() { + return mGtbAnagClienti; + } + + public MutableLiveData> getDocuments() { + return mDocuments; + } + + public UltimiArriviFornitoreViewModel setListener(UltimiArriviFornitoreViewModel.Listener listener) { + this.mListener = listener; + return this; + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + private void sendOnMtbColtScanned(MtbColt scannedMtbColt) { + if (this.mListener != null) mListener.onMtbColtScanned(scannedMtbColt); + } + + public interface Listener extends ILoadingListener { + void onError(Exception ex); + + void onMtbColtScanned(MtbColt scannedMtbColt); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java index 89bbaeeb..d53fd61c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/rest/UltimiArriviFornitoreRESTConsumer.java @@ -1,49 +1,62 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest; +import com.annimon.stream.Stream; import com.google.gson.reflect.TypeToken; +import org.apache.commons.lang3.StringUtils; + import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; -import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityDB; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import javax.inject.Singleton; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityDB; + +@Singleton public class UltimiArriviFornitoreRESTConsumer { - public static void getAvailableCodAnagFornitori(RunnableArgs> onComplete, RunnableArgs onFailed) { + private final SystemRESTConsumer systemRESTConsumer; + + public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + this.systemRESTConsumer = systemRESTConsumer; + } + + public void getAvailableCodAnagFornitori(RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " + "FROM gtb_anag " + "INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " + "WHERE flag_stato = 'A'"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } - public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { + public void getUltimeConsegneFornitori(String codMdep, String codAnag, List mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs> onComplete, RunnableArgs onFailed) { + String codMarts = null; + if (mtbAarts != null && mtbAarts.size() > 0) { + codMarts = StringUtils.join(Stream.of(mtbAarts) + .map(MtbAart::getCodMart) + .toList(), "|"); + } String sql = "SELECT consegne.*, " + " rag_soc " + "FROM WMS_GetUltimeConsegneFornitori(" + - UtilityDB.valueToString(limitConsegnePerCli) + ", " + + UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " + UtilityDB.valueToString(codAnag) + ", " + - UtilityDB.valueToString(codMart) + ", " + + UtilityDB.valueToString(codMarts) + ", " + UtilityDB.valueToString(codMdep) + ", " + UtilityDB.valueToString(limitDays) + ") consegne " + "LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " + @@ -51,17 +64,12 @@ public class UltimiArriviFornitoreRESTConsumer { " counter_consegna "; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.systemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java index b2a835fa..f69551ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -40,7 +40,7 @@ import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBindin import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper; import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione; import it.integry.integrywmsnative.view.dialogs.DialogCommon; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; @@ -76,9 +76,10 @@ public class VersamentoMerceViewModel { } else if (mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) { setMtbColt(mtbColt); } else { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(Html.fromHtml("Sono accettate solamente UL di Acquisto o Lavorazione di CARICO")), - null, this::openLU).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di Acquisto o Lavorazione di CARICO")), + null, this::openLU) + .show(mContext.getSupportFragmentManager(), "tag");; } }).show(); } @@ -96,7 +97,7 @@ public class VersamentoMerceViewModel { BarcodeManager.disable(); Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - if (UtilityBarcode.isEtichettaPosizione(data)) { + if (UtilityBarcode.isEtichettaPosizione(data, false)) { progressDialog.show(); this.executeEtichettaPosizione(data, progressDialog); } else if (data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA) { @@ -151,9 +152,10 @@ public class VersamentoMerceViewModel { } private void showTooMuchULFound() { - DialogSimpleMessageHelper.makeWarningDialog(mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)), - null, null).show(); + null, null) + .show(mContext.getSupportFragmentManager(), "tag"); } private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) { @@ -429,18 +431,19 @@ public class VersamentoMerceViewModel { private void askULVenditaConfirm(RunnableArgs callback) { - DialogSimpleMessageHelper.makeWarningDialog( - mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(mContext.getResources().getString(R.string.lu_gest_v_loading_alert)), null, () -> callback.run(true), - () -> callback.run(false)).show(); + () -> callback.run(false)) + .show(mContext.getSupportFragmentManager(), "tag"); } private void showWrongGestioneUL() { - DialogSimpleMessageHelper.makeWarningDialog(mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_V_not_accepted_message).toString())), - null, null).show(); + null, null) + .show(mContext.getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogCommon.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogCommon.java index f2ed317e..e35f0e4b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogCommon.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogCommon.java @@ -3,48 +3,52 @@ package it.integry.integrywmsnative.view.dialogs; import android.content.Context; import android.text.SpannableString; +import androidx.appcompat.app.AppCompatActivity; + import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class DialogCommon { public static void showNoArtFoundDialog(@NotNull Context context, @Nullable Runnable onPositiveClick) { - DialogSimpleMessageHelper.makeWarningDialog(context, - new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)), - null, onPositiveClick).show(); + DialogSimpleMessageView + .makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)), + null, onPositiveClick) + .show(((AppCompatActivity) context).getSupportFragmentManager(), "tag"); } public static void showNoULFound(@NotNull Context context, @Nullable Runnable onPositiveClick) { - DialogSimpleMessageHelper.makeWarningDialog(context, - new SpannableString(context.getResources().getText(R.string.no_lu_found_message)), - null, onPositiveClick).show(); + DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_lu_found_message)), + null, onPositiveClick) + .show(((AppCompatActivity) context).getSupportFragmentManager(), "tag"); } public static void showNoOrderFound(@NotNull Context context, @Nullable Runnable onPositiveClick) { - DialogSimpleMessageHelper.makeWarningDialog(context, - new SpannableString(context.getResources().getText(R.string.no_orders_found_message)), - null, onPositiveClick).show(); + DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_orders_found_message)), + null, onPositiveClick) + .show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");; } public static void showDataSaved(@NotNull Context context, @Nullable Runnable onPositiveClick) { - DialogSimpleMessageHelper.makeSuccessDialog( - context, + DialogSimpleMessageView.makeSuccessDialog( context.getResources().getString(R.string.completed), new SpannableString(context.getResources().getString(R.string.data_saved)), - null, onPositiveClick).show(); + null, onPositiveClick) + .show(((AppCompatActivity) context).getSupportFragmentManager(), "tag"); } public static void showRestError(@NotNull Context context, Exception ex, @Nullable Runnable onPositiveClick) { - DialogSimpleMessageHelper.makeErrorDialog(context, - new SpannableString(ex.getMessage()), null, onPositiveClick).show(); + DialogSimpleMessageView + .makeErrorDialog(new SpannableString(ex.getMessage()), null, onPositiveClick) + .show(((AppCompatActivity) context).getSupportFragmentManager(), "tag"); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageHelper.java deleted file mode 100644 index cae2d7b4..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageHelper.java +++ /dev/null @@ -1,243 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs.base; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.text.SpannableString; -import android.text.Spanned; -import android.view.LayoutInflater; -import android.view.Window; -import android.widget.LinearLayout; -import android.widget.RelativeLayout; -import android.widget.TextView; - -import androidx.annotation.StringRes; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; -import androidx.databinding.DataBindingUtil; - -import java.util.HashMap; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.databinding.DialogBaseBinding; - -/** - * Created by GiuseppeS on 22/03/2018. - */ - -public class DialogSimpleMessageHelper { - - public enum TYPE { - INFO(1), - SUCCESS(2), - WARNING(3), - ERROR(4); - - private int value; - - TYPE(int value) { - this.value = value; - } - - public int getValue() { - return this.value; - } - - public static TYPE fromInt(int value) { - for (TYPE b : TYPE.values()) { - if (b.value == value) return b; - } - return null; - } - } - - private static Dialog makeBase(TYPE type, Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { - LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - - int colorBackgroundTitle = -1; - Drawable titleIconRes = null; - - Dialog dialog = new Dialog(mContext); - - switch (type) { - case INFO: - colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300); - titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null); - break; - - case SUCCESS: - colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300); - titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null); - break; - - case WARNING: - colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600); - titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null); - break; - - case ERROR: - colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300); - titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null); - break; - } - - DialogSimpleMessageViewModel viewModel = new DialogSimpleMessageViewModel(dialog); - - viewModel - .setOnPositive(onPositiveClick) - .setOnNeutral(onNeutralClick) - .setOnNegative(onNegativeClick) - - .setPositiveButtonText(mContext.getText(R.string.ok).toString()) - .setNeutralButtonText(rNeutralButtonString != null && rNeutralButtonString != -1 ? mContext.getText(rNeutralButtonString).toString() : null) - .setNegativeButtonText(mContext.getText(R.string.no).toString()); - - - DialogBaseBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_base, null, false); - - mBinding.setViewmodel(viewModel); - - - Rect displayRectangle = new Rect(); - Window window = ((Activity) mContext).getWindow(); - window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); - mBinding.titleContainer.setMinimumWidth((int) (displayRectangle.width() * 0.8f)); - - - //Title VIEW - mBinding.titleText.setText(titleText); - ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE); - mBinding.titleIcon.setImageTintList(colorStateList); - mBinding.titleIcon.setImageDrawable(titleIconRes); - - mBinding.titleContainer.setBackgroundColor(colorBackgroundTitle); - - //Content View - mBinding.descriptionText.setText(messageText); - - LinearLayout hashMapContainer = mBinding.dialogContentHashmap; - - if (hashmapContent != null) { - for (int i = 0; i < hashmapContent.keySet().size(); i++) { - String currentKey = hashmapContent.keySet().toArray()[i].toString(); - String currentValue = hashmapContent.get(currentKey); - - RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null); - ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey); - ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue); - - hashMapContainer.addView(singleMapContent); - } - } - - dialog.setCancelable(false); - dialog.setCanceledOnTouchOutside(false); - dialog.setContentView(mBinding.getRoot()); - dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - return dialog; - } - - - public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return makeBase(TYPE.INFO, - mContext, - titleText, - messageText, - hashmapContent, - onPositiveClick, - null, -1, null); - } - - - public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { - return makeBase(TYPE.INFO, - mContext, - titleText, - messageText, - hashmapContent, - onPositiveClick, - onNegativeClick, -1, null); - } - - - public static Dialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return makeBase(TYPE.SUCCESS, - mContext, - titleText, - messageText, - hashmapContent, - onPositiveClick, - null, -1, null); - } - - - public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { - return makeBase(TYPE.WARNING, - mContext, - mContext.getText(R.string.warning).toString(), - messageText, - hashmapContent, - onPositiveClick, - () -> { - if (onNegativeClick != null) onNegativeClick.run(); - }, -1, null); - } - - - public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return makeBase(TYPE.WARNING, - mContext, - mContext.getText(R.string.warning).toString(), - messageText, - hashmapContent, - onPositiveClick, - null, -1, null); - } - - public static void showSimpleWarningDialog(Context context, String message) { - makeErrorDialog( - context, - new SpannableString(message), - null, - null).show(); - } - - public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - - return makeBase(TYPE.ERROR, - mContext, - mContext.getText(R.string.ops).toString(), - messageText, - hashmapContent, - onPositiveClick, - null, -1, null); - } - - public static void showSimpleErrorDialog(Context context, String message) { - makeErrorDialog( - context, - new SpannableString(message), - null, - null).show(); - } - - public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) { - - return makeBase(TYPE.ERROR, - mContext, - mContext.getText(R.string.ops).toString(), - messageText, - hashmapContent, - onPositiveClick, - null, rNeutralButtonString, onNeutralClick); - - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java new file mode 100644 index 00000000..3dc54c6b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java @@ -0,0 +1,289 @@ +package it.integry.integrywmsnative.view.dialogs.base; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.Spanned; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.StringRes; +import androidx.appcompat.widget.LinearLayoutCompat; +import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; +import androidx.databinding.DataBindingUtil; + +import java.util.HashMap; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.databinding.DialogBaseBinding; + +/** + * Created by GiuseppeS on 22/03/2018. + */ + +public class DialogSimpleMessageView extends BaseDialogFragment { + + public enum TYPE { + INFO(1), + SUCCESS(2), + WARNING(3), + ERROR(4); + + private int value; + + TYPE(int value) { + this.value = value; + } + + public int getValue() { + return this.value; + } + + public static TYPE fromInt(int value) { + for (TYPE b : TYPE.values()) { + if (b.value == value) return b; + } + return null; + } + } + + + private final TYPE mType; + private final String mTitleText; + private final Spanned mMessageText; + private final HashMap mHashmapContent; + private final Runnable mOnPositiveClick; + private final Runnable mOnNegativeClick; + private final @StringRes Integer mRNeutralButtonString; + private final Runnable mOnNeutralClick; + + + private String positiveButtonText; + private String neutralButtonText; + private String negativeButtonText; + + + private DialogBaseBinding mBindings; + private Context mContext; + + public static DialogSimpleMessageView newInstance(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { + return new DialogSimpleMessageView(type, titleText, messageText, hashmapContent, onPositiveClick, onNegativeClick, rNeutralButtonString, onNeutralClick); + } + + private DialogSimpleMessageView(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { + super(); + + this.mType = type; + this.mTitleText = titleText; + this.mMessageText = messageText; + this.mHashmapContent = hashmapContent; + this.mOnPositiveClick = onPositiveClick; + this.mOnNegativeClick = onNegativeClick; + this.mRNeutralButtonString = rNeutralButtonString; + this.mOnNeutralClick = onNeutralClick; + } + + @Override + public void onStart() { + super.onStart(); + + UtilityDialog.setTo90PercentWidth(this.mContext, this); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mContext = getActivity(); + + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_base, container, false); + + mBindings.setView(this); + mBindings.setLifecycleOwner(this); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + int colorBackgroundTitle = -1; + Drawable titleIconRes = null; + + switch (mType) { + case INFO: + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300); + titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null); + break; + + case SUCCESS: + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300); + titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null); + break; + + case WARNING: + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600); + titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null); + break; + + case ERROR: + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300); + titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null); + break; + } + + this.positiveButtonText = mContext.getText(R.string.ok).toString(); + this.negativeButtonText = mContext.getText(R.string.no).toString(); + + //Title VIEW + mBindings.titleText.setText(mTitleText); + ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE); + mBindings.titleIcon.setImageTintList(colorStateList); + mBindings.titleIcon.setImageDrawable(titleIconRes); + + mBindings.titleContainer.setBackgroundColor(colorBackgroundTitle); + + //Content View + mBindings.descriptionText.setText(mMessageText); + + LinearLayoutCompat hashMapContainer = mBindings.dialogContentHashmap; + + if (mHashmapContent != null) { + for (int i = 0; i < mHashmapContent.keySet().size(); i++) { + String currentKey = mHashmapContent.keySet().toArray()[i].toString(); + String currentValue = mHashmapContent.get(currentKey); + + RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null); + ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey); + ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue); + + hashMapContainer.addView(singleMapContent); + } + } + + return mBindings.getRoot(); + } + + + public boolean isPositiveVisible() { + return mOnPositiveClick != null; + } + + public boolean isNeutralVisible() { + return mOnNeutralClick != null; + } + + public boolean isNegativeVisible() { + return mOnNegativeClick != null; + } + + + public String getPositiveButtonText() { + return positiveButtonText; + } + + public String getNeutralButtonText() { + return mRNeutralButtonString != null && mRNeutralButtonString != -1 ? mContext.getText(mRNeutralButtonString).toString() : null; + } + + public String getNegativeButtonText() { + return negativeButtonText; + } + + public void onPositiveClick() { + dismiss(); + if(mOnPositiveClick != null) mOnPositiveClick.run(); + } + + public void onNeutralClick() { + dismiss(); + if(mOnNeutralClick != null) mOnNeutralClick.run(); + } + + public void onNegativeClick() { + dismiss(); + if(mOnNegativeClick != null) mOnNegativeClick.run(); + } + + public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(TYPE.INFO, + titleText, + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + + public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { + return newInstance(TYPE.INFO, + titleText, + messageText, + hashmapContent, + onPositiveClick, + onNegativeClick, -1, null); + } + + + public static DialogSimpleMessageView makeSuccessDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(TYPE.SUCCESS, + titleText, + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + + public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { + return newInstance(TYPE.WARNING, + UtilityResources.getString(R.string.warning), + messageText, + hashmapContent, + onPositiveClick, + () -> { + if (onNegativeClick != null) onNegativeClick.run(); + }, -1, null); + } + + + public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(TYPE.WARNING, + UtilityResources.getString(R.string.warning), + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + + return newInstance(TYPE.ERROR, + UtilityResources.getString(R.string.ops), + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) { + + return newInstance(TYPE.ERROR, + UtilityResources.getString(R.string.ops), + messageText, + hashmapContent, + onPositiveClick, + null, rNeutralButtonString, onNeutralClick); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageViewModel.java deleted file mode 100644 index 3a217b53..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageViewModel.java +++ /dev/null @@ -1,91 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs.base; - -import android.app.Dialog; - -public class DialogSimpleMessageViewModel { - - - private Dialog mDialog; - - private Runnable onPositive; - private Runnable onNeutral; - private Runnable onNegative; - - private String positiveButtonText; - private String neutralButtonText; - private String negativeButtonText; - - public DialogSimpleMessageViewModel(Dialog dialog) { - mDialog = dialog; - } - - public DialogSimpleMessageViewModel setOnPositive(Runnable onPositive) { - this.onPositive = onPositive; - return this; - } - - public DialogSimpleMessageViewModel setOnNeutral(Runnable onNeutral) { - this.onNeutral = onNeutral; - return this; - } - - public DialogSimpleMessageViewModel setOnNegative(Runnable onNegative) { - this.onNegative = onNegative; - return this; - } - - - - public boolean isPositiveVisible() { - return onPositive != null; - } - - public boolean isNeutralVisible() { - return onNeutral != null; - } - - public boolean isNegativeVisible() { - return onNegative != null; - } - - - public String getPositiveButtonText() { - return positiveButtonText; - } - - public DialogSimpleMessageViewModel setPositiveButtonText(String positiveButtonText) { - this.positiveButtonText = positiveButtonText; - return this; - } - - public String getNeutralButtonText() { - return neutralButtonText; - } - - public DialogSimpleMessageViewModel setNeutralButtonText(String neutralButtonText) { - this.neutralButtonText = neutralButtonText; - return this; - } - - public String getNegativeButtonText() { - return negativeButtonText; - } - - public DialogSimpleMessageViewModel setNegativeButtonText(String negativeButtonText) { - this.negativeButtonText = negativeButtonText; - return this; - } - - public void onPositiveClick() { - mDialog.dismiss(); - if(onPositive != null) onPositive.run(); - } - public void onNeutralClick() { - mDialog.dismiss(); - if(onNeutral != null) onNeutral.run(); - } - public void onNegativeClick() { - mDialog.dismiss(); - if(onNegative != null) onNegative.run(); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java index 09ffdd5a..785fe3e2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/camera_barcode_reader/DialogCameraBarcodeReader.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.view.dialogs.camera_barcode_reader; -import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; @@ -53,7 +52,6 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_camera_barcode_reader, container, false); - UtilityDialog.setTo95PercentWidth(mContext, this); getDialog().setCanceledOnTouchOutside(false); getDialog().setCancelable(false); @@ -68,6 +66,13 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode return mBindings.getRoot(); } + @Override + public void onStart() { + super.onStart(); + + UtilityDialog.setTo95PercentWidth(mContext, this); + } + @Override public void onStop() { super.onStop(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index dff95e00..f6de4bc8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -25,7 +25,7 @@ public class DialogInputQuantityV2DTO { private BigDecimal totalNumCnfAvailable; private BigDecimal qtaCnfAvailable; - private boolean canPartitaMagBeChanged; + private boolean canPartitaMagBeChanged = true; private boolean canLUBeClosed; private String partitaMag; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index fc527cb5..d908afc4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -41,7 +41,7 @@ import it.integry.integrywmsnative.core.model.MtbUntMis; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class DialogInputQuantityV2View extends BaseDialogFragment implements DialogInputQuantityV2ViewModel.Listener { @@ -66,7 +66,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public ObservableField enabledChangePartitaMag = new ObservableField<>(true); public ObservableField enabledLUCloseButton = new ObservableField<>(true); - public Context context; + private Context context; private DialogInputQuantityV2Binding mBindings; private boolean mEnableDataCallback = true; @@ -99,6 +99,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.context = getActivity(); mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false); + mBindings.setLifecycleOwner(this); mBindings.toolbar.setTitle("Inserimento articolo"); @@ -318,6 +319,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia })); + this.mViewModel.setCanPartitaMagBeChanged(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged()); this.enabledChangePartitaMag.set(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged()); this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); } @@ -356,6 +358,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia @Override public void onError(Exception ex) { - DialogSimpleMessageHelper.makeErrorDialog(this.context, new SpannableString(Html.fromHtml(ex.getMessage())), null, null).show(); + DialogSimpleMessageView + .makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null) + .show(getActivity().getSupportFragmentManager(), "tag");; } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java index 0412ed7e..72f7fa1c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java @@ -59,6 +59,7 @@ public class DialogInputQuantityV2ViewModel { private Date internalDataScad; private boolean canOverflowOrderQuantity; + private boolean canPartitaMagBeChanged; private Listener mListener; @@ -135,18 +136,21 @@ public class DialogInputQuantityV2ViewModel { return; } - if (!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { - this.setPartitaMag(ean128Model.BatchLot); - } + if(canPartitaMagBeChanged) { - try { - if (!UtilityString.isNullOrEmpty(ean128Model.BestBefore)) { - this.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore)); - } else if (!UtilityString.isNullOrEmpty(ean128Model.Expiry)) { - this.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry)); + if (!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { + this.setPartitaMag(ean128Model.BatchLot); + } + + try { + if (!UtilityString.isNullOrEmpty(ean128Model.BestBefore)) { + this.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore)); + } else if (!UtilityString.isNullOrEmpty(ean128Model.Expiry)) { + this.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry)); + } + } catch (Exception ex) { + this.mListener.onError(ex); } - } catch (Exception ex) { - this.mListener.onError(ex); } if (ean128Model.Count != null && ean128Model.Count > 0) { @@ -160,6 +164,9 @@ public class DialogInputQuantityV2ViewModel { this.setNumCnf(BigDecimal.ONE); this.setQtaCnf(UtilityBigDecimal.divide(this.getQtaTot(), this.getNumCnf())); } + + this.unlockNumCnf(); + this.unlockQtaCnf(); } this.mListener.onDataChanged(); @@ -262,6 +269,11 @@ public class DialogInputQuantityV2ViewModel { return this; } + public DialogInputQuantityV2ViewModel setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) { + this.canPartitaMagBeChanged = canPartitaMagBeChanged; + return this; + } + public DialogInputQuantityV2ViewModel setPartitaMag(String internalPartitaMag) { this.internalPartitaMag = internalPartitaMag; return this; @@ -289,10 +301,10 @@ public class DialogInputQuantityV2ViewModel { // return; } - if (!this.blockedQtaTot.get() && this.internalQtaCnf != null) - this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf); - else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null) + if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null) this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalQtaTot); + else if (!this.blockedQtaTot.get() && this.internalQtaCnf != null) + this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf); this.mListener.onDataChanged(); } @@ -336,6 +348,18 @@ public class DialogInputQuantityV2ViewModel { this.mListener.onDataChanged(); } + private void unlockNumCnf() { + this.blockedNumCnf.set(false); + } + + private void unlockQtaCnf() { + this.blockedQtaCnf.set(false); + } + + private void unlockQtaCol() { + this.blockedQtaTot.set(false); + } + public boolean validate() { if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java index 38bb45b4..fcb64c3b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java @@ -8,6 +8,7 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; +import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import com.annimon.stream.Stream; @@ -31,7 +32,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.view.dialogs.DialogCommon; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLU; public class DialogScanOrCreateLU { @@ -198,13 +199,13 @@ public class DialogScanOrCreateLU { } else { if(mtbColt.getCodDtip() != null && mShouldCheckIfExistDoc) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)), null, () -> { BarcodeManager.enable(); progressDialog.dismiss(); }) - .show(); + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } else { BarcodeManager.enable(); @@ -231,17 +232,15 @@ public class DialogScanOrCreateLU { if(mtbColt != null) { if(mtbColt.getCodDtip() != null && mShouldCheckIfExistDoc) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)), null, () -> { BarcodeManager.enable(); progressDialog.dismiss(); }) - .show(); + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } else { if(mtbColt.getGestioneEnum() == GestioneEnum.VENDITA && mtbColt.getSegno() == -1) { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(mContext.getResources().getText(R.string.lu_gest_v_loading_alert)), + DialogSimpleMessageView.makeWarningDialog(new SpannableString(mContext.getResources().getText(R.string.lu_gest_v_loading_alert)), null, () -> { BarcodeManager.enable(); sendMtbColt(mtbColt, progressDialog, false); @@ -249,7 +248,7 @@ public class DialogScanOrCreateLU { BarcodeManager.enable(); progressDialog.dismiss(); }) - .show(); + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } else { BarcodeManager.enable(); @@ -287,9 +286,10 @@ public class DialogScanOrCreateLU { private void showTooMuchULFound() { - DialogSimpleMessageHelper.makeWarningDialog(mContext, + DialogSimpleMessageView.makeWarningDialog( new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)), - null, null).show(); + null, null) + .show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"); } private void sendMtbColt(MtbColt mtbColtToSend, Dialog progressDialog, boolean created) { diff --git a/app/src/main/res/layout/activity_picking_resi.xml b/app/src/main/res/layout/activity_picking_resi.xml index db600e6c..bb0ac519 100644 --- a/app/src/main/res/layout/activity_picking_resi.xml +++ b/app/src/main/res/layout/activity_picking_resi.xml @@ -63,6 +63,64 @@ android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"> + + + + + + + + + + + + + + + + + + + + + name="view" + type="it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView" /> - - @@ -38,207 +37,193 @@ android:id="@+id/title_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:src="@drawable/ic_error_white_24dp" - android:layout_margin="24dp"/> + android:layout_margin="24dp" + android:src="@drawable/ic_error_white_24dp" /> - + android:paddingEnd="16dp" + android:paddingBottom="16dp"> - - - + + + + + - - - - + android:paddingLeft="12dp" + android:paddingRight="12dp"> - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:visibility="@{view.negativeVisible && !view.neutralVisible ? View.VISIBLE : View.GONE}"> + + + + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintGuide_percent="0.33" /> + app:layout_constraintGuide_percent="0.66" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintStart_toStartOf="@id/left_buttons_guideline" + app:layout_constraintTop_toTopOf="parent" + app:strokeColor="@color/colorPrimary" /> + app:layout_constraintStart_toStartOf="@id/right_buttons_guideline" + app:layout_constraintTop_toTopOf="parent" /> @@ -247,50 +232,49 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:visibility="@{!viewmodel.negativeVisible && viewmodel.neutralVisible ? View.VISIBLE : View.GONE}"> + android:visibility="@{!view.negativeVisible && view.neutralVisible ? View.VISIBLE : View.GONE}"> + app:layout_constraintGuide_percent="0.5" /> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:strokeColor="@color/colorPrimary" /> + app:layout_constraintStart_toStartOf="@id/center_guideline2" + app:layout_constraintTop_toTopOf="parent" /> - - + - + diff --git a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml index 12a55f0e..b5a1066e 100644 --- a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml +++ b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml @@ -6,7 +6,11 @@ + type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteViewModel" /> + + @@ -29,12 +33,12 @@ android:scrollbars="none" android:paddingEnd="4dp"/> - + + + + + + + + @@ -29,12 +33,12 @@ android:scrollbars="none" android:paddingEnd="4dp"/> - + + + + + +