Finish v1.39.00(413)

This commit is contained in:
Giuseppe Scorrano 2024-02-07 17:13:22 +01:00
commit 4e53189d56
31 changed files with 1691 additions and 8 deletions

View File

@ -2,5 +2,26 @@
<project version="4"> <project version="4">
<component name="AppInsightsSettings"> <component name="AppInsightsSettings">
<option name="selectedTabId" value="Android Vitals" /> <option name="selectedTabId" value="Android Vitals" />
<option name="tabSettings">
<map>
<entry key="Firebase Crashlytics">
<value>
<InsightsFilterSettings>
<option name="connection">
<ConnectionSetting>
<option name="appId" value="it.integry.integrywmsnative" />
<option name="mobileSdkAppId" value="1:963231271247:android:6d73ab369f33c450" />
<option name="projectId" value="wmsfirebaseproject-64854" />
<option name="projectNumber" value="963231271247" />
</ConnectionSetting>
</option>
<option name="signal" value="SIGNAL_UNSPECIFIED" />
<option name="timeIntervalDays" value="THIRTY_DAYS" />
<option name="visibilityType" value="ALL" />
</InsightsFilterSettings>
</value>
</entry>
</map>
</option>
</component> </component>
</project> </project>

View File

@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 412 def appVersionCode = 413
def appVersionName = '1.38.02' def appVersionName = '1.39.00'
signingConfigs { signingConfigs {
release { release {

View File

@ -67,6 +67,10 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMate
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent;
import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent; import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.ProdRientroMerceOrderDetailComponent;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdComponent;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdModule;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza.DialogInfoGiacenzaComponent;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza.DialogInfoGiacenzaModule;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeComponent; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeComponent;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferComponent; import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferComponent;
@ -200,7 +204,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
ProdVersamentoMaterialeInBufferModule.class, ProdVersamentoMaterialeInBufferModule.class,
DialogInputQuantityToReturnModule.class, DialogInputQuantityToReturnModule.class,
DialogInfoAggiuntiveLUModule.class, DialogInfoAggiuntiveLUModule.class,
DialogAskLineaProdModule.class DialogAskLineaProdModule.class,
ProdRiposizionamentoDaProdModule.class,
DialogInfoGiacenzaModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@ -336,6 +342,10 @@ public interface MainApplicationComponent {
DialogAskLineaProdComponent.Factory dialogAskLineaProdComponent(); DialogAskLineaProdComponent.Factory dialogAskLineaProdComponent();
ProdRiposizionamentoDaProdComponent.Factory prodRiposizionamentoDaprodComponent();
DialogInfoGiacenzaComponent.Factory dialogInfoGiacenzaComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@ -14,6 +14,7 @@ import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisogn
import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneFragment; import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneFragment;
import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment;
import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale_su_mag_prossimita.ProdVersamentoMaterialeInBufferFragment;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment;
@ -179,6 +180,14 @@ public class MenuConfiguration extends BaseMenuConfiguration {
.setTitleIcon(R.drawable.ic_dashboard_prod_versamento_su_ord) .setTitleIcon(R.drawable.ic_dashboard_prod_versamento_su_ord)
.setDrawerIcon(R.drawable.ic_black_external) .setDrawerIcon(R.drawable.ic_black_external)
.setFragmentFactory(() -> PickingLiberoFragment.newInstance(R.string.prod_versamento_su_ordine_title_fragment, GestioneEnum.LAVORAZIONE, false, true))) .setFragmentFactory(() -> PickingLiberoFragment.newInstance(R.string.prod_versamento_su_ordine_title_fragment, GestioneEnum.LAVORAZIONE, false, true)))
.addItem(new MenuItem()
.setID(R.id.nav_prod_riposizionamento_da_ord)
.setCodMenu("MG069")
.setTitleText(R.string.prod_riposizionamento_da_prod_title)
.setTitleIcon(R.drawable.ic_production_line_produzione)
.setDrawerIcon(R.drawable.ic_black_load_shelf)
.setFragmentFactory(ProdRiposizionamentoDaProdFragment::newInstance))
).addGroup( ).addGroup(
new MenuGroup() new MenuGroup()
.setGroupText(R.string.internal_handling) .setGroupText(R.string.internal_handling)

View File

@ -38,6 +38,7 @@ public class MvwSitArtUdcDetInventario {
private BigDecimal pesoLordoKg; private BigDecimal pesoLordoKg;
private String codJfas; private String codJfas;
private MtbAart mtbAart; private MtbAart mtbAart;
private Integer numOrd;
public String getGestione() { public String getGestione() {
return gestione; return gestione;
@ -282,6 +283,15 @@ public class MvwSitArtUdcDetInventario {
return this; return this;
} }
public Integer getNumOrd() {
return numOrd;
}
public MvwSitArtUdcDetInventario setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
public MtbColr toMtbColr() { public MtbColr toMtbColr() {
return new MtbColr() return new MtbColr()
.setCodJcom(getCodJcom()) .setCodJcom(getCodJcom())

View File

@ -17,6 +17,7 @@ import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationIncomingItemDto; import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationIncomingItemDto;
import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationResponseDto; import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationResponseDto;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@ -71,6 +72,48 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void getGiacenzeInPosizione(List<String> posizioni, boolean withTestataCollo, RunnableArgs<List<ArtsInGiacenzaDTO>> onComplete, RunnableArgs<Exception> onFailed) {
GiacenzaRESTConsumerService giacenzaRESTConsumerService = RESTBuilder.getService(GiacenzaRESTConsumerService.class);
giacenzaRESTConsumerService.retrieveAvailableItems(posizioni, withTestataCollo).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<ArtsInGiacenzaDTO>>> call, Response<ServiceRESTResponse<List<ArtsInGiacenzaDTO>>> response) {
analyzeAnswer(response, "getGiacenzeInPosizione", inventarioList -> {
List<String> codMarts = Stream.of(inventarioList)
.map(x -> x.getCodMart().trim())
.toList();
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var articoli : inventarioList) {
List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventario = articoli.getMvwSitArtUdcDetInventarioDTO();
if (mvwSitArtUdcDetInventario != null && !mvwSitArtUdcDetInventario.isEmpty()){
for (var row : mvwSitArtUdcDetInventario){
MtbAart foundMtbAart = null;
Optional<MtbAart> mtbAartOpt = Stream.of(mtbAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart()))
.findFirst();
if (mtbAartOpt.isPresent()) {
foundMtbAart = mtbAartOpt.get();
}
row.setMtbAart(foundMtbAart);
}
}
}
onComplete.run(inventarioList);
}, onFailed);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<ArtsInGiacenzaDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void getGiacenzeByArticolo(String codMart, String partitaMag, RunnableArgs<List<MvwSitArtUdcDetInventario>> onComplete, RunnableArgs<Exception> onFailed) { public void getGiacenzeByArticolo(String codMart, String partitaMag, RunnableArgs<List<MvwSitArtUdcDetInventario>> onComplete, RunnableArgs<Exception> onFailed) {
GiacenzaRESTConsumerService giacenzaRESTConsumerService = RESTBuilder.getService(GiacenzaRESTConsumerService.class); GiacenzaRESTConsumerService giacenzaRESTConsumerService = RESTBuilder.getService(GiacenzaRESTConsumerService.class);
var serviceRESTResponseCall = var serviceRESTResponseCall =

View File

@ -2,11 +2,16 @@ package it.integry.integrywmsnative.core.rest.consumers;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.DtbDoct;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.rest.model.LoadColliDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationResponseDto; import it.integry.integrywmsnative.core.rest.model.giacenza.InstantItemSituationResponseDto;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query; import retrofit2.http.Query;
public interface GiacenzaRESTConsumerService { public interface GiacenzaRESTConsumerService {
@ -15,6 +20,9 @@ public interface GiacenzaRESTConsumerService {
Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> retrieveAvailableItems( Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> retrieveAvailableItems(
@Query("posizione") String posizione); @Query("posizione") String posizione);
@POST("wms/giacenza/availableItemsByPosizione")
Call<ServiceRESTResponse<List<ArtsInGiacenzaDTO>>> retrieveAvailableItems(@Body List<String> posizioni, @Query("withTestataCollo") boolean withTestataCollo);
@GET("wms/giacenza/availableItemsByArticolo") @GET("wms/giacenza/availableItemsByArticolo")
Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> retrieveAvailableItemsByArt( Call<ServiceRESTResponse<List<MvwSitArtUdcDetInventario>>> retrieveAvailableItemsByArt(
@Query("codMart") String codMart); @Query("codMart") String codMart);

View File

@ -71,6 +71,7 @@ public class DBSettingsModel {
private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false; private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false;
private boolean flagAllowULRecoverAccettazioneBolla = true; private boolean flagAllowULRecoverAccettazioneBolla = true;
private boolean flagOverflowQuantityWarning = false; private boolean flagOverflowQuantityWarning = false;
private String viewPosizioni;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@ -576,4 +577,13 @@ public class DBSettingsModel {
this.groupPoductionByCommodityGroup = groupPoductionByCommodityGroup; this.groupPoductionByCommodityGroup = groupPoductionByCommodityGroup;
return this; return this;
} }
public String getViewPosizioni() {
return viewPosizioni;
}
public DBSettingsModel setViewPosizioni(String viewPosizioni) {
this.viewPosizioni = viewPosizioni;
return this;
}
} }

View File

@ -278,6 +278,11 @@ public class SettingsManager {
.setKeySection("FLAG_GROUP_BY_GRP_MERC") .setKeySection("FLAG_GROUP_BY_GRP_MERC")
.setSetter(dbSettingsModelIstance::setGroupPoductionByCommodityGroup) .setSetter(dbSettingsModelIstance::setGroupPoductionByCommodityGroup)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING")
.setSection("PRODUZIONE")
.setKeySection("VIEW_POSIZIONI")
.setSetter(dbSettingsModelIstance::setViewPosizioni));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class) stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING") .setGestName("PICKING")
.setSection("SPEDIZIONE") .setSection("SPEDIZIONE")

View File

@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod;
import java.util.HashMap;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterPosizioneLayoutView;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
public class ProdRiposizionamentoDaProdBindings {
public static final int POSITIONS_FILTER_ID = 0;
public static final HashMap<Integer, FilterChipDTO> AVAILABLE_FILTERS = new HashMap<>() {{
put(POSITIONS_FILTER_ID, new FilterChipDTO()
.setID(POSITIONS_FILTER_ID)
.setFilterChipText("Posizione")
.setFilterLayoutView(new FilterPosizioneLayoutView()));
}};
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod;
import dagger.Subcomponent;
@Subcomponent
public interface ProdRiposizionamentoDaProdComponent {
@Subcomponent.Factory
interface Factory {
ProdRiposizionamentoDaProdComponent create();
}
void inject(ProdRiposizionamentoDaProdFragment ProdRiposizionamentoDaProdFragment);
}

View File

@ -0,0 +1,305 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Stream;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentProdRiposizionamentoDaProdBinding;
import it.integry.integrywmsnative.databinding.ProdRiposizionamentoDaProdListItemBinding;
import it.integry.integrywmsnative.gest.accettazione_ordini_picking.filters.FilterPosizioneLayoutView;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza.DialogInfoGiacenzaView;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.filter.ProdRiposizionamentoDaProdFilterViewModel;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO;
import it.integry.integrywmsnative.ui.filter_chips.FilterChipView;
import it.integry.integrywmsnative.ui.filter_chips.filters.FilterNumeroOrdineLayoutView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements ITitledFragment, ProdRiposizionamentoDaProdViewModel.Listener {
@Inject
ProdRiposizionamentoDaProdViewModel mViewModel;
private FragmentProdRiposizionamentoDaProdBinding mBindings;
private final ObservableArrayList<ArtsInGiacenzaDTO> mItemsInventario = new ObservableArrayList<>();
private ProdRiposizionamentoDaProdFilterViewModel mFilterViewModel = new ProdRiposizionamentoDaProdFilterViewModel();
private final Handler mHandler = new Handler();
private final int mInterval = 120 * 1000; //2 minuti
private int barcodeScannerIstanceID = -1;
public ProdRiposizionamentoDaProdFragment() {
// Required empty public constructor
}
public static ProdRiposizionamentoDaProdFragment newInstance() {
return new ProdRiposizionamentoDaProdFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_riposizionamento_da_prod, container, false);
MainApplication.appComponent
.prodRiposizionamentoDaprodComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
mBindings.swiperefresh.setRefreshing(true);
mBindings.swiperefresh.setOnRefreshListener(() -> {
mViewModel.loadData();
});
mHandler.postDelayed(mRunnable, mInterval);
this.initBarcodeReader();
this.initRecyclerView();
this.initFilters();
return mBindings.getRoot();
}
public void refreshList(List<ArtsInGiacenzaDTO> filteredList) {
List<ArtsInGiacenzaDTO> tmpList;
if (filteredList != null) {
tmpList = filteredList;
} else if (mFilterViewModel != null) {
mFilterViewModel.applyAllTests();
tmpList = mFilterViewModel.getCurrentList().getValue();
} else {
tmpList = mViewModel.getItemsInventario().getValue();
}
this.mItemsInventario.clear();
if (tmpList != null) {
this.mItemsInventario.addAll(tmpList);
}
}
private void initRecyclerView() {
mViewModel.getItemsInventario().observe(getViewLifecycleOwner(), data -> {
mBindings.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE);
mFilterViewModel.init(mViewModel.getItemsInventario().getValue());
this.refreshList(null);
});
var itemType = new Type<ArtsInGiacenzaDTO, ProdRiposizionamentoDaProdListItemBinding>(R.layout.prod_riposizionamento_da_prod__list_item, BR.item);
itemType.onBind(x -> {
x.getBinding().setView(this);
return null;
});
new LiveAdapter(mItemsInventario)
.map(ArtsInGiacenzaDTO.class, itemType)
.into(this.mBindings.inventarioList);
}
private void initFilters() {
var onPredicateChanged = new OnGeneralChangedCallback() {
@Override
public void run() {
refreshList(null);
}
};
mFilterViewModel.getCurrentPositionPredicate().addOnPropertyChangedCallback(onPredicateChanged);
for (var filterChipDTO : ProdRiposizionamentoDaProdBindings.AVAILABLE_FILTERS.entrySet()) {
FilterChipView filterChipView = new FilterChipView(
requireActivity(),
filterChipDTO.getValue().getFilterChipText(),
v -> initBottomSheetDialogFilter(filterChipDTO.getValue()));
if (filterChipDTO.getKey() == ProdRiposizionamentoDaProdBindings.POSITIONS_FILTER_ID) {
mFilterViewModel.getCurrentPositionPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() {
@Override
public void run() {
if (mFilterViewModel.getCurrentPositionPredicate().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.getCurrentPositionPredicate().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() == ProdRiposizionamentoDaProdBindings.POSITIONS_FILTER_ID) {
((FilterPosizioneLayoutView) filterLayoutView)
.setAll(mFilterViewModel.getAllPosition())
.setAvailable(mFilterViewModel.getAvailablePosition())
.setOnFilterApplied(mFilterViewModel::setPositionFilter)
.setPreselected(
Stream.of(Objects.requireNonNull(mViewModel.getItemsInventario().getValue()))
.filter(mFilterViewModel.getCurrentPositionPredicate().get() == null ?
x -> false : Objects.requireNonNull(mFilterViewModel.getCurrentPositionPredicate().get()))
.map(ArtsInGiacenzaDTO::getPosizione)
.toList()
);
}
if (!filterLayoutView.isAdded())
filterLayoutView.show(requireActivity().getSupportFragmentManager(), "TAG");
}
public void onInfoClick(List<MvwSitArtUdcDetInventario> item) {
try {
DialogInfoGiacenzaView.newInstance(item).show(getChildFragmentManager(), DialogInfoGiacenzaView.class.getName());
} catch (Exception e) {
UtilityExceptions.defaultException(this.getContext(), e);
}
}
private final Runnable mRunnable = new Runnable() {
@Override
public void run() {
mBindings.swiperefresh.setRefreshing(true);
mViewModel.loadData();
mHandler.postDelayed(this, mInterval);
}
};
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
mHandler.removeCallbacks(mRunnable);
this.onLoadingStarted();
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
};
private void choosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
popMe();
} else {
onComplete.run(mtbDepoPosizione);
}
}, this::onError)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onStart() {
super.onStart();
mViewModel.init();
}
@Override
public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
mHandler.removeCallbacks(mRunnable);
mViewModel.setListener(null);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_riposizionamento_da_prod_title).toString());
}
@Override
public void onInventoriesLoadingStarted() {
mBindings.swiperefresh.setRefreshing(true);
}
@Override
public void onInventoriesLoadingEnded() {
mBindings.swiperefresh.setRefreshing(false);
}
@Override
public void onInventoriesLoadingError(Exception ex) {
mBindings.swiperefresh.setRefreshing(false);
this.onError(ex);
}
@Override
public void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
choosePosition(onComplete);
}
@Override
public void onDataSaved() {
mHandler.postDelayed(mRunnable, mInterval);
}
}

View File

@ -0,0 +1,19 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
@Module(subcomponents = ProdRiposizionamentoDaProdComponent.class)
public class ProdRiposizionamentoDaProdModule {
@Provides
ProdRiposizionamentoDaProdViewModel providesProdRiposizionamentoDaProdViewModel(GiacenzaRESTConsumer giacenzaRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new ProdRiposizionamentoDaProdViewModel(giacenzaRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@ -0,0 +1,249 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
public class ProdRiposizionamentoDaProdViewModel {
private final GiacenzaRESTConsumer mGiacenzaRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final MutableLiveData<List<ArtsInGiacenzaDTO>> itemsInventario = new MutableLiveData<>();
private final MutableLiveData<MtbColt> mtbColtMutableLiveData = new MutableLiveData<>();
private final MutableLiveData<List<MvwSitArtUdcDetInventario>> mMvwSitArtUdcDetInventarioLiveData = new MutableLiveData<>();
private Listener mListener;
public ProdRiposizionamentoDaProdViewModel(GiacenzaRESTConsumer giacenzaRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mGiacenzaRESTConsumer = giacenzaRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), true, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onBarcodeScanComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, false, onBarcodeScanComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onBarcodeScanComplete.run();
}
}, this::sendError);
}
private void executeEtichettaLU(String sscc, boolean isAnonima, Runnable onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> {
if (mtbColt == null && !isAnonima) {
this.sendError(new NoLUFoundException());
} else {
List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventario = Stream.of(Objects.requireNonNull(itemsInventario.getValue()))
.flatMap(item -> Stream.of(item.getMvwSitArtUdcDetInventarioDTO()))
.toList();
mMvwSitArtUdcDetInventarioLiveData.setValue(mvwSitArtUdcDetInventario);
boolean isPresent = Stream.of(mvwSitArtUdcDetInventario)
.anyMatch(x ->
x.getGestione().equals(mtbColt.getGestione()) &&
x.getDataCollo().isEqual(UtilityDate.toLocalDate(mtbColt.getDataColloD())) &&
x.getSerCollo().equals(mtbColt.getSerCollo()) &&
x.getNumCollo().equals(mtbColt.getNumCollo()));
if (isPresent && mtbColt != null) {
mtbColt.setDisablePrint(true);
onComplete.run();
this.onLUOpened(mtbColt);
} else {
this.sendError(new NoLUFoundException());
}
}
}, this::sendError);
}
private void onLUOpened(MtbColt mtbColt) {
this.mtbColtMutableLiveData.setValue(mtbColt);
this.sendRequestChoosePosition(this::setPosizione);
}
public void setPosizione(MtbDepoPosizione mtbDepoPosizione) {
MtbColt mtbColt = mtbColtMutableLiveData.getValue();
this.sendOnLoadingStarted();
if (mtbDepoPosizione == null) {
//Nessuna posizione trovata con questo barcode
this.sendError(new ScannedPositionNotExistException());
} else {
if (mtbColt != null) {
mColliMagazzinoRESTConsumer.changePosizione(mtbColt, mtbDepoPosizione, () -> {
List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventarioList = mMvwSitArtUdcDetInventarioLiveData.getValue();
if (mvwSitArtUdcDetInventarioList != null) {
Optional<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventario = Stream.of(mvwSitArtUdcDetInventarioList)
.filter(x ->
x.getGestione().equals(mtbColt.getGestione()) &&
x.getDataCollo().isEqual(UtilityDate.toLocalDate(mtbColt.getDataColloD())) &&
x.getSerCollo().equals(mtbColt.getSerCollo()) &&
x.getNumCollo().equals(mtbColt.getNumCollo()))
.findFirst();
mvwSitArtUdcDetInventario.ifPresent(mvwSitArtUdcDetInventarioList::remove);
Map<String, List<MvwSitArtUdcDetInventario>> groupedByCodMartAndPartitaMag =
mvwSitArtUdcDetInventarioList.stream()
.collect(Collectors.groupingBy(dto -> dto.getCodMart() + dto.getPartitaMag()));
List<ArtsInGiacenzaDTO> artsInGiacenza = Stream.of(groupedByCodMartAndPartitaMag.entrySet())
.map(entry -> {
List<MvwSitArtUdcDetInventario> dtoList = entry.getValue();
BigDecimal totalNumCnf = dtoList.stream()
.map(MvwSitArtUdcDetInventario::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
return new ArtsInGiacenzaDTO()
.setCodMart(dtoList.get(0).getCodMart())
.setPartitaMag(dtoList.get(0).getPartitaMag())
.setPosizione(dtoList.get(0).getPosizione())
.setDescrizione(dtoList.get(0).getDescrizioneEstesa())
.setNumOrd(dtoList.get(0).getNumOrd())
.setNumCnf(totalNumCnf)
.setCount(dtoList.size())
.setMvwSitArtUdcDetInventarioDTO(dtoList);
})
.sorted(Comparator.comparing(ArtsInGiacenzaDTO::getPosizione))
.toList();
itemsInventario.postValue(artsInGiacenza);
this.sendOnLoadingEnded();
this.sendOnDataSaved();
}
}, this::sendError);
} else this.sendError(new NoLUFoundException());
}
}
public void init() {
loadData();
}
public void loadData() {
List<String> posizioni = Arrays.asList(SettingsManager.iDB().getViewPosizioni().split("\\|"));
this.mGiacenzaRESTConsumer.getGiacenzeInPosizione(posizioni, true, availableItems -> {
availableItems = Stream.of(availableItems)
.sorted(Comparator.comparing(ArtsInGiacenzaDTO::getPosizione))
.toList();
itemsInventario.postValue(availableItems);
this.sendOnInventoriesLoadingEnded();
}, this::sendError);
}
public MutableLiveData<List<ArtsInGiacenzaDTO>> getItemsInventario() {
return itemsInventario;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
private void sendOnInventoriesLoadingStarted() {
if (this.mListener != null) mListener.onInventoriesLoadingStarted();
}
private void sendOnInventoriesLoadingEnded() {
if (this.mListener != null) mListener.onInventoriesLoadingEnded();
}
private void sendOnInventoriesLoadingError(Exception ex) {
if (this.mListener != null) mListener.onInventoriesLoadingError(ex);
}
private void sendRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete) {
if (this.mListener != null) mListener.onRequestChoosePosition(onComplete);
}
private void sendOnDataSaved() {
if (this.mListener != null) mListener.onDataSaved();
}
public void setListener(Listener listener) {
this.mListener = listener;
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onInventoriesLoadingStarted();
void onInventoriesLoadingEnded();
void onInventoriesLoadingError(Exception ex);
void onRequestChoosePosition(RunnableArgs<MtbDepoPosizione> onComplete);
void onDataSaved();
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInfoGiacenzaComponent {
@Subcomponent.Factory
interface Factory {
DialogInfoGiacenzaComponent create();
}
void inject(DialogInfoGiacenzaView dialogInfoGiacenzaView);
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogInfoGiacenzaComponent.class)
public class DialogInfoGiacenzaModule {
@Provides
DialogInfoGiacenzaViewModel providesDialogInfoGiacenzaViewModel() {
return new DialogInfoGiacenzaViewModel();
}
}

View File

@ -0,0 +1,94 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.ravikoradiya.liveadapter.LiveAdapter;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaBinding;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem;
public class DialogInfoGiacenzaView extends BaseDialogFragment {
@Inject
DialogInfoGiacenzaViewModel mViewModel;
private DialogInfoGiacenzaBinding mBindings;
private Context mContext;
private List<MvwSitArtUdcDetInventario> item;
public static DialogInfoGiacenzaView newInstance(List<MvwSitArtUdcDetInventario> item) {
return new DialogInfoGiacenzaView(item);
}
public DialogInfoGiacenzaView(List<MvwSitArtUdcDetInventario> item) {
this.item = item;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogInfoGiacenzaBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogInfoGiacenzaComponent()
.create()
.inject(this);
setCancelable(true);
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setNeutralButton(R.string.action_close, null)
.setCancelable(isCancelable())
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
this.onLoadingStarted();
this.initAvailableItemsList(item);
this.onLoadingEnded();
}
private void initAvailableItemsList(List<MvwSitArtUdcDetInventario> availableItems) {
if(availableItems == null || availableItems.isEmpty())
return;
var itemList = Stream.of(availableItems)
.map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario)
.toList();
new LiveAdapter(itemList, BR.item)
.map(DialogInfoSituazioneArticoloAvailableListItem.class, R.layout.dialog_info_giacenza_list_item)
.into(this.mBindings.availableList);
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza;
public class DialogInfoGiacenzaViewModel {
}

View File

@ -0,0 +1,95 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto;
import java.math.BigDecimal;
import java.util.List;
import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario;
public class ArtsInGiacenzaDTO {
private String codMart;
private String partitaMag;
private String descrizione;
private String posizione;
private BigDecimal numCnf;
private Integer numOrd;
private Integer count;
private List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventarioDTO;
public String getCodMart() {
return codMart;
}
public ArtsInGiacenzaDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ArtsInGiacenzaDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public String getPosizione() {
return posizione;
}
public ArtsInGiacenzaDTO setPosizione(String posizione) {
this.posizione = posizione;
return this;
}
public BigDecimal getNumCnf() {
return numCnf;
}
public ArtsInGiacenzaDTO setNumCnf(BigDecimal numCnf) {
this.numCnf = numCnf;
return this;
}
public Integer getCount() {
return count;
}
public ArtsInGiacenzaDTO setCount(Integer count) {
this.count = count;
return this;
}
public List<MvwSitArtUdcDetInventario> getMvwSitArtUdcDetInventarioDTO() {
return mvwSitArtUdcDetInventarioDTO;
}
public ArtsInGiacenzaDTO setMvwSitArtUdcDetInventarioDTO(List<MvwSitArtUdcDetInventario> mvwSitArtUdcDetInventarioDTO) {
this.mvwSitArtUdcDetInventarioDTO = mvwSitArtUdcDetInventarioDTO;
return this;
}
public String getDescrizione() {
return descrizione;
}
public ArtsInGiacenzaDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public Integer getNumOrd() {
return numOrd;
}
public String getNumOrdS() {
if (numOrd == null) return "/";
return numOrd.toString();
}
public ArtsInGiacenzaDTO setNumOrd(Integer numOrd) {
this.numOrd = numOrd;
return this;
}
}

View File

@ -0,0 +1,73 @@
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.filter;
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_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO;
public class ProdRiposizionamentoDaProdFilterViewModel {
private final ObservableField<Predicate<ArtsInGiacenzaDTO>> currentPositionPredicate = new ObservableField<>();
private List<ArtsInGiacenzaDTO> initialList;
private final MutableLiveData<List<ArtsInGiacenzaDTO>> currentList = new MutableLiveData<>();
public void init(List<ArtsInGiacenzaDTO> initialList){
this.initialList = initialList;
this.currentList.setValue(this.initialList);
}
public MutableLiveData<List<ArtsInGiacenzaDTO>> getCurrentList() {
return currentList;
}
public void setPositionFilter(List<String> positions){
if (positions == null || positions.isEmpty()) currentPositionPredicate.set(null);
else{
currentPositionPredicate.set(x -> positions.contains(x.getPosizione()));
}
}
public void applyAllTests(){
List<ArtsInGiacenzaDTO> returnList = null;
if (currentPositionPredicate.get() == null){
returnList = this.initialList;
}else {
Stream<ArtsInGiacenzaDTO> tmpStream = Stream.of(this.initialList)
.filter(x -> (currentPositionPredicate.get() == null || (Objects.requireNonNull(currentPositionPredicate.get()).test(x))));
returnList = tmpStream.toList();
}
this.currentList.setValue(returnList);
}
public ObservableField<Predicate<ArtsInGiacenzaDTO>> getCurrentPositionPredicate() {
return currentPositionPredicate;
}
public List<String> getAllPosition(){
return Stream
.of(initialList)
.filter(x -> x.getPosizione() != null)
.sortBy(ArtsInGiacenzaDTO::getPosizione)
.map(ArtsInGiacenzaDTO::getPosizione)
.distinct()
.toList();
}
public List<String> getAvailablePosition(){
if (currentPositionPredicate.get() == null) return getAllPosition();
else {
return Stream.of(this.initialList)
.map(ArtsInGiacenzaDTO::getPosizione)
.distinct()
.toList();
}
}
}

View File

@ -795,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() != null && 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;

View File

@ -172,11 +172,12 @@ public class DialogAskPositionOfLUView extends BaseDialogFragment implements Dia
BarcodeManager.enable(); BarcodeManager.enable();
} else { } else {
completedFlow = true; completedFlow = true;
BarcodeManager.enable();
if (onComplete != null) if (onComplete != null)
onComplete.run(DialogConsts.Results.YES, foundPosizione); onComplete.run(DialogConsts.Results.YES, foundPosizione);
dismiss(); dismiss();
BarcodeManager.enable();
} }
} else { } else {

View File

@ -0,0 +1,21 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M37,42H5V32h32c2.8,0 5,2.2 5,5l0,0C42,39.8 39.8,42 37,42z"
android:fillColor="#B0BEC5"/>
<path
android:pathData="M10,34c-1.7,0 -3,1.3 -3,3s1.3,3 3,3 3,-1.3 3,-3S11.7,34 10,34zM10,38c-0.6,0 -1,-0.4 -1,-1s0.4,-1 1,-1 1,0.4 1,1S10.6,38 10,38zM19,34c-1.7,0 -3,1.3 -3,3s1.3,3 3,3 3,-1.3 3,-3S20.7,34 19,34zM19,38c-0.6,0 -1,-0.4 -1,-1s0.4,-1 1,-1 1,0.4 1,1S19.6,38 19,38zM37,34c-1.7,0 -3,1.3 -3,3s1.3,3 3,3 3,-1.3 3,-3S38.7,34 37,34zM37,38c-0.6,0 -1,-0.4 -1,-1s0.4,-1 1,-1 1,0.4 1,1S37.6,38 37,38zM28,34c-1.7,0 -3,1.3 -3,3s1.3,3 3,3 3,-1.3 3,-3S29.7,34 28,34zM28,38c-0.6,0 -1,-0.4 -1,-1s0.4,-1 1,-1 1,0.4 1,1S28.6,38 28,38z"
android:fillColor="#37474F"/>
<path
android:pathData="M35,31H11c-1.1,0 -2,-0.9 -2,-2V7c0,-1.1 0.9,-2 2,-2h24c1.1,0 2,0.9 2,2v22C37,30.1 36.1,31 35,31z"
android:fillColor="#2958b7"/>
<path
android:pathData="M26.5,13h-7c-0.8,0 -1.5,-0.7 -1.5,-1.5l0,0c0,-0.8 0.7,-1.5 1.5,-1.5h7c0.8,0 1.5,0.7 1.5,1.5l0,0C28,12.3 27.3,13 26.5,13z"
android:fillColor="#0000a5"/>
<path
android:pathData="M37,31H5v2h32c2.2,0 4,1.8 4,4s-1.8,4 -4,4H5v2h32c3.3,0 6,-2.7 6,-6S40.3,31 37,31z"
android:fillColor="#607D8B"/>
</vector>

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:gravity="center_horizontal"
android:text="Situazione articolo" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/available_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
tools:listitem="@layout/dialog_info_situazione_articolo_available_list_item"
tools:itemCount="3"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.core.widget.NestedScrollView>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="androidx.core.content.ContextCompat" />
<import type="it.integry.integrywmsnative.R" />
<import type="it.integry.integrywmsnative.core.utility.UntMisUtils" />
<import type="android.view.View" />
<variable
name="item"
type="it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="8dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/qta_box"
android:gravity="center_vertical"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{&quot;UL &quot; + item.numCollo.toString() + &quot; del &quot; + UtilityDate.formatDate(item.dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)}"
android:textStyle="bold"
tools:text="UL 109467 del 17 mar 2023" />
<!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- style="@style/TextAppearance.AppCompat.Small"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:ellipsize="end"-->
<!-- android:maxLines="2"-->
<!-- android:text="@{UtilityString.isNull(item.descrizioneEstesa, &quot;Nessuna descrizione&quot;)}"-->
<!-- tools:text="Descrizione lunga articolo" />-->
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:background="@drawable/badge_round_corner_without_padding"
android:backgroundTint="@color/light_blue_500"
android:gravity="center_vertical"
android:visibility="@{item.posizione != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/light_blue_500"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/position_label_icon"
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_location_24"
android:tint="@android:color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@{item.posizione}"
app:layout_constraintStart_toEndOf="@id/position_label_icon"
tools:text="POSIZIONE" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
android:background="@drawable/badge_round_corner_without_padding"
android:backgroundTint="@color/red_300"
android:gravity="center_vertical"
android:orientation="horizontal"
android:visibility="@{item.codJcom != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@{ContextCompat.getColor(context, item.commessaMatch ? R.color.red_300 : R.color.white)}"
android:gravity="center_vertical"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_tag"
android:tint="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="@{item.codJcom}"
tools:text="COMMESSA" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="8dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="6dp"
android:visibility="@{item.qtaCol != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimary"
android:gravity="center"
android:text="@{UtilityNumber.decimalToString(item.numCnf, 0)}"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold"
app:visibility="@{UntMisUtils.shouldBeShowInColli(item.mtbAart)}"
tools:text="280"
tools:visibility="gone"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/unt_mis_col"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold"
app:visibility="@{UntMisUtils.shouldBeShowInColli(item.mtbAart)}"
tools:text="CONF"
tools:visibility="gone" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimary"
android:gravity="center"
android:text="@{UtilityNumber.decimalToString(item.qtaCol, item.mtbAart.firstUntMis.cifreDec.intValue())}"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold"
app:reverse_visibility="@{UntMisUtils.shouldBeShowInColli(item.mtbAart)}"
tools:text="280.45" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/TextAppearance.AppCompat.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@{item.untMis}"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textStyle="bold"
app:reverse_visibility="@{UntMisUtils.shouldBeShowInColli(item.mtbAart)}"
tools:text="CONF" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</layout>

View File

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdFragment" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdFragment">
<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.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swiperefresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<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.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@ -0,0 +1,247 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="android.text.Html" />
<import type="it.integry.integrywmsnative.R" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="java.math.BigDecimal" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable
name="item"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.ProdRiposizionamentoDaProdFragment" />
</data>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/content_view_child"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/full_white"
android:orientation="vertical"
android:padding="8dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/badge1"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/orange_600"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:text="@{item.getPosizione()}"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="Posizione" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/badge2"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="8dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/blue_600"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:text="@{item.getCodMart()}"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="CodMart" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/badge3"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_marginStart="8dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:text="@{item.getPartitaMag()}"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="PartitaMag" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_tot"
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{String.valueOf(item.getCount())}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="QTA" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/unt_mis"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:text="ped"
android:textAllCaps="true"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="ped" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="("
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text="(" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(item.getNumCnf(), 0)}"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text="QTA" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="4dp"
android:text="COL"
android:textAllCaps="true"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text="col" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=")"
android:textColor="@android:color/black"
android:textSize="12sp"
android:textStyle="bold"
tools:ignore="SmallSp"
tools:text=")" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/info_row"
android:layout_width="22sp"
android:layout_height="22sp"
android:layout_marginStart="8dp"
android:adjustViewBounds="true"
android:background="@drawable/ic_info_78dp"
android:backgroundTint="@color/colorPrimary"
android:clickable="true"
android:focusable="true"
android:onClick="@{() -> view.onInfoClick(item.getMvwSitArtUdcDetInventarioDTO())}"
android:scaleType="fitCenter" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/descrizione"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="@{item.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="DESCRIZIONE" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
style="@style/AppTheme.NewMaterial.Layout.Badge">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ordine:"
tools:text="Ordine:" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/badge4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.getNumOrdS()}"
android:layout_marginStart="4dp"
tools:text="12345" />
</LinearLayout>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

View File

@ -25,6 +25,7 @@
<string name="rettifica_spedizione_fragment_title">Rettifica spedizione</string> <string name="rettifica_spedizione_fragment_title">Rettifica spedizione</string>
<string name="inventario_fragment_title">Inventario</string> <string name="inventario_fragment_title">Inventario</string>
<string name="prod_fabbisogno_linee_prod_title">Approvvig. linee prod.</string> <string name="prod_fabbisogno_linee_prod_title">Approvvig. linee prod.</string>
<string name="prod_riposizionamento_da_prod_title">Riposizionamento da prod.</string>
<string name="versamento_merce_fragment_title">Posizionamento merce</string> <string name="versamento_merce_fragment_title">Posizionamento merce</string>
<string name="error">Errore</string> <string name="error">Errore</string>
<string name="ops">Ops</string> <string name="ops">Ops</string>

View File

@ -22,6 +22,7 @@
<item name="nav_free_picking" type="id" /> <item name="nav_free_picking" type="id" />
<item name="nav_free_lav_picking" type="id" /> <item name="nav_free_lav_picking" type="id" />
<item name="nav_prod_posizionamento_da_ord" type="id" /> <item name="nav_prod_posizionamento_da_ord" type="id" />
<item name="nav_prod_riposizionamento_da_ord" type="id" />
<item name="nav_resi_fornitore" type="id" /> <item name="nav_resi_fornitore" type="id" />
<item name="nav_resi_cliente" type="id" /> <item name="nav_resi_cliente" type="id" />
<item name="nav_prod_ordine_produzione" type="id" /> <item name="nav_prod_ordine_produzione" type="id" />

View File

@ -73,6 +73,7 @@
<string name="rettifica_spedizione_fragment_title">Inventory</string> <string name="rettifica_spedizione_fragment_title">Inventory</string>
<string name="inventario_fragment_title">Inventory</string> <string name="inventario_fragment_title">Inventory</string>
<string name="prod_fabbisogno_linee_prod_title">Production line requirements</string> <string name="prod_fabbisogno_linee_prod_title">Production line requirements</string>
<string name="prod_riposizionamento_da_prod_title">Riposizionamento da prod.</string>
<string name="versamento_merce_fragment_title">Items placement</string> <string name="versamento_merce_fragment_title">Items placement</string>
<string name="free_picking_title_fragment">Free picking</string> <string name="free_picking_title_fragment">Free picking</string>
<string name="error">Error</string> <string name="error">Error</string>

View File

@ -68,15 +68,17 @@
<item name="android:textColor">@drawable/material_text_color</item> <item name="android:textColor">@drawable/material_text_color</item>
<item name="android:textSize">18sp</item> <item name="android:textSize">18sp</item>
</style> </style>
<style name="AppTheme.NewMaterial.Text.Badge" parent = "AppTheme.NewMaterial"> <style name="AppTheme.NewMaterial.Layout.Badge" parent = "AppTheme.NewMaterial">
<item name="android:fontFamily">@font/google_sans_regular</item>
<item name="android:textStyle">normal</item>
<item name="android:background">@drawable/gray_detail_background_round4</item> <item name="android:background">@drawable/gray_detail_background_round4</item>
<item name="android:paddingStart">8dp</item> <item name="android:paddingStart">8dp</item>
<item name="android:paddingEnd">8dp</item> <item name="android:paddingEnd">8dp</item>
<item name="android:paddingTop">2dp</item> <item name="android:paddingTop">2dp</item>
<item name="android:paddingBottom">2dp</item> <item name="android:paddingBottom">2dp</item>
</style> </style>
<style name="AppTheme.NewMaterial.Text.Badge" parent = "AppTheme.NewMaterial.Layout.Badge">
<item name="android:fontFamily">@font/google_sans_regular</item>
<item name="android:textStyle">normal</item>
</style>
<style name="AppTheme.NewMaterial.Text.ToolbarTitle" parent="AppTheme.NewMaterial.Text"> <style name="AppTheme.NewMaterial.Text.ToolbarTitle" parent="AppTheme.NewMaterial.Text">
<item name="android:textSize">20sp</item> <item name="android:textSize">20sp</item>