Modifiche parziali Picking Libero

This commit is contained in:
Giuseppe Scorrano 2020-07-28 18:29:02 +02:00
parent 7005ccf97a
commit 26c08f1945
7 changed files with 258 additions and 28 deletions

View File

@ -16,6 +16,9 @@ import androidx.databinding.DataBindingUtil;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal;
import java.util.Date;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
@ -25,9 +28,11 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -37,9 +42,13 @@ import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.FragmentPickingLiberoBinding;
import it.integry.integrywmsnative.gest.picking_libero.viewmodel.PickingLiberoViewModel;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickingObjectDTO;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
/**
* A simple {@link Fragment} subclass.
@ -243,4 +252,53 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
}
}).show();
}
@Override
public void onItemDispatched(
PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaToBeTaken(totalQtaToBeTaken)
.setTotalNumCnfToBeTaken(totalNumCnfToBeTaken)
.setQtaCnfToBeTaken(qtaCnfToBeTaken)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity);
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
this.closeProgress();
})
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onRowSaved() {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
}

View File

@ -1,21 +1,23 @@
package it.integry.integrywmsnative.gest.picking_libero;
import android.app.Dialog;
import android.text.SpannableString;
import androidx.databinding.ObservableArrayList;
import java.math.BigDecimal;
import java.util.Date;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
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.VtbDest;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
@ -26,10 +28,14 @@ import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickDataDTO;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickingObjectDTO;
public class PickingLiberoViewModelNEW {
@ -66,6 +72,16 @@ public class PickingLiberoViewModelNEW {
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete){
if(this.mCurrentMtbColt == null) {
this.createNewLU(null, null, () -> {
executeEtichettaBehaviour(barcodeScanDTO, onComplete);
});
} else {
executeEtichettaBehaviour(barcodeScanDTO, onComplete);
}
}
private void executeEtichettaBehaviour(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if(UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)){
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
@ -99,7 +115,7 @@ public class PickingLiberoViewModelNEW {
if(mtbColtScanned == null) {
this.sendError(new NoLUFoundException());
} else if((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) {
// pickMerceULtoUL(mtbColtScanned, mtbColt.get(), onComplete);
pickMerceULtoUL(mtbColtScanned, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
@ -201,13 +217,140 @@ public class PickingLiberoViewModelNEW {
}
private void dispatchArt(MtbAart mtbAart, Ean128Model ean128Model){
PickingObjectDTO pickingObjectDTO = new PickingObjectDTO()
.setMtbAart(mtbAart)
.setTempPickData(PickDataDTO.fromEan128(ean128Model));
BigDecimal numCnfDaPrelevare = null;
BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null;
BigDecimal initialNumCnf = null;
BigDecimal initialQtaCnf = null;
BigDecimal initialQtaTot = null;
String partitaMag = null;
Date dataScad = null;
if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
//Oppure le info del barcode scansionato
PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO();
qtaColDaPrelevare = manualPickDTO.getQtaTot();
numCnfDaPrelevare = manualPickDTO.getNumCnf();
if (mtbAart.isFlagQtaCnfFissaBoolean()) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
} else if (qtaColDaPrelevare != null && numCnfDaPrelevare != null) {
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
} else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
qtaColDaPrelevare = UtilityBigDecimal.multiply(numCnfDaPrelevare, qtaCnfDaPrelevare);
}
if (manualPickDTO.getMtbPartitaMag() != null) {
partitaMag = manualPickDTO.getMtbPartitaMag().getPartitaMag();
dataScad = manualPickDTO.getMtbPartitaMag().getDataScadD();
}
} else {
initialNumCnf = BigDecimal.ONE;
initialQtaCnf = mtbAart.getQtaCnf();
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if(numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) {
initialNumCnf = BigDecimal.ONE;
initialQtaCnf = mtbAart.getQtaCnf();
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
initialNumCnf,
initialQtaCnf,
initialQtaTot,
qtaColDaPrelevare,
numCnfDaPrelevare,
qtaCnfDaPrelevare,
partitaMag,
dataScad,
false,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
private void pickMerceULtoUL(MtbColt sourceMtbColt, Runnable onComplete) {
}
private void pickMerceULtoUL(MtbColt sourceMtbColt, MtbColt destMtbColt) {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
if(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
this.sendOnLoadingEnded();
return;
}
mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart());
mCurrentMtbColt.getMtbColr().add(mtbColr);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU();
}, this::sendError);
}
public void closeLU() {
}
@ -235,6 +378,36 @@ public class PickingLiberoViewModelNEW {
if(this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort);
}
private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaToBeTaken,
totalNumCnfToBeTaken,
qtaCnfToBeTaken,
partitaMag,
dataScad,
canOverflowOrderQuantity,
onComplete);
}
private void sendOnRowSaved() {
if (this.mListener != null) mListener.onRowSaved();
}
public PickingLiberoViewModelNEW setListener(Listener listener) {
this.mListener = listener;
return this;
@ -262,21 +435,15 @@ public class PickingLiberoViewModelNEW {
void onFilterRemoved();
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
*/
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaOrd,
BigDecimal totalNumCnfOrd,
BigDecimal qtaCnfOrd,
BigDecimal totalQtaToBeTaken,
BigDecimal totalNumCnfToBeTaken,
BigDecimal qtaCnfToBeTaken,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
@ -284,7 +451,7 @@ public class PickingLiberoViewModelNEW {
void onRowSaved();
*/
}
}

View File

@ -6,6 +6,7 @@ import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
public class HistoryVersamentoProdULDTO {
@ -36,6 +37,7 @@ public class HistoryVersamentoProdULDTO {
private MtbAart mtbAart;
public BigDecimal getQtaCnf() {
if(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO)) return BigDecimal.ONE;
return qtaCol.divide(numCnf, 3, RoundingMode.HALF_EVEN);
}

View File

@ -6,6 +6,7 @@ import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.MainApplicationModule;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@ -22,8 +23,8 @@ public class SpedizioneModule {
@Provides
@Singleton
SpedizioneViewModel providesSpedizioneViewModel(ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer) {
return new SpedizioneViewModel(colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer);
SpedizioneViewModel providesSpedizioneViewModel(ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) {
return new SpedizioneViewModel(barcodeRESTConsumer, colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer);
}
}

View File

@ -92,16 +92,19 @@ public class SpedizioneViewModel {
private MtbColt mCurrentMtbColt = null;
private Integer mMtbColtSessionID;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliDataRecoverService mColliDataRecoverService;
private final OrdiniRESTConsumer mOrdiniRestConsumerService;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
@Inject
public SpedizioneViewModel(ColliDataRecoverService colliDataRecoverService,
public SpedizioneViewModel( BarcodeRESTConsumer barcodeRESTConsumer,
ColliDataRecoverService colliDataRecoverService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService;
this.mOrdiniRestConsumerService = ordiniRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
@ -289,8 +292,7 @@ public class SpedizioneViewModel {
}
private void sendLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete) {
if (this.mListeners != null)
mListeners.onLUPesoRequired(codTcol, netWeightKG, grossWeightKG, onComplete);
if (this.mListeners != null) mListeners.onLUPesoRequired(codTcol, netWeightKG, grossWeightKG, onComplete);
}
private void sendLUPrintRequest(RunnableArgs<Boolean> onComplete) {
@ -493,7 +495,7 @@ public class SpedizioneViewModel {
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
BarcodeRESTConsumer.decodeEan128Static(barcodeScanDTO, ean128Model -> {
mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
@ -808,8 +810,6 @@ public class SpedizioneViewModel {
.setMtbAart(mtbAart)
.setTempPickData(PickDataDTO.fromEan128(ean128Model));
BigDecimal numCnfDaPrelevare = null;
BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null;

View File

@ -38,6 +38,7 @@ public class DialogInputQuantityV2ViewModel {
public BigDecimal qtaCnfAvailable;
public Boolean shouldAskDataScad;
public Boolean shouldShowDataScad;
private BigDecimal initialNumCnf;
private BigDecimal initialQtaCnf;
@ -77,6 +78,7 @@ public class DialogInputQuantityV2ViewModel {
}
this.shouldAskDataScad = mtbAart.get().isFlagQtaCnfFissaBoolean() && mtbAart.get().getGgScadPartita() != null && mtbAart.get().getGgScadPartita() > 0;
this.shouldShowDataScad = this.internalDataScad != null;
this.blockedNumCnf.set(false);
this.blockedQtaCnf.set(false);

View File

@ -380,7 +380,7 @@
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="@{viewmodel.shouldAskDataScad ? 1f : 2f}"
android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}"
android:paddingEnd="4dp"
tools:layout_weight="1">
@ -400,7 +400,7 @@
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:visibility="@{viewmodel.shouldAskDataScad ? View.VISIBLE : View.GONE}"
android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}"
android:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText