Compare commits

...

24 Commits

Author SHA1 Message Date
65c0e520c5 Finish v1.14.3(180) 2021-01-21 19:07:12 +01:00
062abb4ea3 -> v1.14.3 (180) 2021-01-21 19:07:07 +01:00
1d759cdcbf Rimossa domanda destinatario se non esiste alcun destinatario 2021-01-21 19:06:22 +01:00
15e1793962 Finish v1.14.2(179) 2021-01-21 18:13:02 +01:00
55fee02f36 Finish v1.14.2(179) 2021-01-21 18:13:02 +01:00
575ac2577f -> -> v1.14.2 (179) 2021-01-21 18:12:55 +01:00
3fc5cd3660 Fix per maggio 2021-01-21 18:10:42 +01:00
d77fbff509 Finish v1.14.1(178) 2021-01-21 15:53:35 +01:00
58865ca34b Finish v1.14.1(178) 2021-01-21 15:53:34 +01:00
23aa7f5261 -> v1.14.1 (178) 2021-01-21 15:53:27 +01:00
65532a3185 In picking libero è stata aggiunta la possibilità di scansionare un barcode che indichi un cliente o una commessa. 2021-01-19 19:23:31 +01:00
1440c52322 Aggiunta la possibilità di recuperare una UL in accettazione che non ha alcuna UL che la referenzi 2021-01-19 13:43:29 +01:00
4e36053ba6 Rimosso definitivamente DialogInputQuantity.
Fix su scansione barcodes posizioni.
2021-01-19 10:06:13 +01:00
c7777b261d Finish v1.14.0(177) 2020-12-31 12:23:19 +01:00
7b0a86bb81 Finish v1.14.0(177) 2020-12-31 12:23:18 +01:00
ebf2bd578e -> v.1.14.0 (177) 2020-12-31 12:23:13 +01:00
f90e2acc3e Implementato pulsante chiudi ordine in Spedizione 2020-12-31 12:22:13 +01:00
035f058bc3 Finish v1.13.30(176) 2020-12-28 12:18:26 +01:00
73e57e9430 Finish v1.13.30(176) 2020-12-28 12:18:25 +01:00
13cc9f6053 -> v1.13.30 (176) 2020-12-28 12:18:20 +01:00
d9844315a3 Sistemato salvataggio causale in Rettifica Giacenze nel caso in cui si preme il tasto Back nella videata del collo 2020-12-28 12:17:43 +01:00
ade37f07d6 Merge remote-tracking branch 'origin/develop' into develop 2020-12-22 13:29:26 +01:00
f02e9921cb Finish v1.13.29(175) 2020-12-22 13:29:17 +01:00
e8ce7a9eeb Finish v1.13.19(175) 2020-12-22 13:29:06 +01:00
43 changed files with 943 additions and 1508 deletions

View File

@@ -7,8 +7,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 175 def appVersionCode = 180
def appVersionName = '1.13.29' def appVersionName = '1.14.3'
signingConfigs { signingConfigs {
release { release {
@@ -91,7 +91,7 @@ dependencies {
//Firebase //Firebase
// Import the Firebase BoM // Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:26.0.0') implementation platform('com.google.firebase:firebase-bom:26.3.0')
implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-core'
implementation 'com.google.firebase:firebase-crash' implementation 'com.google.firebase:firebase-crash'
@@ -102,7 +102,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.3.0-alpha04' implementation 'com.google.android.material:material:1.3.0-rc01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'

View File

@@ -5,6 +5,6 @@ import it.integry.integrywmsnative.core.utility.UtilityResources;
public class NoPrintersFoundException extends Exception { public class NoPrintersFoundException extends Exception {
public NoPrintersFoundException() { public NoPrintersFoundException() {
super(UtilityResources.getString(R.string.exception_printer_not_found)); super(UtilityResources.getString(R.string.exception_no_printer_found));
} }
} }

View File

@@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.expansion;
public interface RunnableArgsWithReturn<T, R> {
R run(T data);
}

View File

@@ -54,6 +54,7 @@ public class MtbColt extends EntityBase {
private BigDecimal lunghezzaCm; private BigDecimal lunghezzaCm;
private BigDecimal larghezzaCm; private BigDecimal larghezzaCm;
private BigDecimal altezzaCm; private BigDecimal altezzaCm;
private String codJcom;
private List<MtbCols> mtbCols; private List<MtbCols> mtbCols;
@@ -500,6 +501,15 @@ public class MtbColt extends EntityBase {
return this; return this;
} }
public String getCodJcom() {
return codJcom;
}
public MtbColt setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public void generaFiltroOrdineFromDTO(List<FiltroOrdineDTO> filtroOrdineDtos) { public void generaFiltroOrdineFromDTO(List<FiltroOrdineDTO> filtroOrdineDtos) {
String xmlPrefix = "{\"whereCond\": \""; String xmlPrefix = "{\"whereCond\": \"";

View File

@@ -44,7 +44,7 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
public static void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public static void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT * FROM mtb_colt WHERE cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione()); String sql = "SELECT * FROM mtb_colt WHERE segno > 0 AND cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione());
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {}.getType();

View File

@@ -4,6 +4,7 @@ import android.util.Log;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -11,6 +12,8 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.JasperDTO;
import it.integry.integrywmsnative.core.rest.model.JasperPairDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@@ -89,7 +92,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
printerService.getAvailablePrinters(codMdep, printerTypeStr).enqueue(new Callback<ServiceRESTResponse<List<String>>>() { printerService.getAvailablePrinters(codMdep, printerTypeStr).enqueue(new Callback<ServiceRESTResponse<List<String>>>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<String>>> call, Response<ServiceRESTResponse<List<String>>> response) { public void onResponse(Call<ServiceRESTResponse<List<String>>> call, Response<ServiceRESTResponse<List<String>>> response) {
analyzeAnswer(response, "GetAvailablePrinters", onComplete, onFailed); analyzeAnswer(response, "GetAvailablePrinters", printerList -> {
printerList = Stream.of(printerList).filter(x -> !UtilityString.isNullOrEmpty(x)).toList();
onComplete.run(printerList);
}, onFailed);
} }
@Override @Override
@@ -130,7 +136,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
.enqueue(new Callback<ServiceRESTResponse<Object>>() { .enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) { public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "PrintCollo", data -> { analyzeAnswer(response, "printCollo", data -> {
onComplete.run(); onComplete.run();
}, onFailed); }, onFailed);
} }
@@ -142,7 +148,38 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
} else onFailed.run(new Exception(t)); } else onFailed.run(new Exception(t));
} }
}); });
}
public void printReport(String printerName, String reportName, HashMap<String, Object> params, int quantity, Runnable onComplete, RunnableArgs<Exception> onFailed) {
// if(BuildConfig.DEBUG) {
// onComplete.run();
// return;
// }
JasperDTO jasperDTO = new JasperDTO();
jasperDTO.setReportName(reportName);
Stream.of(params)
.forEach(x -> jasperDTO.getParams().add(new JasperPairDTO(x.getKey(), x.getValue())));
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
printerService
.processPrintReport(printerName, quantity, jasperDTO)
.enqueue(new Callback<ServiceRESTResponse<Object>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "printReport", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, Throwable t) {
if(t.getMessage().contains("Printer not found")) {
onFailed.run(new NoPrintersFoundException());
} else onFailed.run(new Exception(t));
}
});
} }
} }

View File

@@ -2,8 +2,10 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.rest.model.JasperDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field; import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded; import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST; import retrofit2.http.POST;
@@ -34,4 +36,11 @@ public interface PrinterRESTConsumerService {
); );
@POST("processPrintReport")
Call<ServiceRESTResponse<Object>> processPrintReport(
@Query("printerName") String printerName,
@Query("numberOfCopies") int printQuantity,
@Body JasperDTO jasperDTO
);
} }

View File

@@ -0,0 +1,28 @@
package it.integry.integrywmsnative.core.rest.model;
import java.util.ArrayList;
import java.util.List;
public class JasperDTO {
private String reportName;
private List<JasperPairDTO> params = new ArrayList<>();
public String getReportName() {
return reportName;
}
public JasperDTO setReportName(String reportName) {
this.reportName = reportName;
return this;
}
public List<JasperPairDTO> getParams() {
return params;
}
public JasperDTO setParams(List<JasperPairDTO> params) {
this.params = params;
return this;
}
}

View File

@@ -0,0 +1,30 @@
package it.integry.integrywmsnative.core.rest.model;
public class JasperPairDTO {
private String name;
private Object value;
public JasperPairDTO(String name, Object value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
public JasperPairDTO setName(String name) {
this.name = name;
return this;
}
public Object getValue() {
return value;
}
public JasperPairDTO setValue(Object value) {
this.value = value;
return this;
}
}

View File

@@ -21,6 +21,7 @@ public class DBSettingsModel {
private String defaultCausaleRettificaGiacenze; private String defaultCausaleRettificaGiacenze;
private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione; private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione;
private boolean flagAskClienteInPickingLibero; private boolean flagAskClienteInPickingLibero;
private boolean flagAllowEmptyClienteInPickingLibero;
private boolean flagCanAddExtraItemSpedizione; private boolean flagCanAddExtraItemSpedizione;
private boolean flagCanAutoOpenNewULAccettazione; private boolean flagCanAutoOpenNewULAccettazione;
@@ -33,6 +34,7 @@ public class DBSettingsModel {
private boolean flagSpedizioneEnableManualPick; private boolean flagSpedizioneEnableManualPick;
private boolean flagSpedizioneCanSelectMultipleOrders; private boolean flagSpedizioneCanSelectMultipleOrders;
private String produzioneDefaultCodAnag; private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@@ -132,6 +134,15 @@ public class DBSettingsModel {
return this; return this;
} }
public boolean isFlagAllowEmptyClienteInPickingLibero() {
return flagAllowEmptyClienteInPickingLibero;
}
public DBSettingsModel setFlagAllowEmptyClienteInPickingLibero(boolean flagAllowEmptyClienteInPickingLibero) {
this.flagAllowEmptyClienteInPickingLibero = flagAllowEmptyClienteInPickingLibero;
return this;
}
public boolean isFlagCanAddExtraItemSpedizione() { public boolean isFlagCanAddExtraItemSpedizione() {
return flagCanAddExtraItemSpedizione; return flagCanAddExtraItemSpedizione;
} }
@@ -231,4 +242,13 @@ public class DBSettingsModel {
this.produzioneDefaultCodAnag = produzioneDefaultCodAnag; this.produzioneDefaultCodAnag = produzioneDefaultCodAnag;
return this; return this;
} }
public String getReportNameSpedizionChiudiOrdine() {
return reportNameSpedizionChiudiOrdine;
}
public DBSettingsModel setReportNameSpedizionChiudiOrdine(String reportNameSpedizionChiudiOrdine) {
this.reportNameSpedizionChiudiOrdine = reportNameSpedizionChiudiOrdine;
return this;
}
} }

View File

@@ -202,6 +202,10 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("PICKING_LIBERO") .setSection("PICKING_LIBERO")
.setKeySection("FLAG_ASK_CLIENTE")); .setKeySection("FLAG_ASK_CLIENTE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("PICKING_LIBERO")
.setKeySection("FLAG_ALLOW_EMPTY_CLIENTE"));
stbGestSetupList.add(new StbGestSetup() stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@@ -250,6 +254,10 @@ public class SettingsManager {
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
.setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS")); .setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("REPORT_PACKING_LIST"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
@@ -259,6 +267,7 @@ public class SettingsManager {
dbSettingsModelIstance.setDefaultCodAnag(getValueFromList(list, "SETUP","COD_ANAG_DEFAULT", String.class)); dbSettingsModelIstance.setDefaultCodAnag(getValueFromList(list, "SETUP","COD_ANAG_DEFAULT", String.class));
dbSettingsModelIstance.setDefaultCriterioDistribuzione(getValueFromList(list, "SETUP","DEFAULT_CRITERIO_DISTRIBUZIONE", String.class)); dbSettingsModelIstance.setDefaultCriterioDistribuzione(getValueFromList(list, "SETUP","DEFAULT_CRITERIO_DISTRIBUZIONE", String.class));
dbSettingsModelIstance.setFlagAskClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ASK_CLIENTE", Boolean.class)); dbSettingsModelIstance.setFlagAskClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ASK_CLIENTE", Boolean.class));
dbSettingsModelIstance.setFlagAllowEmptyClienteInPickingLibero(getValueFromList(list, "PICKING_LIBERO", "FLAG_ALLOW_EMPTY_CLIENTE", Boolean.class));
dbSettingsModelIstance.setFlagCanAddExtraItemSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_ITEMS", Boolean.class)); dbSettingsModelIstance.setFlagCanAddExtraItemSpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_ITEMS", Boolean.class));
dbSettingsModelIstance.setFlagCanAutoOpenNewULAccettazione(getValueFromList(list, "ACCETTAZIONE", "FLAG_AUTO_OPEN_NEW_UL", Boolean.class)); dbSettingsModelIstance.setFlagCanAutoOpenNewULAccettazione(getValueFromList(list, "ACCETTAZIONE", "FLAG_AUTO_OPEN_NEW_UL", Boolean.class));
dbSettingsModelIstance.setFlagCanAddExtraQuantitySpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_QUANTITY", Boolean.class)); dbSettingsModelIstance.setFlagCanAddExtraQuantitySpedizione(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_ADD_EXTRA_QUANTITY", Boolean.class));
@@ -271,6 +280,7 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class));
if(onComplete != null) onComplete.run(); if(onComplete != null) onComplete.run();
}, onFailed); }, onFailed);

View File

@@ -52,6 +52,7 @@ import it.integry.integrywmsnative.gest.accettazione_picking.core.AccettazioneLi
import it.integry.integrywmsnative.gest.accettazione_picking.core.AccettazioneListModel; import it.integry.integrywmsnative.gest.accettazione_picking.core.AccettazioneListModel;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.AccettazioneOrdineInevasoOrderBy; import it.integry.integrywmsnative.gest.accettazione_picking.dto.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.RecoverMtbColt;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
@@ -455,8 +456,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
public void startListaBancaliRegistratiActivity(ArrayList<MtbColt> mtbColts){ public void startListaBancaliRegistratiActivity(ArrayList<RecoverMtbColt> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this, mtbColts, false, PrinterRESTConsumer.Type.SECONDARIA, ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt)x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST); this.startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@@ -54,6 +54,7 @@ import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.AccettazionePickingRESTConsumer; import it.integry.integrywmsnative.gest.accettazione_picking.rest.AccettazionePickingRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.RecoverMtbColt;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException; import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
@@ -165,7 +166,7 @@ public class AccettazionePickingViewModel {
return mPickingList; return mPickingList;
} }
public void retrieveExistentLU(RunnableArgs<ArrayList<MtbColt>> onComplete) { public void retrieveExistentLU(RunnableArgs<ArrayList<RecoverMtbColt>> onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mSitArts, mtbColtList -> { this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mSitArts, mtbColtList -> {

View File

@@ -5,18 +5,18 @@ import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
@Singleton @Singleton
@@ -29,56 +29,87 @@ public class AccettazionePickingRESTConsumer {
this.mSystemRestConsumer = systemRESTConsumer; this.mSystemRestConsumer = systemRESTConsumer;
} }
public void getBancaliGiaRegistrati(List<SitArtOrdDTO> ordiniToShow, RunnableArgs<ArrayList<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) { public void getBancaliGiaRegistrati(List<SitArtOrdDTO> ordiniToShow, RunnableArgs<ArrayList<RecoverMtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> whereCondListMap = new ArrayList<>();
List<String> colliWhereCond = new ArrayList<>(); Stream
.of(ordiniToShow)
.distinctBy(x -> x.getDataOrd() + " " + x.getGestione() + " " + x.getNumOrd())
.forEach(x -> {
try {
HashMap<String, Object> whereCondMap = new HashMap<>();
whereCondMap.put("mtb_colr.data_ord", UtilityDate.recognizeDate(x.getDataOrd()));
whereCondMap.put("mtb_colr.gestione", x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione());
whereCondMap.put("mtb_colr.num_ord", x.getNumOrd());
whereCondListMap.add(whereCondMap);
} catch (Exception ex) {
UtilityLogger.errorMe(ex);
}
});
Stream.of(ordiniToShow).forEach(x -> { String sql = "SELECT DISTINCT CAST(CASE WHEN MAX(ISNULL(mtb_colr_scar.num_collo, 0)) = 0 THEN 1 ELSE 0 END AS BIT) AS flagCanBeRecovered, " +
try { " mtb_colt.* " +
Date date = UtilityDate.recognizeDate(x.getDataOrd()); "FROM mtb_colt" +
String dateString = UtilityDate.formatDate(date, "yyyy/MM/dd"); " INNER JOIN mtb_colr ON " +
" mtb_colt.gestione = mtb_colr.gestione AND " +
if (!colliWhereCond.contains(x.getGestione() + " " + dateString + " " + x.getNumOrd())) { " mtb_colt.ser_collo = mtb_colr.ser_collo AND " +
String gestione = x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione(); " mtb_colt.data_collo = mtb_colr.data_collo AND " +
colliWhereCond.add(gestione + " " + dateString + " " + x.getNumOrd()); " mtb_colt.num_collo = mtb_colr.num_collo " +
} " LEFT OUTER JOIN mtb_colr mtb_colr_scar ON mtb_colr_scar.num_collo_rif = mtb_colr.num_collo AND " +
} catch (Exception ex){ " mtb_colr_scar.gestione_rif = mtb_colr.gestione AND " +
UtilityLogger.errorMe(ex); " mtb_colr_scar.ser_collo_rif = mtb_colr.ser_collo AND " +
} " mtb_colr_scar.data_collo_rif = mtb_colr.data_collo " +
}); " WHERE (" + UtilityQuery.concatFieldListInWhereCond(whereCondListMap) + ") " +
" AND mtb_colt.data_doc IS NULL " +
" GROUP BY mtb_colt.gestione," +
" mtb_colt.data_collo," +
" mtb_colt.num_collo," +
" segno," +
" peso_kg," +
" lunghezza_cm," +
" larghezza_cm," +
" altezza_cm," +
" cod_anag," +
" cod_dtip," +
" mtb_colt.data_doc," +
" mtb_colt.ser_doc," +
" mtb_colt.num_doc," +
" rif_ord," +
" mtb_colt.ser_collo," +
" cod_tcol," +
" mtb_colt.data_ord," +
" mtb_colt.num_ord," +
" cod_vdes," +
" cod_mdep," +
" cod_vlis," +
" preparato_da," +
" ora_iniz_prep," +
" ora_fine_prep," +
" filtro_ordini," +
" annotazioni," +
" posizione," +
" cod_dtip_provv," +
" data_doc_provv," +
" ser_doc_provv," +
" num_doc_provv," +
" cod_jfas," +
" data_vers," +
" mtb_colt.peso_netto_kg";
StringBuilder colliINCondition = new StringBuilder(); Type typeOfObjectsList = new TypeToken<ArrayList<RecoverMtbColt>>() {
}.getType();
for(int i = 0; i < colliWhereCond.size(); i ++){ mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<RecoverMtbColt>>() {
colliINCondition.append("'").append(colliWhereCond.get(i)).append("'");
if(i < (colliWhereCond.size()-1)) colliINCondition.append(",");
}
String sql = "SELECT DISTINCT mtb_colt.* " +
"FROM mtb_colt, mtb_colr " +
"WHERE mtb_colt.gestione = mtb_colr.gestione AND " +
"mtb_colt.ser_collo = mtb_colr.ser_collo AND " +
"mtb_colt.data_collo = mtb_colr.data_collo AND " +
"mtb_colt.num_collo = mtb_colr.num_collo AND " +
"mtb_colt.gestione + ' ' + CONVERT(VARCHAR(15), mtb_colr.data_ord, 111) + ' ' + CONVERT(VARCHAR, mtb_colr.num_ord) IN (" + colliINCondition +
") AND mtb_colt.data_doc IS NULL ";
Type typeOfObjectsList = new TypeToken<ArrayList<MtbColt>>() {}.getType();
mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<MtbColt>>() {
@Override @Override
public void onSuccess(ArrayList<MtbColt> value) { public void onSuccess(ArrayList<RecoverMtbColt> value) {
if(onComplete != null) onComplete.run(value); if (onComplete != null) onComplete.run(value);
} }
@Override @Override
public void onFailed(Exception ex) { public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex); if (onFailed != null) onFailed.run(ex);
} }
}); });

View File

@@ -0,0 +1,17 @@
package it.integry.integrywmsnative.gest.accettazione_picking.rest;
import it.integry.integrywmsnative.core.model.MtbColt;
public class RecoverMtbColt extends MtbColt {
private boolean flagCanBeRecovered;
public boolean isFlagCanBeRecovered() {
return flagCanBeRecovered;
}
public RecoverMtbColt setFlagCanBeRecovered(boolean flagCanBeRecovered) {
this.flagCanBeRecovered = flagCanBeRecovered;
return this;
}
}

View File

@@ -6,12 +6,12 @@ import android.os.Bundle;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding; import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
@@ -32,7 +32,7 @@ public class ListaBancaliActivity extends BaseActivity {
private ListaBancaliViewModel mViewModel; private ListaBancaliViewModel mViewModel;
private boolean mCanRecoverUl; private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType; private PrinterRESTConsumer.Type mPrinterType;
private String mReportName; private String mReportName;
private boolean mFlagOnlyResiduo; private boolean mFlagOnlyResiduo;
@@ -41,34 +41,25 @@ public class ListaBancaliActivity extends BaseActivity {
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, String reportName) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, String reportName) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class); return createIntent(context, items, canRecoverUlAction, printerType, true, reportName);
String mtbColtsKey = DataCache.addItem(items);
myIntent.putExtra(Key.MtbColtsKey, mtbColtsKey);
String canRecoverULKey = DataCache.addItem(canRecoverUl);
myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey);
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String reportNameKey = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, reportNameKey);
String flagOnlyResiduoKey = DataCache.addItem(true);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
return myIntent;
} }
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
return createIntent(context, items, input -> canRecoverUl, printerType, onlyResiduo);
}
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
return createIntent(context, items, canRecoverUlAction, printerType, onlyResiduo, null);
}
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo, String reportName) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class); Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items); String mtbColtsKey = DataCache.addItem(items);
myIntent.putExtra(Key.MtbColtsKey, mtbColtsKey); myIntent.putExtra(Key.MtbColtsKey, mtbColtsKey);
String canRecoverULKey = DataCache.addItem(canRecoverUl); String canRecoverULKey = DataCache.addItem(canRecoverUlAction);
myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey); myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey);
String printerTypeKey = DataCache.addItem(printerType); String printerTypeKey = DataCache.addItem(printerType);
@@ -77,9 +68,13 @@ public class ListaBancaliActivity extends BaseActivity {
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo); String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey); myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
String reportNameKey = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, reportNameKey);
return myIntent; return myIntent;
} }
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -108,7 +103,7 @@ public class ListaBancaliActivity extends BaseActivity {
} }
public void startContenutoBancaleActivity(MtbColt item){ public void startContenutoBancaleActivity(MtbColt item){
Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl, mPrinterType, mReportName); Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mPrinterType, mReportName);
startActivityForResult(myIntent, PICK_UL_REQUEST); startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@@ -309,10 +309,10 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
} }
@Override @Override
public void onLUClienteRequired(RunnableArgs<VtbDest> onComplete, Runnable onAbort) { public void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) {
DialogAskCliente.makeBase(getActivity(), (status, result) -> { DialogAskCliente.makeBase(getActivity(), (status, result, codJcom) -> {
if (status == DialogConsts.Results.YES) { if (status == DialogConsts.Results.YES) {
onComplete.run(result); onComplete.run(result, codJcom);
} else { } else {
onAbort.run(); onAbort.run();
} }
@@ -401,7 +401,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
@Override @Override
public void onPreDestroy(Runnable onComplete) { public void onPreDestroy(Runnable onComplete) {
if(thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete);
BarcodeManager.removeCallback(barcodeScannerIstanceID); BarcodeManager.removeCallback(barcodeScannerIstanceID);
if(thereIsAnOpenedUL.get()) mViewModel.closeLU(onComplete);
else onComplete.run();
} }
} }

View File

@@ -6,9 +6,7 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -181,15 +179,15 @@ public class PickingLiberoViewModel {
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
if (this.mFlagAskCliente) { if (this.mFlagAskCliente) {
this.sendLUClienteRequired(vtbDest -> { this.sendLUClienteRequired((vtbDest, codJcom) -> {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, onComplete); createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, codJcom, onComplete);
}, onComplete); }, onComplete);
} else { } else {
createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, onComplete); createNewLU_PostClienteAsk(customNumCollo, customSerCollo, null, null, onComplete);
} }
} }
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) { private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, String codJcom, Runnable onComplete) {
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields(); mtbColt.initDefaultFields();
mtbColt.setGestione(mDefaultGestione) mtbColt.setGestione(mDefaultGestione)
@@ -211,6 +209,10 @@ public class PickingLiberoViewModel {
mtbColt.setCodVdes(vtbDest.getCodVdes()); mtbColt.setCodVdes(vtbDest.getCodVdes());
} }
if(!UtilityString.isNullOrEmpty(codJcom)) {
mtbColt.setCodJcom(codJcom);
}
mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> { mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
mtbColt mtbColt
.setNumCollo(value.getNumCollo()) .setNumCollo(value.getNumCollo())
@@ -233,9 +235,9 @@ public class PickingLiberoViewModel {
BigDecimal qtaColDaPrelevare = null; BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null; BigDecimal qtaCnfDaPrelevare = null;
BigDecimal initialNumCnf = null; BigDecimal initialNumCnf;
BigDecimal initialQtaCnf = null; BigDecimal initialQtaCnf;
BigDecimal initialQtaTot = null; BigDecimal initialQtaTot;
String partitaMag = null; String partitaMag = null;
Date dataScad = null; Date dataScad = null;
@@ -758,7 +760,7 @@ public class PickingLiberoViewModel {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
} }
private void sendLUClienteRequired(RunnableArgs<VtbDest> onComplete, Runnable onAbort) { private void sendLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort) {
if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort); if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort);
} }
@@ -816,7 +818,7 @@ public class PickingLiberoViewModel {
void onError(Exception ex); void onError(Exception ex);
void onLUClienteRequired(RunnableArgs<VtbDest> onComplete, Runnable onAbort); void onLUClienteRequired(RunnableArgss<VtbDest, String> onComplete, Runnable onAbort);
void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort); void onArtSelectionRequest(List<MtbColr> mtbColrsToPick, RunnableArgs<List<MtbColr>> onComplete, Runnable onAbort);

View File

@@ -1,12 +1,11 @@
package it.integry.integrywmsnative.gest.prod_recupero_materiale.viewmodel; package it.integry.integrywmsnative.gest.prod_recupero_materiale.viewmodel;
import android.app.Activity;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context;
import android.text.SpannableString; import android.text.SpannableString;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
@@ -18,6 +17,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
@@ -31,6 +31,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; 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.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityProgress;
@@ -39,15 +40,16 @@ import it.integry.integrywmsnative.databinding.FragmentProdRecuperoMaterialeBind
import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.HistoryULsListAdapter; import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.HistoryULsListAdapter;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuperoMaterialeHelper; import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuperoMaterialeHelper;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogCommon; import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
public class ProdRecuperoMaterialeViewModel { public class ProdRecuperoMaterialeViewModel {
private Context mContext; private FragmentActivity mContext;
private FragmentProdRecuperoMaterialeBinding mBinding; private FragmentProdRecuperoMaterialeBinding mBinding;
private ProdRecuperoMaterialeHelper mHelper; private ProdRecuperoMaterialeHelper mHelper;
@@ -61,7 +63,7 @@ public class ProdRecuperoMaterialeViewModel {
private int barcodeScannerIstanceID = -1; private int barcodeScannerIstanceID = -1;
public void init(Activity context, FragmentProdRecuperoMaterialeBinding binding, ProdRecuperoMaterialeHelper helper, Runnable onRecuperoCompleted) { public void init(FragmentActivity context, FragmentProdRecuperoMaterialeBinding binding, ProdRecuperoMaterialeHelper helper, Runnable onRecuperoCompleted) {
mContext = context; mContext = context;
mBinding = binding; mBinding = binding;
mHelper = helper; mHelper = helper;
@@ -152,32 +154,72 @@ public class ProdRecuperoMaterialeViewModel {
} }
// private void dispatchItem(HistoryVersamentoProdULDTO item, MtbColt sourceMtbColt, Dialog dialogProgress) {
// BigDecimal qtaDaEvadere = BigDecimal.ZERO;
//
// qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol());
//
//
// DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
// .setBatchLot(item.getPartitaMag())
// .setQtaDaEvadere(null)
// .setQtaOrd(null)
// .setMtbAart(item.getMtbAart())
// .setCanPartitaMagBeChanged(false)
// .setNumCnf(1)
// .setQtaCnf(item.getQtaCnf())
// .setQtaTot(item.getQtaCnf())
// .setMaxQta(qtaDaEvadere)
// .setQtaDisponibile(qtaDaEvadere);
//
// DialogInputQuantity.makeBase(mContext, dto, false, quantity -> {
// onItemDispatched(item, quantity.qtaTot.getBigDecimal(), sourceMtbColt, dialogProgress);
// }, () -> {
// if (dialogProgress != null) dialogProgress.dismiss();
// }).show();
// }
private void dispatchItem(HistoryVersamentoProdULDTO item, MtbColt sourceMtbColt, Dialog dialogProgress) { private void dispatchItem(HistoryVersamentoProdULDTO item, MtbColt sourceMtbColt, Dialog dialogProgress) {
BigDecimal qtaDaEvadere = BigDecimal.ZERO; BigDecimal qtaDaEvadere = BigDecimal.ZERO;
BigDecimal numCnfDaEvadere = BigDecimal.ZERO;
qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol()); qtaDaEvadere = qtaDaEvadere.add(item.getQtaCol());
if(!UtilityBigDecimal.equalsTo(qtaDaEvadere, BigDecimal.ZERO)) {
numCnfDaEvadere = UtilityBigDecimal.divide(qtaDaEvadere, item.getQtaCnf());
}
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setBatchLot(item.getPartitaMag())
.setQtaDaEvadere(null)
.setQtaOrd(null)
.setMtbAart(item.getMtbAart()) .setMtbAart(item.getMtbAart())
.setCanPartitaMagBeChanged(false) .setInitialNumCnf(BigDecimal.ONE)
.setNumCnf(1) .setInitialQtaCnf(item.getQtaCnf())
.setQtaCnf(item.getQtaCnf()) .setInitialQtaTot(item.getQtaCnf())
.setQtaTot(item.getQtaCnf())
.setMaxQta(qtaDaEvadere)
.setQtaDisponibile(qtaDaEvadere);
DialogInputQuantity.makeBase(mContext, dto, false, quantity -> { .setTotalQtaAvailable(qtaDaEvadere)
onItemDispatched(item, quantity.qtaTot.getBigDecimal(), sourceMtbColt, dialogProgress); .setTotalNumCnfAvailable(numCnfDaEvadere)
}, () -> { .setQtaCnfAvailable(item.getQtaCnf())
if (dialogProgress != null) dialogProgress.dismiss(); .setPartitaMag(item.getPartitaMag())
}).show(); // .setDataScad(item.getDa)
.setCanOverflowOrderQuantity(false)
.setCanLUBeClosed(false);
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
onItemDispatched(item, resultDTO.getQtaTot(), sourceMtbColt, dialogProgress);
}, () -> {
if (dialogProgress != null) dialogProgress.dismiss();
})
.show(mContext.getSupportFragmentManager(), "tag");
} }
private void onItemDispatched(HistoryVersamentoProdULDTO item, BigDecimal quantity, MtbColt sourceMtbColt, Dialog progress) { private void onItemDispatched(HistoryVersamentoProdULDTO item, BigDecimal quantity, MtbColt sourceMtbColt, Dialog progress) {
if (progress == null) { if (progress == null) {

View File

@@ -1,7 +1,5 @@
package it.integry.integrywmsnative.gest.rettifica_giacenze; package it.integry.integrywmsnative.gest.rettifica_giacenze;
import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.math.BigDecimal; import java.math.BigDecimal;
@@ -27,12 +25,12 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbCols; import it.integry.integrywmsnative.core.model.MtbCols;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -40,7 +38,6 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeRESTConsumer; import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeRESTConsumer;
import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
@@ -61,6 +58,8 @@ public class RettificaGiacenzeViewModel {
private String mCurrentCodMdep; private String mCurrentCodMdep;
private boolean mIsCreatedLU; private boolean mIsCreatedLU;
private boolean mAnyEditDone = false;
@Inject @Inject
public RettificaGiacenzeViewModel(ArticoloRESTConsumer articoloRESTConsumer, public RettificaGiacenzeViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
@@ -327,7 +326,7 @@ public class RettificaGiacenzeViewModel {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) { // if (!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
mtbColr mtbColr
.setQtaCol(BigDecimal.ZERO) .setQtaCol(BigDecimal.ZERO)
.setNumCnf(BigDecimal.ZERO) .setNumCnf(BigDecimal.ZERO)
@@ -350,42 +349,46 @@ public class RettificaGiacenzeViewModel {
mCurrentMtbColt.getMtbColr().add(mtbColr); mCurrentMtbColt.getMtbColr().add(mtbColr);
this.mAnyEditDone = true;
this.sendOnRowSaved(); this.sendOnRowSaved();
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(true, null); if (shouldCloseLU) closeLU(true, null);
}, this::sendError); }, this::sendError);
} else { // } else {
mtbColr // mtbColr
.setQtaCol(qtaTot) // .setQtaCol(qtaTot)
.setQtaCnf(qtaCnf) // .setQtaCnf(qtaCnf)
.setNumCnf(numCnf); // .setNumCnf(numCnf);
//
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); // MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); // cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
//
cloneMtbColt.setMtbColr(new ObservableArrayList<>()); // cloneMtbColt.setMtbColr(new ObservableArrayList<>());
//
cloneMtbColt.getMtbColr().add(mtbColr); // cloneMtbColt.getMtbColr().add(mtbColr);
//
mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { // mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr // mtbColr
.setDataCollo(value.getDataColloS()) // .setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo()) // .setNumCollo(value.getNumCollo())
.setGestione(value.getGestione()) // .setGestione(value.getGestione())
.setSerCollo(value.getSerCollo()) // .setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga()) // .setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) // .setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart()); // .setMtbAart(pickingObjectDTO.getMtbAart());
//
mCurrentMtbColt.getMtbColr().add(mtbColr); // mCurrentMtbColt.getMtbColr().add(mtbColr);
//
this.sendOnRowSaved(); // this.mAnyEditDone = true;
this.sendOnLoadingEnded(); //
// this.sendOnRowSaved();
if (shouldCloseLU) closeLU(true, null); // this.sendOnLoadingEnded();
}, this::sendError); //
} // if (shouldCloseLU) closeLU(true, null);
// }, this::sendError);
// }
} }
@@ -417,9 +420,11 @@ public class RettificaGiacenzeViewModel {
if(shouldChangePosition) { if(shouldChangePosition) {
this.savePosizione(mtbDepoPosizione, () -> { this.savePosizione(mtbDepoPosizione, () -> {
this.mAnyEditDone = false;
postSaveBehaviour(onComplete); postSaveBehaviour(onComplete);
}); });
} else { } else {
this.mAnyEditDone = false;
postSaveBehaviour(onComplete); postSaveBehaviour(onComplete);
} }
@@ -427,7 +432,7 @@ public class RettificaGiacenzeViewModel {
}, this::sendError); }, this::sendError);
}; };
if (!UtilityString.isNullOrEmpty(mDefaultCausale)) { if (!UtilityString.isNullOrEmpty(mDefaultCausale) && (saveCausale || mAnyEditDone)) {
this.saveCausaleRettificaGiacenze(saveAction); this.saveCausaleRettificaGiacenze(saveAction);
} else { } else {
saveAction.run(); saveAction.run();
@@ -548,7 +553,7 @@ public class RettificaGiacenzeViewModel {
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) { // if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
this.mColliMagazzinoRESTConsumer.creaRettificaCollo( this.mColliMagazzinoRESTConsumer.creaRettificaCollo(
mtbColrToUpdate, mtbColrToUpdate,
@@ -564,49 +569,53 @@ public class RettificaGiacenzeViewModel {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate); this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColrToUpdate); this.mCurrentMtbColt.getMtbColr().add(mtbColrToUpdate);
this.mAnyEditDone = true;
this.sendOnRowSaved(); this.sendOnRowSaved();
}, },
this::sendError this::sendError
); );
} else { // } else {
//
MtbColt mtbColt = new MtbColt() // MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToUpdate.getNumCollo()) // .setNumCollo(mtbColrToUpdate.getNumCollo())
.setDataCollo(mtbColrToUpdate.getDataColloS()) // .setDataCollo(mtbColrToUpdate.getDataColloS())
.setSerCollo(mtbColrToUpdate.getSerCollo()) // .setSerCollo(mtbColrToUpdate.getSerCollo())
.setGestione(mtbColrToUpdate.getGestione()) // .setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>()); // .setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); // mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
//
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone(); // final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr // mtbColr
.setNumCnf(numCnf.subtract(mtbColr.getNumCnf())) // .setNumCnf(numCnf.subtract(mtbColr.getNumCnf()))
.setQtaCnf(qtaCnf) // .setQtaCnf(qtaCnf)
.setQtaCol(qtaTot.subtract(mtbColr.getQtaCol())) // .setQtaCol(qtaTot.subtract(mtbColr.getQtaCol()))
.setPartitaMag(partitaMag) // .setPartitaMag(partitaMag)
.setDataScadPartita(dataScad) // .setDataScadPartita(dataScad)
.setUtente(SettingsManager.i().getUser().getFullname()) // .setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA) // .setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance()) // .setDatetimeRow(UtilityDate.getDateInstance())
.setOperation(CommonModelConsts.OPERATION.INSERT); // .setOperation(CommonModelConsts.OPERATION.INSERT);
//
mtbColt.getMtbColr().add(mtbColr); // mtbColt.getMtbColr().add(mtbColr);
//
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> { // this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
//
mtbColr.setNumCnf(numCnf) // mtbColr.setNumCnf(numCnf)
.setQtaCnf(qtaCnf) // .setQtaCnf(qtaCnf)
.setQtaCol(qtaTot); // .setQtaCol(qtaTot);
//
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate); // this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColr); // this.mCurrentMtbColt.getMtbColr().add(mtbColr);
//
this.sendOnRowSaved(); // this.mAnyEditDone = true;
this.sendOnLoadingEnded(); //
// this.sendOnRowSaved();
}, this::sendError); // this.sendOnLoadingEnded();
} //
// }, this::sendError);
// }
} }
public void deleteRow(MtbColr mtbColrToDelete) { public void deleteRow(MtbColr mtbColrToDelete) {
@@ -614,7 +623,7 @@ public class RettificaGiacenzeViewModel {
if (shouldDelete) { if (shouldDelete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) { // if(!mIsCreatedLU && mCurrentMtbColt.isDocumentPresent()) {
this.mColliMagazzinoRESTConsumer.creaRettificaCollo( this.mColliMagazzinoRESTConsumer.creaRettificaCollo(
mtbColrToDelete, mtbColrToDelete,
BigDecimal.ZERO, BigDecimal.ZERO,
@@ -626,37 +635,37 @@ public class RettificaGiacenzeViewModel {
}, },
this::sendError this::sendError
); );
} else { // } else {
MtbColt mtbColt = new MtbColt() // MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo()) // .setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS()) // .setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo()) // .setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione()) // .setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>()); // .setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); // mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
//
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone(); // MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr // mtbColr
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1))) // .setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setQtaCnf(mtbColr.getQtaCnf()) // .setQtaCnf(mtbColr.getQtaCnf())
.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1))) // .setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setPartitaMag(mtbColr.getPartitaMag()) // .setPartitaMag(mtbColr.getPartitaMag())
.setDataScadPartita(mtbColr.getDataScadPartitaD()) // .setDataScadPartita(mtbColr.getDataScadPartitaD())
.setUtente(SettingsManager.i().getUser().getFullname()) // .setUtente(SettingsManager.i().getUser().getFullname())
.setCausale(MtbColr.Causale.RETTIFICA) // .setCausale(MtbColr.Causale.RETTIFICA)
.setDatetimeRow(UtilityDate.getDateInstance()) // .setDatetimeRow(UtilityDate.getDateInstance())
.setOperation(CommonModelConsts.OPERATION.INSERT); // .setOperation(CommonModelConsts.OPERATION.INSERT);
//
mtbColt.getMtbColr().add(mtbColr); // mtbColt.getMtbColr().add(mtbColr);
//
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> { // this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); // this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
//
this.sendOnRowSaved(); // this.sendOnRowSaved();
this.sendOnLoadingEnded(); // this.sendOnLoadingEnded();
//
}, this::sendError); // }, this::sendError);
} // }
} }
}); });
} }

View File

@@ -84,6 +84,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public BindableBoolean noItemsToPick = new BindableBoolean(false); public BindableBoolean noItemsToPick = new BindableBoolean(false);
public BindableBoolean noLUPresent = new BindableBoolean(true); public BindableBoolean noLUPresent = new BindableBoolean(true);
public BindableBoolean bottomSheetEnabled = new BindableBoolean(false); public BindableBoolean bottomSheetEnabled = new BindableBoolean(false);
public BindableBoolean closeOrderButtonEnabled = new BindableBoolean(false);
private boolean mEnableGiacenza; private boolean mEnableGiacenza;
private boolean mFlagShowCodForn; private boolean mFlagShowCodForn;
@@ -150,6 +151,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.initRecyclerView(); this.initRecyclerView();
String reportNameSpedizioneChiudiOrdine = SettingsManager.iDB().getReportNameSpedizionChiudiOrdine();
closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(reportNameSpedizioneChiudiOrdine));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mEnableGiacenza = !SettingsManager.iDB().isFlagSpedizioneEnableFakeGiacenza(); mEnableGiacenza = !SettingsManager.iDB().isFlagSpedizioneEnableFakeGiacenza();
boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV(); boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV();
@@ -157,7 +162,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
if (mEnableGiacenza) this.openProgress(); if (mEnableGiacenza) this.openProgress();
mViewmodel.init(codMdep, mEnableGiacenza, enableCheckPartitaMag, shouldAskPesoLU, canOverflowOrderQuantity, mSitArtOrd, mTestateOrdini, mColliRegistrati); mViewmodel.init(
codMdep,
mEnableGiacenza,
enableCheckPartitaMag,
shouldAskPesoLU,
canOverflowOrderQuantity,
mSitArtOrd,
mTestateOrdini,
mColliRegistrati,
reportNameSpedizioneChiudiOrdine);
} }
@Override @Override
@@ -606,6 +620,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
} }
public void closeOrder() {
this.mBindings.spedizioneFab.close(true);
this.mViewmodel.closeOrder();
}
@Override @Override
public void onLoadingStarted() { public void onLoadingStarted() {
this.openProgress(); this.openProgress();
@@ -620,6 +640,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void onLUOpened(MtbColt mtbColt) { public void onLUOpened(MtbColt mtbColt) {
this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione()); this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione());
noLUPresent.set(false); noLUPresent.set(false);
closeOrderButtonEnabled.set(false);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
@@ -630,6 +652,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.addExtraItemsEnabled.set(false); this.addExtraItemsEnabled.set(false);
noLUPresent.set(true); noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(SettingsManager.iDB().getReportNameSpedizionChiudiOrdine()));
if (this.mShouldCloseActivity) super.onBackPressed(); if (this.mShouldCloseActivity) super.onBackPressed();
} }

View File

@@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -91,6 +92,7 @@ public class SpedizioneViewModel {
private boolean mEnableCheckPartitaMag; private boolean mEnableCheckPartitaMag;
private boolean mCanOverflowOrderQuantity; private boolean mCanOverflowOrderQuantity;
private boolean mShouldAskPesoLU; private boolean mShouldAskPesoLU;
private String mReportNameSpedizioneChiudiOrdine;
private MtbColt mCurrentMtbColt = null; private MtbColt mCurrentMtbColt = null;
@@ -125,7 +127,8 @@ public class SpedizioneViewModel {
boolean canOverflowOrderQuantity, boolean canOverflowOrderQuantity,
List<SitArtOrdDTO> pickingList, List<SitArtOrdDTO> pickingList,
List<OrdineVenditaInevasoDTO> testateOrdini, List<OrdineVenditaInevasoDTO> testateOrdini,
List<MtbColt> colliRegistrati) { List<MtbColt> colliRegistrati,
String reportNameSpedizioneChiudiOrdine) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mDefaultCodMdep = codMdep; this.mDefaultCodMdep = codMdep;
@@ -135,6 +138,7 @@ public class SpedizioneViewModel {
this.mEnableCheckPartitaMag = enableCheckPartitaMag; this.mEnableCheckPartitaMag = enableCheckPartitaMag;
this.mCanOverflowOrderQuantity = canOverflowOrderQuantity; this.mCanOverflowOrderQuantity = canOverflowOrderQuantity;
this.mShouldAskPesoLU = shouldAskPesoLU; this.mShouldAskPesoLU = shouldAskPesoLU;
this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine;
if (enableGiacenza) { if (enableGiacenza) {
mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> {
@@ -1217,16 +1221,21 @@ public class SpedizioneViewModel {
.setMtbAart(pickingObjectDTO.getMtbAart()); .setMtbAart(pickingObjectDTO.getMtbAart());
if(mEnableGiacenza) { if (mEnableGiacenza) {
mtbColr.setRefMtbColr(new MtbColr() MtbColr refMtbColr = new MtbColr()
.setCodMart(mtbColr.getCodMart()) .setCodMart(mtbColr.getCodMart())
.setPartitaMag(mtbColr.getPartitaMag()) .setPartitaMag(mtbColr.getPartitaMag())
.setCodTagl(mtbColr.getCodTagl()) .setCodTagl(mtbColr.getCodTagl())
.setCodCol(mtbColr.getCodCol()) .setCodCol(mtbColr.getCodCol());
if(refMtbColt != null) {
refMtbColr
.setNumCollo(refMtbColt.getNumCollo()) .setNumCollo(refMtbColt.getNumCollo())
.setDataCollo(refMtbColt.getDataColloS()) .setDataCollo(refMtbColt.getDataColloS())
.setSerCollo(refMtbColt.getSerCollo()) .setSerCollo(refMtbColt.getSerCollo())
.setGestione(refMtbColt.getGestione())); .setGestione(refMtbColt.getGestione());
}
mtbColr.setRefMtbColr(refMtbColr);
} }
pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr);
@@ -1546,6 +1555,56 @@ public class SpedizioneViewModel {
this.sendFilterRemoved(); this.sendFilterRemoved();
} }
public void closeOrder() {
this.sendOnLoadingStarted();
Runnable onComplete = () -> this.sendOnLoadingEnded();
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdep, PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList == null || printerList.size() == 0) {
this.sendError(new NoPrintersFoundException());
onComplete.run();
return;
}
cyclicPrintPackingList(
this.mTestateOrdini.iterator(),
printerList.get(0),
onComplete,
ex -> this.sendLUPrintError(ex, onComplete));
}, this::sendError);
}
private void cyclicPrintPackingList(@NotNull Iterator<OrdineVenditaInevasoDTO> sourceTestateOrdineVenditaIterator, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceTestateOrdineVenditaIterator.hasNext()) {
singlePrintPackingList(sourceTestateOrdineVenditaIterator.next(), printerName, () -> {
cyclicPrintPackingList(sourceTestateOrdineVenditaIterator, printerName, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void singlePrintPackingList(OrdineVenditaInevasoDTO ordineVenditaInevasoDTO, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> params = new HashMap<>();
params.put("gestione", ordineVenditaInevasoDTO.getGestione());
params.put("num_ord", ordineVenditaInevasoDTO.getNumOrd());
params.put("data_ord", UtilityDate.formatDate(ordineVenditaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH));
this.mPrinterRESTConsumer.printReport(
printerName,
this.mReportNameSpedizioneChiudiOrdine,
params,
1,
onComplete,
onFailed);
}
public MutableLiveData<List<PickingObjectDTO>> getPickingList() { public MutableLiveData<List<PickingObjectDTO>> getPickingList() {
return mPickingList; return mPickingList;
} }

View File

@@ -137,6 +137,10 @@ public class VersamentoMerceViewModel {
UtilityExceptions.defaultException(mContext, ex, progressDialog); UtilityExceptions.defaultException(mContext, ex, progressDialog);
BarcodeManager.enable(); BarcodeManager.enable();
}); });
} else {
progressDialog.dismiss();
BarcodeManager.enable();
showTooMuchULFound();
} }
}, ex -> { }, ex -> {
@@ -148,6 +152,12 @@ public class VersamentoMerceViewModel {
} }
} }
private void showTooMuchULFound() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)),
null, null).show();
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) { private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
BarcodeRESTConsumer.decodeEan128Static(barcodeScanDTO, ean128Model -> { BarcodeRESTConsumer.decodeEan128Static(barcodeScanDTO, ean128Model -> {

View File

@@ -16,6 +16,7 @@ import com.google.android.material.textfield.TextInputLayout;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityFocus; import it.integry.integrywmsnative.core.utility.UtilityFocus;
import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityPosizione;
@@ -55,6 +56,8 @@ public class DialogAskLivelloPosizione {
mDialog.setCancelable(false); mDialog.setCancelable(false);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentWidth(mContext, mDialog);
mDialog.setOnDismissListener(dialog -> { mDialog.setOnDismissListener(dialog -> {
if(!completedFLow) onComplete.run(null); if(!completedFLow) onComplete.run(null);
}); });

View File

@@ -15,11 +15,13 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogAskClienteBinding; import it.integry.integrywmsnative.databinding.DialogAskClienteBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel;
@@ -32,11 +34,11 @@ public class DialogAskCliente {
private DialogAskClienteBinding mBinding; private DialogAskClienteBinding mBinding;
public static Dialog makeBase(final Context context, RunnableArgss<DialogConsts.Results, VtbDest> onComplete) { public static Dialog makeBase(final Context context, RunnableArgsss<DialogConsts.Results, VtbDest, String> onComplete) {
return new DialogAskCliente(context, onComplete).mDialog; return new DialogAskCliente(context, onComplete).mDialog;
} }
public DialogAskCliente(Context context, RunnableArgss<DialogConsts.Results, VtbDest> onComplete) { public DialogAskCliente(Context context, RunnableArgsss<DialogConsts.Results, VtbDest, String> onComplete) {
mContext = context; mContext = context;
@@ -72,25 +74,33 @@ public class DialogAskCliente {
viewModel1 viewModel1
.setOnConfirmClickListener(() -> { .setOnConfirmClickListener(() -> {
String codAnag = viewModel1.getCurrentCliente();
viewModel2.setCodAnag(viewModel1.getCurrentCliente().getCodAnag()); if(UtilityString.isNullOrEmpty(codAnag)) {
mDialog.dismiss();
onComplete.run(DialogConsts.Results.YES, null, null);
}
viewModel2.setCodAnag(codAnag);
mBinding.viewpager.setCurrentItem(mBinding.viewpager.getCurrentItem() + 1, true); mBinding.viewpager.setCurrentItem(mBinding.viewpager.getCurrentItem() + 1, true);
}); });
viewModel1.setOnAbortClickListener(() -> { viewModel1.setOnAbortClickListener(() -> {
mDialog.dismiss(); mDialog.dismiss();
onComplete.run(DialogConsts.Results.ABORT, null); onComplete.run(DialogConsts.Results.ABORT, null, null);
}); });
viewModel2.setOnConfirmClickListener(() -> { viewModel2.setOnConfirmClickListener(() -> {
onComplete.run(DialogConsts.Results.YES, viewModel2.getCurrentDestinatario().toVtbDestModel()); DialogAskClienteDestinatarioDTO cliente = viewModel2.getCurrentDestinatario();
onComplete.run(DialogConsts.Results.YES, cliente != null ? cliente.toVtbDestModel() : null, viewModel1.getCurrentCommessa());
mDialog.dismiss(); mDialog.dismiss();
}); });
viewModel2.setOnAbortClickListener(() -> { viewModel2.setOnAbortClickListener(() -> {
mDialog.dismiss(); mDialog.dismiss();
onComplete.run(DialogConsts.Results.ABORT, null); onComplete.run(DialogConsts.Results.ABORT, null, null);
}); });
}); });

View File

@@ -1,10 +1,12 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente.dto; package it.integry.integrywmsnative.view.dialogs.ask_cliente.dto;
import java.util.ArrayList;
public class DialogAskClienteClienteDTO { public class DialogAskClienteClienteDTO {
private String codAnag; private String codAnag;
private String ragSoc; private String ragSoc;
private ArrayList<String> codJcoms = new ArrayList<>();
public String getCodAnag() { public String getCodAnag() {
return codAnag; return codAnag;
@@ -24,6 +26,14 @@ public class DialogAskClienteClienteDTO {
return this; return this;
} }
public ArrayList<String> getCodJcoms() {
return codJcoms;
}
public DialogAskClienteClienteDTO setCodJcoms(ArrayList<String> codJcoms) {
this.codJcoms = codJcoms;
return this;
}
@Override @Override
public String toString() { public String toString() {

View File

@@ -2,18 +2,33 @@ package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel;
import android.content.Context; import android.content.Context;
import android.widget.AutoCompleteTextView; import android.widget.AutoCompleteTextView;
import android.widget.Toast;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.databinding.ViewDataBinding; import androidx.databinding.ViewDataBinding;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.tfb.fbtoast.FBToast;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityHashMap;
import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding; import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO;
@@ -22,7 +37,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private Context mContext; private Context mContext;
private DialogAskClientePage1Binding mBinding; private DialogAskClientePage1Binding mBinding;
private List<DialogAskClienteClienteDTO> availableClienti; private int mBarcodeScannerInstanceID;
private ArrayList<DialogAskClienteClienteDTO> availableClienti;
private ObservableArrayList<String> codJcoms = new ObservableArrayList<>();
public DialogAskCliente_Page1ViewModel() { public DialogAskCliente_Page1ViewModel() {
@@ -41,18 +59,43 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void onShow() { public void onShow() {
String sql = "SELECT gtb_anag.cod_anag, rag_soc " + String sql = "SELECT gtb_anag.cod_anag, rag_soc, jtb_comt.cod_jcom " +
"FROM gtb_anag " + "FROM gtb_anag " +
"LEFT OUTER JOIN jtb_comt ON gtb_anag.cod_anag = jtb_comt.cod_anag " +
"INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag " + "INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag " +
"WHERE vtb_clie.flag_stato = 'A' " + "WHERE vtb_clie.flag_stato = 'A' " +
"ORDER BY rag_soc"; "ORDER BY rag_soc";
Type typeOfObjectsList = new TypeToken<ArrayList<DialogAskClienteClienteDTO>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<HashMap<String, Object>>>() {
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DialogAskClienteClienteDTO>>() { }.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<HashMap<String, Object>>>() {
@Override @Override
public void onSuccess(ArrayList<DialogAskClienteClienteDTO> value) { public void onSuccess(ArrayList<HashMap<String, Object>> value) {
availableClienti = value;
initializeAdapter(value); availableClienti = new ArrayList<>();
Stream.of(value)
.groupBy(x -> x.get("codAnag").toString() + " " + x.get("ragSoc").toString())
.forEach(x -> {
DialogAskClienteClienteDTO dialogAskClienteClienteDTO = new DialogAskClienteClienteDTO();
dialogAskClienteClienteDTO.setCodAnag(UtilityHashMap.getValueIfExists(x.getValue().get(0), "codAnag"));
dialogAskClienteClienteDTO.setRagSoc(UtilityHashMap.getValueIfExists(x.getValue().get(0), "ragSoc"));
for (HashMap<String, Object> group : x.getValue()) {
if (group.containsKey("codJcom")) {
dialogAskClienteClienteDTO.getCodJcoms().add(UtilityHashMap.getValueIfExists(group, "codJcom"));
}
}
availableClienti.add(dialogAskClienteClienteDTO);
});
initializeAdapter(availableClienti);
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
BarcodeManager.enable();
} }
@Override @Override
@@ -66,9 +109,10 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void setOnConfirmClickListener(Runnable onConfirm) { public void setOnConfirmClickListener(Runnable onConfirm) {
this.mBinding.buttonYes.setOnClickListener(v -> { this.mBinding.buttonYes.setOnClickListener(v -> {
if(validateCliente()) { if (validateCliente()) {
this.resetClienteError(); this.resetClienteError();
if(onConfirm != null) onConfirm.run(); BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
if (onConfirm != null) onConfirm.run();
} else { } else {
this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString()); this.setClienteError(mContext.getResources().getText(R.string.not_valid_customer_error).toString());
} }
@@ -76,45 +120,127 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
}); });
} }
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
String barcode = data.getStringValue();
DialogAskClienteClienteDTO resultCodAnag = searchBarcodeInCodAnag(barcode);
if (resultCodAnag != null) {
mBinding.dropdownCliente.setText(resultCodAnag.toString());
refreshCodJcoms(resultCodAnag);
} else {
DialogAskClienteClienteDTO resultCodJcom = searchBarcodeInCodJcom(barcode);
if(resultCodJcom != null) {
mBinding.dropdownCliente.setText(resultCodJcom.toString());
refreshCodJcoms(resultCodJcom);
mBinding.dropdownCommessa.setText(barcode);
} else {
FBToast.errorToast(mContext, "Nessun risultato trovato", Toast.LENGTH_LONG);
mBinding.dropdownCliente.setText("");
mBinding.dropdownCommessa.setText("");
}
}
BarcodeManager.enable();
};
private DialogAskClienteClienteDTO searchBarcodeInCodAnag(String barcode) {
List<DialogAskClienteClienteDTO> resultCodAnag = Stream.of(availableClienti)
.filter(x -> barcode.equalsIgnoreCase(x.getCodAnag()))
.toList();
if (resultCodAnag.size() > 0) {
return resultCodAnag.get(0);
} else return null;
}
private DialogAskClienteClienteDTO searchBarcodeInCodJcom(String barcode) {
List<DialogAskClienteClienteDTO> resultCodJcom = Stream.of(availableClienti)
.filter(x -> x.getCodJcoms().contains(barcode))
.toList();
if (resultCodJcom.size() > 0) {
return resultCodJcom.get(0);
} else return null;
}
@Override @Override
public void setOnAbortClickListener(Runnable onAbort) { public void setOnAbortClickListener(Runnable onAbort) {
this.mBinding.buttonNo.setOnClickListener(v -> { this.mBinding.buttonNo.setOnClickListener(v -> {
if(onAbort != null) onAbort.run(); if (onAbort != null) onAbort.run();
}); });
} }
private void initializeAdapter(ArrayList<DialogAskClienteClienteDTO> items) { private void initializeAdapter(ArrayList<DialogAskClienteClienteDTO> items) {
DialogAskCliente_Page1_Cliente_ArrayAdapter adapter = new DialogAskCliente_Page1_Cliente_ArrayAdapter(mContext, items);
DialogAskCliente_Page1_ArrayAdapter adapter = new DialogAskCliente_Page1_ArrayAdapter(mContext, items); AutoCompleteTextView editTextDropdownCliente = mBinding.dropdownCliente;
editTextDropdownCliente.setThreshold(0);
editTextDropdownCliente.setAdapter(adapter);
editTextDropdownCliente.setOnItemClickListener((parent, view, position, id) -> {
refreshCodJcoms(items.get(position));
});
AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; DialogAskCliente_Page1_Commessa_ArrayAdapter commessaAdapter = new DialogAskCliente_Page1_Commessa_ArrayAdapter(mContext);
editTextFilledExposedDropdown.setThreshold(0);
editTextFilledExposedDropdown.setAdapter(adapter); AutoCompleteTextView editTextDropdownCommessa = mBinding.dropdownCommessa;
editTextDropdownCommessa.setThreshold(0);
editTextDropdownCommessa.setAdapter(commessaAdapter);
codJcoms.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
commessaAdapter.clear();
commessaAdapter.addAll(codJcoms);
}
});
}
private void refreshCodJcoms(DialogAskClienteClienteDTO item) {
codJcoms.clear();
codJcoms.addAll(item.getCodJcoms());
} }
private boolean validateCliente() { private boolean validateCliente() {
return getCurrentCliente() != null; if(SettingsManager.iDB().isFlagAllowEmptyClienteInPickingLibero() && mBinding.inputCliente.getEditText().getText().toString().trim().length() == 0) {
return true;
} else return getCurrentCliente() != null;
} }
public DialogAskClienteClienteDTO getCurrentCliente() { public String getCurrentCliente() {
for (DialogAskClienteClienteDTO cliente : availableClienti) { Optional<DialogAskClienteClienteDTO> result = Stream.of(availableClienti)
if(cliente.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString())) { .filter(x -> x.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString()))
return cliente; .findFirst();
}
}
return null; if(result.isPresent()) return result.get().getCodAnag();
else return null;
}
public String getCurrentCommessa() {
String codAnag = getCurrentCliente();
Optional<ArrayList<String>> result = Stream.of(availableClienti)
.filter(x -> x.getCodAnag().equalsIgnoreCase(codAnag))
.map(DialogAskClienteClienteDTO::getCodJcoms)
.findFirst();
if(result.isPresent() && Stream.of(result.get()).anyMatch(x -> x.equalsIgnoreCase(mBinding.inputCommessa.getEditText().getText().toString()))) {
return mBinding.inputCommessa.getEditText().getText().toString();
} else return null;
} }
private void setClienteError(String message){ private void setClienteError(String message) {
mBinding.inputCliente.setErrorEnabled(true); mBinding.inputCliente.setErrorEnabled(true);
mBinding.inputCliente.setError(message); mBinding.inputCliente.setError(message);
mBinding.inputCliente.setErrorIconDrawable(null); mBinding.inputCliente.setErrorIconDrawable(null);
} }
private void resetClienteError() { private void resetClienteError() {
mBinding.inputCliente.setError(null); mBinding.inputCliente.setError(null);
} }

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel; package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel;
import android.content.Context; import android.content.Context;
import android.graphics.Movie;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -9,7 +8,6 @@ import android.widget.ArrayAdapter;
import android.widget.Filter; import android.widget.Filter;
import android.widget.Filterable; import android.widget.Filterable;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
@@ -20,7 +18,7 @@ import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO;
public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter<DialogAskClienteClienteDTO> implements Filterable { public class DialogAskCliente_Page1_Cliente_ArrayAdapter extends ArrayAdapter<DialogAskClienteClienteDTO> implements Filterable {
private Context mContext; private Context mContext;
private List<DialogAskClienteClienteDTO> mDataset; private List<DialogAskClienteClienteDTO> mDataset;
@@ -28,7 +26,7 @@ public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter<DialogAskC
private ListFilter listFilter = new ListFilter(); private ListFilter listFilter = new ListFilter();
public DialogAskCliente_Page1_ArrayAdapter(@NonNull Context context, @NonNull ArrayList<DialogAskClienteClienteDTO> list) { public DialogAskCliente_Page1_Cliente_ArrayAdapter(@NonNull Context context, @NonNull ArrayList<DialogAskClienteClienteDTO> list) {
super(context, 0 , list); super(context, 0 , list);
mContext = context; mContext = context;
mDataset = list; mDataset = list;
@@ -43,13 +41,13 @@ public class DialogAskCliente_Page1_ArrayAdapter extends ArrayAdapter<DialogAskC
} }
if(position < mDataset.size()) { if(position < mDataset.size()) {
AppCompatTextView textView = listItem.findViewById(R.id.text); AppCompatTextView textView = listItem.findViewById(R.id.text);
textView.setText(mDataset.get(position).getRagSoc()); textView.setText(mDataset.get(position).getRagSoc());
return listItem; return listItem;
} }
return null; return null;
} }

View File

@@ -0,0 +1,110 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
public class DialogAskCliente_Page1_Commessa_ArrayAdapter extends ArrayAdapter<String> implements Filterable {
private Context mContext;
private List<String> mDataset = new ArrayList<>();
private List<String> mDatasetAllItems;
private DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter listFilter = new DialogAskCliente_Page1_Commessa_ArrayAdapter.ListFilter();
public DialogAskCliente_Page1_Commessa_ArrayAdapter(@NonNull Context context) {
super(context, 0);
mContext = context;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItem = convertView;
if(listItem == null) {
listItem = LayoutInflater.from(mContext).inflate(R.layout.dialog_ask_cliente__dropdown_item, parent, false);
}
if(position < getCount()) {
AppCompatTextView textView = listItem.findViewById(R.id.text);
textView.setText(getItem(position));
return listItem;
}
return convertView;
}
@NonNull
@Override
public Filter getFilter() {
return listFilter;
}
public class ListFilter extends Filter {
private Object lock = new Object();
@Override
protected FilterResults performFiltering(CharSequence prefix) {
FilterResults results = new FilterResults();
if (mDatasetAllItems == null) {
synchronized (lock) {
mDatasetAllItems = new ArrayList<>(mDataset);
}
}
if (prefix == null || prefix.length() == 0) {
synchronized (lock) {
results.values = mDatasetAllItems;
results.count = mDatasetAllItems.size();
}
} else {
final String searchStrLowerCase = prefix.toString().toLowerCase();
ArrayList<String> matchValues = new ArrayList<>();
for (String dataItem : mDatasetAllItems) {
if (dataItem.toLowerCase().startsWith(searchStrLowerCase)) {
matchValues.add(dataItem);
}
}
results.values = matchValues;
results.count = matchValues.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
if (results.values != null) {
mDataset.clear();
mDataset.addAll((ArrayList<String>) results.values);
} else {
mDataset.clear();
}
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
}
}

View File

@@ -24,6 +24,8 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
private DialogAskClientePage2Binding mBinding; private DialogAskClientePage2Binding mBinding;
private Context mContext; private Context mContext;
private Runnable mOnConfirm;
private List<DialogAskClienteDestinatarioDTO> availableDestinatari; private List<DialogAskClienteDestinatarioDTO> availableDestinatari;
private String mCodAnag; private String mCodAnag;
@@ -44,17 +46,22 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void onShow() { public void onShow() {
String sql = "SELECT cod_anag, cod_vdes, destinatario, indirizzo, cap, citta, prov, nazione " + String sql = "SELECT cod_anag, cod_vdes, destinatario, indirizzo, cap, citta, prov, nazione " +
"FROM vtb_dest " + "FROM vtb_dest " +
"WHERE cod_anag = " + UtilityDB.valueToString(mCodAnag); "WHERE cod_anag = " + UtilityDB.valueToString(mCodAnag);
Type typeOfObjectsList = new TypeToken<ArrayList<DialogAskClienteDestinatarioDTO>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<DialogAskClienteDestinatarioDTO>>() {
}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DialogAskClienteDestinatarioDTO>>() { SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DialogAskClienteDestinatarioDTO>>() {
@Override @Override
public void onSuccess(ArrayList<DialogAskClienteDestinatarioDTO> value) { public void onSuccess(ArrayList<DialogAskClienteDestinatarioDTO> value) {
availableDestinatari = value; availableDestinatari = value;
initializeAdapter(value); initializeAdapter(value);
if(value == null || value.size() == 0) {
mOnConfirm.run();
return;
}
} }
@Override @Override
@@ -66,10 +73,11 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void setOnConfirmClickListener(Runnable onConfirm) { public void setOnConfirmClickListener(Runnable onConfirm) {
this.mOnConfirm = onConfirm;
this.mBinding.buttonYes.setOnClickListener(v -> { this.mBinding.buttonYes.setOnClickListener(v -> {
if(validateDestinatario()) { if (validateDestinatario()) {
this.resetClienteError(); this.resetClienteError();
if(onConfirm != null) onConfirm.run(); if (onConfirm != null) onConfirm.run();
} else { } else {
this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString()); this.setClienteError(mContext.getResources().getText(R.string.not_valid_recipient_error).toString());
} }
@@ -80,7 +88,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void setOnAbortClickListener(Runnable onAbort) { public void setOnAbortClickListener(Runnable onAbort) {
this.mBinding.buttonNo.setOnClickListener(v -> { this.mBinding.buttonNo.setOnClickListener(v -> {
if(onAbort != null) onAbort.run(); if (onAbort != null) onAbort.run();
}); });
} }
@@ -88,12 +96,13 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
this.mCodAnag = codAnag; this.mCodAnag = codAnag;
} }
private void initializeAdapter(ArrayList<DialogAskClienteDestinatarioDTO> items) { private void initializeAdapter(ArrayList<DialogAskClienteDestinatarioDTO> items) {
DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items);
AutoCompleteTextView editTextFilledExposedDropdown = mBinding.filledExposedDropdown; AutoCompleteTextView editTextFilledExposedDropdown = mBinding.dropdownDestinatario;
editTextFilledExposedDropdown.setThreshold(0); editTextFilledExposedDropdown.setThreshold(0);
editTextFilledExposedDropdown.setAdapter(adapter); editTextFilledExposedDropdown.setAdapter(adapter);
} }
@@ -105,7 +114,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
public DialogAskClienteDestinatarioDTO getCurrentDestinatario() { public DialogAskClienteDestinatarioDTO getCurrentDestinatario() {
for (DialogAskClienteDestinatarioDTO destinatarioDTO : availableDestinatari) { for (DialogAskClienteDestinatarioDTO destinatarioDTO : availableDestinatari) {
if(destinatarioDTO.toString().equalsIgnoreCase(mBinding.inputDestinatario.getEditText().getText().toString())) { if (destinatarioDTO.toString().equalsIgnoreCase(mBinding.inputDestinatario.getEditText().getText().toString())) {
return destinatarioDTO; return destinatarioDTO;
} }
} }
@@ -114,11 +123,12 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
} }
private void setClienteError(String message){ private void setClienteError(String message) {
mBinding.inputDestinatario.setErrorEnabled(true); mBinding.inputDestinatario.setErrorEnabled(true);
mBinding.inputDestinatario.setError(message); mBinding.inputDestinatario.setError(message);
mBinding.inputDestinatario.setErrorIconDrawable(null); mBinding.inputDestinatario.setErrorIconDrawable(null);
} }
private void resetClienteError() { private void resetClienteError() {
mBinding.inputDestinatario.setError(null); mBinding.inputDestinatario.setError(null);
} }

View File

@@ -1,755 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.res.ColorStateList;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Handler;
import com.google.android.material.textfield.TextInputLayout;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatTextView;
import android.text.Html;
import android.text.SpannableString;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
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;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogInputQuantityArticoloBinding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
public class DialogInputQuantity {
public static class DTO {
private MtbAart mtbAart;
private String batchLot;
private BigDecimal qtaDaEvadere;
private BigDecimal qtaDisponibile;
private BigDecimal qtaEvasa;
private BigDecimal qtaOrd;
private BigDecimal qtaTot;
private BigDecimal qtaCnf;
private Integer numCnf;
private BigDecimal maxQta;
private String codArtFor;
private Date dataScad;
private boolean canPartitaMagBeChanged;
private Boolean canDataScadBeChanged;
private Boolean shouldAskDataScad;
public MtbAart getMtbAart() {
return mtbAart;
}
public DTO setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public String getBatchLot() {
return batchLot;
}
public DTO setBatchLot(String batchLot) {
this.batchLot = batchLot;
return this;
}
public BigDecimal getQtaDaEvadere() {
return qtaDaEvadere;
}
public DTO setQtaDaEvadere(BigDecimal qtaDaEvadere) {
this.qtaDaEvadere = qtaDaEvadere;
return this;
}
public BigDecimal getQtaDisponibile() {
return qtaDisponibile;
}
public DTO setQtaDisponibile(BigDecimal qtaDisponibile) {
this.qtaDisponibile = qtaDisponibile;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public DTO setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public DTO setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public BigDecimal getQtaCnf() {
return qtaCnf;
}
public DTO setQtaCnf(BigDecimal qtaCnf) {
this.qtaCnf = qtaCnf;
return this;
}
public Integer getNumCnf() {
return numCnf;
}
public DTO setNumCnf(Integer numCnf) {
this.numCnf = numCnf;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public DTO setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getMaxQta() {
return maxQta;
}
public DTO setMaxQta(BigDecimal maxQta) {
this.maxQta = maxQta;
return this;
}
public String getCodArtFor() {
return codArtFor;
}
public DTO setCodArtFor(String codArtFor) {
this.codArtFor = codArtFor;
return this;
}
public Date getDataScad() {
return dataScad;
}
public DTO setDataScad(Date dataScad) {
this.dataScad = dataScad;
return this;
}
public boolean getCanPartitaMagBeChanged() {
return canPartitaMagBeChanged;
}
public DTO setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) {
this.canPartitaMagBeChanged = canPartitaMagBeChanged;
return this;
}
public Boolean isCanDataScadBeChanged() {
return canDataScadBeChanged;
}
public DTO setCanDataScadBeChanged(boolean canDataScadBeChanged) {
this.canDataScadBeChanged = canDataScadBeChanged;
return this;
}
public Boolean getShouldAskDataScad() {
return shouldAskDataScad;
}
public DTO setShouldAskDataScad(Boolean shouldAskDataScad) {
this.shouldAskDataScad = shouldAskDataScad;
return this;
}
}
private ColorStateList originalColorStateList = null;
private String scadenzaString = "Scadenza";
private Dialog currentDialog;
private Context currentContext;
private DialogInputQuantityArticoloBinding currentBinding;
private MtbAart currentMtbAart;
private QuantityDTO currentQuantityDto;
private DTO currentDTO;
public static Dialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final RunnableArgs<QuantityDTO> dialogCallback, final Runnable onAbort) {
return new DialogInputQuantity(context, dto, canOverflowQuantity, false, (quantityDto, closeUL) -> {
dialogCallback.run(quantityDto);
}, onAbort).currentDialog;
}
public static Dialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final RunnableArgss<QuantityDTO, Boolean> dialogCallback, final Runnable onAbort) {
return new DialogInputQuantity(context, dto, canOverflowQuantity, true, dialogCallback, onAbort).currentDialog;
}
public DialogInputQuantity(@NotNull Context context, @NotNull final DTO dto, boolean canOverflowQuantity, boolean showCloseUL, final RunnableArgss<QuantityDTO, Boolean> dialogCallback, final Runnable onAbort) {
currentContext = context;
currentMtbAart = dto.getMtbAart();
currentDTO = dto;
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
currentBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false);
final TextInputLayout txlInputBatchLot = currentBinding.inputPartitaMag;
final TextInputLayout txlInputNumDiCnf = currentBinding.inputNumCnf;
final TextInputLayout txlInputQtaPerCnf = currentBinding.inputQtaCnf;
final TextInputLayout txlInputQtaTot = currentBinding.inputQtaTot;
txlInputNumDiCnf.getEditText().setSelectAllOnFocus(true);
txlInputQtaPerCnf.getEditText().setSelectAllOnFocus(true);
txlInputQtaTot.getEditText().setSelectAllOnFocus(true);
originalColorStateList = txlInputNumDiCnf.getEditText().getTextColors();
currentQuantityDto = new QuantityDTO();
currentQuantityDto.canOverflowQuantity = canOverflowQuantity;
setupQuantities(dto, currentQuantityDto);
setupQuantityListener(currentQuantityDto, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot);
currentBinding.setViewmodel(dto);
currentBinding.setQuantityViewModel(currentQuantityDto);
currentDialog = new Dialog(context);
currentDialog.setContentView(currentBinding.getRoot());
currentDialog.setCanceledOnTouchOutside(false);
currentDialog.setCancelable(false);
currentDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
currentDialog.setCanceledOnTouchOutside(false);
currentDialog.setOnShowListener(dialogInterface -> {
final Handler handler = new Handler();
handler.postDelayed(() -> {
EditText editTextToFocus;
if(currentQuantityDto.canPartitaMagBeChanged.get()) {
editTextToFocus = txlInputBatchLot.getEditText();
} else {
editTextToFocus = txlInputNumDiCnf.getEditText();
}
editTextToFocus.requestFocus();
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editTextToFocus, InputMethodManager.SHOW_IMPLICIT);
}, 100);
});
currentBinding.saveBtn.setOnClickListener(view -> {
onConfirm(context, currentQuantityDto, dialogCallback, false);
currentDialog.dismiss();
});
currentBinding.abortBtn.setOnClickListener(view -> {
if(onAbort != null) onAbort.run();
currentDialog.dismiss();
});
currentBinding.closeLuBtn.setVisibility(showCloseUL ? View.VISIBLE : View.INVISIBLE);
currentBinding.closeLuBtn.setOnClickListener(view -> {
onConfirm(context, currentQuantityDto, dialogCallback, true);
currentDialog.dismiss();
});
initDatePicker(context, currentQuantityDto, currentBinding.getRoot().findViewById(R.id.input_data_scad));
setupBarcode(context);
}
private void setupQuantities(@NotNull DTO dto, QuantityDTO quantityDTO){
if(dto.getQtaTot() != null) quantityDTO.qtaTot.set(dto.getQtaTot().floatValue());
if(dto.getMaxQta() != null) quantityDTO.maxQta.set(dto.getMaxQta().floatValue());
float qtaDisponibile = dto.getQtaDisponibile() != null ? dto.getQtaDisponibile().floatValue() : 0f;
if (qtaDisponibile < 0) {
currentBinding.layoutQtaDisponibile.setVisibility(View.GONE);
qtaDisponibile = 0;
}
if(qtaDisponibile > 0) quantityDTO.qtaDisponibile.set(qtaDisponibile);
float qtaDaEvadere = dto.qtaDaEvadere != null ? dto.qtaDaEvadere.floatValue() : 0f;
if (qtaDaEvadere < 0) {
currentBinding.layoutQtaDaEvadere.setVisibility(View.GONE);
qtaDaEvadere = 0;
}
if(qtaDaEvadere > 0) quantityDTO.qtaDaEvadere.set(qtaDaEvadere);
quantityDTO.qtaEvasa.set(dto.qtaEvasa != null ? dto.qtaEvasa.floatValue() : null);
quantityDTO.batchLot.set(dto.batchLot);
if(quantityDTO.qtaCnf.get(false) == null) {
if(dto.getQtaCnf() != null) {
quantityDTO.qtaCnf.set(dto.getQtaCnf().floatValue());
} else if(dto.numCnf != null && dto.qtaTot != null &&
dto.numCnf > 0 && dto.qtaTot.compareTo(BigDecimal.ZERO) > 0) {
quantityDTO.qtaCnfNotificationEnabled = false;
quantityDTO.qtaCnf.set(dto.qtaTot.divide(new BigDecimal(dto.numCnf), RoundingMode.HALF_EVEN).floatValue());
quantityDTO.qtaCnfNotificationEnabled = true;
} else {
quantityDTO.qtaCnf.set(dto.mtbAart.getQtaCnf().floatValue());
if(dto.getMtbAart().isFlagQtaCnfFissaBoolean()) {
quantityDTO.blockedQtaPerCnf.set(true);
}
}
}
if(quantityDTO.qtaTot.get(false) == null) {
quantityDTO.qtaTot.set(qtaDaEvadere);
}
if(dto.getNumCnf() != null) {
quantityDTO.numCnf.set(new BigDecimal(dto.getNumCnf()).floatValue());
}
if(quantityDTO.numCnf.get(false) == null) {
float numCnf = (float) Math.ceil(UtilityNumber.truncateToDecimal(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get(),3));
if(numCnf < 1) numCnf = 1;
quantityDTO.numCnf.set(numCnf);
}
quantityDTO.canPartitaMagBeChanged.set(dto.getCanPartitaMagBeChanged());
if(dto.isCanDataScadBeChanged() != null){
quantityDTO.canDataScadBeChanged.set(dto.isCanDataScadBeChanged());
}
quantityDTO.shouldAskDataScad.set(dto.mtbAart.isFlagTracciabilitaBoolean() && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0);
if(dto.getShouldAskDataScad() != null) {
quantityDTO.shouldAskDataScad.set(dto.getShouldAskDataScad());
}
if(dto.getDataScad() != null) {
quantityDTO.expireDate = dto.getDataScad();
}
if(quantityDTO.expireDate == null && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0) {
Calendar c = UtilityDate.getCalendarInstance();
c.add(Calendar.DATE, dto.mtbAart.getGgScadPartita()); // number of days to add
quantityDTO.expireDate = c.getTime();
}
refreshQtaDescriptionText();
}
private void setupBarcode(Context context) {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false)));
currentDialog.setOnDismissListener(dialog -> {
BarcodeManager.removeCallback(barcodeIstanceID);
});
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
if(UtilityBarcode.isEanPeso(data)){
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(data.getStringValue());
if(ean13PesoModel.getPrecode().contains(currentMtbAart.getBarCode())) {
currentQuantityDto.numCnf.set(1f);
currentQuantityDto.qtaCnf.set(ean13PesoModel.getPeso());
currentQuantityDto.qtaTot.set(ean13PesoModel.getPeso());
BarcodeManager.enable();
} else {
BarcodeManager.enable();
}
} catch (Exception e) {
UtilityLogger.errorMe(e);
BarcodeManager.enable();
}
} else if(UtilityBarcode.isEtichetta128(data)){
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext);
BarcodeRESTConsumer.decodeEan128Static(data, ean128Model -> {
progressDialog.dismiss();
BarcodeManager.enable();
if(ean128Model != null){
if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
currentQuantityDto.batchLot.set(ean128Model.BatchLot);
}
try {
if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.BestBefore);
} else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.Expiry);
}
if(currentQuantityDto.expireDate != null) {
currentQuantityDto.expireDateString.set(UtilityDate.formatDate(currentQuantityDto.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}
} catch (Exception e) {
UtilityLogger.errorMe(e);
}
if(ean128Model.Count != null && ean128Model.Count > 0) {
currentQuantityDto.numCnf.set((float) ean128Model.Count);
}
if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
currentQuantityDto.qtaTot.set(ean128Model.NetWeightKg);
}
if(currentQuantityDto.qtaTot.get() > 0 && currentQuantityDto.numCnf.get() > 0) {
currentQuantityDto.qtaCnf.set(currentQuantityDto.qtaTot.get() / currentQuantityDto.numCnf.get());
}
}
}, ex -> {
UtilityExceptions.defaultException(currentContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
BarcodeManager.enable();
}
};
private void setupQuantityListener(final QuantityDTO quantityDTO, final TextInputLayout txlInputNumDiCnf, final TextInputLayout txlInputQtaPerCnf, final TextInputLayout txlInputQtaTot) {
quantityDTO.numCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if(quantityDTO.numCnfNotificationEnabled) {
quantityDTO.blockedNumDiCnf.set(!(quantityDTO.numCnf.get(true) == 0 || quantityDTO.numCnf.get().toString().equals("")));
toggleTextInputLayoutError(txlInputNumDiCnf, quantityDTO.blockedNumDiCnf.get());
if (!quantityDTO.blockedQtaTot.get()) {
quantityDTO.qtaTotNotificationEnabled = false;
quantityDTO.qtaTot.set((float) Math.round(quantityDTO.qtaCnf.get(true) * quantityDTO.numCnf.get(true) * 1000) / 1000);
quantityDTO.qtaTotNotificationEnabled = true;
} else if (!quantityDTO.blockedQtaPerCnf.get()) {
quantityDTO.qtaCnfNotificationEnabled = false;
if(quantityDTO.numCnf.get(true) != 0) {
quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / quantityDTO.numCnf.get(true) * 1000) / 1000);
} else {
quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / 1 * 1000) / 1000);
}
quantityDTO.qtaCnfNotificationEnabled = true;
} else {
Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare il numero di confezioni");
}
}
// refreshQtaDescriptionText();
}
});
quantityDTO.qtaCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if(quantityDTO.qtaCnfNotificationEnabled) {
quantityDTO.blockedQtaPerCnf.set(!(quantityDTO.qtaCnf.get(true) == 0 || quantityDTO.qtaCnf.get().toString().equals("")));
toggleTextInputLayoutError(txlInputQtaPerCnf, quantityDTO.blockedQtaPerCnf.get());
if (!quantityDTO.blockedQtaTot.get()) {
quantityDTO.qtaTotNotificationEnabled = false;
float qtaTot = (float) Math.round(quantityDTO.qtaCnf.get(true) * quantityDTO.numCnf.get(true) * 1000) / 1000;
if(qtaTot > quantityDTO.maxQta.get() && !quantityDTO.canOverflowQuantity) qtaTot = quantityDTO.maxQta.get();
quantityDTO.qtaTot.set(qtaTot);
quantityDTO.qtaTotNotificationEnabled = true;
} else if (!quantityDTO.blockedNumDiCnf.get()) {
quantityDTO.numCnfNotificationEnabled = false;
if(quantityDTO.qtaCnf.get(true) != 0){
quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true) / quantityDTO.qtaCnf.get(true)));
} else {
quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true)));
}
quantityDTO.numCnfNotificationEnabled = true;
} else {
Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare la quantità per confezione");
}
}
// refreshQtaDescriptionText();
}
});
quantityDTO.qtaTot.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if (quantityDTO.qtaTotNotificationEnabled) {
quantityDTO.blockedQtaTot.set(!(quantityDTO.qtaTot.get(true) == 0 || quantityDTO.qtaTot.get().toString().equals("")));
toggleTextInputLayoutError(txlInputQtaTot, quantityDTO.blockedQtaTot.get());
if(!quantityDTO.blockedQtaPerCnf.get()){
quantityDTO.qtaCnfNotificationEnabled = false;
quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / quantityDTO.numCnf.get(true) *1000)/1000);
quantityDTO.qtaCnfNotificationEnabled = true;
} else if(!quantityDTO.blockedNumDiCnf.get()) {
quantityDTO.numCnfNotificationEnabled = false;
quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true) / quantityDTO.qtaCnf.get(true)));
quantityDTO.numCnfNotificationEnabled = true;
} else {
Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare la quantità totale");
}
}
// refreshQtaDescriptionText();
}
});
}
private void toggleTextInputLayoutError(TextInputLayout textInputLayout, boolean isError) {
if(isError){
textInputLayout.setErrorEnabled(true);
textInputLayout.setError(" ");
textInputLayout.getEditText().setTextColor(ContextCompat.getColor(currentContext, R.color.red_600));
textInputLayout.setHintTextAppearance(R.style.ErrorFloatingLabel);
textInputLayout.setErrorIconDrawable(null);
if (textInputLayout.getChildCount() == 2) {
textInputLayout.getChildAt(1).setVisibility(View.GONE);
}
} else {
textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
textInputLayout.getEditText().setTextColor(originalColorStateList);
textInputLayout.setHintTextAppearance(R.style.NormalFloatingLabel);
}
}
private void initDatePicker(Context context, QuantityDTO quantityDTO, AppCompatTextView textInputLayout) {
quantityDTO.expireDateString.set(scadenzaString);
if(quantityDTO.expireDate != null) {
quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}
Runnable onTextClicked = () -> {
// Get Current Date
Calendar c = UtilityDate.getCalendarInstance();
if(quantityDTO.expireDate != null) {
c.setTime(quantityDTO.expireDate);
}
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(context,
(view, year, month, day) -> {
quantityDTO.expireDate = new GregorianCalendar(year, month, day).getTime();
quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}, mYear, mMonth, mDay);
datePickerDialog.show();
};
textInputLayout.setOnClickListener(v -> onTextClicked.run());
}
private void refreshQtaDescriptionText() {
int numConf = (int) (currentQuantityDto.qtaDaEvadere.get() / currentQuantityDto.qtaCnf.get());
float qtaTot = currentQuantityDto.qtaDaEvadere.get();
float mod = qtaTot % numConf;
String text = "";
if(numConf > 0) {
text += "<b>" + numConf + " " + currentContext.getResources().getQuantityString(R.plurals.item_package, numConf).toUpperCase() + "</b>";
}
if(numConf > 0 && mod > 0) {
text += " e ";
}
if(mod > 0) {
text += "<b>" + UtilityNumber.decimalToString(mod) + " ";
if(mod == 1) {
text += currentContext.getResources().getQuantityString(R.plurals.pieces, (int) mod).toUpperCase();
} else {
text += currentContext.getString(R.string.piece).toUpperCase();
}
text += "</b>";
}
currentBinding.qtaDescriptionText.setText(Html.fromHtml(text));
}
private void onConfirm(Context context, QuantityDTO quantityDTO, RunnableArgss<QuantityDTO, Boolean> dialogCallback, boolean closeUL){
if(currentDTO.mtbAart.isFlagTracciabilitaBoolean() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){
showBatchLotErrorPrompt(context);
} else if(quantityDTO.shouldAskDataScad.get() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){
showBatchLotErrorPrompt(context);
} else if(quantityDTO.shouldAskDataScad.get() && quantityDTO.expireDate == null){
showExpireDateErrorPrompt(context);
} else if(!quantityDTO.canOverflowQuantity && quantityDTO.qtaTot.get() > quantityDTO.maxQta.get()) {
showQuantityOverflowErrorPrompt(context);
} else if(quantityDTO.qtaCnf.get() <= 0 || quantityDTO.numCnf.get() <= 0 || quantityDTO.qtaTot.get() <= 0) {
showQuantityErrorDialog(context);
} else {
if(quantityDTO.batchLot != null && !quantityDTO.batchLot.isEmpty()) {
quantityDTO.batchLot.set(quantityDTO.batchLot.get().toUpperCase());
}
dialogCallback.run(quantityDTO, closeUL);
currentDialog.dismiss();
}
}
private void showQuantityErrorDialog(Context mContext){
String errorMessage = mContext.getText(R.string.wrong_quantity_input_message).toString();
DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show();
}
private void showQuantityOverflowErrorPrompt(Context mContext){
String errorMessage = mContext.getText(R.string.available_quantity_overflow_error_message).toString();
DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show();
}
private void showExpireDateErrorPrompt(Context mContext){
String errorMessage = mContext.getText(R.string.expire_date_error_message).toString();
DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show();
}
private void showBatchLotErrorPrompt(Context mContext){
String errorMessage = mContext.getText(R.string.batch_lot_error_message).toString();
DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show();
}
}

View File

@@ -1,42 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity;
import java.util.Date;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableFloat;
import it.integry.integrywmsnative.core.di.BindableString;
public class QuantityDTO {
public BindableString batchLot = new BindableString();
public BindableString expireDateString = new BindableString();
public Date expireDate = null;
public BindableFloat numCnf = new BindableFloat();
public BindableFloat qtaCnf = new BindableFloat();
public BindableFloat qtaTot = new BindableFloat();
public BindableFloat qtaEvasa = new BindableFloat();
public BindableFloat qtaDaEvadere = new BindableFloat();
public BindableFloat qtaDisponibile = new BindableFloat();
public BindableBoolean blockedNumDiCnf = new BindableBoolean();
public BindableBoolean blockedQtaTot = new BindableBoolean();
public BindableBoolean blockedQtaPerCnf = new BindableBoolean();
public boolean numCnfNotificationEnabled = true;
public boolean qtaCnfNotificationEnabled = true;
public boolean qtaTotNotificationEnabled = true;
public boolean canOverflowQuantity = false;
public BindableFloat maxQta = new BindableFloat();
public BindableBoolean canPartitaMagBeChanged = new BindableBoolean(true);
public BindableBoolean canDataScadBeChanged = new BindableBoolean(true);
public BindableBoolean shouldAskDataScad = new BindableBoolean();
}

View File

@@ -288,7 +288,7 @@ public class DialogScanOrCreateLU {
private void showTooMuchULFound() { private void showTooMuchULFound() {
DialogSimpleMessageHelper.makeWarningDialog(mContext, DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message)), new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)),
null, null).show(); null, null).show();
} }

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/colorPrimary">
<path
android:fillColor="@android:color/white"
android:pathData="M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM10,17l-4,-4 1.41,-1.41L10,14.17l6.59,-6.59L18,9l-8,8z"/>
</vector>

View File

@@ -124,7 +124,7 @@
</LinearLayout> </LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/spedizione_empty_view" android:id="@+id/accettazione_empty_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:alpha="0.3" android:alpha="0.3"

View File

@@ -69,7 +69,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scrollbars="vertical" android:scrollbars="vertical"
android:clipToPadding="false"/> android:clipToPadding="false"
android:paddingBottom="72dp"/>
</LinearLayout> </LinearLayout>
@@ -186,7 +187,7 @@
<!-- android:id="@+id/empty_space_padding"--> <!-- android:id="@+id/empty_space_padding"-->
<!-- android:layout_width="match_parent"--> <!-- android:layout_width="match_parent"-->
<!-- android:layout_height="?attr/actionBarSize"--> <!-- android:layout_height="?attr/actionBarSize"-->
<!-- android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"--> <!-- android:visibility="@{pickingResiView.bottomSheetEnabled ? View.VISIBLE : View.GONE}"-->
<!-- android:layout_alignParentBottom="true">--> <!-- android:layout_alignParentBottom="true">-->
<!-- </RelativeLayout>--> <!-- </RelativeLayout>-->

View File

@@ -265,7 +265,17 @@
app:visibility="@{spedizioneView.noLUPresent}"> app:visibility="@{spedizioneView.noLUPresent}">
<com.github.clans.fab.FloatingActionButton <com.github.clans.fab.FloatingActionButton
android:id="@+id/spedizione_fab_item1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_assignment_turned_in_24"
app:visibility="@{spedizioneView.closeOrderButtonEnabled}"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:fab_label="@string/action_close_order"
app:onClick="@{() -> spedizioneView.closeOrder()}" />
<com.github.clans.fab.FloatingActionButton
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_box" android:src="@drawable/ic_box"
@@ -276,7 +286,6 @@
app:onClick="@{() -> spedizioneView.showCreatedUL()}" /> app:onClick="@{() -> spedizioneView.showCreatedUL()}" />
<com.github.clans.fab.FloatingActionButton <com.github.clans.fab.FloatingActionButton
android:id="@+id/spedizione_fab_item2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_add_24dp" android:src="@drawable/ic_add_24dp"

View File

@@ -34,9 +34,10 @@
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:layout_marginBottom="8dp" /> android:layout_marginBottom="8dp" />
<RelativeLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_cliente" android:id="@+id/input_cliente"
@@ -46,14 +47,30 @@
android:hint="@string/customer"> android:hint="@string/customer">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView <androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown" android:id="@+id/dropdown_cliente"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:singleLine="true"
android:ellipsize="end"/> android:ellipsize="end"/>
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_commessa"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/job">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/dropdown_commessa"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="end"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

View File

@@ -46,7 +46,7 @@
android:hint="@string/recipient"> android:hint="@string/recipient">
<androidx.appcompat.widget.AppCompatAutoCompleteTextView <androidx.appcompat.widget.AppCompatAutoCompleteTextView
android:id="@+id/filled_exposed_dropdown" android:id="@+id/dropdown_destinatario"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:singleLine="true" android:singleLine="true"

View File

@@ -1,425 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity.DTO"/>
<variable
name="quantityViewModel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO"/>
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.MainApplication" />
<import type="it.integry.integrywmsnative.R" />
<import type="androidx.databinding.adapters.Converters"/>
<import type="android.graphics.Color" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<RelativeLayout
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/dialog_title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text='@{viewmodel.mtbAart.codMart + (!UtilityString.isNullOrEmpty(viewmodel.batchLot) ? " (" + viewmodel.batchLot + ")" : "") }'
android:textColor="@color/colorPrimary"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="AV25D200010B"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_below="@id/dialog_title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text='@{!UtilityString.isNullOrEmpty(viewmodel.mtbAart.diacod) ? viewmodel.mtbAart.diacod : ""}'
android:textColor="@color/red_600"
android:textStyle="bold"
android:visibility="@{UtilityString.isNullOrEmpty(viewmodel.mtbAart.diacod) ? View.GONE : View.VISIBLE}"
style="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="DIACOD HERE"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingStart="8dp"
android:paddingEnd="0dp"
android:text='@{viewmodel.mtbAart.untMis != null ? "(" + viewmodel.mtbAart.untMis + ")" : ""}'
android:textColor="#000"
android:textStyle="bold"
tools:text="(PZ)"
style="@style/AppTheme.NewMaterial.Text.Medium"
app:layout_constraintRight_toRightOf="parent" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/dialog_title"
android:layout_marginTop="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--<androidx.appcompat.widget.AppCompatTextView-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:text="@string/description"-->
<!--android:textSize="16sp"-->
<!--tools:text="Descrizione" />-->
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{viewmodel.qtaOrd == null ? View.GONE : View.VISIBLE}"
android:text="@string/ordered_abbr"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="@{viewmodel.qtaOrd == null ? View.GONE : View.VISIBLE}"
android:text='@{UtilityNumber.decimalToString(viewmodel.qtaOrd)}'
android:textSize="16sp"
android:textStyle="bold"
android:paddingStart="4dp"
tools:text="1200" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="@string/dispatched_abbr"
android:textSize="16sp"
android:visibility="@{quantityViewModel.qtaEvasa.get() == 0 ? View.GONE : View.VISIBLE}" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{UtilityNumber.decimalToString(quantityViewModel.qtaEvasa.get())}'
android:visibility="@{quantityViewModel.qtaEvasa.get() == 0 ? View.GONE : View.VISIBLE}"
android:textSize="16sp"
android:textStyle="bold"
android:paddingLeft="4dp"
tools:text="1200" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/layout_qta_da_evadere"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/to_dispatch_abbr"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{UtilityNumber.decimalToString(quantityViewModel.qtaDaEvadere.get())}'
android:textSize="16sp"
android:textStyle="bold"
android:paddingLeft="4dp"
tools:text="1200" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_qta_disponibile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="("
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/available_abbr"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{UtilityNumber.decimalToString(quantityViewModel.qtaDisponibile.get())}'
android:textSize="16sp"
android:textStyle="bold"
android:paddingStart="4dp"
tools:text="1200" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=")"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_description_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_gravity="center_horizontal"
android:paddingTop="4dp"
tools:text="2 CARTONI e 3 PEZZI"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_partita_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent='@{quantityViewModel.shouldAskDataScad.get() == false ? 1.0f : 0.5f}'/>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_partita_mag"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
app:hintTextAppearance="@style/hint_text"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/guideline_partita_data"
android:nextFocusRight="@+id/input_data_scad"
style="@style/TextInputLayout.NoLine">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/batch_lot"
android:textAllCaps="true"
app:binding="@{quantityViewModel.batchLot}"/>
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/input_data_scad"
android:layout_width="0dp"
android:layout_height="wrap_content"
tools:text="11 nov 2018"
android:textSize="16sp"
android:enabled="@{quantityViewModel.canDataScadBeChanged}"
android:visibility="@{quantityViewModel.shouldAskDataScad.get() == false ? View.GONE : View.VISIBLE}"
app:binding="@{quantityViewModel.expireDateString}"
app:layout_constraintStart_toEndOf="@id/guideline_partita_data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!--<android.support.design.widget.TextInputLayout-->
<!--android:id="@+id/input_data_scad_layout"-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="wrap_content"-->
<!--android:enabled="@{quantityViewModel.shouldAskDataScad.get()}"-->
<!--app:hintTextAppearance="@style/hint_text"-->
<!--app:layout_constraintStart_toEndOf="@id/guideline_partita_data"-->
<!--app:layout_constraintEnd_toEndOf="parent">-->
<!--<android.support.design.widget.TextInputEditText-->
<!--android:id="@+id/input_data_scad"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:inputType="textNoSuggestions"-->
<!--android:hint="@string/expire_date"-->
<!--app:binding="@{quantityViewModel.expireDate}"/>-->
<!--</android.support.design.widget.TextInputLayout>-->
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/input_num_cnf"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{!(quantityViewModel.blockedQtaTot.get() &amp;&amp; quantityViewModel.blockedQtaPerCnf.get())}"
style="@style/TextInputLayout.NoLine">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="@string/num_pcks"
android:gravity="end"
app:binding="@{quantityViewModel.numCnf}" >
</com.google.android.material.textfield.TextInputEditText>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/input_qta_cnf"
android:enabled="@{!(quantityViewModel.blockedQtaTot.get() &amp;&amp; quantityViewModel.blockedNumDiCnf.get())}"
style="@style/TextInputLayout.NoLine">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="@string/qty_x_pck"
android:gravity="end"
app:binding="@{quantityViewModel.qtaCnf}"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/input_qta_tot"
android:enabled="@{!(quantityViewModel.blockedNumDiCnf.get() &amp;&amp; quantityViewModel.blockedQtaPerCnf.get())}"
style="@style/TextInputLayout.NoLine">
<com.google.android.material.textfield.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="@string/tot_qty"
android:gravity="end"
app:binding="@{quantityViewModel.qtaTot}"/>
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="8dp"
android:weightSum="1">
<com.google.android.material.button.MaterialButton
android:id="@+id/close_lu_btn"
android:layout_weight="0.4"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
android:layout_marginStart="0dp"
android:layout_marginEnd="4dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/left_buttons_guideline"
app:strokeColor="@color/colorPrimary"
android:text="@string/action_close_ul"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/abort_btn"
android:layout_weight="0.3"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.DangerFull"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:paddingEnd="3dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/left_buttons_guideline"
app:layout_constraintEnd_toStartOf="@id/right_buttons_guideline"
app:icon="@drawable/ic_close_24dp"
app:iconGravity="textStart"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/save_btn"
android:layout_weight="0.3"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
android:layout_marginStart="4dp"
android:layout_marginEnd="0dp"
android:paddingEnd="3dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/right_buttons_guideline"
app:layout_constraintEnd_toEndOf="parent"
app:icon="@drawable/ic_save_24"
app:iconGravity="textStart"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</layout>

View File

@@ -49,6 +49,7 @@
<string name="action_insert_quantity">Inserisci quantità</string> <string name="action_insert_quantity">Inserisci quantità</string>
<string name="action_insert_weight">Inserisci peso</string> <string name="action_insert_weight">Inserisci peso</string>
<string name="dialog_input_peso_lu_description">Inserisci le informazioni del TIPO UL e il peso NETTO e LORDO</string> <string name="dialog_input_peso_lu_description">Inserisci le informazioni del TIPO UL e il peso NETTO e LORDO</string>
<string name="action_close_order">Chiudi ordine</string>
<string name="action_show_created_ul">Mostra UL già create</string> <string name="action_show_created_ul">Mostra UL già create</string>
<string name="action_recover_ul">Recupera UL</string> <string name="action_recover_ul">Recupera UL</string>
<string name="action_print_ul">Stampa UL</string> <string name="action_print_ul">Stampa UL</string>
@@ -199,6 +200,7 @@
<string name="num_ords">Numero ordine</string> <string name="num_ords">Numero ordine</string>
<string name="order_cod_jcoms">Commessa</string> <string name="order_cod_jcoms">Commessa</string>
<string name="customer">Cliente</string> <string name="customer">Cliente</string>
<string name="job">Commessa</string>
<string name="recipient">Destinatario</string> <string name="recipient">Destinatario</string>
<string name="ship_date">Data consegna</string> <string name="ship_date">Data consegna</string>
<string name="document_date">Data documento</string> <string name="document_date">Data documento</string>
@@ -216,7 +218,7 @@
<string name="gestione_A_L_only_accepted_message">Sono ammesse solo UL di <b>Acquisto</b> o <b>Lavorazione</b> qui</string> <string name="gestione_A_L_only_accepted_message">Sono ammesse solo UL di <b>Acquisto</b> o <b>Lavorazione</b> qui</string>
<string name="gestione_A_V_not_accepted_message"><![CDATA[Le UL di tipo <b>Acquisto</b> o <b>Vendita</b> non sono ammesse qui]]></string> <string name="gestione_A_V_not_accepted_message"><![CDATA[Le UL di tipo <b>Acquisto</b> o <b>Vendita</b> non sono ammesse qui]]></string>
<string name="gestione_V_not_accepted_message"><![CDATA[Le UL di tipo <b>Vendita</b> non sono ammesse qui]]></string> <string name="gestione_V_not_accepted_message"><![CDATA[Le UL di tipo <b>Vendita</b> non sono ammesse qui]]></string>
<string name="too_much_lu_found_message">E\' stata trovata più di una UL</string> <string name="too_much_lu_found_message_in_mono_lu">E\' stata trovata più di una UL in una posizione MONO-UL</string>
<string name="ask_print_message"><![CDATA[Si vuole procedere con la stampa dell\'etichetta?]]></string> <string name="ask_print_message"><![CDATA[Si vuole procedere con la stampa dell\'etichetta?]]></string>
<string name="ask_position_of_lu_message">Scansiona il codice a barre di una <b>Posizione</b></string> <string name="ask_position_of_lu_message">Scansiona il codice a barre di una <b>Posizione</b></string>
<string name="ask_production_line_of_lu_message">Scansiona il codice a barre di una <b>Linea di Produzione</b></string> <string name="ask_production_line_of_lu_message">Scansiona il codice a barre di una <b>Linea di Produzione</b></string>
@@ -257,6 +259,7 @@
<string name="ultime_arrivi_fornitore_title">Ultimi arrivi</string> <string name="ultime_arrivi_fornitore_title">Ultimi arrivi</string>
<string name="exception_printer_not_found">Stampante non trovata</string> <string name="exception_printer_not_found">Stampante non trovata</string>
<string name="exception_no_printer_found">Nessuna stampante trovata</string>
<string name="action_select_all">Seleziona tutto</string> <string name="action_select_all">Seleziona tutto</string>

View File

@@ -74,6 +74,7 @@
<string name="action_create_ul">Create new LU</string> <string name="action_create_ul">Create new LU</string>
<string name="action_insert_quantity">Insert quantity</string> <string name="action_insert_quantity">Insert quantity</string>
<string name="action_insert_weight">Insert weight</string> <string name="action_insert_weight">Insert weight</string>
<string name="action_close_order">Close order</string>
<string name="action_show_created_ul">Show already created LU</string> <string name="action_show_created_ul">Show already created LU</string>
<string name="dialog_input_peso_lu_description">Insert info about LU TYPE and NET / GROSS weight</string> <string name="dialog_input_peso_lu_description">Insert info about LU TYPE and NET / GROSS weight</string>
<string name="lu_info">LU\'s info</string> <string name="lu_info">LU\'s info</string>
@@ -202,6 +203,7 @@
<string name="num_ords">Orders number</string> <string name="num_ords">Orders number</string>
<string name="order_cod_jcoms">Orders job</string> <string name="order_cod_jcoms">Orders job</string>
<string name="customer">Customer</string> <string name="customer">Customer</string>
<string name="job">Job</string>
<string name="recipient">Recipient</string> <string name="recipient">Recipient</string>
<string name="ship_date">Ship date</string> <string name="ship_date">Ship date</string>
<string name="document_date">Document date</string> <string name="document_date">Document date</string>
@@ -219,7 +221,7 @@
<string name="gestione_A_L_only_accepted_message">Only <b>Purchase</b> or <b>Production\'s</b> LU are accepted here</string> <string name="gestione_A_L_only_accepted_message">Only <b>Purchase</b> or <b>Production\'s</b> LU are accepted here</string>
<string name="gestione_A_V_not_accepted_message">The LU of type Purchase or Sale is not accepted here</string> <string name="gestione_A_V_not_accepted_message">The LU of type Purchase or Sale is not accepted here</string>
<string name="gestione_V_not_accepted_message">The LU of type Sale is not accepted here</string> <string name="gestione_V_not_accepted_message">The LU of type Sale is not accepted here</string>
<string name="too_much_lu_found_message">Multiple LU found</string> <string name="too_much_lu_found_message_in_mono_lu">Multiple LU found in MONO-LU position</string>
<string name="ask_print_message">Do you want print the label?</string> <string name="ask_print_message">Do you want print the label?</string>
<string name="ask_position_of_lu_message">Please scan a <b>Position</b> barcode</string> <string name="ask_position_of_lu_message">Please scan a <b>Position</b> barcode</string>
<string name="ask_production_line_of_lu_message">Please scan a <b>Production Line</b> barcode</string> <string name="ask_production_line_of_lu_message">Please scan a <b>Production Line</b> barcode</string>
@@ -262,6 +264,7 @@
<string name="ultime_arrivi_fornitore_title">Latest arrivals</string> <string name="ultime_arrivi_fornitore_title">Latest arrivals</string>
<string name="exception_printer_not_found">Printer not found</string> <string name="exception_printer_not_found">Printer not found</string>
<string name="exception_no_printer_found">No printer found</string>
<string name="action_select_all">Select all</string> <string name="action_select_all">Select all</string>

View File

@@ -10,7 +10,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:4.1.1' classpath 'com.android.tools.build:gradle:4.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4' classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.google.firebase:perf-plugin:1.3.3' classpath 'com.google.firebase:perf-plugin:1.3.3'