diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 5172884e..3ad66620 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -23,6 +23,8 @@ import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent; import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule; import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent; import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent; @@ -85,7 +87,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr VersamentoMerceModule.class, DialogAskMagazzinoProssimitaModule.class, DialogChooseBatchLotModule.class, - DialogRowInfoProdFabbisognoLineeProdModule.class + DialogRowInfoProdFabbisognoLineeProdModule.class, + ProdOrdineProduzioneElencoModule.class }) public interface MainApplicationComponent { @@ -116,6 +119,7 @@ public interface MainApplicationComponent { DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent(); ProdRientroMerceComponent.Factory prodRientroMerceComponent(); ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent(); + ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent(); void inject(MainApplication mainApplication); 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 e1ab5b2e..cb86c5fd 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 @@ -447,10 +447,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { } public void getMultipleByTestate(List testate, boolean onlyResiduo, RunnableArgs> onComplete, RunnableArgs onFailed) { - ColliMagazzinoRESTConsumer.getMultipleByTestateStatic(testate, onlyResiduo, onComplete, onFailed); - } - - public static void getMultipleByTestateStatic(List testate, boolean onlyResiduo, RunnableArgs> onComplete, RunnableArgs onFailed) { ArrayList resultMtbColt = new ArrayList<>(); cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> { onComplete.run(resultMtbColt); @@ -458,9 +454,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { } - private static void cyclicGetMultipleByTestate(@NotNull Iterator sourceMtbColts, boolean onlyResiduo, ArrayList resultMtbColt, Runnable onComplete, RunnableArgs onAbort) { + private void cyclicGetMultipleByTestate(@NotNull Iterator sourceMtbColts, boolean onlyResiduo, ArrayList resultMtbColt, Runnable onComplete, RunnableArgs onAbort) { if (sourceMtbColts.hasNext()) { - getByTestataStatic(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> { + getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> { resultMtbColt.add(mtbColt); cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort); }, onAbort); @@ -476,14 +472,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { .setDataCollo(dataCollo) .setSerCollo(serCollo); - ColliMagazzinoRESTConsumer.getByTestataStatic(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed); + getByTestata(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed); } public void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { - ColliMagazzinoRESTConsumer.getByTestataStatic(testata, onlyResiduo, throwExcIfNull, onComplete, onFailed); - } - - public static void getByTestataStatic(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { testata.setMtbColr(new ObservableArrayList<>()); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumer.java index 7c1e054f..08561633 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumer.java @@ -39,10 +39,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer { public void retrievePickingListNew(List orders, RunnableArgs> onComplete, RunnableArgs onFailed) { - retrievePickingListNewStatic(orders, onComplete, onFailed); - } - - public static void retrievePickingListNewStatic(List orders, RunnableArgs> onComplete, RunnableArgs onFailed) { List getPickingListDTOs = Stream.of(orders) .map(x -> new GetPickingListAccettazioneDTO() .setData(x.getData()) @@ -63,7 +59,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer { onFailed.run(new Exception(t)); } }); - } } 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 613fa72f..442e7b19 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 @@ -288,26 +288,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF this.mViewModel.loadPicking(selectedOrders); } - - @Override - public void onLoadingStarted() { - BarcodeManager.disable(); - this.openProgress(); - } - - @Override - public void onLoadingEnded() { - this.closeProgress(); - BarcodeManager.enable(); - } - - @Override - public void onError(Exception ex) { - this.closeProgress(); - UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); - BarcodeManager.enable(); - } - @Override public void onOrderFiltered(List filteredOrders) { refreshList(filteredOrders); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoComponent.java new file mode 100644 index 00000000..809f3677 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; + +import dagger.Subcomponent; + +@Subcomponent +public interface ProdOrdineProduzioneElencoComponent { + + @Subcomponent.Factory + interface Factory { + ProdOrdineProduzioneElencoComponent create(); + } + + void inject(ProdOrdineProduzioneElencoFragment prodOrdineProduzioneElencoFragment); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index df721f6b..c9226096 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -1,19 +1,17 @@ package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; -import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.Html; -import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Toast; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; @@ -23,22 +21,26 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.data_cache.DataCache; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.rest.CommonRESTException; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; -import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; -import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneHelper; -import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.OrdineProduzioneListAdapter; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; @@ -46,18 +48,19 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; /** * A simple {@link Fragment} subclass. */ -public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment { +public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment { + + public BindableBoolean fabVisible = new BindableBoolean(false); + + @Inject + ProdOrdineProduzioneElencoViewModel mViewModel; private final List mOnPreDestroyList = new ArrayList<>(); private ElevatedToolbar mToolbar; private FragmentProdOrdineProduzioneElencoBinding mBinding; - private OrdineProduzioneHelper mHelper; - private OrdineProduzioneListAdapter mAdapter; - - private List mOriginalOrderList; - private List mRenderedOrderList = new ArrayList<>(); + private final ObservableArrayList mOrdiniInevasiMutableData = new ObservableArrayList<>(); private AppCompatTextView mAppBarTitle; @@ -87,21 +90,30 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit Bundle savedInstanceState) { mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false); + MainApplication.appComponent + .prodOrdineProduzioneElencoComponent() + .create() + .inject(this); + mViewModel.setListener(this); + + mBinding.setLifecycleOwner(this); mBinding.setView(this); - mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - mBinding.ordineProduzioneMainFab.hide(); - mBinding.ordineProduzioneMainFab.setOnClickListener(v -> { - this.onAccettazioneMainFabClick(); - }); + this.initRecyclerView(); - mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList); - - init(); return mBinding.getRoot(); } + + @Override + public void onStart() { + super.onStart(); + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + mViewModel.init(codMdep); + } + @Override public void onDestroy() { super.onDestroy(); @@ -117,144 +129,149 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString()); } - - private void init() { - final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity()); - - mHelper = new OrdineProduzioneHelper(getActivity()); - mHelper.loadOrdini(ordini -> { - if (ordini != null) { - Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); - mOriginalOrderList = ordini; - } - - mBinding.ordiniProduzioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE); - refreshRenderedOrdini(ordini); - initRecyclerView(); - progress.dismiss(); - }, ex -> { - progress.dismiss(); - - String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); - if (errorMessage == null) errorMessage = ex.getMessage(); - DialogSimpleMessageView - .makeErrorDialog(new SpannableString(errorMessage), null, null) - .show(getActivity().getSupportFragmentManager(), "tag"); - } - ); - } - @Override public void setScrollToolbar(ElevatedToolbar toolbar) { mToolbar = toolbar; } private void initRecyclerView() { - mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); - mBinding.ordineProduzioneMainList.setAdapter(mAdapter); - } + this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList); - private void refreshRenderedOrdini(List ordini) { + mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); - mRenderedOrderList.clear(); - if (ordini != null) mRenderedOrderList.addAll(ordini); - } + OrdineProduzioneListAdapter adapter = new OrdineProduzioneListAdapter(getActivity(), mOrdiniInevasiMutableData) + .setOnGroupItemClicked(x -> { + Stream.of(mOrdiniInevasiMutableData) + .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get()) + .forEach(y -> y.getSelectedObservable().set(false)); - private void refreshRecyclerView() { - mAdapter.updateItems(mRenderedOrderList); - } + boolean allSelected = Stream.of(mOrdiniInevasiMutableData) + .filter(y -> y.getGroupTitle().equalsIgnoreCase(x)) + .allMatch(y -> y.getSelectedObservable().get()); - private RunnableArgs onSingleSelectionChanged = dto -> { - List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); + Stream.of(mOrdiniInevasiMutableData) + .filter(y -> y.getGroupTitle().equalsIgnoreCase(x)) + .forEach(y -> y.getSelectedObservable().set(!allSelected)); + }) + .setOnItemChecked(x -> { + Stream.of(mOrdiniInevasiMutableData) + .filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get()) + .forEach(y -> y.getSelectedObservable().set(false)); - if (dto.isSelected()) { - Stream.of(selectedOrders) - .filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd())) - .forEach(x -> x.setSelected(false)); - } - - if (selectedOrders != null && selectedOrders.size() > 0) { - mBinding.ordineProduzioneMainFab.show(); - } else { - mBinding.ordineProduzioneMainFab.hide(); - } - }; - - - private void onAccettazioneMainFabClick() { - List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); - - final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity()); - - OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> { - progress.dismiss(); - - long artsCounter = Stream.of(sitArtOrds) - .filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) - .map(SitArtOrdDTO::getCodMart) - .distinct() - .count(); - - long ordsCounter = Stream.of(sitArtOrds) - .distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione()) - .count(); - - DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), - Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter) - + "

" + - "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)), - null, - () -> { - - String cacheSitArtItemID = DataCache.addItem(sitArtOrds); - String cacheOrdersItemID = DataCache.addItem(selectedOrders); - - Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class); - myIntent.putExtra("keyOrders", cacheOrdersItemID); - myIntent.putExtra("keySitArts", cacheSitArtItemID); - getActivity().startActivity(myIntent); - - }).show(getActivity().getSupportFragmentManager(), "tag"); - - }, - - ex -> { -// Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show(); - progress.dismiss(); - - String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); - if (errorMessage == null) - errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage(); - DialogSimpleMessageView - .makeErrorDialog(new SpannableString(errorMessage), null, null) - .show(getActivity().getSupportFragmentManager(), "tag"); + fabVisible.set(Stream.of(mOrdiniInevasiMutableData) + .anyMatch(y -> y.getSelectedObservable().get())); }); + adapter.setEmptyView(mBinding.ordiniProduzioneEmptyView); + mBinding.ordineProduzioneMainList.setAdapter(adapter); + + mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList); + } + + private void refreshList(List filteredList) { + + List tmpList = null; + + if(filteredList != null) { + tmpList = filteredList; + } else if (mAppliedFilterViewModel != null) { +// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); +// mAppliedFilterViewModel.applyAllTests(); +// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + } else { + tmpList = mViewModel.getOrderList().getValue(); + } + + this.mOrdiniInevasiMutableData.clear(); + this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList)); + } + + private List convertDataModelToListModel(List dataList) { + + return Stream.of(dataList) + .distinctBy(OrdineAccettazioneInevasoDTO::getBarcode) + .sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : "")) + .map(x -> { + MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel(); + + listModel.setOriginalModel(x); + + listModel.setGroupTitle(x.getRagSocOrd()); + + listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); + + List clienti = Stream.of(dataList) + .filter(y -> y.getBarcode().equals(x.getBarcode())) + .map(y -> new MainListProdOrdineProduzioneElencoClienteListModel() + .setPrimaryText(y.getRifOrd()) + .setRightText(y.getCodJcom())) + .toList(); + + listModel.setClientiListModel(clienti); + + return listModel; + }) + .toList(); + } + + + public void dispatchOrders() { + List selectedOrders = Stream.of(this.mOrdiniInevasiMutableData) + .filter(x -> x.getSelectedObservable().get()) + .map(MainListProdOrdineProduzioneElencoListModel::getOriginalModel) + .toList(); + + + this.mViewModel.loadPicking(selectedOrders); } @Override public void onFilterClick() { - DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> { - mAppliedFilterViewModel = filter; - - if (filteredOrderList != null) { - - refreshOrdini(filteredOrderList); - refreshRecyclerView(); - } - - }).show(); +// DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> { +// mAppliedFilterViewModel = filter; +// +// if (filteredOrderList != null) { +// refreshList(filteredOrderList); +// } +// +// }).show(); } - public void refreshOrdini(List ordini) { - mRenderedOrderList.clear(); - mRenderedOrderList.addAll(ordini); - } - @Override public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + + @Override + public void onOrdersDispatched(List orders, List sitArts) { + long artsCounter = Stream.of(sitArts) + .filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) + .map(SitArtOrdDTO::getCodMart) + .distinct() + .count(); + + long ordsCounter = Stream.of(sitArts) + .distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione()) + .count(); + + + DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), + Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter) + + "

" + + "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)), + null, + () -> { + + String cacheSitArtItemID = DataCache.addItem(sitArts); + String cacheOrdersItemID = DataCache.addItem(orders); + + Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class); + myIntent.putExtra("keyOrders", cacheOrdersItemID); + myIntent.putExtra("keySitArts", cacheSitArtItemID); + getActivity().startActivity(myIntent); + + }).show(getActivity().getSupportFragmentManager(), "tag"); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoModule.java new file mode 100644 index 00000000..0db6253d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoModule.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer; + +@Module(subcomponents = ProdOrdineProduzioneElencoComponent.class) +public class ProdOrdineProduzioneElencoModule { + + @Provides + ProdOrdineProduzioneRESTConsumer providesProdOrdineProduzioneRESTConsumer() { + return new ProdOrdineProduzioneRESTConsumer(); + } + + @Provides + ProdOrdineProduzioneElencoViewModel providesProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) { + return new ProdOrdineProduzioneElencoViewModel(colliMagazzinoRESTConsumer, prodOrdineProduzioneRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoViewModel.java new file mode 100644 index 00000000..bd36a93e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoViewModel.java @@ -0,0 +1,100 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione; + +import androidx.lifecycle.MutableLiveData; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; +import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; +import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer; + +public class ProdOrdineProduzioneElencoViewModel { + + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + private final ProdOrdineProduzioneRESTConsumer mProdOrdineProduzioneRESTConsumer; + + private final MutableLiveData> mOrderList = new MutableLiveData<>(); + + private Listener mListener; + + private String codMdep; + + + @Inject + public ProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) { + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + this.mProdOrdineProduzioneRESTConsumer = prodOrdineProduzioneRESTConsumer; + } + + + public void init(String codMdep) { + this.codMdep = codMdep; + + this.sendOnLoadingStarted(); + new Thread(() -> { + + mProdOrdineProduzioneRESTConsumer.getOrdiniInevasi(codMdep, orderList -> { + this.mOrderList.setValue(orderList); + + this.sendOnLoadingEnded(); + }, this::sendError); + + }).start(); + } + + + public void loadPicking(List selectedOrders) { + + this.sendOnLoadingStarted(); + + new Thread(() -> { + + this.mProdOrdineProduzioneRESTConsumer.retrievePickingListNew(selectedOrders, sitArtOrds -> { + + this.sendOnOrdersDispatched(selectedOrders, sitArtOrds); + this.sendOnLoadingEnded(); + + }, this::sendError); + + }).start(); + + } + + + public MutableLiveData> getOrderList() { + return mOrderList; + } + + public ProdOrdineProduzioneElencoViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + private void sendOnOrdersDispatched(List orders, List sitArts) { + if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts); + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void onOrdersDispatched(List orders, List sitArts); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneHelper.java deleted file mode 100644 index 8957c8b7..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneHelper.java +++ /dev/null @@ -1,70 +0,0 @@ -package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core; - -import android.content.Context; -import android.util.Log; - -import com.annimon.stream.Stream; - -import java.util.List; - -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.rest.RESTBuilder; -import it.integry.integrywmsnative.core.rest.model.EsitoType; -import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; -import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; - -public class OrdineProduzioneHelper { - - private Context mContext; - - public OrdineProduzioneHelper(Context context){ - mContext = context; - } - public void loadOrdini(RunnableArgs> onComplete, RunnableArgs onFailed){ - String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - - OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); - service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback>>() { - @Override - public void onResponse(Call>> call, Response>> response) { - - if(response.isSuccessful()) { - - if(response.body() != null) { - if(response.body().getEsito() == EsitoType.OK) { - onComplete.run(response.body().getDto()); - } else { - Log.e("Accettazione", response.body().getErrorMessage()); - onFailed.run(new Exception(response.body().getErrorMessage())); - } - } else { - Log.e("Accettazione", response.message()); - onFailed.run(new Exception(response.message())); - } - } else { - Log.e("Accettazione", "Status " + response.code() + ": " + response.message()); - onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); - } - } - - @Override - public void onFailure(Call>> call, Throwable t) { - Log.e("Produzione", t.toString()); - onFailed.run(new Exception(t)); - } - }); - } - - - public List getSelectedOrders(List ordiniList){ - return Stream.of(ordiniList) - .filter(OrdineAccettazioneInevasoDTO::isSelected) - .toList(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneListAdapter.java deleted file mode 100644 index 07a2a7c4..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/core/OrdineProduzioneListAdapter.java +++ /dev/null @@ -1,196 +0,0 @@ -package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core; - -import android.content.Context; -import android.text.Html; -import android.view.LayoutInflater; -import android.view.ViewGroup; - -import androidx.databinding.DataBindingUtil; -import androidx.databinding.Observable; -import androidx.recyclerview.widget.RecyclerView; - -import com.annimon.stream.Stream; -import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; - -import java.util.List; - -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.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding; -import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding; -import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; -import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; - -public class OrdineProduzioneListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { - - - private Context mContext; - - private List mOriginalDataset; - private List mDataset; - private RunnableArgs mOnSingleSelectionChanged; - - - static class SubheaderHolder extends RecyclerView.ViewHolder { - - FragmentProdOrdineProduzioneListModelBinding binding; - - SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - - } - - static class SingleItemViewHolder extends RecyclerView.ViewHolder { - - FragmentProdOrdineProduzioneListGroupModelBinding binding; - - SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) { - super(binding.getRoot()); - this.binding = binding; - } - } - - - public OrdineProduzioneListAdapter(Context context, List myDataset, RunnableArgs onSingleSelectionChanged) { - mContext = context; - mOriginalDataset = myDataset; - mDataset = orderItems(myDataset); - mOnSingleSelectionChanged = onSingleSelectionChanged; - } - - public void updateItems(List updatedDataset) { - mDataset.clear(); - mDataset.addAll(orderItems(updatedDataset)); - notifyDataSetChanged(); - notifyDataChanged(); - } - - - private List orderItems(List dataset) { - return Stream.of(dataset) - .distinctBy(OrdineAccettazioneInevasoDTO::getBarcode) - .sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : "")) - .toList(); - - } - - - - @Override - public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { - FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false); - return new SubheaderHolder(binding); - } - - @Override - public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { - FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false); - return new SingleItemViewHolder(binding); - } - - - @Override - public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { - subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd()); - - subheaderHolder.binding.getRoot().setOnClickListener(v -> { - - boolean anySelected = Stream.of(mDataset) - .filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) - .anyMatch(OrdineAccettazioneInevasoDTO::isSelected); - - Stream.of(mDataset) - .filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) - .forEach(x -> x.setSelected(!anySelected)); - }); - } - - @Override - public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder h, int itemPosition) { - final OrdineAccettazioneInevasoDTO ordine = mDataset.get(itemPosition); - final OrdineProduzioneListAdapter.SingleItemViewHolder holder = h; - - holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumero()); - - holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null); - - ordine.selected.resetOnPropertyChangedCallback(); - - - String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - holder.binding.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString)); - - holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews(); - - List clienti = Stream.of(mOriginalDataset) - .filter(x -> x.getBarcode().equals(ordine.getBarcode())) - .toList(); - - for (OrdineAccettazioneInevasoDTO cliente : clienti) { - FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false); - - binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getRifOrd()); - -// if (!UtilityString.isNullOrEmpty(cliente.getDataConsS())) { -// binding.ordineProduzioneMainListGroupClientiDatacons.setText(UtilityDate.formatDate(cliente.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); -// } else { -// binding.ordineProduzioneMainListGroupClientiDatacons.setText(""); -// } - - if (!UtilityString.isNullOrEmpty(cliente.getCodJcom())) { - binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getCodJcom()); - } - - holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot()); - } - - holder.binding.setCheckboxValue(ordine.selected); - - holder.binding.getRoot().setOnClickListener(v -> { - ordine.setSelected(!ordine.isSelected()); - }); - - holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected()); - - //Bindable to View - ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { - @Override - public void onPropertyChanged(Observable sender, int propertyId) { - if(holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumero())) { - holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get()); - } - } - }); - - - //View to Bindable - holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> { - ordine.setSelected(isChecked); - mOnSingleSelectionChanged.run(ordine); - }); - } - - - @Override - public boolean onPlaceSubheaderBetweenItems(int position) { - return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd()); - - } - - @Override - public int getItemSize() { - return mDataset.size(); - } - - @Override - public String getSectionTitle(int position) { - return null; - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/rest/ProdOrdineProduzioneRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/rest/ProdOrdineProduzioneRESTConsumer.java new file mode 100644 index 00000000..105ea499 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/rest/ProdOrdineProduzioneRESTConsumer.java @@ -0,0 +1,64 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest; + +import com.annimon.stream.Stream; + +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; +import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; +import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class ProdOrdineProduzioneRESTConsumer extends _BaseRESTConsumer { + + public void getOrdiniInevasi(String codMdep, RunnableArgs> onComplete, RunnableArgs onFailed) { + OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); + service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback<>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getOrdiniInevasi", onComplete, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public void retrievePickingListNew(List orders, RunnableArgs> onComplete, RunnableArgs onFailed) { + List getPickingListDTOs = Stream.of(orders) + .map(x -> new GetPickingListAccettazioneDTO() + .setData(x.getData()) + .setGestione(x.getGestione()) + .setNumero(x.getNumero())) + .toList(); + + OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); + service.getArticoliFromOrdiniAccettazione(getPickingListDTOs).enqueue(new Callback<>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "retrieveListaArticoliFromOrdiniProduzione", onComplete, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoClienteListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoClienteListModel.java new file mode 100644 index 00000000..8fb00900 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoClienteListModel.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui; + +public class MainListProdOrdineProduzioneElencoClienteListModel { + private String primaryText; + private String rightText; + + + public String getPrimaryText() { + return primaryText; + } + + public MainListProdOrdineProduzioneElencoClienteListModel setPrimaryText(String primaryText) { + this.primaryText = primaryText; + return this; + } + + public String getRightText() { + return rightText; + } + + public MainListProdOrdineProduzioneElencoClienteListModel setRightText(String rightText) { + this.rightText = rightText; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoListModel.java new file mode 100644 index 00000000..a9756427 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/MainListProdOrdineProduzioneElencoListModel.java @@ -0,0 +1,70 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui; + +import java.util.List; + +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; + +public class MainListProdOrdineProduzioneElencoListModel { + + private String groupTitle; + + private String description; + + private boolean hidden; + private BindableBoolean selected = new BindableBoolean(); + + + private OrdineAccettazioneInevasoDTO originalModel; + private List clientiListModel; + + + public String getGroupTitle() { + return groupTitle; + } + + public MainListProdOrdineProduzioneElencoListModel setGroupTitle(String groupTitle) { + this.groupTitle = groupTitle; + return this; + } + + public String getDescription() { + return description; + } + + public MainListProdOrdineProduzioneElencoListModel setDescription(String description) { + this.description = description; + return this; + } + + public boolean isHidden() { + return hidden; + } + + public MainListProdOrdineProduzioneElencoListModel setHidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public BindableBoolean getSelectedObservable() { + return selected; + } + + public OrdineAccettazioneInevasoDTO getOriginalModel() { + return originalModel; + } + + public MainListProdOrdineProduzioneElencoListModel setOriginalModel(OrdineAccettazioneInevasoDTO originalModel) { + this.originalModel = originalModel; + return this; + } + + public List getClientiListModel() { + return clientiListModel; + } + + public MainListProdOrdineProduzioneElencoListModel setClientiListModel(List clientiListModel) { + this.clientiListModel = clientiListModel; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/OrdineProduzioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/OrdineProduzioneListAdapter.java new file mode 100644 index 00000000..47c0dfc5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ui/OrdineProduzioneListAdapter.java @@ -0,0 +1,153 @@ +package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.RecyclerView; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding; + +public class OrdineProduzioneListAdapter extends ExtendedSectionedRecyclerView { + + + private Context mContext; + + private RunnableArgs mOnGroupItemClicked; + private RunnableArgs mOnItemChecked; + + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + FragmentProdOrdineProduzioneListModelBinding binding; + + SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + FragmentProdOrdineProduzioneListGroupModelBinding binding; + + SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + + public OrdineProduzioneListAdapter(Context context, ObservableArrayList myDataset) { + super(myDataset); + mContext = context; + } + + public OrdineProduzioneListAdapter setOnGroupItemClicked(RunnableArgs onGroupItemClicked) { + this.mOnGroupItemClicked = onGroupItemClicked; + return this; + } + + public OrdineProduzioneListAdapter setOnItemChecked(RunnableArgs onItemChecked) { + this.mOnItemChecked = onItemChecked; + return this; + } + + + + @Override + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false); + return new SubheaderHolder(binding); + } + + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false); + return new SingleItemViewHolder(binding); + } + + + @Override + public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { + subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getGroupTitle()); + + subheaderHolder.binding.getRoot().setOnClickListener(new OnSingleClickListener() { + @Override + public void onSingleClick(View v) { + if(mOnGroupItemClicked != null) mOnGroupItemClicked.run(mDataset.get(nextItemPosition).getGroupTitle()); + } + }); + } + + @Override + public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder holder, int itemPosition) { + final MainListProdOrdineProduzioneElencoListModel ordine = mDataset.get(itemPosition); + + ordine.getSelectedObservable().resetOnPropertyChangedCallback(); + + holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews(); + holder.binding.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(ordine.getDescription())); + + + for (MainListProdOrdineProduzioneElencoClienteListModel cliente : ordine.getClientiListModel()) { + FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false); + + binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getPrimaryText()); + + if (!UtilityString.isNullOrEmpty(cliente.getRightText())) { + binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getRightText()); + } else { + binding.ordineProduzioneMainListGroupClientiDatacons.setText(""); + } + + holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot()); + } + + holder.binding.setSelected(ordine.getSelectedObservable()); + holder.binding.executePendingBindings(); + holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.jumpDrawablesToCurrentState(); + + ordine.getSelectedObservable().addOnPropertyChangedCallback(() -> { + if(this.mOnItemChecked != null) this.mOnItemChecked.run(ordine); + }); + + holder.binding.getRoot().setOnClickListener(v -> { + ordine.getSelectedObservable().set(!ordine.getSelectedObservable().get()); + }); + } + + + @Override + public boolean onPlaceSubheaderBetweenItems(int position) { + if (getItemSize() == 1) return true; + else if (getItemSize() > 1) { + MainListProdOrdineProduzioneElencoListModel compare1 = this.mDataset.get(position); + MainListProdOrdineProduzioneElencoListModel compare2 = this.mDataset.get(position + 1); + + if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) { + return false; + } + } + + return true; + } + + @Override + public int getItemSize() { + return mDataset.size(); + } + +} diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml index 2de7309b..f406fde2 100644 --- a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml @@ -1,9 +1,9 @@ - + @@ -17,12 +17,13 @@ android:padding="8dp"> - + tools:layout_editor_absoluteY="1dp" + app:checked="@{selected}" /> + android:adjustViewBounds="true" + android:src="@drawable/ic_playlist_add_check_24dp" /> + android:textSize="18sp" /> @@ -87,8 +87,10 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" + android:onClick="@{() -> view.dispatchOrders()}" android:tint="@android:color/white" - app:srcCompat="@drawable/ic_check_black_24dp" /> + app:srcCompat="@drawable/ic_check_black_24dp" + app:visibility="@{view.fabVisible}" /> \ No newline at end of file