Finish v1.40.29(446)

This commit is contained in:
Giuseppe Scorrano 2024-07-26 16:58:15 +02:00
commit fa95ed1391
30 changed files with 795 additions and 108 deletions

View File

@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 438 def appVersionCode = 446
def appVersionName = '1.40.21' def appVersionName = '1.40.29'
signingConfigs { signingConfigs {
release { release {

View File

@ -114,4 +114,21 @@ public class ColliAccettazioneRESTConsumer extends _BaseRESTConsumer implements
}); });
} }
public void checkBarcodeUl(String barcodeUl, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed){
ColliAccettazioneRESTConsumerService colliAccettazioneRESTConsumerService = RESTBuilder.getService(ColliAccettazioneRESTConsumerService.class);
colliAccettazioneRESTConsumerService.checkIfBarcodeUlAlreadyRegistered(barcodeUl)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Boolean>> call, Response<ServiceRESTResponse<Boolean>> response) {
analyzeAnswer(response, "accettazione/checkIfBarcodeUlAlreadyRegistered", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Boolean>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
} }

View File

@ -12,7 +12,9 @@ import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDCRowResponseDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Query;
public interface ColliAccettazioneRESTConsumerService { public interface ColliAccettazioneRESTConsumerService {
@ -31,4 +33,7 @@ public interface ColliAccettazioneRESTConsumerService {
@POST("wms/accettazione/deleteUDCRow") @POST("wms/accettazione/deleteUDCRow")
Call<ServiceRESTResponse<Void>> deleteUDCRow(@Body DeleteUDCRowRequestDTO deleteUDCRowRequestDTO); Call<ServiceRESTResponse<Void>> deleteUDCRow(@Body DeleteUDCRowRequestDTO deleteUDCRowRequestDTO);
@GET("wms/accettazione/checkIfBarcodeUlAlreadyRegistered")
Call<ServiceRESTResponse<Boolean>> checkIfBarcodeUlAlreadyRegistered(@Query("barcodeUl") String barcodeUl);
} }

View File

@ -1,5 +1,7 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import androidx.annotation.NonNull;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -13,6 +15,8 @@ import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
@ -113,4 +117,21 @@ public class ColliSpedizioneRESTConsumer extends _BaseRESTConsumer implements Co
} }
public void duplicateUDS(DuplicateUDSRequestDTO duplicateUDSRequestDTO, RunnableArgs<DuplicateUDSResponseDTO> onComplete, RunnableArgs<Exception> onFailed) {
ColliSpedizioneRESTConsumerService colliSpedizioneRESTConsumerService = RESTBuilder.getService(ColliSpedizioneRESTConsumerService.class);
colliSpedizioneRESTConsumerService.duplicateUDS(duplicateUDSRequestDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<ServiceRESTResponse<DuplicateUDSResponseDTO>> call, @NonNull Response<ServiceRESTResponse<DuplicateUDSResponseDTO>> response) {
analyzeAnswer(response, "spedizione/duplicateUDS", onComplete, onFailed);
}
@Override
public void onFailure(@NonNull Call<ServiceRESTResponse<DuplicateUDSResponseDTO>> call, @NonNull Throwable t) {
onFailed.run(new Exception());
}
});
}
} }

View File

@ -6,6 +6,8 @@ import it.integry.integrywmsnative.core.rest.model.uds.CloseUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowResponseDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
@ -35,4 +37,7 @@ public interface ColliSpedizioneRESTConsumerService {
@POST("wms/spedizione/deleteUDSRow") @POST("wms/spedizione/deleteUDSRow")
Call<ServiceRESTResponse<Void>> deleteUDSRow(@Body DeleteUDSRowRequestDTO deleteUDSRowRequestDTO); Call<ServiceRESTResponse<Void>> deleteUDSRow(@Body DeleteUDSRowRequestDTO deleteUDSRowRequestDTO);
@POST("wms/spedizione/duplicateUDS")
Call<ServiceRESTResponse<DuplicateUDSResponseDTO>> duplicateUDS(@Body DuplicateUDSRequestDTO duplicateUDSRequestDTO);
} }

View File

@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.rest.consumers;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.Date;
import java.util.List; import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -50,8 +51,21 @@ public class DocumentRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void checkFrumaDocument(String fornitore, String numDoc, String dataDoc, RunnableArgs<Boolean> onComplete, RunnableArgs<Exception> onFailed) {
var inventarioRESTConsumerService = RESTBuilder.getService(DocumentiRESTConsumerService.class);
inventarioRESTConsumerService.checkFrumaDoc(fornitore, numDoc, dataDoc)
.enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<ServiceRESTResponse<Boolean>> call, @NonNull Response<ServiceRESTResponse<Boolean>> response) {
analyzeAnswer(response, "checkDocument", onComplete, onFailed);
}
@Override
public void onFailure(@NonNull Call<ServiceRESTResponse<Boolean>> call, @NonNull Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void loadDocumentAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs<RetrieveDocumentoArtsResponseDTO> onComplete, RunnableArgs<Exception> onFailed) { public void loadDocumentAvailableArts(String codDtip, String codMgrp, String codAnagForn, RunnableArgs<RetrieveDocumentoArtsResponseDTO> onComplete, RunnableArgs<Exception> onFailed) {
var inventarioRESTConsumerService = RESTBuilder.getService(DocumentiRESTConsumerService.class); var inventarioRESTConsumerService = RESTBuilder.getService(DocumentiRESTConsumerService.class);

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import java.util.Date;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.DtbDoct; import it.integry.integrywmsnative.core.model.DtbDoct;
@ -20,8 +21,11 @@ public interface DocumentiRESTConsumerService {
@POST("createDocFromColli") @POST("createDocFromColli")
Call<ServiceRESTResponse<DtbDoct>> createDocFromColli(@Body LoadColliDTO listColli); Call<ServiceRESTResponse<DtbDoct>> createDocFromColli(@Body LoadColliDTO listColli);
@GET("wms/documento/checkFruma")
Call<ServiceRESTResponse<Boolean>> checkFrumaDoc(
@Query("fornitore") String fornitore,
@Query("numDoc") String numDoc,
@Query("dataDoc") String dataDoc);
@GET("wms/documento/arts") @GET("wms/documento/arts")
Call<ServiceRESTResponse<RetrieveDocumentoArtsResponseDTO>> retrieveArts( Call<ServiceRESTResponse<RetrieveDocumentoArtsResponseDTO>> retrieveArts(

View File

@ -1,13 +1,19 @@
package it.integry.integrywmsnative.core.rest.consumers; package it.integry.integrywmsnative.core.rest.consumers;
import androidx.annotation.NonNull;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
@ -59,4 +65,20 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
} }
}); });
} }
public void retrieveAllPartitaMag(List<String> codMarts, Date dataScad, RunnableArgs<List<MtbPartitaMag>> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.retrieveAllPartitaMag(codMarts, UtilityDate.formatDate(dataScad, UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH))
.enqueue(new Callback<>() {
@Override
public void onResponse(@NonNull Call<ServiceRESTResponse<List<MtbPartitaMag>>> call, @NonNull Response<ServiceRESTResponse<List<MtbPartitaMag>>> response) {
analyzeAnswer(response, "retrieveAllPartitaMag", onComplete, onFailed);
}
@Override
public void onFailure(@NonNull Call<ServiceRESTResponse<List<MtbPartitaMag>>> call, @NonNull Throwable t) {
onFailed.run(new Exception(t));
}
});
}
} }

View File

@ -3,14 +3,12 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.POST; import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface MagazzinoRESTConsumerService { public interface MagazzinoRESTConsumerService {
@ -22,6 +20,7 @@ public interface MagazzinoRESTConsumerService {
Call<ServiceRESTResponse<MtbPartitaMag>> retrievePartitaMag(@Query("codMart") String codMart, Call<ServiceRESTResponse<MtbPartitaMag>> retrievePartitaMag(@Query("codMart") String codMart,
@Query("partitaMag") String partitaMag); @Query("partitaMag") String partitaMag);
@POST("wms/partita-magazzino/retrieveAllPartitaMag")
Call<ServiceRESTResponse<List<MtbPartitaMag>>> retrieveAllPartitaMag(@Body List<String> codMarts,
@Query("dataScad") String dataScad);
} }

View File

@ -0,0 +1,28 @@
package it.integry.integrywmsnative.core.rest.model.uds;
import it.integry.integrywmsnative.core.model.MtbColt;
public class DuplicateUDSRequestDTO {
private MtbColt mtbColt;
private int numOfDuplicates;
public MtbColt getMtbColt() {
return mtbColt;
}
public DuplicateUDSRequestDTO setMtbColt(MtbColt mtbColt) {
this.mtbColt = mtbColt;
return this;
}
public int getNumOfDuplicates() {
return numOfDuplicates;
}
public DuplicateUDSRequestDTO setNumOfDuplicates(int numOfDuplicates) {
this.numOfDuplicates = numOfDuplicates;
return this;
}
}

View File

@ -0,0 +1,19 @@
package it.integry.integrywmsnative.core.rest.model.uds;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbColt;
public class DuplicateUDSResponseDTO {
private List<MtbColt> mtbColtList;
public List<MtbColt> getMtbColtList() {
return mtbColtList;
}
public DuplicateUDSResponseDTO setMtbColtList(List<MtbColt> mtbColtList) {
this.mtbColtList = mtbColtList;
return this;
}
}

View File

@ -34,6 +34,7 @@ public class DBSettingsModel {
private boolean flagSpedizioneCanSelectMultipleOrders; private boolean flagSpedizioneCanSelectMultipleOrders;
private List<String> notePerditaDocInterni = new ArrayList<>(); private List<String> notePerditaDocInterni = new ArrayList<>();
private boolean flagSpedizioneUseQtaOrd; private boolean flagSpedizioneUseQtaOrd;
private boolean flagSpedizioneUseColliPedana;
private boolean flagOrdinaNuoviArticoliInGriglia; private boolean flagOrdinaNuoviArticoliInGriglia;
private boolean flagOrdinaArticoliOnScan; private boolean flagOrdinaArticoliOnScan;
private boolean flagConsentiFuoriPianoLogistico; private boolean flagConsentiFuoriPianoLogistico;
@ -78,6 +79,10 @@ public class DBSettingsModel {
private boolean flagTracciamentoImballiCaricoEnabled = false; private boolean flagTracciamentoImballiCaricoEnabled = false;
private boolean flagTracciamentoImballiScaricoEnabled = false; private boolean flagTracciamentoImballiScaricoEnabled = false;
private boolean flagPickingLiberoEnableScanArt = false;
private boolean flagAskDuplicateUDSSpedizione = false;
private boolean suggestDataScad = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@ -268,6 +273,15 @@ public class DBSettingsModel {
return this; return this;
} }
public boolean isFlagSpedizioneUseColliPedana() {
return flagSpedizioneUseColliPedana;
}
public DBSettingsModel setFlagSpedizioneUseColliPedana(boolean flagSpedizioneUseColliPedana) {
this.flagSpedizioneUseColliPedana = flagSpedizioneUseColliPedana;
return this;
}
public DBSettingsModel setFlagOrdinaNuoviArticoliInGriglia(boolean flagOrdinaNuoviArticoliInGriglia) { public DBSettingsModel setFlagOrdinaNuoviArticoliInGriglia(boolean flagOrdinaNuoviArticoliInGriglia) {
this.flagOrdinaNuoviArticoliInGriglia = flagOrdinaNuoviArticoliInGriglia; this.flagOrdinaNuoviArticoliInGriglia = flagOrdinaNuoviArticoliInGriglia;
return this; return this;
@ -654,4 +668,31 @@ public class DBSettingsModel {
this.flagTracciamentoImballiScaricoEnabled = flagTracciamentoImballiScaricoEnabled; this.flagTracciamentoImballiScaricoEnabled = flagTracciamentoImballiScaricoEnabled;
return this; return this;
} }
public boolean isFlagPickingLiberoEnableScanArt() {
return flagPickingLiberoEnableScanArt;
}
public DBSettingsModel setFlagPickingLiberoEnableScanArt(boolean flagPickingLiberoEnableScanArt) {
this.flagPickingLiberoEnableScanArt = flagPickingLiberoEnableScanArt;
return this;
}
public boolean isFlagAskDuplicateUDSSpedizione() {
return flagAskDuplicateUDSSpedizione;
}
public DBSettingsModel setFlagAskDuplicateUDSSpedizione(boolean flagAskDuplicateUDSSpedizione) {
this.flagAskDuplicateUDSSpedizione = flagAskDuplicateUDSSpedizione;
return this;
}
public boolean isSuggestDataScad() {
return suggestDataScad;
}
public DBSettingsModel setSuggestDataScad(boolean suggestDataScad) {
this.suggestDataScad = suggestDataScad;
return this;
}
} }

View File

@ -315,6 +315,11 @@ public class SettingsManager {
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
.setKeySection("FLAG_USE_QTA_ORD") .setKeySection("FLAG_USE_QTA_ORD")
.setSetter(dbSettingsModelIstance::setFlagSpedizioneUseQtaOrd)); .setSetter(dbSettingsModelIstance::setFlagSpedizioneUseQtaOrd));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_USE_COLLI_PEDANA")
.setSetter(dbSettingsModelIstance::setFlagSpedizioneUseColliPedana));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Integer.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Integer.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SETUP") .setSection("SETUP")
@ -388,6 +393,11 @@ public class SettingsManager {
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
.setKeySection("FLAG_ASK_INFO_AGGIUNTIVE") .setKeySection("FLAG_ASK_INFO_AGGIUNTIVE")
.setSetter(dbSettingsModelIstance::setFlagAskInfoAggiuntiveSpedizione)); .setSetter(dbSettingsModelIstance::setFlagAskInfoAggiuntiveSpedizione));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_ASK_DUPLICATE_UDS")
.setSetter(dbSettingsModelIstance::setFlagAskDuplicateUDSSpedizione));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")
@ -446,6 +456,12 @@ public class SettingsManager {
.setKeySection("GENERA_DOC") .setKeySection("GENERA_DOC")
.setSetter(dbSettingsModelIstance::setFlagGeneraDocumentoSpedizione) .setSetter(dbSettingsModelIstance::setFlagGeneraDocumentoSpedizione)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("SUGGEST_DATA_SCAD")
.setSetter(dbSettingsModelIstance::setSuggestDataScad)
.setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("ACCETTAZIONE_BOLLA") .setSection("ACCETTAZIONE_BOLLA")
@ -518,6 +534,12 @@ public class SettingsManager {
.setKeySection("FLAG_WARNING_NEW_PARTITA_MAG") .setKeySection("FLAG_WARNING_NEW_PARTITA_MAG")
.setSetter(dbSettingsModelIstance::setFlagWarningNewPartitaMag) .setSetter(dbSettingsModelIstance::setFlagWarningNewPartitaMag)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("PICKING_LIBERO")
.setKeySection("ENABLE_SCAN_ART")
.setSetter(dbSettingsModelIstance::setFlagPickingLiberoEnableScanArt)
.setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING") .setGestName("PICKING")

View File

@ -22,6 +22,8 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
@ -33,6 +35,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
@ -54,11 +57,15 @@ import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.SitBo
import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto.TestataBollaAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.AccettazioneBollaPickingOrderBy; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.AccettazioneBollaPickingOrderBy;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.filters.AccettazioneBollaPickingFilterViewModel;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListAdapter; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListAdapter;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListModel; import it.integry.integrywmsnative.gest.accettazione_bolla_picking.ui.AccettazioneBollaPickingListModel;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterDescrLayoutView;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView;
@ -83,6 +90,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private final AccettazioneBollaPickingFilterViewModel mAppliedFilterViewModel = new AccettazioneBollaPickingFilterViewModel();
private final ObservableArrayList<AccettazioneBollaPickingListModel> mAccettazioneMutableData = new ObservableArrayList<>(); private final ObservableArrayList<AccettazioneBollaPickingListModel> mAccettazioneMutableData = new ObservableArrayList<>();
@ -150,7 +158,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
this.initVars(); this.initVars();
this.initBarcodeReader(); this.initBarcodeReader();
this.initRecyclerView(); this.initRecyclerView();
// this.initFilters(); this.initFilters();
this.initFab(); this.initFab();
boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneBollaUseQtaOrd(); boolean useQtaBolla = SettingsManager.iDB().isFlagAccettazioneBollaUseQtaOrd();
@ -201,16 +209,85 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
this.mBindings.accettazionePickingList.setAdapter(adapter); this.mBindings.accettazionePickingList.setAdapter(adapter);
this.mViewModel.getPickingList().observe(this, updatedData -> { this.mViewModel.getPickingList().observe(this, updatedData -> {
// mAppliedFilterViewModel.init(updatedData); mAppliedFilterViewModel.init(updatedData);
refreshList(); refreshList();
}); });
adapter.setOnLongClickListener(clickedItem -> {
this.mViewModel.dispatchBollaRow(clickedItem, true);
});
adapter.setOnItemClicked(clickedItem -> { adapter.setOnItemClicked(clickedItem -> {
this.mViewModel.dispatchBollaRow(clickedItem); this.mViewModel.dispatchBollaRow(clickedItem);
}); });
} }
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@Override
public void run() {
refreshList();
}
};
mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(onPredicateChanged);
List<FilterChipDTO> filterList = Stream.of(AccettazioneBollaPickingBindings.AVAILABLE_FILTERS.entrySet()).map(Map.Entry::getValue).sortBy(FilterChipDTO::getPosizione).toList();
for (FilterChipDTO filterChipDTO : filterList) {
FilterChipView filterChipView = new FilterChipView(this, filterChipDTO.getFilterChipText(), v -> initBottomSheetDialogFilter(filterChipDTO));
if (filterChipDTO.getID() == AccettazioneBollaPickingBindings.DESCR_FILTER_ID) {
mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null) {
mViewModel.resetMatchedRows();
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(() -> mAppliedFilterViewModel.getCurrentDescrPredicate().set(null));
}
this.mBindings.filterChipsGroup.addView(filterChipView);
}
}
private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) {
filterChipDTO.getFilterLayoutView().setFilterName(filterChipDTO.getFilterChipText()).setContext(this);
var filterLayoutView = filterChipDTO.getFilterLayoutView();
if (filterChipDTO.getID() == AccettazioneBollaPickingBindings.DESCR_FILTER_ID) {
((FilterDescrLayoutView) filterLayoutView)
.setAll(mAppliedFilterViewModel.getAllDescrs())
.setAvailable(mAppliedFilterViewModel.getAvailableDescrs())
.setOnFilterApplied(mAppliedFilterViewModel::setDescrFilter)
.setPreselected(
Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue()))
.filter(mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null ? x -> false : Objects.requireNonNull(mAppliedFilterViewModel.getCurrentDescrPredicate().get()))
.map(x -> x.getMtbAart().getDescrizioneEstesa()).toList()
);
}
if (!filterLayoutView.isAdded()) filterLayoutView.show(getSupportFragmentManager(), "TAG");
}
private void initFab() { private void initFab() {
fabPopupMenu = new PopupMenu(this, this.mBindings.accettazioneOrdineInevasoFab, fabPopupMenu = new PopupMenu(this, this.mBindings.accettazioneOrdineInevasoFab,
@ -246,13 +323,13 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac
runOnUiThread(() -> { runOnUiThread(() -> {
List<PickingObjectDTO> tmpList; List<PickingObjectDTO> tmpList;
// if (mAppliedFilterViewModel != null) { if (mAppliedFilterViewModel != null) {
// mAppliedFilterViewModel.applyAllTests(); mAppliedFilterViewModel.applyAllTests();
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
// } else { } else {
tmpList = mViewModel.getPickingList().getValue(); tmpList = mViewModel.getPickingList().getValue();
// } }
//
var list = convertDataModelToListModel(tmpList); var list = convertDataModelToListModel(tmpList);
this.mAccettazioneMutableData.clear(); this.mAccettazioneMutableData.clear();

View File

@ -0,0 +1,22 @@
package it.integry.integrywmsnative.gest.accettazione_bolla_picking;
import java.util.HashMap;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterDescrLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
public class AccettazioneBollaPickingBindings {
public static final int DESCR_FILTER_ID = 0;
public static final HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {
{
put(DESCR_FILTER_ID, new FilterChipDTO()
.setID(DESCR_FILTER_ID)
.setPosizione(1)
.setFilterChipText("Descrizione articolo")
.setFilterLayoutView(new FilterDescrLayoutView()));
}
};
}

View File

@ -443,7 +443,11 @@ public class AccettazioneBollaPickingViewModel {
dispatchBollaRow(pickingObjectDTO); dispatchBollaRow(pickingObjectDTO);
} }
public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO) { public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO){
dispatchBollaRow(pickingObjectDTO, false);
}
public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO, boolean longClick) {
if (this.mCurrentMtbColt == null) return; if (this.mCurrentMtbColt == null) return;
AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal();
@ -578,31 +582,42 @@ public class AccettazioneBollaPickingViewModel {
} }
} }
this.sendOnItemDispatched( if (!longClick){
pickingObjectDTO, this.sendOnItemDispatched(
pickingObjectDTO.getMtbAart(), pickingObjectDTO,
initialNumCnf, initialQtaCnf, initialQtaTot, pickingObjectDTO.getMtbAart(),
qtaDaEvadere, initialNumCnf, initialQtaCnf, initialQtaTot,
numCnfDaEvadere, qtaDaEvadere,
qtaCnfDaEvadere, numCnfDaEvadere,
qtaColDaPrelevare, qtaCnfDaEvadere,
numCnfDaPrelevare, qtaColDaPrelevare,
qtaCnfDaPrelevare, numCnfDaPrelevare,
null, qtaCnfDaPrelevare,
null, null,
null, null,
partitaMag, null,
dataScad, partitaMag,
true, dataScad,
(pickedQuantityDTO, shouldCloseLU) -> { true,
this.saveNewRow(pickingObjectDTO, (pickedQuantityDTO, shouldCloseLU) -> {
pickedQuantityDTO.getNumCnf(), this.saveNewRow(pickingObjectDTO,
pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaTot(), pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getPartitaMag(), pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getDataScad(), pickedQuantityDTO.getPartitaMag(),
shouldCloseLU); pickedQuantityDTO.getDataScad(),
}); shouldCloseLU);
});
} else {
this.saveNewRow(
pickingObjectDTO,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
partitaMag,
dataScad,
false);
}
} }

View File

@ -0,0 +1,75 @@
package it.integry.integrywmsnative.gest.accettazione_bolla_picking.filters;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Predicate;
import java.util.List;
import java.util.Objects;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione_bolla_picking.dto.PickingObjectDTO;
public class AccettazioneBollaPickingFilterViewModel {
private final ObservableField<Predicate<PickingObjectDTO>> currentDescrPredicate = new ObservableField<>();
private List<PickingObjectDTO> initialOrderList;
private final MutableLiveData<List<PickingObjectDTO>> currentFilteredOrderList = new MutableLiveData<>();
public void init(List<PickingObjectDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<PickingObjectDTO>> getMutableFilteredOrderList() {
return this.currentFilteredOrderList;
}
public void setDescrFilter(List<String> descrs) {
if (descrs == null || descrs.isEmpty()) currentDescrPredicate.set(null);
else {
currentDescrPredicate.set(o -> descrs.contains(o.getMtbAart().getDescrizione()));
}
}
public void applyAllTests() {
List<PickingObjectDTO> returnList;
if (currentDescrPredicate.get() == null) {
returnList = this.initialOrderList;
} else {
Stream<PickingObjectDTO> tmpStream = Stream.of(this.initialOrderList)
.filter(x ->(currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x)))
);
returnList = tmpStream.toList();
}
this.currentFilteredOrderList.setValue(returnList);
}
public ObservableField<Predicate<PickingObjectDTO>> getCurrentDescrPredicate() {
return currentDescrPredicate;
}
public List<String> getAllDescrs() {
return Stream
.of(Objects.requireNonNull(initialOrderList))
.filter(x -> x.getMtbAart().getDescrizioneEstesa() != null)
.sortBy(x -> x.getMtbAart().getDescrizioneEstesa())
.map(x -> x.getMtbAart().getDescrizioneEstesa() != null ? x.getMtbAart().getDescrizioneEstesa() : null)
.distinct()
.toList();
}
public List<String> getAvailableDescrs() {
return Stream.of(this.initialOrderList)
.map(x -> x.getMtbAart().getDescrizioneEstesa())
.distinct()
.toList();
}
}

View File

@ -33,6 +33,7 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
private final List<AccettazioneBollaPickingListModel> mDataset = new ArrayList<>(); private final List<AccettazioneBollaPickingListModel> mDataset = new ArrayList<>();
private RunnableArgs<PickingObjectDTO> mOnItemClicked; private RunnableArgs<PickingObjectDTO> mOnItemClicked;
private RunnableArgs<PickingObjectDTO> mOnItemLongClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder { static class SubheaderHolder extends RecyclerView.ViewHolder {
@ -75,6 +76,9 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
this.mOnItemClicked = onItemClicked; this.mOnItemClicked = onItemClicked;
} }
public void setOnLongClickListener(RunnableArgs<PickingObjectDTO> onItemLongClicked){
this.mOnItemLongClicked = onItemLongClicked;
}
@Override @Override
public AccettazioneBollaPickingListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { public AccettazioneBollaPickingListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
@ -160,6 +164,12 @@ public class AccettazioneBollaPickingListAdapter extends SectionedRecyclerViewAd
if (this.mOnItemClicked != null) if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel()); this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel());
}); });
holder.mBinding.getRoot().setOnLongClickListener(v -> {
if (this.mOnItemLongClicked != null)
this.mOnItemLongClicked.run(pickingObjectDTO.getOriginalModel());
return true;
});
} }
@Override @Override

View File

@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.Gravity; import android.view.Gravity;
import android.view.Menu; import android.view.Menu;
@ -741,6 +742,16 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A
BarcodeManager.enable(); BarcodeManager.enable();
} }
@Override
public void onWarning(String warningText, Runnable action) {
this.runOnUiThread(() -> {
this.onLoadingEnded();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action)
.show(getSupportFragmentManager(), "tag");
});
}
@Override @Override
public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, LocalDate dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, String customArtDescription, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) { public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaOrd, BigDecimal totalNumCnfOrd, BigDecimal qtaCnfOrd, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, String partitaMag, LocalDate dataScad, boolean canPartitaMagBeChanged, boolean canOverflowQuantity, String customArtDescription, RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO().setMtbAart(mtbAart).setInitialNumCnf(initialNumCnf).setInitialQtaCnf(initialQtaCnf).setInitialQtaTot(initialQtaTot).setTotalQtaOrd(totalQtaOrd).setTotalNumCnfOrd(totalNumCnfOrd).setQtaCnfOrd(qtaCnfOrd).setTotalQtaToBeTaken(totalQtaToBeTaken).setTotalNumCnfToBeTaken(totalNumCnfToBeTaken).setQtaCnfToBeTaken(qtaCnfToBeTaken).setTotalQtaAvailable(totalQtaAvailable).setTotalNumCnfAvailable(totalNumCnfAvailable).setQtaCnfAvailable(qtaCnfAvailable).setPartitaMag(partitaMag).setDataScad(dataScad).setCanPartitaMagBeChanged(canPartitaMagBeChanged).setCanLUBeClosed(true).setCanOverflowOrderQuantity(canOverflowQuantity).setCustomArtDescription(customArtDescription); DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO().setMtbAart(mtbAart).setInitialNumCnf(initialNumCnf).setInitialQtaCnf(initialQtaCnf).setInitialQtaTot(initialQtaTot).setTotalQtaOrd(totalQtaOrd).setTotalNumCnfOrd(totalNumCnfOrd).setQtaCnfOrd(qtaCnfOrd).setTotalQtaToBeTaken(totalQtaToBeTaken).setTotalNumCnfToBeTaken(totalNumCnfToBeTaken).setQtaCnfToBeTaken(qtaCnfToBeTaken).setTotalQtaAvailable(totalQtaAvailable).setTotalNumCnfAvailable(totalNumCnfAvailable).setQtaCnfAvailable(qtaCnfAvailable).setPartitaMag(partitaMag).setDataScad(dataScad).setCanPartitaMagBeChanged(canPartitaMagBeChanged).setCanLUBeClosed(true).setCanOverflowOrderQuantity(canOverflowQuantity).setCustomArtDescription(customArtDescription);

View File

@ -247,8 +247,14 @@ public class AccettazioneOrdiniPickingViewModel {
try { try {
Ean128Model ean128Model = mEan128Service.decode(barcodeScanDTO); Ean128Model ean128Model = mEan128Service.decode(barcodeScanDTO);
//Nel caso trovo un SSCC lo aggiungo mColliAccettazioneRESTConsumer.checkBarcodeUl(ean128Model.Sscc, result -> {
this.processBarcodeNotOpenedLU(barcodeScanDTO, ean128Model.Sscc, onComplete); if (result){
this.sendWarning("Barcode ul già registrato!", onComplete);
} else {
//Nel caso trovo un SSCC lo aggiungo
this.processBarcodeNotOpenedLU(barcodeScanDTO, ean128Model.Sscc, onComplete);
}
}, this::sendError);
} catch (Exception e) { } catch (Exception e) {
this.sendError(e); this.sendError(e);
@ -550,7 +556,7 @@ public class AccettazioneOrdiniPickingViewModel {
if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) { if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getNow(); dataScad = UtilityDate.getNow();
dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita()); dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita());
} }
if (partitaMag == null && dataScad == null) { if (partitaMag == null && dataScad == null) {
@ -933,6 +939,10 @@ public class AccettazioneOrdiniPickingViewModel {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }
private void sendWarning(String warningText, Runnable action) {
if (this.mListener != null) mListener.onWarning(warningText, action);
}
private void sendLUOpened(MtbColt mtbColt) { private void sendLUOpened(MtbColt mtbColt) {
if (this.mListener != null) mListener.onLUOpened(mtbColt); if (this.mListener != null) mListener.onLUOpened(mtbColt);
} }
@ -1050,6 +1060,8 @@ public class AccettazioneOrdiniPickingViewModel {
void onFilterPosizioneApplied(String posizioneToFilter); void onFilterPosizioneApplied(String posizioneToFilter);
void onWarning(String warningText, Runnable action);
void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete); void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete);
} }

View File

@ -3,6 +3,8 @@ package it.integry.integrywmsnative.gest.contab_doc_interni;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -37,6 +39,7 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniE
import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter;
import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel;
import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DocInterniFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, DocInterniViewModel.Listener { public class DocInterniFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, DocInterniViewModel.Listener {
@ -120,10 +123,21 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment,
this.openDocumentSelectionDialog(); this.openDocumentSelectionDialog();
} }
@Override
public void onWarning(String warningText, Runnable action) {
this.requireActivity().runOnUiThread(() -> {
this.onLoadingEnded();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml(warningText)), null, action)
.show(requireActivity().getSupportFragmentManager(), "tag");
});
}
@Override @Override
public void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection) { public void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection) {
mViewModel.setSelectedDocDetails(selection); mViewModel.setSelectedDocDetails(selection, () -> {
mBinding.invalidateAll(); mBinding.invalidateAll();
});
} }
@Override @Override

View File

@ -8,6 +8,7 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository;
import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper;
@ -17,6 +18,8 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingL
import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO; import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoResponseDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoResponseDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO;
@ -76,6 +79,14 @@ public class DocInterniViewModel {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }
private void sendWarning(String warningText, Runnable action) {
if (this.mListener != null) mListener.onWarning(warningText, action);
}
private void sendDocDetailsChanged(DialogSelectDocInfoResponseDTO selection){
if (this.mListener != null) mListener.onDocDetailsChanged(selection);
}
public DocInterniViewModel setListeners(Listener listener) { public DocInterniViewModel setListeners(Listener listener) {
this.mListener = listener; this.mListener = listener;
return this; return this;
@ -85,7 +96,7 @@ public class DocInterniViewModel {
return mDocsList; return mDocsList;
} }
public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection) { public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection, Runnable action) {
this.fornitore = selection.getFornitore(); this.fornitore = selection.getFornitore();
this.dtbTipi = selection.getTipoDoc(); this.dtbTipi = selection.getTipoDoc();
@ -94,10 +105,31 @@ public class DocInterniViewModel {
this.numDoc = selection.getNumDoc() != null ? selection.getNumDoc().toString() : null; this.numDoc = selection.getNumDoc() != null ? selection.getNumDoc().toString() : null;
this.note = selection.getNote(); this.note = selection.getNote();
this.sendOnLoadingStarted(); if (dtbTipi.getCodDtip().equalsIgnoreCase("FRUMA")) {
fetchProducts(() -> { documentRESTConsumer.checkFrumaDocument(
fetchDocuments(this::sendOnLoadingEnded); fornitore.getCodAnag(),
}); numDoc,
UtilityDate.formatDate(dataDoc, "yyyy/MM/dd"),
data -> {
if (!data) {
this.sendWarning(UtilityResources.getString(R.string.no_doc_found_message), this::init);
} else {
action.run();
this.sendOnLoadingStarted();
fetchProducts(() -> {
fetchDocuments(this::sendOnLoadingEnded);
});
}
},
this::sendError
);
} else {
action.run();
this.sendOnLoadingStarted();
fetchProducts(() -> {
fetchDocuments(this::sendOnLoadingEnded);
});
}
} }
public void fetchProducts(Runnable onComplete) { public void fetchProducts(Runnable onComplete) {
@ -210,6 +242,8 @@ public class DocInterniViewModel {
void onError(Exception ex); void onError(Exception ex);
void onWarning(String warningText, Runnable action);
void onDocInterniSetupFetched(DocInterniSetupDTO docInterniSetupDTO); void onDocInterniSetupFetched(DocInterniSetupDTO docInterniSetupDTO);
void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection); void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection);

View File

@ -14,6 +14,7 @@ import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException; import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException; import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
@ -137,13 +138,15 @@ public class PickingLiberoViewModel {
//Cerco tramite etichetta ean 128 (che può indicarmi una UL) //Cerco tramite etichetta ean 128 (che può indicarmi una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete); this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { } else if (UtilityBarcode.isEanPeso(barcodeScanDTO) && SettingsManager.iDB().isFlagPickingLiberoEnableScanArt()) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); this.executeEtichettaEanPeso(barcodeScanDTO, onComplete);
} else { } else if (SettingsManager.iDB().isFlagPickingLiberoEnableScanArt()){
//Cerco tramite ean13 un collo in posizione mono ul definita in anagrafica articolo, altrimenti se abilitato procedo con picking manuale //Cerco tramite ean13 un collo in posizione mono ul definita in anagrafica articolo, altrimenti se abilitato procedo con picking manuale
this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete);
} else {
this.sendError(new NoArtsFoundException());
} }
} }
@ -269,18 +272,16 @@ public class PickingLiberoViewModel {
if (!UtilityString.isNullOrEmpty(ean128Model.Content)) if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content; barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) { if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete); this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else if (!UtilityString.isNullOrEmpty(barcodeProd)) { } else if (!UtilityString.isNullOrEmpty(barcodeProd) && SettingsManager.iDB().isFlagPickingLiberoEnableScanArt()) {
this.loadArticolo(barcodeProd, ean128Model, onComplete); this.loadArticolo(barcodeProd, ean128Model, onComplete);
} else { } else {
this.sendError(new NoLUFoundException()); this.sendError(new NoLUFoundException());
} }
} else { } else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto //EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException()); this.sendError(new NoLUFoundException());
@ -326,7 +327,7 @@ public class PickingLiberoViewModel {
private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) { private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) {
if (this.mFlagAskLineaProd) { if (this.mFlagAskLineaProd) {
this.sendLULineaProdRequired(response -> { this.sendLULineaProdRequired(response -> {
createNewLU_PostLineaProdAsk(customNumCollo, customSerCollo, vtbDest, response.getPosizione(), response.getIdLotto(), onComplete); createNewLU_PostLineaProdAsk(customNumCollo, customSerCollo, vtbDest, response.getPosizione(), response.getIdLotto(), onComplete);
}, () -> { }, () -> {
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();

View File

@ -18,6 +18,7 @@ import androidx.preference.PreferenceFragmentCompat;
import androidx.sqlite.db.SimpleSQLiteQuery; import androidx.sqlite.db.SimpleSQLiteQuery;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.harrysoft.androidbluetoothserial.BluetoothManager; import com.harrysoft.androidbluetoothserial.BluetoothManager;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -26,7 +27,9 @@ import java.io.FileInputStream;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -236,9 +239,10 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
File logFilePath = appContext.getLogFilePath(); File logFilePath = appContext.getLogFilePath();
var files = logFilePath.listFiles(); var files = logFilePath.listFiles();
var fileToShare = Stream.of(files) var fileToShare = Arrays.stream(files)
.sortBy(x -> -1 * x.lastModified()) .sorted(Comparator.reverseOrder())
.findFirstOrElse(null); .findFirst()
.orElse(null);
try { try {
List<MailAttachmentDTO> attachmentDTOList = new ArrayList<>(); List<MailAttachmentDTO> attachmentDTOList = new ArrayList<>();
@ -294,6 +298,8 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null) .makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
}); });
FirebaseCrashlytics.getInstance().recordException(ex);
} }
}); });
}) })

View File

@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.Gravity; import android.view.Gravity;
import android.widget.Toast; import android.widget.Toast;
@ -80,6 +81,7 @@ import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAgg
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView; import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQtaTotOrderedQuantityException;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtView; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtView;
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiView; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
@ -211,6 +213,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione(); boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione();
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd(); boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd();
boolean useColliPedana = SettingsManager.iDB().isFlagSpedizioneUseColliPedana();
mViewmodel.init( mViewmodel.init(
codMdep, codMdep,
@ -223,7 +226,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mColliRegistrati, mColliRegistrati,
mGestioneCol, mSegnoCol, mDefaultCausaleUL, mGestioneCol, mSegnoCol, mDefaultCausaleUL,
mEnableQuantityReset, mEnableQuantityReset,
useQtaOrd); useQtaOrd,
useColliPedana);
} }
@ -280,7 +284,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
fabPopupMenu.getMenu().removeItem(R.id.close_order); fabPopupMenu.getMenu().removeItem(R.id.close_order);
} }
if(!SettingsManager.iDB().isFlagTracciamentoImballiScaricoEnabled()) if (!SettingsManager.iDB().isFlagTracciamentoImballiScaricoEnabled())
fabPopupMenu.getMenu().removeItem(R.id.track_packaging); fabPopupMenu.getMenu().removeItem(R.id.track_packaging);
fabPopupMenu.setOnMenuItemClickListener(item -> { fabPopupMenu.setOnMenuItemClickListener(item -> {
@ -886,6 +890,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean canPartitaMagBeChanged, boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) { RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getNow();
dataScad = dataScad.plusDays(pickingObjectDTO.getMtbAart().getGgScadPartita());
}
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart) .setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf) .setInitialNumCnf(initialNumCnf)
@ -907,7 +916,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setCanLUBeClosed(true) .setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null) .setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null)
.setNotifyProductLotStatus(SettingsManager.iDB().isNotifyLotStatus()); .setNotifyProductLotStatus(SettingsManager.iDB().isNotifyLotStatus())
.setMtbPartitaMagList(mViewmodel.getmPartitaMagList());
if (!mDialogInputQuantityV2View.isVisible()) if (!mDialogInputQuantityV2View.isVisible())
mDialogInputQuantityV2View mDialogInputQuantityV2View
@ -1072,4 +1082,32 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
DialogInfoAggiuntiveLUView.newInstance(mtbColt, onComplete, this::onLoadingEnded) DialogInfoAggiuntiveLUView.newInstance(mtbColt, onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName()); .show(getSupportFragmentManager(), DialogInfoAggiuntiveLUView.class.getName());
} }
@Override
public void onInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs<Integer> onComplete, Runnable onNegativeClick) {
String textWarning = UtilityResources.getString(R.string.ordered_quantity_overflow_error_message);
dialogInputQuantityToDuplicate(inputNumber -> {
if (qtaTot != null && qtaEvasa != null && UtilityBigDecimal.equalsOrGreaterThan(qtaEvasa.multiply(BigDecimal.valueOf(inputNumber)), qtaTot)) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(textWarning)),
null,
() -> this.onInputDuplicate(qtaTot, qtaEvasa, onComplete, onNegativeClick)
).show(getSupportFragmentManager(), "tag");
} else {
onComplete.run(inputNumber);
}
}, onNegativeClick);
}
private void dialogInputQuantityToDuplicate(RunnableArgs<Integer> onComplete, Runnable onNegativeClick) {
DialogSimpleInputHelper.makeInputDialog(this, "Numero pedane da duplicare", inputValue -> {
try {
Integer num = Integer.parseInt(inputValue);
onComplete.run(num);
} catch (NumberFormatException ex) {
this.onError(new Exception("Inserire un numero di risorse valido"));
}
}, onNegativeClick).show();
}
} }

View File

@ -11,6 +11,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsum
import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@ -36,7 +37,8 @@ public class SpedizioneModule {
ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer, MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer,
ImballiRESTConsumer imballiRESTConsumer) { ImballiRESTConsumer imballiRESTConsumer,
MagazzinoRESTConsumer magazzinoRESTConsumer) {
return new SpedizioneViewModel(articoloRESTConsumer, return new SpedizioneViewModel(articoloRESTConsumer,
barcodeRESTConsumer, barcodeRESTConsumer,
colliDataRecoverService, colliDataRecoverService,
@ -48,7 +50,8 @@ public class SpedizioneModule {
colliSpedizioneRESTConsumer, colliSpedizioneRESTConsumer,
colliLavorazioneRESTConsumer, colliLavorazioneRESTConsumer,
magazzinoAutomaticoRESTConsumer, magazzinoAutomaticoRESTConsumer,
imballiRESTConsumer); imballiRESTConsumer,
magazzinoRESTConsumer);
} }
} }

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative.gest.spedizione; package it.integry.integrywmsnative.gest.spedizione;
import androidx.annotation.IntegerRes;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@ -9,14 +10,19 @@ import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.EmptyLUException; import it.integry.integrywmsnative.core.exception.EmptyLUException;
@ -54,6 +60,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsum
import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
@ -72,14 +79,17 @@ import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestOrderDTO; import it.integry.integrywmsnative.core.rest.model.uds.CreateUDSRequestOrderDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.DeleteULRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.DuplicateUDSRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.EditUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.InsertUDSRowRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.PrintULRequestDTO; import it.integry.integrywmsnative.core.rest.model.uds.PrintULRequestDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UntMisUtils;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.exceptions.CurrentMonoLUPositionIsNotCorrectException; import it.integry.integrywmsnative.gest.spedizione.exceptions.CurrentMonoLUPositionIsNotCorrectException;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidMagazzinoAutomaticoMovementException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidMagazzinoAutomaticoMovementException;
@ -89,6 +99,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadExceptio
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQtaTotOrderedQuantityException;
import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.TracciamentoImballoDTO; import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.TracciamentoImballoDTO;
public class SpedizioneViewModel { public class SpedizioneViewModel {
@ -96,6 +107,7 @@ public class SpedizioneViewModel {
private List<OrdineUscitaInevasoDTO> mTestateOrdini; private List<OrdineUscitaInevasoDTO> mTestateOrdini;
private MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>(); private MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
private List<MtbColt> mColliRegistrati = new ArrayList<>(); private List<MtbColt> mColliRegistrati = new ArrayList<>();
private List<MtbPartitaMag> mPartitaMagList = new ArrayList<>();
private Listener mListener; private Listener mListener;
@ -114,6 +126,7 @@ public class SpedizioneViewModel {
private boolean mIsNewLU; private boolean mIsNewLU;
private boolean mEnableQuantityReset; private boolean mEnableQuantityReset;
private boolean mUseQtaOrd; private boolean mUseQtaOrd;
private boolean mUseColliPedana;
private boolean mIsOrdTrasf = false; private boolean mIsOrdTrasf = false;
private MtbColt mCurrentMtbColt = null; private MtbColt mCurrentMtbColt = null;
@ -133,6 +146,7 @@ public class SpedizioneViewModel {
private final ImballiRESTConsumer mImballiRESTConsumer; private final ImballiRESTConsumer mImballiRESTConsumer;
private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer; private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer;
private MagazzinoRESTConsumer magazzinoRESTConsumer;
@Inject @Inject
public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer, public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer,
@ -146,7 +160,8 @@ public class SpedizioneViewModel {
ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer,
ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer,
MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer,
ImballiRESTConsumer imballiRESTConsumer) { ImballiRESTConsumer imballiRESTConsumer,
MagazzinoRESTConsumer magazzinoRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer; this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService; this.mColliDataRecoverService = colliDataRecoverService;
@ -159,10 +174,11 @@ public class SpedizioneViewModel {
this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer; this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer;
this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer; this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer;
this.mImballiRESTConsumer = imballiRESTConsumer; this.mImballiRESTConsumer = imballiRESTConsumer;
this.magazzinoRESTConsumer = magazzinoRESTConsumer;
} }
public void init(String codMdep, boolean enableGiacenza, boolean enableCheckPartitaMag, boolean shouldAskPesoLU, boolean canOverflowOrderQuantity, List<SitArtOrdDTO> pickingList, List<OrdineUscitaInevasoDTO> testateOrdini, List<MtbColt> colliRegistrati, GestioneEnum gestioneCol, int segnoCol, Integer defaultCausaleUL, boolean enableQuantityReset, boolean useQtaOrd) { public void init(String codMdep, boolean enableGiacenza, boolean enableCheckPartitaMag, boolean shouldAskPesoLU, boolean canOverflowOrderQuantity, List<SitArtOrdDTO> pickingList, List<OrdineUscitaInevasoDTO> testateOrdini, List<MtbColt> colliRegistrati, GestioneEnum gestioneCol, int segnoCol, Integer defaultCausaleUL, boolean enableQuantityReset, boolean useQtaOrd, boolean useColliPedana) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mDefaultCodMdep = codMdep; this.mDefaultCodMdep = codMdep;
@ -175,25 +191,40 @@ public class SpedizioneViewModel {
this.mDefaultCausaleOfUL = defaultCausaleUL; this.mDefaultCausaleOfUL = defaultCausaleUL;
this.mEnableQuantityReset = enableQuantityReset; this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd; this.mUseQtaOrd = useQtaOrd;
this.mUseColliPedana = useColliPedana;
if (enableGiacenza) { if (enableGiacenza) {
mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> {
this.mPickingList.postValue(pickingObjectList); this.mPickingList.postValue(pickingObjectList);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new OrdersLoadException(ex))); }, ex -> this.sendError(new OrdersLoadException(ex)));
} else { } else {
getEmptyPickingList(pickingList, pickingObjectList -> { getEmptyPickingList(pickingList, pickingObjectList -> {
this.mPickingList.postValue(pickingObjectList); this.mPickingList.postValue(pickingObjectList);
this.sendOnLoadingEnded();
}); });
} }
getPartitaMagList(pickingList, mtbPartitaMagList -> {
this.mPartitaMagList = mtbPartitaMagList;
this.sendOnLoadingEnded();
});
this.mDefaultGestioneOfUL = gestioneCol; this.mDefaultGestioneOfUL = gestioneCol;
this.mDefaultSegnoCol = segnoCol; this.mDefaultSegnoCol = segnoCol;
this.initDefaultVars(); this.initDefaultVars();
} }
private void getPartitaMagList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<MtbPartitaMag>> onComplete) {
if (SettingsManager.iDB().isSuggestDataScad()) {
List<String> codMarts = sitArtOrdList.stream()
.map(x -> x.getCodMart().trim())
.collect(Collectors.toList());
this.magazzinoRESTConsumer.retrieveAllPartitaMag(codMarts, new Date(), onComplete, this::sendError);
} else {
onComplete.run(new ArrayList<>());
}
}
private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) { private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = sitArtOrdList.stream() List<String> codMarts = sitArtOrdList.stream()
@ -982,20 +1013,6 @@ public class SpedizioneViewModel {
refMtbColt = pickingObjectDTO.getMtbColts().get(0); refMtbColt = pickingObjectDTO.getMtbColts().get(0);
} }
// MtbColr refMtbColr = null;
//
// if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) {
// Optional<MtbColr> optionalMtbColr = Stream.of(refMtbColt.getMtbColr())
// .filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) &&
// UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) &&
// UtilityString.equalsIgnoreCase(y.getCodCol(), scannedMtbColr.getCodCol()) &&
// (!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(y.getPartitaMag(), scannedMtbColr.getPartitaMag()) || UtilityString.isNullOrEmpty(scannedMtbColr.getPartitaMag())))
// .findFirst();
//
// if (optionalMtbColr.isPresent()) refMtbColr = optionalMtbColr.get();
// }
if (refMtbColr != null) { if (refMtbColr != null) {
if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) { if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) {
if (UtilityBigDecimal.equalsOrLowerThan(refMtbColr.getQtaCol(), qtaDaEvadere)) { if (UtilityBigDecimal.equalsOrLowerThan(refMtbColr.getQtaCol(), qtaDaEvadere)) {
@ -1083,8 +1100,12 @@ public class SpedizioneViewModel {
} }
} }
BigDecimal initialNumCnf = mUseColliPedana ? pickingObjectDTO.getMtbAart().getColliPedana() : mUseQtaOrd ? numCnfDaPrelevare : null;
BigDecimal initialQtaCnf = mUseColliPedana ? pickingObjectDTO.getMtbAart().getQtaCnf() : mUseQtaOrd ? qtaCnfDaPrelevare : null;
BigDecimal initialQtaTot = mUseColliPedana ? initialNumCnf.multiply(initialQtaCnf) : mUseQtaOrd ? qtaColDaPrelevare : null;
MtbColt finalRefMtbColt = refMtbColt; MtbColt finalRefMtbColt = refMtbColt;
this.onItemDispatched(pickingObjectDTO, pickingObjectDTO.getMtbAart(), mUseQtaOrd ? numCnfDaPrelevare : null, mUseQtaOrd ? qtaCnfDaPrelevare : null, mUseQtaOrd ? qtaColDaPrelevare : null, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, qtaColDaPrelevare, numCnfDaPrelevare, qtaCnfDaPrelevare, totalQtaAvailable, totalNumCnfAvailable, qtaCnfAvailable, partitaMag, dataScad, mCanOverflowOrderQuantity, canPartitaMagBeChanged, (pickedQuantityDTO, shouldCloseLU) -> { this.onItemDispatched(pickingObjectDTO, pickingObjectDTO.getMtbAart(), initialNumCnf, initialQtaCnf, initialQtaTot, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, qtaColDaPrelevare, numCnfDaPrelevare, qtaCnfDaPrelevare, totalQtaAvailable, totalNumCnfAvailable, qtaCnfAvailable, partitaMag, dataScad, mCanOverflowOrderQuantity, canPartitaMagBeChanged, (pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO, finalRefMtbColt, pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaTot(), pickedQuantityDTO.getPartitaMag(), pickedQuantityDTO.getDataScad(), shouldCloseLU); this.saveNewRow(pickingObjectDTO, finalRefMtbColt, pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaTot(), pickedQuantityDTO.getPartitaMag(), pickedQuantityDTO.getDataScad(), shouldCloseLU);
}); });
} }
@ -1549,31 +1570,37 @@ public class SpedizioneViewModel {
this.closeLU(generatedMtbColts -> { this.closeLU(generatedMtbColts -> {
this.mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(generatedMtbColts, filledMtbColts -> { this.validateTheUdsToBeDuplicated(generatedMtbColts, duplicatedMtbColts -> {
this.askPositionChange( if (duplicatedMtbColts != null) {
filledMtbColts, generatedMtbColts.addAll(duplicatedMtbColts);
positionedMtbColts -> { }
this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> { this.mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(generatedMtbColts, filledMtbColts -> {
positionedMtbColts.stream()
.filter(x -> !this.mColliRegistrati.contains(x))
.forEach(x -> this.mColliRegistrati.add(x));
postCloseOperations(positionedMtbColts); this.askPositionChange(
filledMtbColts,
positionedMtbColts -> {
this.mIsNewLU = false; this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> {
positionedMtbColts.stream()
.filter(x -> !this.mColliRegistrati.contains(x))
.forEach(x -> this.mColliRegistrati.add(x));
postCloseOperations(positionedMtbColts);
this.mIsNewLU = false;
this.resetMatchedRows();
this.sendLUClosed();
this.sendOnLoadingEnded();
});
this.resetMatchedRows();
this.sendLUClosed();
this.sendOnLoadingEnded();
}); });
}); }, this::sendError);
});
}, this::sendError);
}); });
}); });
}); });
}); });
@ -1596,8 +1623,79 @@ public class SpedizioneViewModel {
this.mColliScaricoRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> { this.mColliScaricoRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> {
onComplete.run(closeResponse.getGeneratedMtbColts()); onComplete.run(closeResponse.getGeneratedMtbColts());
}, this::sendError); }, this::sendError);
}
private void validateTheUdsToBeDuplicated(List<MtbColt> mtbColtList, RunnableArgs<List<MtbColt>> onComplete) {
var clonedLu = (MtbColt) this.mCurrentMtbColt.clone();
boolean noReference = clonedLu.getMtbColr().stream()
.allMatch(
x -> x.getGestioneRif() == null &&
x.getDataColloRifD() == null &&
x.getSerColloRif() == null &&
x.getNumColloRif() == null
);
if (mtbColtList.size() > 1 || !noReference || !SettingsManager.iDB().isFlagAskDuplicateUDSSpedizione()) {
onComplete.run(new ArrayList<>());
return;
}
var savedMtbColt = mtbColtList.get(0);
//Controllo se si va in extra quantity
if (!SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione()) {
Map<String, List<MtbColr>> groupedByCodMart = savedMtbColt.getMtbColr()
.stream()
.filter(x -> x.getCodMart() != null)
.collect(Collectors.groupingBy(MtbColr::getCodMart));
for (PickingObjectDTO pickingObjectDTO : Objects.requireNonNull(this.mPickingList.getValue())) {
if (pickingObjectDTO.getMtbAart() != null) {
String codMart = pickingObjectDTO.getMtbAart().getCodMart();
if (groupedByCodMart.containsKey(codMart)) {
BigDecimal qtaTot = UntMisUtils.shouldBeShowInColli(pickingObjectDTO.getMtbAart()) ? pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd() : pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal qtaEvasa = Objects.requireNonNull(groupedByCodMart.get(codMart)).stream().map(MtbColr::getNumCnf).reduce(BigDecimal.ZERO, BigDecimal::add);
sendInputDuplicate(qtaTot, qtaEvasa, inputNumber -> {
duplicateUDS(savedMtbColt, inputNumber, onComplete);
}, () -> onComplete.run(null));
}
}
}
} else {
sendInputDuplicate(inputNumber -> {
duplicateUDS(savedMtbColt, inputNumber, onComplete);
}, () -> onComplete.run(null));
}
}
private void duplicateUDS(MtbColt savedMtbColt, Integer inputNumber, RunnableArgs<List<MtbColt>> onComplete) {
var duplicateUDSRequestDTO = new DuplicateUDSRequestDTO()
.setMtbColt(savedMtbColt)
.setNumOfDuplicates(inputNumber);
this.mColliSpedizioneRESTConsumer.duplicateUDS(duplicateUDSRequestDTO, data -> {
Map<String, List<MtbColr>> groupedByCodMart = data.getMtbColtList()
.stream()
.flatMap(x -> x.getMtbColr().stream())
.filter(x -> x.getCodMart() != null)
.collect(Collectors.groupingBy(MtbColr::getCodMart));
for (PickingObjectDTO pickingObjectDTO : Objects.requireNonNull(this.mPickingList.getValue())) {
if (pickingObjectDTO.getMtbAart() != null) {
String codMart = pickingObjectDTO.getMtbAart().getCodMart();
if (groupedByCodMart.containsKey(codMart)) {
pickingObjectDTO.getWithdrawMtbColrs()
.addAll(Objects.requireNonNull(groupedByCodMart.get(codMart)));
}
}
}
onComplete.run(data.getMtbColtList());
}, this::sendError);
} }
private void checkIfShouldBeDeleted(Runnable onDeleted, Runnable onContinue) { private void checkIfShouldBeDeleted(Runnable onDeleted, Runnable onContinue) {
@ -1904,6 +2002,10 @@ public class SpedizioneViewModel {
return mPickingList; return mPickingList;
} }
public List<MtbPartitaMag> getmPartitaMagList() {
return mPartitaMagList;
}
public ArrayList<MtbColt> getCreatedMtbColts() { public ArrayList<MtbColt> getCreatedMtbColts() {
return (ArrayList<MtbColt>) this.mColliRegistrati; return (ArrayList<MtbColt>) this.mColliRegistrati;
} }
@ -1938,6 +2040,16 @@ public class SpedizioneViewModel {
this.mDocumentRESTConsumer.createDocFromColli(loadCollidto, doc -> this.sendOnOrderClosed(), this::sendError); this.mDocumentRESTConsumer.createDocFromColli(loadCollidto, doc -> this.sendOnOrderClosed(), this::sendError);
} }
private void sendInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs<Integer> onComplete, Runnable onNegativeClick) {
if (this.mListener != null)
mListener.onInputDuplicate(qtaTot, qtaEvasa, onComplete, onNegativeClick);
}
private void sendInputDuplicate(RunnableArgs<Integer> onComplete, Runnable onNegativeClick) {
if (this.mListener != null)
mListener.onInputDuplicate(null, null, onComplete, onNegativeClick);
}
public SpedizioneViewModel setListeners(Listener listener) { public SpedizioneViewModel setListeners(Listener listener) {
this.mListener = listener; this.mListener = listener;
return this; return this;
@ -1970,6 +2082,8 @@ public class SpedizioneViewModel {
void onChooseArtsRequest(List<MtbAart> artsList, RunnableArgs<List<MtbAart>> onComplete); void onChooseArtsRequest(List<MtbAart> artsList, RunnableArgs<List<MtbAart>> onComplete);
void onOrderClosed(); void onOrderClosed();
void onInputDuplicate(BigDecimal qtaTot, BigDecimal qtaEvasa, RunnableArgs<Integer> onComplete, Runnable onNegativeClick);
} }
} }

View File

@ -2,9 +2,11 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO; import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@ -57,6 +59,8 @@ public class DialogInputQuantityV2DTO {
private String customArtDescription; private String customArtDescription;
private List<MtbPartitaMag> mtbPartitaMagList;
public MtbAart getMtbAart() { public MtbAart getMtbAart() {
return mtbAart; return mtbAart;
} }
@ -380,4 +384,13 @@ public class DialogInputQuantityV2DTO {
this.warnOnQuantityOverflow = warnOnQuantityOverflow; this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this; return this;
} }
public List<MtbPartitaMag> getMtbPartitaMagList() {
return mtbPartitaMagList;
}
public DialogInputQuantityV2DTO setMtbPartitaMagList(List<MtbPartitaMag> mtbPartitaMagList) {
this.mtbPartitaMagList = mtbPartitaMagList;
return this;
}
} }

View File

@ -27,6 +27,7 @@ import com.pedromassango.doubleclick.DoubleClickListener;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@ -177,6 +178,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag()) .setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag())
.setDataScad(mDialogInputQuantityV2DTO.getDataScad()) .setDataScad(mDialogInputQuantityV2DTO.getDataScad())
.setDisableTracciabilitaCheck(mDialogInputQuantityV2DTO.isDisableTracciabilitaCheck()) .setDisableTracciabilitaCheck(mDialogInputQuantityV2DTO.isDisableTracciabilitaCheck())
.setmPartitaMagList(mDialogInputQuantityV2DTO.getMtbPartitaMagList())
.setStatoArt(mDialogInputQuantityV2DTO.getStatoPartitaMag() != null ? mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt() : null); .setStatoArt(mDialogInputQuantityV2DTO.getStatoPartitaMag() != null ? mDialogInputQuantityV2DTO.getStatoPartitaMag().getStatoArt() : null);
mBindings.setView(this); mBindings.setView(this);
@ -301,7 +303,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> { UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> {
if (this.mEnableDataCallback) { if (this.mEnableDataCallback) {
this.mViewModel.setPartitaMag(value); this.mViewModel.setNewPartitaMag(value);
} }
}); });
@ -403,7 +405,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
UtilityObservable.addPropertyChanged(this.mViewModel.blockedQtaTot, (value) -> { UtilityObservable.addPropertyChanged(this.mViewModel.blockedQtaTot, (value) -> {
toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value); toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value);
if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) { if (Objects.requireNonNull(this.mViewModel.mtbAart.get()).isFlagQtaCnfFissaBoolean()) {
this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable() && !value); this.enabledNumCnf.set(this.mDialogInputQuantityV2DTO.isNumCnfEditable() && !value);
} else { } else {
if (value) { if (value) {

View File

@ -4,8 +4,13 @@ import androidx.databinding.ObservableField;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.concurrent.FutureTask; import java.util.concurrent.FutureTask;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Stream;
import javax.inject.Inject; import javax.inject.Inject;
@ -100,6 +105,8 @@ public class DialogInputQuantityV2ViewModel {
private StatoPartitaMag statoArt; private StatoPartitaMag statoArt;
private List<MtbPartitaMag> mPartitaMagList;
@Inject @Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) { public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer;
@ -354,6 +361,11 @@ public class DialogInputQuantityV2ViewModel {
return this; return this;
} }
public DialogInputQuantityV2ViewModel setmPartitaMagList(List<MtbPartitaMag> mPartitaMagList) {
this.mPartitaMagList = mPartitaMagList;
return this;
}
public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) { public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow; this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this; return this;
@ -378,6 +390,37 @@ public class DialogInputQuantityV2ViewModel {
return this; return this;
} }
public void setNewPartitaMag(String internalPartitaMag) {
this.internalPartitaMag = internalPartitaMag;
if (mPartitaMagList != null && SettingsManager.iDB().isSuggestDataScad()){
Optional<MtbPartitaMag> partitaMag = mPartitaMagList.stream()
.filter(x -> x.getPartitaMag().equalsIgnoreCase(internalPartitaMag))
.findFirst();
if (partitaMag.isPresent()){
setNewDataScad(partitaMag.get().getDataScad());
} else {
MtbAart localMtbAart = mtbAart.get();
LocalDate dataScad = null;
if (localMtbAart != null && localMtbAart.getGgScadPartita() != null && localMtbAart.getGgScadPartita() > 0) {
dataScad = UtilityDate.getNow();
dataScad.plusDays(localMtbAart.getGgScadPartita());
}
setNewDataScad(dataScad);
}
}
this.mListener.onDataChanged();
}
public void setNewDataScad(LocalDate internalDataScad) {
this.internalDataScad = internalDataScad;
this.mListener.onDataChanged();
}
public DialogInputQuantityV2ViewModel setDataScad(LocalDate internalDataScad) { public DialogInputQuantityV2ViewModel setDataScad(LocalDate internalDataScad) {
this.internalDataScad = internalDataScad; this.internalDataScad = internalDataScad;
return this; return this;