Finish v1.39.00(413)
This commit is contained in:
commit
4e53189d56
21
.idea/appInsightsSettings.xml
generated
21
.idea/appInsightsSettings.xml
generated
@ -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>
|
||||||
@ -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 {
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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())
|
||||||
|
|||||||
@ -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 =
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -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()));
|
||||||
|
|
||||||
|
}};
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dialogs.info_giacenza;
|
||||||
|
|
||||||
|
public class DialogInfoGiacenzaViewModel {
|
||||||
|
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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;
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
21
app/src/main/res/drawable/ic_production_line_produzione.xml
Normal file
21
app/src/main/res/drawable/ic_production_line_produzione.xml
Normal 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>
|
||||||
60
app/src/main/res/layout/dialog_info_giacenza.xml
Normal file
60
app/src/main/res/layout/dialog_info_giacenza.xml
Normal 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>
|
||||||
213
app/src/main/res/layout/dialog_info_giacenza_list_item.xml
Normal file
213
app/src/main/res/layout/dialog_info_giacenza_list_item.xml
Normal 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="@{"UL " + item.numCollo.toString() + " del " + 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, "Nessuna descrizione")}"-->
|
||||||
|
<!-- 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>
|
||||||
@ -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>
|
||||||
@ -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>
|
||||||
@ -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>
|
||||||
|
|||||||
@ -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" />
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user