Nuove implementazioni su RecuperoMateriale

This commit is contained in:
Giuseppe Scorrano 2019-08-08 16:35:17 +02:00
parent 694e8a0b52
commit 584a4d93e2
9 changed files with 226 additions and 8 deletions

View File

@ -59,6 +59,7 @@ public class MtbColt extends EntityBase {
public List<MtbCols> mtbCols; public List<MtbCols> mtbCols;
private Boolean disablePrint; private Boolean disablePrint;
private String ragSocCliente;
public void generaFiltroOrdine() throws Exception { public void generaFiltroOrdine() throws Exception {
@ -100,11 +101,13 @@ public class MtbColt extends EntityBase {
setSerCollo("/"); setSerCollo("/");
} }
public void initDefaultFields() { public MtbColt initDefaultFields() {
setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()); setCodMdep(SettingsManager.i().userSession.depo.getCodMdep());
setPreparatoDa(SettingsManager.i().user.fullname); setPreparatoDa(SettingsManager.i().user.fullname);
setOraInizPrep(UtilityDate.getDateInstance()); setOraInizPrep(UtilityDate.getDateInstance());
setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); setCodAnag(SettingsManager.iDB().getDefaultCodAnag());
return this;
} }
@ -470,6 +473,15 @@ public class MtbColt extends EntityBase {
return this; return this;
} }
public String getRagSocCliente() {
return ragSocCliente;
}
public MtbColt setRagSocCliente(String ragSocCliente) {
this.ragSocCliente = ragSocCliente;
return this;
}
public void generaFiltroOrdineFromDTO(List<FiltroOrdineDTO> filtroOrdineDtos) { public void generaFiltroOrdineFromDTO(List<FiltroOrdineDTO> filtroOrdineDtos) {
String xmlPrefix = "{\"whereCond\": \""; String xmlPrefix = "{\"whereCond\": \"";

View File

@ -66,8 +66,6 @@ public class ProdRecuperoMaterialeFragment extends Fragment implements ITitledFr
((IPoppableActivity) getActivity()).pop(); ((IPoppableActivity) getActivity()).pop();
}); });
// mViewmodel.openLU();
} }

View File

@ -13,6 +13,7 @@ import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListHeaderBinding; import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListHeaderBinding;
import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListItemBinding; import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListItemBinding;
@ -28,6 +29,8 @@ public class HistoryULsListAdapter extends SectionedRecyclerViewAdapter<HistoryU
private List<HistoryVersamentoProdUL> mDataset; private List<HistoryVersamentoProdUL> mDataset;
private RunnableArgs<HistoryVersamentoProdUL> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder { static class SubheaderHolder extends RecyclerView.ViewHolder {
ProdRecuperoMaterialeListHeaderBinding binding; ProdRecuperoMaterialeListHeaderBinding binding;
@ -57,6 +60,10 @@ public class HistoryULsListAdapter extends SectionedRecyclerViewAdapter<HistoryU
mDataset = orderItems(myDataset); mDataset = orderItems(myDataset);
} }
public void setOnItemClicked(RunnableArgs<HistoryVersamentoProdUL> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
public void updateItems(List<HistoryVersamentoProdUL> updatedDataset) { public void updateItems(List<HistoryVersamentoProdUL> updatedDataset) {
mDataset.clear(); mDataset.clear();
mDataset.addAll(orderItems(updatedDataset)); mDataset.addAll(orderItems(updatedDataset));
@ -112,7 +119,7 @@ public class HistoryULsListAdapter extends SectionedRecyclerViewAdapter<HistoryU
holder.binding.getRoot().setOnClickListener(v -> { holder.binding.getRoot().setOnClickListener(v -> {
if(this.mOnItemClicked != null) this.mOnItemClicked.run(ul);
}); });

View File

@ -2,12 +2,15 @@ package it.integry.integrywmsnative.gest.prod_recupero_materiale.core;
import android.content.Context; import android.content.Context;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type; 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.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
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;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -73,8 +76,42 @@ public class ProdRecuperoMaterialeHelper {
Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdUL>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<HistoryVersamentoProdUL>>() {}.getType();
SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<List<HistoryVersamentoProdUL>>() { SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<List<HistoryVersamentoProdUL>>() {
@Override @Override
public void onSuccess(List<HistoryVersamentoProdUL> value) { public void onSuccess(List<HistoryVersamentoProdUL> ulList) {
onComplete.run(value);
if(ulList != null && ulList.size() > 0){
List<String> codMarts = Stream.of(ulList)
.map(HistoryVersamentoProdUL::getCodMart)
.withoutNulls()
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (HistoryVersamentoProdUL value : ulList) {
MtbAart foundMtbAart = null;
List<MtbAart> mtbAartStream = Stream.of(arts)
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
if(mtbAartStream != null && mtbAartStream.size() > 0){
foundMtbAart = mtbAartStream.get(0);
}
value.setMtbAart(foundMtbAart);
}
onComplete.run(ulList);
}
}, onFailed);
} else {
onComplete.run(ulList);
}
} }
@Override @Override

View File

@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.prod_recupero_materiale.dto;
import java.math.BigDecimal; import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbAart;
public class HistoryVersamentoProdUL { public class HistoryVersamentoProdUL {
@ -22,6 +24,8 @@ public class HistoryVersamentoProdUL {
private String descrizioneArt; private String descrizioneArt;
private String untMis; private String untMis;
private MtbAart mtbAart;
public String getGestione() { public String getGestione() {
return gestione; return gestione;
} }
@ -165,4 +169,13 @@ public class HistoryVersamentoProdUL {
this.untMis = untMis; this.untMis = untMis;
return this; return this;
} }
public MtbAart getMtbAart() {
return mtbAart;
}
public HistoryVersamentoProdUL setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
} }

View File

@ -6,18 +6,32 @@ import android.content.Context;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
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.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.settings.SettingsManager;
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.UtilityPosizione; 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;
@ -26,7 +40,10 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.HistoryULsL
import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuperoMaterialeHelper; import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuperoMaterialeHelper;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdUL; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdUL;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.views.InputQuantityToReturnDialog; import it.integry.integrywmsnative.gest.prod_recupero_materiale.views.InputQuantityToReturnDialog;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
public class ProdRecuperoMaterialeViewModel { public class ProdRecuperoMaterialeViewModel {
@ -125,9 +142,127 @@ public class ProdRecuperoMaterialeViewModel {
private void initRecyclerView(List<HistoryVersamentoProdUL> historyULs) { private void initRecyclerView(List<HistoryVersamentoProdUL> historyULs) {
mAdapter = new HistoryULsListAdapter(mContext, historyULs); mAdapter = new HistoryULsListAdapter(mContext, historyULs);
mAdapter.setOnItemClicked(this::onListItemClicked);
mBinding.prodRecuperoMaterialeMainList.setLayoutManager(new LinearLayoutManager(mContext)); mBinding.prodRecuperoMaterialeMainList.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.prodRecuperoMaterialeMainList.setAdapter(mAdapter); mBinding.prodRecuperoMaterialeMainList.setAdapter(mAdapter);
} }
private void onListItemClicked(HistoryVersamentoProdUL item) {
BigDecimal qtaDaEvadere = BigDecimal.ZERO;
qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol());
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
.setBatchLot(item.getPartitaMag())
.setMtbAart(item.getMtbAart())
.setQtaDisponibile(qtaDaEvadere)
.setQtaTot(qtaDaEvadere)
.setCanPartitaMagBeChanged(false)
.setMaxQta(qtaDaEvadere);
DialogInputQuantity.makeBase(mContext, dto, false, (quantityDTO) -> {
onItemDispatched(item, quantityDTO);
}, () -> {
BarcodeManager.enable();
}).show();
}
private void onItemDispatched(HistoryVersamentoProdUL item, QuantityDTO quantityDTO) {
final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
final MtbColt mtbColt = new MtbColt()
.initDefaultFields()
.setGestione(GestioneEnum.LAVORAZIONE)
.setSegno(+1)
.setMtbColr(new ObservableArrayList<>());
mtbColt
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
final MtbColr mtbColr = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDescrizione(UtilityString.isNullOrEmpty(item.getMtbAart().getDescrizioneEstesa()) ? item.getMtbAart().getDescrizione() : item.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
mtbColt.getMtbColr().add(mtbColr);
ColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
FBToast.successToast(mContext, mContext.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
printCollo(progress, value, () -> {
mOnRecuperoCompleted.run();
});
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
}
private void printCollo(ProgressDialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
DialogAskShouldPrint.make(mContext, "Packing List", shouldPrint -> {
if(shouldPrint) {
PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList.size() > 0) {
try {
singlePrint(mtbColtToPrint, printerList.get(0), () -> {
onComplete.run();
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
mContext,
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
onComplete).show();
});
} catch (Exception ex) {
UtilityExceptions.defaultException(mContext, ex, progress);
onComplete.run();
}
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, onComplete).show();
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
} else {
onComplete.run();
progress.dismiss();
}
}).show();
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
ReportManager.getRightReportNameByGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
PrinterRESTConsumer.printCollo(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
}, onAbort);
}
} }

View File

@ -859,7 +859,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
value value
.setDisablePrint(disablePrint) .setDisablePrint(disablePrint)
.setMtbColr(new ObservableArrayList<>()); .setMtbColr(new ObservableArrayList<>())
.setRagSocCliente(defaultRagSocOfUL);
setULToCurrentContext(value); setULToCurrentContext(value);

View File

@ -8,6 +8,11 @@ import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList; import androidx.databinding.ObservableList;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.shape.CornerFamily;
import com.google.android.material.shape.CornerTreatment;
import com.google.android.material.shape.MaterialShapeDrawable;
import com.google.android.material.shape.ShapeAppearanceModel;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -57,6 +62,14 @@ public class ArticoliInColloBottomSheetViewModel {
mBindings.setViewModel(this); mBindings.setViewModel(this);
// ShapeAppearanceModel shapeAppearanceModel = new ShapeAppearanceModel();
//
// shapeAppearanceModel.setTopLeftCorner(CornerFamily.ROUNDED, 6);
// shapeAppearanceModel.setTopRightCorner(CornerFamily.ROUNDED, 6);
//
// MaterialShapeDrawable materialShapeDrawable = new MaterialShapeDrawable(shapeAppearanceModel);
// mBindings.getRoot().setBackground(materialShapeDrawable);
mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override @Override
public void onPropertyChanged(Observable sender, int propertyId) { public void onPropertyChanged(Observable sender, int propertyId) {

View File

@ -169,6 +169,7 @@
app:layout_constraintStart_toStartOf="parent" /> app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_date"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
@ -192,6 +193,7 @@
app:layout_constraintGuide_percent="0.40" /> app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_posizione"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -273,7 +275,7 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:text="@{viewModel.mtbColt.}" android:text="@{viewModel.mtbColt.ragSocCliente}"
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintStart_toStartOf="@+id/guideline4" app:layout_constraintStart_toStartOf="@+id/guideline4"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"