Prima implementazione del barcode reader in vendita

This commit is contained in:
2018-11-28 16:20:26 +01:00
parent f41e56d0df
commit a1b31b4a37
24 changed files with 1124 additions and 57 deletions

View File

@@ -209,19 +209,14 @@ public class MainActivity extends AppCompatActivity
ServerStatusChecker.getIstance().addCallback(value -> {
if(value && (!mIsOnline || firstCheckExecution)){
SettingsManager.reloadDBVariables(new ISimpleOperationCallback() {
@Override
public void onSuccess(Object value) {
SettingsManager.reloadDBVariables(() -> {
mIsOnline = true;
firstCheckExecution = false;
}
@Override
public void onFailed(Exception ex) {
}, ex -> {
//mNoConnectionLayout.expand(true);
if(!mIsOnline) mIsOnline = false;
}
});
);
} else if(!value && mIsOnline){
mIsOnline = false;

View File

@@ -292,6 +292,10 @@ public class MtbColt extends EntityBase implements Parcelable {
return gestione;
}
public GestioneEnum getGestioneEnum() {
return GestioneEnum.fromString(gestione);
}
public MtbColt setGestione(String gestione) {
this.gestione = gestione;
return this;

View File

@@ -9,6 +9,8 @@ public class DBSettingsModel {
private List<String> availableProfiles = null;
private List<AvailableCodMdepsDTO> availableCodMdep = null;
private boolean enableCheckPartitaMagCheckPickingV;
public List<String> getAvailableProfiles() {
return availableProfiles;
}
@@ -24,4 +26,13 @@ public class DBSettingsModel {
public void setAvailableCodMdep(List<AvailableCodMdepsDTO> availableCodMdep) {
this.availableCodMdep = availableCodMdep;
}
public boolean isEnableCheckPartitaMagCheckPickingV() {
return enableCheckPartitaMagCheckPickingV;
}
public DBSettingsModel setEnableCheckPartitaMagCheckPickingV(boolean enableCheckPartitaMagCheckPickingV) {
this.enableCheckPartitaMagCheckPickingV = enableCheckPartitaMagCheckPickingV;
return this;
}
}

View File

@@ -5,9 +5,11 @@ import android.content.Context;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class SettingsManager {
@@ -62,37 +64,40 @@ public class SettingsManager {
public static void reloadDBVariables(final ISimpleOperationCallback callback){
public static void reloadDBVariables(Runnable onComplete, RunnableArgs<Exception> onFailed){
dbSettingsModelIstance = new DBSettingsModel();
loadAvailableProfiles(callback);
loadAvailableProfiles(() ->
loadAvailableCodMdeps(() ->
loadGestSetupValues(onComplete, onFailed) ,onFailed), onFailed);
}
private static void loadAvailableProfiles(final ISimpleOperationCallback callback){
private static void loadAvailableProfiles(Runnable onComplete, RunnableArgs<Exception> onFailed){
SystemRESTConsumer.getAvailableProfiles(new ISimpleOperationCallback<List<String>>() {
@Override
public void onSuccess(List<String> availableProfiles) {
dbSettingsModelIstance.setAvailableProfiles(availableProfiles);
loadAvailableCodMdeps(callback);
onComplete.run();
}
@Override
public void onFailed(Exception ex) {
//BOH
if(callback != null) callback.onFailed(ex);
if(onFailed != null) onFailed.run(ex);
}
});
}
private static void loadAvailableCodMdeps(final ISimpleOperationCallback callback) {
private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs<Exception> onFailed) {
SystemRESTConsumer.getAvailableCodMdeps(new ISimpleOperationCallback<List<AvailableCodMdepsDTO>>() {
@Override
public void onSuccess(List<AvailableCodMdepsDTO> availableCodMdeps) {
dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps);
if(availableCodMdeps == null || availableCodMdeps.size() == 0) {
callback.onFailed(new Exception(mContext.getText(R.string.no_codmdep_available).toString()));
onFailed.run(new Exception(mContext.getText(R.string.no_codmdep_available).toString()));
return;
}
@@ -112,15 +117,26 @@ public class SettingsManager {
settingsModelIstance.userSession.depo = availableCodMdeps.get(0);
}
if(callback != null) callback.onSuccess(null);
if(onComplete != null) onComplete.run();
}
@Override
public void onFailed(Exception ex) {
//BOH
if(callback != null) callback.onFailed(ex);
if(onFailed != null) onFailed.run(ex);
}
});
}
private static void loadGestSetupValues(Runnable onComplete, RunnableArgs<Exception> onFailed) {
GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", value -> {
dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(value);
if(onComplete != null) onComplete.run();
}, ex -> {
if(onFailed != null) onFailed.run(ex);
});
}
}

View File

@@ -17,8 +17,11 @@ public class UtilityExceptions {
progressDialog.dismiss();
defaultException(context, ex);
}
public static void defaultException(Context context, Exception ex){
defaultException(context, ex, false);
}
public static void defaultException(Context context, Exception ex, boolean sendEmail){
Logger.e(ex, ex.getMessage());
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
@@ -26,7 +29,7 @@ public class UtilityExceptions {
if(errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(context, new SpannableString(errorMessage), null, null).show();
UtilityLogger.errorMe(ex);
if(sendEmail) UtilityLogger.errorMe(ex);
}
}

View File

@@ -51,7 +51,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(mAccettazioneOrdineInevasoViewModel.onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex)));
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}

View File

@@ -154,10 +154,6 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
mActivity.bindings.filteredArtsInListExpandableLayout.expand(true);
mActivity.bindings.descriptionFilterText.setText(descriptionText);
}
public void removeListFilter() {
@@ -670,6 +666,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
}
}
removeListFilter();
refreshOrderBy(true);
}

View File

@@ -8,6 +8,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import it.integry.integrywmsnative.core.REST.model.Ean128Model;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
@@ -38,6 +39,8 @@ public class PickingObjectDTO implements Parcelable {
private MtbAart mtbAart;
private Boolean hidden = null;
private Boolean tempHidden = null;
private PickData tempPickData = null;
protected PickingObjectDTO(Parcel in) {
if (in.readByte() == 0) {
@@ -389,4 +392,33 @@ public class PickingObjectDTO implements Parcelable {
this.hidden = hidden;
return this;
}
public Boolean isTempHidden() {
return tempHidden;
}
public PickingObjectDTO setTempHidden(Boolean tempHidden) {
this.tempHidden = tempHidden;
return this;
}
public PickData getTempPickData() {
return tempPickData;
}
public PickingObjectDTO setTempPickData(PickData tempPickData) {
this.tempPickData = tempPickData;
return this;
}
public class PickData {
private String batchLot;
private BigDecimal qtaDaEvadere;
private BigDecimal qtaEvasa;
private BigDecimal qtaOrd;
private BigDecimal qtaTot;
private BigDecimal qtaCnf;
private Integer numCnf;
private Date dataScad;
}
}

View File

@@ -11,7 +11,10 @@ import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
@@ -30,6 +33,8 @@ public class VenditaOrdineInevasoActivity extends AppCompatActivity {
private static final int PICK_UL_REQUEST = 1; // The request code
private int barcodeScannerIstanceID = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -49,6 +54,9 @@ public class VenditaOrdineInevasoActivity extends AppCompatActivity {
setTitle(R.string.activity_vendita_inevaso_title);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(mVenditaOrdineInevasoViewModel.onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}
@Override
@@ -63,7 +71,10 @@ public class VenditaOrdineInevasoActivity extends AppCompatActivity {
mArticoliInColloBottomSheetViewModel.collapse();
} else if(mVenditaOrdineInevasoViewModel.thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL();
} else super.onBackPressed();
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
@Override

View File

@@ -138,7 +138,9 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
final VenditaOrdineInevasoListViewModel.SubItem rowItem = subset.get(i);
if(!rowItem.getOriginalModel().isHidden()) {
if(!rowItem.getOriginalModel().isHidden() &&
(rowItem.getOriginalModel().isTempHidden() == null ||
(rowItem.getOriginalModel().isTempHidden() != null && !rowItem.getOriginalModel().isTempHidden()))) {
visibleElementsCounter++;
View groupModelViewPool = (View) sPool.acquire();
@@ -183,9 +185,13 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
descrizione.setText(descrizioneString);
descrizione.setTextColor(descrizioneColor);
final TextView subDescrizione = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione);
if(rowItem.getSubDescrizione() != null) subDescrizione.setText(Html.fromHtml(rowItem.getSubDescrizione()));
subDescrizione.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione()) ? View.GONE : View.VISIBLE);
final TextView subDescrizione1 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione1);
if(rowItem.getSubDescrizione1() != null) subDescrizione1.setText(Html.fromHtml(rowItem.getSubDescrizione1()));
subDescrizione1.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione1()) ? View.GONE : View.VISIBLE);
final TextView subDescrizione2 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione2);
if(rowItem.getSubDescrizione2() != null) subDescrizione2.setText(Html.fromHtml(rowItem.getSubDescrizione2()));
subDescrizione2.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione2()) ? View.GONE : View.VISIBLE);
final TextView qtaEvasa = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_qta_evasa);
qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata()));
@@ -196,6 +202,7 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
groupModelView.setOnClickListener(view -> {
if (mOrdineRowDispatch != null) {
rowItem.getOriginalModel().setTempEan128Model(null);
mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel());
}
});

View File

@@ -65,6 +65,8 @@ public class VenditaOrdineInevasoHelper {
(tmpItem.getNumCollo() == null && tmpItem.getQtaOrd().floatValue() <= 0)) {
tmpItem.setHidden(true);
} else tmpItem.setHidden(false);
tmpItem.setTempHidden(false);
}
}
@@ -103,8 +105,12 @@ public class VenditaOrdineInevasoHelper {
rowModel.setDescrizione(currentItem.getDescrizioneEstesa());
if(!UtilityString.isNullOrEmpty(currentItem.getPartitaMag())) {
rowModel.setSubDescrizione1(String.format(mContext.getResources().getText(R.string.batch_lot_text).toString(), currentItem.getPartitaMag()));
}
if(currentItem.getNumCollo() != null) {
rowModel.setSubDescrizione(String.format(mContext.getResources().getText(R.string.lu_number_text).toString(), currentItem.getNumCollo(), currentItem.getDataColloHuman()));
rowModel.setSubDescrizione2(String.format(mContext.getResources().getText(R.string.lu_number_text).toString(), currentItem.getNumCollo(), currentItem.getDataColloHuman()));
}
rowModel.setQtaRiservata(getRigaQuantityEvasa(currentItem, mtbColrs));

View File

@@ -13,7 +13,8 @@ public class VenditaOrdineInevasoListViewModel {
public boolean isHidden(){
if(rows == null || rows.size() == 0) return true;
return Stream.of(rows).filter(x -> x.originalModel.isHidden() != null && !x.originalModel.isHidden()).count() == 0;
return Stream.of(rows).filter(x -> (x.originalModel.isHidden() != null && !x.originalModel.isHidden()) &&
(x.originalModel.isTempHidden() != null && !x.originalModel.isTempHidden())).count() == 0;
}
public static class SubItem {
@@ -22,7 +23,8 @@ public class VenditaOrdineInevasoListViewModel {
private String badge2;
private String descrizione;
private String subDescrizione;
private String subDescrizione1;
private String subDescrizione2;
private BigDecimal qtaRiservata;
private BigDecimal qtaOrdinata;
@@ -55,12 +57,21 @@ public class VenditaOrdineInevasoListViewModel {
return this;
}
public String getSubDescrizione() {
return subDescrizione;
public String getSubDescrizione1() {
return subDescrizione1;
}
public SubItem setSubDescrizione(String subDescrizione) {
this.subDescrizione = subDescrizione;
public SubItem setSubDescrizione1(String subDescrizione1) {
this.subDescrizione1 = subDescrizione1;
return this;
}
public String getSubDescrizione2() {
return subDescrizione2;
}
public SubItem setSubDescrizione2(String subDescrizione2) {
this.subDescrizione2 = subDescrizione2;
return this;
}

View File

@@ -12,11 +12,17 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.REST.model.Ean128Model;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.FiltroOrdineDTO;
import it.integry.integrywmsnative.core.model.MtbColr;
@@ -24,7 +30,11 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
@@ -40,12 +50,14 @@ import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
import it.integry.plugins.barcode_base_library.model.BarcodeType;
public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IOnOrdineVenditaRowDispatched {
public ObservableField<Boolean> isFabVisible = new ObservableField<>();
private final VenditaOrdineInevasoActivity mActivity;
private VenditaOrdineInevasoActivity mActivity;
private final ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
private final List<PickingObjectDTO> mPickingList;
@@ -113,7 +125,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
Stream.of(this.mTestateOrdini).forEach(x -> flatOrderArray.addAll(x.ordini));
//Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(flatOrderArray)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum)
@@ -205,9 +216,24 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
}
}
public void recoverUL(MtbColt recoveredMtbColt){
public void applyFilter(String descriptionText) {
// DialogSimpleMessageHelper.makeInfoDialog(mActivity, "Info", new SpannableString("La funzione di recupero UL non è completa"), null, null).show();
mActivity.bindings.filteredArtsInListExpandableLayout.expand(true);
mActivity.bindings.descriptionFilterText.setText(descriptionText);
}
public void removeListFilter() {
for(int i = 0; i < mPickingList.size(); i++) {
mPickingList.get(i).setTempHidden(false);
// mPickingList.get(i).setTempEan128Model(null);
}
refreshOrderBy(false);
mActivity.bindings.filteredArtsInListExpandableLayout.collapse(true);
}
public void recoverUL(MtbColt recoveredMtbColt){
for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){
@@ -233,12 +259,222 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
refreshOrderBy(false);
}
public RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
progressDialog.show();
BarcodeManager.disable();
//Se non c'è una UL aperta
if(!thereIsAnOpenedUL()){
//Se è un'etichetta anonima
if(UtilityBarcode.isEtichettaAnonima(data)){
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
this.executeEtichettaAnonimaNotOpenedLU(data, progressDialog);
} else if(data.getType() == BarcodeType.EAN128) {
this.createNewUL(null, null, progressDialog, false, false, () -> {
this.executeEtichettaEan128(data, progressDialog);
});
}
} else {
if(UtilityBarcode.isEtichettaAnonima(data)){
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(data.getStringValue(), null, progressDialog);
} else if(data.getType() == BarcodeType.EAN128) {
this.executeEtichettaEan128(data, progressDialog);
}
}
};
private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if(mtbColt == null) {
this.createNewUL(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, progressDialog,
true, true,
null);
} else {
this.createNewUL(
null,
null,
progressDialog,
false, false,
() -> searchArtFromUL(mtbColt, progressDialog)
);
}
BarcodeManager.enable();
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaLU(String SSCC, Ean128Model ean128Model, ProgressDialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(mtbColt != null) {
searchArtFromUL(mtbColt, progressDialog);
} else {
progressDialog.dismiss();
showNoArtFoundDialog();
}
BarcodeManager.enable();
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if(!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if(!UtilityString.isNullOrEmpty(ean128Model.Content)) barcodeProd = ean128Model.Content;
if(!UtilityString.isNullOrEmpty(barcodeProd)) {
if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)){
this.executeEtichettaLU(ean128Model.Sscc, ean128Model, progressDialog);
} else {
if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
barcodeProd = barcodeProd.substring(1, barcodeProd.length());
}
// this.loadArticolo(barcodeProd, ean128Model, progressDialog);
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
progressDialog.dismiss();
BarcodeManager.enable();
}
}, ex-> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaEan128Art(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
}
private void searchArtFromUL(MtbColt scannedUL, ProgressDialog progressDialog) {
final List<PickingObjectDTO> pickingList = mPickingList;
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
.filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
x.getDataColloS().equals(scannedUL.getDataColloS()) &&
x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) &&
(scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE)).toList();
//Cerco se devo fare pick dell'articolo tramite codMart perché forse non risulta in nessun collo
if(matchPickingObject != null && matchPickingObject.size() == 0 && scannedUL.getMtbColr() != null && scannedUL.getMtbColr().size() > 0) {
List<String> listOfCodMartsInRowCollo = Stream.of(scannedUL.getMtbColr())
.map(MtbColr::getCodMart)
.withoutNulls()
.toList();
matchPickingObject = Stream.of(pickingList)
.filter(x -> x.getNumCollo() == null &&
(listOfCodMartsInRowCollo.contains(x.getCodMart())))
.toList();
if(SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV()) {
for (int i = 0; i < matchPickingObject.size(); i++) {
PickingObjectDTO tmpPickObj = matchPickingObject.get(i);
boolean anyMatch = Stream.of(scannedUL.getMtbColr())
.anyMatch(x -> x.getCodMart().equalsIgnoreCase(tmpPickObj.getCodMart()) &&
Objects.equals(x.getPartitaMag(), tmpPickObj.getPartitaMag()));
if(!anyMatch) {
matchPickingObject.remove(i);
i--;
}
}
}
}
this.loadMatchedRows(matchPickingObject);
progressDialog.dismiss();
BarcodeManager.enable();
}
private void searchArtFromAnag() {
}
private void loadMatchedRows(List<PickingObjectDTO> matchedRows) {
if(matchedRows == null || matchedRows.size() == 0) {
showNoArtFoundDialog();
} else if(matchedRows.size() == 1) {
// matchedRows.get(0).setTempEan128Model(ean128Model);
onOrdineRowDispatch(matchedRows.get(0));
} else {
for(int i = 0; i < mPickingList.size(); i++) {
if(!matchedRows.contains(mPickingList.get(i))) {
mPickingList.get(i).setTempHidden(true);
// mPickingList.get(i).setTempEan128Model(ean128Model);
}
}
applyFilter("COD: ");
refreshOrderBy(false);
}
}
private void showNoArtFoundDialog() {
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
null, null).show();
}
public void createNewUL() {
this.createNewUL(null, null, null, false, true, null);
}
public void createNewUL(Integer customNumCollo, String customSerCollo, ProgressDialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) {
mActivity.bindings.venditaOrdineInevasoFab.close(true);
final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting),
mActivity.getText(R.string.loading) + " ...", true);
if (progress == null){
progress = UtilityProgress.createDefaultProgressDialog(mActivity);
}
progress.show();
MtbColt mtbColt = new MtbColt();
@@ -254,17 +490,28 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setCodAnag(defaultCodAnagOfUL)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if(customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
}
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
}
mtbColt.generaFiltroOrdineFromDTO(defaultFiltroOrdine);
ProgressDialog finalProgress = progress;
ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
value.setMtbColr(new ObservableArrayList<>());
value
.setDisablePrint(disablePrint)
.setMtbColr(new ObservableArrayList<>());
setULToCurrentContext(value);
progress.dismiss();
if(closeProgress) finalProgress.dismiss();
new StatusBarAlert.Builder(mActivity)
.autoHide(true)
@@ -274,11 +521,13 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.withAlertColor(R.color.mainGreen)
.build();
if(onComplete != null) onComplete.run();
}
@Override
public void onFailed(Exception ex) {
UtilityExceptions.defaultException(mActivity, ex, progress);
UtilityExceptions.defaultException(mActivity, ex, finalProgress);
}
});
@@ -451,6 +700,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
}
}
removeListFilter();
refreshOrderBy(true);
}
@@ -487,6 +737,46 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setCanPartitaMagBeChanged(false)
.setMaxQta(item.getQtaOrd());
// if(item.getTempEan128Model() != null){
// Ean128Model ean128Model = item.getTempEan128Model();
//
// if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
// dto.setBatchLot(ean128Model.BatchLot);
// }
//
// try {
// if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
// dto.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
// } else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
// dto.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
// }
//
// } catch (Exception e) {
// UtilityLogger.errorMe(e);
// }
//
//
// if(ean128Model.Count != null && ean128Model.Count > 0) {
// //if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
// dto.setNumCnf(ean128Model.Count);
// //} else {
// // dto.setQtaTot(new BigDecimal(ean128Model.Count));
// //}
// }
//
// if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
// dto.setQtaTot(new BigDecimal(ean128Model.NetWeightKg));
// }
//
// if(dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getNumCnf() != null && dto.getNumCnf() > 0) {
// dto.setQtaCnf(dto.getQtaTot().divide(new BigDecimal(dto.getNumCnf())));
// }
//
// dto.setCanPartitaMagBeChanged(false);
// dto.setCanDataScadBeChanged(false);
// dto.setShouldAskDataScad(true);
// }
DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show();
}
}
@@ -537,7 +827,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setMtbAart(item.getMtbAart());
mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr);
refreshOrderBy(false);
removeListFilter();
new StatusBarAlert.Builder(mActivity)
.autoHide(true)

View File

@@ -333,7 +333,7 @@ public class DialogInputQuantity {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex)));
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false)));
currentAlert.setOnDismissListener(dialog -> {
BarcodeManager.removeCallback(barcodeIstanceID);

View File

@@ -1,4 +1,4 @@
<layout>
<layout xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
@@ -50,15 +50,75 @@
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/vendita_ordine_main_list"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:clipToPadding="false" />
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/filtered_arts_in_list_expandable_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:el_duration="400"
app:el_expanded="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toLeftOf="@+id/remove_art_filter_list"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="@string/filtered_arts_in_list" />
<TextView
android:id="@+id/description_filter_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
android:ellipsize="end"
android:maxLines="1"
tools:text="COD_ART_HERE"/>
</LinearLayout>
<android.support.v7.widget.AppCompatButton
android:id="@+id/remove_art_filter_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:backgroundTint="@color/red_600"
android:textColor="@android:color/white"
android:onClick="@{() -> viewmodel.removeListFilter()}"
android:text="@string/remove_filter_button"/>
</RelativeLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/vendita_ordine_main_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
android:clipToPadding="false"/>
</LinearLayout>
<android.support.constraint.ConstraintLayout

View File

@@ -97,7 +97,14 @@
tools:text="DESCRIZIONE"/>
<TextView
android:id="@+id/vendita_ordine_inevaso_main_list_group_item_subdescrizione"
android:id="@+id/vendita_ordine_inevaso_main_list_group_item_subdescrizione1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
tools:text="SUB DESCRIZIONE"/>
<TextView
android:id="@+id/vendita_ordine_inevaso_main_list_group_item_subdescrizione2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"

View File

@@ -91,6 +91,7 @@
<string name="to_dispatch">Da evadere</string>
<string name="batch_lot">Lotto</string>
<string name="batch_lot_text"><![CDATA[Lotto: <b>%s</b>]]></string>
<string name="expire_date">Data scad</string>
<string name="num_pcks">Num cnf</string>
<string name="qty_x_pck"><![CDATA[Qtà x cnf]]></string>

View File

@@ -97,6 +97,7 @@
<string name="to_dispatch">To dispatch</string>
<string name="batch_lot">Batch lot</string>
<string name="batch_lot_text"><![CDATA[Batch lot: <b>%s</b>]]></string>
<string name="expire_date">Expire date</string>
<string name="num_pcks">Pcks num</string>
<string name="qty_x_pck">Qty x pck</string>