diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 612cc005..d882780d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -551,6 +551,12 @@ public class Converters { } + @BindingAdapter("visibility") + public static void bindViewVisibility(View view, boolean bool) { + view.setVisibility(bool ? View.VISIBLE : View.GONE); + } + + @BindingAdapter({"reverse_visibility"}) public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) { 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 c9bf2a9e..7eb06e37 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 @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.rest.consumers; import androidx.databinding.ObservableArrayList; +import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -32,6 +33,7 @@ import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.RettificaULDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityDate; @@ -646,4 +648,58 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } + + public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { + MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); + + for (int i = 0; i < sourceMtbColtClone.getMtbColr().size(); i++) { + sourceMtbColtClone.getMtbColr().get(i) + .setMtbAart(null) + .setMtbPartitaMag(null); + } + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.versamentoAutomaticoUL(sourceMtbColtClone).enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "versamentoAutomaticoUL", data -> { + var result = response.body().getDto(); + + List allMtbColr = new ArrayList<>(); + allMtbColr.addAll(result.getSuccess()); + allMtbColr.addAll(result.getFailed()); + + List codMarts = Stream.of(allMtbColr) + .map(x -> x.getCodMart().trim()) + .toList(); + + mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> { + for (var mtbColr : allMtbColr) { + + MtbAart foundMtbAart = null; + + Optional mtbAartOpt = Stream.of(mtbAarts) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) + .findFirst(); + + if(mtbAartOpt.isPresent()){ + foundMtbAart = mtbAartOpt.get(); + } + + mtbColr.setMtbAart(foundMtbAart); + } + + onComplete.run(result); + }, onFailed); + + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + if (onFailed != null) onFailed.run(new Exception(t)); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java index 5de74373..5d30dce7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java @@ -10,6 +10,7 @@ import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.RettificaULDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; @@ -42,4 +43,7 @@ public interface ColliMagazzinoRESTConsumerService { @POST("wms/assegnaLottoSuColloScarico") Call> assegnaLottoSuColloScarico(@Body MtbColt mtbColt); + @POST("wms/versamentoAutomaticoUL") + Call> versamentoAutomaticoUL(@Body MtbColt mtbColt); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java new file mode 100644 index 00000000..6ababa07 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.rest.model; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.MtbColr; + +public class VersamentoAutomaticoULResponseDTO { + + private List success; + private List failed; + + public List getSuccess() { + return success; + } + + public VersamentoAutomaticoULResponseDTO setSuccess(List success) { + this.success = success; + return this; + } + + public List getFailed() { + return failed; + } + + public VersamentoAutomaticoULResponseDTO setFailed(List failed) { + this.failed = failed; + return this; + } +} 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 2538fa60..30dbcaf0 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 @@ -44,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityExceptions; @@ -58,6 +59,7 @@ import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDT import it.integry.integrywmsnative.gest.accettazione_picking.filters.AccettazionePickingFiltroOrdineViewModel; import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterCodArtLayoutView; import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterDescrLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterPosizioneLayoutView; import it.integry.integrywmsnative.gest.accettazione_picking.rest.RecoverMtbColt; import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListAdapter; import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListModel; @@ -68,10 +70,12 @@ import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; 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_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; 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; +import it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView; public class AccettazionePickingActivity extends BaseActivity implements AccettazionePickingViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener { @@ -152,6 +156,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta mAppliedFilterViewModel.getCurrentCodArtPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(onPredicateChanged); + mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(onPredicateChanged); List filterList = Stream.of(AccettazionePickingBindings.AVAILABLE_FILTERS.entrySet()) .map(Map.Entry::getValue) @@ -171,6 +176,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void run() { if (mAppliedFilterViewModel.getCurrentCodArtPredicate().get() == null) { + mViewModel.resetMatchedRows(); filterChipView.disableCloseIcon(); mBindings.filterChipsGroup.removeView(filterChipView); @@ -192,6 +198,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void run() { if (mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null) { + mViewModel.resetMatchedRows(); filterChipView.disableCloseIcon(); mBindings.filterChipsGroup.removeView(filterChipView); @@ -208,6 +215,28 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta }); filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentDescrPredicate().set(null)); break; + case AccettazionePickingBindings.POS_FILTER_ID: + mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentPosPredicate().get() == null) { + mViewModel.resetMatchedRows(); + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentPosPredicate().set(null)); + break; } this.mBindings.filterChipsGroup.addView(filterChipView); @@ -250,13 +279,25 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) .toList()); break; + case AccettazionePickingBindings.POS_FILTER_ID: + ((FilterPosizioneLayoutView) filterLayoutView) + .setAll(mAppliedFilterViewModel.getAllPos()) + .setAvailable(mAppliedFilterViewModel.getAvailablePos()) + .setOnFilterApplied(mAppliedFilterViewModel::setPosFilter) + .setPreselected(Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentPosPredicate().get() == null ? + x -> false : + mAppliedFilterViewModel.getCurrentPosPredicate().get()) + .map(x -> x.getMtbAart().getPosizione()) + .toList()); + break; } filterLayoutView.show(getSupportFragmentManager(), "TAG"); } - @Override + @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; @@ -288,7 +329,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta // Handle item selection switch (item.getItemId()) { case R.id.action_filter: - showOrderDialog(); + showOrderByDialog(); return true; default: return super.onOptionsItemSelected(item); @@ -326,7 +367,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta } private void refreshList() { - this.onLoadingStarted(); + //this.onLoadingStarted(); //new Thread(() -> { @@ -346,7 +387,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mAccettazioneMutableData.addAll(list); this.noItemsToPick.set(!isThereAnyItemToPick(tmpList)); - this.onLoadingEnded(); + //this.onLoadingEnded(); }); } @@ -388,7 +429,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); - if(x.getMtbAart() != null) accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); + if (x.getMtbAart() != null) + accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; @@ -452,7 +494,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); - if(x.getMtbAart() != null) accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); + if (x.getMtbAart() != null) + accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; @@ -667,8 +710,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity); } - private void showOrderDialog() { - + private void showOrderByDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle(this.getText(R.string.action_orderBy)) .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> { @@ -680,7 +722,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta dialog.show(); } - public void startListaBancaliRegistratiActivity(ArrayList mtbColts) { Intent myIntent = ListaBancaliActivity.createIntent(this, @@ -713,7 +754,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta null, R.string.button_ignore_print, onComplete) - .show(getSupportFragmentManager(), "tag"); + .show(getSupportFragmentManager(), "tag"); } @Override @@ -741,9 +782,19 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mViewModel.closeLU(); } + @Override + public void onVersamentoAutomaticoULRequest(RunnableArgs onComplete) { + runOnUiThread(() -> { + DialogAskShouldVersamentoAutomaticoULView.newInstance(onComplete) + .show(getSupportFragmentManager(), "tag"); + }); + } + @Override public void onNoteAggiuntiveRequest(RunnableArgs onComplete) { - NoteAggiuntiveLUDialog.make(this, onComplete::run, () -> onComplete.run(null)).show(); + runOnUiThread(() -> { + NoteAggiuntiveLUDialog.make(this, onComplete).show(); + }); } @Override @@ -798,44 +849,72 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void onRowSaved() { - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + runOnUiThread(() -> { + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + }); } @Override - public void onFilterApplied(String newValue) { - this.mBindings.filteredArtsInListExpandableLayout.expand(true); - this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : ""); + public void onFilterCodMartApplied(String codMartToFilter) { + runOnUiThread(() -> { + var codMarts = new ArrayList(); + codMarts.add(codMartToFilter); + + this.mAppliedFilterViewModel.setCodArtFilter(codMarts); + }); } @Override - public void onFilterRemoved() { - mBindings.filteredArtsInListExpandableLayout.collapse(true); + public void onFilterPosizioneApplied(String posizioneToFilter) { + runOnUiThread(() -> { + var posizioni = new ArrayList(); + posizioni.add(posizioneToFilter); + + this.mAppliedFilterViewModel.setPosFilter(posizioni); + }); + } + + @Override + public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { + + runOnUiThread(() -> { + DialogVersamentoAutomaticoULDoneView + .newInstance(versamentoAutomaticoULResponseDTO, onComplete) + .show(getSupportFragmentManager(), "tag"); + }); + } @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { - String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), - null, - () -> onComplete.run(true), - () -> onComplete.run(false) - ).show(getSupportFragmentManager(), "tag"); + runOnUiThread(() -> { + String text = getResources().getString(R.string.alert_delete_mtb_colr); + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), + null, + () -> onComplete.run(true), + () -> onComplete.run(false) + ).show(getSupportFragmentManager(), "tag"); + }); } @Override public void onLUOpened(MtbColt mtbColt) { - noLUPresent.set(false); - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + runOnUiThread(() -> { + noLUPresent.set(false); + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); - this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); + }); } @Override public void onLUClosed() { - noLUPresent.set(true); - this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); + runOnUiThread(() -> { + noLUPresent.set(true); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); - if (this.mShouldCloseActivity) super.onBackPressed(); + if (this.mShouldCloseActivity) super.onBackPressed(); + }); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java index f09189db..3fdb02c2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java @@ -4,12 +4,14 @@ import java.util.HashMap; import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterCodArtLayoutView; import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterDescrLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterPosizioneLayoutView; import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; public class AccettazionePickingBindings { public static final int COD_ART_FILTER_ID = 0; public static final int DESCR_FILTER_ID = 1; + public static final int POS_FILTER_ID = 2; public static final HashMap AVAILABLE_FILTERS = new HashMap<>() { { @@ -24,6 +26,12 @@ public class AccettazionePickingBindings { .setPosizione(1) .setFilterChipText("Descrizione articolo") .setFilterLayoutView(new FilterDescrLayoutView())); + + put(POS_FILTER_ID, new FilterChipDTO() + .setID(POS_FILTER_ID) + .setPosizione(1) + .setFilterChipText("Posizione") + .setFilterLayoutView(new FilterPosizioneLayoutView())); }}; } 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 cc6e5df7..d72c941b 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 @@ -42,11 +42,13 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityThread; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO; @@ -243,6 +245,10 @@ public class AccettazionePickingViewModel { this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Applico filtro per posizione + this.executeEtichettaPosizione(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); @@ -293,6 +299,15 @@ public class AccettazionePickingViewModel { }, this::sendError); } + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + var optionalPos = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .findFirst(); + + this.sendFilterPosizioneApplied(optionalPos.get().getPosizione()); + onComplete.run(); + } private void loadArticolo(String barcodeProd, PickDataDTO pickData, Runnable onComplete) { if (barcodeProd.length() == 14) { @@ -332,16 +347,14 @@ public class AccettazionePickingViewModel { } else if (matchedRows.size() == 1) { this.dispatchOrdineRow(matchedRows.get(0)); } else { - List pickingList = mPickingList.getValue(); + //So che il codMart sarà solo 1 + var firstCodMart = Stream.of(matchedRows) + .map(x -> x.getSitArtOrdDTO().getCodMart()) + .distinct() + .findFirst() + .get(); - 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); + this.sendFilterCodMartApplied(firstCodMart); } } @@ -571,64 +584,67 @@ public class AccettazionePickingViewModel { public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { this.sendOnLoadingStarted(); - String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione(); + UtilityThread.executeParallel(() -> { - final MtbColr mtbColr = new MtbColr() - .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) - .setPartitaMag(partitaMag) - .setDataScadPartita(dataScad) - .setQtaCol(qtaTot) - .setQtaCnf(qtaCnf) - .setNumCnf(numCnf) - .setGestioneRif(gestioneRif) - .setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom()) - .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) - .setDatetimeRow(UtilityDate.getDateInstance()) - .setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd()) - .setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd()) - .setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd()); + String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione(); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad) + .setQtaCol(qtaTot) + .setQtaCnf(qtaCnf) + .setNumCnf(numCnf) + .setGestioneRif(gestioneRif) + .setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom()) + .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()) + .setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd()) + .setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd()) + .setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd()); - this.addHistoryItem(mtbColr); + this.addHistoryItem(mtbColr); - mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); - cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); + MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); - cloneMtbColt.setMtbColr(new ObservableArrayList<>()); - cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); - if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { - resetMatchedRows(); - this.sendOnLoadingEnded(); + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + resetMatchedRows(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(); - return; - } + if (shouldCloseLU) closeLU(); + return; + } - mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { + mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { - mtbColr - .setDataCollo(value.getDataColloS()) - .setNumCollo(value.getNumCollo()) - .setGestione(value.getGestione()) - .setSerCollo(value.getSerCollo()) - .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) - .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) - .setMtbAart(pickingObjectDTO.getMtbAart()); + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) + .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) + .setMtbAart(pickingObjectDTO.getMtbAart()); - pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); - mCurrentMtbColt.getMtbColr().add(mtbColr); + pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); + mCurrentMtbColt.getMtbColr().add(mtbColr); - //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei - resetMatchedRows(); + //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei + resetMatchedRows(); - this.sendOnRowSaved(); - this.sendOnLoadingEnded(); + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(); - }, this::sendError); + if (shouldCloseLU) closeLU(); + }, this::sendError); + }, false); } @@ -772,19 +788,40 @@ public class AccettazionePickingViewModel { } else { mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { - if (!mCurrentMtbColt.getDisablePrint()) { - printCollo(this::postCloseOperations); - } else { - postCloseOperations(); - } + Runnable onVersamentoCompleted = () -> { + if (!mCurrentMtbColt.getDisablePrint()) { + printCollo(this::postCloseOperations); + } else { + postCloseOperations(); + } + + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }; + + sendVersamentoAutomaticoULRequest(response -> { + if (response) { + versaAutomaticamenteUL(onVersamentoCompleted); + } else { + onVersamentoCompleted.run(); + } + }); + - this.sendLUClosed(); - this.sendOnLoadingEnded(); }, this::sendError); } }, this::sendError); } + public void versaAutomaticamenteUL(Runnable onComplete) { + if (mCurrentMtbColt == null) return; + + mColliMagazzinoRESTConsumer.versamentoAutomaticoUL(mCurrentMtbColt, versamentoResult -> { + this.notifyVersamentoAutomaticoResult(versamentoResult, onComplete); + }, this::sendError); + } + + private void printCollo(Runnable onComplete) { MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); @@ -816,12 +853,10 @@ public class AccettazionePickingViewModel { public void resetMatchedRows() { for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) { pickingObjectDTO - .setTempPickData(null) - .setHidden(false); + .setTempPickData(null); } this.mPickingList.postValue(this.mPickingList.getValue()); - this.sendFilterRemoved(); } private void addHistoryItem(@NonNull MtbColr mtbColr) { @@ -857,6 +892,10 @@ public class AccettazionePickingViewModel { if (this.mListener != null) mListener.onLoadingEnded(); } + private void sendVersamentoAutomaticoULRequest(RunnableArgs onComplete) { + if (this.mListener != null) this.mListener.onVersamentoAutomaticoULRequest(onComplete); + } + private void sendOnNoteAggiuntiveRequest(RunnableArgs onComplete) { if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete); } @@ -925,26 +964,32 @@ public class AccettazionePickingViewModel { if (this.mListener != null) mListener.onRowSaved(); } - private void sendFilterApplied(String newValue) { - if (this.mListener != null) mListener.onFilterApplied(newValue); + private void sendFilterCodMartApplied(String codMart) { + if (this.mListener != null) mListener.onFilterCodMartApplied(codMart); } - private void sendFilterRemoved() { - if (this.mListener != null) mListener.onFilterRemoved(); + private void sendFilterPosizioneApplied(String posizione) { + if (this.mListener != null) mListener.onFilterPosizioneApplied(posizione); } private void sendMtbColrDeleteRequest(RunnableArgs onComplete) { if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); } - public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener - listener) { + private void notifyVersamentoAutomaticoResult(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { + if (this.mListener != null) + mListener.onULVersata(versamentoAutomaticoULResponseDTO, onComplete); + } + + public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener listener) { this.mListener = listener; return this; } public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener { + void onVersamentoAutomaticoULRequest(RunnableArgs onComplete); + void onNoteAggiuntiveRequest(RunnableArgs onComplete); void onError(Exception ex); @@ -969,9 +1014,11 @@ public class AccettazionePickingViewModel { boolean canOverflowQuantity, RunnableArgss onComplete); - void onFilterApplied(String newValue); + void onFilterCodMartApplied(String codMartToFilter); - void onFilterRemoved(); + void onFilterPosizioneApplied(String posizioneToFilter); + + void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java index 741841bf..68fbcceb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java @@ -9,12 +9,14 @@ import com.annimon.stream.function.Predicate; import java.util.List; import java.util.Objects; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; public class AccettazionePickingFiltroOrdineViewModel { private final ObservableField> currentCodArtPredicate = new ObservableField<>(); private final ObservableField> currentDescrPredicate = new ObservableField<>(); + private final ObservableField> currentPosPredicate = new ObservableField<>(); private List initialOrderList; @@ -30,7 +32,6 @@ public class AccettazionePickingFiltroOrdineViewModel { } - public void setCodArtFilter(List codArts) { if (codArts == null || codArts.isEmpty()) currentCodArtPredicate.set(null); else { @@ -47,18 +48,28 @@ public class AccettazionePickingFiltroOrdineViewModel { } + public void setPosFilter(List pos) { + if (pos == null || pos.isEmpty()) currentPosPredicate.set(null); + else { + currentPosPredicate.set(o -> o.getMtbAart() != null && o.getMtbAart().getPosizione() == null ? pos.contains(null) : pos.contains(o.getMtbAart().getPosizione())); + } + } + + public void applyAllTests() { List returnList = null; if (currentCodArtPredicate.get() == null && - currentDescrPredicate.get() == null) { + currentDescrPredicate.get() == null && + currentPosPredicate.get() == null) { returnList = this.initialOrderList; } else { Stream tmpStream = Stream.of(this.initialOrderList) .filter(x -> (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && - (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) ); returnList = tmpStream.toList(); @@ -75,6 +86,10 @@ public class AccettazionePickingFiltroOrdineViewModel { return currentDescrPredicate; } + public ObservableField> getCurrentPosPredicate() { + return currentPosPredicate; + } + public List getAllCodArts() { return Stream .of(Objects.requireNonNull(initialOrderList)) @@ -87,12 +102,14 @@ public class AccettazionePickingFiltroOrdineViewModel { public List getAvailableCodArts() { - if (currentDescrPredicate.get() == null) { + if (currentDescrPredicate.get() == null && + currentPosPredicate.get() == null) { return getAllCodArts(); } else { return Stream.of(this.initialOrderList) .filter(x -> - (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) ) .map(x -> x.getSitArtOrdDTO().getCodMart()) .distinct() @@ -112,12 +129,14 @@ public class AccettazionePickingFiltroOrdineViewModel { public List getAvailableDescrs() { - if (currentCodArtPredicate.get() == null) { + if (currentCodArtPredicate.get() == null && + currentPosPredicate.get() == null) { return getAllDescrs(); } else { return Stream.of(this.initialOrderList) .filter(x -> - (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) + (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) ) .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) .distinct() @@ -125,4 +144,31 @@ public class AccettazionePickingFiltroOrdineViewModel { } } + public List getAllPos() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getMtbAart() != null && x.getMtbAart().getPosizione() != null) + .sortBy(x -> UtilityString.isNull(x.getMtbAart().getPosizione(), "000000")) + .map(x -> x.getMtbAart().getPosizione() != null ? x.getMtbAart().getPosizione() : null) + .distinct() + .toList(); + } + + public List getAvailablePos() { + + if (currentCodArtPredicate.get() == null && + currentDescrPredicate.get() == null) { + return getAllPos(); + } else { + return Stream.of(this.initialOrderList) + .filter(x -> + (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) + ) + .map(x -> x.getMtbAart().getPosizione()) + .distinct() + .toList(); + } + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java new file mode 100644 index 00000000..19d96720 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java @@ -0,0 +1,186 @@ +package it.integry.integrywmsnative.gest.accettazione_picking.filters; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.ComparatorCompat; +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBoolean; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.LayoutFilterPosizioneBinding; +import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView; + +public class FilterPosizioneLayoutView extends FilterLayoutView { + + protected LayoutFilterPosizioneBinding mBindings; + + private List all; + private List available; + private List preselected = new ArrayList<>(); + private List hidden = new ArrayList<>(); + private final MutableLiveData> listModel = new MutableLiveData<>(); + + private RunnableArgs> onFilterApplied; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_posizione, container, false); + this.mBindings.setView(this); + + refreshList(); + + this.setSearchView(this.mBindings.searchView, newFilter -> { + hidden = Stream.of(all) + .filter(x -> !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && + !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) + .toList(); + + refreshList(); + }); + + + new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item) + .map(ListModel.class, R.layout.layout_filter_posizione__list_item) + .into(this.mBindings.recyclerview); + + return mBindings.getRoot(); + } + + + public void onConfirm() { + if (onFilterApplied == null) return; + + this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + .filter(x -> x.selected.get()) + .map(x -> x.originalModel) + .toList()); + + dismiss(); + } + + private void refreshList() { + ComparatorCompat c = + ComparatorCompat + .chain(new ComparatorCompat((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> + UtilityString.isNull(y.getOriginalModel(), "000000").compareToIgnoreCase(UtilityString.isNull(x.getOriginalModel(), "000000")))) + .reversed(); + + + listModel.setValue(Stream.of(getAll()) + .filter(x -> !hidden.contains(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preselected.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preselected.add(x); + else preselected.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(available.contains(x))) + .setOriginalModel(x); + }) + .sorted(c) + .toList()); + } + + public List getAll() { + return all; + } + + public FilterPosizioneLayoutView setAll(List all) { + this.all = all; + return this; + } + + public List getAvailable() { + return available; + } + + public FilterPosizioneLayoutView setAvailable(List available) { + this.available = available; + return this; + } + + public List getPreselected() { + return preselected; + } + + public FilterPosizioneLayoutView setPreselected(List preselected) { + this.preselected = preselected; + return this; + } + + public RunnableArgs> getOnFilterApplied() { + return onFilterApplied; + } + + public FilterPosizioneLayoutView setOnFilterApplied(RunnableArgs> onFilterApplied) { + this.onFilterApplied = onFilterApplied; + return this; + } + + public List getHidden() { + return hidden; + } + + public FilterPosizioneLayoutView setHidden(List hidden) { + this.hidden = hidden; + return this; + } + + public static class ListModel { + private BindableBoolean selected = new BindableBoolean(); + private BindableBoolean enabled = new BindableBoolean(); + private String originalModel; + + public BindableBoolean getSelected() { + return selected; + } + + public ListModel setSelected(BindableBoolean selected) { + this.selected = selected; + return this; + } + + public BindableBoolean getEnabled() { + return enabled; + } + + public ListModel setEnabled(BindableBoolean enabled) { + this.enabled = enabled; + return this; + } + + public String getOriginalModel() { + return originalModel; + } + + public ListModel setOriginalModel(String originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} 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 a88ded8a..af2c9bba 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 @@ -851,8 +851,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF private void initMtbGrupsCache(Runnable onComplete) { var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) - .flatMap(x -> Stream.of(x.getAvailableClassMerc())) + .flatMap(x -> Stream.of(x.getAvailableClassMerc() != null ? x.getAvailableClassMerc() : new ArrayList<>())) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp) + .withoutNulls() + .distinct() .toList(); this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java index 11629b15..e3f84f58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java @@ -648,7 +648,10 @@ public class VenditaFiltroOrdiniViewModel { public List getAllGruppoMerc(List mtbGrupFullList) { var codMgrp = Stream.of(initialOrderList) - .flatMap(ordiniUscitaElencoDTO -> Stream.of(ordiniUscitaElencoDTO.getAvailableClassMerc())) + .flatMap(ordiniUscitaElencoDTO -> + Stream.of(ordiniUscitaElencoDTO.getAvailableClassMerc() != null ? + ordiniUscitaElencoDTO.getAvailableClassMerc() : + new ArrayList<>())) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp) .withoutNulls() .distinct() 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 3d4cfb24..7607dec1 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 @@ -276,8 +276,8 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag } @Override - public void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { - NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show(); + public void onNoteAggiuntiveRequired(RunnableArgs onComplete) { + NoteAggiuntiveLUDialog.make(this, onComplete).show(); } @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 9e4afb7d..be32fd1e 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 @@ -185,9 +185,6 @@ public class PickingResiViewModel { }, this::sendError); - }, () -> { - this.sendLUClosed(); - this.sendOnLoadingEnded(); }); } }, this::sendError); @@ -720,8 +717,8 @@ public class PickingResiViewModel { return mPickingList; } - private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { - if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort); + private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete) { + if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete); } private void sendOnLoadingStarted() { @@ -798,7 +795,7 @@ public class PickingResiViewModel { public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { - void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort); + void onNoteAggiuntiveRequired(RunnableArgs onComplete); void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java index c06baf0a..159e227d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java @@ -82,7 +82,7 @@ public class PickingResiRESTConsumer { if(onComplete != null) onComplete.run(values); - } + } else onComplete.run(new ArrayList<>()); }, onFailed); 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 7aba093e..83b3f6de 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 @@ -174,7 +174,7 @@ public class SpedizioneViewModel { private void getEmptyPickingList(List sitArtOrdList, RunnableArgs> onComplete) { List codMarts = Stream.of(sitArtOrdList) - .map(SitArtOrdDTO::getCodMart) + .map(x -> x.getCodMart().trim()) .toList(); this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> { @@ -183,7 +183,7 @@ public class SpedizioneViewModel { MtbAart mtbAart = null; for (MtbAart mtbAartItem : listMtbAarts) { - if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { + if (mtbAartItem.getCodMart().trim().equalsIgnoreCase(sitArtOrdDTO.getCodMart().trim())) { mtbAart = mtbAartItem; break; } diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/ExpandableLayout.java b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/ExpandableLayout.java new file mode 100644 index 00000000..68642696 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/ExpandableLayout.java @@ -0,0 +1,333 @@ +package it.integry.integrywmsnative.ui.expandablelayout; + +import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.COLLAPSED; +import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.COLLAPSING; +import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.EXPANDED; +import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.EXPANDING; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.TypedArray; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.Interpolator; +import android.widget.FrameLayout; +import android.widget.LinearLayout; + +import it.integry.integrywmsnative.R; + +public class ExpandableLayout extends FrameLayout { + public interface State { + int COLLAPSED = 0; + int COLLAPSING = 1; + int EXPANDING = 2; + int EXPANDED = 3; + } + + public static final String KEY_SUPER_STATE = "super_state"; + public static final String KEY_EXPANSION = "expansion"; + + public static final int HORIZONTAL = 0; + public static final int VERTICAL = 1; + + private static final int DEFAULT_DURATION = 300; + + private int duration = DEFAULT_DURATION; + private float parallax; + private float expansion; + private int orientation; + private int state; + + private Interpolator interpolator = new FastOutSlowInInterpolator(); + private ValueAnimator animator; + + private ExpandableLayout.OnExpansionUpdateListener listener; + + public ExpandableLayout(Context context) { + this(context, null); + } + + public ExpandableLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + if (attrs != null) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ExpandableLayout); + duration = a.getInt(R.styleable.ExpandableLayout_el_duration, DEFAULT_DURATION); + expansion = a.getBoolean(R.styleable.ExpandableLayout_el_expanded, false) ? 1 : 0; + orientation = a.getInt(R.styleable.ExpandableLayout_android_orientation, VERTICAL); + parallax = a.getFloat(R.styleable.ExpandableLayout_el_parallax, 1); + a.recycle(); + + state = expansion == 0 ? COLLAPSED : EXPANDED; + setParallax(parallax); + } + } + + @Override + protected Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + Bundle bundle = new Bundle(); + + expansion = isExpanded() ? 1 : 0; + + bundle.putFloat(KEY_EXPANSION, expansion); + bundle.putParcelable(KEY_SUPER_STATE, superState); + + return bundle; + } + + @Override + protected void onRestoreInstanceState(Parcelable parcelable) { + Bundle bundle = (Bundle) parcelable; + expansion = bundle.getFloat(KEY_EXPANSION); + state = expansion == 1 ? EXPANDED : COLLAPSED; + Parcelable superState = bundle.getParcelable(KEY_SUPER_STATE); + + super.onRestoreInstanceState(superState); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + int width = getMeasuredWidth(); + int height = getMeasuredHeight(); + + int size = orientation == LinearLayout.HORIZONTAL ? width : height; + + setVisibility(expansion == 0 && size == 0 ? GONE : VISIBLE); + + int expansionDelta = size - Math.round(size * expansion); + if (parallax > 0) { + float parallaxDelta = expansionDelta * parallax; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (orientation == HORIZONTAL) { + int direction = -1; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1 && getLayoutDirection() == LAYOUT_DIRECTION_RTL) { + direction = 1; + } + child.setTranslationX(direction * parallaxDelta); + } else { + child.setTranslationY(-parallaxDelta); + } + } + } + + if (orientation == HORIZONTAL) { + setMeasuredDimension(width - expansionDelta, height); + } else { + setMeasuredDimension(width, height - expansionDelta); + } + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + if (animator != null) { + animator.cancel(); + } + super.onConfigurationChanged(newConfig); + } + + /** + * Get expansion state + * + * @return one of {@link ExpandableLayout.State} + */ + public int getState() { + return state; + } + + public boolean isExpanded() { + return state == EXPANDING || state == EXPANDED; + } + + public void toggle() { + toggle(true); + } + + public void toggle(boolean animate) { + if (isExpanded()) { + collapse(animate); + } else { + expand(animate); + } + } + + public void expand() { + expand(true); + } + + public void expand(boolean animate) { + setExpanded(true, animate); + } + + public void collapse() { + collapse(true); + } + + public void collapse(boolean animate) { + setExpanded(false, animate); + } + + /** + * Convenience method - same as calling setExpanded(expanded, true) + */ + public void setExpanded(boolean expand) { + setExpanded(expand, true); + } + + public void setExpanded(boolean expand, boolean animate) { + if (expand == isExpanded()) { + return; + } + + int targetExpansion = expand ? 1 : 0; + if (animate) { + animateSize(targetExpansion); + } else { + setExpansion(targetExpansion); + } + } + + public int getDuration() { + return duration; + } + + public void setInterpolator(Interpolator interpolator) { + this.interpolator = interpolator; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public float getExpansion() { + return expansion; + } + + public void setExpansion(float expansion) { + if (this.expansion == expansion) { + return; + } + + // Infer state from previous value + float delta = expansion - this.expansion; + if (expansion == 0) { + state = COLLAPSED; + } else if (expansion == 1) { + state = EXPANDED; + } else if (delta < 0) { + state = COLLAPSING; + } else if (delta > 0) { + state = EXPANDING; + } + + setVisibility(state == COLLAPSED ? GONE : VISIBLE); + this.expansion = expansion; + requestLayout(); + + if (listener != null) { + listener.onExpansionUpdate(expansion, state); + } + } + + public float getParallax() { + return parallax; + } + + public void setParallax(float parallax) { + // Make sure parallax is between 0 and 1 + parallax = Math.min(1, Math.max(0, parallax)); + this.parallax = parallax; + } + + public int getOrientation() { + return orientation; + } + + public void setOrientation(int orientation) { + if (orientation < 0 || orientation > 1) { + throw new IllegalArgumentException("Orientation must be either 0 (horizontal) or 1 (vertical)"); + } + this.orientation = orientation; + } + + public void setOnExpansionUpdateListener(ExpandableLayout.OnExpansionUpdateListener listener) { + this.listener = listener; + } + + private void animateSize(int targetExpansion) { + if (animator != null) { + animator.cancel(); + animator = null; + } + + setLayerType(View.LAYER_TYPE_HARDWARE, null); + + animator = ValueAnimator.ofFloat(expansion, targetExpansion); + animator.setInterpolator(interpolator); + animator.setDuration(duration); + + animator.addUpdateListener(valueAnimator -> setExpansion((float) valueAnimator.getAnimatedValue())); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + + setLayerType(View.LAYER_TYPE_NONE, null); + } + }); + + animator.addListener(new ExpandableLayout.ExpansionListener(targetExpansion)); + + animator.start(); + } + + public interface OnExpansionUpdateListener { + /** + * Callback for expansion updates + * + * @param expansionFraction Value between 0 (collapsed) and 1 (expanded) representing the the expansion progress + * @param state One of {@link ExpandableLayout.State} repesenting the current expansion state + */ + void onExpansionUpdate(float expansionFraction, int state); + } + + private class ExpansionListener implements Animator.AnimatorListener { + private int targetExpansion; + private boolean canceled; + + public ExpansionListener(int targetExpansion) { + this.targetExpansion = targetExpansion; + } + + @Override + public void onAnimationStart(Animator animation) { + state = targetExpansion == 0 ? COLLAPSING : EXPANDING; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (!canceled) { + state = targetExpansion == 0 ? COLLAPSED : EXPANDED; + setExpansion(targetExpansion); + } + } + + @Override + public void onAnimationCancel(Animator animation) { + canceled = true; + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + } +} + diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java new file mode 100644 index 00000000..08647a29 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java @@ -0,0 +1,45 @@ +package it.integry.integrywmsnative.ui.expandablelayout; + +public class FastOutSlowInInterpolator extends LookupTableInterpolator { + + /** + * Lookup table values sampled with x at regular intervals between 0 and 1 for a total of + * 201 points. + */ + private static final float[] VALUES = new float[] { + 0.0000f, 0.0001f, 0.0002f, 0.0005f, 0.0009f, 0.0014f, 0.0020f, + 0.0027f, 0.0036f, 0.0046f, 0.0058f, 0.0071f, 0.0085f, 0.0101f, + 0.0118f, 0.0137f, 0.0158f, 0.0180f, 0.0205f, 0.0231f, 0.0259f, + 0.0289f, 0.0321f, 0.0355f, 0.0391f, 0.0430f, 0.0471f, 0.0514f, + 0.0560f, 0.0608f, 0.0660f, 0.0714f, 0.0771f, 0.0830f, 0.0893f, + 0.0959f, 0.1029f, 0.1101f, 0.1177f, 0.1257f, 0.1339f, 0.1426f, + 0.1516f, 0.1610f, 0.1707f, 0.1808f, 0.1913f, 0.2021f, 0.2133f, + 0.2248f, 0.2366f, 0.2487f, 0.2611f, 0.2738f, 0.2867f, 0.2998f, + 0.3131f, 0.3265f, 0.3400f, 0.3536f, 0.3673f, 0.3810f, 0.3946f, + 0.4082f, 0.4217f, 0.4352f, 0.4485f, 0.4616f, 0.4746f, 0.4874f, + 0.5000f, 0.5124f, 0.5246f, 0.5365f, 0.5482f, 0.5597f, 0.5710f, + 0.5820f, 0.5928f, 0.6033f, 0.6136f, 0.6237f, 0.6335f, 0.6431f, + 0.6525f, 0.6616f, 0.6706f, 0.6793f, 0.6878f, 0.6961f, 0.7043f, + 0.7122f, 0.7199f, 0.7275f, 0.7349f, 0.7421f, 0.7491f, 0.7559f, + 0.7626f, 0.7692f, 0.7756f, 0.7818f, 0.7879f, 0.7938f, 0.7996f, + 0.8053f, 0.8108f, 0.8162f, 0.8215f, 0.8266f, 0.8317f, 0.8366f, + 0.8414f, 0.8461f, 0.8507f, 0.8551f, 0.8595f, 0.8638f, 0.8679f, + 0.8720f, 0.8760f, 0.8798f, 0.8836f, 0.8873f, 0.8909f, 0.8945f, + 0.8979f, 0.9013f, 0.9046f, 0.9078f, 0.9109f, 0.9139f, 0.9169f, + 0.9198f, 0.9227f, 0.9254f, 0.9281f, 0.9307f, 0.9333f, 0.9358f, + 0.9382f, 0.9406f, 0.9429f, 0.9452f, 0.9474f, 0.9495f, 0.9516f, + 0.9536f, 0.9556f, 0.9575f, 0.9594f, 0.9612f, 0.9629f, 0.9646f, + 0.9663f, 0.9679f, 0.9695f, 0.9710f, 0.9725f, 0.9739f, 0.9753f, + 0.9766f, 0.9779f, 0.9791f, 0.9803f, 0.9815f, 0.9826f, 0.9837f, + 0.9848f, 0.9858f, 0.9867f, 0.9877f, 0.9885f, 0.9894f, 0.9902f, + 0.9910f, 0.9917f, 0.9924f, 0.9931f, 0.9937f, 0.9944f, 0.9949f, + 0.9955f, 0.9960f, 0.9964f, 0.9969f, 0.9973f, 0.9977f, 0.9980f, + 0.9984f, 0.9986f, 0.9989f, 0.9991f, 0.9993f, 0.9995f, 0.9997f, + 0.9998f, 0.9999f, 0.9999f, 1.0000f, 1.0000f + }; + + public FastOutSlowInInterpolator() { + super(VALUES); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java new file mode 100644 index 00000000..bcd182f2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.ui.expandablelayout; + +import android.view.animation.Interpolator; + +abstract class LookupTableInterpolator implements Interpolator { + + private final float[] mValues; + private final float mStepSize; + + public LookupTableInterpolator(float[] values) { + mValues = values; + mStepSize = 1f / (mValues.length - 1); + } + + @Override + public float getInterpolation(float input) { + if (input >= 1.0f) { + return 1.0f; + } + if (input <= 0f) { + return 0f; + } + + // Calculate index - We use min with length - 2 to avoid IndexOutOfBoundsException when + // we lerp (linearly interpolate) in the return statement + int position = Math.min((int) (input * (mValues.length - 1)), mValues.length - 2); + + // Calculate values to account for small offsets as the lookup table has discrete values + float quantized = position * mStepSize; + float diff = input - quantized; + float weight = diff / mStepSize; + + // Linearly interpolate between the table values + return mValues[position] + weight * (mValues[position + 1] - mValues[position]); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java index db114b7b..fa959fbc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java @@ -77,12 +77,14 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie this.mViewModel.getObservableMtbColt().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable sender, int propertyId) { - if(mViewModel.getObservableMtbColt().get() != null) { + var mtbColt = mViewModel.getObservableMtbColt().get(); + + if(mtbColt != null) { initAdapter(); onMtbColrItemChanged(); - mViewModel.getObservableMtbColt().get().getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { + mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { @Override public void onChanged(ObservableList sender) { onMtbColrItemChanged(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java new file mode 100644 index 00000000..f201a127 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java @@ -0,0 +1,75 @@ +package it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; + +import org.jetbrains.annotations.NotNull; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.DialogAskShouldVersamentoAutomaticoUlBinding; + +public class DialogAskShouldVersamentoAutomaticoULView extends BaseDialogFragment { + + private RunnableArgs mOnDismiss; + private DialogAskShouldVersamentoAutomaticoUlBinding mBindings; + + private boolean returnValue = false; + + public static DialogAskShouldVersamentoAutomaticoULView newInstance(@NotNull RunnableArgs onDismiss) { + return new DialogAskShouldVersamentoAutomaticoULView(onDismiss); + } + + private DialogAskShouldVersamentoAutomaticoULView(@NotNull RunnableArgs onDismiss) { + super(); + + this.mOnDismiss = onDismiss; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_should_versamento_automatico_ul, container, false); + mBindings.setLifecycleOwner(this); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + mBindings.setView(this); + + return mBindings.getRoot(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + + if (mOnDismiss != null) { + this.mOnDismiss.run(returnValue); + } + } + + + public void confirm() { + this.returnValue = true; + dismiss(); + } + + public void abort() { + this.returnValue = false; + dismiss(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java index 1bc2546a..01f390d5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java @@ -10,21 +10,23 @@ import android.view.LayoutInflater; import androidx.databinding.DataBindingUtil; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; public class NoteAggiuntiveLUDialog { private Dialog mDialog; - public static Dialog make(Context context, final RunnableArgs onComplete, final Runnable onAbort) { - return new NoteAggiuntiveLUDialog(context, onComplete, onAbort).mDialog; + public static Dialog make(Context context, final RunnableArgs onComplete) { + return new NoteAggiuntiveLUDialog(context, onComplete).mDialog; } - private NoteAggiuntiveLUDialog(Context context, final RunnableArgs onComplete, final Runnable onAbort){ + private NoteAggiuntiveLUDialog(Context context, final RunnableArgs onComplete){ LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); DialogNoteAggiuntiveNuovaUlBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, null, false); + mDialog = new Dialog(context); mDialog.setContentView(bindings.getRoot()); @@ -32,17 +34,14 @@ public class NoteAggiuntiveLUDialog { mDialog.setCancelable(false); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + UtilityDialog.setTo90PercentWidth(context, mDialog); + + bindings.buttonConfirm.setOnClickListener(v -> { mDialog.dismiss(); if(onComplete != null) onComplete.run(bindings.additionalNotesText.getText().toString()); }); - bindings.buttonAbort.setOnClickListener(v -> { - mDialog.dismiss(); - if(onAbort != null) onAbort.run(); - }); - - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java new file mode 100644 index 00000000..d54c7d2f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java @@ -0,0 +1,170 @@ +package it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; + +import org.jetbrains.annotations.NotNull; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.databinding.DialogVersamentoAutomaticoUlDoneBinding; + +public class DialogVersamentoAutomaticoULDoneView extends BaseDialogFragment { + + public final VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO; + private final Runnable mOnDismiss; + + private DialogVersamentoAutomaticoUlDoneBinding mBindings; + + public static DialogVersamentoAutomaticoULDoneView newInstance(@NotNull VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, @NotNull Runnable onDismiss) { + return new DialogVersamentoAutomaticoULDoneView(versamentoAutomaticoULResponseDTO, onDismiss); + } + + private DialogVersamentoAutomaticoULDoneView(@NotNull VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, @NotNull Runnable onDismiss) { + super(); + + this.versamentoAutomaticoULResponseDTO = versamentoAutomaticoULResponseDTO; + this.mOnDismiss = onDismiss; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_versamento_automatico_ul_done, container, false); + mBindings.setLifecycleOwner(this); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + UtilityDialog.setTo95PercentWidth(requireContext(), this); + + mBindings.setView(this); + + this.initTitle(); + this.initContent(); + + return mBindings.getRoot(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + + if (mOnDismiss != null) { + this.mOnDismiss.run(); + } + } + + + private void initTitle() { + int colorBackgroundTitle = -1; + + if (versamentoAutomaticoULResponseDTO.getFailed() == null || versamentoAutomaticoULResponseDTO.getFailed().isEmpty()) { + //SUCCESS + colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.green_300); + } else { + //WARNING + colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.yellow_600); + } + + + mBindings.base.setBackgroundColor(colorBackgroundTitle); + } + + private void initContent() { + String text; + + if (versamentoAutomaticoULResponseDTO.getFailed() == null || versamentoAutomaticoULResponseDTO.getFailed().isEmpty()) { + //SUCCESS + text = "Versamento completato con successo"; + } else { + //WARNING + text = "Il sistema non è riuscito a versare " + versamentoAutomaticoULResponseDTO.getFailed().size() + + " " + getResources().getQuantityString(R.plurals.articles, versamentoAutomaticoULResponseDTO.getFailed().size()) + ""; + } + + mBindings.descriptionText.setText(Html.fromHtml(text)); + + + + +// var notCompletedListAdapter = new BaseAdapter() { +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// +// var mtbColr = versamentoAutomaticoULResponseDTO.getFailed().get(position); +// +// var inflater = LayoutInflater.from(requireContext()); +// DialogVersamentoAutomaticoUlDoneNotCompletedListItemBinding binding = null; +// +// if(convertView == null) { +// binding = DataBindingUtil.inflate(inflater, R.layout.dialog_versamento_automatico_ul_done__not_completed_list_item, parent, false); +// } else { +// binding = DataBindingUtil.findBinding(convertView); +// } +// +// binding.setItem(mtbColr); +// +// convertView = binding.getRoot(); +// +// //Setting qty with unt_mis +// if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) { +// String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); +// +// +// if (mtbColr.getMtbAart() != null) { +// text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : ""; +// } +// +// binding.qtaTextview.setText(text); +// } else { +// binding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col)); +// } +// +// return convertView; +// } +// +// @Override +// public long getItemId(int position) { +// return position; +// } +// +// @Override +// public Object getItem(int position) { +// return position; +// } +// +// @Override +// public int getCount() { +// return versamentoAutomaticoULResponseDTO.getFailed().size(); +// } +// }; +// +// +// mBindings.detailsNotCompletedList.setAdapter(notCompletedListAdapter); + + } + + +// public void toggleDetailVisibility() { +// mBindings.detailsContainer.toggle(true); +// } + + +} diff --git a/app/src/main/res/drawable/bg_bordered.xml b/app/src/main/res/drawable/bg_bordered.xml deleted file mode 100644 index 2b79012a..00000000 --- a/app/src/main/res/drawable/bg_bordered.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_list_background_round16.xml b/app/src/main/res/drawable/bottom_list_background_round16.xml deleted file mode 100644 index f0bcdafd..00000000 --- a/app/src/main/res/drawable/bottom_list_background_round16.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_sheet_modal_background.xml b/app/src/main/res/drawable/bottom_sheet_modal_background.xml deleted file mode 100644 index 4d78ebff..00000000 --- a/app/src/main/res/drawable/bottom_sheet_modal_background.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circleshape.xml b/app/src/main/res/drawable/circleshape.xml deleted file mode 100644 index 72a65f0a..00000000 --- a/app/src/main/res/drawable/circleshape.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background.xml b/app/src/main/res/drawable/circular_background.xml deleted file mode 100644 index 687539f0..00000000 --- a/app/src/main/res/drawable/circular_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background_alpha_7.xml b/app/src/main/res/drawable/circular_background_alpha_7.xml deleted file mode 100644 index d9c5e6c7..00000000 --- a/app/src/main/res/drawable/circular_background_alpha_7.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_card_child_bg.xml b/app/src/main/res/drawable/dialog_card_child_bg.xml new file mode 100644 index 00000000..970c1797 --- /dev/null +++ b/app/src/main/res/drawable/dialog_card_child_bg.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fab_label_background.xml b/app/src/main/res/drawable/fab_label_background.xml deleted file mode 100644 index 0d8c05b1..00000000 --- a/app/src/main/res/drawable/fab_label_background.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/fast_scroll_thumb.xml b/app/src/main/res/drawable/fast_scroll_thumb.xml deleted file mode 100644 index 0f7e1449..00000000 --- a/app/src/main/res/drawable/fast_scroll_thumb.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml new file mode 100644 index 00000000..1aeaa998 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_error_white_24dp.xml b/app/src/main/res/drawable/ic_error_white_24dp.xml index 6cfb3cb6..1d14bc4a 100644 --- a/app/src/main/res/drawable/ic_error_white_24dp.xml +++ b/app/src/main/res/drawable/ic_error_white_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/progress_bar_background.xml b/app/src/main/res/drawable/progress_bar_background.xml deleted file mode 100644 index 2fa1399b..00000000 --- a/app/src/main/res/drawable/progress_bar_background.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gradient_top_shadow.xml b/app/src/main/res/drawable/shape_gradient_top_shadow.xml deleted file mode 100644 index 2d104223..00000000 --- a/app/src/main/res/drawable/shape_gradient_top_shadow.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml deleted file mode 100644 index 458b4b07..00000000 --- a/app/src/main/res/drawable/side_nav_bar.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml index fa9161ba..1444c7e1 100644 --- a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml +++ b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml @@ -26,239 +26,172 @@ app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - + android:layout_height="wrap_content" + android:background="@color/full_white" + android:minHeight="?attr/actionBarSize"> - + + + + android:scrollbars="none"> - - - - - + android:paddingStart="8dp" + android:paddingEnd="8dp" + app:chipSpacing="8dp" + app:singleSelection="true" /> + - - + - + + + + + + + + + + + + app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" + app:layout_constraintStart_toEndOf="@id/guideline_empty_left" + app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> - + android:adjustViewBounds="true" + android:src="@drawable/ic_playlist_add_check_24dp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:text="@string/no_item_to_pick_text" + android:textColor="@android:color/black" + android:textSize="18sp" /> + - + - - + - + - + - + - + - - - - - diff --git a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml index 468fbf1a..216fa25e 100644 --- a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml +++ b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml @@ -138,241 +138,306 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - + android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + android:padding="15dp"> - - - + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + android:orientation="vertical" + android:paddingTop="14dp"> + + + + + + + + + + + + + + - - - @@ -390,9 +455,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="#99000000" - android:visibility="gone" android:clickable="true" - android:focusable="true"/> + android:focusable="true" + android:visibility="gone" /> diff --git a/app/src/main/res/layout/dialog_ask_cliente__page2.xml b/app/src/main/res/layout/dialog_ask_cliente__page2.xml index e16c4c6a..4500a471 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page2.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page2.xml @@ -20,7 +20,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/recipient" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_livello_of_position.xml b/app/src/main/res/layout/dialog_ask_livello_of_position.xml index f77965dd..f1e13a5d 100644 --- a/app/src/main/res/layout/dialog_ask_livello_of_position.xml +++ b/app/src/main/res/layout/dialog_ask_livello_of_position.xml @@ -49,7 +49,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/placement" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml b/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml index e54f4be6..d08f7eb4 100644 --- a/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml +++ b/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml @@ -62,7 +62,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/production_line" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu.xml b/app/src/main/res/layout/dialog_ask_position_of_lu.xml index 81eded53..696c15e4 100644 --- a/app/src/main/res/layout/dialog_ask_position_of_lu.xml +++ b/app/src/main/res/layout/dialog_ask_position_of_lu.xml @@ -50,7 +50,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/placement" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_should_print.xml b/app/src/main/res/layout/dialog_ask_should_print.xml index 262086bf..4a2d6653 100644 --- a/app/src/main/res/layout/dialog_ask_should_print.xml +++ b/app/src/main/res/layout/dialog_ask_should_print.xml @@ -40,7 +40,7 @@ - + diff --git a/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml b/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml new file mode 100644 index 00000000..45d1eb30 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_base.xml b/app/src/main/res/layout/dialog_base.xml index d9d9947b..2090dcdb 100644 --- a/app/src/main/res/layout/dialog_base.xml +++ b/app/src/main/res/layout/dialog_base.xml @@ -55,7 +55,7 @@ diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml index 642fca76..8147e254 100644 --- a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml @@ -45,7 +45,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_choose_art_from_lista_art" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml index 5f578f2d..fcd78683 100644 --- a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml @@ -69,7 +69,7 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_custom_header.xml b/app/src/main/res/layout/dialog_custom_header.xml deleted file mode 100644 index f92f7db9..00000000 --- a/app/src/main/res/layout/dialog_custom_header.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_exception.xml b/app/src/main/res/layout/dialog_exception.xml index 6cd10b60..60863c6f 100644 --- a/app/src/main/res/layout/dialog_exception.xml +++ b/app/src/main/res/layout/dialog_exception.xml @@ -38,7 +38,7 @@ diff --git a/app/src/main/res/layout/dialog_input_general.xml b/app/src/main/res/layout/dialog_input_general.xml index 70a5a1c3..14456ed0 100644 --- a/app/src/main/res/layout/dialog_input_general.xml +++ b/app/src/main/res/layout/dialog_input_general.xml @@ -48,7 +48,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" tools:text="Insert here" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_input_peso_lu.xml b/app/src/main/res/layout/dialog_input_peso_lu.xml index 74872b7e..9cde4db6 100644 --- a/app/src/main/res/layout/dialog_input_peso_lu.xml +++ b/app/src/main/res/layout/dialog_input_peso_lu.xml @@ -56,7 +56,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/action_insert_weight" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_input_quantity_to_return.xml b/app/src/main/res/layout/dialog_input_quantity_to_return.xml index 77844bc5..c367ab42 100644 --- a/app/src/main/res/layout/dialog_input_quantity_to_return.xml +++ b/app/src/main/res/layout/dialog_input_quantity_to_return.xml @@ -56,7 +56,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/action_insert_quantity" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml index 4facf703..26ca4b05 100644 --- a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml +++ b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml @@ -1,131 +1,89 @@ - + + + + + - - + android:layout_gravity="center_horizontal" + android:orientation="vertical" + app:cardBackgroundColor="@color/light_blue_300" + app:cardCornerRadius="24dp" + app:cardElevation="0dp"> - - - - - + android:layout_margin="4dp" + android:padding="24dp" + android:background="@drawable/dialog_card_child_bg"> - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + android:layout_marginTop="16dp" + app:layout_constraintTop_toBottomOf="@id/title_text"> - + android:hint="@string/hint_additional_notes" + android:inputType="text" /> - - - + - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml index 258c6c82..c421a0e4 100644 --- a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml @@ -36,7 +36,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_progress.xml b/app/src/main/res/layout/dialog_progress.xml index b87a57a9..53d8ac4a 100644 --- a/app/src/main/res/layout/dialog_progress.xml +++ b/app/src/main/res/layout/dialog_progress.xml @@ -31,7 +31,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/loading" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml b/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml index d95d0f2e..bea176ef 100644 --- a/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml +++ b/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml @@ -23,7 +23,7 @@ - + diff --git a/app/src/main/res/layout/dialog_scan_art.xml b/app/src/main/res/layout/dialog_scan_art.xml index f4612825..10577e4a 100644 --- a/app/src/main/res/layout/dialog_scan_art.xml +++ b/app/src/main/res/layout/dialog_scan_art.xml @@ -10,13 +10,13 @@ app:cardCornerRadius="12dp" app:cardElevation="0dp"> - - - - + @@ -72,9 +72,9 @@ android:layout_gravity="center_horizontal" android:text="@string/abort"/> - + - + diff --git a/app/src/main/res/layout/dialog_scan_codice_griglia.xml b/app/src/main/res/layout/dialog_scan_codice_griglia.xml index 6510708b..8448cfaa 100644 --- a/app/src/main/res/layout/dialog_scan_codice_griglia.xml +++ b/app/src/main/res/layout/dialog_scan_codice_griglia.xml @@ -45,7 +45,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/title_open_grid_pv" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_scan_or_create_lu.xml b/app/src/main/res/layout/dialog_scan_or_create_lu.xml index 79373b22..5f5539ac 100644 --- a/app/src/main/res/layout/dialog_scan_or_create_lu.xml +++ b/app/src/main/res/layout/dialog_scan_or_create_lu.xml @@ -62,7 +62,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/title_open_lu" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_select_doc_info.xml b/app/src/main/res/layout/dialog_select_doc_info.xml index d64695cf..72e2f6d7 100644 --- a/app/src/main/res/layout/dialog_select_doc_info.xml +++ b/app/src/main/res/layout/dialog_select_doc_info.xml @@ -35,7 +35,7 @@ diff --git a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml index 40d22f62..da065392 100644 --- a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml index ee289fa4..db13d298 100644 --- a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml new file mode 100644 index 00000000..fc03339d --- /dev/null +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml new file mode 100644 index 00000000..503abf70 --- /dev/null +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_yes_no.xml b/app/src/main/res/layout/dialog_yes_no.xml index f17b5a42..745284ae 100644 --- a/app/src/main/res/layout/dialog_yes_no.xml +++ b/app/src/main/res/layout/dialog_yes_no.xml @@ -41,7 +41,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="Title here" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/fragment_main_settings.xml b/app/src/main/res/layout/fragment_main_settings.xml deleted file mode 100644 index c6d6c21b..00000000 --- a/app/src/main/res/layout/fragment_main_settings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml b/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml deleted file mode 100644 index 9fd36130..00000000 --- a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml index 9e59b93a..1eb6787a 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml @@ -133,7 +133,7 @@ tools:text="28 maggio 2021" /> diff --git a/app/src/main/res/layout/layout_filter_posizione.xml b/app/src/main/res/layout/layout_filter_posizione.xml new file mode 100644 index 00000000..2ef04cb5 --- /dev/null +++ b/app/src/main/res/layout/layout_filter_posizione.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_posizione__list_item.xml b/app/src/main/res/layout/layout_filter_posizione__list_item.xml new file mode 100644 index 00000000..ea461c7e --- /dev/null +++ b/app/src/main/res/layout/layout_filter_posizione__list_item.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml index 6525d4f4..d275f5d9 100644 --- a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml +++ b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml @@ -1,5 +1,6 @@ - @@ -21,141 +22,143 @@ type="it.integry.integrywmsnative.core.model.MtbColr" /> - - - + + - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="COD MART" /> - + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/linearLayout"> + android:background="@color/green_600" /> + android:textStyle="bold" + tools:text="5230" /> + android:layout_marginTop="2dp" + android:orientation="horizontal"> + android:textStyle="bold" + tools:text="V" /> @@ -292,16 +295,16 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{UtilityDate.formatDate(mtbColr.dataColloRifD, "dd MMM yy")}" - tools:text="02 mar 2020" android:textColor="@android:color/black" - android:textStyle="bold" /> + android:textStyle="bold" + tools:text="02 mar 2020" /> + android:layout_marginTop="2dp" + android:orientation="horizontal"> + android:textStyle="bold" + tools:text="UL" /> diff --git a/app/src/main/res/layout/single_filter_chip_view.xml b/app/src/main/res/layout/single_filter_chip_view.xml deleted file mode 100644 index a8e0c866..00000000 --- a/app/src/main/res/layout/single_filter_chip_view.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/spedizione_main_list__group_item.xml b/app/src/main/res/layout/spedizione_main_list__group_item.xml index 7970497f..7fa4bef0 100644 --- a/app/src/main/res/layout/spedizione_main_list__group_item.xml +++ b/app/src/main/res/layout/spedizione_main_list__group_item.xml @@ -174,8 +174,8 @@ android:layout_height="wrap_content" android:layout_alignTop="@id/content_view_child" android:layout_alignBottom="@id/content_view_child" - android:background="@android:color/black" - android:alpha="0.15" /> + android:alpha="0.15" + android:background="@android:color/black" /> \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml b/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml deleted file mode 100644 index f15ad122..00000000 --- a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml b/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml deleted file mode 100644 index 1c255128..00000000 --- a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml deleted file mode 100644 index b3a72221..00000000 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml b/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml deleted file mode 100644 index fe187c0c..00000000 --- a/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/fragment_vendita.xml b/app/src/main/res/menu/fragment_vendita.xml deleted file mode 100644 index 49d50b40..00000000 --- a/app/src/main/res/menu/fragment_vendita.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml deleted file mode 100644 index 0e9a98a0..00000000 --- a/app/src/main/res/menu/main.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index da7c2a0f..ea39924b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -64,6 +64,11 @@ L\'UL selezionata è già agganciata ad un documento per cui non può essere utilizzata Stai caricando una UL di vendita. Sei sicuro di voler continuare? + Continua + + Versamento automatico + Effettuare il versamento automatico degli articoli presenti nelle loro posizioni di default? + Magazzino @@ -104,6 +109,7 @@ Ordini Dettagli + Numero Data Posizione Preparato da diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml deleted file mode 100644 index 612ad49d..00000000 --- a/app/src/main/res/values/arrays.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - - - - Primary - Secondary - - - \ No newline at end of file diff --git a/app/src/main/res/values/buttons_style.xml b/app/src/main/res/values/buttons_style.xml index cbdc7199..ab5ce6a4 100644 --- a/app/src/main/res/values/buttons_style.xml +++ b/app/src/main/res/values/buttons_style.xml @@ -3,20 +3,20 @@ - @@ -26,22 +26,22 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ad1b2a6..cef9b618 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,6 +82,12 @@ Info LU\'s info + Continue + + + Versamento automatico + Effettuare il versamento automatico degli articoli presenti nelle loro posizioni di default? + Recover LU @@ -99,6 +105,7 @@ Orders Details + Number Date Position Prepared by diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 92e3d585..3191c452 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -177,11 +177,6 @@ - diff --git a/app/src/main/res/values/textview_style.xml b/app/src/main/res/values/textview_style.xml index bc914317..323ae6f7 100644 --- a/app/src/main/res/values/textview_style.xml +++ b/app/src/main/res/values/textview_style.xml @@ -5,9 +5,22 @@ @font/product_sans_regular - + + + + + + \ No newline at end of file diff --git a/waterfall_toolbar/.gitignore b/waterfall_toolbar/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/waterfall_toolbar/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/waterfall_toolbar/build.gradle b/waterfall_toolbar/build.gradle deleted file mode 100644 index ad3e5229..00000000 --- a/waterfall_toolbar/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' - -android { - compileSdkVersion 28 - - - - defaultConfig { - minSdkVersion 21 - targetSdkVersion 27 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - // google - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'com.google.android.material:material:1.1.0-alpha02' - implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} -repositories { - mavenCentral() -} diff --git a/waterfall_toolbar/proguard-rules.pro b/waterfall_toolbar/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/waterfall_toolbar/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java b/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java deleted file mode 100644 index bb422285..00000000 --- a/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package it.integry.plugins.waterfalltoolbar; - -import android.content.Context; -import androidx.test.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("it.integry.plugins.waterfall_toolbar.test", appContext.getPackageName()); - } -} diff --git a/waterfall_toolbar/src/main/AndroidManifest.xml b/waterfall_toolbar/src/main/AndroidManifest.xml deleted file mode 100644 index db52527f..00000000 --- a/waterfall_toolbar/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt b/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt deleted file mode 100644 index 9873c5c7..00000000 --- a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt +++ /dev/null @@ -1,19 +0,0 @@ -package it.integry.plugins.waterfalltoolbar - -var density: Float? = null - -data class Dp(var value: Float) { - fun toPx(): Px { - val innerDensity: Float = density ?: throw NullPointerException( - "You must set density before using DimensionUnits classes.") - return Px((value * innerDensity + 0.5f).toInt()) - } -} - -data class Px(var value: Int) { - fun toDp(): Dp { - val innerDensity: Float = density ?: throw NullPointerException( - "You must set density before using DimensionUnits classes.") - return Dp(value / innerDensity + 0.5f) - } -} \ No newline at end of file diff --git a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt b/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt deleted file mode 100644 index 95511285..00000000 --- a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt +++ /dev/null @@ -1,353 +0,0 @@ -package it.integry.plugins.waterfalltoolbar - -import android.content.Context -import android.os.Build -import android.os.Parcel -import android.os.Parcelable -import androidx.annotation.RequiresApi -import androidx.core.widget.NestedScrollView -import android.util.AttributeSet -import android.view.View -import android.view.ViewTreeObserver -import android.widget.ScrollView -import androidx.recyclerview.widget.RecyclerView - -/** - * Created by Hugo Castelani - * Date: 19/09/17 - * Time: 19:30 - */ - -open class WaterfallToolbar : androidx.cardview.widget.CardView { - init { - // set density to be able to use DimensionUnits - // this code must run before all the signings using DimensionUnits - if (density == null) density = resources.displayMetrics.density - } - - /** - * The recycler view whose scroll is going to be listened - */ - var recyclerView: androidx.recyclerview.widget.RecyclerView? = null - set(value) { - field = value - addRecyclerViewScrollListener() - } - - var recyclerViewScrollListener : RecyclerView.OnScrollListener = object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - // real position must always get updated - realPosition.value = realPosition.value + dy - mutualScrollListenerAction() - } - } - - /** - * The scroll view whose scroll is going to be listened - */ - var scrollView: ScrollView? = null - set(value) { - field = value - addScrollViewScrollListener() - } - - var scrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener { - // real position must always get updated - if(scrollView != null) { - realPosition.value = scrollView!!.scrollY - mutualScrollListenerAction() - } - } - - /** - * The scroll view whose scroll is going to be listened - */ - var nestedScrollView: NestedScrollView? = null - set(value) { - field = value - if (value != null) addNestedScrollViewScrollListener() - } - - var nestedScrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener { - // real position must always get updated - if(nestedScrollView != null) { - realPosition.value = nestedScrollView!!.scrollY - mutualScrollListenerAction() - } - } - - /** - * The three variables ahead are null safe, since they are always set - * at least once in init() and a null value can't be assigned to them - * after that. So all the "!!" involving them below are fully harmless. - */ - - /** - * The elevation with which the toolbar starts - */ - var initialElevation: Px? = null - set(value) { - if (value != null) { - field = value - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * The elevation the toolbar gets when it reaches final scroll elevation - */ - var finalElevation: Px? = null - set(value) { - if (value != null) { - field = value - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * The percentage of the screen's height that is - * going to be scrolled to reach the final elevation - */ - var scrollFinalPosition: Int? = null - set(value) { - if (value != null) { - val screenHeight = resources.displayMetrics.heightPixels - field = Math.round(screenHeight * (value / 100.0f)) - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * Dimension units (dp and pixel) auxiliary - */ - - - /** - * Values related to Waterfall Toolbar behavior in their default forms - */ - val defaultInitialElevation = Dp(0f).toPx() - val defaultFinalElevation = Dp(4f).toPx() - val defaultScrollFinalElevation = 12 - - /** - * Auxiliary that indicates if the view is already setup - */ - private var isSetup: Boolean = false - - /** - * Position in which toolbar must be to reach expected shadow - */ - private var orthodoxPosition = Px(0) - - /** - * Recycler/scroll view real position - */ - private var realPosition = Px(0) - - constructor(context: Context) : super(context) { - init(context, null) - } - - constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { - init(context, attrs) - } - - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int?) - : super(context, attrs, defStyleAttr!!) { - init(context, attrs) - } - - fun resetElevation() { - realPosition = Px(0) - cardElevation = 0f - } - - fun resetAll() { - resetElevation() - - removeNestedScrollViewScrollListener() - nestedScrollView = null - - removeRecyclerViewScrollListener() - recyclerView = null - - removeScrollViewScrollListener() - scrollView = null - } - - private fun init(context: Context?, attrs: AttributeSet?) { - // leave card corners square - radius = 0f - - if (context != null && attrs != null) { - val typedArray = context.obtainStyledAttributes(attrs, R.styleable.WaterfallToolbar) - - val rawInitialElevation = typedArray.getDimensionPixelSize( - R.styleable.WaterfallToolbar_initial_elevation, defaultInitialElevation.value) - - val rawFinalElevation = typedArray.getDimensionPixelSize( - R.styleable.WaterfallToolbar_final_elevation, defaultFinalElevation.value) - - scrollFinalPosition = typedArray.getInteger( - R.styleable.WaterfallToolbar_scroll_final_elevation, defaultScrollFinalElevation) - - this.initialElevation = Px(rawInitialElevation) - this.finalElevation = Px(rawFinalElevation) - - typedArray.recycle() - - } else { - - initialElevation = defaultInitialElevation - finalElevation = defaultFinalElevation - scrollFinalPosition = defaultScrollFinalElevation - } - - adjustCardElevation() // just to make sure card elevation is set - - isSetup = true - } - - private fun addRecyclerViewScrollListener() { - recyclerView?.addOnScrollListener(recyclerViewScrollListener) - } - - private fun removeRecyclerViewScrollListener() { - recyclerView?.removeOnScrollListener(recyclerViewScrollListener) - } - - private fun addScrollViewScrollListener() { - scrollView?.viewTreeObserver?.addOnScrollChangedListener(scrollViewScrollListener) - } - - private fun removeScrollViewScrollListener() { - scrollView?.viewTreeObserver?.removeOnScrollChangedListener(scrollViewScrollListener) - } - - private fun addNestedScrollViewScrollListener() { - nestedScrollView?.viewTreeObserver?.addOnScrollChangedListener(nestedScrollViewScrollListener) - } - - private fun removeNestedScrollViewScrollListener() { - nestedScrollView?.viewTreeObserver?.removeOnScrollChangedListener(nestedScrollViewScrollListener) - } - - /** - * These lines are common in both scroll listeners, so they are better joined - */ - private fun mutualScrollListenerAction() { - // orthodoxPosition can't be higher than scrollFinalPosition because - // the last one holds the position in which shadow reaches ideal size - - if (realPosition.value <= scrollFinalPosition!!) { - orthodoxPosition.value = realPosition.value - } else { - orthodoxPosition.value = scrollFinalPosition!! - } - - adjustCardElevation() - } - - /** - * Speed up the card elevation setting - */ - private fun adjustCardElevation() { - cardElevation = calculateElevation().value.toFloat() - } - - /** - * Calculates the elevation based on given attributes and scroll - * @return New calculated elevation - */ - private fun calculateElevation(): Px { - // getting back to rule of three: - // finalElevation = scrollFinalPosition - // newElevation = orthodoxPosition - var newElevation: Int = finalElevation!!.value * orthodoxPosition.value / scrollFinalPosition!! - - // avoid values under minimum value - if (newElevation < initialElevation!!.value) newElevation = initialElevation!!.value - - return Px(newElevation) - } - - /** - * Saves the view's current dynamic state in a parcelable object - * @return A parcelable with the saved data - */ - override fun onSaveInstanceState(): Parcelable? { - val savedState = SavedState(super.onSaveInstanceState() as Parcelable) - - savedState.elevation = cardElevation.toInt() - savedState.orthodoxPosition = orthodoxPosition - savedState.realPosition = realPosition - - return savedState - } - - /** - * Restore the view's dynamic state - * @param state The frozen state that had previously been returned by onSaveInstanceState() - */ - override fun onRestoreInstanceState(state: Parcelable) { - if (state is SavedState) { - super.onRestoreInstanceState(state.superState) - - // setting card elevation doesn't work until view is created - post { - // it's safe to use "!!" here, since savedState will - // always store values properly set in onSaveInstanceState() - - cardElevation = state.elevation!!.toFloat() - orthodoxPosition = state.orthodoxPosition!! - realPosition = state.realPosition!! - } - - } else { - - super.onRestoreInstanceState(state) - } - } - - /** - * Custom parcelable to store this view's dynamic state - */ - private class SavedState : View.BaseSavedState { - var elevation: Int? = null - var orthodoxPosition: Px? = null - var realPosition: Px? = null - - internal constructor(source: Parcel) : super(source) - - @RequiresApi(api = Build.VERSION_CODES.N) - internal constructor(source: Parcel, loader: ClassLoader) : super(source, loader) - - internal constructor(superState: Parcelable) : super(superState) - - companion object { - @JvmField - internal val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): SavedState { - return SavedState(source) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } - } - } - } -} \ No newline at end of file diff --git a/waterfall_toolbar/src/main/res/values/attrs.xml b/waterfall_toolbar/src/main/res/values/attrs.xml deleted file mode 100644 index 0ebd5c33..00000000 --- a/waterfall_toolbar/src/main/res/values/attrs.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/waterfall_toolbar/src/main/res/values/strings.xml b/waterfall_toolbar/src/main/res/values/strings.xml deleted file mode 100644 index 9d09a55c..00000000 --- a/waterfall_toolbar/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Waterfall Toolbar - diff --git a/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java b/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java deleted file mode 100644 index cf8582fa..00000000 --- a/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.integry.plugins.waterfalltoolbar; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file