Finish v1_6_5(66)

This commit is contained in:
Giuseppe Scorrano 2019-07-02 19:06:54 +02:00
commit afe90d3c46
29 changed files with 1053 additions and 902 deletions

Binary file not shown.

View File

@ -6,7 +6,7 @@
<option name="DEPLOY_AS_INSTANT" value="false" /> <option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" /> <option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" /> <option name="PM_INSTALL_OPTIONS" value="" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic__base,dynamic_ime" /> <option name="DYNAMIC_FEATURES_DISABLED_LIST" value="dynamic_ime,dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" /> <option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="true" /> <option name="CLEAR_LOGCAT" value="true" />
@ -43,7 +43,7 @@
</Native> </Native>
<Profilers> <Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" /> <option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" /> <option name="STARTUP_CPU_PROFILING_ENABLED" value="true" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" /> <option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Sample Java Methods" />
</Profilers> </Profilers>
<option name="DEEP_LINK" value="" /> <option name="DEEP_LINK" value="" />

View File

@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 65 def appVersionCode = 66
def appVersionName = '1.6.4' def appVersionName = '1.6.5'
signingConfigs { signingConfigs {
release { release {
@ -99,7 +99,7 @@ dependencies {
implementation 'com.orhanobut:logger:2.2.0' implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.google.firebase:firebase-core:17.0.0' implementation 'com.google.firebase:firebase-core:17.0.0'
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.0' 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-beta01'
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
@ -147,6 +147,7 @@ dependencies {
//AppUpdate //AppUpdate
implementation 'com.github.javiersantos:AppUpdater:2.7' implementation 'com.github.javiersantos:AppUpdater:2.7'
//Barcode //Barcode
implementation project(':pointmobilescannerlibrary') implementation project(':pointmobilescannerlibrary')
implementation project(':zebrascannerlibrary') implementation project(':zebrascannerlibrary')

View File

@ -157,10 +157,10 @@ public class MainActivity extends AppCompatActivity
fragment = PickingLiberoFragment.newInstance(); fragment = PickingLiberoFragment.newInstance();
this.adaptViewToFragment(fragment); this.adaptViewToFragment(fragment);
} }
// else if (id == R.id.nav_resi_cliente) { else if (id == R.id.nav_resi_cliente) {
// fragment = UltimeConsegneClienteFragment.newInstance(); fragment = UltimeConsegneClienteFragment.newInstance();
// this.adaptViewToFragment(fragment); this.adaptViewToFragment(fragment);
// } }
else if (id == R.id.nav_prod_versamento_materiale) { else if (id == R.id.nav_prod_versamento_materiale) {
fragment = ProdVersamentoMaterialeFragment.newInstance(); fragment = ProdVersamentoMaterialeFragment.newInstance();
this.adaptViewToFragment(fragment); this.adaptViewToFragment(fragment);

View File

@ -6,10 +6,10 @@ import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public interface IOrdiniVendita { public interface IOrdiniVendita {
void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaGroupedInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed); void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed);
} }

View File

@ -1,16 +1,83 @@
package it.integry.integrywmsnative.core.di; package it.integry.integrywmsnative.core.di;
import androidx.annotation.NonNull;
import androidx.databinding.BaseObservable; import androidx.databinding.BaseObservable;
import androidx.databinding.Bindable;
import androidx.databinding.Observable;
import androidx.databinding.PropertyChangeRegistry;
public class BindableBoolean implements Observable {
public class BindableBoolean extends BaseObservable {
boolean mValue; boolean mValue;
public BindableBoolean() {} private transient PropertyChangeRegistry mCallbacks;
public BindableBoolean() {
}
public BindableBoolean(boolean startValue) { public BindableBoolean(boolean startValue) {
this.mValue = startValue; this.mValue = startValue;
} }
@Override
public void addOnPropertyChangedCallback(@NonNull OnPropertyChangedCallback callback) {
synchronized (this) {
if (mCallbacks == null) {
mCallbacks = new PropertyChangeRegistry();
}
}
mCallbacks.add(callback);
}
@Override
public void removeOnPropertyChangedCallback(@NonNull OnPropertyChangedCallback callback) {
synchronized (this) {
if (mCallbacks == null) {
return;
}
}
mCallbacks.remove(callback);
}
public void resetOnPropertyChangedCallback() {
synchronized (this) {
if (mCallbacks == null) {
return;
}
}
mCallbacks.clear();
mCallbacks = null;
}
/**
* Notifies listeners that all properties of this instance have changed.
*/
public void notifyChange() {
synchronized (this) {
if (mCallbacks == null) {
return;
}
}
mCallbacks.notifyCallbacks(this, 0, null);
}
/**
* Notifies listeners that a specific property has changed. The getter for the property
* that changes should be marked with {@link Bindable} to generate a field in
* <code>BR</code> to be used as <code>fieldId</code>.
*
* @param fieldId The generated BR id for the Bindable field.
*/
public void notifyPropertyChanged(int fieldId) {
synchronized (this) {
if (mCallbacks == null) {
return;
}
}
mCallbacks.notifyCallbacks(this, fieldId, null);
}
public boolean get() { public boolean get() {
return mValue; return mValue;
} }

View File

@ -47,4 +47,24 @@ public class FiltroOrdineDTO {
this.numOrd = numOrd; this.numOrd = numOrd;
return this; return this;
} }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FiltroOrdineDTO that = (FiltroOrdineDTO) o;
if (getNumOrd() != that.getNumOrd()) return false;
if (!getGestioneOrd().equals(that.getGestioneOrd())) return false;
return dataOrd.equals(that.dataOrd);
}
@Override
public int hashCode() {
int result = getGestioneOrd().hashCode();
result = 31 * result + dataOrd.hashCode();
result = 31 * result + getNumOrd();
return result;
}
} }

View File

@ -4,6 +4,7 @@ import com.orhanobut.logger.Logger;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.net.SocketTimeoutException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
@ -39,6 +40,8 @@ public class UtilityLogger {
} }
public static void errorMe(Exception ex, String additionalText, Runnable onComplete, RunnableArgs<Exception> onFailed) { public static void errorMe(Exception ex, String additionalText, Runnable onComplete, RunnableArgs<Exception> onFailed) {
if(!(ex instanceof SocketTimeoutException)) {
String message = UtilityResources.readRawTextFile(R.raw.error_mail); String message = UtilityResources.readRawTextFile(R.raw.error_mail);
message = message.replace("#exception_name#", ex.getMessage()); message = message.replace("#exception_name#", ex.getMessage());
@ -57,5 +60,6 @@ public class UtilityLogger {
SystemRESTConsumer.sendErrorLogMail(message, onComplete, onFailed); SystemRESTConsumer.sendErrorLogMail(message, onComplete, onFailed);
} }
}
} }

View File

@ -217,10 +217,10 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
((MainActivity) getActivity()).setItem(R.id.nav_free_picking); ((MainActivity) getActivity()).setItem(R.id.nav_free_picking);
} }
// @OnClick(R.id.fast_button_resi_clienti) @OnClick(R.id.fast_button_resi_clienti)
// public void onClickResiClientio(View view) { public void onClickResiClientio(View view) {
// ((MainActivity) getActivity()).setItem(R.id.nav_resi_cliente); ((MainActivity) getActivity()).setItem(R.id.nav_resi_cliente);
// } }

View File

@ -21,7 +21,6 @@ import android.view.ViewGroup;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import butterknife.ButterKnife; import butterknife.ButterKnife;
@ -46,7 +45,6 @@ import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper; import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato; import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel; import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.vendita.viewmodel.VenditaViewModel; import it.integry.integrywmsnative.gest.vendita.viewmodel.VenditaViewModel;
@ -66,7 +64,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
private MainListVenditaAdapter mAdapter; private MainListVenditaAdapter mAdapter;
private List<OrdineVenditaInevasoDTO> mOriginalOrderList; private List<OrdineVenditaInevasoDTO> mOriginalOrderList;
private List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi; private List<OrdineVenditaInevasoDTO> mRenderedOrderList = new ArrayList<>();
private DialogVenditaFiltroAvanzatoViewModel mAppliedFilterViewModel; private DialogVenditaFiltroAvanzatoViewModel mAppliedFilterViewModel;
@ -121,7 +119,6 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
ButterKnife.bind(this, mBinding.getRoot()); ButterKnife.bind(this, mBinding.getRoot());
// if(mWaterfallToolbar != null) mWaterfallToolbar.setRecyclerView(mBinding.venditaMainList);
if(mToolbar != null) mToolbar.setRecyclerView(mBinding.venditaMainList); if(mToolbar != null) mToolbar.setRecyclerView(mBinding.venditaMainList);
return mBinding.getRoot(); return mBinding.getRoot();
@ -166,7 +163,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
mBinding.ordiniVenditaEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE); mBinding.ordiniVenditaEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
groupOrdini(ordini); refreshOrdini(ordini);
initRecyclerView(); initRecyclerView();
progress.dismiss(); progress.dismiss();
} }
@ -188,112 +185,124 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
} }
public void groupOrdini(List<OrdineVenditaInevasoDTO> ordini){ public void refreshOrdini(List<OrdineVenditaInevasoDTO> ordini){
groupedOrdiniInevasi = new ArrayList<>(); mRenderedOrderList.clear();
mRenderedOrderList.addAll(ordini);
//Splitto gli ordini per codAnagOrd (Cliente)
Stream.of(ordini)
.distinctBy(OrdineVenditaInevasoDTO::getCodAnagOrd)
.sortBy(OrdineVenditaInevasoDTO::getRagSocOrd)
.map(x -> x.getCodAnagOrd() + "#_#" + x.getRagSocOrd())
.forEach(anagOrd -> {
String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#"));
String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3);
OrdineVenditaGroupedInevasoDTO groupedOrdine = new OrdineVenditaGroupedInevasoDTO();
groupedOrdine.codAnagClie = codAnagOrd;
groupedOrdine.nomeCliente = ragSocOrd;
groupedOrdine.ordini = new ArrayList<>();
//Raggruppo gli ordini del singolo fornitore suddivisi per data, dataCons e numero
Stream.of(ordini)
.filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd))
.distinctBy(x -> x.getDataOrdS() + " - " + x.getDataConsS() + " - " + x.getNumOrd())
.sortBy(x -> x.getDataConsD() != null ? x.getDataConsD() : new Date(2000, 01, 01))
.forEach(ord -> {
OrdineVenditaGroupedInevasoDTO.Ordine rigaOrdine = new OrdineVenditaGroupedInevasoDTO.Ordine();
rigaOrdine
.setData(ord.getDataOrdS())
.setNumero(ord.getNumOrd())
.setCodMdep(ord.getCodMdep())
.setCodAnagOrd(ord.getCodAnagOrd())
.setCodAnagClie(groupedOrdine.codAnagClie)
.setRagSocOrd(ord.getRagSocOrd())
.setPesoTotale(ord.getPesoTotale() != null ? ord.getPesoTotale().floatValue() : null)
.setBarcode(ord.getBarcode())
.setTermCons(ord.getTermCons())
.setDataCons(ord.getDataConsS())
.setRifOrd(ord.getRifOrd())
.setGestione(ord.getGestione())
.setExistCollo(ord.flagExistCollo());
rigaOrdine.clienti = new ArrayList<>();
//Leggo tutti i clienti dell'ordine corrente
Stream.of(ordini)
.filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd) &&
x.getNumOrd().equals(ord.getNumOrd()) &&
x.getDataOrdS().equalsIgnoreCase(ord.getDataOrdS()) &&
x.getDataConsS().equalsIgnoreCase(ord.getDataConsS()))
.distinctBy(OrdineVenditaInevasoDTO::getCodJcom)
.forEach(ordCliente -> {
OrdineVenditaGroupedInevasoDTO.Cliente cliente = new OrdineVenditaGroupedInevasoDTO.Cliente();
cliente.codJcom = ordCliente.getCodJcom();
cliente.ragSocCom = ordCliente.getRagSocCom();
cliente.descrCom = ordCliente.getDescrizioneCom();
cliente.dataCons = ordCliente.getDataConsS();
cliente.numCnf = ordCliente.getNumCnfdaEvadere() != null ? ordCliente.getNumCnfdaEvadere().floatValue() : 0;
cliente.rifOrd = ordCliente.getRifOrd();
rigaOrdine.clienti.add(cliente);
});
groupedOrdine.ordini.add(rigaOrdine);
});
groupedOrdiniInevasi.add(groupedOrdine);
});
//
// //Splitto gli ordini per codAnagOrd (Cliente)
// Stream.of(ordini)
// .distinctBy(OrdineVenditaInevasoDTO::getCodAnagOrd)
// .sortBy(OrdineVenditaInevasoDTO::getRagSocOrd)
// .map(x -> x.getCodAnagOrd() + "#_#" + x.getRagSocOrd())
// .forEach(anagOrd -> {
//
// String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#"));
// String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3);
//
// OrdineVenditaGroupedInevasoDTO groupedOrdine = new OrdineVenditaGroupedInevasoDTO();
//
// groupedOrdine.codAnagClie = codAnagOrd;
// groupedOrdine.nomeCliente = ragSocOrd;
// groupedOrdine.ordini = new ArrayList<>();
//
//
// //Raggruppo gli ordini del singolo fornitore suddivisi per data, dataCons e numero
// Stream.of(ordini)
// .filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd))
// .distinctBy(x -> x.getDataOrdS() + " - " + x.getDataConsS() + " - " + x.getNumOrd())
// .sortBy(x -> x.getDataConsD() != null ? x.getDataConsD() : new Date(2000, 01, 01))
// .forEach(ord -> {
//
//
// OrdineVenditaGroupedInevasoDTO.Ordine rigaOrdine = new OrdineVenditaGroupedInevasoDTO.Ordine();
//
// rigaOrdine
// .setData(ord.getDataOrdS())
// .setNumero(ord.getNumOrd())
// .setCodMdep(ord.getCodMdep())
// .setCodAnagOrd(ord.getCodAnagOrd())
// .setCodAnagClie(groupedOrdine.codAnagClie)
// .setRagSocOrd(ord.getRagSocOrd())
// .setPesoTotale(ord.getPesoTotale() != null ? ord.getPesoTotale().floatValue() : null)
// .setBarcode(ord.getBarcode())
// .setTermCons(ord.getTermCons())
// .setDataCons(ord.getDataConsS())
// .setRifOrd(ord.getRifOrd())
// .setGestione(ord.getGestione())
// .setExistCollo(ord.flagExistCollo());
//
// rigaOrdine.clienti = new ArrayList<>();
//
//
// //Leggo tutti i clienti dell'ordine corrente
// Stream.of(ordini)
// .filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd) &&
// x.getNumOrd().equals(ord.getNumOrd()) &&
// x.getDataOrdS().equalsIgnoreCase(ord.getDataOrdS()) &&
// x.getDataConsS().equalsIgnoreCase(ord.getDataConsS()))
// .distinctBy(OrdineVenditaInevasoDTO::getCodJcom)
// .forEach(ordCliente -> {
//
// OrdineVenditaGroupedInevasoDTO.Cliente cliente = new OrdineVenditaGroupedInevasoDTO.Cliente();
//
// cliente.codJcom = ordCliente.getCodJcom();
// cliente.ragSocCom = ordCliente.getRagSocCom();
// cliente.descrCom = ordCliente.getDescrizioneCom();
// cliente.dataCons = ordCliente.getDataConsS();
// cliente.numCnf = ordCliente.getNumCnfdaEvadere() != null ? ordCliente.getNumCnfdaEvadere().floatValue() : 0;
// cliente.rifOrd = ordCliente.getRifOrd();
//
// rigaOrdine.clienti.add(cliente);
//
// });
//
// groupedOrdine.ordini.add(rigaOrdine);
//
//
// });
//
// mRenderedOrderList.add(groupedOrdine);
//
// });
} }
private void initRecyclerView() { private void initRecyclerView() {
mAdapter = new MainListVenditaAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged, onSingleSelectionChanged); // mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onGroupSelectionChanged, onSingleSelectionChanged);
mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
mBinding.venditaMainList.setAdapter(mAdapter); mBinding.venditaMainList.setAdapter(mAdapter);
} }
public void refreshRecyclerView() { public void refreshRecyclerView() {
mAdapter.updateItems(groupedOrdiniInevasi); mAdapter.updateItems(mRenderedOrderList);
} }
private RunnableArgs<OrdineVenditaGroupedInevasoDTO.Ordine> onSingleSelectionChanged = dto -> { private RunnableArgs<OrdineVenditaInevasoDTO> onSingleSelectionChanged = dto -> {
List<OrdineVenditaGroupedInevasoDTO> selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); List<OrdineVenditaInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){ if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){
boolean allMatch = Stream.of(selectedOrders).allMatch(x -> dto.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd()));
if(selectedOrders != null && selectedOrders.size() > 1){ if(!allMatch) {
for (OrdineVenditaGroupedInevasoDTO selectedOrder : selectedOrders) { Stream.of(selectedOrders)
if(!dto.getCodAnagClie().equalsIgnoreCase(selectedOrder.codAnagClie)) { .filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd()))
Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); .forEach(x -> x.setSelected(false));
}
}
}
} }
//
// if(selectedOrders != null && selectedOrders.size() > 1){
// for (OrdineVenditaInevasoDTO selectedOrder : selectedOrders) {
// if(!dto.getCodAnagOrd().equalsIgnoreCase(selectedOrder.getCodAnagOrd())) {
// Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false));
// }
// }
// }
}
//
if(selectedOrders != null && selectedOrders.size() > 0) { if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.venditaMainFab.show(); mBinding.venditaMainFab.show();
} }
@ -302,40 +311,20 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
} }
}; };
private RunnableArgs<OrdineVenditaGroupedInevasoDTO> onGroupSelectionChanged = dto -> {
List<OrdineVenditaGroupedInevasoDTO> selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi);
if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){
if(selectedOrders != null && selectedOrders.size() > 1){
for (OrdineVenditaGroupedInevasoDTO selectedOrder : selectedOrders) {
if(!dto.codAnagClie.equalsIgnoreCase(selectedOrder.codAnagClie)) {
Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false));
}
}
}
}
if(selectedOrders != null && selectedOrders.size() > 0) mBinding.venditaMainFab.show();
else mBinding.venditaMainFab.hide();
};
@OnClick(R.id.vendita_main_fab) @OnClick(R.id.vendita_main_fab)
public void onClick(View view) { public void onClick(View view) {
List<OrdineVenditaGroupedInevasoDTO> selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); List<OrdineVenditaInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
List<String> barcodes = new ArrayList<>(); List<String> barcodes = new ArrayList<>();
String dataCons = null; String dataCons = null;
for(OrdineVenditaGroupedInevasoDTO ordine : selectedOrders){ for(OrdineVenditaInevasoDTO ordine : selectedOrders){
for(OrdineVenditaGroupedInevasoDTO.Ordine righeOrd : ordine.ordini){ if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode());
if(!barcodes.contains(righeOrd.getBarcode())) barcodes.add(righeOrd.getBarcode());
if(dataCons == null) dataCons = righeOrd.getDataConsS(); if(dataCons == null) dataCons = ordine.getDataConsS();
else if(!dataCons.equalsIgnoreCase(righeOrd.getDataConsS())) dataCons = ""; else if(!dataCons.equalsIgnoreCase(ordine.getDataConsS())) dataCons = "";
}
} }
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
@ -407,12 +396,12 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
@Override @Override
public void onSelectAll() { public void onSelectAll() {
if(groupedOrdiniInevasi != null && groupedOrdiniInevasi.size() > 0) { if(mRenderedOrderList != null && mRenderedOrderList.size() > 0) {
if(mHelper.getSelectedOrders(groupedOrdiniInevasi).size() > 0){ if(mHelper.getSelectedOrders(mRenderedOrderList).size() > 0){
mHelper.deselectAll(groupedOrdiniInevasi); mHelper.deselectAll(mRenderedOrderList);
} else { } else {
//Selezionare solo quelli attualmente a video //Selezionare solo quelli attualmente a video
mHelper.selectAll(groupedOrdiniInevasi); mHelper.selectAll(mRenderedOrderList);
} }
} }
@ -426,22 +415,19 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
if(filteredOrderList != null){ if(filteredOrderList != null){
groupOrdini(filteredOrderList); refreshOrdini(filteredOrderList);
refreshRecyclerView(); refreshRecyclerView();
} }
}).show(); }).show();
} }
private void checkSelectedOrders(List<OrdineVenditaGroupedInevasoDTO> selectedOrders, Runnable onComplete, Runnable onFailed) { private void checkSelectedOrders(List<OrdineVenditaInevasoDTO> selectedOrders, Runnable onComplete, Runnable onFailed) {
if(selectedOrders != null && selectedOrders.size() > 0) { if(selectedOrders != null && selectedOrders.size() > 0) {
List<OrdineVenditaGroupedInevasoDTO.Ordine> flatOrderArray = new ArrayList<>();
Stream.of(selectedOrders).forEach(x -> flatOrderArray.addAll(x.ordini));
//Definizione della gestione collo di default //Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(flatOrderArray) List<GestioneEnum> foundGestioni = Stream.of(selectedOrders)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum) .map(OrdineVenditaInevasoDTO::getGestioneEnum)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -454,8 +440,8 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
} }
//Definizione del deposito di default //Definizione del deposito di default
List<String> foundCodMdep = Stream.of(flatOrderArray) List<String> foundCodMdep = Stream.of(selectedOrders)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodMdep) .map(OrdineVenditaInevasoDTO::getCodMdep)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -471,7 +457,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
onComplete.run(); onComplete.run();
} }
private void startVenditaActivity(List<PickingObjectDTO> ordini, List<OrdineVenditaGroupedInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) { private void startVenditaActivity(List<PickingObjectDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class); Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class);
String keyPickingList = DataCache.addItem(ordini); String keyPickingList = DataCache.addItem(ordini);

View File

@ -1,234 +1,254 @@
package it.integry.integrywmsnative.gest.vendita.core; package it.integry.integrywmsnative.gest.vendita.core;
import android.content.Context; import android.content.Context;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.util.Pools;
import androidx.recyclerview.widget.RecyclerView;
import android.graphics.Color;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList; 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.HashMap;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.databinding.VenditaMainListGroupModelBinding;
import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class MainListVenditaAdapter extends RecyclerView.Adapter<MainListVenditaAdapter.ViewHolder> { public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainListVenditaAdapter.SubheaderHolder, MainListVenditaAdapter.SingleItemViewHolder> implements SectionTitleProvider {
private Context mContext; private Context mContext;
private List<OrdineVenditaGroupedInevasoDTO> mDataset;
private RunnableArgs<OrdineVenditaGroupedInevasoDTO> mOnGroupSelected;
private RunnableArgs<OrdineVenditaGroupedInevasoDTO.Ordine> mOnSingleSelectionChanged;
private Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(2000); private List<OrdineVenditaInevasoDTO> mDataset;
private Pools.SynchronizedPool sPoolClienti = new Pools.SynchronizedPool(3000); private RunnableArgs<OrdineVenditaInevasoDTO> mOnSingleSelectionChanged;
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
private TextView mTextViewGroupHeader;
private LinearLayout mLinearLayoutGroupItemContainer;
private List<View> views = new ArrayList<>(); static class SubheaderHolder extends RecyclerView.ViewHolder {
public ViewHolder(View v) { VenditaMainListModelBinding binding;
super(v);
SubheaderHolder(VenditaMainListModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
VenditaMainListGroupModelBinding binding;
SingleItemViewHolder(VenditaMainListGroupModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
} }
} }
// Provide a suitable constructor (depends on the kind of dataset)
public MainListVenditaAdapter(Context context, List<OrdineVenditaGroupedInevasoDTO> myDataset, RunnableArgs<OrdineVenditaGroupedInevasoDTO> onGroupSelected, RunnableArgs<OrdineVenditaGroupedInevasoDTO.Ordine> onSingleSelectionChanged) { public MainListVenditaAdapter(Context context, List<OrdineVenditaInevasoDTO> myDataset, RunnableArgs<OrdineVenditaInevasoDTO> onSingleSelectionChanged) {
mContext = context; mContext = context;
mDataset = myDataset; mDataset = orderItems(myDataset);
mOnGroupSelected = onGroupSelected;
mOnSingleSelectionChanged = onSingleSelectionChanged; mOnSingleSelectionChanged = onSingleSelectionChanged;
} }
public void updateItems(List<OrdineVenditaGroupedInevasoDTO> updatedDataset) { public void updateItems(List<OrdineVenditaInevasoDTO> updatedDataset) {
mDataset.clear(); mDataset.clear();
mDataset.addAll(updatedDataset); mDataset.addAll(orderItems(updatedDataset));
notifyDataSetChanged(); notifyDataSetChanged();
notifyDataChanged();
} }
// Create new views (invoked by the layout manager) private List<OrdineVenditaInevasoDTO> orderItems(List<OrdineVenditaInevasoDTO> dataset) {
return Stream.of(dataset)
.sortBy(OrdineVenditaInevasoDTO::getRagSocOrd)
.toList();
}
@Override @Override
public MainListVenditaAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
int viewType) { VenditaMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_model, parent, false);
// create a new view return new SubheaderHolder(binding);
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.vendita_main_list_model, parent, false);
ViewHolder vh = new ViewHolder(v);
TextView groupHeader = v.findViewById(R.id.vendita_main_list_group_header);
vh.mTextViewGroupHeader = groupHeader;
LinearLayout groupItemContainer = v.findViewById(R.id.vendita_main_list_group_item_container);
vh.mLinearLayoutGroupItemContainer = groupItemContainer;
return vh;
} }
// Replace the contents of a view (invoked by the layout manager)
@Override @Override
public void onBindViewHolder(ViewHolder holder, int position) { public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
// - get element from your dataset at this position VenditaMainListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.vendita_main_list_group_model, parent, false);
// - replace the contents of the view with that element return new SingleItemViewHolder(binding);
final List<OrdineVenditaGroupedInevasoDTO.Ordine> subGroup = mDataset.get(position).ordini;
final int finalPosition = position;
holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeCliente);
holder.itemView.setOnClickListener(view -> {
boolean newValue = true;
for(int i = 0; i < subGroup.size(); i++){
if(subGroup.get(i).checkBox) newValue = false;
} }
for(int i = 0; i < subGroup.size(); i++){
subGroup.get(i).setCheckbox(newValue); @Override
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
subheaderHolder.binding.venditaMainListGroupHeader.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(OrdineVenditaInevasoDTO::isSelected);
List<OrdineVenditaInevasoDTO> ordersToSelect =
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())).toList();
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.forEach(x -> x.setSelected(!anySelected));
});
} }
mOnGroupSelected.run(mDataset.get(finalPosition)); @Override
public void onBindItemViewHolder(SingleItemViewHolder h, int itemPosition) {
final OrdineVenditaInevasoDTO ordine = mDataset.get(itemPosition);
final SingleItemViewHolder holder = h;
holder.binding.venditaMainListGroupItemContainerCheckBox.setTag(ordine.getNumOrd());
holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null);
ordine.selected.resetOnPropertyChangedCallback();
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), ordine.flagExistCollo() ? R.color.colorPrimary : android.R.color.transparent, null));
String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
holder.binding.venditaMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
holder.binding.venditaMainListGroupItemContainerTestataDataCons.setText(Html.fromHtml(testataDataConsString));
holder.binding.venditaMainListGroupItemContainerDetailOrd.setText(ordine.getRifOrd());
holder.binding.setCheckboxValue(ordine.selected);
holder.binding.getRoot().setOnClickListener(v -> {
ordine.setSelected(!ordine.isSelected());
}); });
for (int i = 0; i < subGroup.size(); i++) { holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
final OrdineVenditaGroupedInevasoDTO.Ordine ordine = subGroup.get(i);
ordine.checkBoxCallback = new ArrayList<>(); //Bindable to View
ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
View groupModelViewPool = (View) sPool.acquire(); @Override
if(groupModelViewPool == null){ public void onPropertyChanged(Observable sender, int propertyId) {
groupModelViewPool = LayoutInflater.from(mContext) if(holder.binding.venditaMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumOrd())) {
.inflate(R.layout.vendita_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); holder.binding.venditaMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
} }
View ordineView = groupModelViewPool;
holder.views.add(ordineView);
ordineView.setVisibility(View.VISIBLE);
if (i % 2 == 1) {
ordineView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
} else {
ordineView.setBackgroundColor(mContext.getResources().getColor(R.color.white));
} }
});
final CheckBox checkBox = ordineView.findViewById(R.id.vendita_main_list_group_item_container_checkBox);
checkBox.setChecked(ordine.checkBox);
checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { //View to Bindable
ordine.checkBox = checkBox.isChecked(); holder.binding.venditaMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
ordine.setSelected(isChecked);
mOnSingleSelectionChanged.run(ordine); mOnSingleSelectionChanged.run(ordine);
}); });
ordine.checkBoxCallback.add(checkBox::setChecked);
ordineView.setOnClickListener(view -> {
checkBox.toggle();
//ordine.checkBox = checkBox.isChecked();
//mOnGroupSelected.run(mDataset.get(finalPosition));
});
TextView testataOrdTextView = ordineView.findViewById(R.id.vendita_main_list_group_item_container_testata_ord);
String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
testataOrdTextView.setText(Html.fromHtml(testataOrdString));
TextView testataDataConsTextView = ordineView.findViewById(R.id.vendita_main_list_group_item_container_testata_data_cons);
String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
testataDataConsTextView.setText(Html.fromHtml(testataDataConsString));
LinearLayout clientLinearLayout = ordineView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord);
List<OrdineVenditaGroupedInevasoDTO.Cliente> subGroupClienti = ordine.clienti;
clientLinearLayout.removeAllViews();
for (int k = 0; k < subGroupClienti.size(); k++) {
View groupClienteModelViewPool = (View) sPoolClienti.acquire();
if(groupClienteModelViewPool == null){
groupClienteModelViewPool = LayoutInflater.from(mContext)
.inflate(R.layout.vendita_main_list_group_clienti, clientLinearLayout, false);
} }
View groupClienteModelView = groupClienteModelViewPool;
TextView clienteComm = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_comm);
String clienteText;
clienteText = subGroupClienti.get(k).rifOrd;
clienteComm.setText(clienteText);
// TextView dataCons = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_datacons);
// if (subGroupClienti.get(k).getDataCons() != null) {
// dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH));
// } else {
// dataCons.setText("");
// }
clientLinearLayout.addView(groupClienteModelView);
}
holder.mLinearLayoutGroupItemContainer.addView(ordineView);
}
}
@Override @Override
public void onViewRecycled(ViewHolder holder){ public boolean onPlaceSubheaderBetweenItems(int position) {
if(holder != null){ return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd());
for(int i = 0; i < holder.views.size(); i++){
View groupModelView = holder.views.get(i);
LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord);
for(int k = 0; k < clientLinearLayout.getChildCount(); k++){
View cliente = clientLinearLayout.getChildAt(k);
((ViewGroup) cliente.getParent()).removeView(cliente);
sPoolClienti.release(cliente);
} }
((ViewGroup) groupModelView.getParent()).removeView(groupModelView);
sPool.release(groupModelView);
}
holder.views.clear();
}
super.onViewRecycled(holder);
}
// Return the size of your dataset (invoked by the layout manager)
@Override @Override
public int getItemCount() { public int getItemSize() {
return mDataset.size(); return mDataset.size();
} }
public void setFilter(List<OrdineVenditaGroupedInevasoDTO> newDataset) { @Override
mDataset = new ArrayList<>(); public String getSectionTitle(int position) {
mDataset.addAll(newDataset); return null;
notifyDataSetChanged();
} }
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;
}
}
} }

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import com.annimon.stream.Stream;
import com.google.firebase.perf.metrics.Trace; import com.google.firebase.perf.metrics.Trace;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
@ -11,7 +12,6 @@ import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.REST.RESTBuilder; import it.integry.integrywmsnative.core.REST.RESTBuilder;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer;
@ -19,7 +19,6 @@ import it.integry.integrywmsnative.core.REST.model.EsitoType;
import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -27,7 +26,6 @@ import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityFirebase; import it.integry.integrywmsnative.core.utility.UtilityFirebase;
import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService; import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService;
@ -139,7 +137,7 @@ public class VenditaHelper {
public void getBancaliVenditaGiaRegistrati(List<OrdineVenditaGroupedInevasoDTO> orders, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public void getBancaliVenditaGiaRegistrati(List<OrdineVenditaInevasoDTO> orders, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String baseSql = "SELECT DISTINCT mtb_colt.* " + String baseSql = "SELECT DISTINCT mtb_colt.* " +
"FROM mtb_colt, " + "FROM mtb_colt, " +
@ -156,21 +154,15 @@ public class VenditaHelper {
for(int i = 0; i < orders.size(); i++){ for(int i = 0; i < orders.size(); i++){
List<OrdineVenditaGroupedInevasoDTO.Ordine> currentOrders = orders.get(i).ordini;
for(int j = 0; j < currentOrders.size(); j++){
whereCond whereCond
.append("(mtb_colr.data_ord = '").append(UtilityDate.formatDate(currentOrders.get(j).getData(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)).append("' ") .append("(mtb_colr.data_ord = '").append(UtilityDate.formatDate(orders.get(i).getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)).append("' ")
.append("AND mtb_colr.num_ord = ").append(currentOrders.get(j).getNumero()).append(" ") .append("AND mtb_colr.num_ord = ").append(orders.get(i).getNumOrd()).append(" ")
.append("AND mtb_colr.gestione = ").append(UtilityDB.valueToString(currentOrders.get(j).getGestione())) .append("AND mtb_colr.gestione = ").append(UtilityDB.valueToString(orders.get(i).getGestione()))
.append(") "); .append(") ");
if(i != (orders.size() - 1)){ if(i != (orders.size() - 1)){
whereCond.append("OR "); whereCond.append("OR ");
} else if(j != (currentOrders.size() - 1)) {
whereCond.append("OR ");
}
} }
} }
@ -241,47 +233,49 @@ public class VenditaHelper {
public List<OrdineVenditaGroupedInevasoDTO> getSelectedOrders(List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi){ public List<OrdineVenditaInevasoDTO> getSelectedOrders(List<OrdineVenditaInevasoDTO> ordiniList){
List<OrdineVenditaGroupedInevasoDTO> selectedOrdini = new ArrayList<>(); // List<OrdineVenditaInevasoDTO> selectedOrdini = new ArrayList<>();
for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ return Stream.of(ordiniList)
List<OrdineVenditaGroupedInevasoDTO.Ordine> selectedOrdiniGroup = new ArrayList<>(); .filter(OrdineVenditaInevasoDTO::isSelected)
.toList();
for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){ // for(int i = 0; i < groupedOrdiniInevasi.size(); i++){
if(groupedOrdiniInevasi.get(i).ordini.get(j).checkBox) { // List<OrdineVenditaInevasoDTO> selectedOrdiniGroup = new ArrayList<>();
selectedOrdiniGroup.add(groupedOrdiniInevasi.get(i).ordini.get(j)); //
} // //for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){
} // if(groupedOrdiniInevasi.get(i).checkBox) {
// selectedOrdiniGroup.add(groupedOrdiniInevasi.get(i).ordini.get(j));
// }
// //}
//
// if(selectedOrdiniGroup.size() > 0) {
// try {
// OrdineVenditaGroupedInevasoDTO cloneOrdine = groupedOrdiniInevasi.get(i).clone();
// cloneOrdine.ordini = selectedOrdiniGroup;
// selectedOrdini.add(cloneOrdine);
// } catch (CloneNotSupportedException e) {
// e.printStackTrace();
// }
// }
// }
if(selectedOrdiniGroup.size() > 0) { // return selectedOrdini;
try {
OrdineVenditaGroupedInevasoDTO cloneOrdine = groupedOrdiniInevasi.get(i).clone();
cloneOrdine.ordini = selectedOrdiniGroup;
selectedOrdini.add(cloneOrdine);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
return selectedOrdini;
} }
public void selectAll(List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi) { public void selectAll(List<OrdineVenditaInevasoDTO> groupedOrdiniInevasi) {
toggleSelection(groupedOrdiniInevasi, true); toggleSelection(groupedOrdiniInevasi, true);
} }
public void deselectAll(List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi) { public void deselectAll(List<OrdineVenditaInevasoDTO> groupedOrdiniInevasi) {
toggleSelection(groupedOrdiniInevasi, false); toggleSelection(groupedOrdiniInevasi, false);
} }
public void toggleSelection(List<OrdineVenditaGroupedInevasoDTO> groupedOrdiniInevasi, boolean value) { public void toggleSelection(List<OrdineVenditaInevasoDTO> groupedOrdiniInevasi, boolean value) {
for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ for(int i = 0; i < groupedOrdiniInevasi.size(); i++){
for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){ groupedOrdiniInevasi.get(i).setSelected(value);
groupedOrdiniInevasi.get(i).ordini.get(j).setCheckbox(value);
}
} }
} }

View File

@ -1,401 +0,0 @@
package it.integry.integrywmsnative.gest.vendita.dto;
import android.os.Parcel;
import android.os.Parcelable;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.interfaces.ICheckBoxCallback;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable, Parcelable {
public String codAnagClie;
public String nomeCliente;
public List<Ordine> ordini;
public OrdineVenditaGroupedInevasoDTO clone() throws CloneNotSupportedException {
return (OrdineVenditaGroupedInevasoDTO) super.clone();
}
public static class Ordine implements Parcelable{
private String data;
private int numero;
private String codMdep;
private String codAnagOrd = "";
private String ragSocOrd = "";
private Float pesoTotale;
private String barcode;
private String termCons;
private String dataCons;
private String rifOrd;
private String gestione;
private int colliRiservati;
private boolean existCollo;
private String codAnagClie;
public List<Cliente> clienti;
public boolean checkBox;
public List<ICheckBoxCallback> checkBoxCallback = new ArrayList<>();
public void setCheckbox(boolean newValue){
checkBox = newValue;
if(checkBoxCallback != null && checkBoxCallback.size() > 0) {
for(ICheckBoxCallback callback : checkBoxCallback) callback.onToggle(newValue);
}
}
public Date getData(){
try {
return UtilityDate.recognizeDate(data);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Ordine setData(String data) {
this.data = data;
return this;
}
public int getNumero() {
return numero;
}
public Ordine setNumero(int numero) {
this.numero = numero;
return this;
}
public String getCodMdep() {
return codMdep;
}
public Ordine setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodAnagOrd() {
return codAnagOrd;
}
public Ordine setCodAnagOrd(String codAnagOrd) {
this.codAnagOrd = codAnagOrd;
return this;
}
public String getRagSocOrd() {
return ragSocOrd;
}
public Ordine setRagSocOrd(String ragSocOrd) {
this.ragSocOrd = ragSocOrd;
return this;
}
public Float getPesoTotale() {
return pesoTotale;
}
public Ordine setPesoTotale(Float pesoTotale) {
this.pesoTotale = pesoTotale;
return this;
}
public String getBarcode() {
return barcode;
}
public Ordine setBarcode(String barcode) {
this.barcode = barcode;
return this;
}
public String getTermCons() {
return termCons;
}
public Ordine setTermCons(String termCons) {
this.termCons = termCons;
return this;
}
public String getDataConsS(){
return dataCons;
}
public Date getDataConsD(){
try {
return UtilityDate.recognizeDate(dataCons);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Ordine setDataCons(String dataCons) {
this.dataCons = dataCons;
return this;
}
public String getRifOrd() {
return rifOrd;
}
public Ordine setRifOrd(String rifOrd) {
this.rifOrd = rifOrd;
return this;
}
public String getGestione() {
return gestione;
}
public GestioneEnum getGestioneEnum() {
return GestioneEnum.fromString(getGestione());
}
public Ordine setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public String getCodAnagClie() {
return codAnagClie;
}
public Ordine setCodAnagClie(String codAnagClie) {
this.codAnagClie = codAnagClie;
return this;
}
public int getColliRiservati() {
return colliRiservati;
}
public Ordine setColliRiservati(int colliRiservati) {
this.colliRiservati = colliRiservati;
return this;
}
public List<Cliente> getClienti() {
return clienti;
}
public Ordine setClienti(List<Cliente> clienti) {
this.clienti = clienti;
return this;
}
public boolean isCheckBox() {
return checkBox;
}
public Ordine setCheckBox(boolean checkBox) {
this.checkBox = checkBox;
return this;
}
public boolean isExistCollo() {
return existCollo;
}
public Ordine setExistCollo(boolean existCollo) {
this.existCollo = existCollo;
return this;
}
public Ordine(){}
protected Ordine(Parcel in) {
data = in.readString();
numero = in.readInt();
codAnagOrd = in.readString();
ragSocOrd = in.readString();
pesoTotale = in.readByte() == 0x00 ? null : in.readFloat();
barcode = in.readString();
termCons = in.readString();
dataCons = in.readString();
rifOrd = in.readString();
if (in.readByte() == 0x01) {
clienti = new ArrayList<>();
in.readList(clienti, Cliente.class.getClassLoader());
} else {
clienti = null;
}
gestione = in.readString();
colliRiservati = in.readInt();
codMdep = in.readString();
existCollo = in.readByte() != 0x00;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(data);
dest.writeInt(numero);
dest.writeString(codAnagOrd);
dest.writeString(ragSocOrd);
if (pesoTotale == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeFloat(pesoTotale);
}
dest.writeString(barcode);
dest.writeString(termCons);
dest.writeString(dataCons);
dest.writeString(rifOrd);
if (clienti == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(clienti);
}
dest.writeString(gestione);
dest.writeInt(colliRiservati);
dest.writeString(codMdep);
dest.writeByte((byte) (existCollo ? 0x01 : 0x00));
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Ordine> CREATOR = new Parcelable.Creator<Ordine>() {
@Override
public Ordine createFromParcel(Parcel in) {
return new Ordine(in);
}
@Override
public Ordine[] newArray(int size) {
return new Ordine[size];
}
};
}
public static class Cliente implements Parcelable{
public String codJcom;
public String ragSocCom;
public int idRiga;
public String dataCons;
public Float numCnf;
public String descrCom;
public String rifOrd;
public Date getDataCons(){
try {
return UtilityDate.recognizeDate(dataCons);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Cliente(){}
protected Cliente(Parcel in) {
codJcom = in.readString();
ragSocCom = in.readString();
idRiga = in.readInt();
dataCons = in.readString();
numCnf = in.readByte() == 0x00 ? null : in.readFloat();
descrCom = in.readString();
rifOrd = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(codJcom);
dest.writeString(ragSocCom);
dest.writeInt(idRiga);
dest.writeString(dataCons);
if (numCnf == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeFloat(numCnf);
}
dest.writeString(descrCom);
dest.writeString(rifOrd);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Cliente> CREATOR = new Parcelable.Creator<Cliente>() {
@Override
public Cliente createFromParcel(Parcel in) {
return new Cliente(in);
}
@Override
public Cliente[] newArray(int size) {
return new Cliente[size];
}
};
}
public OrdineVenditaGroupedInevasoDTO(){}
protected OrdineVenditaGroupedInevasoDTO(Parcel in) {
codAnagClie = in.readString();
nomeCliente = in.readString();
if (in.readByte() == 0x01) {
ordini = new ArrayList<>();
in.readList(ordini, Ordine.class.getClassLoader());
} else {
ordini = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(codAnagClie);
dest.writeString(nomeCliente);
if (ordini == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(ordini);
}
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<OrdineVenditaGroupedInevasoDTO> CREATOR = new Parcelable.Creator<OrdineVenditaGroupedInevasoDTO>() {
@Override
public OrdineVenditaGroupedInevasoDTO createFromParcel(Parcel in) {
return new OrdineVenditaGroupedInevasoDTO(in);
}
@Override
public OrdineVenditaGroupedInevasoDTO[] newArray(int size) {
return new OrdineVenditaGroupedInevasoDTO[size];
}
};
}

View File

@ -8,6 +8,8 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityLogger;
public class OrdineVenditaInevasoDTO implements Parcelable { public class OrdineVenditaInevasoDTO implements Parcelable {
@ -47,6 +49,12 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
private int colliRiservati; private int colliRiservati;
private String existCollo; private String existCollo;
public BindableBoolean selected;
public OrdineVenditaInevasoDTO() {
this.selected = new BindableBoolean(false);
}
protected OrdineVenditaInevasoDTO(Parcel in) { protected OrdineVenditaInevasoDTO(Parcel in) {
data = in.readString(); data = in.readString();
@ -91,6 +99,8 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
ragSocOrdV = in.readString(); ragSocOrdV = in.readString();
colliRiservati = in.readInt(); colliRiservati = in.readInt();
existCollo = in.readString(); existCollo = in.readString();
selected = new BindableBoolean(in.readByte() == 0x01);
} }
@Override @Override
@ -140,6 +150,8 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
dest.writeString(ragSocOrdV); dest.writeString(ragSocOrdV);
dest.writeInt(colliRiservati); dest.writeInt(colliRiservati);
dest.writeString(existCollo); dest.writeString(existCollo);
dest.writeByte(selected.get() ? (byte) 1 : (byte) 0);
} }
@Override @Override
@ -163,9 +175,14 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
return data; return data;
} }
public Date getDataOrdD() throws ParseException { public Date getDataOrdD() {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
try {
return sdf.parse(getDataOrdS()); return sdf.parse(getDataOrdS());
} catch (ParseException e) {
UtilityLogger.errorMe(e);
return null;
}
} }
public OrdineVenditaInevasoDTO setData(String data) { public OrdineVenditaInevasoDTO setData(String data) {
@ -186,6 +203,11 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
return gestione; return gestione;
} }
public GestioneEnum getGestioneEnum() {
return GestioneEnum.fromString(getGestione());
}
public OrdineVenditaInevasoDTO setGestione(String gestione) { public OrdineVenditaInevasoDTO setGestione(String gestione) {
this.gestione = gestione; this.gestione = gestione;
return this; return this;
@ -488,4 +510,33 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
this.existCollo = existCollo; this.existCollo = existCollo;
return this; return this;
} }
public boolean isSelected() {
return selected.get();
}
public OrdineVenditaInevasoDTO setSelected(boolean selected) {
this.selected.set(selected);
return this;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
OrdineVenditaInevasoDTO that = (OrdineVenditaInevasoDTO) o;
if (!data.equals(that.data)) return false;
if (!numero.equals(that.numero)) return false;
return getGestione().equals(that.getGestione());
}
@Override
public int hashCode() {
int result = data.hashCode();
result = 31 * result + numero.hashCode();
result = 31 * result + getGestione().hashCode();
return result;
}
} }

View File

@ -120,7 +120,7 @@ public class VenditaViewModel {
List<OrdineVenditaInevasoDTO> filteredOrders = Stream.of(mOrdini) List<OrdineVenditaInevasoDTO> filteredOrders = Stream.of(mOrdini)
.filter(x -> numOrds.contains(x.getNumOrd())).toList(); .filter(x -> numOrds.contains(x.getNumOrd())).toList();
mFragment.groupOrdini(filteredOrders); mFragment.refreshOrdini(filteredOrders);
mFragment.refreshRecyclerView(); mFragment.refreshRecyclerView();
} else { } else {
showNoOrderFound(); showNoOrderFound();

View File

@ -19,7 +19,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding; import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel.VenditaOrdineInevasoViewModel; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel.VenditaOrdineInevasoViewModel;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
@ -45,7 +45,7 @@ public class VenditaOrdineInevasoActivity extends AppCompatActivity {
mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings);
ArrayList<PickingObjectDTO> pickingList = DataCache.retrieveItem(getIntent().getStringExtra("keyPickingList")); ArrayList<PickingObjectDTO> pickingList = DataCache.retrieveItem(getIntent().getStringExtra("keyPickingList"));
ArrayList<OrdineVenditaGroupedInevasoDTO> testateOrdini = DataCache.retrieveItem(getIntent().getStringExtra("keyTestateOrdini")); ArrayList<OrdineVenditaInevasoDTO> testateOrdini = DataCache.retrieveItem(getIntent().getStringExtra("keyTestateOrdini"));
ArrayList<MtbColt> colliRegistrati = DataCache.retrieveItem(getIntent().getStringExtra("keyColliRegistrati")); ArrayList<MtbColt> colliRegistrati = DataCache.retrieveItem(getIntent().getStringExtra("keyColliRegistrati"));
mVenditaOrdineInevasoViewModel = new VenditaOrdineInevasoViewModel( mVenditaOrdineInevasoViewModel = new VenditaOrdineInevasoViewModel(
this, mBindings, mArticoliInColloBottomSheetViewModel, pickingList, testateOrdini, colliRegistrati); this, mBindings, mArticoliInColloBottomSheetViewModel, pickingList, testateOrdini, colliRegistrati);

View File

@ -52,7 +52,7 @@ import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding; import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.VenditaOrdineInevasoHelper; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.VenditaOrdineInevasoHelper;
@ -81,7 +81,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
private final List<PickingObjectDTO> mPickingList; private final List<PickingObjectDTO> mPickingList;
private List<List<PickingObjectDTO>> mGroupedPickingList; private List<List<PickingObjectDTO>> mGroupedPickingList;
private final List<OrdineVenditaGroupedInevasoDTO> mTestateOrdini; private final List<OrdineVenditaInevasoDTO> mTestateOrdini;
private final List<MtbColt> mColliRegistrati; private final List<MtbColt> mColliRegistrati;
private VenditaOrdineInevasoHelper mHelper; private VenditaOrdineInevasoHelper mHelper;
@ -98,7 +98,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
private Integer mtbColtSessionID = null; private Integer mtbColtSessionID = null;
public VenditaOrdineInevasoViewModel(VenditaOrdineInevasoActivity activity, ActivityVenditaOrdineInevasoBinding bindings, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<PickingObjectDTO> pickingList, List<OrdineVenditaGroupedInevasoDTO> orders, List<MtbColt> colliRegistrati) { public VenditaOrdineInevasoViewModel(VenditaOrdineInevasoActivity activity, ActivityVenditaOrdineInevasoBinding bindings, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<PickingObjectDTO> pickingList, List<OrdineVenditaInevasoDTO> orders, List<MtbColt> colliRegistrati) {
this.mActivity = activity; this.mActivity = activity;
this.mBindings = bindings; this.mBindings = bindings;
this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel; this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel;
@ -157,13 +157,10 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
private void initDatiPicking() { private void initDatiPicking() {
if(this.mTestateOrdini != null && this.mTestateOrdini.size() > 0){ if(this.mTestateOrdini != null && this.mTestateOrdini.size() > 0){
List<OrdineVenditaGroupedInevasoDTO.Ordine> flatOrderArray = new ArrayList<>();
Stream.of(this.mTestateOrdini).forEach(x -> flatOrderArray.addAll(x.ordini));
//Definizione della gestione collo di default //Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(flatOrderArray) List<GestioneEnum> foundGestioni = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum) .map(OrdineVenditaInevasoDTO::getGestioneEnum)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -180,8 +177,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
} }
//Definizione del deposito di default //Definizione del deposito di default
List<String> foundCodMdep = Stream.of(flatOrderArray) List<String> foundCodMdep = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodMdep) .map(OrdineVenditaInevasoDTO::getCodMdep)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -200,18 +197,20 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
//Definizione del filtro ordine da applicare a tutti i colli generati //Definizione del filtro ordine da applicare a tutti i colli generati
Stream.of(flatOrderArray).forEach(x -> { Stream.of(mTestateOrdini).forEach(x -> {
defaultFiltroOrdine.add(new FiltroOrdineDTO() FiltroOrdineDTO filtro = new FiltroOrdineDTO()
.setDataOrd(x.getData()) .setDataOrd(x.getDataOrdD())
.setNumOrd(x.getNumero()) .setNumOrd(x.getNumOrd())
.setGestioneOrd(x.getGestione())); .setGestioneOrd(x.getGestione());
if(defaultFiltroOrdine.contains(filtro)) defaultFiltroOrdine.add(filtro);
}); });
//Definizione del codAnag //Definizione del codAnag
List<String> foundCodAnag = Stream.of(flatOrderArray) List<String> foundCodAnag = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodAnagOrd) .map(OrdineVenditaInevasoDTO::getCodAnagOrd)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -222,8 +221,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
//Definizione del rifOrd //Definizione del rifOrd
List<String> foundRifOrd = Stream.of(flatOrderArray) List<String> foundRifOrd = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getRifOrd) .map(OrdineVenditaInevasoDTO::getRifOrd)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -234,8 +233,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
//Definizione del numOrd //Definizione del numOrd
List<Integer> foundNumOrd = Stream.of(flatOrderArray) List<Integer> foundNumOrd = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getNumero) .map(OrdineVenditaInevasoDTO::getNumOrd)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();
@ -246,8 +245,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
//Definizione del dataOrd //Definizione del dataOrd
List<Date> foundDataOrd = Stream.of(flatOrderArray) List<Date> foundDataOrd = Stream.of(mTestateOrdini)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getData) .map(OrdineVenditaInevasoDTO::getDataOrdD)
.withoutNulls() .withoutNulls()
.distinctBy(x -> x) .distinctBy(x -> x)
.toList(); .toList();

View File

@ -0,0 +1,293 @@
package it.integry.integrywmsnative.ui;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.ViewDebug;
import androidx.annotation.ArrayRes;
import androidx.appcompat.widget.AppCompatCheckBox;
import it.integry.integrywmsnative.R;
public class CheckBoxThreeStates extends AppCompatCheckBox {
private boolean mBroadcasting;
private boolean mIndeterminate;
private OnCheckedChangeListener mOnCheckedChangeListener;
private static final int[] INDETERMINATE_STATE_SET = {
// R.attr.state_indeterminate
};
private static final int[] DEFAULT_CYCLE = {
1, 0, 1, 0
};
private int[] mCycle = DEFAULT_CYCLE;
// public CheckBoxThreeStates(final Context context) {
// this(context, null);
// }
// public CheckBoxThreeStates(final Context context, final AttributeSet attrs) {
// this(context, attrs, R.attr.checkbox3Style);
// }
public CheckBoxThreeStates(final Context context, final AttributeSet attrs, final int defStyleAttr) {
super(context, attrs, defStyleAttr);
/*
final TypedArray a =
context.obtainStyledAttributes(attrs, R.styleable.CheckBox3, defStyleAttr, R.style.Widget_Checkbox3);
try {
if (a.hasValue(R.styleable.CheckBox3_checkbox3_checkableCycle)) {
int cycleRes = a.getResourceId(R.styleable.CheckBox3_checkbox3_checkableCycle, 0);
if (cycleRes != 0) {
setCycle(getResources().getIntArray(cycleRes));
}
}
if (a.hasValue(R.styleable.CheckBox3_android_fontFamily)) {
final String font = a.getString(R.styleable.CheckBox3_android_fontFamily);
setTypeface(TypefaceUtils.loadFromAsset(getResources().getAssets(), font));
}
final boolean indeterminate = a.getBoolean(R.styleable.CheckBox3_checkbox3_indeterminate, false);
final boolean checked = a.getBoolean(R.styleable.CheckBox3_android_checked, false);
mBroadcasting = true;
int index = getStateIndex(checked, indeterminate);
if (!isValidStateIndex(index)) {
index = getFirstValidStateIndex(index);
}
moveToState(index);
} finally {
a.recycle();
}
*/
}
public void setCycle(@ArrayRes final int cycleRes) {
setCycle(getResources().getIntArray(cycleRes));
}
/**
* Change the cycle used to determine the next state of the checkbox when the user
* click the component, or when the {@link #toggle()} is called.<br />
* The value passed is an array of 4 integer elements, representing the state of the checkbox.<br />
* The value of each element can be 0 or 1, with 0 to disable the state and 1 to enable the state.<br />
* The states are (in order):
* <ul>
* <li>Checked</li>
* <li>Indeterminate (checked)</li>
* <li>Unchecked</li>
* <li>Indeterminate (unchecked)</li>
* </ul>
* So if a cycle like this one is used:
* <code>int[] cycle = new int[]{1,0,1,0}</code>
* the checkbox will only cycle between checked and unchecked state.
* The default cycle is: <code>{1,0,1,0}</code>
* <p>
* <p>The method throws an exception if the array is not valid. A valid array must match the following rules:
* <ul>
* <li>If not null, must have 4 elements</li>
* <li>At least 2 elements must be not equal to 0</li>
* </ul></p>
*
* @param cycle change the cycle
*/
public void setCycle(final int[] cycle) {
validateCycle(cycle);
mCycle = cycle == null ? DEFAULT_CYCLE : cycle;
}
/**
* Move to the next state of the checkbox
*/
@Override
public void toggle() {
if (null == mCycle) return;
final int currentIndex = getCurrentStateIndex();
moveToNextState(currentIndex);
}
@Override
public void setChecked(boolean checked) {
if (null == mCycle) return;
int index = getStateIndex(checked, isIndeterminate());
if (!isValidStateIndex(index)) {
return;
}
super.setChecked(checked);
}
/**
* Change the state of the checkbox
*
* @param checked
* @param indeterminate
*/
public void setChecked(boolean checked, boolean indeterminate) {
if (null == mCycle) return;
if (isChecked() == checked) {
setIndeterminate(indeterminate);
} else {
mIndeterminate = indeterminate;
}
setChecked(checked);
}
@ViewDebug.ExportedProperty
public boolean isIndeterminate() {
return mIndeterminate;
}
public void setIndeterminate(boolean indeterminate) {
if (null == mCycle) return;
int index = getStateIndex(isChecked(), indeterminate);
if (!isValidStateIndex(index)) {
return;
}
setIndeterminateImpl(indeterminate, true);
}
private void moveToNextState(final int index) {
int nextIndex = getNextValidIndex(index);
boolean checked = nextIndex < 2;
mIndeterminate = nextIndex == 1 || nextIndex == 3;
setChecked(checked);
}
private void moveToState(final int nextIndex) {
if (!isValidStateIndex(nextIndex)) {
}
boolean checked = nextIndex < 2;
mIndeterminate = nextIndex == 1 || nextIndex == 3;
setChecked(checked);
}
private void validateCycle(final int[] cycle) {
if (null == cycle) {
return;
}
if (cycle.length != 4) {
throw new IllegalArgumentException("Invalid cycle length. Expected 4 an array or 4 int");
}
int total = 0;
for (final int i1 : cycle) {
if (i1 != 0) {
total++;
}
}
if (total < 2) {
throw new IllegalArgumentException("Invalid cycle. At least 2 elements must be positive");
}
}
private int getCurrentStateIndex() {
return getStateIndex(isChecked(), isIndeterminate());
}
private int getStateIndex(boolean checked, boolean indeterminate) {
int index = 0;
if (checked) {
index += indeterminate ? 1 : 0;
} else {
index = indeterminate ? 3 : 2;
}
return index;
}
private int getFirstValidStateIndex(int index) {
int i = index;
while (i >= 0) {
if (mCycle[i] != 0) return i;
i--;
}
i = index;
while (i < mCycle.length) {
if (mCycle[i] != 0) return i;
i++;
}
return -1;
}
private boolean isValidStateIndex(int index) {
return mCycle[index] != 0;
}
private int getNextValidIndex(int index) {
int nextIndex = index + 1 >= mCycle.length ? 0 : index + 1;
if (mCycle[nextIndex] != 0) {
return nextIndex;
}
return getNextValidIndex(nextIndex);
}
@Override
public void setOnCheckedChangeListener(final OnCheckedChangeListener listener) {
super.setOnCheckedChangeListener(listener);
mOnCheckedChangeListener = listener;
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isIndeterminate()) {
mergeDrawableStates(drawableState, INDETERMINATE_STATE_SET);
}
return drawableState;
}
@Override
protected void drawableStateChanged() {
super.drawableStateChanged();
}
private void setIndeterminateImpl(boolean indeterminate, boolean notify) {
if (mIndeterminate != indeterminate) {
mIndeterminate = indeterminate;
refreshDrawableState();
if (notify) {
notifyStateListener();
}
}
}
private void notifyStateListener() {
if (mBroadcasting) {
return;
}
mBroadcasting = true;
if (mOnCheckedChangeListener != null) {
mOnCheckedChangeListener.onCheckedChanged(this, isChecked());
}
mBroadcasting = false;
}
@Override
public CharSequence getAccessibilityClassName() {
return CheckBoxThreeStates.class.getName();
}
}

View File

@ -5,6 +5,7 @@ import android.app.DatePickerDialog;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable; import androidx.databinding.Observable;
@ -40,6 +41,7 @@ import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogInputQuantityArticoloBinding; import it.integry.integrywmsnative.databinding.DialogInputQuantityArticoloBinding;
@ -371,6 +373,8 @@ public class DialogInputQuantity {
quantityDTO.expireDate = c.getTime(); quantityDTO.expireDate = c.getTime();
} }
refreshQtaDescriptionText();
} }
@ -502,6 +506,8 @@ public class DialogInputQuantity {
} }
} }
// refreshQtaDescriptionText();
} }
}); });
@ -537,6 +543,7 @@ public class DialogInputQuantity {
} }
} }
// refreshQtaDescriptionText();
} }
}); });
@ -567,6 +574,8 @@ public class DialogInputQuantity {
} }
} }
// refreshQtaDescriptionText();
} }
}); });
@ -627,6 +636,42 @@ public class DialogInputQuantity {
} }
private void refreshQtaDescriptionText() {
int numConf = (int) (currentQuantityDto.qtaDaEvadere.get() / currentQuantityDto.qtaCnf.get());
float qtaTot = currentQuantityDto.qtaDaEvadere.get().floatValue();
float mod = qtaTot % numConf;
String text = "";
if(numConf > 0) {
text += "<b>" + numConf + " " + currentContext.getResources().getQuantityString(R.plurals.item_package, numConf).toUpperCase() + "</b>";
}
if(numConf > 0 && mod > 0) {
text += " e ";
}
if(mod > 0) {
text += "<b>" + UtilityNumber.decimalToString(mod) + " ";
if(mod == 1) {
text += currentContext.getResources().getQuantityString(R.plurals.pieces, (int) mod).toUpperCase();
} else {
text += currentContext.getString(R.string.piece).toUpperCase();
}
text += "</b>";
}
currentBinding.qtaDescriptionText.setText(Html.fromHtml(text));
}
private void onConfirm(Context context, QuantityDTO quantityDTO, RunnableArgss<QuantityDTO, Boolean> dialogCallback, boolean closeUL){ private void onConfirm(Context context, QuantityDTO quantityDTO, RunnableArgss<QuantityDTO, Boolean> dialogCallback, boolean closeUL){
if(currentDTO.mtbAart.isFlagTracciabilita() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ if(currentDTO.mtbAart.isFlagTracciabilita() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){

View File

@ -213,6 +213,15 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_description_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_gravity="center_horizontal"
android:paddingTop="4dp"
tools:text="2 CARTONI e 3 PEZZI"/>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">

View File

@ -429,51 +429,51 @@
</RelativeLayout> </RelativeLayout>
<!--<RelativeLayout--> <RelativeLayout
<!--android:id="@+id/fast_button_resi_clienti"--> android:id="@+id/fast_button_resi_clienti"
<!--android:layout_width="0dp"--> android:layout_width="0dp"
<!--android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!--app:layout_constraintTop_toBottomOf="@id/fast_button_versamento"--> app:layout_constraintTop_toBottomOf="@id/fast_button_versamento"
<!--app:layout_constraintStart_toEndOf="@id/guide_1"--> app:layout_constraintStart_toEndOf="@id/guide_1"
<!--app:layout_constraintEnd_toEndOf="parent">--> app:layout_constraintEnd_toEndOf="parent">
<!--<com.google.android.material.card.MaterialCardView--> <com.google.android.material.card.MaterialCardView
<!--style="@style/Widget.MaterialComponents.CardView"--> style="@style/Widget.MaterialComponents.CardView"
<!--android:layout_width="match_parent"--> android:layout_width="match_parent"
<!--android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!--android:layout_margin="8dp"--> android:layout_margin="8dp"
<!--app:cardBackgroundColor="@android:color/white"--> app:cardBackgroundColor="@android:color/white"
<!--app:cardCornerRadius="4dp">--> app:cardCornerRadius="4dp">
<!--<LinearLayout--> <LinearLayout
<!--android:layout_width="match_parent"--> android:layout_width="match_parent"
<!--android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!--android:gravity="center_horizontal"--> android:gravity="center_horizontal"
<!--android:orientation="vertical"--> android:orientation="vertical"
<!--android:padding="8dp">--> android:padding="8dp">
<!--<ImageView--> <ImageView
<!--android:layout_width="64sp"--> android:layout_width="64sp"
<!--android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!--android:adjustViewBounds="true"--> android:adjustViewBounds="true"
<!--android:src="@drawable/ic_latest_delivery" />--> android:src="@drawable/ic_latest_delivery" />
<!--<androidx.appcompat.widget.AppCompatTextView--> <androidx.appcompat.widget.AppCompatTextView
<!--android:layout_width="wrap_content"--> android:layout_width="wrap_content"
<!--android:layout_height="wrap_content"--> android:layout_height="wrap_content"
<!--android:layout_marginTop="16dp"--> android:layout_marginTop="16dp"
<!--android:gravity="center_horizontal"--> android:gravity="center_horizontal"
<!--android:text="@string/fragment_ultime_consegne_cliente_title"--> android:text="@string/fragment_ultime_consegne_cliente_title"
<!--android:textAllCaps="true"--> android:textAllCaps="true"
<!--android:textColor="@color/gray_700"--> android:textColor="@color/gray_700"
<!--android:textStyle="bold" />--> android:textStyle="bold" />
<!--</LinearLayout>--> </LinearLayout>
<!--</com.google.android.material.card.MaterialCardView>--> </com.google.android.material.card.MaterialCardView>
<!--</RelativeLayout>--> </RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,21 +1,46 @@
<?xml version="1.0" encoding="utf-8"?> <?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" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="8dp"> android:paddingStart="2dp"
android:paddingEnd="4dp">
<CheckBox <RelativeLayout
android:id="@+id/vendita_main_list_group_item_container_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="8dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_toEndOf="@id/empty_view"
android:background="@color/full_white">
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/vendita_main_list_group_item_container_checkBox" android:id="@+id/vendita_main_list_group_item_container_checkBox"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" /> android:layout_height="wrap_content"
android:background="@android:color/transparent" />
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/vendita_main_list_group_item_container_checkBox" android:layout_alignParentEnd="true"
android:layout_alignParentEnd="true"> android:layout_toEndOf="@id/vendita_main_list_group_item_container_checkBox">
<TextView <TextView
android:id="@+id/vendita_main_list_group_item_container_testata_data_cons" android:id="@+id/vendita_main_list_group_item_container_testata_data_cons"
@ -33,20 +58,34 @@
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1" android:maxLines="1"
android:textColor="#000" android:textColor="#000"
android:layout_alignParentLeft="true" android:layout_alignParentStart="true"
android:layout_toLeftOf="@id/vendita_main_list_group_item_container_testata_data_cons"/> android:layout_toStartOf="@id/vendita_main_list_group_item_container_testata_data_cons"/>
<LinearLayout <TextView
android:id="@+id/vendita_main_list_group_item_container_clienti_ord" android:id="@+id/vendita_main_list_group_item_container_detail_ord"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@+id/vendita_main_list_group_item_container_testata_ord" android:maxLines="1"
android:orientation="vertical"> android:ellipsize="end"
</LinearLayout> android:paddingEnd="6dp"
android:text="TextView"
android:layout_below="@+id/vendita_main_list_group_item_container_testata_ord" />
</RelativeLayout>
</RelativeLayout>
<View
android:id="@+id/empty_view"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:layout_width="8dp"
android:layout_height="wrap_content"
android:layout_alignTop="@id/vendita_main_list_group_item_container_root"
android:layout_alignBottom="@id/vendita_main_list_group_item_container_root"/>
</RelativeLayout> </RelativeLayout>
</layout>
</RelativeLayout>

View File

@ -1,3 +1,4 @@
<layout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -5,15 +6,15 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView <!--<androidx.cardview.widget.CardView-->
xmlns:card_view="http://schemas.android.com/apk/res-auto" <!--xmlns:card_view="http://schemas.android.com/apk/res-auto"-->
android:id="@+id/card_view" <!--android:id="@+id/card_view"-->
android:layout_gravity="center" <!--android:layout_gravity="center"-->
android:layout_width="match_parent" <!--android:layout_width="match_parent"-->
android:layout_height="wrap_content" <!--android:layout_height="wrap_content"-->
card_view:cardUseCompatPadding="true" <!--card_view:cardUseCompatPadding="true"-->
card_view:cardCornerRadius="4dp" <!--card_view:cardCornerRadius="4dp"-->
card_view:cardElevation="4dp"> <!--card_view:cardElevation="4dp">-->
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -24,7 +25,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/mainOrange" android:background="@color/mainOrange"
android:padding="8dp"> android:paddingStart="12dp"
android:paddingTop="8dp"
android:paddingEnd="8dp"
android:paddingBottom="8dp">
<CheckBox <CheckBox
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -56,6 +60,8 @@
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView> <!--</androidx.cardview.widget.CardView>-->
</LinearLayout> </LinearLayout>
</layout>

View File

@ -77,6 +77,14 @@
<item quantity="one"><![CDATA[&#200; stato selezionato <b>%d</b> ordine]]></item> <item quantity="one"><![CDATA[&#200; stato selezionato <b>%d</b> ordine]]></item>
<item quantity="other"><![CDATA[Sono stati selezionati <b>%d</b> ordini]]></item> <item quantity="other"><![CDATA[Sono stati selezionati <b>%d</b> ordini]]></item>
</plurals> </plurals>
<plurals name="pieces">
<item quantity="one">@string/piece</item>
<item quantity="other">pezzi</item>
</plurals>
<plurals name="item_package">
<item quantity="one">confezione</item>
<item quantity="other">confezioni</item>
</plurals>
<string name="action_close_ul">Chiudi UL</string> <string name="action_close_ul">Chiudi UL</string>
<string name="already_read_articles">Articoli presenti</string> <string name="already_read_articles">Articoli presenti</string>
<string name="orders">Ordini</string> <string name="orders">Ordini</string>
@ -85,6 +93,7 @@
<string name="date_text">Data</string> <string name="date_text">Data</string>
<string name="position_text">Posizione</string> <string name="position_text">Posizione</string>
<string name="prepared_by_text">Preparato da</string> <string name="prepared_by_text">Preparato da</string>
<string name="piece">Pezzo</string>

View File

@ -25,6 +25,7 @@
<color name="bg_checked_layout">#E8F0FE</color> <color name="bg_checked_layout">#E8F0FE</color>
<color name="bg_checked_layout_dark">#C9D5F0</color>

View File

@ -75,6 +75,14 @@
<item quantity="one"><![CDATA[<b>%d</b> order selected]]></item> <item quantity="one"><![CDATA[<b>%d</b> order selected]]></item>
<item quantity="other"><![CDATA[<b>%d</b> orders selected]]></item> <item quantity="other"><![CDATA[<b>%d</b> orders selected]]></item>
</plurals> </plurals>
<plurals name="pieces">
<item quantity="one">@string/piece</item>
<item quantity="other">pieces</item>
</plurals>
<plurals name="item_package">
<item quantity="one">package</item>
<item quantity="other">packages</item>
</plurals>
<string name="action_close_ul">Close LU</string> <string name="action_close_ul">Close LU</string>
<string name="already_read_articles">Submitted items</string> <string name="already_read_articles">Submitted items</string>
<string name="orders">Orders</string> <string name="orders">Orders</string>
@ -86,7 +94,7 @@
<string name="picking_not_available">Picking not available</string> <string name="picking_not_available">Picking not available</string>
<string name="scan_item">Please scan an <b>item</b> barcode</string> <string name="scan_item">Please scan an <b>item</b> barcode</string>
<string name="extra_item">Extra item</string> <string name="extra_item">Extra item</string>
<string name="piece">Piece</string>
<string name="password_error_length">between 3 and 30 alphanumeric characters</string> <string name="password_error_length">between 3 and 30 alphanumeric characters</string>
<string name="username_error_not_valid">enter a valid username</string> <string name="username_error_not_valid">enter a valid username</string>

View File

@ -10,13 +10,13 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita; import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public class OrdiniVendita implements IOrdiniVendita { public class OrdiniVendita implements IOrdiniVendita {
@Override @Override
public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaGroupedInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
UtilityToast.showToast("Avviato metodo in BaseFeature"); UtilityToast.showToast("Avviato metodo in BaseFeature");
ColliMagazzinoRESTConsumer.distribuisciCollo(mtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(), ColliMagazzinoRESTConsumer.distribuisciCollo(mtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(),

View File

@ -10,13 +10,13 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public class OrdiniVendita implements IOrdiniVendita { public class OrdiniVendita implements IOrdiniVendita {
@Override @Override
public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaGroupedInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
UtilityToast.showToast("Avviato metodo in BaseFeature"); UtilityToast.showToast("Avviato metodo in BaseFeature");
ColliMagazzinoRESTConsumer.distribuisciCollo(mtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(), ColliMagazzinoRESTConsumer.distribuisciCollo(mtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(),

View File

@ -11,14 +11,14 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
public class OrdiniVendita implements IOrdiniVendita { public class OrdiniVendita implements IOrdiniVendita {
@Override @Override
public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaGroupedInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String codMdepOrder = testateOrdini.get(0).ordini.get(0).getCodMdep(); String codMdepOrder = testateOrdini.get(0).getCodMdep();
//Se il deposito del collo è diverso dal deposito dell'utente allora sto "evadendo" la merce per una vendita presente //Se il deposito del collo è diverso dal deposito dell'utente allora sto "evadendo" la merce per una vendita presente
//su un altro deposito //su un altro deposito