Finish v1.38.00(410)

This commit is contained in:
Giuseppe Scorrano 2024-01-23 11:16:14 +01:00
commit f03fe78ed3
39 changed files with 925 additions and 182 deletions

View File

@ -1,6 +1,6 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App"> <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="WMS.app.main" /> <module name="WMS_Native.app.main" />
<option name="DEPLOY" value="true" /> <option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" /> <option name="DEPLOY_AS_INSTANT" value="false" />

View File

@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 409 def appVersionCode = 410
def appVersionName = '1.37.01' def appVersionName = '1.38.00'
signingConfigs { signingConfigs {
release { release {

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.core.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class InvalidCodMdepException extends Exception {
public InvalidCodMdepException() {
super(UtilityResources.getString(R.string.invalid_codmdep));
}
}

View File

@ -64,10 +64,10 @@ public class MesRESTConsumer extends _BaseRESTConsumer {
} }
public void getOrdiniLavorazione(Date dateStart, String flagEvaso, String codJfas, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void getOrdiniLavorazione(String flagEvaso, RunnableArgs<List<OrdineLavorazioneDTO>> onComplete, RunnableArgs<Exception> onFailed) {
MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class); MesRESTConsumerService mesRESTConsumerService = RESTBuilder.getService(MesRESTConsumerService.class);
mesRESTConsumerService.getOrdiniLavorazione(UtilityDate.formatDate(dateStart, UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH), flagEvaso, codJfas) mesRESTConsumerService.getOrdiniLavorazione(flagEvaso)
.enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() { .enqueue(new Callback<ServiceRESTResponse<List<OrdineLavorazioneDTO>>>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> call, Response<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> response) {

View File

@ -20,7 +20,7 @@ public interface MesRESTConsumerService {
@GET("mes_v2/getOrdiniLavorazione") @GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas); Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("flagEvaso") String flagEvaso);
@GET("mes_v2/getOrdiniLavorazione") @GET("mes_v2/getOrdiniLavorazione")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas, @Query("codAnag") String codAnag); Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazione(@Query("startDate") String startDate, @Query("flagEvaso") String flagEvaso, @Query("codJfas") String codJfas, @Query("codAnag") String codAnag);

View File

@ -1,7 +1,12 @@
package it.integry.integrywmsnative.core.utility; package it.integry.integrywmsnative.core.utility;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.List;
public class UtilityDB { public class UtilityDB {
@ -32,4 +37,9 @@ public class UtilityDB {
return valueString; return valueString;
} }
public static String listValueToString(List<String> lista) {
lista = Stream.of(lista).map(UtilityDB::valueToString).toList();
return StringUtils.join(lista,",");
}
} }

View File

@ -184,6 +184,16 @@ public class UtilityDate {
} else return null; } else return null;
} }
public static String formatDate(String dateToFormat, String format) {
if (dateToFormat != null) {
LocalDateTime data = recognizeLocalDateTimeWithExceptionHandler(dateToFormat);
if (data != null) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
return data.format(dateTimeFormatter);
}else return null;
} else return null;
}
public static boolean isBeforeToday(LocalDateTime inputDate) { public static boolean isBeforeToday(LocalDateTime inputDate) {
return inputDate != null && inputDate.toLocalDate().isBefore(getNow()); return inputDate != null && inputDate.toLocalDate().isBefore(getNow());
} }

View File

@ -3,10 +3,9 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.dialog;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import com.annimon.stream.Stream;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.exception.DocumentRequiredException; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.exception.DocumentRequiredException;
@ -34,24 +33,11 @@ public class DialogSelectDocInfoViewModel extends ViewModel {
private final MutableLiveData<Boolean> noteRequired = new MutableLiveData<>(false); private final MutableLiveData<Boolean> noteRequired = new MutableLiveData<>(false);
public DialogSelectDocInfoViewModel() { public DialogSelectDocInfoViewModel() {
tipoDoc.observeForever(val -> tipoDoc.observeForever(val -> fornitoreRequired.postValue(val != null && (val.getGestioneDoc().equals("T") || val.getGestioneDoc().equals("A") || (val.getGestioneDoc().equals("P") && !val.getGestione().equals("L")))));
fornitoreRequired.postValue(
val != null &&
(val.getGestioneDoc().equals("T") ||
val.getGestioneDoc().equals("A") ||
(val.getGestioneDoc().equals("P") &&
!val.getGestione().equals("L")))));
tipoDoc.observeForever(val -> tipoDoc.observeForever(val -> documentRequired.postValue(val != null && val.getGestioneDoc().equalsIgnoreCase("P") && !val.getGestione().equalsIgnoreCase("L")));
documentRequired.postValue(
val != null &&
val.getGestioneDoc().equalsIgnoreCase("P") && !val.getGestione().equalsIgnoreCase("L")));
tipoDoc.observeForever(val -> tipoDoc.observeForever(val -> noteRequired.postValue(val != null && val.getGestioneDoc().equals("P") && val.getGestione().equals("L")));
noteRequired.postValue(
val != null &&
val.getGestioneDoc().equals("P") &&
val.getGestione().equals("L")));
} }
public MutableLiveData<List<FornitoreDTO>> getAvailableFornitori() { public MutableLiveData<List<FornitoreDTO>> getAvailableFornitori() {
@ -60,18 +46,15 @@ public class DialogSelectDocInfoViewModel extends ViewModel {
public void setFornitori(List<FornitoreDTO> fornitori) { public void setFornitori(List<FornitoreDTO> fornitori) {
tipoDoc.observeForever(val -> { tipoDoc.observeForever(val -> {
availableFornitori.postValue(Stream.of(fornitori) List<FornitoreDTO> availableFornitoriList = fornitori.stream().filter(forn -> {
.filter(forn -> {
if (val.getGestioneDoc().equalsIgnoreCase("T")) { if (val.getGestioneDoc().equalsIgnoreCase("T")) {
return forn.getTipoAnag().equalsIgnoreCase("D") && return forn.getTipoAnag().equalsIgnoreCase("D") && forn.getGestioneAnag().equalsIgnoreCase(val.getGestione().equalsIgnoreCase("V") ? "V" : "L");
forn.getGestioneAnag().equalsIgnoreCase(
val.getGestione().equalsIgnoreCase("V") ? "V" : "L"
);
} else { } else {
return forn.getTipoAnag().equalsIgnoreCase("F"); return forn.getTipoAnag().equalsIgnoreCase("F");
} }
}) }).collect(Collectors.toList());
.toList());
availableFornitori.postValue(availableFornitoriList);
}); });
} }

View File

@ -213,10 +213,16 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
(recoveredMtbColt.getGestioneEnum() == GestioneEnum.VENDITA || (recoveredMtbColt.getGestioneEnum() == GestioneEnum.VENDITA ||
recoveredMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE)) { recoveredMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE)) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
if(recoveredMtbColtDto.getTestateOrdini() != null &&
!recoveredMtbColtDto.getTestateOrdini().isEmpty()){
codMdep = recoveredMtbColtDto.getTestateOrdini().get(0).getCodMdep();
}
var closeUDSRequestDto = new CloseUDSRequestDTO() var closeUDSRequestDto = new CloseUDSRequestDTO()
.setMtbColt(recoveredMtbColt) .setMtbColt(recoveredMtbColt)
//.setPrintSSCC(shouldPrint) //.setPrintSSCC(shouldPrint)
.setOrderCodMdep(recoveredMtbColtDto.getTestateOrdini().get(0).getCodMdep()); .setOrderCodMdep(codMdep);
RunnableArgs<CloseUDSResponseDTO> onRequestComplete = closeUDSResponseDto -> { RunnableArgs<CloseUDSResponseDTO> onRequestComplete = closeUDSResponseDto -> {
colliDataRecoverService.closeSession(recoveredMtbColtID); colliDataRecoverService.closeSession(recoveredMtbColtID);

View File

@ -7,7 +7,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterAutom
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView;

View File

@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterAutom
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterClienteLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterGruppoMercLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterPaeseLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterTermConsLayoutView;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterVettoreLayoutView;

View File

@ -13,6 +13,7 @@ import java.util.List;
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.core.exception.InvalidCodMdepException;
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;
@ -211,7 +212,14 @@ public class PickingLiberoViewModel {
} }
} else if (mtbColtList.size() == 1) { } else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, articolo, onComplete); pickMerceULtoUL(mtbColt, articolo, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError); }, this::sendError);
} else { } else {
this.sendError(new TooManyLUFoundInMonoLUPositionException()); this.sendError(new TooManyLUFoundInMonoLUPositionException());
@ -235,7 +243,14 @@ public class PickingLiberoViewModel {
if (mtbColtScanned == null) { if (mtbColtScanned == null) {
this.sendError(new NoLUFoundException()); this.sendError(new NoLUFoundException());
} else if ((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) { } else if ((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColtScanned.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtScanned, onComplete); pickMerceULtoUL(mtbColtScanned, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else { } else {
this.sendError(new NoLUFoundException()); this.sendError(new NoLUFoundException());
} }

View File

@ -2,7 +2,7 @@ package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
import java.util.HashMap; import java.util.HashMap;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; 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.FilterChipDTO;

View File

@ -19,6 +19,7 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -41,7 +42,7 @@ import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElenc
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.AccettazioneOrdiniPickingActivity; import it.integry.integrywmsnative.gest.accettazione_ordini_picking.AccettazioneOrdiniPickingActivity;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView; import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.FilterCommessaLayoutView;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.OrdineProduzioneFilterViewModel; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.filters.OrdineProduzioneFilterViewModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
@ -302,7 +303,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
private List<MainListProdOrdineProduzioneElencoListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) { private List<MainListProdOrdineProduzioneElencoListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) {
return Stream.of(dataList) return Stream.of(dataList)
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode) //.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : "")) .sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
.map(x -> { .map(x -> {
MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel(); MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel();
@ -313,15 +314,20 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList) // List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
.filter(y -> y.getBarcode().equals(x.getBarcode())) // .filter(y -> y.getBarcode().equals(x.getBarcode()))
.map(y -> new MainListProdOrdineProduzioneElencoClienteListModel() // .map(y -> new MainListProdOrdineProduzioneElencoClienteListModel()
.setPrimaryText(y.getRifOrd()) // .setPrimaryText(y.getRifOrd())
.setRightText(y.getCodJcom()) // .setRightText(y.getCodJcom())
.setOriginalModel(y)) // .setOriginalModel(y))
.toList(); // .toList();
listModel.setClientiListModel(clienti); MainListProdOrdineProduzioneElencoClienteListModel cliente = new MainListProdOrdineProduzioneElencoClienteListModel()
.setPrimaryText(x.getRifOrd())
.setRightText(x.getCodJcom())
.setOriginalModel(x);
listModel.setClientiListModel(Collections.singletonList(cliente));
return listModel; return listModel;
}) })

View File

@ -0,0 +1,20 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import java.util.HashMap;
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 HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {{
put(NUM_ORD_FILTER_ID, new FilterChipDTO()
.setID(NUM_ORD_FILTER_ID)
.setFilterChipText("Numero ordine")
.setFilterLayoutView(new FilterNumeroOrdineLayoutView()));
}};
}

View File

@ -8,29 +8,54 @@ import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment; 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.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeListSingleItemBinding;
import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeProdBinding;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaView; import it.integry.integrywmsnative.databinding.FragmentProdFabbisognoLineeTitleItemBinding;
import it.integry.integrywmsnative.gest.accettazione_ordini_elenco.dto.OrdineAccettazioneInevasoDTO;
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;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.filters.ProdFabbisognoLineeProdFilterViewModel;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity; import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdView; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdView;
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;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link Fragment} subclass.
@ -39,12 +64,15 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbiso
*/ */
public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITitledFragment, ProdFabbisognoLineeProdViewModel.Listener { public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITitledFragment, ProdFabbisognoLineeProdViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false);
@Inject @Inject
ProdFabbisognoLineeProdViewModel mViewModel; ProdFabbisognoLineeProdViewModel mViewModel;
private final ArrayList<Runnable> mOnPreDestroyList = new ArrayList<>(); private final ArrayList<Runnable> mOnPreDestroyList = new ArrayList<>();
private final ObservableArrayList<Object> mProdFabbisognoItemModel = new ObservableArrayList<>();
private FragmentProdFabbisognoLineeProdBinding mBindings; private FragmentProdFabbisognoLineeProdBinding mBindings;
private ProdFabbisognoLineeProdFilterViewModel mFilterViewModel = new ProdFabbisognoLineeProdFilterViewModel();
public ProdFabbisognoLineeProdFragment() { public ProdFabbisognoLineeProdFragment() {
// Required empty public constructor // Required empty public constructor
@ -66,13 +94,18 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
Bundle savedInstanceState) { Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_fabbisogno_linee_prod, container, false); mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_fabbisogno_linee_prod, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent MainApplication.appComponent
.prodFabbisognoLineeProdComponent() .prodFabbisognoLineeProdComponent()
.create() .create()
.inject(this); .inject(this);
mViewModel.setListener(this);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
this.initFilters();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@ -80,25 +113,162 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
mViewModel.init();
this.mViewModel.setListener(this);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
DialogAskMagazzinoProssimitaView
.newInstance((jtbFase, startDate, endDate) -> {
// if (jtbFase == null) {
// ((IPoppableActivity) getActivity()).pop();
// } else {
//Load fabbisogno
this.mViewModel.loadFabbisogno(startDate, endDate, codMdep, this::startPickingActivity);
// }
}, () -> {
popMe();
})
.show(getActivity().getSupportFragmentManager(), "tag");
} }
private void initRecyclerView() {
mViewModel.getOrdiniList().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
mFilterViewModel.init(mViewModel.getOrdiniList().getValue());
this.refreshList(null);
});
var itemTypeHeader = new Type<GroupTitleModel, FragmentProdFabbisognoLineeTitleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_title_item, BR.item);
var itemType = new Type<ProdFabbisognoLineeItemModelDto, FragmentProdFabbisognoLineeListSingleItemBinding>(R.layout.fragment_prod_fabbisogno_linee_list_single_item, BR.item);
itemTypeHeader.onClick(x -> {
var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get());
Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) y).getOrdineLavorazioneDTO().getCodJfas().equals(item.getTitle()))
.forEach(y -> {
((ProdFabbisognoLineeItemModelDto) y).getSelected().set(item.selected.get());
});
fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
return null;
});
itemType.onClick(x -> {
var item = x.getBinding().getItem();
item.getSelected().set(!item.getSelected().get());
fabVisible.set(Stream.of(mProdFabbisognoItemModel)
.filter(y -> y instanceof ProdFabbisognoLineeItemModelDto)
.anyMatch(y -> ((ProdFabbisognoLineeItemModelDto) y).getSelected().get()));
return null;
});
new LiveAdapter(mProdFabbisognoItemModel)
.map(GroupTitleModel.class, itemTypeHeader)
.map(ProdFabbisognoLineeItemModelDto.class, itemType)
.into(this.mBindings.inventarioList);
}
private void refreshList(List<ProdFabbisognoLineeItemModelDto> filteredList) {
List<ProdFabbisognoLineeItemModelDto> tmpList;
if (filteredList != null) {
tmpList = filteredList;
} else if (mFilterViewModel != null) {
mFilterViewModel.applyAllTests();
tmpList = mFilterViewModel.getCurrentList().getValue();
} else {
tmpList = mViewModel.getOrdiniList().getValue();
}
this.mProdFabbisognoItemModel.clear();
if (tmpList != null) {
this.mProdFabbisognoItemModel.addAll(convertDataModelToListModel(tmpList));
}
}
private List<Object> convertDataModelToListModel(List<ProdFabbisognoLineeItemModelDto> itemModel) {
Stream.of(itemModel)
.sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas()))
.toList();
List<Object> listaFinale = new ArrayList<>();
String currentGroup = null;
for (ProdFabbisognoLineeItemModelDto item : itemModel) {
OrdineLavorazioneDTO ordineLavorazione = item.getOrdineLavorazioneDTO();
String codJfas = ordineLavorazione.getCodJfas();
if (!codJfas.equals(currentGroup)) {
listaFinale.add(new GroupTitleModel().setTitle(codJfas));
currentGroup = codJfas;
}
listaFinale.add(item);
}
return listaFinale;
}
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@Override
public void run() {
refreshList(null);
}
};
mFilterViewModel.getCurrentNumOrdsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
for (var filterChipDTO : ProdFabbisognoLineeProdBindings.AVAILABLE_FILTERS.entrySet()) {
FilterChipView filterChipView = new FilterChipView(
requireActivity(),
filterChipDTO.getValue().getFilterChipText(),
v -> initBottomSheetDialogFilter(filterChipDTO.getValue()));
if (filterChipDTO.getKey() == 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, 0);
mBindings.filterChips.smoothScrollTo(0, 0);
}
}
});
filterChipView.setOnResetClicked(() -> mFilterViewModel.getCurrentNumOrdsPredicate().set(null));
}
this.mBindings.filterChipsGroup.addView(filterChipView);
}
}
private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) {
filterChipDTO
.getFilterLayoutView()
.setFilterName(filterChipDTO.getFilterChipText())
.setContext(requireActivity());
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());
}
if (!filterLayoutView.isAdded())
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
}
@Override @Override
public void onDestroy() { public void onDestroy() {
@ -106,6 +276,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
onPreDestroy.run(); onPreDestroy.run();
} }
mViewModel.setListener(null);
super.onDestroy(); super.onDestroy();
} }
@ -114,6 +285,30 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.prod_fabbisogno_linee_prod_title).toString()); titleText.setText(context.getText(R.string.prod_fabbisogno_linee_prod_title).toString());
} }
public void dispatchOrders() {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String ordini = UtilityDB.listValueToString(Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getNumOrd().toString())
.toList());
Date dataInizio = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrdD())
.min(Date::compareTo)
.orElse(null);
Date dataFine = Stream.of(mProdFabbisognoItemModel)
.filter(x -> x instanceof ProdFabbisognoLineeItemModelDto && ((ProdFabbisognoLineeItemModelDto) x).selected.get())
.map(x -> ((ProdFabbisognoLineeItemModelDto) x).getOrdineLavorazioneDTO().getDataOrdD())
.max(Date::compareTo)
.orElse(null);
this.mViewModel.loadFabbisogno(ordini, codMdep, dataInizio, dataFine, this::startPickingActivity);
}
private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) { private void startPickingActivity(List<ProdFabbisognoLineeProdDTO> fabbisognoList) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
@ -142,7 +337,7 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
SpedizioneActivity.startActivity(getActivity(), SpedizioneActivity.startActivity(getActivity(),
sitArtOrdDTOS, sitArtOrdDTOS,
null, new ArrayList<>(),
new ArrayList<>(), new ArrayList<>(),
GestioneEnum.LAVORAZIONE, GestioneEnum.LAVORAZIONE,
+1, +1,
@ -150,8 +345,6 @@ public class ProdFabbisognoLineeProdFragment extends BaseFragment implements ITi
DialogRowInfoProdFabbisognoLineeProdView.class, DialogRowInfoProdFabbisognoLineeProdView.class,
divideByGrpMerc); divideByGrpMerc);
popMe();
} }
@Override @Override

View File

@ -2,14 +2,17 @@ package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
@Module(subcomponents = ProdFabbisognoLineeProdComponent.class) @Module(subcomponents = ProdFabbisognoLineeProdComponent.class)
public class ProdFabbisognoLineeProdModule { public class ProdFabbisognoLineeProdModule {
@Provides @Provides
ProdFabbisognoLineeProdViewModel providesProdFabbisognoLineeProdViewModel(ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer) { ProdFabbisognoLineeProdViewModel providesProdFabbisognoLineeProdViewModel(
return new ProdFabbisognoLineeProdViewModel(prodFabbisognoLineeProdRESTConsumer); ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer,
MesRESTConsumer mesRESTConsumer) {
return new ProdFabbisognoLineeProdViewModel(prodFabbisognoLineeProdRESTConsumer, mesRESTConsumer);
} }
} }

View File

@ -1,44 +1,84 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod; package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO;
import it.integry.integrywmsnative.core.exception.NoOrdersScheduledException; import it.integry.integrywmsnative.core.exception.NoOrdersScheduledException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.GroupTitleModel;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeProdDTO;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeProdViewModel { public class ProdFabbisognoLineeProdViewModel {
private final ProdFabbisognoLineeProdRESTConsumer mProdFabbisognoLineeProdRESTConsumer; private final ProdFabbisognoLineeProdRESTConsumer mProdFabbisognoLineeProdRESTConsumer;
private final MesRESTConsumer mMesRESTConsumer;
private Listener mListener; private Listener mListener;
public ProdFabbisognoLineeProdViewModel(ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer) { private final MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> ordiniList = new MutableLiveData<>();
public ProdFabbisognoLineeProdViewModel(
ProdFabbisognoLineeProdRESTConsumer prodFabbisognoLineeProdRESTConsumer,
MesRESTConsumer mesRESTConsumer) {
this.mProdFabbisognoLineeProdRESTConsumer = prodFabbisognoLineeProdRESTConsumer; this.mProdFabbisognoLineeProdRESTConsumer = prodFabbisognoLineeProdRESTConsumer;
this.mMesRESTConsumer = mesRESTConsumer;
} }
public void init() { public void init() {
loadData();
} }
public void loadData() {
public void loadFabbisogno(Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(startDate, endDate, codMdep, jtbFasi -> { this.mMesRESTConsumer.getOrdiniLavorazione("I", ordini -> {
if (jtbFasi != null){
Stream.of(jtbFasi)
.forEach(x -> x
.setDataInizio(startDate)
.setDataFine(endDate));
List<ProdFabbisognoLineeItemModelDto> itemModel = Stream.of(ordini)
.filter(x -> x.getCodMdep().equals(SettingsManager.i().getUserSession().getDepo().getCodMdep()))
.map(ord -> new ProdFabbisognoLineeItemModelDto()
.setOrdineLavorazioneDTO(ord)
)
.sorted(Comparator.comparing(x -> x.getOrdineLavorazioneDTO().getCodJfas()))
.toList();
ordiniList.postValue(itemModel);
this.sendOnLoadingEnded();
}, this::sendError);
}
public LiveData<List<ProdFabbisognoLineeItemModelDto>> getOrdiniList() {
return ordiniList;
}
public void loadFabbisogno(String ordini, String codMdep, Date dataInizio, Date dataFine, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete) {
this.sendOnLoadingStarted();
this.mProdFabbisognoLineeProdRESTConsumer.loadFabbisogno(ordini, codMdep, jtbFasi -> {
if (jtbFasi != null) {
Stream.of(jtbFasi)
.forEach(x -> {
x.setDataInizio(dataInizio);
x.setDataFine(dataFine);
});
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
onComplete.run(jtbFasi); onComplete.run(jtbFasi);
}else{ } else {
this.mListener.onError(new NoOrdersScheduledException()); this.mListener.onError(new NoOrdersScheduledException());
} }
}, this::sendError); }, this::sendError);

View File

@ -0,0 +1,22 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto;
import it.integry.integrywmsnative.core.di.BindableBoolean;
public class GroupTitleModel {
public BindableBoolean selected = new BindableBoolean();
public String title;
public BindableBoolean getSelected() {
return selected;
}
public String getTitle() {
return title;
}
public GroupTitleModel setTitle(String title) {
this.title = title;
return this;
}
}

View File

@ -0,0 +1,23 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
public class ProdFabbisognoLineeItemModelDto {
public BindableBoolean selected = new BindableBoolean();
public OrdineLavorazioneDTO ordineLavorazioneDTO;
public BindableBoolean getSelected() {
return selected;
}
public OrdineLavorazioneDTO getOrdineLavorazioneDTO() {
return ordineLavorazioneDTO;
}
public ProdFabbisognoLineeItemModelDto setOrdineLavorazioneDTO(OrdineLavorazioneDTO ordineLavorazioneDTO) {
this.ordineLavorazioneDTO = ordineLavorazioneDTO;
return this;
}
}

View File

@ -0,0 +1,74 @@
package it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.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.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto;
public class ProdFabbisognoLineeProdFilterViewModel {
private final ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> currentNumOrdsPredicate = new ObservableField<>();
private List<ProdFabbisognoLineeItemModelDto> initialList;
private final MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> currentList = new MutableLiveData<>();
public void init(List<ProdFabbisognoLineeItemModelDto> initialList){
this.initialList = initialList;
this.currentList.setValue(this.initialList);
}
public MutableLiveData<List<ProdFabbisognoLineeItemModelDto>> getCurrentList() {
return this.currentList;
}
public void setNumOrdFilter(List<Integer> numOrds){
if (numOrds == null || numOrds.isEmpty()) currentNumOrdsPredicate.set(null);
else{
currentNumOrdsPredicate.set(x -> numOrds.contains(x.getOrdineLavorazioneDTO().getNumOrd()));
}
}
public void applyAllTests(){
List<ProdFabbisognoLineeItemModelDto> returnList = null;
if (currentNumOrdsPredicate.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();
}
this.currentList.setValue(returnList);
}
public ObservableField<Predicate<ProdFabbisognoLineeItemModelDto>> getCurrentNumOrdsPredicate() {
return currentNumOrdsPredicate;
}
public List<Integer> getAllNumOrds(){
return Stream
.of(Objects.requireNonNull(initialList))
.filter(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null)
.sortBy(x -> -x.getOrdineLavorazioneDTO().getNumOrd())
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd() != null ? x.getOrdineLavorazioneDTO().getNumOrd() : null)
.distinct()
.toList();
}
public List<Integer> getAvailableNumOrds(){
if (currentNumOrdsPredicate.get() == null) return getAllNumOrds();
else {
return Stream.of(this.initialList)
.map(x -> x.getOrdineLavorazioneDTO().getNumOrd())
.distinct()
.toList();
}
}
}

View File

@ -32,9 +32,9 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
} }
public void loadFabbisogno(Date startDate, Date endDate, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void loadFabbisogno(String numOrd, String codMdep, RunnableArgs<List<ProdFabbisognoLineeProdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
ProdFabbisognoLineeProdRESTConsumerService prodFabbisognoLineeProdRESTConsumerService = RESTBuilder.getService(ProdFabbisognoLineeProdRESTConsumerService.class); ProdFabbisognoLineeProdRESTConsumerService prodFabbisognoLineeProdRESTConsumerService = RESTBuilder.getService(ProdFabbisognoLineeProdRESTConsumerService.class);
prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(UtilityDate.formatDate(startDate, "yyyy-MM-dd"), UtilityDate.formatDate(endDate, "yyyy-MM-dd"), codMdep) prodFabbisognoLineeProdRESTConsumerService.loadFabbisogno(numOrd, codMdep)
.enqueue(new Callback<>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> call, public void onResponse(Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> call,

View File

@ -13,7 +13,5 @@ import retrofit2.http.Query;
public interface ProdFabbisognoLineeProdRESTConsumerService public interface ProdFabbisognoLineeProdRESTConsumerService
{ {
@GET("wms/approvvigionamento/retrieveFabbisogno") @GET("wms/approvvigionamento/retrieveFabbisogno")
Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> loadFabbisogno(@Query("startDate") String startDate, Call<ServiceRESTResponse<List<ProdFabbisognoLineeProdDTO>>> loadFabbisogno(@Query("numOrd") String numOrd, @Query("codMdep") String codMdep);
@Query("endDate") String endDate,
@Query("codMdep") String codMdep);
} }

View File

@ -14,6 +14,7 @@ import java.util.List;
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.core.exception.InvalidCodMdepException;
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.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException;
@ -109,7 +110,14 @@ public class ProdVersamentoMaterialeViewModel {
this.sendError(new NoLUFoundException()); this.sendError(new NoLUFoundException());
} else if (mtbColtList.size() == 1) { } else if (mtbColtList.size() == 1) {
this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.onLUOpened(mtbColt); this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError); }, this::sendError);
} else { } else {
this.sendError(new TooManyLUFoundInMonoLUPositionException()); this.sendError(new TooManyLUFoundInMonoLUPositionException());
@ -122,7 +130,12 @@ public class ProdVersamentoMaterialeViewModel {
private void executeEtichettaLU(String sscc) { private void executeEtichettaLU(String sscc) {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> { this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.onLUOpened(mtbColt); this.onLUOpened(mtbColt);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError); }, this::sendError);
} }

View File

@ -94,6 +94,8 @@ public class OrdineLavorazioneDTO {
private String dataConsCommessa; private String dataConsCommessa;
private String descrizioneAttivita;
private BigDecimal prodStd; private BigDecimal prodStd;
private Object mtbColtToEdit; private Object mtbColtToEdit;
@ -523,4 +525,12 @@ public class OrdineLavorazioneDTO {
return progress; return progress;
} }
public String getDescrizioneAttivita() {
return descrizioneAttivita;
}
public OrdineLavorazioneDTO setDescrizioneAttivita(String descrizioneAttivita) {
this.descrizioneAttivita = descrizioneAttivita;
return this;
}
} }

View File

@ -168,7 +168,7 @@ public class RettificaGiacenzeViewModel {
if (onComplete != null) onComplete.run(); if (onComplete != null) onComplete.run();
if (mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
this.dispatchArt(mtbAartList.get(0), pickData); this.dispatchArts(mtbAartList);
} else { } else {
this.sendError(new NoResultFromBarcodeException(barcodeProd)); this.sendError(new NoResultFromBarcodeException(barcodeProd));
} }

View File

@ -20,6 +20,7 @@ import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
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;
import it.integry.integrywmsnative.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidLUException; import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException; import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@ -158,7 +159,7 @@ public class SpedizioneViewModel {
this.mEnableQuantityReset = enableQuantityReset; this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd; this.mUseQtaOrd = useQtaOrd;
if (testateOrdini != null) { if (testateOrdini != null && testateOrdini.size() > 0) {
this.mIsOrdTrasf = Stream.of(testateOrdini).map(OrdineUscitaInevasoDTO::isOrdTrasf).withoutNulls().distinctBy(x -> x).findFirst().get(); this.mIsOrdTrasf = Stream.of(testateOrdini).map(OrdineUscitaInevasoDTO::isOrdTrasf).withoutNulls().distinctBy(x -> x).findFirst().get();
} }
@ -238,6 +239,7 @@ public class SpedizioneViewModel {
mDefaultFiltroOrdine.add(filtro); mDefaultFiltroOrdine.add(filtro);
}); });
}
if (mDefaultGestioneOfUL == GestioneEnum.VENDITA) { if (mDefaultGestioneOfUL == GestioneEnum.VENDITA) {
mColliScaricoRESTConsumer = mColliSpedizioneRESTConsumer; mColliScaricoRESTConsumer = mColliSpedizioneRESTConsumer;
@ -250,8 +252,6 @@ public class SpedizioneViewModel {
} else { } else {
this.sendError(new NotImplementedException(String.format("Gestione %s e segno %d non gestito", mDefaultGestioneOfUL.getText(), mDefaultSegnoCol))); this.sendError(new NotImplementedException(String.format("Gestione %s e segno %d non gestito", mDefaultGestioneOfUL.getText(), mDefaultSegnoCol)));
} }
}
} }
private void onOrderClosedPrintingDone() { private void onOrderClosedPrintingDone() {
@ -492,7 +492,13 @@ public class SpedizioneViewModel {
} }
} else { } else {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.createNewLU(null, null, () -> searchArtFromUL(mtbColt, onComplete)); this.createNewLU(null, null, () -> searchArtFromUL(mtbColt, onComplete));
} else this.sendError(new InvalidCodMdepException());
} }
}, this::sendError); }, this::sendError);
@ -530,7 +536,14 @@ public class SpedizioneViewModel {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
this.searchArtFromUL(mtbColt, onComplete); this.searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} else { } else {
this.sendError(new EmptyLUException()); this.sendError(new EmptyLUException());
} }
@ -546,8 +559,17 @@ public class SpedizioneViewModel {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if (mtbColt.getSegno() != -1) { if (mtbColt.getSegno() != -1) {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
searchArtFromUL(mtbColt, onComplete); searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException()); } else this.sendError(new InvalidCodMdepException());
} else {
this.sendError(new InvalidLUException());
}
} else { } else {
this.sendError(new EmptyLUException()); this.sendError(new EmptyLUException());
} }
@ -773,7 +795,7 @@ public class SpedizioneViewModel {
MtbColt refMtbColt = matchedItem.getRefMtbColt(); MtbColt refMtbColt = matchedItem.getRefMtbColt();
if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) { if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) {
refMtbColt = matchedItem.getMtbColts().get(0); refMtbColt = matchedItem.getMtbColts().get(0);
} else if(matchedItem.getTempPickData().getSourceMtbColt() != null){ } else if (matchedItem.getTempPickData().getSourceMtbColt() != null) {
refMtbColt = matchedItem.getTempPickData().getSourceMtbColt(); refMtbColt = matchedItem.getTempPickData().getSourceMtbColt();
} }
MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null; MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null;
@ -862,8 +884,6 @@ public class SpedizioneViewModel {
} else { } else {
dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, refMtbColr, null, canPartitaMagBeChanged); dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, refMtbColr, null, canPartitaMagBeChanged);
} }
} }
private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr refMtbColr, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) { private void dispatchOrdineRowOnPostBatchLotSelection(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, MtbColr refMtbColr, MtbColr scannedMtbColr, boolean canPartitaMagBeChanged) {
@ -1489,11 +1509,13 @@ public class SpedizioneViewModel {
var clonedLuToClose = (MtbColt) this.mCurrentMtbColt.clone(); var clonedLuToClose = (MtbColt) this.mCurrentMtbColt.clone();
clonedLuToClose.setMtbColr(null); clonedLuToClose.setMtbColr(null);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
if(mTestateOrdini != null && !mTestateOrdini.isEmpty()) codMdep = mTestateOrdini.get(0).getCodMdep();
var closeUDSRequestDto = new CloseUDSRequestDTO() var closeUDSRequestDto = new CloseUDSRequestDTO()
.setMtbColt(clonedLuToClose) .setMtbColt(clonedLuToClose)
//.setPrintSSCC(shouldPrint) //.setPrintSSCC(shouldPrint)
.setOrderCodMdep(mTestateOrdini.get(0).getCodMdep()); .setOrderCodMdep(codMdep);
this.mColliSpedizioneRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> { this.mColliSpedizioneRESTConsumer.closeUDS(closeUDSRequestDto, closeResponse -> {
onComplete.run(closeResponse.getGeneratedMtbColts()); onComplete.run(closeResponse.getGeneratedMtbColts());

View File

@ -14,6 +14,7 @@ import java.util.List;
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.core.exception.InvalidCodMdepException;
import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException; import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException;
import it.integry.integrywmsnative.core.exception.NoArtsInLUException; import it.integry.integrywmsnative.core.exception.NoArtsInLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoLUFoundException;
@ -135,7 +136,12 @@ public class VersamentoMerceViewModel {
mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> {
//TAKE HERE //TAKE HERE
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete); pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError); }, this::sendError);
} else { } else {
@ -184,11 +190,23 @@ public class VersamentoMerceViewModel {
if (mtbColt == null) { if (mtbColt == null) {
this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> { this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> {
onComplete.run(); onComplete.run();
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColtAnonimo, onComplete); pickMerceULtoUL(mtbColtAnonimo, onComplete);
} else this.sendError(new InvalidCodMdepException());
}, this::sendError); }, this::sendError);
} else { } else {
boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep())
.anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep()));
if (codMdepIsValid) {
pickMerceULtoUL(mtbColt, onComplete); pickMerceULtoUL(mtbColt, onComplete);
} else this.sendError(new InvalidCodMdepException());
} }
} }

View File

@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters; package it.integry.integrywmsnative.ui.filter_chips.filters;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;

View File

@ -21,6 +21,8 @@
android:id="@+id/accettazione_main_list_group_item_container_checkBox" android:id="@+id/accettazione_main_list_group_item_container_checkBox"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="false"
android:enabled="false"
tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="1dp" tools:layout_editor_absoluteY="1dp"
app:checked="@{selected}" /> app:checked="@{selected}" />

View File

@ -15,6 +15,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:checked="true" android:checked="true"
android:focusable="false"
android:clickable="false"
android:enabled="false"/> android:enabled="false"/>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<import type="android.text.Html" />
<import type="java.time.LocalDateTime" />
<import type="it.integry.integrywmsnative.R" />
<import type="it.integry.integrywmsnative.core.di.BindableBoolean" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<variable
name="item"
type="it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.ProdFabbisognoLineeItemModelDto" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="2dp"
android:paddingEnd="4dp"
android:paddingVertical="2dp"
android:orientation="horizontal">
<View
android:id="@+id/empty_view"
android:layout_width="8dp"
android:layout_height="match_parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ordine_lavorazione_main_list_group_item_container_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:layout_marginEnd="3dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="2dp"
android:paddingEnd="8dp"
android:background="@color/full_white">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false"
app:checked="@{item.selected}"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true">
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- android:id="@+id/right_descrizione"-->
<!-- android:background="@drawable/badge_round_corner"-->
<!-- android:backgroundTint="@color/colorPrimary"-->
<!-- android:textColor="@android:color/white"-->
<!-- android:textStyle="bold"-->
<!-- android:paddingLeft="8dp"-->
<!-- android:paddingTop="2dp"-->
<!-- android:paddingRight="8dp"-->
<!-- android:paddingBottom="2dp"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:text="@{item.getDescrizioneAttivita()}"-->
<!-- tools:text="PRODUZIONE PASTA SECCA"-->
<!-- android:layout_alignParentEnd="true"-->
<!-- style="@style/AppTheme.NewMaterial.Text.Small" />-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/descrizione"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Html.fromHtml(context.getString(R.string.doc_testata, item.getOrdineLavorazioneDTO().numOrd, UtilityDate.formatDate(item.getOrdineLavorazioneDTO().dataOrd, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))}"
tools:text="n. 39 del 27 ott 2017"
android:ellipsize="end"
android:maxLines="1"
android:textColor="#000"
android:layout_marginTop="4dp"
android:layout_alignParentStart="true"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_toStartOf="@id/descrizione"/>
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- android:id="@+id/right_sub_descrizione"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_marginTop="4dp"-->
<!-- android:background="@drawable/badge_round_corner"-->
<!-- android:backgroundTint="@color/red_400"-->
<!-- android:layout_marginStart="8dp"-->
<!-- android:paddingLeft="8dp"-->
<!-- android:paddingTop="2dp"-->
<!-- android:paddingRight="8dp"-->
<!-- android:paddingBottom="2dp"-->
<!-- android:textColor="@android:color/white"-->
<!-- android:textStyle="bold"-->
<!-- android:text="@{item.getCodJfas()}"-->
<!-- tools:text="SL01"-->
<!-- android:layout_alignParentEnd="true"-->
<!-- android:layout_below="@id/descrizione"-->
<!-- style="@style/AppTheme.NewMaterial.Text.Small" />-->
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sub_descrizione"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="1"
android:ellipsize="end"
android:text="@{item.getOrdineLavorazioneDTO().descrizioneProd}"
tools:text="BUCATINI P13,5EPA T.60623/24"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_below="@+id/descrizione"
android:layout_toStartOf="@id/right_sub_descrizione"/>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

View File

@ -1,8 +1,121 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"> <layout xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout 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.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment"> tools:context=".gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment">
</FrameLayout>
<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">
<HorizontalScrollView
android:id="@+id/filter_chips"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/gray_050"
android:scrollbars="none">
<com.google.android.material.chip.ChipGroup
android:id="@+id/filter_chips_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="8dp"
android:paddingEnd="8dp"
app:chipSpacing="8dp"
app:singleSelection="true" />
</HorizontalScrollView>
<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>
<com.google.android.material.floatingactionbutton.FloatingActionButton
style="?attr/floatingActionButtonPrimaryStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:contentDescription="Dispatch orders"
android:onClick="@{() -> view.dispatchOrders()}"
app:srcCompat="@drawable/ic_check_black_24dp"
app:visibility="@{view.fabVisible}" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout> </layout>

View File

@ -0,0 +1,39 @@
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="item"
type="it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dto.GroupTitleModel" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/mainOrange"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingStart="12dp"
xmlns:tools="http://schemas.android.com/tools">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:clickable="false"
app:checked="@{item.selected}"
android:enabled="false"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/group_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:ellipsize="end"
android:singleLine="true"
style="@style/TextAppearance.Material3.TitleMedium"
android:text="@{item.title}"
tools:text="NOME GRUPPO"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

View File

@ -1,67 +1,49 @@
<layout> <layout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto" <androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools">
<!--<androidx.cardview.widget.CardView-->
<!--xmlns:card_view="http://schemas.android.com/apk/res-auto"-->
<!--android:id="@+id/card_view"-->
<!--android:layout_gravity="center"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--card_view:cardUseCompatPadding="true"-->
<!--card_view:cardCornerRadius="4dp"-->
<!--card_view:cardElevation="4dp">-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/mainGreen" android:background="@color/mainGreen"
android:paddingStart="12dp" android:gravity="center_vertical"
android:paddingTop="8dp" android:orientation="horizontal"
android:paddingEnd="8dp" android:paddingStart="12dp">
android:paddingBottom="8dp">
<CheckBox <CheckBox
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:checked="true" android:checked="true"
android:enabled="false" /> android:clickable="false"
android:enabled="false"
android:focusable="false" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/ordine_produzione_main_list_group_header" android:id="@+id/ordine_produzione_main_list_group_header"
style="@style/TextAppearance.Material3.TitleMedium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textColor="@android:color/white" android:textColor="@android:color/white"
android:textStyle="bold" tools:text="NOME GRUPPO" />
style="@style/AppTheme.NewMaterial.Text.Medium"
tools:text="NOME GRUPPO"/>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/ordine_produzione_main_list_group_item_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:id="@+id/ordine_produzione_main_list_group_item_container">
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
<!--</androidx.cardview.widget.CardView>-->
</LinearLayout>
</layout> </layout>

View File

@ -11,7 +11,7 @@
<variable <variable
name="view" name="view"
type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView" /> type="it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView" />
</data> </data>

View File

@ -12,7 +12,7 @@
<variable <variable
name="item" name="item"
type="it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterNumeroOrdineLayoutView.ListModel" /> type="it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView.ListModel" />
</data> </data>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat

View File

@ -143,6 +143,7 @@
<string name="server_cod_azienda_not_valid"><![CDATA[Il codice azienda <b>%s</b> non è valido. Controllalo e riprova]]></string> <string name="server_cod_azienda_not_valid"><![CDATA[Il codice azienda <b>%s</b> non è valido. Controllalo e riprova]]></string>
<string name="server_not_reachable"><![CDATA[L\'host <b>%s</b> sulla porta <b>%d</b> non è al momento raggiungibile. Riprova più tardi]]></string> <string name="server_not_reachable"><![CDATA[L\'host <b>%s</b> sulla porta <b>%d</b> non è al momento raggiungibile. Riprova più tardi]]></string>
<string name="no_codmdep_available">Nessun deposito trovato per l\'utente corrente</string> <string name="no_codmdep_available">Nessun deposito trovato per l\'utente corrente</string>
<string name="invalid_codmdep">Impossibile utilizzare unità logistiche di altri depositi</string>
<string name="action_choose_profile_db">Seleziona un database</string> <string name="action_choose_profile_db">Seleziona un database</string>
<string name="empty_rows_in_mtbcolt">Nessuna riga presente nell\'Unità Logistica</string> <string name="empty_rows_in_mtbcolt">Nessuna riga presente nell\'Unità Logistica</string>

View File

@ -141,6 +141,7 @@
<string name="server_cod_azienda_not_valid"><![CDATA[Code <b>%s</b> is not valid. Check and retry later]]></string> <string name="server_cod_azienda_not_valid"><![CDATA[Code <b>%s</b> is not valid. Check and retry later]]></string>
<string name="server_not_reachable"><![CDATA[The host <b>%s</b> on port <b>%d</b> is not reachable. Retry later]]></string> <string name="server_not_reachable"><![CDATA[The host <b>%s</b> on port <b>%d</b> is not reachable. Retry later]]></string>
<string name="no_codmdep_available">No deposit available with current user</string> <string name="no_codmdep_available">No deposit available with current user</string>
<string name="invalid_codmdep">Unable to use logistics units from other depots</string>
<string name="action_choose_profile_db">Choose a database</string> <string name="action_choose_profile_db">Choose a database</string>
<string name="empty_rows_in_mtbcolt">No rows found in LU</string> <string name="empty_rows_in_mtbcolt">No rows found in LU</string>