Finish V1_0_32(35)

This commit is contained in:
Giuseppe Scorrano 2019-02-07 18:27:10 +01:00
commit 57768a8f71
22 changed files with 2310 additions and 60 deletions

Binary file not shown.

View File

@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 34
def appVersionName = '1.0.31'
def appVersionCode = 35
def appVersionName = '1.0.32'
signingConfigs {
release {

View File

@ -12,9 +12,9 @@
android:name=".MainApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@mipmap/ic_launcher"
android:icon="@drawable/integry_round_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:roundIcon="@drawable/integry_round_icon"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">

View File

@ -121,8 +121,7 @@ public class MainActivity extends AppCompatActivity
@Override
public boolean onNavigationItemSelected(MenuItem item) {
mBinding.appBarMain.waterfallToolbar.resetElevation();
mBinding.appBarMain.waterfallToolbar.setRecyclerView(null);
mBinding.appBarMain.waterfallToolbar.resetAll();
// Handle navigation view item clicks here.
Fragment fragment = null;

View File

@ -5,6 +5,7 @@ import android.util.Base64;
import java.io.IOException;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityString;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.Request;
@ -19,7 +20,7 @@ public class HttpInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
final String PROFILE_DB = SettingsManager.i().userSession.profileDB;
final String PROFILE_DB = SettingsManager.i().userSession == null ? null : SettingsManager.i().userSession.profileDB;
final String USERNAME = SettingsManager.i().user.username;
final String PASSWORD = SettingsManager.i().user.password;

View File

@ -1,14 +1,21 @@
package it.integry.integrywmsnative.core.di;
import java.math.BigDecimal;
import java.math.RoundingMode;
import androidx.databinding.BaseObservable;
public class BindableFloat extends BaseObservable {
Float value;
private Float value;
public Float get() {
return get(true);
}
public BigDecimal getBigDecimal() {
return new BigDecimal(get()).setScale(3, RoundingMode.CEILING);
}
public Float get(boolean defaultIfNull) {
if(value == null){

View File

@ -4,6 +4,7 @@ import android.content.Context;
import com.google.firebase.perf.metrics.Trace;
import java.net.SocketTimeoutException;
import java.util.List;
import it.integry.integrywmsnative.R;
@ -84,7 +85,7 @@ public class SettingsManager {
RunnableArgs<Exception> tmpOnFailed = ex -> {
perfTrace.putAttribute("failed", "true");
onFailed.run(ex);
if(!(ex instanceof SocketTimeoutException)) onFailed.run(ex);
};
loadDatiAzienda(() ->

View File

@ -118,8 +118,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
private void init() {
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
getText(R.string.loading) + " ...", true);
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true);
helper = new AccettazioneHelper(getActivity());

View File

@ -765,7 +765,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
.setCodMart(item.mtbAart.getCodMart())
.setPartitaMag(quantityDTO.batchLot.get())
.setDataScadPartita(quantityDTO.expireDate)
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setDescrizione(item.descrizioneEstesa)
.setNumOrd(item.numOrd)
.setDataOrd(item.getDataOrd())

View File

@ -12,6 +12,7 @@ import android.view.ViewGroup;
import androidx.appcompat.app.ActionBar;
import androidx.databinding.DataBindingUtil;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
@ -83,6 +84,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment {
@Override
public void onDestroyView() {
mViewModel.closeLU();
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onDestroyView();
}

View File

@ -395,9 +395,9 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked<MtbColr> {
DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> {
mtbColr
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get()))
.setNumCnf(new BigDecimal(quantityDTO.numCnf.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDatetimeRow(new Date());
onComplete.run(mtbColr);

View File

@ -316,7 +316,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked<MtbColr>
.setCodMart(mtbAart.getCodMart())
.setPartitaMag(quantityDTO.batchLot.get())
.setDataScadPartita(quantityDTO.expireDate)
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setDescrizione(mtbAart.getDescrizioneEstesa());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
@ -499,7 +499,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked<MtbColr>
mtbColrToEditClone
.setRiga(null)
.setDatetimeRow(new Date())
.setQtaCol(new BigDecimal(value.qtaTot.get()).subtract(mtbColrToEditClone.getQtaCol()))
.setQtaCol(value.qtaTot.getBigDecimal().subtract(mtbColrToEditClone.getQtaCol()))
.setOperation(CommonModelConsts.OPERATION.INSERT);
MtbColt mtbColtClone = (MtbColt) mtbColt.get().clone();
@ -514,7 +514,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked<MtbColr>
mtbColt.get().getMtbColr().remove(index);
mtbColrToEditClone
.setQtaCol(new BigDecimal(value.qtaTot.get()))
.setQtaCol(value.qtaTot.getBigDecimal())
.setOperation(CommonModelConsts.OPERATION.NO_OP);
mtbColt.get().getMtbColr().add(index, mtbColrToEditClone);

View File

@ -24,6 +24,7 @@ import it.integry.integrywmsnative.core.REST.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.PosizioneRESTonsumer;
import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
@ -34,11 +35,13 @@ import it.integry.integrywmsnative.core.model.FiltroOrdineDTO;
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.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
@ -147,8 +150,11 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.toList();
if(foundGestioni != null && foundGestioni.size() > 1){
UtilityExceptions.defaultException(mActivity, new Exception("Impossibile caricare ordini di diverse gestioni"));
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString("Impossibile caricare ordini di diverse gestioni"), null, () -> {
mActivity.finish();
}).show();
// UtilityExceptions.defaultException(mActivity, new Exception("Impossibile caricare ordini di diverse gestioni"));
// mActivity.finish();
return;
} else if(foundGestioni != null && foundGestioni.size() == 1){
defaultGestioneOfUL = foundGestioni.get(0);
@ -334,10 +340,18 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
if(UtilityBarcode.isEtichettaAnonima(data)){
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(data.getStringValue(), progressDialog);
} else if(UtilityBarcode.isEtichetta128(data)) {
} else if(UtilityBarcode.isEtichetta128(data)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(data, progressDialog);
} else if(UtilityBarcode.isEtichettaPosizione(data)) {
//Cerco l'UL presente all'interno della posizione
this.executeEtichettaPosizione(data.getStringValue(), progressDialog);
} else {
this.loadArticolo(data.getStringValue(), null, progressDialog);
}
@ -377,6 +391,65 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
private void executeEtichettaPosizione(String posizione, ProgressDialog progressDialog) {
MtbDepoPosizione foundPosizione = UtilityPosizione.getFromCache(posizione);
if(foundPosizione != null) {
if(foundPosizione.isFlagMonoCollo()) {
PosizioneRESTonsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> {
if(mtbColtList == null || mtbColtList.size() == 0 || mtbColtList.size() > 1) {
progressDialog.dismiss();
//Nessuna UL trovata oppure più UL nella stessa posizione
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString("Nessuna UL trovata"), null, BarcodeManager::enable).show();
} else {
ColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
searchArtFromUL(mtbColt, progressDialog);
} else {
progressDialog.dismiss();
showNoArtFoundDialog();
}
BarcodeManager.enable();
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
}
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progressDialog);
BarcodeManager.enable();
});
} else {
progressDialog.dismiss();
//La posizione non è Mono-UL
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString("La posizione scelta non è Mono-UL"), null, BarcodeManager::enable).show();
}
} else {
progressDialog.dismiss();
//Nessuna posizione trovata con questo barcode
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString("Nessuna posizione trovata con il barcode scansionato"), null, BarcodeManager::enable).show();
}
}
@ -418,7 +491,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
} else {
if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
barcodeProd = barcodeProd.substring(1, barcodeProd.length());
barcodeProd = barcodeProd.substring(1);
}
this.loadArticolo(barcodeProd, PickingObjectDTO.PickData.fromEan128(ean128Model), progressDialog);
@ -998,9 +1071,9 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
final MtbColr mtbColr = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get()))
.setNumCnf(new BigDecimal(quantityDTO.numCnf.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDescrizione(item.getDescrizioneEstesa())
.setDatetimeRow(new Date());
@ -1023,7 +1096,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
}
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone();

View File

@ -327,9 +327,9 @@ public class VersamentoMerceViewModel {
DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> {
mtbColr
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get()))
.setNumCnf(new BigDecimal(quantityDTO.numCnf.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDatetimeRow(new Date());
onComplete.run(mtbColr);

View File

@ -176,7 +176,7 @@ public class ArticoliInColloBottomSheetViewModel {
final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting),
mContext.getText(R.string.loading) + " ...", true);
itemToEdit.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()));
itemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal());
ColliMagazzinoRESTConsumer.updateRiga(itemToEdit, () ->{
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);

View File

@ -25,6 +25,7 @@ import android.widget.EditText;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
@ -328,7 +329,9 @@ public class DialogInputQuantity {
}
if(quantityDTO.numCnf.get(false) == null) {
quantityDTO.numCnf.set(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get());
float numCnf = (float) Math.ceil(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get());
if(numCnf < 1) numCnf = 1;
quantityDTO.numCnf.set(numCnf);
}
quantityDTO.canPartitaMagBeChanged.set(dto.getCanPartitaMagBeChanged());
@ -457,7 +460,7 @@ public class DialogInputQuantity {
if(quantityDTO.numCnfNotificationEnabled) {
quantityDTO.blockedNumDiCnf.set(!(quantityDTO.numCnf.get(true) == 0 || quantityDTO.numCnf.get().toString() == ""));
quantityDTO.blockedNumDiCnf.set(!(quantityDTO.numCnf.get(true) == 0 || quantityDTO.numCnf.get().toString().equals("")));
toggleTextInputLayoutError(txlInputNumDiCnf, quantityDTO.blockedNumDiCnf.get());
@ -492,7 +495,7 @@ public class DialogInputQuantity {
if(quantityDTO.qtaCnfNotificationEnabled) {
quantityDTO.blockedQtaPerCnf.set(!(quantityDTO.qtaCnf.get(true) == 0 || quantityDTO.qtaCnf.get().toString() == ""));
quantityDTO.blockedQtaPerCnf.set(!(quantityDTO.qtaCnf.get(true) == 0 || quantityDTO.qtaCnf.get().toString().equals("")));
toggleTextInputLayoutError(txlInputQtaPerCnf, quantityDTO.blockedQtaPerCnf.get());
@ -527,7 +530,7 @@ public class DialogInputQuantity {
if (quantityDTO.qtaTotNotificationEnabled) {
quantityDTO.blockedQtaTot.set(!(quantityDTO.qtaTot.get(true) == 0 || quantityDTO.qtaTot.get().toString() == ""));
quantityDTO.blockedQtaTot.set(!(quantityDTO.qtaTot.get(true) == 0 || quantityDTO.qtaTot.get().toString().equals("")));
toggleTextInputLayoutError(txlInputQtaTot, quantityDTO.blockedQtaTot.get());

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

View File

@ -30,16 +30,18 @@
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:src="@drawable/integry_round_icon"
android:adjustViewBounds="true"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:layout_gravity="center"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:text="@string/integry"
android:layout_marginStart="8dp"
android:letterSpacing="-0.05"
style="@style/AppTheme.NewMaterial.Text.ToolbarTitle"
android:layout_gravity="center"/>
@ -56,7 +58,6 @@
android:visibility="gone"
style="@style/AppTheme.NewMaterial.Text.ToolbarTitle"/>
<androidx.appcompat.widget.SearchView
android:id="@+id/main_search"
android:layout_width="wrap_content"

View File

@ -300,7 +300,7 @@
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:inputType="number"
android:hint="@string/num_pcks"
android:gravity="end"
app:binding="@{quantityViewModel.numCnf}" >

View File

@ -1,5 +1,6 @@
<resources>
<string name="app_name" translatable="false">Integry WMS</string>
<string name="integry" translatable="false">Integry</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>

2131
images/RoundLogoWithText.ai Normal file

File diff suppressed because one or more lines are too long

View File

@ -8,6 +8,7 @@ import androidx.annotation.RequiresApi
import androidx.core.widget.NestedScrollView
import android.util.AttributeSet
import android.view.View
import android.view.ViewTreeObserver
import android.widget.ScrollView
import androidx.recyclerview.widget.RecyclerView
@ -33,6 +34,15 @@ open class WaterfallToolbar : androidx.cardview.widget.CardView {
addRecyclerViewScrollListener()
}
var recyclerViewScrollListener : RecyclerView.OnScrollListener = object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
// real position must always get updated
realPosition.value = realPosition.value + dy
mutualScrollListenerAction()
}
}
/**
* The scroll view whose scroll is going to be listened
*/
@ -42,13 +52,25 @@ open class WaterfallToolbar : androidx.cardview.widget.CardView {
addScrollViewScrollListener()
}
var scrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener {
// real position must always get updated
realPosition.value = scrollView!!.scrollY
mutualScrollListenerAction()
}
/**
* The scroll view whose scroll is going to be listened
*/
var nestedScrollView: NestedScrollView? = null
set(value) {
field = value
addNestedScrollViewScrollListener()
if (value != null) addNestedScrollViewScrollListener()
}
var nestedScrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener {
// real position must always get updated
realPosition.value = nestedScrollView!!.scrollY
mutualScrollListenerAction()
}
/**
@ -144,11 +166,24 @@ open class WaterfallToolbar : androidx.cardview.widget.CardView {
init(context, attrs)
}
public fun resetElevation() {
fun resetElevation() {
realPosition = Px(0)
cardElevation = 0f
}
fun resetAll() {
resetElevation()
removeNestedScrollViewScrollListener()
nestedScrollView = null
removeRecyclerViewScrollListener()
recyclerView = null
removeScrollViewScrollListener()
scrollView = null
}
private fun init(context: Context?, attrs: AttributeSet?) {
// leave card corners square
radius = 0f
@ -183,29 +218,27 @@ open class WaterfallToolbar : androidx.cardview.widget.CardView {
}
private fun addRecyclerViewScrollListener() {
recyclerView?.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
// real position must always get updated
realPosition.value = realPosition.value + dy
mutualScrollListenerAction()
recyclerView?.addOnScrollListener(recyclerViewScrollListener)
}
})
private fun removeRecyclerViewScrollListener() {
recyclerView?.removeOnScrollListener(recyclerViewScrollListener)
}
private fun addScrollViewScrollListener() {
scrollView?.viewTreeObserver?.addOnScrollChangedListener {
// real position must always get updated
realPosition.value = scrollView!!.scrollY
mutualScrollListenerAction()
scrollView?.viewTreeObserver?.addOnScrollChangedListener(scrollViewScrollListener)
}
private fun removeScrollViewScrollListener() {
scrollView?.viewTreeObserver?.removeOnScrollChangedListener(scrollViewScrollListener)
}
private fun addNestedScrollViewScrollListener() {
nestedScrollView?.viewTreeObserver?.addOnScrollChangedListener {
realPosition.value = nestedScrollView!!.scrollY
mutualScrollListenerAction()
nestedScrollView?.viewTreeObserver?.addOnScrollChangedListener(nestedScrollViewScrollListener)
}
private fun removeNestedScrollViewScrollListener() {
nestedScrollView?.viewTreeObserver?.removeOnScrollChangedListener(nestedScrollViewScrollListener)
}
/**