Separata lista di Accettazione/Produzione
This commit is contained in:
parent
7e93fd7535
commit
d46c172d27
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
@ -101,7 +101,7 @@ dependencies {
|
|||||||
implementation 'com.google.firebase:firebase-crash:16.2.1'
|
implementation 'com.google.firebase:firebase-crash:16.2.1'
|
||||||
implementation 'com.google.firebase:firebase-perf:18.0.1'
|
implementation 'com.google.firebase:firebase-perf:18.0.1'
|
||||||
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.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 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
implementation 'com.google.android.material:material:1.1.0-alpha07'
|
implementation 'com.google.android.material:material:1.1.0-alpha07'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
|
||||||
|
|||||||
@ -50,6 +50,8 @@ import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
|||||||
import it.integry.integrywmsnative.gest.login.LoginActivity;
|
import it.integry.integrywmsnative.gest.login.LoginActivity;
|
||||||
import it.integry.integrywmsnative.gest.main.MainFragment;
|
import it.integry.integrywmsnative.gest.main.MainFragment;
|
||||||
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment;
|
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_recupero_materiale.ProdRecuperoMaterialeFragment;
|
||||||
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
|
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
|
||||||
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
|
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment;
|
||||||
@ -148,47 +150,85 @@ public class MainActivity extends AppCompatActivity
|
|||||||
Fragment fragment = null;
|
Fragment fragment = null;
|
||||||
int id = item.getItemId();
|
int id = item.getItemId();
|
||||||
|
|
||||||
if (id == R.id.nav_home) {
|
|
||||||
this.pop();
|
switch(id) {
|
||||||
} else if (id == R.id.nav_accettazione) {
|
case R.id.nav_home:
|
||||||
fragment = MainAccettazioneFragment.newInstance();
|
this.pop();
|
||||||
this.adaptViewToFragment(fragment);
|
break;
|
||||||
} else if (id == R.id.nav_spedizione) {
|
|
||||||
fragment = MainVenditaFragment.newInstance();
|
case R.id.nav_accettazione:
|
||||||
this.adaptViewToFragment(fragment);
|
fragment = MainAccettazioneFragment.newInstance();
|
||||||
} else if (id == R.id.nav_rettifica_giacenze) {
|
this.adaptViewToFragment(fragment);
|
||||||
fragment = RettificaGiacenzeFragment.newInstance();
|
break;
|
||||||
this.adaptViewToFragment(fragment);
|
|
||||||
} else if (id == R.id.nav_versamento_merce) {
|
case R.id.nav_rettifica_giacenze:
|
||||||
fragment = VersamentoMerceFragment.newInstance();
|
fragment = RettificaGiacenzeFragment.newInstance();
|
||||||
this.adaptViewToFragment(fragment);
|
this.adaptViewToFragment(fragment);
|
||||||
} else if (id == R.id.nav_free_picking) {
|
break;
|
||||||
fragment = PickingLiberoFragment.newInstance();
|
|
||||||
this.adaptViewToFragment(fragment);
|
case R.id.nav_spedizione:
|
||||||
}
|
fragment = MainVenditaFragment.newInstance();
|
||||||
else if (id == R.id.nav_resi_cliente) {
|
this.adaptViewToFragment(fragment);
|
||||||
fragment = UltimeConsegneClienteFragment.newInstance();
|
break;
|
||||||
this.adaptViewToFragment(fragment);
|
|
||||||
}
|
case R.id.nav_versamento_merce:
|
||||||
else if (id == R.id.nav_prod_versamento_materiale) {
|
fragment = VersamentoMerceFragment.newInstance();
|
||||||
fragment = ProdVersamentoMaterialeFragment.newInstance();
|
this.adaptViewToFragment(fragment);
|
||||||
this.adaptViewToFragment(fragment);
|
break;
|
||||||
} else if (id == R.id.nav_prod_recupero_materiale) {
|
|
||||||
fragment = ProdRecuperoMaterialeFragment.newInstance();
|
case R.id.nav_free_picking:
|
||||||
this.adaptViewToFragment(fragment);
|
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);
|
changeContentFragment(fragment, true);
|
||||||
|
|
||||||
|
|||||||
@ -47,6 +47,16 @@ public class MenuConfiguration extends BaseMenuConfiguration {
|
|||||||
new MenuGroup()
|
new MenuGroup()
|
||||||
.setGroupText(R.string.production)
|
.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()
|
.addItem(new MenuItem()
|
||||||
.setID(R.id.nav_prod_versamento_materiale)
|
.setID(R.id.nav_prod_versamento_materiale)
|
||||||
.setTitleText(R.string.prod_versamento_materiale_title_fragment)
|
.setTitleText(R.string.prod_versamento_materiale_title_fragment)
|
||||||
|
|||||||
@ -245,7 +245,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
|
|||||||
mBinding.accettazioneMainList.setAdapter(mAdapter);
|
mBinding.accettazioneMainList.setAdapter(mAdapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onAccettazioneMainFabClick() {
|
private void onAccettazioneMainFabClick() {
|
||||||
|
|
||||||
List<OrdineAccettazioneGroupedInevasoDTO> selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi);
|
List<OrdineAccettazioneGroupedInevasoDTO> selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi);
|
||||||
List<String> barcodes = new ArrayList<>();
|
List<String> barcodes = new ArrayList<>();
|
||||||
|
|||||||
@ -39,7 +39,7 @@ public class AccettazioneHelper {
|
|||||||
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
|
String codMdep = SettingsManager.i().userSession.depo.getCodMdep();
|
||||||
|
|
||||||
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
|
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
|
@Override
|
||||||
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
|
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,9 @@ package it.integry.integrywmsnative.gest.accettazione.dto;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||||
|
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by GiuseppeS on 06/03/2018.
|
* Created by GiuseppeS on 06/03/2018.
|
||||||
@ -30,11 +32,26 @@ public class OrdineAccettazioneInevasoDTO {
|
|||||||
private String barcode;
|
private String barcode;
|
||||||
private String gestione;
|
private String gestione;
|
||||||
|
|
||||||
|
public BindableBoolean selected;
|
||||||
|
|
||||||
|
public OrdineAccettazioneInevasoDTO() {
|
||||||
|
this.selected = new BindableBoolean(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getData() {
|
public String getData() {
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Date getDataD(){
|
||||||
|
try {
|
||||||
|
return UtilityDate.recognizeDate(data);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public OrdineAccettazioneInevasoDTO setData(String data) {
|
public OrdineAccettazioneInevasoDTO setData(String data) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
return this;
|
return this;
|
||||||
@ -210,4 +227,15 @@ public class OrdineAccettazioneInevasoDTO {
|
|||||||
this.gestione = gestione;
|
this.gestione = gestione;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isSelected() {
|
||||||
|
return selected.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineAccettazioneInevasoDTO setSelected(boolean selected) {
|
||||||
|
this.selected.set(selected);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,9 @@ public interface OrdiniAccettazioneRESTConsumerService {
|
|||||||
@GET("SM2GetOrdiniAccettazioneInevasi")
|
@GET("SM2GetOrdiniAccettazioneInevasi")
|
||||||
Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> listOrdiniInevasi(@Query("codMdep") String codMdep);
|
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")
|
@GET("WMSGetPickingListAccettazione")
|
||||||
Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale);
|
Call<ServiceRESTResponse<List<OrdineAccettazioneDTO>>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale);
|
||||||
|
|
||||||
|
|||||||
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -60,18 +60,6 @@ public class ProdRecuperoMaterialeFragment extends Fragment implements ITitledFr
|
|||||||
return mBinding.getRoot();
|
return mBinding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Context context) {
|
|
||||||
super.onAttach(context);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDetach() {
|
|
||||||
super.onDetach();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void init() {
|
private void init() {
|
||||||
mHelper = new ProdRecuperoMaterialeHelper(getActivity());
|
mHelper = new ProdRecuperoMaterialeHelper(getActivity());
|
||||||
mViewmodel.init(getActivity(), mBinding, mHelper, () -> {
|
mViewmodel.init(getActivity(), mBinding, mHelper, () -> {
|
||||||
|
|||||||
@ -101,10 +101,6 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainLis
|
|||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
||||||
.anyMatch(OrdineVenditaInevasoDTO::isSelected);
|
.anyMatch(OrdineVenditaInevasoDTO::isSelected);
|
||||||
|
|
||||||
List<OrdineVenditaInevasoDTO> ordersToSelect =
|
|
||||||
Stream.of(mDataset)
|
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())).toList();
|
|
||||||
|
|
||||||
Stream.of(mDataset)
|
Stream.of(mDataset)
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
||||||
.forEach(x -> x.setSelected(!anySelected));
|
.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout>
|
||||||
|
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
tools:context=".gest.prod_ord_lavorazione.ProdOrdineLavorazioneElenco">
|
||||||
|
|
||||||
|
<!-- TODO: Update blank fragment layout -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:text="@string/hello_blank_fragment" />
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
</layout>
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout>
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_clienti_comm"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_toStartOf="@+id/ordine_produzione_main_list_group_clienti_datacons"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:paddingEnd="6dp"
|
||||||
|
android:text="TextView" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_clienti_datacons"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="TextView" />
|
||||||
|
</RelativeLayout>
|
||||||
|
</layout>
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
<data>
|
||||||
|
<import type="it.integry.integrywmsnative.R" />
|
||||||
|
<variable
|
||||||
|
name="checkboxValue"
|
||||||
|
type="it.integry.integrywmsnative.core.di.BindableBoolean" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:padding="8dp">
|
||||||
|
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_item_container_checkBox"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:layout_editor_absoluteX="0dp"
|
||||||
|
tools:layout_editor_absoluteY="1dp" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_toEndOf="@id/ordine_produzione_main_list_group_item_container_checkBox">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_item_container_testata_ord"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Ord. Prod. 39 del 27 ott 2017"
|
||||||
|
android:textColor="#000" />
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_item_container_clienti_ord"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/ordine_produzione_main_list_group_item_container_testata_ord"
|
||||||
|
android:orientation="vertical">
|
||||||
|
</LinearLayout>
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
||||||
|
</layout>
|
||||||
@ -0,0 +1,67 @@
|
|||||||
|
<layout>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:card_view="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
|
|
||||||
|
<!--<androidx.cardview.widget.CardView-->
|
||||||
|
<!--xmlns:card_view="http://schemas.android.com/apk/res-auto"-->
|
||||||
|
<!--android:id="@+id/card_view"-->
|
||||||
|
<!--android:layout_gravity="center"-->
|
||||||
|
<!--android:layout_width="match_parent"-->
|
||||||
|
<!--android:layout_height="wrap_content"-->
|
||||||
|
<!--card_view:cardUseCompatPadding="true"-->
|
||||||
|
<!--card_view:cardCornerRadius="4dp"-->
|
||||||
|
<!--card_view:cardElevation="4dp">-->
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="@color/mainGreen"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingTop="8dp"
|
||||||
|
android:paddingEnd="8dp"
|
||||||
|
android:paddingBottom="8dp">
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="true"
|
||||||
|
android:enabled="false" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_header"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@android:color/white"
|
||||||
|
android:textStyle="bold"
|
||||||
|
style="@android:style/TextAppearance.Medium"
|
||||||
|
tools:text="NOME GRUPPO"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:id="@+id/ordine_produzione_main_list_group_item_container">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!--</androidx.cardview.widget.CardView>-->
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</layout>
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
<layout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<data>
|
||||||
|
<import type="androidx.databinding.ObservableList"/>
|
||||||
|
<variable name="view" type="it.integry.integrywmsnative.gest.prod_ord_produzione.ProdOrdineProduzioneElenco" />
|
||||||
|
</data>
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@color/full_white"
|
||||||
|
tools:context="it.integry.integrywmsnative.gest.prod_ord_produzione.ProdOrdineProduzioneElenco">
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/ordine_produzione_main_list"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/ordini_produzione_empty_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:alpha="0.3">
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/guideline_empty_top"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
app:layout_constraintGuide_percent="0.2" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/guideline_empty_left"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.15" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/guideline_empty_right"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.85" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="72dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:src="@drawable/ic_playlist_add_check_24dp"
|
||||||
|
android:adjustViewBounds="true"/>
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:textColor="@android:color/black"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:text="@string/no_orders_found_message"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
|
android:id="@+id/ordine_produzione_main_fab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|end"
|
||||||
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
android:tint="@android:color/white"
|
||||||
|
app:srcCompat="@drawable/ic_check_black_24dp" />
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
</layout>
|
||||||
@ -36,6 +36,14 @@
|
|||||||
<group android:checkableBehavior="single" >
|
<group android:checkableBehavior="single" >
|
||||||
<item android:title="@string/production">
|
<item android:title="@string/production">
|
||||||
<menu>
|
<menu>
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_prod_ordine_produzione"
|
||||||
|
android:icon="@drawable/ic_black_external"
|
||||||
|
android:title="@string/prod_ordine_produzione_title_fragment" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_prod_ordine_lavorazione"
|
||||||
|
android:icon="@drawable/ic_black_external"
|
||||||
|
android:title="@string/prod_ordine_lavorazione_title_fragment" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_prod_versamento_materiale"
|
android:id="@+id/nav_prod_versamento_materiale"
|
||||||
android:icon="@drawable/ic_black_external"
|
android:icon="@drawable/ic_black_external"
|
||||||
|
|||||||
@ -223,6 +223,8 @@
|
|||||||
|
|
||||||
<string name="general">Generale</string>
|
<string name="general">Generale</string>
|
||||||
<string name="production">Produzione</string>
|
<string name="production">Produzione</string>
|
||||||
|
<string name="prod_ordine_produzione_title_fragment">Picking produzione</string>
|
||||||
|
<string name="prod_ordine_lavorazione_title_fragment">Picking lavorazione</string>
|
||||||
<string name="prod_versamento_materiale_title_fragment">Versamento materiale</string>
|
<string name="prod_versamento_materiale_title_fragment">Versamento materiale</string>
|
||||||
<string name="prod_recupero_materiale_title_fragment">Recupero materiale</string>
|
<string name="prod_recupero_materiale_title_fragment">Recupero materiale</string>
|
||||||
|
|
||||||
|
|||||||
@ -226,6 +226,8 @@
|
|||||||
|
|
||||||
<string name="general">General</string>
|
<string name="general">General</string>
|
||||||
<string name="production">Production</string>
|
<string name="production">Production</string>
|
||||||
|
<string name="prod_ordine_produzione_title_fragment">Production picking</string>
|
||||||
|
<string name="prod_ordine_lavorazione_title_fragment">Manufacture picking</string>
|
||||||
<string name="prod_versamento_materiale_title_fragment">Deposit raw material</string>
|
<string name="prod_versamento_materiale_title_fragment">Deposit raw material</string>
|
||||||
<string name="prod_recupero_materiale_title_fragment">Recover raw material</string>
|
<string name="prod_recupero_materiale_title_fragment">Recover raw material</string>
|
||||||
|
|
||||||
@ -236,5 +238,8 @@
|
|||||||
<string name="not_valid_recipient_error">Invalid recipient</string>
|
<string name="not_valid_recipient_error">Invalid recipient</string>
|
||||||
<string name="title_dynamic_ime">Module Title</string>
|
<string name="title_dynamic_ime">Module Title</string>
|
||||||
|
|
||||||
|
<!-- TODO: Remove or change this placeholder text -->
|
||||||
|
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user