Separata lista di Accettazione/Produzione

This commit is contained in:
2019-07-08 12:22:38 +02:00
parent 7e93fd7535
commit d46c172d27
22 changed files with 1021 additions and 131 deletions

View File

@@ -50,6 +50,8 @@ import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.main.MainFragment;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment;
import it.integry.integrywmsnative.gest.prod_ord_lavorazione.ProdOrdineLavorazioneElenco;
import it.integry.integrywmsnative.gest.prod_ord_produzione.ProdOrdineProduzioneElenco;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
@@ -148,47 +150,85 @@ public class MainActivity extends AppCompatActivity
Fragment fragment = null;
int id = item.getItemId();
if (id == R.id.nav_home) {
this.pop();
} else if (id == R.id.nav_accettazione) {
fragment = MainAccettazioneFragment.newInstance();
this.adaptViewToFragment(fragment);
} else if (id == R.id.nav_spedizione) {
fragment = MainVenditaFragment.newInstance();
this.adaptViewToFragment(fragment);
} else if (id == R.id.nav_rettifica_giacenze) {
fragment = RettificaGiacenzeFragment.newInstance();
this.adaptViewToFragment(fragment);
} else if (id == R.id.nav_versamento_merce) {
fragment = VersamentoMerceFragment.newInstance();
this.adaptViewToFragment(fragment);
} else if (id == R.id.nav_free_picking) {
fragment = PickingLiberoFragment.newInstance();
this.adaptViewToFragment(fragment);
}
else if (id == R.id.nav_resi_cliente) {
fragment = UltimeConsegneClienteFragment.newInstance();
this.adaptViewToFragment(fragment);
}
else if (id == R.id.nav_prod_versamento_materiale) {
fragment = ProdVersamentoMaterialeFragment.newInstance();
this.adaptViewToFragment(fragment);
} else if (id == R.id.nav_prod_recupero_materiale) {
fragment = ProdRecuperoMaterialeFragment.newInstance();
this.adaptViewToFragment(fragment);
switch(id) {
case R.id.nav_home:
this.pop();
break;
case R.id.nav_accettazione:
fragment = MainAccettazioneFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_rettifica_giacenze:
fragment = RettificaGiacenzeFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_spedizione:
fragment = MainVenditaFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_versamento_merce:
fragment = VersamentoMerceFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_free_picking:
fragment = PickingLiberoFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_resi_cliente:
fragment = UltimeConsegneClienteFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_prod_ordine_produzione:
fragment = ProdOrdineProduzioneElenco.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_prod_ordine_lavorazione:
fragment = ProdOrdineLavorazioneElenco.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_prod_versamento_materiale:
fragment = ProdVersamentoMaterialeFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_prod_recupero_materiale:
fragment = ProdRecuperoMaterialeFragment.newInstance();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_settings:
fragment = new MainSettingsFragment();
this.adaptViewToFragment(fragment);
break;
case R.id.nav_logout:
UtilitySettings.logout();
ServerStatusChecker.dispose();
startLoginActivity();
break;
}
else if(id == R.id.nav_settings){
fragment = new MainSettingsFragment();
this.adaptViewToFragment(fragment);
}
else if(id == R.id.nav_logout){
UtilitySettings.logout();
ServerStatusChecker.dispose();
startLoginActivity();
}
changeContentFragment(fragment, true);

View File

@@ -47,6 +47,16 @@ public class MenuConfiguration extends BaseMenuConfiguration {
new MenuGroup()
.setGroupText(R.string.production)
.addItem(new MenuItem()
.setID(R.id.nav_prod_ordine_produzione)
.setTitleText(R.string.prod_ordine_produzione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale))
.addItem(new MenuItem()
.setID(R.id.nav_prod_ordine_lavorazione)
.setTitleText(R.string.prod_ordine_lavorazione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale))
.addItem(new MenuItem()
.setID(R.id.nav_prod_versamento_materiale)
.setTitleText(R.string.prod_versamento_materiale_title_fragment)

View File

@@ -245,7 +245,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
mBinding.accettazioneMainList.setAdapter(mAdapter);
}
public void onAccettazioneMainFabClick() {
private void onAccettazioneMainFabClick() {
List<OrdineAccettazioneGroupedInevasoDTO> selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi);
List<String> barcodes = new ArrayList<>();

View File

@@ -39,7 +39,7 @@ public class AccettazioneHelper {
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep).enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {

View File

@@ -2,7 +2,9 @@ package it.integry.integrywmsnative.gest.accettazione.dto;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
/**
* Created by GiuseppeS on 06/03/2018.
@@ -30,11 +32,26 @@ public class OrdineAccettazioneInevasoDTO {
private String barcode;
private String gestione;
public BindableBoolean selected;
public OrdineAccettazioneInevasoDTO() {
this.selected = new BindableBoolean(false);
}
public String getData() {
return data;
}
public Date getDataD(){
try {
return UtilityDate.recognizeDate(data);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public OrdineAccettazioneInevasoDTO setData(String data) {
this.data = data;
return this;
@@ -210,4 +227,15 @@ public class OrdineAccettazioneInevasoDTO {
this.gestione = gestione;
return this;
}
public boolean isSelected() {
return selected.get();
}
public OrdineAccettazioneInevasoDTO setSelected(boolean selected) {
this.selected.set(selected);
return this;
}
}

View File

@@ -19,6 +19,9 @@ public interface OrdiniAccettazioneRESTConsumerService {
@GET("SM2GetOrdiniAccettazioneInevasi")
Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> listOrdiniInevasi(@Query("codMdep") String codMdep);
@GET("SM2GetOrdiniAccettazioneInevasi")
Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> listOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione);
@GET("WMSGetPickingListAccettazione")
Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale);

View File

@@ -0,0 +1,60 @@
package it.integry.integrywmsnative.gest.prod_ord_lavorazione;
import android.content.Context;
import android.os.Bundle;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineLavorazioneElencoBinding;
/**
* A simple {@link Fragment} subclass.
*/
public class ProdOrdineLavorazioneElenco extends Fragment implements ITitledFragment {
private FragmentProdOrdineLavorazioneElencoBinding mBinding;
public ProdOrdineLavorazioneElenco() {
// Required empty public constructor
}
public static ProdOrdineLavorazioneElenco newInstance() {
ProdOrdineLavorazioneElenco fragment = new ProdOrdineLavorazioneElenco();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// mViewmodel = new ProdOrdineLavorazioneElenco();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_lavorazione_elenco, container, false);
// init();
return mBinding.getRoot();
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString());
}
}

View File

@@ -0,0 +1,248 @@
package it.integry.integrywmsnative.gest.prod_ord_produzione;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
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 com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.REST.CommonRESTException;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISearcableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadPickingListCallback;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.prod_ord_produzione.core.OrdineProduzioneHelper;
import it.integry.integrywmsnative.gest.prod_ord_produzione.core.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
/**
* A simple {@link Fragment} subclass.
*/
public class ProdOrdineProduzioneElenco extends Fragment implements ITitledFragment, IScrollableFragment {
private Runnable mOnPreDestroy;
private ElevatedToolbar mToolbar;
private FragmentProdOrdineProduzioneElencoBinding mBinding;
private OrdineProduzioneHelper mHelper;
private OrdineProduzioneListAdapter mAdapter;
private List<OrdineAccettazioneInevasoDTO> mOriginalOrderList;
private List<OrdineAccettazioneInevasoDTO> mRenderedOrderList = new ArrayList<>();
private AppCompatTextView mAppBarTitle;
public ProdOrdineProduzioneElenco() {
// Required empty public constructor
}
public static ProdOrdineProduzioneElenco newInstance() {
ProdOrdineProduzioneElenco fragment = new ProdOrdineProduzioneElenco();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
mBinding.setView(this);
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
mBinding.ordineProduzioneMainFab.hide();
mBinding.ordineProduzioneMainFab.setOnClickListener(v -> {
this.onAccettazioneMainFabClick();
});
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
init();
return mBinding.getRoot();
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText;
mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString());
}
private void init() {
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true);
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();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
}
);
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
@Override
public void setOnPreDestroy(Runnable onPreDestroy) {
mOnPreDestroy = onPreDestroy;
}
private void initRecyclerView() {
mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
mBinding.ordineProduzioneMainList.setAdapter(mAdapter);
}
private void refreshRenderedOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
mRenderedOrderList.clear();
mRenderedOrderList.addAll(ordini);
}
private void refreshRecyclerView() {
mAdapter.updateItems(mRenderedOrderList);
}
private RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){
boolean allMatch = Stream.of(selectedOrders).allMatch(x -> dto.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd()));
if(!allMatch) {
Stream.of(selectedOrders)
.filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd()))
.forEach(x -> x.setSelected(false));
}
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.ordineProduzioneMainFab.show();
}
else {
mBinding.ordineProduzioneMainFab.hide();
}
};
private void onAccettazioneMainFabClick() {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
List<String> barcodes = new ArrayList<>();
for(OrdineAccettazioneInevasoDTO ordine : selectedOrders){
if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode());
}
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
getText(R.string.loading) + " ...", true);
mHelper.retrievePickingList(barcodes, ordini -> {
progress.dismiss();
AtomicInteger artsCounter = new AtomicInteger();
Stream.of(ordini).forEach(x -> {
artsCounter.addAndGet((int) Stream.of(x.ordini).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count());
});
List<String> ordersKeys = new ArrayList<>();
for(OrdineAccettazioneDTO ordine : ordini){
if(!ordersKeys.contains(ordine.data + " " + ordine.numero + " " + ordine.gestione)){
ordersKeys.add(ordine.data + " " + ordine.numero + " " + ordine.gestione);
}
}
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, ordersKeys.size()), ordersKeys.size())
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, artsCounter.get())),
null,
() -> {
String cacheItemID = DataCache.addItem(ordini);
Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class);
myIntent.putExtra("key", cacheItemID);
getActivity().startActivity(myIntent);
}).show();
},
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();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
});
}
}

View File

@@ -0,0 +1,125 @@
package it.integry.integrywmsnative.gest.prod_ord_produzione.core;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.annimon.stream.Stream;
import java.util.List;
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.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
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<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> 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.message()));
}
} 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<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
Log.e("Produzione", t.toString());
onFailed.run(new Exception(t));
}
});
}
public void retrievePickingList(List<String> barcodeOrdini, RunnableArgs<List<OrdineAccettazioneDTO>> onComplete, RunnableArgs<Exception> onFailed){
String joinedBarcodes = TextUtils.join(",", barcodeOrdini);
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.pickingListAccettazione(joinedBarcodes).enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> response) {
if(response.isSuccessful()) {
if(response.body() != null) {
if(response.body().getEsito() == EsitoType.OK) {
List<OrdineAccettazioneDTO> dto = response.body().getDto();
for (OrdineAccettazioneDTO ordine : dto) {
for(OrdineAccettazioneDTO.Riga riga : ordine.ordini){
riga.numOrd = ordine.numero;
riga.dataOrd = ordine.data;
riga.gestioneOrd = ordine.gestione;
riga.codAlis = ordine.codAlis;
}
}
onComplete.run(dto);
} else {
Log.e("Produzione", response.body().getErrorMessage());
onFailed.run(new Exception(response.message()));
}
} else {
Log.e("Produzione", response.message());
onFailed.run(new Exception(response.message()));
}
} else {
Log.e("Produzione", "Status " + response.code() + ": " + response.message());
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> call, Throwable t) {
Log.e("Produzione", t.toString());
UtilityLogger.errorMe(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
public List<OrdineAccettazioneInevasoDTO> getSelectedOrders(List<OrdineAccettazioneInevasoDTO> ordiniList){
return Stream.of(ordiniList)
.filter(OrdineAccettazioneInevasoDTO::isSelected)
.toList();
}
}

View File

@@ -0,0 +1,195 @@
package it.integry.integrywmsnative.gest.prod_ord_produzione.core;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.core.content.res.ResourcesCompat;
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.databinding.VenditaMainListGroupModelBinding;
import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class OrdineProduzioneListAdapter extends SectionedRecyclerViewAdapter<OrdineProduzioneListAdapter.SubheaderHolder, OrdineProduzioneListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
private Context mContext;
private List<OrdineAccettazioneInevasoDTO> mDataset;
private RunnableArgs<OrdineAccettazioneInevasoDTO> 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<OrdineAccettazioneInevasoDTO> myDataset, RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged) {
mContext = context;
mDataset = orderItems(myDataset);
mOnSingleSelectionChanged = onSingleSelectionChanged;
}
public void updateItems(List<OrdineAccettazioneInevasoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(orderItems(updatedDataset));
notifyDataSetChanged();
notifyDataChanged();
}
private List<OrdineAccettazioneInevasoDTO> orderItems(List<OrdineAccettazioneInevasoDTO> dataset) {
return Stream.of(dataset)
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(OrdineAccettazioneInevasoDTO::getRagSocOrd)
.toList();
}
@Override
public OrdineProduzioneListAdapter.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 OrdineProduzioneListAdapter.SubheaderHolder(binding);
}
@Override
public OrdineProduzioneListAdapter.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 OrdineProduzioneListAdapter.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<OrdineAccettazioneInevasoDTO> clienti = Stream.of(mDataset)
.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("");
}
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;
}
}

View File

@@ -60,18 +60,6 @@ public class ProdRecuperoMaterialeFragment extends Fragment implements ITitledFr
return mBinding.getRoot();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
}
private void init() {
mHelper = new ProdRecuperoMaterialeHelper(getActivity());
mViewmodel.init(getActivity(), mBinding, mHelper, () -> {

View File

@@ -101,10 +101,6 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainLis
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.anyMatch(OrdineVenditaInevasoDTO::isSelected);
List<OrdineVenditaInevasoDTO> ordersToSelect =
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())).toList();
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.forEach(x -> x.setSelected(!anySelected));
@@ -178,77 +174,4 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainLis
}
private static class OrdineListModel {
private String data;
private Integer numero;
private String gestione;
private String dataCons;
public static OrdineListModel fromOrdine(OrdineVenditaInevasoDTO ordine) {
return new OrdineListModel()
.setData(ordine.getDataOrdS())
.setDataCons(ordine.getDataConsS())
.setGestione(ordine.getGestione())
.setNumero(ordine.getNumOrd());
}
public String getData() {
return data;
}
public OrdineListModel setData(String data) {
this.data = data;
return this;
}
public Integer getNumero() {
return numero;
}
public OrdineListModel setNumero(Integer numero) {
this.numero = numero;
return this;
}
public String getGestione() {
return gestione;
}
public OrdineListModel setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public String getDataCons() {
return dataCons;
}
public OrdineListModel setDataCons(String dataCons) {
this.dataCons = dataCons;
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
OrdineListModel that = (OrdineListModel) o;
if (!getData().equals(that.getData())) return false;
if (!getNumero().equals(that.getNumero())) return false;
if (!getGestione().equals(that.getGestione())) return false;
return getDataCons() != null ? getDataCons().equals(that.getDataCons()) : that.getDataCons() == null;
}
@Override
public int hashCode() {
int result = getData().hashCode();
result = 31 * result + getNumero().hashCode();
result = 31 * result + getGestione().hashCode();
result = 31 * result + (getDataCons() != null ? getDataCons().hashCode() : 0);
return result;
}
}
}