Compare commits

...

59 Commits

Author SHA1 Message Date
05bc6e3fbe Finish v1.40.08(425) 2024-04-04 11:54:18 +02:00
38dc5e134c -> v1.40.08 (425) 2024-04-04 11:53:56 +02:00
76cf6c7d66 Fix LocalDate deserializer 2024-04-04 11:52:24 +02:00
21100d517c Finish v1.40.07(424) 2024-03-27 18:16:12 +01:00
37f83cd642 Finish v1.40.07(424) 2024-03-27 18:16:11 +01:00
f29f832387 -> v1.40.07 (424) 2024-03-27 18:16:05 +01:00
dd523ed6d8 Rimossa apertura loading popup che causava crash 2024-03-27 18:15:11 +01:00
879cfc5f7e Fix vari 2024-03-25 12:45:21 +01:00
83a6dd29f2 Aggiornato AGP 2024-03-25 10:58:19 +01:00
cc85d83267 Finish v1.40.06(423) 2024-03-18 12:09:26 +01:00
5d427a258e Finish v1.40.06(423) 2024-03-18 12:09:26 +01:00
75e0a13f10 -> v1.40.06 (423) 2024-03-18 12:09:07 +01:00
0862727176 Fix nessun selezionato filtro gruppo merceologico 2024-03-18 12:06:58 +01:00
6c02fcc9d5 Finish v1.40.05(422) 2024-03-15 18:28:52 +01:00
cd38c1b301 Finish v1.40.05(422) 2024-03-15 18:28:51 +01:00
c822f14a10 -> v1.40.05 (422) 2024-03-15 18:28:29 +01:00
76683cb80c Fix nullPoint List<StatoArtInventarioDTO> in riposizionamento da prod 2024-03-15 18:25:48 +01:00
3041498ff1 Fix modal stato inventario 2024-03-14 16:44:39 +01:00
66e0ce15cb Fix filtro gruppo merceologico in approvvigionamento linee 2024-03-14 15:22:10 +01:00
e12da84fa3 Nel "riposizionamento da produzione" aggiunte le informazioni per "in arrivo" e "in magazzino" 2024-03-14 13:04:48 +01:00
bd4f28eb6d Fix rettifica giacenza 2024-03-13 12:59:26 +01:00
c25b2e6cb5 Aggiunto filtro per per gruppo merceologico in approvvigionamento linee 2024-03-13 11:08:55 +01:00
b86a1eb1bd Nella sezione "rettifica giacenza" aggiunto avviso nell'inserimento di una nuova della partita per articolo 2024-03-12 16:34:52 +01:00
a9b5483005 Refactor nomi varibili setup 2024-03-12 16:10:38 +01:00
29c181cff1 Refactor nomi varibili setup in settinsManager 2024-03-12 16:07:46 +01:00
614da5ec5a Refactor nomi varibili setup 2024-03-12 16:05:58 +01:00
5342f96076 Finish v1.40.04(421) 2024-03-11 17:33:45 +01:00
479950df14 Finish v1.40.04(421) 2024-03-11 17:33:44 +01:00
51fa32d48d -> v1.40.04 (421) 2024-03-11 17:33:38 +01:00
e491c56f3f Merge remote-tracking branch 'origin/develop' into develop 2024-03-11 17:32:28 +01:00
5c505e2fe1 Implementato flag per gestire la qta suggerita in accettazione bolle 2024-03-11 17:32:09 +01:00
67e88d01e7 Implementato in rettifica giacenza avviso se l'articolo che si sta inserendo è attivo o meno 2024-03-11 13:32:08 +01:00
9454614af6 Rimosso tipo report WMS_SPEDIZIONE_ETICHETTE_SSCC_ORD 2024-03-07 16:11:52 +01:00
535a095b0a Finish v1.40.03(420) 2024-03-07 12:10:19 +01:00
c6457ccf1c Finish v1.40.03(420) 2024-03-07 12:10:19 +01:00
3f470df462 -> v1.40.03 (420) 2024-03-07 12:10:04 +01:00
af5c5338b7 Fix linea di impiego in dialog in approv. linee 2024-03-07 12:03:44 +01:00
e832db3214 Finish v1.40.02(419) 2024-03-07 10:17:55 +01:00
8b432d1b19 Finish v1.40.02(419) 2024-03-07 10:17:55 +01:00
d33eb81968 -> v1.40.02 (419) 2024-03-07 10:17:50 +01:00
be60cdb971 Merge remote-tracking branch 'origin/develop' into develop 2024-03-07 10:16:46 +01:00
062f877777 Fix su folder di download degli aggiornamenti 2024-03-07 10:16:37 +01:00
5187564250 Aggiunta setup per dialog info situazione articolo in picking da ordine di lavorazione 2024-03-05 16:22:59 +01:00
fc22c119f6 Finish v1.40.01(418) 2024-03-05 11:08:45 +01:00
dd8b696862 Finish v1.40.01(418) 2024-03-05 11:08:44 +01:00
99a5e162de -> v1.40.01 (418) 2024-03-05 11:08:28 +01:00
84dcf30aac In Accettazione bolla evidenziato di un colore diverso le righe in cui è stata accettata più merce del previsto 2024-03-05 11:04:54 +01:00
388c0641cf Finish v1.40.00(417) 2024-03-04 14:51:40 +01:00
40f2c86eec Finish v1.40.00(417) 2024-03-04 14:51:39 +01:00
34bd0109c0 -> v1.40.00 (417) 2024-03-04 14:50:58 +01:00
b4199f38aa Creata gestione "Articoli in giacenza" 2024-03-04 14:45:25 +01:00
299e066436 Finish v1.39.03(416) 2024-03-01 18:01:33 +01:00
0098fdaf5a Finish v1.39.03(416) 2024-03-01 18:01:32 +01:00
76d26765ef -> v1.39.03 (416) 2024-03-01 18:01:29 +01:00
c5b6e80aaf Merge remote-tracking branch 'origin/develop' into develop 2024-03-01 18:00:46 +01:00
a1b3517b07 Fix su serializzatore GSON 2024-03-01 18:00:28 +01:00
bd3fdd9ab1 Aggiunto filtro descrizione in gestione Riposizionamento da prod 2024-02-26 13:04:31 +01:00
377950c978 Aggiunto try catch per catturare le eccezioni in caso di re-add del dialog di progress 2024-02-22 15:53:42 +01:00
d17e528158 Finish v1.39.02(415) 2024-02-22 12:34:12 +01:00
62 changed files with 2156 additions and 498 deletions

View File

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

View File

@@ -29,6 +29,8 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.sele
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsModule;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule;
import it.integry.integrywmsnative.gest.articoli_in_giacenza.ArticoliInGiacenzaComponent;
import it.integry.integrywmsnative.gest.articoli_in_giacenza.ArticoliInGiacenzaModule;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariComponent;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariModule;
import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions.BottomSheetInventarioActionsComponent;
@@ -206,7 +208,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DialogInfoAggiuntiveLUModule.class,
DialogAskLineaProdModule.class,
ProdRiposizionamentoDaProdModule.class,
DialogInfoGiacenzaModule.class
DialogInfoGiacenzaModule.class,
ArticoliInGiacenzaModule.class
})
public interface MainApplicationComponent {
@@ -346,6 +349,8 @@ public interface MainApplicationComponent {
DialogInfoGiacenzaComponent.Factory dialogInfoGiacenzaComponent();
ArticoliInGiacenzaComponent.Factory controlloGiacenzeComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@@ -5,6 +5,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.MainAccettazioneBollaElencoFragment;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.MainAccettazioneOrdiniElencoFragment;
import it.integry.integrywmsnative.gest.articoli_in_giacenza.ArticoliInGiacenzaFragment;
import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniFragment;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariFragment;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoFragment;
@@ -115,7 +116,7 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleText(R.string.prod_ordine_lavorazione_title_fragment)
.setTitleIcon(R.drawable.ic_dashboard_prod_picking_lavorazione)
.setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, null)))
.setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, SettingsManager.iDB().isFlagProduzioneShowInfo() ? DialogInfoSituazioneArticoloView.class : null)))
.addItem(new MenuItem()
.setID(R.id.nav_free_lav_picking)
@@ -218,6 +219,13 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(ElencoInventariFragment::newInstance))
.addItem(new MenuItem()
.setID(R.id.nav_articoli_in_giacenza)
.setCodMenu("MG070")
.setTitleText(R.string.articoli_in_giacenza_title)
.setTitleIcon(R.drawable.ic_dashboard_articoli_in_giacenza)
.setDrawerIcon(R.drawable.ic_black_empty_box)
.setFragmentFactory(ArticoliInGiacenzaFragment::newInstance))
).addGroup(
new MenuGroup()

View File

@@ -22,6 +22,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.utility.UtilityGson;
@Singleton
public class ColliDataRecoverService {
@@ -108,7 +109,7 @@ public class ColliDataRecoverService {
private void loadLocalFile() {
InputStream inputStream;
Gson gson = new Gson();
Gson gson = UtilityGson.createObject();
try {
inputStream = mApplicationContext.openFileInput(CommonConst.Files.RECOVER_COLLO_FILE);
@@ -130,7 +131,7 @@ public class ColliDataRecoverService {
private void updateLocalFile() {
FileOutputStream outputStream;
Gson gson = new Gson();
Gson gson = UtilityGson.createObject();
String jsonText = gson.toJson(mtbColtsSessions);
try {

View File

@@ -238,8 +238,11 @@ public class Converters {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal value = null;
if (!UtilityString.isNullOrEmpty(s.toString()))
value = new BigDecimal(s.toString());
String newValueString = s.toString().trim();
if (!UtilityString.isNullOrEmpty(newValueString))
value = new BigDecimal(newValueString);
observableBigDecimal.set(value);
}
};
@@ -247,7 +250,7 @@ public class Converters {
view.addTextChangedListener(watcher);
}
BigDecimal newValue = observableBigDecimal.get();
BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : null;
BigDecimal viewValue = !view.getText().toString().trim().isEmpty() ? new BigDecimal(view.getText().toString()) : null;
if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) {
view.setText(UtilityNumber.decimalToString(newValue));

View File

@@ -52,7 +52,11 @@ public class BaseActivity extends AppCompatActivity {
if (!progressOpened && !this.mCurrentProgress.isAdded() && !this.mCurrentProgress.isInLayout()) {
this.progressOpened = true;
runOnUiThread(() -> {
this.mCurrentProgress.show(getSupportFragmentManager(), "tag");
try {
this.mCurrentProgress.show(getSupportFragmentManager(), "tag");
} catch (IllegalStateException ise) {
//ignored
}
});
}
}

View File

@@ -2,8 +2,11 @@ package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
/**
* Created by ValerioC on 06/03/2018.
@@ -39,6 +42,7 @@ public class MvwSitArtUdcDetInventario {
private String codJfas;
private MtbAart mtbAart;
private Integer numOrd;
private Date dataOrd;
public String getGestione() {
return gestione;
@@ -292,6 +296,12 @@ public class MvwSitArtUdcDetInventario {
return this;
}
public String getQtaText(){
String text = UtilityNumber.decimalToString(this.qtaCol);
text += !UtilityString.isNullOrEmpty(this.untMis) ? "\n" + this.untMis : "";
return text;
}
public MtbColr toMtbColr() {
return new MtbColr()
.setCodJcom(getCodJcom())
@@ -309,4 +319,13 @@ public class MvwSitArtUdcDetInventario {
.setPesoLordoKg(getPesoLordoKg())
.setUntMis(getUntMis());
}
public Date getDataOrd() {
return dataOrd;
}
public MvwSitArtUdcDetInventario setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
}

View File

@@ -10,8 +10,6 @@ public enum ReportType {
ETICHETTA_SSCC_LAVORAZIONE(1),
@SerializedName("2")
ETICHETTA_SSCC_SPEDIZIONE(2),
@SerializedName("3")
WMS_SPEDIZIONE_ETICHETTE_SSCC_ORD(3),
@SerializedName("4")
WMS_SPEDIZIONE_PACKING_LIST_ORD(4),
@SerializedName("5")

View File

@@ -40,7 +40,7 @@ public class EntityRESTConsumer extends _BaseRESTConsumer {
if (response.body() != null) {
if (response.body().getEsito() == EsitoType.OK) {
Gson gson = new Gson();
Gson gson = UtilityGson.createObject();
T object = gson.fromJson(response.body().getEntity(), type);
callback.onSuccess(object);
@@ -133,7 +133,7 @@ public class EntityRESTConsumer extends _BaseRESTConsumer {
if (response.body() != null) {
if (response.body().getEsito() == EsitoType.OK) {
Gson gson = new Gson();
Gson gson = UtilityGson.createObject();
List<JsonObject> jsons = response.body().getEntityList();
List<T> newList = new ArrayList<T>();

View File

@@ -41,27 +41,31 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
public void onResponse(Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> call, Response<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> response) {
analyzeAnswer(response, "getGiacenzeInPosizione", inventarioList -> {
List<String> codMarts = Stream.of(inventarioList)
.map(x -> x.getCodMart().trim())
.toList();
if(inventarioList != null && !inventarioList.isEmpty()){
List<String> codMarts = Stream.of(inventarioList)
.map(x -> x.getCodMart().trim())
.toList();
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var row : inventarioList) {
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var row : inventarioList) {
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))
.findFirst();
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))
.findFirst();
if (mtbAartOpt.isPresent()) {
foundMtbAart = mtbAartOpt.get();
if (mtbAartOpt.isPresent()) {
foundMtbAart = mtbAartOpt.get();
}
row.setMtbAart(foundMtbAart);
}
row.setMtbAart(foundMtbAart);
}
onComplete.run(inventarioList);
}, onFailed);
onComplete.run(inventarioList);
}, onFailed);
}else{
onComplete.run(new ArrayList<>());
}
}, onFailed);
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.core.rest.consumers;
import androidx.annotation.NonNull;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@@ -10,6 +12,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@@ -86,4 +89,20 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
}
});
}
public void retrievePartitaMag(String partitaMag, String codMart, RunnableArgs<MtbPartitaMag> onComplete, RunnableArgs<Exception> onFailed){
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.retrievePartitaMag(codMart, partitaMag)
.enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<ServiceRESTResponse<MtbPartitaMag>> call, @NonNull Response<ServiceRESTResponse<MtbPartitaMag>> response) {
analyzeAnswer(response, "retrievePartitaMag", onComplete, onFailed);
}
@Override
public void onFailure(@NonNull Call<ServiceRESTResponse<MtbPartitaMag>> call, @NonNull Throwable t) {
onFailed.run(new Exception(t));
}
});
}
}

View File

@@ -3,11 +3,14 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface MagazzinoRESTConsumerService {
@@ -17,4 +20,8 @@ public interface MagazzinoRESTConsumerService {
@POST("SM2SaveTerminalino")
Call<List<ServiceRESTResponse<DtbOrdt>>> saveOrdine(@Body SaveDTO saveDTO);
@GET("wms/partita-magazzino/retrievePartitaMag")
Call<ServiceRESTResponse<MtbPartitaMag>> retrievePartitaMag(@Query("codMart") String codMart,
@Query("partitaMag") String partitaMag);
}

View File

@@ -157,6 +157,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
}
public void printClosedOrders(PrintOrderCloseDTO dto, String codMdep, Runnable onComplete, RunnableArgs<Exception> onFailed) {
if (BuildConfig.DEBUG) {
onComplete.run();
return;
}
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto);

View File

@@ -32,6 +32,7 @@ import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.system.RegisterDeviceRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityGson;
import it.integry.integrywmsnative.core.utility.UtilityString;
import retrofit2.Call;
import retrofit2.Callback;
@@ -72,15 +73,7 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "ProcessSql", o -> {
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, (JsonDeserializer<?>) (json, typeOfT, context) -> {
try {
return UtilityDate.recognizeDate(json.getAsString());
} catch (Exception e) {
throw new JsonParseException(e);
}
})
.create();
Gson gson = UtilityGson.createObject();
String json = gson.toJson(o);

View File

@@ -13,15 +13,13 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
public class LocalDateDeserializer implements JsonDeserializer<LocalDate> {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH);
@Override
public LocalDate deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
String date = element.getAsString();
if (UtilityString.isNullOrEmpty(date)) return null;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UtilityString.determineDateFormat(date));
return LocalDate.parse(date, formatter);
}
}

View File

@@ -20,7 +20,6 @@ public class DBSettingsModel {
private boolean enableCheckPartitaMagCheckPickingV;
private boolean flagMultiClienteOrdV;
private boolean flagUseCodAnagAziendale;
private String defaultCausaleRettificaGiacenze;
private boolean flagAskClienteInPickingLibero;
private boolean flagPickLiberoAllowEmptyCliente;
@@ -28,7 +27,6 @@ public class DBSettingsModel {
private boolean flagCanAutoOpenNewULAccettazione;
private boolean flagCanAddExtraQuantitySpedizione;
private boolean flagEnableCheckDepositoSpedizione;
private boolean flagUseNewPickingListSpedizione;
private boolean flagVersamentoDirettoProduzione;
private boolean flagAskPesoColloSpedizione;
private boolean flagForceAllToColli;
@@ -62,18 +60,21 @@ public class DBSettingsModel {
private String commessaMagazzino;
private boolean flagGeneraDocumentoSpedizione = false;
private boolean flagIsInventarioCacheEnabled = false;
private boolean flagAskPrintUlAccettazioneBolla = false;
private boolean flagAskTipoColloAccettazioneBolla = false;
private boolean flagAskVersamentoAutomaticoAccettazioneBolla = false;
private boolean flagCanAddUnknownItemsAccettazioneBolla = false;
private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false;
private boolean flagEnableFastPickAccettazioneBolla = false;
private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false;
private boolean flagAllowULRecoverAccettazioneBolla = true;
private boolean flagOverflowQuantityWarning = false;
private boolean flagAccettazioneBollaAskPrintUl = false;
private boolean flagAccettazioneBollaAskTipoCollo = false;
private boolean flagAccettazioneBollaAskVersamentoAutomatico = false;
private boolean flagAccettazioneBollaCanAddUnknownItems = false;
private boolean flagAccettazioneBollaCanAddUnknownBarcodes = false;
private boolean flagAccettazioneBollaEnableFastPick = false;
private boolean flagAccettazioneBollaDisableMandatoryTracciabilita = false;
private boolean flagAccettazioneBollaAllowULRecover = true;
private boolean flagSpedizioneOverflowQuantityWarning = false;
private String viewPosizioni;
private boolean flagDeleteRowOnClose = false;
private boolean flagAllowBarcodeFornitore = false;
private boolean flagAccettazioneDeleteRowOnClose = false;
private boolean flagAccettazioneAllowBarcodeFornitore = false;
private boolean flagProduzioneShowInfo = false;
private boolean flagAccettazioneBollaUseQtaOrd = true;
private boolean flagWarningNewPartitaMag = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza;
@@ -490,84 +491,84 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagAskPrintUlAccettazioneBolla() {
return flagAskPrintUlAccettazioneBolla;
public boolean isFlagAccettazioneBollaAskPrintUl() {
return flagAccettazioneBollaAskPrintUl;
}
public DBSettingsModel setFlagAskPrintUlAccettazioneBolla(boolean flagAskPrintUlAccettazioneBolla) {
this.flagAskPrintUlAccettazioneBolla = flagAskPrintUlAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaAskPrintUl(boolean flagAccettazioneBollaAskPrintUl) {
this.flagAccettazioneBollaAskPrintUl = flagAccettazioneBollaAskPrintUl;
return this;
}
public boolean isFlagAskTipoColloAccettazioneBolla() {
return flagAskTipoColloAccettazioneBolla;
public boolean isFlagAccettazioneBollaAskTipoCollo() {
return flagAccettazioneBollaAskTipoCollo;
}
public DBSettingsModel setFlagAskTipoColloAccettazioneBolla(boolean flagAskTipoColloAccettazioneBolla) {
this.flagAskTipoColloAccettazioneBolla = flagAskTipoColloAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaAskTipoCollo(boolean flagAccettazioneBollaAskTipoCollo) {
this.flagAccettazioneBollaAskTipoCollo = flagAccettazioneBollaAskTipoCollo;
return this;
}
public boolean isFlagAskVersamentoAutomaticoAccettazioneBolla() {
return flagAskVersamentoAutomaticoAccettazioneBolla;
public boolean isFlagAccettazioneBollaAskVersamentoAutomatico() {
return flagAccettazioneBollaAskVersamentoAutomatico;
}
public DBSettingsModel setFlagAskVersamentoAutomaticoAccettazioneBolla(boolean flagAskVersamentoAutomaticoAccettazioneBolla) {
this.flagAskVersamentoAutomaticoAccettazioneBolla = flagAskVersamentoAutomaticoAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaAskVersamentoAutomatico(boolean flagAccettazioneBollaAskVersamentoAutomatico) {
this.flagAccettazioneBollaAskVersamentoAutomatico = flagAccettazioneBollaAskVersamentoAutomatico;
return this;
}
public boolean isFlagCanAddUnknownItemsAccettazioneBolla() {
return flagCanAddUnknownItemsAccettazioneBolla;
public boolean isFlagAccettazioneBollaCanAddUnknownItems() {
return flagAccettazioneBollaCanAddUnknownItems;
}
public DBSettingsModel setFlagCanAddUnknownItemsAccettazioneBolla(boolean flagCanAddUnknownItemsAccettazioneBolla) {
this.flagCanAddUnknownItemsAccettazioneBolla = flagCanAddUnknownItemsAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaCanAddUnknownItems(boolean flagAccettazioneBollaCanAddUnknownItems) {
this.flagAccettazioneBollaCanAddUnknownItems = flagAccettazioneBollaCanAddUnknownItems;
return this;
}
public boolean isFlagCanAddUnknownBarcodesAccettazioneBolla() {
return flagCanAddUnknownBarcodesAccettazioneBolla;
public boolean isFlagAccettazioneBollaCanAddUnknownBarcodes() {
return flagAccettazioneBollaCanAddUnknownBarcodes;
}
public DBSettingsModel setFlagCanAddUnknownBarcodesAccettazioneBolla(boolean flagCanAddUnknownBarcodesAccettazioneBolla) {
this.flagCanAddUnknownBarcodesAccettazioneBolla = flagCanAddUnknownBarcodesAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaCanAddUnknownBarcodes(boolean flagAccettazioneBollaCanAddUnknownBarcodes) {
this.flagAccettazioneBollaCanAddUnknownBarcodes = flagAccettazioneBollaCanAddUnknownBarcodes;
return this;
}
public boolean isFlagEnableFastPickAccettazioneBolla() {
return flagEnableFastPickAccettazioneBolla;
public boolean isFlagAccettazioneBollaEnableFastPick() {
return flagAccettazioneBollaEnableFastPick;
}
public DBSettingsModel setFlagEnableFastPickAccettazioneBolla(boolean flagEnableFastPickAccettazioneBolla) {
this.flagEnableFastPickAccettazioneBolla = flagEnableFastPickAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaEnableFastPick(boolean flagAccettazioneBollaEnableFastPick) {
this.flagAccettazioneBollaEnableFastPick = flagAccettazioneBollaEnableFastPick;
return this;
}
public boolean isFlagDisableMandatoryTracciabilitaAccettazioneBolla() {
return flagDisableMandatoryTracciabilitaAccettazioneBolla;
public boolean isFlagAccettazioneBollaDisableMandatoryTracciabilita() {
return flagAccettazioneBollaDisableMandatoryTracciabilita;
}
public DBSettingsModel setFlagDisableMandatoryTracciabilitaAccettazioneBolla(boolean flagDisableMandatoryTracciabilitaAccettazioneBolla) {
this.flagDisableMandatoryTracciabilitaAccettazioneBolla = flagDisableMandatoryTracciabilitaAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaDisableMandatoryTracciabilita(boolean flagAccettazioneBollaDisableMandatoryTracciabilita) {
this.flagAccettazioneBollaDisableMandatoryTracciabilita = flagAccettazioneBollaDisableMandatoryTracciabilita;
return this;
}
public boolean isFlagAllowULRecoverAccettazioneBolla() {
return flagAllowULRecoverAccettazioneBolla;
public boolean isFlagAccettazioneBollaAllowULRecover() {
return flagAccettazioneBollaAllowULRecover;
}
public DBSettingsModel setFlagAllowULRecoverAccettazioneBolla(boolean flagAllowULRecoverAccettazioneBolla) {
this.flagAllowULRecoverAccettazioneBolla = flagAllowULRecoverAccettazioneBolla;
public DBSettingsModel setFlagAccettazioneBollaAllowULRecover(boolean flagAccettazioneBollaAllowULRecover) {
this.flagAccettazioneBollaAllowULRecover = flagAccettazioneBollaAllowULRecover;
return this;
}
public boolean isFlagOverflowQuantityWarning() {
return flagOverflowQuantityWarning;
public boolean isFlagSpedizioneOverflowQuantityWarning() {
return flagSpedizioneOverflowQuantityWarning;
}
public DBSettingsModel setFlagOverflowQuantityWarning(boolean flagOverflowQuantityWarning) {
this.flagOverflowQuantityWarning = flagOverflowQuantityWarning;
public DBSettingsModel setFlagSpedizioneOverflowQuantityWarning(boolean flagSpedizioneOverflowQuantityWarning) {
this.flagSpedizioneOverflowQuantityWarning = flagSpedizioneOverflowQuantityWarning;
return this;
}
@@ -589,21 +590,47 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagDeleteRowOnClose() {
return flagDeleteRowOnClose;
public boolean isFlagAccettazioneDeleteRowOnClose() {
return flagAccettazioneDeleteRowOnClose;
}
public DBSettingsModel setFlagDeleteRowOnClose(boolean flagDeleteRowOnClose) {
this.flagDeleteRowOnClose = flagDeleteRowOnClose;
public DBSettingsModel setFlagAccettazioneDeleteRowOnClose(boolean flagAccettazioneDeleteRowOnClose) {
this.flagAccettazioneDeleteRowOnClose = flagAccettazioneDeleteRowOnClose;
return this;
}
public boolean isFlagAllowBarcodeFornitore() {
return flagAllowBarcodeFornitore;
public boolean isFlagAccettazioneAllowBarcodeFornitore() {
return flagAccettazioneAllowBarcodeFornitore;
}
public DBSettingsModel setFlagAllowBarcodeFornitore(boolean flagAllowBarcodeFornitore) {
this.flagAllowBarcodeFornitore = flagAllowBarcodeFornitore;
public DBSettingsModel setFlagAccettazioneAllowBarcodeFornitore(boolean flagAccettazioneAllowBarcodeFornitore) {
this.flagAccettazioneAllowBarcodeFornitore = flagAccettazioneAllowBarcodeFornitore;
return this;
}
public boolean isFlagProduzioneShowInfo() {
return flagProduzioneShowInfo;
}
public DBSettingsModel setFlagProduzioneShowInfo(boolean flagProduzioneShowInfo) {
this.flagProduzioneShowInfo = flagProduzioneShowInfo;
return this;
}
public boolean isFlagAccettazioneBollaUseQtaOrd() {
return flagAccettazioneBollaUseQtaOrd;
}
public void setFlagAccettazioneBollaUseQtaOrd(boolean flagAccettazioneBollaUseQtaOrd) {
this.flagAccettazioneBollaUseQtaOrd = flagAccettazioneBollaUseQtaOrd;
}
public boolean isFlagWarningNewPartitaMag() {
return flagWarningNewPartitaMag;
}
public DBSettingsModel setFlagWarningNewPartitaMag(boolean flagWarningNewPartitaMag) {
this.flagWarningNewPartitaMag = flagWarningNewPartitaMag;
return this;
}
}

View File

@@ -246,7 +246,7 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("ACCETTAZIONE")
.setKeySection("FLAG_DELETE_ROW_ON_CLOSE")
.setSetter(dbSettingsModelIstance::setFlagDeleteRowOnClose));
.setSetter(dbSettingsModelIstance::setFlagAccettazioneDeleteRowOnClose));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
@@ -283,6 +283,12 @@ public class SettingsManager {
.setKeySection("FLAG_GROUP_BY_GRP_MERC")
.setSetter(dbSettingsModelIstance::setGroupPoductionByCommodityGroup)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("FLAG_SHOW_INFO")
.setSetter(dbSettingsModelIstance::setFlagProduzioneShowInfo)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING")
.setSection("PRODUZIONE")
@@ -443,61 +449,73 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ASK_PRINT_UL")
.setSetter(dbSettingsModelIstance::setFlagAskPrintUlAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAskPrintUl)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ASK_TIPO_COLLO")
.setSetter(dbSettingsModelIstance::setFlagAskTipoColloAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAskTipoCollo)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ASK_VERSAMENTO_AUTOMATICO")
.setSetter(dbSettingsModelIstance::setFlagAskVersamentoAutomaticoAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAskVersamentoAutomatico)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_CAN_ADD_UNKNOWN_ITEMS")
.setSetter(dbSettingsModelIstance::setFlagCanAddUnknownItemsAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaCanAddUnknownItems)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_CAN_ADD_UNKNOWN_BARCODES")
.setSetter(dbSettingsModelIstance::setFlagCanAddUnknownBarcodesAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaCanAddUnknownBarcodes)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ENABLE_FAST_PICK")
.setSetter(dbSettingsModelIstance::setFlagEnableFastPickAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaEnableFastPick)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_DISABLE_MANDATORY_TRACCIABILITA")
.setSetter(dbSettingsModelIstance::setFlagDisableMandatoryTracciabilitaAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaDisableMandatoryTracciabilita)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_ALLOW_UL_RECOVER")
.setSetter(dbSettingsModelIstance::setFlagAllowULRecoverAccettazioneBolla)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaAllowULRecover)
.setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_OVERFLOW_QUANTITY_WARNING")
.setSetter(dbSettingsModelIstance::setFlagOverflowQuantityWarning)
.setSetter(dbSettingsModelIstance::setFlagSpedizioneOverflowQuantityWarning)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE")
.setKeySection("FLAG_ALLOW_BARCODE_FORNITORE")
.setSetter(dbSettingsModelIstance::setFlagAllowBarcodeFornitore)
.setSetter(dbSettingsModelIstance::setFlagAccettazioneAllowBarcodeFornitore)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA")
.setKeySection("FLAG_USE_QTA_ORD")
.setSetter(dbSettingsModelIstance::setFlagAccettazioneBollaUseQtaOrd)
.setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SETUP")
.setKeySection("FLAG_WARNING_NEW_PARTITA_MAG")
.setSetter(dbSettingsModelIstance::setFlagWarningNewPartitaMag)
.setDefaultValue(false));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();

View File

@@ -48,7 +48,7 @@ public class UpdatesManager {
private void installAPK(String downloadURL) {
String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
File destination = mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
var progressDialogBuilder = new DialogProgressView("Download", null, false);
progressDialogBuilder.show(mContext.getSupportFragmentManager(), "tag");
@@ -74,10 +74,10 @@ public class UpdatesManager {
intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
fileLoc = GenericFileProvider.getUriForFile(mContext,
mContext.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider",
new File(destPath));
destPath);
} else {
intent = new Intent(Intent.ACTION_VIEW);
fileLoc = Uri.fromFile(new File(destPath));
fileLoc = Uri.fromFile(destPath);
}
intent.setDataAndType(fileLoc, "application/vnd.android.package-archive");

View File

@@ -15,23 +15,20 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class FileDownloader {
private String urlString;
private String destFolder;
private File destFolder;
private RunnableArgs<Integer> onProgressUpdate;
private RunnableArgs<String> onDownloadCompleted;
private RunnableArgs<File> onDownloadCompleted;
public void download() throws Exception {
InputStream input = null;
OutputStream output = null;
HttpURLConnection connection = null;
String destPathFile;
File downloadFile = null;
try {
File direct = new File(destFolder);
if (!direct.exists()) {
direct.mkdirs();
}
if (!destFolder.exists()) destFolder.mkdirs();
URL url = new URL(urlString);
connection = (HttpURLConnection) url.openConnection();
@@ -46,13 +43,12 @@ public class FileDownloader {
int downloadedBytes = 0;
String title = URLUtil.guessFileName(String.valueOf(url), null, null);
downloadFile = new File(destFolder, title);
destPathFile = destFolder + title;
if (downloadFile.exists())
downloadFile.delete();
if (new File(destPathFile).exists())
new File(destPathFile).delete();
output = new FileOutputStream(destPathFile);
output = new FileOutputStream(downloadFile);
byte[] buf = new byte[1024];
int len;
@@ -79,7 +75,7 @@ public class FileDownloader {
connection.disconnect();
}
if (onDownloadCompleted != null) onDownloadCompleted.run(destPathFile);
if (onDownloadCompleted != null) onDownloadCompleted.run(downloadFile);
}
@@ -92,11 +88,11 @@ public class FileDownloader {
return this;
}
public String getDestFolder() {
public File getDestFolder() {
return destFolder;
}
public FileDownloader setDestFolder(String destFolder) {
public FileDownloader setDestFolder(File destFolder) {
this.destFolder = destFolder;
return this;
}
@@ -106,7 +102,7 @@ public class FileDownloader {
return this;
}
public FileDownloader setOnDownloadCompleted(RunnableArgs<String> onDownloadCompleted) {
public FileDownloader setOnDownloadCompleted(RunnableArgs<File> onDownloadCompleted) {
this.onDownloadCompleted = onDownloadCompleted;
return this;
}

View File

@@ -15,7 +15,7 @@ import java.util.regex.Pattern;
public class UtilityString {
public static boolean isNullOrEmpty(String stringToCheck){
return stringToCheck == null || stringToCheck.trim().length() == 0;
return stringToCheck == null || stringToCheck.trim().isEmpty();
}
public static String isNull(String stringToCheck, String alternativeString){
@@ -23,7 +23,7 @@ public class UtilityString {
}
public static String empty2null(String stringToCheck) {
return (stringToCheck == null || stringToCheck.trim().length() == 0) ? null : stringToCheck.trim();
return (stringToCheck == null || stringToCheck.trim().isEmpty()) ? null : stringToCheck.trim();
}
public static String capitalizeWords(String capString){

View File

@@ -153,7 +153,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
// this.initFilters();
this.initFab();
boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneBollaUseQtaOrd();
mViewModel.setListeners(this);
mViewModel.init(
@@ -221,7 +221,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
fabPopupMenu.setForceShowIcon(true);
fabPopupMenu.getMenuInflater().inflate(R.menu.accettazione_ordine_inevaso_fab_menu, fabPopupMenu.getMenu());
fabPopupMenu.getMenu().findItem(R.id.show_created_ul).setVisible(SettingsManager.iDB().isFlagAllowULRecoverAccettazioneBolla());
fabPopupMenu.getMenu().findItem(R.id.show_created_ul).setVisible(SettingsManager.iDB().isFlagAccettazioneBollaAllowULRecover());
fabPopupMenu.setOnMenuItemClickListener(item -> {
int itemId = item.getItemId();
@@ -526,7 +526,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(true)
.setCanOverflowOrderQuantity(canOverflowQuantity)
.setDisableTracciabilitaCheck(SettingsManager.iDB().isFlagDisableMandatoryTracciabilitaAccettazioneBolla());
.setDisableTracciabilitaCheck(SettingsManager.iDB().isFlagAccettazioneBollaDisableMandatoryTracciabilita());
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View

View File

@@ -356,7 +356,7 @@ public class AccettazioneBollaPickingViewModel {
private void manageUnknownBarcode(String barcode, Runnable onComplete) {
if (SettingsManager.iDB().isFlagCanAddUnknownBarcodesAccettazioneBolla()) {
if (SettingsManager.iDB().isFlagAccettazioneBollaCanAddUnknownBarcodes()) {
//TODO: Implementare popup che richiede delle note aggiuntive sul barcode scansionato
this.sendOnUnknownBarcodeScanned(barcode, notes -> {
this.manageDispatchBollaRow(new PickingObjectDTO()
@@ -376,7 +376,7 @@ public class AccettazioneBollaPickingViewModel {
private void manageNoArtFound(MtbAart mtbAart, PickDataDTO pickDataDTO) {
if (SettingsManager.iDB().isFlagCanAddUnknownItemsAccettazioneBolla()) {
if (SettingsManager.iDB().isFlagAccettazioneBollaCanAddUnknownItems()) {
this.manageDispatchBollaRow(new PickingObjectDTO()
.setMtbAart(mtbAart)
@@ -410,7 +410,7 @@ public class AccettazioneBollaPickingViewModel {
}
private void manageInfoAggiuntiveRequest(RunnableArgss<String, MtbTCol> onComplete) {
if (!SettingsManager.iDB().isFlagAskTipoColloAccettazioneBolla()) {
if (!SettingsManager.iDB().isFlagAccettazioneBollaAskTipoCollo()) {
onComplete.run(null, null);
return;
}
@@ -420,15 +420,15 @@ public class AccettazioneBollaPickingViewModel {
public void manageDispatchBollaRow(final PickingObjectDTO pickingObjectDTO) {
String partitaMag = null;
if(pickingObjectDTO.getTempPickData() != null){
if(pickingObjectDTO.getTempPickData().getManualPickDTO() != null){
if(pickingObjectDTO.getTempPickData().getManualPickDTO().getMtbPartitaMag() != null){
if (pickingObjectDTO.getTempPickData() != null) {
if (pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
if (pickingObjectDTO.getTempPickData().getManualPickDTO().getMtbPartitaMag() != null) {
partitaMag = pickingObjectDTO.getTempPickData().getManualPickDTO().getMtbPartitaMag().getPartitaMag();
}
}
}
if (SettingsManager.iDB().isFlagEnableFastPickAccettazioneBolla()) {
if (SettingsManager.iDB().isFlagAccettazioneBollaEnableFastPick()) {
this.saveNewRow(pickingObjectDTO,
BigDecimal.ONE,
pickingObjectDTO.getMtbAart().getQtaCnf(),
@@ -550,11 +550,15 @@ public class AccettazioneBollaPickingViewModel {
initialQtaTot = mtbAart.getQtaCnf();
}
if (!this.mUseQtaBolla &&
UtilityBigDecimal.greaterThan(pickingObjectDTO.getMtbAart().getColliPedana(), BigDecimal.ZERO) &&
UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
if (!this.mUseQtaBolla) {
if (UtilityBigDecimal.greaterThan(pickingObjectDTO.getMtbAart().getColliPedana(), BigDecimal.ZERO) &&
UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
} else if(UtilityBigDecimal.greaterThan(initialNumCnf, BigDecimal.ONE) && pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) {
initialNumCnf = BigDecimal.ONE;
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
}
}
if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
@@ -603,7 +607,8 @@ public class AccettazioneBollaPickingViewModel {
}
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal
qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) {
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
resetMatchedRows();
@@ -691,7 +696,8 @@ public class AccettazioneBollaPickingViewModel {
});
}
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) {
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal
qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
MtbColr mtbColrClone = (MtbColr) mtbColrToUpdate.clone();
@@ -802,7 +808,7 @@ public class AccettazioneBollaPickingViewModel {
private void manageVersamentoAutomatico(Runnable onComplete) {
if (!SettingsManager.iDB().isFlagAskVersamentoAutomaticoAccettazioneBolla()) {
if (!SettingsManager.iDB().isFlagAccettazioneBollaAskVersamentoAutomatico()) {
onComplete.run();
return;
}
@@ -825,7 +831,7 @@ public class AccettazioneBollaPickingViewModel {
}
private void managePrintCollo(Runnable onComplete) {
if (!mCurrentMtbColt.getDisablePrint() || !SettingsManager.iDB().isFlagAskPrintUlAccettazioneBolla()) {
if (!mCurrentMtbColt.getDisablePrint() || !SettingsManager.iDB().isFlagAccettazioneBollaAskPrintUl()) {
onComplete.run();
return;
}
@@ -998,12 +1004,14 @@ public class AccettazioneBollaPickingViewModel {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
}
private void notifyVersamentoAutomaticoResult(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
private void notifyVersamentoAutomaticoResult(VersamentoAutomaticoULResponseDTO
versamentoAutomaticoULResponseDTO, Runnable onComplete) {
if (this.mListener != null)
mListener.onULVersata(versamentoAutomaticoULResponseDTO, onComplete);
}
private void sendOnUnknownBarcodeScanned(String barocde, RunnableArgs<String> onComplete, Runnable onAbort) {
private void sendOnUnknownBarcodeScanned(String
barocde, RunnableArgs<String> onComplete, Runnable onAbort) {
if (this.mListener != null)
mListener.onUnknownBarcodeScanned(barocde, onComplete, onAbort);
}

View File

@@ -101,7 +101,9 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
public void onBindItemViewHolder(final AccettazioneBollaPickingListAdapter.SingleItemViewHolder holder, final int position) {
AccettazioneBollaPickingListModel pickingObjectDTO = this.mDataset.get(position);
if (pickingObjectDTO.getQtaEvasa().subtract(pickingObjectDTO.getQtaTot()).floatValue() >= 0) {
if (pickingObjectDTO.getQtaEvasa().subtract(pickingObjectDTO.getQtaTot()).floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.blue_100));
} else if (pickingObjectDTO.getQtaEvasa().subtract(pickingObjectDTO.getQtaTot()).floatValue() == 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if (pickingObjectDTO.getQtaEvasa().floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));

View File

@@ -214,7 +214,7 @@ public class AccettazioneOrdiniPickingViewModel {
//dell'etichetta anonima
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
if (SettingsManager.iDB().isFlagAllowBarcodeFornitore() && UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
if (SettingsManager.iDB().isFlagAccettazioneAllowBarcodeFornitore() && UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeSSCCFornitore(barcodeScanDTO, onComplete);
} else {
this.processBarcodeNotOpenedLU(barcodeScanDTO, null, onComplete);
@@ -815,7 +815,7 @@ public class AccettazioneOrdiniPickingViewModel {
}
private void calculateQtaDaEvadere() {
if (SettingsManager.iDB().isFlagDeleteRowOnClose()) {
if (SettingsManager.iDB().isFlagAccettazioneDeleteRowOnClose()) {
for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) {
List<MtbColr> withdrawMtbColrs = pickingObjectDTO.getWithdrawMtbColrs();
BigDecimal qtaEvasa = BigDecimal.ZERO;

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.articoli_in_giacenza;
import dagger.Subcomponent;
@Subcomponent
public interface ArticoliInGiacenzaComponent {
@Subcomponent.Factory
interface Factory {
ArticoliInGiacenzaComponent create();
}
void inject(ArticoliInGiacenzaFragment ControlloGiacenzeFragment);
}

View File

@@ -0,0 +1,139 @@
package it.integry.integrywmsnative.gest.articoli_in_giacenza;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.databinding.FragmentArticoliInGiacenzaBinding;
import it.integry.integrywmsnative.databinding.ListaGiacenzePerPosizioneModelBinding;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
public class ArticoliInGiacenzaFragment extends BaseFragment implements ITitledFragment, ArticoliInGiacenzaViewModel.Listener {
@Inject
ArticoliInGiacenzaViewModel mViewModel;
private FragmentArticoliInGiacenzaBinding mBindings;
private final ObservableArrayList<MvwSitArtUdcDetInventario> mItemsInventario = new ObservableArrayList<>();
public ArticoliInGiacenzaFragment() {
// Required empty public constructor
}
public static ArticoliInGiacenzaFragment newInstance() {
return new ArticoliInGiacenzaFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_articoli_in_giacenza, container, false);
MainApplication.appComponent
.controlloGiacenzeComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
return mBindings.getRoot();
}
private void initRecyclerView() {
mViewModel.getMvwSitArtUdcDetInventario().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
this.refreshList(null);
});
var itemType = new Type<MvwSitArtUdcDetInventario, ListaGiacenzePerPosizioneModelBinding>(R.layout.lista_giacenze_per_posizione_model, BR.item);
new LiveAdapter(mItemsInventario)
.map(MvwSitArtUdcDetInventario.class, itemType)
.into(this.mBindings.inventarioList);
}
public void refreshList(List<MvwSitArtUdcDetInventario> filteredList) {
List<MvwSitArtUdcDetInventario> tmpList;
if (filteredList != null) {
tmpList = filteredList;
} else {
tmpList = mViewModel.getMvwSitArtUdcDetInventario().getValue();
}
this.mItemsInventario.clear();
if (tmpList != null) {
this.mItemsInventario.addAll(tmpList);
}
}
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.articoli_in_giacenza_title).toString());
}
@Override
public void onStart() {
super.onStart();
mViewModel.init();
}
@Override
public void onDestroy() {
mViewModel.setListener(null);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
}
@Override
public void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
choosePosition(onComplete);
}
}

View File

@@ -0,0 +1,16 @@
package it.integry.integrywmsnative.gest.articoli_in_giacenza;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.services.inventario.InventarioService;
@Module(subcomponents = ArticoliInGiacenzaComponent.class)
public class ArticoliInGiacenzaModule {
@Provides
ArticoliInGiacenzaViewModel providesControlloGiacenzeViewModel(InventarioService inventarioService) {
return new ArticoliInGiacenzaViewModel(inventarioService);
}
}

View File

@@ -0,0 +1,68 @@
package it.integry.integrywmsnative.gest.articoli_in_giacenza;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.services.inventario.InventarioService;
public class ArticoliInGiacenzaViewModel {
private final InventarioService mInventarioService;
private final MutableLiveData<List<MvwSitArtUdcDetInventario>> mvwSitArtUdcDetInventario = new MutableLiveData<>();
private Listener mListener;
public ArticoliInGiacenzaViewModel(InventarioService inventarioService){
this.mInventarioService = inventarioService;
}
public void init() {
this.sendRequestChoosePosition(this::setPosizione);
}
private void setPosizione(MtbDepoPosizione posizione){
if (posizione == null) {
//Nessuna posizione trovata con questo barcode
this.sendError(new ScannedPositionNotExistException());
}else{
this.sendOnLoadingStarted();
mInventarioService.getInventarioDaPosizione(posizione, inventario -> {
mvwSitArtUdcDetInventario.postValue(inventario);
this.sendOnLoadingEnded();
}, this::sendError);
}
}
public MutableLiveData<List<MvwSitArtUdcDetInventario>> getMvwSitArtUdcDetInventario() {
return mvwSitArtUdcDetInventario;
}
public void setListener(Listener listener) {
this.mListener = listener;
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
private void sendRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
if (this.mListener != null) mListener.onRequestChoosePosition(onComplete);
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete);
}
}

View File

@@ -125,7 +125,12 @@ public class DocInterniEditFormViewModel {
}
public void loadArticoloByCodMartOrBarcode(String codMart) {
var matchedArt = Stream.of(productsList)
if(productsList == null) {
this.sendError(new NoResultFromCodMartException(codMart));
return;
}
var matchedArt = productsList.stream()
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart) ||
x.getBarcode().contains(codMart))
.findFirst()

View File

@@ -529,9 +529,9 @@ public class PickingLiberoViewModel {
this.sendArtSelectionRequest(mtbColrsToPick, mtbAart, pickedAarts -> {
List<MtbColr> destNewMtbColr = new ArrayList<>();
if (pickedAarts.size() > 0) {
if (!pickedAarts.isEmpty()) {
askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> {
if (destNewMtbColr.size() > 0) {
if (!destNewMtbColr.isEmpty()) {
MtbColt clonedTestata = (MtbColt) this.mCurrentMtbColt.clone();
clonedTestata.setOperation(CommonModelConsts.OPERATION.UPDATE);
@@ -563,8 +563,6 @@ public class PickingLiberoViewModel {
clonedTestata.setMtbColr(mtbColrObservableField);
this.sendOnLoadingStarted();
new Thread(() -> {
mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> {
for (int i = 0; i < mtbColrObservableField.size(); i++) {

View File

@@ -2,19 +2,27 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import java.util.HashMap;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
public class ProdFabbisognoLineeProdBindings {
public static final int NUM_ORD_FILTER_ID = 0;
public static final int MGRP_FILTER_ID = 1;
public static final HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {{
put(NUM_ORD_FILTER_ID, new FilterChipDTO()
.setID(NUM_ORD_FILTER_ID)
.setPosizione(0)
.setFilterChipText("Numero ordine")
.setFilterLayoutView(new FilterNumeroOrdineLayoutView()));
put(MGRP_FILTER_ID, new FilterChipDTO()
.setID(MGRP_FILTER_ID)
.setPosizione(1)
.setFilterChipText("Gruppo merceologico")
.setFilterLayoutView(new FilterGruppoMercLayoutView()));
}};
}

View File

@@ -22,6 +22,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.inject.Inject;
@@ -33,8 +34,13 @@ import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.JtbComt;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@@ -44,6 +50,7 @@ import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeListSi
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeTitleItemBinding;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.GroupTitleModel;
@@ -68,11 +75,17 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
@Inject
ProdFabbisognoLineeProdViewModel mViewModel;
@Inject
ArticoloRESTConsumer mArticoloRESTConsumer;
@Inject
CommessaRESTConsumer mCommessaRESTConsumer;
private final ArrayList<Runnable> mOnPreDestroyList = new ArrayList<>();
private final ObservableArrayList<Object> mProdFabbisognoItemModel = new ObservableArrayList<>();
private FragmentProdFabbisognoLineeProdBinding mBindings;
private ProdFabbisognoLineeProdFilterViewModel mFilterViewModel = new ProdFabbisognoLineeProdFilterViewModel();
private List<MtbGrup> mtbGrupCache;
private List<JtbComt> jtbComtCache;
public ProdFabbisognoLineeProdFragment() {
// Required empty public constructor
@@ -120,6 +133,11 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
this.onLoadingStarted();
this.initMtbGrupsCache(() -> {
this.initJtbComtCache(this::onLoadingEnded);
});
mFilterViewModel.init(mViewModel.getOrdiniList().getValue());
this.refreshList(null);
});
@@ -211,34 +229,67 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
};
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
mFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged);
for (var filterChipDTO : ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet()) {
List<FilterChipDTO> filterList = Stream.of(ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet())
.map(Map.Entry::getValue)
.sortBy(FilterChipDTO::getPosizione)
.toList();
for (FilterChipDTO filterChipDTO : filterList) {
FilterChipView filterChipView = new FilterChipView(
requireActivity(),
filterChipDTO.getValue().getFilterChipText(),
v -> initBottomSheetDialogFilter(filterChipDTO.getValue()));
filterChipDTO.getFilterChipText(),
v -> initBottomSheetDialogFilter(filterChipDTO));
if (filterChipDTO.getKey() == ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID) {
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mFilterViewModel.getCurrentNumOrdsPredicate().get() == null) {
filterChipView.disableCloseIcon();
switch (filterChipDTO.getID()) {
case ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID -> {
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mFilterViewModel.getCurrentNumOrdsPredicate().get() == null) {
filterChipView.disableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView);
mBindings.filterChips.smoothScrollTo(0, 0);
} else {
filterChipView.enableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView);
mBindings.filterChips.smoothScrollTo(0, 0);
} else {
filterChipView.enableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView, 0);
mBindings.filterChips.smoothScrollTo(0, 0);
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView, 0);
mBindings.filterChips.smoothScrollTo(0, 0);
}
}
}
});
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null));
});
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null));
}
case ProdFabbisognoLineeProdBindings.MGRP_FILTER_ID -> {
mFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mFilterViewModel.getCurrentGruppoMercPredicate().get() == null) {
filterChipView.disableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView);
mBindings.filterChips.smoothScrollTo(0, 0);
} else {
filterChipView.enableCloseIcon();
mBindings.filterChipsGroup.removeView(filterChipView);
mBindings.filterChipsGroup.addView(filterChipView, 0);
mBindings.filterChips.smoothScrollTo(0, 0);
}
}
});
filterChipView.setOnResetClicked(() -> {
mFilterViewModel.setGruppoMercFilter(null);
mFilterViewModel.getCurrentGruppoMercPredicate().set(null);
});
}
}
this.mBindings.filterChipsGroup.addView(filterChipView);
}
@@ -253,16 +304,24 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
var filterLayoutView = filterChipDTO
.getFilterLayoutView();
if (filterChipDTO.getID() == ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID) {
((FilterNumeroOrdineLayoutView) filterLayoutView)
.setAllNumOrds(mFilterViewModel.getAllNumOrds())
.setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds())
.setOnFilterApplied(mFilterViewModel::setNumOrdFilter)
.setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()))
.filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get()))
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.toList());
switch (filterChipDTO.getID()) {
case ProdFabbisognoLineeProdBindings.NUM_ORD_FILTER_ID ->
((FilterNumeroOrdineLayoutView) filterLayoutView)
.setAllNumOrds(mFilterViewModel.getAllNumOrds())
.setAvailableNumOrds(mFilterViewModel.getAvailableNumOrds())
.setOnFilterApplied(mFilterViewModel::setNumOrdFilter)
.setPreSelectedNumOrds(Stream.of(Objects.requireNonNull(mViewModel.getOrdiniList().getValue()))
.filter(mFilterViewModel.getCurrentNumOrdsPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentNumOrdsPredicate().get()))
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.toList());
case ProdFabbisognoLineeProdBindings.MGRP_FILTER_ID ->
((FilterGruppoMercLayoutView) filterLayoutView)
.setAllGroupMerc(mFilterViewModel.getAllGruppoMerc(mtbGrupCache))
.setAvailableGroupMerc(mFilterViewModel.getAvailableGruppoMerc(mtbGrupCache))
.setOnFilterApplied(mFilterViewModel::setGruppoMercFilter)
.setPreSelectedGroupMerc(mFilterViewModel.getSelectedMtbGrup());
}
if (!filterLayoutView.isAdded())
@@ -270,6 +329,44 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
}
private void initMtbGrupsCache(Runnable onComplete) {
var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()))
.flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ?
x.getOrdineLavorazioneDTO().getAvailableClassMerc() : new ArrayList<>()))
.map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp)
.withoutNulls()
.distinct()
.toList();
this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> {
this.mtbGrupCache = mtbGrupCache;
onComplete.run();
}, this::onError);
}
private void initJtbComtCache(Runnable onComplete) {
if (this.mViewModel.getOrdiniList().getValue() == null) {
this.jtbComtCache = new ArrayList<>();
onComplete.run();
return;
}
var jtbComts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrdiniList().getValue()))
.flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getCodJcom()))
.distinct().withoutNulls()
.toList();
if (jtbComts.isEmpty()) {
this.jtbComtCache = new ArrayList<>();
onComplete.run();
return;
}
this.mCommessaRESTConsumer.getJtbComts(jtbComts, jtbComtCache -> {
this.jtbComtCache = jtbComtCache;
onComplete.run();
}, this::onError);
}
@Override
public void onDestroy() {
for (Runnable onPreDestroy : mOnPreDestroyList) {
@@ -305,15 +402,32 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
.max(Date::compareTo)
.orElse(null);
this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, this::startPickingActivity);
List<MtbGrup> listMtbGrup = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.flatMap(x -> Stream.of(((ProdFabbisognoLineeItemModelDto) x).getSelectedMtbGrup()))
.toList();
this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, onCompleteData -> {
startPickingActivity(listMtbGrup, onCompleteData);
});
}
private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
private void startPickingActivity(List<MtbGrup> listMtbGrup, List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
List<SitArtOrdDTO> sitArtOrdDTOS = Stream.of(fabbisognoList)
.map(x -> {
String ordini = UtilityDB.listValueToString(Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd().toString())
.toList());
Stream<ProdFabbisognoLineeProdDTO> streamSitArtOrd = Stream.of(fabbisognoList);
streamSitArtOrd = listMtbGrup != null && !listMtbGrup.isEmpty() ?
streamSitArtOrd.filter(x -> Stream.of(listMtbGrup).anyMatch(y -> y.getCodMgrp().equalsIgnoreCase(x.getCodMgrp()))) :
streamSitArtOrd;
List<SitArtOrdDTO> sitArtOrdDTOS = streamSitArtOrd.map(x -> {
SitArtOrdDTO sitArtOrdDTO = new SitArtOrdDTO()
.setCodMart(x.getCodMart())
.setCodMdep(codMdep)
@@ -328,6 +442,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
sitArtOrdDTO.getExtraInfo().put("dataInizio", x.getDataInizio());
sitArtOrdDTO.getExtraInfo().put("dataFine", x.getDataFine());
sitArtOrdDTO.getExtraInfo().put("ordini", ordini);
return sitArtOrdDTO;
})

View File

@@ -1,12 +1,17 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeItemModelDto {
public BindableBoolean selected = new BindableBoolean();
public OrdineLavorazioneDTO ordineLavorazioneDTO;
List<MtbGrup> selectedMtbGrup = new ArrayList<>();
public BindableBoolean getSelected() {
return selected;
@@ -20,4 +25,13 @@ public class ProdFabbisognoLineeItemModelDto {
this.ordineLavorazioneDTO = ordineLavorazioneDTO;
return this;
}
public List<MtbGrup> getSelectedMtbGrup() {
return selectedMtbGrup;
}
public ProdFabbisognoLineeItemModelDto setSelectedMtbGrup(List<MtbGrup> selectedMtbGrup) {
this.selectedMtbGrup = selectedMtbGrup;
return this;
}
}

View File

@@ -6,18 +6,25 @@ import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.core.model.MtbGrup;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeProdFilterViewModel {
private final ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> currentNumOrdsPredicate = new ObservableField<>();
private final ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> currentGruppoMercPredicate = new ObservableField<>();
private List<ProdFabbisognoLineeItemModelDto> initialList;
private List<MtbGrup> selectedMtbGrup = new ArrayList<>();
private final MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> currentList = new MutableLiveData<>();
public void init(List<ProdFabbisognoLineeItemModelDto> initialList){
public void init(List<ProdFabbisognoLineeItemModelDto> initialList) {
this.initialList = initialList;
this.currentList.setValue(this.initialList);
}
@@ -26,23 +33,37 @@ public class ProdFabbisognoLineeProdFilterViewModel {
return this.currentList;
}
public void setNumOrdFilter(List<Integer> numOrds){
public void setNumOrdFilter(List<Integer> numOrds) {
if (numOrds == null || numOrds.isEmpty()) currentNumOrdsPredicate.set(null);
else{
else {
currentNumOrdsPredicate.set(x -> numOrds.contains(x.getOrdineLavorazioneDTO().getNumOrd()));
}
}
public void applyAllTests(){
public void setGruppoMercFilter(List<MtbGrup> mtbGrupList) {
if (mtbGrupList == null || mtbGrupList.isEmpty()) {
currentGruppoMercPredicate.set(null);
this.selectedMtbGrup = new ArrayList<>();
} else {
this.selectedMtbGrup = mtbGrupList;
var mtbGrups = Stream.of(mtbGrupList).map(MtbGrup::getCodMgrp).toList();
currentGruppoMercPredicate.set(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc())
.anyMatch(y -> mtbGrups.contains(y.getCodMgrp())));
}
}
public void applyAllTests() {
List<ProdFabbisognoLineeItemModelDto> returnList = null;
if (currentNumOrdsPredicate.get() == null){
if (currentNumOrdsPredicate.get() == null &&
currentGruppoMercPredicate.get() == null) {
returnList = this.initialList;
}else {
Stream<ProdFabbisognoLineeItemModelDto> tmpStream = Stream.of(this.initialList)
.filter(x -> (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))));
returnList = tmpStream.toList();
} else {
returnList = Stream.of(this.initialList)
.filter(x -> (currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x))) &&
(currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x)))
).map(x -> x.setSelectedMtbGrup(this.selectedMtbGrup)).toList();
}
this.currentList.setValue(returnList);
@@ -52,7 +73,11 @@ public class ProdFabbisognoLineeProdFilterViewModel {
return currentNumOrdsPredicate;
}
public List<Integer> getAllNumOrds(){
public ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> getCurrentGruppoMercPredicate() {
return currentGruppoMercPredicate;
}
public List<Integer> getAllNumOrds() {
return Stream
.of(Objects.requireNonNull(initialList))
.filter(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null)
@@ -62,13 +87,59 @@ public class ProdFabbisognoLineeProdFilterViewModel {
.toList();
}
public List<Integer> getAvailableNumOrds(){
if (currentNumOrdsPredicate.get() == null) return getAllNumOrds();
public List<Integer> getAvailableNumOrds() {
if (currentGruppoMercPredicate.get() == null) return getAllNumOrds();
else {
return Stream.of(this.initialList)
.filter(x -> (currentGruppoMercPredicate.get() == null || (currentGruppoMercPredicate.get().test(x))))
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.distinct()
.toList();
}
}
public List<MtbGrup> getSelectedMtbGrup() {
return selectedMtbGrup;
}
public List<MtbGrup> getAllGruppoMerc(List<MtbGrup> mtbGrupFullList) {
var codMgrp = Stream.of(initialList)
.flatMap(x ->
Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc() != null ?
x.getOrdineLavorazioneDTO().getAvailableClassMerc() :
new ArrayList<>()))
.map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp)
.withoutNulls()
.distinct()
.toList();
return Stream.of(Objects.requireNonNull(mtbGrupFullList))
.filter(x -> codMgrp.contains(x.getCodMgrp()))
.distinct()
.withoutNulls()
.sortBy(MtbGrup::getDescrizione)
.toList();
}
public List<MtbGrup> getAvailableGruppoMerc(List<MtbGrup> mtbGrupFullList){
if (currentNumOrdsPredicate.get() == null){
return getAllGruppoMerc(mtbGrupFullList);
} else {
List<String> availableCodMgrups = Stream.of(this.initialList)
.filter(x ->
(currentNumOrdsPredicate.get() == null || (currentNumOrdsPredicate.get().test(x)))
)
.flatMap(x -> Stream.of(x.getOrdineLavorazioneDTO().getAvailableClassMerc()))
.map(OrdineLavorazioneDTO.AvailableClassMerc::getCodMgrp)
.distinct()
.toList();
return Stream.of(Objects.requireNonNull(mtbGrupFullList))
.filter(x -> availableCodMgrups.contains(x.getCodMgrp()))
.distinct()
.withoutNulls()
.sortBy(MtbGrup::getDescrizione)
.toList();
}
}
}

View File

@@ -50,123 +50,26 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
}
public void loadFabbisogno(String codMart, Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "WITH input_values AS ( " +
" SELECT " + UtilityDB.valueToString(startDate) + " AS data_inizio, " +
" " + UtilityDB.valueToString(endDate) + " AS data_fine, " +
// " " + UtilityDB.valueToString(lineaProd) + " AS linea_prod, " +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep)," +
" withdraw_mtb_colr AS ( " +
" SELECT cod_mart, " +
" SUM(ISNULL(qta_col, 0)) as qta_col, " +
" SUM(ISNULL(num_cnf, 0)) as num_cnf, " +
" mtb_colr.data_ord, " +
" mtb_colr.num_ord, " +
" mtb_colr.gestione " +
" FROM mtb_colr " +
" INNER JOIN mtb_colt mc on mtb_colr.gestione = mc.gestione and mtb_colr.data_collo = mc.data_collo and " +
" mtb_colr.ser_collo = mc.ser_collo and mtb_colr.num_collo = mc.num_collo " +
" WHERE segno = -1 " +
" AND cod_dtip IS NULL " +
" GROUP BY cod_mart, " +
" mtb_colr.data_ord, " +
" mtb_colr.num_ord, " +
" mtb_colr.gestione " +
" ), " +
" custom_mtb_colr AS (SELECT cod_mart, " +
" SUM(qta_col) AS qta_col, " +
" SUM(num_cnf) AS num_cnf, " +
" posizione " +
" FROM mvw_sitart_udc_det_inventario " +
" GROUP BY cod_mart, posizione), " +
" grouped_ord AS ( " +
" SELECT dtb_ordr.cod_mart, " +
" dtb_ordt.cod_jfas, " +
" dtb_ordt.cod_mdep, " +
" dtb_ordt.gestione, " +
" CONVERT(NUMERIC(15, 5), SUM(dtb_ordr.qta_ord * dtb_ordr.rap_conv) - " +
" SUM(dtb_ordr.qta_evasa * dtb_ordr.rap_conv)) AS qta_ord, " +
" SUM(dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa) AS num_cnf_ord, " +
" SUM(ISNULL(withdraw_mtb_colr.qta_col, 0)) AS qta_col_scaricata, " +
" SUM(ISNULL(withdraw_mtb_colr.num_cnf, 0)) AS num_cnf_scaricata " +
" FROM dtb_ordr " +
" INNER JOIN dtb_ordt on dtb_ordr.gestione = dtb_ordt.gestione AND " +
" dtb_ordr.data_ord = dtb_ordt.data_ord AND " +
" dtb_ordr.num_ord = dtb_ordt.num_ord " +
" LEFT OUTER JOIN withdraw_mtb_colr " +
" ON withdraw_mtb_colr.gestione = dtb_ordt.gestione AND " +
" withdraw_mtb_colr.num_ord = dtb_ordt.num_ord AND " +
" withdraw_mtb_colr.data_ord = dtb_ordt.data_ord AND " +
" withdraw_mtb_colr.cod_mart = dtb_ordr.cod_mart " +
" CROSS APPLY input_values " +
" WHERE dtb_ordt.gestione = 'L' " +
" AND flag_evaso = 'I' " +
" AND dtb_ordr.flag_evaso_forzato = 'N' " +
" AND flag_annulla = 'N' " +
" AND dtb_ordt.cod_mdep = input_values.cod_mdep " +
" AND dtb_ordt.data_ord BETWEEN input_values.data_inizio AND input_values.data_fine " +
" GROUP BY dtb_ordr.cod_mart, dtb_ordt.cod_jfas, dtb_ordt.cod_mdep, dtb_ordt.gestione " +
" ), " +
" tmp_ord AS (SELECT grouped_ord.cod_mart, " +
" mtb_aart.unt_mis, " +
" grouped_ord.cod_jfas, " +
" SUM(qta_ord) - SUM(qta_col_scaricata) AS qta_ord, " +
" SUM(num_cnf_ord) - SUM(num_cnf_scaricata) AS num_cnf_ord " +
" FROM grouped_ord " +
" INNER JOIN mtb_aart ON grouped_ord.cod_mart = mtb_aart.cod_mart " +
" CROSS APPLY input_values " +
" GROUP BY grouped_ord.cod_mart, mtb_aart.unt_mis, grouped_ord.cod_jfas " +
" ), " +
" ord_without_positioned_mtb_colt AS ( " +
" SELECT tmp_ord.cod_mart, " +
" tmp_ord.cod_jfas, " +
" ISNULL(custom_mtb_colr_on_linea.posizione, tmp_ord.cod_jfas) AS posizione, " +
" unt_mis, " +
" qta_ord AS qta_ord_calc, " +
" num_cnf_ord AS num_cnf_ord_calc, " +
" ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata, " +
" ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata, " +
" qta_ord - ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_fabbisogno, " +
" num_cnf_ord - ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_fabbisogno " +
" FROM tmp_ord " +
" INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas " +
" AND tmp_ord.cod_jfas = jrl_fase_posizioni.posizione " +
" LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea " +
" ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND " +
" tmp_ord.cod_jfas = custom_mtb_colr_on_linea.posizione " +
" " +
" UNION ALL " +
" " +
" SELECT DISTINCT tmp_ord.cod_mart, " +
" null AS cod_jfas, " +
" jrl_fase_posizioni.posizione, " +
" unt_mis, " +
" 0 AS qta_ord_calc, " +
" 0 AS num_cnf_ord_calc, " +
" ISNULL(custom_mtb_colr_on_linea.qta_col, 0) AS qta_gia_posizionata, " +
" ISNULL(custom_mtb_colr_on_linea.num_cnf, 0) AS num_cnf_gia_posizionata, " +
" 0 AS qta_fabbisogno, " +
" 0 AS num_cnf_fabbisogno " +
" FROM tmp_ord " +
" INNER JOIN jrl_fase_posizioni ON tmp_ord.cod_jfas = jrl_fase_posizioni.cod_jfas " +
" AND tmp_ord.cod_jfas <> jrl_fase_posizioni.posizione " +
" " +
" " +
" LEFT OUTER JOIN custom_mtb_colr custom_mtb_colr_on_linea " +
" ON tmp_ord.cod_mart = custom_mtb_colr_on_linea.cod_mart AND " +
" jrl_fase_posizioni.posizione = custom_mtb_colr_on_linea.posizione " +
" ) " +
"SELECT DISTINCT cod_mart, " +
" unt_mis, " +
" cod_jfas, " +
" input_values.data_inizio, " +
" input_values.data_fine " +
"FROM ord_without_positioned_mtb_colt " +
"CROSS APPLY input_values " +
"WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " " +
"GROUP BY cod_mart, unt_mis, cod_jfas, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";
public void loadFabbisogno(String codMart, String ordini, Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT cod_jfas\n" +
"FROM (SELECT DENSE_RANK() OVER (PARTITION BY dtb_ordt.gestione, dtb_ordt.data_ord, dtb_ordt.num_ord ORDER BY dtb_ord_steps.data_iniz DESC) AS row_n,\n" +
" dtb_ord_steps.*\n" +
" FROM dtb_ord_steps\n" +
" INNER JOIN dtb_ordt ON dtb_ord_steps.data_ord = dtb_ordt.data_ord\n" +
" AND dtb_ord_steps.num_ord = dtb_ordt.num_ord\n" +
" AND dtb_ord_steps.gestione = dtb_ordt.gestione\n" +
" INNER JOIN dtb_ordr ON dtb_ordr.gestione = dtb_ord_steps.gestione AND\n" +
" dtb_ordr.data_ord = dtb_ord_steps.data_ord AND\n" +
" dtb_ordr.num_ord = dtb_ord_steps.num_ord\n" +
" WHERE dtb_ordt.gestione = 'L'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.flag_evaso_forzato = 'N'\n" +
" AND flag_annulla = 'N'\n" +
" AND dtb_ordt.cod_mdep = " + UtilityDB.valueToString(codMdep) + "\n" +
" AND dtb_ordt.num_ord IN ( " + ordini + " )\n" +
" AND dtb_ordt.data_ord BETWEEN " + UtilityDB.valueToString(startDate) + " AND " + UtilityDB.valueToString(endDate) + "\n" +
" AND dtb_ordr.cod_mart = " + UtilityDB.valueToString(codMart) + ") t\n" +
"WHERE t.row_n = 1";
Type typeOfObjectsList = new TypeToken<ArrayList<ProdFabbisognoLineeProdDTO>>() {}.getType();

View File

@@ -15,6 +15,7 @@ import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -29,8 +30,8 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.ISearchableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
@@ -42,11 +43,10 @@ import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsIn
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.filter.ProdRiposizionamentoDaProdFilterViewModel;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements ITitledFragment, ProdRiposizionamentoDaProdViewModel.Listener {
public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements ISearchableFragment, ITitledFragment, ProdRiposizionamentoDaProdViewModel.Listener {
@Inject
ProdRiposizionamentoDaProdViewModel mViewModel;
@@ -57,6 +57,8 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
private final Handler mHandler = new Handler();
private final int mInterval = 120 * 1000; //2 minuti
private int barcodeScannerIstanceID = -1;
private AppCompatTextView mAppBarTitle;
private String mTextFilter;
public ProdRiposizionamentoDaProdFragment() {
@@ -123,7 +125,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
mViewModel.getItemsInventario().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
mFilterViewModel.init(mViewModel.getItemsInventario().getValue());
mFilterViewModel.init(getFilteredList(mTextFilter));
this.refreshList(null);
});
@@ -209,7 +211,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
}
public void onInfoClick(List<MvwSitArtUdcDetInventario> item) {
public void onInfoClick(ArtsInGiacenzaDTO item) {
try {
DialogInfoGiacenzaView.newInstance(item).show(getChildFragmentManager(), DialogInfoGiacenzaView.class.getName());
} catch (Exception e) {
@@ -254,6 +256,44 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onSearchEnabled() {
mAppBarTitle.setVisibility(View.GONE);
}
@Override
public void onSearchDisabled() {
mAppBarTitle.setVisibility(View.VISIBLE);
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
List<ArtsInGiacenzaDTO> originalList = this.mViewModel.getItemsInventario().getValue();
if (originalList == null || originalList.isEmpty()) return false;
mTextFilter = newText;
List<ArtsInGiacenzaDTO> filteredOrders = getFilteredList(newText);
refreshList(filteredOrders);
return true;
}
private List<ArtsInGiacenzaDTO> getFilteredList(String newText) {
List<ArtsInGiacenzaDTO> filteredOrders = new ArrayList<>();
List<ArtsInGiacenzaDTO> originalList = this.mViewModel.getItemsInventario().getValue();
if (originalList == null || originalList.isEmpty() || newText == null) return originalList;
for (int i = 0; i < originalList.size(); i++) {
if (originalList.get(i).getDescrizione().toLowerCase().contains(newText.toLowerCase())) {
filteredOrders.add(originalList.get(i));
}
}
return filteredOrders;
}
@Override
public void onStart() {
super.onStart();
@@ -274,7 +314,8 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_riposizionamento_da_prod_title).toString());
mAppBarTitle = titleText;
mAppBarTitle.setText(context.getText(R.string.prod_riposizionamento_da_prod_title).toString());
}
@Override

View File

@@ -6,6 +6,7 @@ import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
@@ -13,8 +14,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
@@ -32,6 +31,7 @@ import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO;
public class ProdRiposizionamentoDaProdViewModel {
private final SoundAlertService mSoundAlertService;
@@ -41,6 +41,7 @@ public class ProdRiposizionamentoDaProdViewModel {
private final MutableLiveData<List<ArtsInGiacenzaDTO>> itemsInventario = new MutableLiveData<>();
private final MutableLiveData<MtbColt> mtbColtMutableLiveData = new MutableLiveData<>();
private final MutableLiveData<List<MvwSitArtUdcDetInventario>> mMvwSitArtUdcDetInventarioLiveData = new MutableLiveData<>();
private final MutableLiveData<List<StatoArtInventarioDTO>> mStatoArticoli = new MutableLiveData<>();
private Listener mListener;
public ProdRiposizionamentoDaProdViewModel(GiacenzaRESTConsumer giacenzaRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, SoundAlertService soundAlertService) {
@@ -100,6 +101,13 @@ public class ProdRiposizionamentoDaProdViewModel {
mMvwSitArtUdcDetInventarioLiveData.setValue(mvwSitArtUdcDetInventario);
List<StatoArtInventarioDTO> statoArticolo = Stream.of(Objects.requireNonNull(itemsInventario.getValue()))
.flatMap(x -> Stream.of(x.getStatoArtInventario())
.filter(Objects::nonNull))
.toList();
mStatoArticoli.setValue(statoArticolo);
boolean isPresent = Stream.of(mvwSitArtUdcDetInventario)
.anyMatch(x ->
x.getGestione().equals(mtbColt.getGestione()) &&
@@ -161,6 +169,18 @@ public class ProdRiposizionamentoDaProdViewModel {
.map(MvwSitArtUdcDetInventario::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
List<StatoArtInventarioDTO> statoArticoli = mStatoArticoli.getValue();
if (statoArticoli == null)
statoArticoli = new ArrayList<>();
StatoArtInventarioDTO statoArticolo = Stream.of(statoArticoli)
.filter(x -> x.getCodProd().equalsIgnoreCase(dtoList.get(0).getCodMart()) &&
Objects.equals(x.getNumOrd(), dtoList.get(0).getNumOrd()) &&
Objects.equals(x.getDataOrd(), dtoList.get(0).getDataOrd())
)
.findFirstOrElse(null);
return new ArtsInGiacenzaDTO()
.setCodMart(dtoList.get(0).getCodMart())
.setPartitaMag(dtoList.get(0).getPartitaMag())
@@ -169,6 +189,7 @@ public class ProdRiposizionamentoDaProdViewModel {
.setNumOrd(dtoList.get(0).getNumOrd())
.setNumCnf(totalNumCnf)
.setCount(dtoList.size())
.setStatoArtInventario(statoArticolo)
.setMvwSitArtUdcDetInventarioDTO(dtoList);
})
.sorted(Comparator.comparing(ArtsInGiacenzaDTO::getPosizione))

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -13,6 +14,7 @@ import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
@@ -21,8 +23,10 @@ import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaBinding;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaSituazioneArticoloBinding;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
public class DialogInfoGiacenzaView extends BaseDialogFragment {
@@ -31,13 +35,13 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
private DialogInfoGiacenzaBinding mBindings;
private Context mContext;
private List<MvwSitArtUdcDetInventario> item;
private ArtsInGiacenzaDTO item;
public static DialogInfoGiacenzaView newInstance(List<MvwSitArtUdcDetInventario> item) {
public static DialogInfoGiacenzaView newInstance(ArtsInGiacenzaDTO item) {
return new DialogInfoGiacenzaView(item);
}
public DialogInfoGiacenzaView(List<MvwSitArtUdcDetInventario> item) {
public DialogInfoGiacenzaView(ArtsInGiacenzaDTO item) {
this.item = item;
}
@@ -78,17 +82,47 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment {
this.onLoadingEnded();
}
private void initAvailableItemsList(List<MvwSitArtUdcDetInventario> availableItems) {
if(availableItems == null || availableItems.isEmpty())
private void initAvailableItemsList(ArtsInGiacenzaDTO availableItems) {
if (availableItems == null)
return;
var itemList = Stream.of(availableItems)
.map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
var listItem = Stream.of(availableItems)
.flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO())
.map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
)
.toList();
new LiveAdapter(itemList, BR.item)
List<StatoArtInventarioDTO> statoArticolo = null;
StatoArtInventarioDTO statoArtInventario = availableItems.getStatoArtInventario();
if (statoArtInventario != null) {
statoArticolo = Stream.of(statoArtInventario).toList();
if (statoArtInventario.colliArrivoIsLessThenZero() &&
statoArtInventario.colliMagIsLessThenZero()) {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
}
} else {
this.mBindings.situazioneArticolo.setVisibility(View.GONE);
}
new LiveAdapter(listItem, BR.item)
.map(DialogInfoSituazioneArticoloAvailableListItem.class, R.layout.dialog_info_giacenza_list_item)
.into(this.mBindings.availableList);
new LiveAdapter(statoArticolo, BR.item)
.map(StatoArtInventarioDTO.class, R.layout.dialog_info_giacenza_situazione_articolo)
.into(this.mBindings.situazioneArticolo);
}
@Override
public void onLoadingStarted() {
this.mBindings.loadingView.setVisibility(View.VISIBLE);
this.mBindings.listItem.setVisibility(View.GONE);
}
@Override
public void onLoadingEnded() {
this.mBindings.loadingView.setVisibility(View.GONE);
this.mBindings.listItem.setVisibility(View.VISIBLE);
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
@@ -13,7 +14,9 @@ public class ArtsInGiacenzaDTO {
private String posizione;
private BigDecimal numCnf;
private Integer numOrd;
private Date dataOrd;
private Integer count;
private StatoArtInventarioDTO statoArtInventario;
private List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventarioDTO;
public String getCodMart() {
@@ -92,4 +95,22 @@ public class ArtsInGiacenzaDTO {
this.numOrd = numOrd;
return this;
}
public StatoArtInventarioDTO getStatoArtInventario() {
return statoArtInventario;
}
public ArtsInGiacenzaDTO setStatoArtInventario(StatoArtInventarioDTO statoArtInventario) {
this.statoArtInventario = statoArtInventario;
return this;
}
public Date getDataOrd() {
return dataOrd;
}
public ArtsInGiacenzaDTO setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
}

View File

@@ -0,0 +1,181 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto;
import java.math.BigDecimal;
import java.util.Date;
public class StatoArtInventarioDTO {
private String codProd;
private Integer numOrd;
private Date dataOrd;
private String untMis;
private BigDecimal qtaProd;
private BigDecimal colliProd;
private BigDecimal pedProd;
private BigDecimal qtaInArrivo;
private BigDecimal colliArrivo;
private BigDecimal pedArrivo;
private BigDecimal qtaLinea;
private BigDecimal colliLinea;
private Integer pedLinea;
private BigDecimal qtaMag;
private BigDecimal colliMag;
private Integer pedMag;
public String getCodProd() {
return codProd;
}
public StatoArtInventarioDTO setCodProd(String codProd) {
this.codProd = codProd;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public StatoArtInventarioDTO setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
public String getUntMis() {
return untMis;
}
public StatoArtInventarioDTO setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public BigDecimal getQtaProd() {
return qtaProd;
}
public StatoArtInventarioDTO setQtaProd(BigDecimal qtaProd) {
this.qtaProd = qtaProd;
return this;
}
public BigDecimal getColliProd() {
return colliProd;
}
public StatoArtInventarioDTO setColliProd(BigDecimal colliProd) {
this.colliProd = colliProd;
return this;
}
public BigDecimal getPedProd() {
return pedProd;
}
public StatoArtInventarioDTO setPedProd(BigDecimal pedProd) {
this.pedProd = pedProd;
return this;
}
public BigDecimal getQtaInArrivo() {
return qtaInArrivo;
}
public StatoArtInventarioDTO setQtaInArrivo(BigDecimal qtaInArrivo) {
this.qtaInArrivo = qtaInArrivo;
return this;
}
public BigDecimal getColliArrivo() {
return colliArrivo;
}
public StatoArtInventarioDTO setColliArrivo(BigDecimal colliArrivo) {
this.colliArrivo = colliArrivo;
return this;
}
public BigDecimal getPedArrivo() {
if (pedArrivo.compareTo(BigDecimal.ZERO) < 0)
return BigDecimal.ZERO;
else
return pedArrivo;
}
public StatoArtInventarioDTO setPedArrivo(BigDecimal pedArrivo) {
this.pedArrivo = pedArrivo;
return this;
}
public BigDecimal getQtaLinea() {
return qtaLinea;
}
public StatoArtInventarioDTO setQtaLinea(BigDecimal qtaLinea) {
this.qtaLinea = qtaLinea;
return this;
}
public BigDecimal getColliLinea() {
return colliLinea;
}
public StatoArtInventarioDTO setColliLinea(BigDecimal colliLinea) {
this.colliLinea = colliLinea;
return this;
}
public Integer getPedLinea() {
return pedLinea;
}
public StatoArtInventarioDTO setPedLinea(Integer pedLinea) {
this.pedLinea = pedLinea;
return this;
}
public BigDecimal getQtaMag() {
return qtaMag;
}
public StatoArtInventarioDTO setQtaMag(BigDecimal qtaMag) {
this.qtaMag = qtaMag;
return this;
}
public BigDecimal getColliMag() {
return colliMag;
}
public StatoArtInventarioDTO setColliMag(BigDecimal colliMag) {
this.colliMag = colliMag;
return this;
}
public Integer getPedMag() {
if (pedMag < 0)
return 0;
else
return pedMag;
}
public StatoArtInventarioDTO setPedMag(Integer pedMag) {
this.pedMag = pedMag;
return this;
}
public Date getDataOrd() {
return dataOrd;
}
public StatoArtInventarioDTO setDataOrd(Date dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public boolean colliArrivoIsLessThenZero(){
return this.colliArrivo.compareTo(BigDecimal.ZERO) <= 0;
}
public boolean colliMagIsLessThenZero(){
return this.colliMag.compareTo(BigDecimal.ZERO) <= 0;
}
}

View File

@@ -3,8 +3,10 @@ package it.integry.integrywmsnative.gest.prod_versamento_materiale.dto;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.di.BindableFloat;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineLavorazioneDTO {
@@ -101,6 +103,7 @@ public class OrdineLavorazioneDTO {
private Object mtbColtToEdit;
private int hrNum;
private List<AvailableClassMerc> availableClassMerc;
private BindableFloat qtaColVersamento = new BindableFloat();
@@ -533,4 +536,37 @@ public class OrdineLavorazioneDTO {
this.descrizioneAttivita = descrizioneAttivita;
return this;
}
public List<AvailableClassMerc> getAvailableClassMerc() {
return availableClassMerc;
}
public OrdineLavorazioneDTO setAvailableClassMerc(List<AvailableClassMerc> availableClassMerc) {
this.availableClassMerc = availableClassMerc;
return this;
}
public static class AvailableClassMerc {
private String codMgrp;
private List<String> codMsgr;
public String getCodMgrp() {
return codMgrp;
}
public AvailableClassMerc setCodMgrp(String codMgrp) {
this.codMgrp = codMgrp;
return this;
}
public List<String> getCodMsgr() {
return codMsgr;
}
public AvailableClassMerc setCodMsgr(List<String> codMsgr) {
this.codMsgr = codMsgr;
return this;
}
}
}

View File

@@ -5,6 +5,7 @@ import android.content.pm.ActivityInfo;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
@@ -46,6 +47,7 @@ import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding;
@@ -398,24 +400,53 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(canLUBeClosed);
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
String codMart = dialogInputQuantityV2DTO.getMtbAart().getCodMart();
String flagStato = dialogInputQuantityV2DTO.getMtbAart().getFlagStato();
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
if (flagStato.equalsIgnoreCase("I")) {
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml(String.format(UtilityResources.getString(R.string.item_not_enabled), codMart))),
null,
() -> {
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
else this.onLoadingEnded();
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
},
this::onLoadingEnded)
.show(getActivity().getSupportFragmentManager(), "tag");
} else {
this.onLoadingEnded();
if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View
.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
this.onLoadingStarted();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
})
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
;
}
@Override

View File

@@ -853,7 +853,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setWarnOnQuantityOverflow(SettingsManager.iDB().isFlagOverflowQuantityWarning())
.setWarnOnQuantityOverflow(SettingsManager.iDB().isFlagSpedizioneOverflowQuantityWarning())
.setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null)

View File

@@ -76,6 +76,7 @@ public class DialogRowInfoProdFabbisognoLineeProdView extends BaseDialogRowInfoV
this.mViewModel.init(
sitArtOrdDTO.getCodMart(),
sitArtOrdDTO.getCodMdep(),
(String) sitArtOrdDTO.getExtraInfo().get("ordini"),
(Date) sitArtOrdDTO.getExtraInfo().get("dataInizio"),
(Date) sitArtOrdDTO.getExtraInfo().get("dataFine"));
}

View File

@@ -23,10 +23,10 @@ public class DialogRowInfoProdFabbisognoLineeProdViewModel {
}
public void init(String codMart, String codMdep, Date startDate, Date endDate) {
public void init(String codMart, String codMdep, String ordni, Date startDate, Date endDate) {
this.sendOnLoadingStarted();
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(codMart, startDate, endDate, codMdep, fabbisognoList -> {
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(codMart, ordni, startDate, endDate, codMdep, fabbisognoList -> {
this.mFabbisognoList.postValue(fabbisognoList);
this.sendOnLoadingEnded();
}, this::sendError);

View File

@@ -189,15 +189,7 @@ public class VersamentoMerceViewModel {
} else {
if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
onComplete.run();
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtAnonimo, onComplete);
} else this.sendError(new InvalidCodMdepException());
pickMerceULtoUL(mtbColtAnonimo, onComplete);
}, this::sendError);
} else {
@@ -228,7 +220,7 @@ public class VersamentoMerceViewModel {
.filter(x -> x.getQtaCol().floatValue() > 0)
.toList();
if (mtbColrsToPick.size() == 0) {
if (mtbColrsToPick.isEmpty()) {
this.sendError(new NoArtsInLUException());
return;
}

View File

@@ -3,13 +3,14 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
@Module(subcomponents = DialogInputQuantityV2Component.class)
public class DialogInputQuantityV2Module {
@Provides
DialogInputQuantityV2ViewModel providesDialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
return new DialogInputQuantityV2ViewModel(barcodeRESTConsumer);
DialogInputQuantityV2ViewModel providesDialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
return new DialogInputQuantityV2ViewModel(barcodeRESTConsumer, magazzinoRESTConsumer);
}
}

View File

@@ -261,6 +261,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mAbort = false;
dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false);
}else {
this.onLoadingEnded();
}
});
}
@@ -269,19 +271,14 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false;
dismiss();
dismiss();this.onLoadingEnded();
this.mOnComplete.run(this.mViewModel.getResult(), true);
}else {
this.onLoadingEnded();
}
});
}
// @Override
// public void onDismiss(@NonNull DialogInterface dialog) {
// BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
// if (mAbort) this.mOnAbort.run();
// super.onDismiss(dialog);
// }
@Override
public void onStart() {
super.onStart();
@@ -540,9 +537,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
@Override
public void onWarning(String text, RunnableArgs<Boolean> result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),
null,
() -> result.run(true),
() -> result.run(false)
).show(requireActivity().getSupportFragmentManager(), "tag");
null,
() -> result.run(true),
() -> result.run(false)
).show(requireActivity().getSupportFragmentManager(), "tag");
}
}

View File

@@ -3,22 +3,29 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import androidx.databinding.ObservableField;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.secondary.StatoPartitaMag;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.settings.SettingsManager;
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.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.exception.InactiveBatchLotException;
import it.integry.integrywmsnative.view.dialogs.exception.InvalidBatchLotException;
@@ -89,12 +96,15 @@ public class DialogInputQuantityV2ViewModel {
private Listener mListener;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
private StatoPartitaMag statoArt;
private MtbPartitaMag mtbPartitaMag;
@Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mMagazzinoRESTConsumer = magazzinoRESTConsumer;
}
public void init(int onNumCnfInputChanged, int onQtaTotInputChanged) {
@@ -475,115 +485,175 @@ public class DialogInputQuantityV2ViewModel {
}
public void validate(RunnableArgs<Boolean> onValidated) {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
this.sendOnLoadingStarted();
new Thread(() -> {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidQtaCnfQuantityException());
onValidated.run(false);
return;
}
this.mListener.onError(new InvalidQtaCnfQuantityException());
onValidated.run(false);
return;
}
if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
if (suggestPartitaMagRunnable != null) {
internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) {
if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
if (suggestPartitaMagRunnable != null) {
internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) {
this.mListener.onError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
} else {
this.mListener.onError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
} else {
}
if (this.statoArt == StatoPartitaMag.DISATTIVO) {
this.mListener.onError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
onValidated.run(false);
return;
}
if (!this.canInputZeroQuantity && (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
UtilityBigDecimal.equalsOrLowerThan(this.internalNumCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException());
onValidated.run(false);
return;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException());
onValidated.run(false);
return;
}
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) {
asyncMagazzinoRESTConsumer(internalPartitaMag, this.getMtbAart().getCodMart());
if (mtbPartitaMag == null) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
if (!result) {
onValidated.run(false);
return;
}
}
}
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
}
}
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
if (!result) {
onValidated.run(false);
return;
}
}
this.sendOnLoadingEnded();
onValidated.run(true);
}).start();
}
private boolean runAsyncWarningDialog(String text) {
try {
final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object());
AtomicBoolean returnResult = new AtomicBoolean();
mListener.onWarning(text, result -> {
returnResult.set(result);
ft.run();
});
ft.get();
return returnResult.get();
} catch (Exception e) {
this.sendError(e);
return false;
}
}
if(this.statoArt == StatoPartitaMag.DISATTIVO){
this.mListener.onError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false);
return;
private void asyncMagazzinoRESTConsumer(String partitaMag, String codMart) {
try {
final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object());
mMagazzinoRESTConsumer.retrievePartitaMag(
partitaMag,
codMart,
returnPartitaMag -> {
mtbPartitaMag = returnPartitaMag;
ft.run();
},
e -> {
this.sendError(e);
ft.run();
});
ft.get();
} catch (Exception e) {
this.sendError(e);
}
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
onValidated.run(false);
return;
}
if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException());
onValidated.run(false);
return;
}
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
onValidated.run(false);
return;
}
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException());
onValidated.run(false);
return;
}
if (!this.canInputZeroQuantity && (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
UtilityBigDecimal.equalsOrLowerThan(this.internalNumCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException());
onValidated.run(false);
return;
}
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException());
onValidated.run(false);
return;
}
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
//Gli ultimi due controlli sono in coda a causa della callBack di onWarning, non eseguirebbe i controlli messi dopo
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
onValidated.run(true);
}
public DialogInputQuantityV2ResultDTO getResult() {
@@ -619,14 +689,27 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
public MtbAart getMtbAart() {
return this.mtbAart.get();
}
public interface Listener {
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
public interface Listener extends ILoadingListener {
void onDataChanged();
void onError(Exception ex);
void onWarning(String text, RunnableArgs<Boolean> result);
}
}

View File

@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M38,42H10c-2.2,0 -4,-1.8 -4,-4V10c0,-2.2 1.8,-4 4,-4h28c2.2,0 4,1.8 4,4v28C42,40.2 40.2,42 38,42z"
android:fillColor="#FF9800"/>
<path
android:pathData="M29.5,16h-11c-0.8,0 -1.5,-0.7 -1.5,-1.5l0,0c0,-0.8 0.7,-1.5 1.5,-1.5h11c0.8,0 1.5,0.7 1.5,1.5l0,0C31,15.3 30.3,16 29.5,16z"
android:fillColor="#8A5100"/>
<path
android:pathData="M40.2,41.6l1.4,-1.4l6,6l-1.4,1.4L40.2,41.6z"
android:fillColor="#616161"/>
<path
android:pathData="M35.7,27.6c-4.4,0 -8,3.6 -8,8s3.6,8 8,8s8,-3.6 8,-8S40.1,27.6 35.7,27.6z"
android:fillColor="#616161"/>
<path
android:pathData="M41.9,43.3l1.4,-1.4l4.3,4.3l-1.4,1.4L41.9,43.3z"
android:fillColor="#37474F"/>
<path
android:pathData="M35.7,29.1c-3.6,0 -6.5,2.9 -6.5,6.5s2.9,6.5 6.5,6.5s6.5,-2.9 6.5,-6.5S39.2,29.1 35.7,29.1z"
android:fillColor="#64B5F6"/>
<path
android:pathData="M39.1,32.7c-0.8,-1 -2.1,-1.6 -3.4,-1.6c-1.3,0 -2.6,0.6 -3.4,1.6c-0.2,0.2 -0.1,0.5 0,0.7c0.2,0.2 0.5,0.1 0.7,0c0.7,-0.8 1.6,-1.2 2.7,-1.2s2,0.4 2.7,1.2c0.1,0.1 0.2,0.2 0.4,0.2c0.1,0 0.2,0 0.3,-0.1C39.2,33.3 39.2,32.9 39.1,32.7z"
android:fillColor="#BBDEFB"/>
</vector>

View File

@@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M38,42H10c-2.2,0 -4,-1.8 -4,-4V10c0,-2.2 1.8,-4 4,-4h28c2.2,0 4,1.8 4,4v28C42,40.2 40.2,42 38,42z"
android:fillColor="#FF9800"/>
<path
android:pathData="M29.5,16h-11c-0.8,0 -1.5,-0.7 -1.5,-1.5l0,0c0,-0.8 0.7,-1.5 1.5,-1.5h11c0.8,0 1.5,0.7 1.5,1.5l0,0C31,15.3 30.3,16 29.5,16z"
android:fillColor="#8A5100"/>
<path
android:pathData="M40.2,41.6l1.4,-1.4l6,6l-1.4,1.4L40.2,41.6z"
android:fillColor="#616161"/>
<path
android:pathData="M35.7,27.6c-4.4,0 -8,3.6 -8,8s3.6,8 8,8s8,-3.6 8,-8S40.1,27.6 35.7,27.6z"
android:fillColor="#616161"/>
<path
android:pathData="M41.9,43.3l1.4,-1.4l4.3,4.3l-1.4,1.4L41.9,43.3z"
android:fillColor="#37474F"/>
<path
android:pathData="M35.7,29.1c-3.6,0 -6.5,2.9 -6.5,6.5s2.9,6.5 6.5,6.5s6.5,-2.9 6.5,-6.5S39.2,29.1 35.7,29.1z"
android:fillColor="#64B5F6"/>
<path
android:pathData="M39.1,32.7c-0.8,-1 -2.1,-1.6 -3.4,-1.6c-1.3,0 -2.6,0.6 -3.4,1.6c-0.2,0.2 -0.1,0.5 0,0.7c0.2,0.2 0.5,0.1 0.7,0c0.7,-0.8 1.6,-1.2 2.7,-1.2s2,0.4 2.7,1.2c0.1,0.1 0.2,0.2 0.4,0.2c0.1,0 0.2,0 0.3,-0.1C39.2,33.3 39.2,32.9 39.1,32.7z"
android:fillColor="#BBDEFB"/>
</vector>

View File

@@ -24,11 +24,28 @@
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginBottom="8dp"
android:gravity="center_horizontal"
android:text="Situazione articolo" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/loading_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progressBar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
tools:visibility="gone"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.core.widget.NestedScrollView
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -37,21 +54,40 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/situazione_articolo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="1"
android:paddingBottom="16dp"
tools:listitem="@layout/dialog_info_giacenza_situazione_articolo"
tools:visibility="gone" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/available_label"
style="@style/TextAppearance.Material3.TitleMedium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/gray_200"
android:paddingHorizontal="12dp"
android:text="Sulla linea"
android:textAllCaps="true" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/available_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/dialog_info_situazione_articolo_available_list_item"
tools:itemCount="3"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="5"
tools:listitem="@layout/dialog_info_giacenza_list_item" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>

View File

@@ -81,7 +81,7 @@
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_location_24"
android:tint="@android:color/black"
android:tint="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -89,6 +89,7 @@
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_marginStart="4dp"
android:text="@{item.posizione}"
app:layout_constraintStart_toEndOf="@id/position_label_icon"
@@ -106,7 +107,8 @@
android:backgroundTint="@color/red_300"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="@{item.codJcom != null ? View.VISIBLE : View.GONE}">
android:visibility="@{item.codJcom != null ? View.VISIBLE : View.GONE}"
tools:visibility="invisible">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"

View File

@@ -0,0 +1,244 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.R" />
<import type="it.integry.integrywmsnative.core.utility.UntMisUtils" />
<import type="java.math.BigDecimal" />
<import type="android.view.View" />
<variable
name="item"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="8dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:weightSum="1">
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/incoming_box"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginEnd="2dp"
android:layout_weight="0.5"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/gray_200"
android:orientation="vertical"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp"
android:visibility="@{item.colliArrivoIsLessThenZero() ? View.GONE : View.VISIBLE}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="IN ARRIVO"
android:textColor="@color/gray_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(item.pedArrivo, 0)}"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="PED"
android:textColor="@color/gray_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(item.colliArrivo, 0)}"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@string/unt_mis_col"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@color/gray_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/already_box"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginStart="2dp"
android:layout_weight="0.5"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/gray_200"
android:orientation="vertical"
android:paddingHorizontal="8dp"
android:paddingVertical="4dp"
android:visibility="@{item.colliMagIsLessThenZero() ? View.GONE : View.VISIBLE}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.Material3.LabelSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="GIÀ POSIZIONATA"
android:textColor="@color/gray_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(item.pedMag)}"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="PED"
android:textColor="@color/gray_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:text="@{UtilityNumber.decimalToString(item.colliMag, 0)}"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="2dp"
android:text="@string/unt_mis_col"
android:textColor="@color/gray_600"
android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:text=")"
android:textColor="@color/gray_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</layout>

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.articoli_in_giacenza.ArticoliInGiacenzaFragment" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.articoli_in_giacenza.ArticoliInGiacenzaViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".gest.articoli_in_giacenza.ArticoliInGiacenzaFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
android:visibility="gone">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="72dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_playlist_add_check_24dp" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/no_inventory_available_text" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/inventario_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadeScrollbars="true"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -0,0 +1,313 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate.COMMONS_DATE_FORMATS" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.settings.SettingsManager" />
<variable
name="item"
type="it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:orientation="horizontal"
android:padding="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toStartOf="@id/qta_textview"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/first_line"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/orange_600"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:text="@{UtilityNumber.decimalToString(item.numCnf) + ` CONF`}"
android:textColor="@android:color/white"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (item.mtbAart != null &amp;&amp; !item.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="PESO KG" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/second_line"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@{item.getDescrizioneEstesa()}"
android:textColor="@android:color/black"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/first_line"
tools:text="Descrizione lunga articolo" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + item.getPartitaMag()}"
android:visibility="@{UtilityString.isNullOrEmpty(item.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/second_line"
tools:text="Lotto: ABCDE" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_textview"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:text="@{item.getQtaText()}"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/ul_ref_container"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="280.45\nCONF" />
<RelativeLayout
android:id="@+id/ul_ref_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:visibility="@{item.numCollo != null ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/linearLayout">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600"
android:orientation="horizontal"
android:padding="2dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@android:color/white"
android:orientation="horizontal"
android:padding="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="2dp"
android:paddingEnd="4dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginStart="9dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/ic_box"
android:tint="@color/green_600" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="2dp"
android:layout_height="match_parent"
android:background="@color/green_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp"
android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Num: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.numCollo.toString()}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="5230" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gest: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.gestione}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="V" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityDate.formatDate(item.dataCollo, &quot;dd MMM yy&quot;)}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="02 mar 2020" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Serie: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.serCollo}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="UL" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -192,7 +192,7 @@
android:backgroundTint="@color/colorPrimary"
android:clickable="true"
android:focusable="true"
android:onClick="@{() -> view.onInfoClick(item.getMvwSitArtUdcDetInventarioDTO())}"
android:onClick="@{() -> view.onInfoClick(item)}"
android:scaleType="fitCenter" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -26,6 +26,7 @@
<string name="inventario_fragment_title">Inventario</string>
<string name="prod_fabbisogno_linee_prod_title">Approvvig. linee prod.</string>
<string name="prod_riposizionamento_da_prod_title">Riposizionamento da prod.</string>
<string name="articoli_in_giacenza_title">Articoli in giacenza</string>
<string name="versamento_merce_fragment_title">Posizionamento merce</string>
<string name="error">Errore</string>
<string name="ops">Ops</string>
@@ -193,10 +194,13 @@
<string name="invalid_quantity_x_package_error_message"><![CDATA[La <b>quantità per confezioni</b> inserita non è valida]]></string>
<string name="available_num_cnf_overflow_error_message"><![CDATA[Il <b>numero di confezioni</b> inserito supera la quantità massima disponibile]]></string>
<string name="ordered_quantity_overflow_error_message"><![CDATA[La <b>quantità</b> inserita supera la quantità ordinata]]></string>
<string name="confirm_ordered_quantity_overflow_error_message"><![CDATA[La <b>quantità</b> inserita supera la quantità ordinata. Continuare?]]></string>
<string name="ordered_num_cnf_overflow_error_message"><![CDATA[Il <b>numero di confezioni</b> inserito supera la quantità ordinata]]></string>
<string name="confirm_ordered_num_cnf_overflow_error_message"><![CDATA[Il <b>numero di confezioni</b> inserito supera la quantità ordinata. Continuare?]]></string>
<string name="invalid_production_line_error_message"><![CDATA[<b>Linea di produzione</b> non valida]]></string>
<string name="expire_date_error_message"><![CDATA[La <b>data di scadenza</b> inserita non è valida]]></string>
<string name="batch_lot_error_message"><![CDATA[Il <b>lotto</b> inserito non è valido]]></string>
<string name="batch_lot_inexistent_error_message">È stato inserito un nuovo lotto per questo articolo. Continuare?</string>
<string name="empty_notes_input_message"><![CDATA[Il <b>campo note</b> deve essere compilato per il modulo corrente.]]></string>
<string name="settings_category">Impostazioni</string>
<string name="check_box_preference_title">Check box</string>
@@ -351,6 +355,7 @@
<string name="title_dynamic_frudis">Personalizzazioni Frudis</string>
<string name="batch_lot_not_enabled"><![CDATA[Il lotto: <b>%s</b> non è attivo.]]></string>
<string name="item_not_enabled"><![CDATA[L\'articolo: <b>%s</b> non è attivo.]]></string>
<string name="punto_vendita">Punto Vendita</string>
<string name="title_dynamic_saporiveri_pv">SaporiVeri PV</string>
<string name="generate_orders">Genera ordini di acquisto</string>

View File

@@ -18,6 +18,7 @@
<item name="nav_rettifica_giacenze" type="id" />
<item name="nav_rettifica_spedizione" type="id" />
<item name="nav_inventario" type="id" />
<item name="nav_articoli_in_giacenza" type="id" />
<item name="nav_versamento_merce" type="id" />
<item name="nav_free_picking" type="id" />
<item name="nav_free_lav_picking" type="id" />

View File

@@ -73,7 +73,8 @@
<string name="rettifica_spedizione_fragment_title">Inventory</string>
<string name="inventario_fragment_title">Inventory</string>
<string name="prod_fabbisogno_linee_prod_title">Production line requirements</string>
<string name="prod_riposizionamento_da_prod_title">Riposizionamento da prod.</string>
<string name="prod_riposizionamento_da_prod_title">Repositioning from production</string>
<string name="articoli_in_giacenza_title">Items in stock</string>
<string name="versamento_merce_fragment_title">Items placement</string>
<string name="free_picking_title_fragment">Free picking</string>
<string name="error">Error</string>
@@ -193,10 +194,13 @@
<string name="available_quantity_overflow_error_message"><![CDATA[The inserted <b>amount</b> exceeds the maximum amount available, please check it]]></string>
<string name="available_num_cnf_overflow_error_message"><![CDATA[The inserted <b>package\'s amount</b> exceeds the maximum amount available, please check it]]></string>
<string name="ordered_quantity_overflow_error_message"><![CDATA[The inserted <b>amount</b> exceeds the total ordered amount, please check it]]></string>
<string name="confirm_ordered_quantity_overflow_error_message"><![CDATA[The inserted <b>amount</b> exceeds the total ordered amount. To continue?]]></string>
<string name="confirm_ordered_num_cnf_overflow_error_message"><![CDATA[The inserted <b>package\'s amount</b> exceeds the total ordered amount. To continue?]]></string>
<string name="ordered_num_cnf_overflow_error_message"><![CDATA[The inserted <b>package\'s amount</b> exceeds the total ordered amount, please check it]]></string>
<string name="invalid_production_line_error_message"><![CDATA[Invalid <b>production line</b>]]></string>
<string name="expire_date_error_message"><![CDATA[The inserted <b>expire date</b> is not valid, please check it.]]></string>
<string name="batch_lot_error_message"><![CDATA[The inserted <b>batch lot</b> is not valid, please check it.]]></string>
<string name="batch_lot_inexistent_error_message">A new batch lot has been added for this item. To continue?</string>
<string name="empty_notes_input_message"><![CDATA[The <b>notes field</b> requires to be filled in for the current form.]]></string>
<string name="settings_category">Settings</string>
<string name="check_box_preference_title">Check box</string>
@@ -356,6 +360,7 @@
<string name="title_dynamic_frudis">Frudis customizations</string>
<string name="batch_lot_not_enabled"><![CDATA[Batch lot: <b>%s</b> is inactive.]]></string>
<string name="item_not_enabled"><![CDATA[Item: <b>%s</b> is inactive.]]></string>
<string name="other">Other</string>
<string name="home">Home</string>
<string name="logout">Logout</string>

View File

@@ -3,7 +3,7 @@
buildscript {
ext {
kotlin_version = '1.9.0'
agp_version = '8.2.2'
agp_version = '8.3.1'
}
repositories {

View File

@@ -1,6 +1,6 @@
#Mon Feb 13 15:14:43 CET 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME