Compare commits

...

18 Commits

Author SHA1 Message Date
8cb488d81f Finish v1.40.12(429) 2024-04-10 13:30:07 +02:00
ed3f84d0ea -> v1.40.12 (429) 2024-04-10 13:29:53 +02:00
d9b02c4402 Fix import MagazzinoRESTConsumer 2024-04-10 13:28:49 +02:00
23522c9370 Finish v1.40.11(428) 2024-04-10 13:27:26 +02:00
f79b40c574 Finish v1.40.11(428) 2024-04-10 13:27:26 +02:00
835915b46a -> v1.40.11 (428) 2024-04-10 13:27:06 +02:00
e643f25aa3 Fix response retrievePartitaMagSyncronized 2024-04-10 13:26:12 +02:00
230a32139d Aggiunto retrievePartitaMagSyncronized in MagazzinoRESTConsumer 2024-04-10 12:21:29 +02:00
b0272cd9e0 Fix thread in validation DialogInputQuantityV2 2024-04-10 12:07:41 +02:00
fa9947f22b Finish v1.40.10(427) 2024-04-09 10:06:58 +02:00
5d3bb333e1 Finish v1.40.10(427) 2024-04-09 10:06:58 +02:00
9f7085dfed -> v1.40.10 (427) 2024-04-09 10:06:32 +02:00
95f765756c Fix vari 2024-04-09 10:04:12 +02:00
a846ec00d7 Finish v1.40.09(426) 2024-04-04 12:26:54 +02:00
6edc1917e1 Finish v1.40.09(426) 2024-04-04 12:26:54 +02:00
1b864253b5 -> v1.40.09 (426) 2024-04-04 12:26:38 +02:00
f212987547 Aggiunto in UtilityString determineDateFormat 2024-04-04 12:25:25 +02:00
76f9c7030b Finish v1.40.08(425) 2024-04-04 11:54:19 +02:00
13 changed files with 229 additions and 117 deletions

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 425
def appVersionName = '1.40.08'
def appVersionCode = 429
def appVersionName = '1.40.12'
signingConfigs {
release {

View File

@@ -90,7 +90,15 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void retrievePartitaMag(String partitaMag, String codMart, RunnableArgs<MtbPartitaMag> onComplete, RunnableArgs<Exception> onFailed){
public MtbPartitaMag retrievePartitaMagSyncronized(String partitaMag, String codMart, RunnableArgs<Exception> onFailed) throws Exception {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
Response<ServiceRESTResponse<MtbPartitaMag>> response = service.retrievePartitaMag(codMart, partitaMag)
.execute();
return analyzeAnswer(response, "retrievePartitaMag");
}
public void retrievePartitaMag(String partitaMag, String codMart, RunnableArgs<MtbPartitaMag> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.retrievePartitaMag(codMart, partitaMag)
.enqueue(new Callback<>() {

View File

@@ -5,6 +5,8 @@ import android.text.Spanned;
import androidx.annotation.StringRes;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -13,6 +15,98 @@ import java.util.regex.Pattern;
*/
public class UtilityString {
private static final Map<String, String> DATE_FORMAT_REGEXPS = new HashMap<String, String>() {{
//-----------------------------------------------------------------------------------------
//giorno-mese-giorno
put("^\\d{1,2}/\\d{1,2}/\\d{4}$", "dd/MM/yyyy");
put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}$", "dd.MM.yyyy");
put("^\\d{1,2}-\\d{1,2}-\\d{4}$", "dd-MM-yyyy");
//anno-mese-giorno
put("^\\d{4}/\\d{1,2}/\\d{1,2}$", "yyyy/MM/dd");
put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}$", "yyyy.MM.dd");
put("^\\d{4}-\\d{1,2}-\\d{1,2}$", "yyyy-MM-dd");
//-----------------------------------------------------------------------------------------
//senza spazi
put("^\\d{8}$", "yyyyMMdd");
put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}$", "dd MMM yyyy");
put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}$", "dd MMMM yyyy");
put("^\\d{12}$", "yyyyMMddHHmm");
put("^\\d{8}\\s\\d{4}$", "yyyyMMdd HHmm");
put("^\\d{14}$", "yyyyMMddHHmmss");
put("^\\d{8}\\s\\d{6}$", "yyyyMMdd HHmmss");
//-----------------------------------------------------------------------------------------
//giorno-mese-anno hhmm
put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd/MM/yyyy HH.mm");
put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}:\\d{2}$", "dd/MM/yyyy HH:mm");
put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd.MM.yyyy HH.mm");
put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}:\\d{2}$", "dd.MM.yyyy HH:mm");
put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}\\.\\d{2}$", "dd-MM-yyyy HH.mm");
put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}:\\d{2}$", "dd-MM-yyyy HH:mm");
//anno-mese-giorno hhmm
put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy/MM/dd HH.mm");
put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy/MM/dd HH:mm");
put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy.MM.dd HH.mm");
put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy.MM.dd HH:mm");
put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}\\.\\d{2}$", "yyyy-MM-dd HH.mm");
put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}$", "yyyy-MM-dd HH:mm");
//-----------------------------------------------------------------------------------------
//giorno-mese-anno hhmmss
put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd/MM/yyyy HH.mm.ss");
put("^\\d{1,2}/\\d{1,2}/\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd/MM/yyyy HH:mm:ss");
put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd.MM.yyyy HH.mm.ss");
put("^\\d{1,2}\\.\\d{1,2}\\.\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd.MM.yyyy HH:mm:ss");
put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "dd-MM-yyyy HH.mm.ss");
put("^\\d{1,2}-\\d{1,2}-\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd-MM-yyyy HH:mm:ss");
//anno-mese-giorno hhmmss
put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy/MM/dd HH.mm.ss");
put("^\\d{4}/\\d{1,2}/\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy/MM/dd HH:mm:ss");
put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy.MM.dd HH.mm.ss");
put("^\\d{4}\\.\\d{1,2}\\.\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy.MM.dd HH:mm:ss");
put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}\\.\\d{2}\\.\\d{2}$", "yyyy-MM-dd HH.mm.ss");
put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}$", "yyyy-MM-dd HH:mm:ss");
//anno-mese-giorno hhmmssS
put("^\\d{4}-\\d{1,2}-\\d{1,2}\\s\\d{1,2}:\\d{2}:\\d{2}.\\d{1,3}$", "yyyy-MM-dd HH:mm:ss.SSS");
//-----------------------------------------------------------------------------------------
//altri formati
put("^\\d{1,2}\\s[a-z]{3}\\s\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd MMM yyyy HH:mm:ss");
put("^\\d{1,2}\\s[a-z]{4,}\\s\\d{4}\\s\\d{1,2}:\\d{2}:\\d{2}$", "dd MMMM yyyy HH:mm:ss");
put("^\\d{4}-\\d{1,2}-\\d{1,2}[T]\\d{1,2}:\\d{2}:\\d{2}$", "yyyy-MM-ddTHH:mm:ss");
put("^\\d{4}-\\d{1,2}-\\d{1,2}t\\d{1,2}:\\d{2}:\\d{2}.\\d{1,3}z$", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
put("^(\\d{4})-(\\d{2})-(\\d{2})t(\\d{2}):(\\d{2}):(\\d{2})((\\+|-)(\\d{2}):(\\d{2}))$", "yyyy-MM-dd'T'HH:mm:ss");
}};
public static String determineDateFormat(String dateString) {
for (String regexp : DATE_FORMAT_REGEXPS.keySet()) {
if (dateString.toLowerCase().matches(regexp)) {
return DATE_FORMAT_REGEXPS.get(regexp);
}
}
return null; // Unknown format.
}
public static boolean isNullOrEmpty(String stringToCheck){
return stringToCheck == null || stringToCheck.trim().isEmpty();

View File

@@ -136,6 +136,14 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
return null;
});
itemType.areContentsTheSame((oldObject, newObject) ->
oldObject.getCodMart().equalsIgnoreCase(newObject.getCodMart()) &&
oldObject.getNumOrd().equals(newObject.getNumOrd()) &&
oldObject.getDataOrd().equals(newObject.getDataOrd())
);
itemType.areItemSame((oldObject, newObject) -> oldObject == newObject);
new LiveAdapter(mItemsInventario)
.map(ArtsInGiacenzaDTO.class, itemType)
.into(this.mBindings.inventarioList);
@@ -199,10 +207,10 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
.setOnFilterApplied(mFilterViewModel::setPositionFilter)
.setPreselected(
Stream.of(Objects.requireNonNull(mViewModel.getItemsInventario().getValue()))
.filter(mFilterViewModel.getCurrentPositionPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentPositionPredicate().get()))
.map(ArtsInGiacenzaDTO::getPosizione)
.toList()
.filter(mFilterViewModel.getCurrentPositionPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentPositionPredicate().get()))
.map(ArtsInGiacenzaDTO::getPosizione)
.toList()
);
}
@@ -213,6 +221,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
public void onInfoClick(ArtsInGiacenzaDTO item) {
try {
BarcodeManager.disable();
DialogInfoGiacenzaView.newInstance(item).show(getChildFragmentManager(), DialogInfoGiacenzaView.class.getName());
} catch (Exception e) {
UtilityExceptions.defaultException(this.getContext(), e);

View File

@@ -179,7 +179,24 @@ public class ProdRiposizionamentoDaProdViewModel {
Objects.equals(x.getNumOrd(), dtoList.get(0).getNumOrd()) &&
Objects.equals(x.getDataOrd(), dtoList.get(0).getDataOrd())
)
.findFirstOrElse(null);
.findFirstOrElse(new StatoArtInventarioDTO());
MvwSitArtUdcDetInventario mvwInventario = mvwSitArtUdcDetInventario.get();
if (mvwInventario.getCodMart().equalsIgnoreCase(dtoList.get(0).getCodMart()) &&
Objects.equals(mvwInventario.getNumOrd(), dtoList.get(0).getNumOrd()) &&
Objects.equals(mvwInventario.getDataOrd(), dtoList.get(0).getDataOrd())) {
BigDecimal colliMag = statoArticolo.getColliMag();
Integer pedMag = statoArticolo.getPedMag();
BigDecimal qtaMag = statoArticolo.getQtaMag();
BigDecimal numCnf = mvwInventario.getNumCnf();
BigDecimal qtaCol = mvwInventario.getQtaCol();
statoArticolo.setColliMag(colliMag.add(numCnf));
statoArticolo.setQtaMag(qtaMag.add(qtaCol));
statoArticolo.setPedMag(pedMag + 1);
}
return new ArtsInGiacenzaDTO()
.setCodMart(dtoList.get(0).getCodMart())

View File

@@ -10,13 +10,9 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
@@ -24,7 +20,6 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaBinding;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaSituazioneArticoloBinding;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
@@ -34,8 +29,7 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
DialogInfoGiacenzaViewModel mViewModel;
private DialogInfoGiacenzaBinding mBindings;
private Context mContext;
private ArtsInGiacenzaDTO item;
private final ArtsInGiacenzaDTO item;
public static DialogInfoGiacenzaView newInstance(ArtsInGiacenzaDTO item) {
return new DialogInfoGiacenzaView(item);
@@ -48,9 +42,9 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
Context mContext = requireContext();
mBindings = DialogInfoGiacenzaBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings = DialogInfoGiacenzaBinding.inflate(LayoutInflater.from(mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
@@ -60,7 +54,7 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
var alertDialog = new MaterialAlertDialogBuilder(mContext)
.setView(mBindings.getRoot())
.setNeutralButton(R.string.action_close, null)
.setCancelable(isCancelable())
@@ -86,17 +80,8 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
if (availableItems == null)
return;
var listItem = Stream.of(availableItems)
.flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO())
.map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
)
.toList();
List<StatoArtInventarioDTO> statoArticolo = null;
StatoArtInventarioDTO statoArtInventario = availableItems.getStatoArtInventario();
if (statoArtInventario != null) {
statoArticolo = Stream.of(statoArtInventario).toList();
if (statoArtInventario.colliArrivoIsLessThenZero() &&
statoArtInventario.colliMagIsLessThenZero()) {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
@@ -105,11 +90,11 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
}
new LiveAdapter(listItem, BR.item)
new LiveAdapter(this.item.getSituazioneArticoloAvailableListItem(), BR.item)
.map(DialogInfoSituazioneArticoloAvailableListItem.class, R.layout.dialog_info_giacenza_list_item)
.into(this.mBindings.availableList);
new LiveAdapter(statoArticolo, BR.item)
new LiveAdapter(this.item.getStatoInventario(), BR.item)
.map(StatoArtInventarioDTO.class, R.layout.dialog_info_giacenza_situazione_articolo)
.into(this.mBindings.situazioneArticolo);
}

View File

@@ -1,10 +1,13 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
public class ArtsInGiacenzaDTO {
@@ -113,4 +116,16 @@ public class ArtsInGiacenzaDTO {
this.dataOrd = dataOrd;
return this;
}
public List<DialogInfoSituazioneArticoloAvailableListItem> getSituazioneArticoloAvailableListItem() {
return Stream.of(this)
.flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO())
.map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
)
.toList();
}
public List<StatoArtInventarioDTO> getStatoInventario(){
return Stream.of(this.statoArtInventario).toList();
}
}

View File

@@ -403,32 +403,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
String codMart = dialogInputQuantityV2DTO.getMtbAart().getCodMart();
String flagStato = dialogInputQuantityV2DTO.getMtbAart().getFlagStato();
if (flagStato.equalsIgnoreCase("I")) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml(String.format(UtilityResources.getString(R.string.item_not_enabled), codMart))),
null,
() -> {
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
},
this::onLoadingEnded)
.show(getActivity().getSupportFragmentManager(), "tag");
} else {
this.onLoadingEnded();
checkIfItemIsActive(flagStato, codMart, () -> {
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
@@ -440,13 +415,23 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
}, () -> {});
}
private void checkIfItemIsActive(String flagStato, String codMart, Runnable onContinue, Runnable onNegativeClick){
if (flagStato.equalsIgnoreCase("I")) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml(String.format(UtilityResources.getString(R.string.item_not_enabled), codMart))),
null,
onContinue,
onNegativeClick)
.show(getActivity().getSupportFragmentManager(), "tag");
} else {
onContinue.run();
}
;
}
@Override

View File

@@ -256,14 +256,19 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
};
public void save() {
this.onLoadingStarted();
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
}else {
requireActivity().runOnUiThread(() -> {
this.onLoadingEnded();
}
if (validated) {
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
}
});
});
}
@@ -271,9 +276,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
dismiss();this.onLoadingEnded();
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true);
}else {
} else {
this.onLoadingEnded();
}
});
@@ -527,13 +532,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mEnableDataCallback = true;
}
@Override
public void onError(Exception ex) {
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onWarning(String text, RunnableArgs<Boolean> result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),

View File

@@ -99,7 +99,6 @@ public class DialogInputQuantityV2ViewModel {
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
private StatoPartitaMag statoArt;
private MtbPartitaMag mtbPartitaMag;
@Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
@@ -485,11 +484,10 @@ public class DialogInputQuantityV2ViewModel {
}
public void validate(RunnableArgs<Boolean> onValidated) {
this.sendOnLoadingStarted();
new Thread(() -> {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidQtaCnfQuantityException());
this.sendError(new InvalidQtaCnfQuantityException());
onValidated.run(false);
return;
}
@@ -498,33 +496,33 @@ public class DialogInputQuantityV2ViewModel {
if (suggestPartitaMagRunnable != null) {
internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) {
this.mListener.onError(new InvalidBatchLotException());
this.sendError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
} else {
this.mListener.onError(new InvalidBatchLotException());
this.sendError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
}
if (this.statoArt == StatoPartitaMag.DISATTIVO) {
this.mListener.onError(new InactiveBatchLotException(internalPartitaMag));
this.sendError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
this.sendError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
this.sendError(new InvalidExpireDateException());
onValidated.run(false);
return;
}
@@ -532,7 +530,7 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
this.sendError(new OverflowQtaTotOrderedQuantityException());
onValidated.run(false);
return;
}
@@ -540,14 +538,14 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
this.sendError(new OverflowNumCnfOrderedQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
this.sendError(new OverflowQtaTotAvailableQuantityException());
onValidated.run(false);
return;
}
@@ -555,7 +553,7 @@ public class DialogInputQuantityV2ViewModel {
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
this.sendError(new OverflowNumCnfAvailableQuantityException());
onValidated.run(false);
return;
}
@@ -565,13 +563,13 @@ public class DialogInputQuantityV2ViewModel {
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException());
this.sendError(new InvalidQuantityException());
onValidated.run(false);
return;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException());
this.sendError(new InvalidNotesException());
onValidated.run(false);
return;
}
@@ -580,10 +578,17 @@ public class DialogInputQuantityV2ViewModel {
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) {
asyncMagazzinoRESTConsumer(internalPartitaMag, this.getMtbAart().getCodMart());
MtbPartitaMag mtbPartitaMag = null;
try {
mtbPartitaMag = retrievePartitaMag(internalPartitaMag, this.getMtbAart().getCodMart());
} catch (Exception e) {
this.sendError(e);
onValidated.run(false);
return;
}
if (mtbPartitaMag == null) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
if (!result) {
onValidated.run(false);
return;
@@ -594,7 +599,7 @@ public class DialogInputQuantityV2ViewModel {
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
@@ -604,19 +609,18 @@ public class DialogInputQuantityV2ViewModel {
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
}
}
this.sendOnLoadingEnded();
onValidated.run(true);
}).start();
}
private boolean runAsyncWarningDialog(String text) {
private boolean runWarningDialogSyncronized(String text) {
try {
final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object());
@@ -634,26 +638,9 @@ public class DialogInputQuantityV2ViewModel {
}
}
private void asyncMagazzinoRESTConsumer(String partitaMag, String codMart) {
try {
final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object());
mMagazzinoRESTConsumer.retrievePartitaMag(
partitaMag,
codMart,
returnPartitaMag -> {
mtbPartitaMag = returnPartitaMag;
ft.run();
},
e -> {
this.sendError(e);
ft.run();
});
private MtbPartitaMag retrievePartitaMag(String partitaMag, String codMart) throws Exception {
return mMagazzinoRESTConsumer.retrievePartitaMagSyncronized(partitaMag, codMart, this::sendError);
ft.get();
} catch (Exception e) {
this.sendError(e);
}
}
public DialogInputQuantityV2ResultDTO getResult() {

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.view.dialogs.scan_or_create_lu;
import com.annimon.stream.Stream;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.exception.AlreadyAttachedDocumentToLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
@@ -114,7 +115,20 @@ public class DialogScanOrCreateLUViewModel {
if (mtbColt == null) {
if (mEnableCreation) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, GestioneEnum.LAVORAZIONE, createdMtbColt -> {
Integer customNumCollo = null;
try {
customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue());
} catch (Exception ex) {
this.sendError(ex);
}
var createUdcRequest = new CreateUDCRequestDTO()
.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep())
.setNumCollo(customNumCollo)
.setSerCollo(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE);
this.mColliLavorazioneRESTConsumer.createUDC(createUdcRequest, createdMtbColt -> {
onComplete.run();
this.sendOnLUOpened(createdMtbColt, true);
}, this::sendError);

View File

@@ -354,8 +354,8 @@
<string name="delivered_on">Consegnato il %s</string>
<string name="title_dynamic_frudis">Personalizzazioni Frudis</string>
<string name="batch_lot_not_enabled"><![CDATA[Il lotto: <b>%s</b> non è attivo.]]></string>
<string name="item_not_enabled"><![CDATA[L\'articolo: <b>%s</b> non è attivo.]]></string>
<string name="batch_lot_not_enabled"><![CDATA[Il lotto: <b>%s</b> non è attivo. Continuare?]]></string>
<string name="item_not_enabled"><![CDATA[L\'articolo: <b>%s</b> non è attivo. Continuare?]]></string>
<string name="punto_vendita">Punto Vendita</string>
<string name="title_dynamic_saporiveri_pv">SaporiVeri PV</string>
<string name="generate_orders">Genera ordini di acquisto</string>

View File

@@ -359,8 +359,8 @@
<string name="delivered_on">Delivered on %s</string>
<string name="title_dynamic_frudis">Frudis customizations</string>
<string name="batch_lot_not_enabled"><![CDATA[Batch lot: <b>%s</b> is inactive.]]></string>
<string name="item_not_enabled"><![CDATA[Item: <b>%s</b> is inactive.]]></string>
<string name="batch_lot_not_enabled"><![CDATA[Batch lot: <b>%s</b> is inactive. To continue?]]></string>
<string name="item_not_enabled"><![CDATA[Item: <b>%s</b> is inactive. To continue?]]></string>
<string name="other">Other</string>
<string name="home">Home</string>
<string name="logout">Logout</string>