Completati primi test di calcoli qta da evadere

This commit is contained in:
Giuseppe Scorrano 2020-03-30 11:49:13 +02:00
parent cbce52fd83
commit f619dece3b
12 changed files with 218 additions and 67 deletions

View File

@ -115,7 +115,7 @@ public class Converters {
view.addTextChangedListener(watcher);
}
BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : BigDecimal.ZERO;
BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : null;
if(!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue));

View File

@ -23,6 +23,7 @@ public class PermissionsHelper {
List<String> permissionsToAsk = new ArrayList<>();
permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissionsToAsk.add(Manifest.permission.CAMERA);
//permissionsToAsk.add(Manifest.permission.INTERNET);
//permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
@ -49,12 +50,9 @@ public class PermissionsHelper {
onPermissionsConfirmed.run();
} else {
boolean anyPermDeny = shouldShowRequestPermissionRationale( activity, permissions );
onPermissionsDenied.run(anyPermDeny);
}
return;
}

View File

@ -12,6 +12,7 @@ public class UtilityBigDecimal {
}
public static boolean equalsTo(BigDecimal input, BigDecimal toCompareWith) {
if(input == null && toCompareWith == null) return true;
if(input == null) return false;
if(toCompareWith == null) return false;
@ -32,4 +33,22 @@ public class UtilityBigDecimal {
return lowerThan(input1, input2) ? input1 : input2;
}
public static BigDecimal divide(BigDecimal input1, BigDecimal divisor) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return input1.divide(divisor, 3, BigDecimal.ROUND_HALF_EVEN);
}
public static BigDecimal divideToInteger(BigDecimal input1, BigDecimal divisor) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;
return new BigDecimal(input1.divide(divisor,3, BigDecimal.ROUND_HALF_EVEN).intValue());
}
public static BigDecimal multiply(BigDecimal input1, BigDecimal multiplier) {
return input1.multiply(multiplier);
}
}

View File

@ -20,6 +20,12 @@ public class UtilityDialog {
dialog.getDialog().getWindow().setLayout(width, LinearLayout.LayoutParams.WRAP_CONTENT);
}
public static void setTo95PercentWidth(Context context, DialogFragment dialog) {
int width = (int)(context.getResources().getDisplayMetrics().widthPixels*0.95);
dialog.getDialog().getWindow().setLayout(width, LinearLayout.LayoutParams.WRAP_CONTENT);
}
// public static void setTo90PercentHeight(Context context, Dialog dialog) {
// int height = (int)(context.getResources().getDisplayMetrics().heightPixels*0.90);
//

View File

@ -9,6 +9,7 @@ import java.io.StringWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -41,7 +42,7 @@ public class UtilityLogger {
}
public static void errorMe(Exception ex, String additionalText, Runnable onComplete, RunnableArgs<Exception> onFailed) {
FirebaseCrashlytics.getInstance().recordException(ex);
if(!BuildConfig.DEBUG) FirebaseCrashlytics.getInstance().recordException(ex);
// if ((!(ex instanceof SocketTimeoutException) && !(ex.getCause() instanceof SocketTimeoutException)) ||
// (!(ex instanceof SocketException) && !(ex.getCause() instanceof SocketException)) ||

View File

@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.spedizione_new;
import android.os.Handler;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
@ -113,18 +115,28 @@ public class SpedizioneViewModel {
.toList();
ArticoloRESTConsumer.getByCodMart(codMarts, listMtbAarts -> {
onComplete.run(Stream.of(sitArtOrdList)
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList)
.map(sitArtOrdDTO -> {
MtbAart mtbAart = null;
MtbAart mtbAart = Stream.of(listMtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart()))
.single();
for (MtbAart mtbAartItem : listMtbAarts) {
if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) {
mtbAart = mtbAartItem;
break;
}
}
return new PickingObjectDTO()
.setSitArtOrdDTO(sitArtOrdDTO)
.setMtbAart(mtbAart);
})
.toList());
.toList();
new Handler()
.postDelayed(() -> {
onComplete.run(pickingList);
}, 1);
// onComplete.run(pickingList);
}, this::sendError);
}
@ -624,7 +636,30 @@ public class SpedizioneViewModel {
if (UtilityBigDecimal.lowerThan(qtaColDaPrelevare, BigDecimal.ZERO))
qtaColDaPrelevare = BigDecimal.ZERO;
} //Oppure le info del barcode scansionato
} else if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
//Oppure le info del barcode scansionato
PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO();
MtbAart mtbAart = pickingObjectDTO.getMtbAart();
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);
}
}
this.sendOnItemDispatched(
pickingObjectDTO.getMtbAart(),

View File

@ -49,11 +49,17 @@ public class PickDataDTO {
manualPickDTO.setMtbPartitaMag(mtbPartitaMag);
}
if (ean128Model.Count != null && ean128Model.Count > 0) {
manualPickDTO.setNumCnf(new BigDecimal(ean128Model.Count));
if (ean128Model.Count != null && ean128Model.Count > 0 && (ean128Model.NetWeightKg == null || ean128Model.NetWeightKg == 0)) {
manualPickDTO.setQtaTot(new BigDecimal(ean128Model.Count));
}
if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0 && (ean128Model.Count == null || ean128Model.Count == 0)) {
manualPickDTO.setQtaTot(new BigDecimal(ean128Model.NetWeightKg));
manualPickDTO.setEanPeso(true);
}
if(ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0 && ean128Model.Count != null && ean128Model.Count > 0) {
manualPickDTO.setNumCnf(new BigDecimal(ean128Model.Count));
manualPickDTO.setQtaTot(new BigDecimal(ean128Model.NetWeightKg));
manualPickDTO.setEanPeso(true);
}

View File

@ -53,7 +53,7 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_camera_barcode_reader, container, false);
UtilityDialog.setTo90PercentWidth(mContext, this);
UtilityDialog.setTo95PercentWidth(mContext, this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().setCancelable(false);
@ -68,6 +68,11 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode
return mBindings.getRoot();
}
@Override
public void onStop() {
super.onStop();
this.mBindings.bcode.unbind();
}
private void initBarcodeView() {
List<BarcodeFormat> availableBarcodeFormats = new ArrayList<>();
@ -98,21 +103,28 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode
switch (result.getBarcodeFormat()) {
case CODE_128:
type = BarcodeType.CODE128;
break;
case CODE_39:
type = BarcodeType.CODE39;
break;
case EAN_13:
type = BarcodeType.EAN13;
break;
case EAN_8:
type = BarcodeType.EAN8;
break;
case UPC_A:
type = BarcodeType.UPCA;
break;
case UPC_E:
type = BarcodeType.UPCE;
break;
default:
Logger.e("Barcode not recognized", "Barcode type " + result.getBarcodeFormat().toString() + " was not mapped in DialogCameraBarcodeReader.java");
Logger.e("Barcode type " + result.getBarcodeFormat().toString() + " was not mapped in DialogCameraBarcodeReader.java");
type = null;
break;
}
barcodeScanDTO.setType(type);

View File

@ -9,19 +9,31 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.fragment.app.DialogFragment;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
public class DialogInputQuantityV2 extends DialogFragment {
public class DialogInputQuantityV2 extends DialogFragment implements DialogInputQuantityV2ViewModel.Listener {
private DialogInputQuantityV2ViewModel mViewModel;
private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO;
public ObservableField<BigDecimal> currentNumCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>();
private boolean mEnableDataCallback = true;
public static DialogInputQuantityV2 newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO) {
return new DialogInputQuantityV2(dialogInputQuantityV2DTO);
}
@ -56,7 +68,7 @@ public class DialogInputQuantityV2 extends DialogFragment {
.setCanOverflowOrderQuantity(mDialogInputQuantityV2DTO.isCanOverflowOrderQuantity())
.setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable());
bindings.setView(this);
bindings.setViewmodel(this.mViewModel);
MtbUntMis mtbUntMis = mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis() != null && mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().size() > 0 ? mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().get(0) : null;
@ -70,6 +82,40 @@ public class DialogInputQuantityV2 extends DialogFragment {
@Override
public void onStart() {
super.onStart();
this.init();
this.mViewModel.setListener(this);
this.mViewModel.init();
}
private void init() {
UtilityObservable.addPropertyChanged(this.currentNumCnf, (value) -> {
if(this.mEnableDataCallback) {
this.mViewModel.setNumCnf(value);
}
});
UtilityObservable.addPropertyChanged(this.currentQtaCnf, (value) -> {
if(this.mEnableDataCallback) {
this.mViewModel.setQtaCnf(value);
}
});
UtilityObservable.addPropertyChanged(this.currentQtaTot, (value) -> {
if(this.mEnableDataCallback) {
this.mViewModel.setQtaTot(value);
}
});
}
@Override
public void onDataChanged() {
this.mEnableDataCallback = false;
this.currentNumCnf.set(this.mViewModel.getNumCnf());
this.currentQtaCnf.set(this.mViewModel.getQtaCnf());
this.currentQtaTot.set(this.mViewModel.getQtaTot());
this.mEnableDataCallback = true;
}
}

View File

@ -24,32 +24,46 @@ public class DialogInputQuantityV2ViewModel {
public BigDecimal totalNumCnfAvailable;
public BigDecimal qtaCnfAvailable;
public ObservableField<BigDecimal> currentNumCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>();
private BigDecimal internalNumCnf;
private BigDecimal internalQtaCnf;
private BigDecimal internalQtaTot;
private boolean canOverflowOrderQuantity;
private Listener mListener;
public void init() {
//Quando ho un barcode peso devo calcolare numCnf dal peso medio
if (totalQtaToBeTaken != null) {
this.internalNumCnf = totalNumCnfToBeTaken;
this.internalQtaCnf = qtaCnfToBeTaken;
this.internalQtaTot = totalQtaToBeTaken;
this.currentNumCnf.set(totalNumCnfToBeTaken != null ? totalNumCnfToBeTaken : BigDecimal.ONE);
UtilityObservable.addPropertyChanged(this.currentNumCnf, this::onCurrentNumCnfChanged);
this.currentQtaCnf.set(qtaCnfToBeTaken != null ? qtaCnfToBeTaken : this.mtbAart.get().getQtaCnf());
UtilityObservable.addPropertyChanged(this.currentQtaCnf, this::onCurrentQtaCnfChanged);
this.currentQtaTot.set(totalQtaToBeTaken != null ? totalQtaToBeTaken : this.mtbAart.get().getQtaCnf());
UtilityObservable.addPropertyChanged(this.currentQtaTot, this::onCurrentQtaTotChanged);
} else if (UtilityBigDecimal.lowerThan(totalQtaAvailable, totalQtaOrd)) {
this.internalNumCnf = totalNumCnfAvailable;
this.internalQtaCnf = qtaCnfAvailable;
this.internalQtaTot = totalQtaAvailable;
} else {
this.internalNumCnf = totalNumCnfOrd;
this.internalQtaCnf = qtaCnfOrd;
this.internalQtaTot = totalQtaOrd;
}
this.mListener.onDataChanged();
}
public BigDecimal getNumCnf() {
return this.internalNumCnf;
}
public BigDecimal getQtaCnf() {
return this.internalQtaCnf;
}
public BigDecimal getQtaTot() {
return this.internalQtaTot;
}
public DialogInputQuantityV2ViewModel setMtbAart(MtbAart mtbAart) {
this.mtbAart.set(mtbAart);
@ -107,50 +121,59 @@ public class DialogInputQuantityV2ViewModel {
}
private void onCurrentNumCnfChanged(BigDecimal newValue) {
public void setNumCnf(BigDecimal newValue) {
this.internalNumCnf = newValue;
if (newValue == null) return;
if(UtilityBigDecimal.greaterThan(newValue, totalNumCnfAvailable)) newValue = totalNumCnfAvailable;
this.currentQtaTot.set(newValue.multiply(this.currentQtaCnf.get()));
if (UtilityBigDecimal.greaterThan(newValue, totalNumCnfAvailable))
newValue = totalNumCnfAvailable;
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf);
this.mListener.onDataChanged();
}
private void onCurrentQtaCnfChanged(BigDecimal newValue) {
public void setQtaCnf(BigDecimal newValue) {
this.internalQtaCnf = newValue;
String a = "";
this.mListener.onDataChanged();
}
private void onCurrentQtaTotChanged(BigDecimal newValue) {
public void setQtaTot(BigDecimal newValue) {
this.internalQtaTot = newValue;
if (newValue == null) return;
newValue = UtilityBigDecimal.getLowerBetween(newValue, totalNumCnfAvailable);
newValue = UtilityBigDecimal.getLowerBetween(newValue, totalQtaAvailable);
//Se è piu' grande della qta da prelevare e non posso aggiungere qta extra allora ricalcolo
if (UtilityBigDecimal.greaterThan(newValue, totalQtaOrd) && !canOverflowOrderQuantity) {
if (mtbAart.get().isFlagQtaCnfFissaBoolean()) {
//Ricalcolo num cnf
this.internalNumCnf = UtilityBigDecimal.divide(totalQtaOrd, internalQtaCnf);
} else {
//Ricalcolo qta cnf
this.internalQtaCnf = UtilityBigDecimal.divide(totalQtaOrd, internalNumCnf);
}
} else {
if (mtbAart.get().isFlagQtaCnfFissaBoolean()) {
//Ricalcolo num cnf
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
} else {
//Ricalcolo qta cnf
}
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
}
}
// private BigDecimal retrieveCorrectQtaCnf() {
// if(UtilityBigDecimal.greaterThan(totalNumCnfAvailable, BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(totalQtaAvailable, BigDecimal.ZERO)) {
//
// }
// }
this.mListener.onDataChanged();
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public interface Listener {
void onDataChanged();
}
}

View File

@ -16,6 +16,9 @@
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2ViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
@ -382,7 +385,7 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_num_cnf_text"
style="@style/TextInputEditText.OutlinePrimary"
app:binding="@{viewmodel.currentNumCnf}"
app:binding="@{view.currentNumCnf}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/num_pcks"
@ -406,7 +409,7 @@
android:layout_height="wrap_content"
android:hint="@string/qty_x_pck"
android:inputType="numberDecimal"
app:binding="@{viewmodel.currentQtaCnf}" />
app:binding="@{view.currentQtaCnf}" />
</com.google.android.material.textfield.TextInputLayout>
@ -421,7 +424,7 @@
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_tot_text"
style="@style/TextInputEditText.OutlinePrimary"
app:binding="@{viewmodel.currentQtaTot}"
app:binding="@{view.currentQtaTot}"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/tot_qty"

View File

@ -38,20 +38,22 @@ internal class BarcodeAnalyzer(
return
}
val data = ByteArray(byteBuffer.remaining()).also { byteBuffer.get(it) }
var data = ByteArray(byteBuffer.remaining()).also { byteBuffer.get(it) }
var width = image.width
var height = image.height
val rotatedData = ByteArray(data.size)
for (y in 0 until height) {
for (x in 0 until width) rotatedData[x * height + height - y - 1] = data[x + y * width]
}
val tmp = width
width = height
height = tmp
// val rotatedData = ByteArray(data.size)
// for (y in 0 until height) {
// for (x in 0 until width) rotatedData[x * height + height - y - 1] = data[x + y * width]
// }
//
// data = rotatedData
// val tmp = width
// width = height
// height = tmp
val source = PlanarYUVLuminanceSource(rotatedData, width, height, 0, 0, width, height, false).let {
val source = PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height, false).let {
if (inverted) it.invert() else it
}
val bitmap = BinaryBitmap(HybridBinarizer(source))