diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index b2c24986..177f2bdf 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index d6c20654..75ac54ff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,7 +101,7 @@ dependencies { implementation 'com.google.firebase:firebase-crash:16.2.1' implementation 'com.google.firebase:firebase-perf:18.0.1' implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' - implementation 'androidx.appcompat:appcompat:1.1.0-beta01' + implementation 'androidx.appcompat:appcompat:1.1.0-rc01' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 66168cfc..c57751f0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -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); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java index 3b1ae680..07898912 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java @@ -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) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index 286c6632..d1590153 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -245,7 +245,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag mBinding.accettazioneMainList.setAdapter(mAdapter); } - public void onAccettazioneMainFabClick() { + private void onAccettazioneMainFabClick() { List selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi); List barcodes = new ArrayList<>(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java index 29e8ebdb..77055e08 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java @@ -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>>() { + service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java index 99e51ca6..57b3d6c1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java @@ -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; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java index 0aa7c501..b98162fa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java @@ -19,6 +19,9 @@ public interface OrdiniAccettazioneRESTConsumerService { @GET("SM2GetOrdiniAccettazioneInevasi") Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); + @GET("SM2GetOrdiniAccettazioneInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione); + @GET("WMSGetPickingListAccettazione") Call>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElenco.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElenco.java new file mode 100644 index 00000000..7d07e948 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElenco.java @@ -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()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElenco.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElenco.java new file mode 100644 index 00000000..b1950a5d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElenco.java @@ -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 mOriginalOrderList; + private List 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 ordini) { + + mRenderedOrderList.clear(); + mRenderedOrderList.addAll(ordini); + } + + private void refreshRecyclerView() { + mAdapter.updateItems(mRenderedOrderList); + } + + private RunnableArgs onSingleSelectionChanged = dto -> { + List 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 selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); + List 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 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()) + + "

" + + "" + artsCounter + " " + 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(); + }); + + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneHelper.java new file mode 100644 index 00000000..65e65315 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneHelper.java @@ -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> onComplete, RunnableArgs onFailed){ + String codMdep = SettingsManager.i().userSession.depo.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.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>> call, Throwable t) { + Log.e("Produzione", t.toString()); + onFailed.run(new Exception(t)); + } + }); + } + + + public void retrievePickingList(List barcodeOrdini, RunnableArgs> onComplete, RunnableArgs onFailed){ + + String joinedBarcodes = TextUtils.join(",", barcodeOrdini); + + OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); + + service.pickingListAccettazione(joinedBarcodes).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + List 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>> call, Throwable t) { + Log.e("Produzione", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + 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_ord_produzione/core/OrdineProduzioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneListAdapter.java new file mode 100644 index 00000000..9088f446 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneListAdapter.java @@ -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 implements SectionTitleProvider { + + + private Context mContext; + + 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; + 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(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 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; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java index ad57f139..ed5c02ee 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java @@ -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, () -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java index 4e17a907..573b4b59 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java @@ -101,10 +101,6 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) .anyMatch(OrdineVenditaInevasoDTO::isSelected); - List 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 + + + + + + + + diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml new file mode 100644 index 00000000..7bf0a50c --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file 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 new file mode 100644 index 00000000..ad62dfd5 --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml new file mode 100644 index 00000000..e100e8ab --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml new file mode 100644 index 00000000..72a92614 --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index 0131e39b..30a46419 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -36,6 +36,14 @@ + + Generale Produzione + Picking produzione + Picking lavorazione Versamento materiale Recupero materiale diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 764bf300..1fdb95b5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -226,6 +226,8 @@ General Production + Production picking + Manufacture picking Deposit raw material Recover raw material @@ -236,5 +238,8 @@ Invalid recipient Module Title + + Hello blank fragment +