diff --git a/app/build.gradle b/app/build.gradle index eb0e9f2d..e9ce83c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -88,7 +88,7 @@ dependencies { }) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.orhanobut:logger:2.2.0' - implementation 'com.google.firebase:firebase-core:17.4.1' + implementation 'com.google.firebase:firebase-core:17.4.2' implementation 'com.google.firebase:firebase-crash:16.2.1' implementation 'com.google.firebase:firebase-perf:19.0.7' implementation 'com.google.firebase:firebase-crashlytics:17.0.0' diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java index 0aa0ccaa..65ae1c12 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneActivity.java @@ -5,6 +5,7 @@ import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.LinearLayoutManager; import android.app.Dialog; +import android.content.Intent; import android.os.Bundle; import android.text.SpannableString; @@ -34,8 +35,10 @@ import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgsss; +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.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -45,6 +48,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; +import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.spedizione_new.core.SpedizioneListAdapter; import it.integry.integrywmsnative.gest.spedizione_new.core.SpedizioneListModel; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException; @@ -92,6 +96,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo private Dialog mCurrentProgress; private boolean mShouldCloseActivity; + private final int PICK_UL_REQUEST = 1; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -368,8 +374,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void showCreatedUL() { this.mBindings.spedizioneFab.close(true); - } + ArrayList createdMtbColts = this.mViewmodel.getCreatedMtbColts(); + + Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA); + this.startActivityForResult(myIntent, PICK_UL_REQUEST); + } @Override @@ -383,7 +393,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo } @Override - public void onLUCreated(MtbColt mtbColt) { + public void onLUOpened(MtbColt mtbColt) { this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione()); noLUPresent.set(false); FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); @@ -462,6 +472,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onItemDispatched(PickingObjectDTO pickingObjectDTO, + MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, @@ -479,7 +490,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo boolean canOverflowOrderQuantity, RunnableArgss onComplete) { DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() - .setMtbAart(pickingObjectDTO.getMtbAart()) + .setMtbAart(mtbAart) .setInitialNumCnf(initialNumCnf) .setInitialQtaCnf(initialQtaCnf) .setInitialQtaTot(initialQtaTot) @@ -545,4 +556,20 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo mCurrentProgress = null; } } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + // Check which request we're responding to + if (requestCode == PICK_UL_REQUEST) { + + // Make sure the request was successful + if (resultCode == RESULT_OK) { + MtbColt recoveredMtbColt = DataCache.retrieveItem(data.getStringExtra("key")); + this.mViewmodel.recoverLU(recoveredMtbColt); + } + } + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java index 784b7fcd..8c0dfa9e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/SpedizioneViewModel.java @@ -4,6 +4,7 @@ import androidx.databinding.ObservableArrayList; import androidx.lifecycle.MutableLiveData; +import com.annimon.stream.Optional; import com.annimon.stream.Stream; import org.jetbrains.annotations.NotNull; @@ -50,6 +51,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.CurrentMonoLUPositionIsNotCorrectException; +import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidLUException; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.NoPrintersFoundException; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.OrdersLoadException; @@ -282,8 +284,8 @@ public class SpedizioneViewModel { if (this.mListeners != null) mListeners.onError(ex); } - private void sendLUCreated(MtbColt mtbColt) { - if (this.mListeners != null) mListeners.onLUCreated(mtbColt); + private void sendLUOpened(MtbColt mtbColt) { + if (this.mListeners != null) mListeners.onLUOpened(mtbColt); } private void sendLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss onComplete) { @@ -316,6 +318,7 @@ public class SpedizioneViewModel { } private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO, + MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, @@ -333,6 +336,7 @@ public class SpedizioneViewModel { boolean canOverflowOrderQuantity, RunnableArgss onComplete) { if (this.mListeners != null) mListeners.onItemDispatched(pickingObjectDTO, + mtbAart, initialNumCnf, initialQtaCnf, initialQtaTot, @@ -477,7 +481,9 @@ public class SpedizioneViewModel { mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { - searchArtFromUL(mtbColt, onComplete); + if(mtbColt.getSegno() != -1) { + searchArtFromUL(mtbColt, onComplete); + } else this.sendError(new InvalidLUException()); } else { this.sendError(new NoArtsFoundException()); } @@ -763,6 +769,7 @@ public class SpedizioneViewModel { this.sendOnItemDispatched( pickingObjectDTO, + pickingObjectDTO.getMtbAart(), null, null, null, qtaDaEvadere, numCnfDaEvadere, @@ -848,6 +855,7 @@ public class SpedizioneViewModel { this.sendOnItemDispatched( pickingObjectDTO, + pickingObjectDTO.getMtbAart(), initialNumCnf, initialQtaCnf, initialQtaTot, @@ -876,30 +884,49 @@ public class SpedizioneViewModel { public void dispatchRowEdit(final MtbColr mtbColrToEdit) { - PickingObjectDTO pickingObjectDTO = Stream.of(this.mPickingList.getValue()) - .filter(x -> Stream.of(x.getWithdrawMtbColr()).anyMatch(y -> y == mtbColrToEdit)) - .single(); - this.sendOnLoadingStarted(); + Optional optionalPickingObjectDTO = Stream.of(this.mPickingList.getValue()) + .filter(x -> Stream.of(x.getWithdrawMtbColr()).anyMatch(y -> y == mtbColrToEdit)) + .findSingle(); + + PickingObjectDTO pickingObjectDTO = null; + + if(optionalPickingObjectDTO.isPresent()) { + pickingObjectDTO = optionalPickingObjectDTO.get(); + } + + + PickingObjectDTO finalPickingObjectDTO = pickingObjectDTO; loadRifULFromMtbColr(mtbColrToEdit, mtbColtRif -> { - BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd(); - BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd(); - BigDecimal qtaCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd(); + BigDecimal totalQtaOrd = null; + BigDecimal totalNumCnfOrd = null; + BigDecimal qtaCnfOrd = null; - AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); - AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(); + BigDecimal numCnfDaEvadere = null; + BigDecimal qtaDaEvadere = null; + BigDecimal qtaCnfDaEvadere = null; - Stream.of(pickingObjectDTO.getWithdrawMtbColr()) - .forEach(row -> { - numCnfWithdrawRows.addAndGet(row.getNumCnf()); - qtaColWithdrawRows.addAndGet(row.getQtaCol()); - }); + if(finalPickingObjectDTO != null) { + totalQtaOrd = finalPickingObjectDTO.getSitArtOrdDTO().getQtaOrd(); + totalNumCnfOrd = finalPickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd(); + qtaCnfOrd = finalPickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd(); - BigDecimal numCnfDaEvadere = totalNumCnfOrd.subtract(numCnfWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getNumCnf()); - BigDecimal qtaDaEvadere = totalQtaOrd.subtract(qtaColWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getQtaCol()); - BigDecimal qtaCnfDaEvadere = mtbColrToEdit.getQtaCnf(); + + AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(0); + AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(0); + + Stream.of(finalPickingObjectDTO.getWithdrawMtbColr()) + .forEach(row -> { + numCnfWithdrawRows.addAndGet(row.getNumCnf()); + qtaColWithdrawRows.addAndGet(row.getQtaCol()); + }); + + numCnfDaEvadere = totalNumCnfOrd.subtract(numCnfWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getNumCnf()); + qtaDaEvadere = totalQtaOrd.subtract(qtaColWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getQtaCol()); + qtaCnfDaEvadere = mtbColrToEdit.getQtaCnf(); + } BigDecimal numCnfDaPrelevare = null; BigDecimal qtaColDaPrelevare = null; @@ -960,7 +987,8 @@ public class SpedizioneViewModel { this.sendOnLoadingEnded(); this.sendOnItemDispatched( - pickingObjectDTO, + finalPickingObjectDTO, + mtbColrToEdit.getMtbAart(), mtbColrToEdit.getNumCnf(), mtbColrToEdit.getQtaCnf(), mtbColrToEdit.getQtaCol(), @@ -991,7 +1019,8 @@ public class SpedizioneViewModel { private void loadRifULFromMtbColr(MtbColr mtbColr, RunnableArgs onComplete) { //Se ho dei riferimenti ad una UL devo leggere la QTA ancora disponibile sulla Ul - if (!UtilityString.isNullOrEmpty(mtbColr.getGestioneRif()) && + if (mtbColr != null && + !UtilityString.isNullOrEmpty(mtbColr.getGestioneRif()) && !UtilityString.isNullOrEmpty(mtbColr.getSerColloRif()) && !UtilityString.isNullOrEmpty(mtbColr.getDataColloRifS()) && mtbColr.getNumColloRif() != null) { @@ -1042,7 +1071,7 @@ public class SpedizioneViewModel { mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini); if (onComplete != null) onComplete.run(); - this.sendLUCreated(mtbColt); + this.sendLUOpened(mtbColt); }, this::sendError); } @@ -1068,6 +1097,8 @@ public class SpedizioneViewModel { pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null; if (mtbColrToDispatch != null) { + + mtbColr .setCodJcom(UtilityString.empty2null(mtbColrToDispatch.getCodJcom())) .setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo())) @@ -1075,16 +1106,20 @@ public class SpedizioneViewModel { .setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione())) .setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS())); - if (mCurrentMtbColt.getCodTcol() == null && - mCurrentMtbColt.getPesoKg() == null && - mCurrentMtbColt.getPesoNettoKg() == null) { - MtbColt sourceMtbColt = pickingObjectDTO.getTempPickData().getSourceMtbColt(); - - mCurrentMtbColt.setCodTcol(sourceMtbColt.getCodTcol()); - mCurrentMtbColt.setPesoKg(sourceMtbColt.getPesoKg()); - mCurrentMtbColt.setPesoNettoKg(sourceMtbColt.getPesoNettoKg()); + if(mtbColrToDispatch.getPesoNettoKg() != null) { + //Proporzione + BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol()); + mtbColr.setPesoNettoKg(pesoNettoKg); } + + if(mtbColrToDispatch.getPesoLordoKg() != null) { + //Proporzione + BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol()); + mtbColr.setPesoLordoKg(pesoLordoKg); + } + + } else if (mEnableGiacenza && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() > 0) { // Vecchia logica di aggancio UL (se non ho sparato una etichetta UL comunque ti aggangio la prima UL suggerita) // mtbColr @@ -1174,17 +1209,18 @@ public class SpedizioneViewModel { this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> { - PickingObjectDTO pickingObjectDTO = Stream.of(this.mPickingList.getValue()) - .filter(x -> Stream.of(x.getWithdrawMtbColr()).anyMatch(y -> y == mtbColrToUpdate)) - .single(); - - mtbColr.setNumCnf(numCnf) .setQtaCnf(qtaCnf) .setQtaCol(qtaTot); - pickingObjectDTO.getWithdrawMtbColr().remove(mtbColrToUpdate); - pickingObjectDTO.getWithdrawMtbColr().add(mtbColr); + Optional pickingObjectDTO = Stream.of(this.mPickingList.getValue()) + .filter(x -> Stream.of(x.getWithdrawMtbColr()).anyMatch(y -> y == mtbColrToUpdate)) + .findSingle(); + + if(pickingObjectDTO.isPresent()) { + pickingObjectDTO.get().getWithdrawMtbColr().remove(mtbColrToUpdate); + pickingObjectDTO.get().getWithdrawMtbColr().add(mtbColr); + } this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate); this.mCurrentMtbColt.getMtbColr().add(mtbColr); @@ -1343,6 +1379,15 @@ public class SpedizioneViewModel { }, onFailed); } + + public void recoverLU(MtbColt mtbColt) { + this.mCurrentMtbColt = mtbColt; + mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini); + + this.resetMatchedRows(); + this.sendLUOpened(this.mCurrentMtbColt); + } + private void postCloseOperations(List mtbColtList) { this.mColliRegistrati.addAll(mtbColtList); @@ -1411,6 +1456,10 @@ public class SpedizioneViewModel { return mPickingList; } + public ArrayList getCreatedMtbColts() { + return (ArrayList) this.mColliRegistrati; + } + public SpedizioneViewModel setListeners(Listeners listeners) { this.mListeners = listeners; return this; @@ -1421,7 +1470,7 @@ public class SpedizioneViewModel { void onLoadingEnded(); - void onLUCreated(MtbColt mtbColt); + void onLUOpened(MtbColt mtbColt); void onLUClosed(); @@ -1440,6 +1489,7 @@ public class SpedizioneViewModel { void onError(Exception ex); void onItemDispatched(PickingObjectDTO pickingObjectDTO, + MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/exceptions/InvalidLUException.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/exceptions/InvalidLUException.java new file mode 100644 index 00000000..298209ef --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione_new/exceptions/InvalidLUException.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.gest.spedizione_new.exceptions; + +public class InvalidLUException extends Exception { + public InvalidLUException() { + super("L'unità logistica scansionata non è valida"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java index bc7a6143..6da4fd35 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java @@ -64,6 +64,7 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie this.mViewModel.getObservableMtbColt().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable sender, int propertyId) { + initAdapter(); if(mViewModel.getObservableMtbColt().get() != null) { onMtbColrItemChanged(); diff --git a/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java index 85a36c50..69e5c353 100644 --- a/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java +++ b/honeywellscannerlibrary/src/main/java/it/integry/honeywellscannerlibrary/HoneywellBarcodeTypeMapper.java @@ -27,6 +27,8 @@ public class HoneywellBarcodeTypeMapper { return BarcodeType.UPCA; case "E": return BarcodeType.UPCE; + case "e": + return BarcodeType.INTERLEAVED_2OF5; default: Log.d("SCAN TYPE", inputType); return null;