Compare commits

...

27 Commits

Author SHA1 Message Date
3a6ba51a69 Finish v1.23.11(266) 2022-03-01 12:00:01 +01:00
767088f1d0 -> v1.23.11 (266) 2022-03-01 11:59:54 +01:00
d0f6999dd8 Aggiunto barcode nel messaggio di errore 2022-03-01 11:59:20 +01:00
f88d7892bd Finish v1.23.10(265) 2022-02-28 18:42:26 +01:00
3df5e406ef Finish v1.23.10(265) 2022-02-28 18:42:25 +01:00
8e0728c2b4 -> 1.23.10 (265) 2022-02-28 18:42:19 +01:00
0a2d47110d Refactoring ordini acquisto 2022-02-28 18:38:41 +01:00
4ed8c825dd Merge remote-tracking branch 'origin/develop' into develop 2022-02-28 17:01:16 +01:00
0a6d01628f Fix su open e close del dialog progress 2022-02-28 17:01:11 +01:00
453c8e0cad Finish v.1.23.9(264) 2022-02-28 15:57:45 +01:00
ee43d1e985 Finish v.1.23.9(264) 2022-02-28 15:57:45 +01:00
86d472fb88 -> v1.23.9 (264) 2022-02-28 15:57:40 +01:00
61c3458088 Finish flag_scan_art 2022-02-28 15:56:44 +01:00
85c4768e51 rimossa progress che si blocca in conferma filtri spedizione 2022-02-28 15:56:21 +01:00
f1b4ce469e Merge branch 'develop' into feature/flag_scan_art 2022-02-28 15:42:35 +01:00
6071b3eb44 Finish v1.23.8(263) 2022-02-28 09:52:59 +01:00
1d2bd20584 Finish v1.23.8(263) 2022-02-28 09:52:58 +01:00
756389e6c6 -> v1.23.8 (263) 2022-02-28 09:52:54 +01:00
4b19129a2f Fix su bindings in dialogInputQuantity.
Piccolo refactoring UI di activity di ordine di acquisto.
2022-02-28 09:52:23 +01:00
f6aadf1115 Finish v1.23.7(262) 2022-02-25 17:37:19 +01:00
3a5de50353 Finish v1.23.7(262) 2022-02-25 17:37:19 +01:00
cf3b8749dc -> v1.23.7 (262) 2022-02-25 17:37:13 +01:00
34ff300515 workaround problema con tempistiche thread in salvataggio articolo ordine acquisto 2022-02-25 17:36:07 +01:00
0738993d4c Aggiunto flag use qta ord in accettazione 2022-02-24 11:01:01 +01:00
9765fe1807 Completato refactoring del dialog ask cliente 2022-02-24 10:04:01 +01:00
90985b899b Finish v1.23.6(261) 2022-02-23 12:50:45 +01:00
86c7be4e7d Implementato flag per abilitare la scansione tramite barcode articoli 2022-02-22 09:30:09 +01:00
61 changed files with 1490 additions and 863 deletions

View File

@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 261 def appVersionCode = 266
def appVersionName = '1.23.6' def appVersionName = '1.23.11'
signingConfigs { signingConfigs {
release { release {

View File

@@ -51,6 +51,8 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamento
import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaComponent;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaModule;
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComponent;
@@ -65,6 +67,8 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviForn
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsComponent; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArtsModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent; import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
@@ -119,7 +123,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
DocInterniModule.class, DocInterniModule.class,
DialogSelectDocInfoModule.class, DialogSelectDocInfoModule.class,
DocInterniEditFormModule.class, DocInterniEditFormModule.class,
DialogSelectDocRowsModule.class DialogSelectDocRowsModule.class,
DialogAskClienteModule.class,
DialogEditArticoloModule.class
}) })
public interface MainApplicationComponent { public interface MainApplicationComponent {
@@ -161,6 +167,8 @@ public interface MainApplicationComponent {
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent(); OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
DialogAskClienteComponent.Factory dialogAskClienteComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component(); DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
DialogInputLUProdComponent.Factory dialogInputLUProdComponent(); DialogInputLUProdComponent.Factory dialogInputLUProdComponent();
@@ -201,6 +209,8 @@ public interface MainApplicationComponent {
InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent(); InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent();
DialogEditArticoloComponent.Factory dialogEditArticoloComponent();
void inject(MainApplication mainApplication); void inject(MainApplication mainApplication);
void inject(AppContext mainApplication); void inject(AppContext mainApplication);

View File

@@ -31,6 +31,7 @@ import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@Module @Module
public class MainApplicationModule { public class MainApplicationModule {
@@ -85,6 +86,12 @@ public class MainApplicationModule {
return DialogProgressView.newInstance(); return DialogProgressView.newInstance();
} }
@Provides
@Singleton
DialogInputQuantityV2View providesDialogInputQuantityV2View() {
return new DialogInputQuantityV2View();
}
@Provides @Provides
@Singleton @Singleton
OrdiniRESTConsumer provideOrdiniRESTConsumer(SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) { OrdiniRESTConsumer provideOrdiniRESTConsumer(SystemRESTConsumer systemRESTConsumer, EntityRESTConsumer entityRESTConsumer) {

View File

@@ -23,7 +23,7 @@ public class BarcodeCallbackDTO {
return onScanSuccessfull; return onScanSuccessfull;
} }
public BarcodeCallbackDTO setOnScanSuccessfull(RunnableArgs<BarcodeScanDTO> onScanSuccessfull) { public BarcodeCallbackDTO setOnScanSuccessful(RunnableArgs<BarcodeScanDTO> onScanSuccessfull) {
this.onScanSuccessfull = onScanSuccessfull; this.onScanSuccessfull = onScanSuccessfull;
return this; return this;
} }

View File

@@ -24,8 +24,6 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
}) })
public abstract class AppDatabase extends RoomDatabase { public abstract class AppDatabase extends RoomDatabase {
// private AppDatabase mRoomInstance;
public abstract ArticoloGrigliaDao articoloGrigliaDao(); public abstract ArticoloGrigliaDao articoloGrigliaDao();
public abstract GrigliaDao grigliaDao(); public abstract GrigliaDao grigliaDao();

View File

@@ -39,15 +39,15 @@ public interface ArticoloGrigliaDao {
@Query("SELECT * FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia LIMIT 1") @Query("SELECT * FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia LIMIT 1")
ArticoloGriglia findArticoloByCodMartAndGriglia(String codMart, int idGriglia); ArticoloGriglia findArticoloByCodMartAndGriglia(String codMart, int idGriglia);
@Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan )AND id_griglia = :idGriglia LIMIT 1") @Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan) AND id_griglia = :idGriglia LIMIT 1")
ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia); ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia);
@Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode )AND id_griglia = :idGriglia LIMIT 1") @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode) AND id_griglia = :idGriglia LIMIT 1")
Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart); Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId") @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId); List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
@Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId and new_no_promo = 1") @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId AND new_no_promo = 1")
List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId); List<ArticoloGriglia> getNewArticoliInGriglia(int grigliaId);
} }

View File

@@ -4,7 +4,7 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityResources;
public final class NoResultFromBarcodeException extends Exception { public final class NoResultFromBarcodeException extends Exception {
public NoResultFromBarcodeException() { public NoResultFromBarcodeException(String barcode) {
super(UtilityResources.getString(R.string.no_result_from_barcode)); super(UtilityResources.getString(R.string.no_result_from_barcode) + " (" + barcode + ")");
} }
} }

View File

@@ -21,6 +21,8 @@ public class BaseActivity extends AppCompatActivity {
@Inject @Inject
public DialogProgressView mCurrentProgress; public DialogProgressView mCurrentProgress;
private boolean progressOpened;
@Nullable @Nullable
@Override @Override
public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) { public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
@@ -56,36 +58,38 @@ public class BaseActivity extends AppCompatActivity {
protected void openProgress() { protected void openProgress() {
runOnUiThread(() -> { BarcodeManager.disable();
BarcodeManager.disable(); if (!progressOpened) {
if (!this.mCurrentProgress.isVisible() && !this.mCurrentProgress.isAdded()) { this.progressOpened = true;
runOnUiThread(() -> {
this.mCurrentProgress.show(getSupportFragmentManager(), "tag"); this.mCurrentProgress.show(getSupportFragmentManager(), "tag");
} });
}); }
} }
protected void closeProgress() { protected void closeProgress() {
runOnUiThread(() -> { BarcodeManager.enable();
BarcodeManager.enable(); if (progressOpened) {
if (mCurrentProgress.isVisible()) { this.progressOpened = false;
runOnUiThread(() -> {
mCurrentProgress.dismiss(); mCurrentProgress.dismiss();
} });
}); }
} }
public void onLoadingStarted() { public void onLoadingStarted() {
new Thread(() -> { // new Thread(() -> {
BarcodeManager.disable(); BarcodeManager.disable();
this.openProgress(); this.openProgress();
}).start(); // }).start();
} }
public void onLoadingEnded() { public void onLoadingEnded() {
new Thread(() -> { // new Thread(() -> {
this.closeProgress(); this.closeProgress();
BarcodeManager.enable(); BarcodeManager.enable();
}).start(); // }).start();
} }
public void onError(Exception ex) { public void onError(Exception ex) {

View File

@@ -29,6 +29,7 @@ public abstract class BaseFragment extends Fragment {
protected ElevatedToolbar mToolbar; protected ElevatedToolbar mToolbar;
protected final List<Runnable> mOnPreDestroyList = new ArrayList<>(); protected final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private boolean progressOpened;
public void setScrollToolbar(ElevatedToolbar toolbar) { public void setScrollToolbar(ElevatedToolbar toolbar) {
@@ -81,19 +82,21 @@ public abstract class BaseFragment extends Fragment {
} }
protected void openProgress() { protected void openProgress() {
requireActivity().runOnUiThread(() -> { if (!progressOpened) {
if (!this.mCurrentProgress.isVisible() && !this.mCurrentProgress.isAdded()) { this.progressOpened = true;
requireActivity().runOnUiThread(() -> {
this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag"); this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag");
} });
}); }
} }
protected void closeProgress() { protected void closeProgress() {
requireActivity().runOnUiThread(() -> { if (progressOpened) {
if (mCurrentProgress.isVisible()) { this.progressOpened = false;
requireActivity().runOnUiThread(() -> {
mCurrentProgress.dismiss(); mCurrentProgress.dismiss();
} });
}); }
} }
protected void popMe() { protected void popMe() {

View File

@@ -125,7 +125,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
OrdiniRESTConsumerService service = RESTBuilder.getService(OrdiniRESTConsumerService.class); OrdiniRESTConsumerService service = RESTBuilder.getService(OrdiniRESTConsumerService.class);
service.getOrdiniInevasi(codMdep, gestione.getText()) service.getOrdiniInevasi(codMdep, gestione.getText())
.enqueue(new Callback<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>>() { .enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineUscitaInevasoDTO>>> response) {
analyzeAnswer(response, "getOrdiniInevasi", responseDtoList -> { analyzeAnswer(response, "getOrdiniInevasi", responseDtoList -> {
@@ -145,7 +145,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void retrieveListaArticoliFromOrdiniUscita(List<OrdineUscitaInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void retrieveListaArticoliFromOrdiniUscita(String codMdep, List<OrdineUscitaInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
List<GetPickingListDTO> getPickingListDTOs = Stream.of(orders) List<GetPickingListDTO> getPickingListDTOs = Stream.of(orders)
.map(x -> new GetPickingListDTO() .map(x -> new GetPickingListDTO()
.setData(x.getDataOrdS()) .setData(x.getDataOrdS())
@@ -157,7 +157,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
OrdiniRESTConsumerService service = RESTBuilder.getService(OrdiniRESTConsumerService.class, 90); OrdiniRESTConsumerService service = RESTBuilder.getService(OrdiniRESTConsumerService.class, 90);
service.getArticoliFromOrdini(getPickingListDTOs).enqueue(new Callback<ServiceRESTResponse<List<SitArtOrdDTO>>>() { service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", onComplete, onFailed); analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", onComplete, onFailed);

View File

@@ -16,7 +16,7 @@ import retrofit2.http.Query;
public interface OrdiniRESTConsumerService { public interface OrdiniRESTConsumerService {
@POST("wms/getArticoliFromOrdini") @POST("wms/getArticoliFromOrdini")
Call<ServiceRESTResponse<List<SitArtOrdDTO>>> getArticoliFromOrdini(@Body List<GetPickingListDTO> pickingListDTO); Call<ServiceRESTResponse<List<SitArtOrdDTO>>> getArticoliFromOrdini(@Query("codMdep") String codMdep, @Body List<GetPickingListDTO> pickingListDTO);
@POST("wms/getSuggestedPickingList") @POST("wms/getSuggestedPickingList")
Call<ServiceRESTResponse<List<PickingObjectDTO>>> getSuggestedPickingList(@Query("codMdep") String codMdep, @Body List<SitArtOrdDTO> sitArtOrdDTOList); Call<ServiceRESTResponse<List<PickingObjectDTO>>> getSuggestedPickingList(@Query("codMdep") String codMdep, @Body List<SitArtOrdDTO> sitArtOrdDTOList);

View File

@@ -8,6 +8,8 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
@@ -27,10 +29,15 @@ import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@Singleton
public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
public static void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) { public void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
getArticoliListinoStatic(codAlis, onSuccess, onFailed);
}
public static void getArticoliListinoStatic(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
ordiniARestService ordiniARestService
.getArticoliListino(codAlis) .getArticoliListino(codAlis)
@@ -46,7 +53,9 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
.distinct() .distinct()
.withoutNulls() .withoutNulls()
.forEach(art -> { .forEach(art -> {
List<ArticoloDTO> inList = Stream.of(griglia.getGrigliaAcquistiChild()).filter(x -> x.getCodMart().equalsIgnoreCase(art)).toList(); List<ArticoloDTO> inList = Stream.of(griglia.getGrigliaAcquistiChild())
.filter(x -> x.getCodMart().equalsIgnoreCase(art))
.toList();
if (inList.size() > 1) { if (inList.size() > 1) {
for (ArticoloDTO articolo : inList) { for (ArticoloDTO articolo : inList) {
if (!articolo.getBarCode().endsWith(articolo.getCodMart())) { if (!articolo.getBarCode().endsWith(articolo.getCodMart())) {
@@ -72,7 +81,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public static void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) { public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
SaveDTO saveDTO = new SaveDTO(); SaveDTO saveDTO = new SaveDTO();
OrdineDTO ordineDTO = new OrdineDTO(); OrdineDTO ordineDTO = new OrdineDTO();
List<ArtDTO> artRows = new ArrayList<>(); List<ArtDTO> artRows = new ArrayList<>();
@@ -126,7 +135,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
} }
private static ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) { private ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) {
ArtDTO dto = new ArtDTO(); ArtDTO dto = new ArtDTO();
dto.setRigaOrd(rigaOrd); dto.setRigaOrd(rigaOrd);
dto.setCodMart(art.getCodMart()); dto.setCodMart(art.getCodMart());

View File

@@ -19,6 +19,7 @@ public class SitArtOrdDTO {
private String idViaggio; private String idViaggio;
private String codMdep; private String codMdep;
private boolean flagEnablePickManuale; private boolean flagEnablePickManuale;
private boolean flagEnableScanArt;
private String codMgrp; private String codMgrp;
private String descrizioneMgrp; private String descrizioneMgrp;
private String codMsgr; private String codMsgr;
@@ -145,6 +146,14 @@ public class SitArtOrdDTO {
return this; return this;
} }
public boolean isFlagEnableScanArt() {
return flagEnableScanArt;
}
public SitArtOrdDTO setFlagEnableScanArt(boolean flagEnableScanArt) {
this.flagEnableScanArt = flagEnableScanArt;
return this;
}
public String getCodMgrp() { public String getCodMgrp() {
return codMgrp; return codMgrp;

View File

@@ -41,6 +41,7 @@ public class DBSettingsModel {
private String produzioneDefaultCodAnag; private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine; private String reportNameSpedizionChiudiOrdine;
private int onNumCnfInputChanged = 1; private int onNumCnfInputChanged = 1;
private boolean flagAccettazioneUseQtaOrd = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@@ -302,4 +303,13 @@ public class DBSettingsModel {
this.docInterniCheckFornitore = docInterniCheckFornitore; this.docInterniCheckFornitore = docInterniCheckFornitore;
return this; return this;
} }
public boolean isFlagAccettazioneUseQtaOrd() {
return flagAccettazioneUseQtaOrd;
}
public DBSettingsModel setFlagAccettazioneUseQtaOrd(boolean flagAccettazioneUseQtaOrd) {
this.flagAccettazioneUseQtaOrd = flagAccettazioneUseQtaOrd;
return this;
}
} }

View File

@@ -278,6 +278,10 @@ public class SettingsManager {
.setGestName("PVM") .setGestName("PVM")
.setSection("DOC_INTERNI") .setSection("DOC_INTERNI")
.setKeySection("CHECK_FORNITORE")); .setKeySection("CHECK_FORNITORE"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("ACCETTAZIONE")
.setKeySection("FLAG_USE_QTA_ORD"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
@@ -304,6 +308,7 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class)); dbSettingsModelIstance.setFlagOrdinaNuoviArticoliInGriglia(getValueFromList(list, "ORDINI_A", "ORDINA_NUOVI_ARTICOLI", Boolean.class));
dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class)); dbSettingsModelIstance.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class));
dbSettingsModelIstance.setFlagAccettazioneUseQtaOrd(getValueFromList(list, "ACCETTAZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class);
if (notePerdita != null) { if (notePerdita != null) {

View File

@@ -85,6 +85,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Inject @Inject
AccettazionePickingViewModel mViewModel; AccettazionePickingViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private final AccettazionePickingFiltroOrdineViewModel mAppliedFilterViewModel = new AccettazionePickingFiltroOrdineViewModel(); private final AccettazionePickingFiltroOrdineViewModel mAppliedFilterViewModel = new AccettazionePickingFiltroOrdineViewModel();
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
@@ -141,9 +144,14 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.initFilters(); this.initFilters();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
boolean useQtaOrd = SettingsManager.iDB().isFlagAccettazioneUseQtaOrd();
mViewModel.setListeners(this); mViewModel.setListeners(this);
mViewModel.init(mOrders, mSitArts, codMdep); mViewModel.init(
mOrders,
mSitArts,
codMdep,
useQtaOrd);
} }
private void initFilters() { private void initFilters() {
@@ -347,7 +355,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
} }
@@ -833,8 +841,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.setCanLUBeClosed(true) .setCanLUBeClosed(true)
.setCanOverflowOrderQuantity(canOverflowQuantity); .setCanOverflowOrderQuantity(canOverflowQuantity);
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -842,9 +851,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.setPartitaMag(resultDTO.getPartitaMag()) .setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
this.mViewModel.resetMatchedRows();
}) })
.setOnAbort(() -> this.mViewModel.resetMatchedRows())
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }

View File

@@ -73,6 +73,7 @@ public class AccettazionePickingViewModel {
private List<OrdineAccettazioneInevasoDTO> mOrders; private List<OrdineAccettazioneInevasoDTO> mOrders;
private List<SitArtOrdDTO> mSitArts; private List<SitArtOrdDTO> mSitArts;
private boolean mUseQtaOrd;
private final MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>(); private final MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
private MtbColt mCurrentMtbColt = null; private MtbColt mCurrentMtbColt = null;
@@ -97,9 +98,10 @@ public class AccettazionePickingViewModel {
} }
public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, String codMdep) { public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, String codMdep, boolean useQtaOrd) {
this.mOrders = orders; this.mOrders = orders;
this.mDefaultCodMdep = codMdep; this.mDefaultCodMdep = codMdep;
this.mUseQtaOrd = useQtaOrd;
this.mSitArts = Stream.of(sitArts) this.mSitArts = Stream.of(sitArts)
.filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) .filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
@@ -315,12 +317,13 @@ public class AccettazionePickingViewModel {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd;
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete); this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete);
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
}, this::sendError); }, this::sendError);
@@ -536,7 +539,9 @@ public class AccettazionePickingViewModel {
initialQtaTot = totalQtaOrd; initialQtaTot = totalQtaOrd;
} }
if (UtilityBigDecimal.greaterThan(pickingObjectDTO.getMtbAart().getColliPedana(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) { if (!this.mUseQtaOrd &&
UtilityBigDecimal.greaterThan(pickingObjectDTO.getMtbAart().getColliPedana(), BigDecimal.ZERO) &&
UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana(); initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf); initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
} }

View File

@@ -55,9 +55,13 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
@Inject @Inject
MtbColrRepository documentRowsRepository; MtbColrRepository documentRowsRepository;
@Inject @Inject
DocInterniEditFormViewModel viewModel; DocInterniEditFormViewModel viewModel;
@Inject
DialogInputQuantityV2View dialogInputQuantityV2View;
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private ActivityContabDocInterniEditBinding binding; private ActivityContabDocInterniEditBinding binding;
@@ -186,7 +190,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
} }
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(this.viewModel::processBarcode) .setOnScanSuccessful(this.viewModel::processBarcode)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
this.viewModel.fetchDocumentRows(); this.viewModel.fetchDocumentRows();
} }
@@ -245,11 +249,12 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
} }
return partitaMag; return partitaMag;
}); });
DialogInputQuantityV2View dialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setOnComplete((resultDTO, shouldCloseLU) -> {
this.onLoadingStarted(); this.onLoadingStarted();
this.viewModel.saveRow(row, resultDTO); this.viewModel.saveRow(row, resultDTO);
}, this::onLoadingEnded) })
.setOnAbort(this::onLoadingEnded)
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }

View File

@@ -237,7 +237,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable(); BarcodeManager.enable();
@@ -697,34 +697,34 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
}; };
private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) { private void refreshList(List<OrdiniUscitaElencoDTO> filteredList) {
this.onLoadingStarted();
//new Thread(() -> { // new Thread(() -> {
requireActivity().runOnUiThread(() -> { // requireActivity().runOnUiThread(() -> {
List<OrdiniUscitaElencoDTO> tmpList; // this.onLoadingStarted();
List<OrdiniUscitaElencoDTO> tmpList;
if (filteredList != null) { if (filteredList != null) {
tmpList = filteredList; tmpList = filteredList;
} else if (mAppliedFilterViewModel != null) { } else if (mAppliedFilterViewModel != null) {
mAppliedFilterViewModel.applyAllTests(); mAppliedFilterViewModel.applyAllTests();
tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
} else { } else {
tmpList = mViewModel.getOrderList().getValue(); tmpList = mViewModel.getOrderList().getValue();
} }
var list = convertDataModelToListModel(tmpList); var list = convertDataModelToListModel(tmpList);
this.mOrdiniInevasiMutableData.clear(); this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(list); this.mOrdiniInevasiMutableData.addAll(list);
fabVisible.set(Stream.of(mOrdiniInevasiMutableData) fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get())); .anyMatch(y -> y.getSelectedObservable().get()));
this.onLoadingEnded(); // this.onLoadingEnded();
}); // });
//}).start(); // }).start();
} }

View File

@@ -104,7 +104,7 @@ public class OrdiniUscitaElencoViewModel {
.distinct() .distinct()
.toList(); .toList();
if (foundGestioni != null && foundGestioni.size() > 1) { if (foundGestioni.size() > 1) {
this.sendError(new InvalidLUMultiGestioneException()); this.sendError(new InvalidLUMultiGestioneException());
return; return;
} }
@@ -116,7 +116,7 @@ public class OrdiniUscitaElencoViewModel {
.distinct() .distinct()
.toList(); .toList();
if (foundCodMdep != null && foundCodMdep.size() > 1) { if (foundCodMdep.size() > 1) {
this.sendError(new InvalidLUMultiCodMdepException()); this.sendError(new InvalidLUMultiCodMdepException());
return; return;
} }
@@ -128,9 +128,9 @@ public class OrdiniUscitaElencoViewModel {
.map(x -> (OrdineUscitaInevasoDTO) x) .map(x -> (OrdineUscitaInevasoDTO) x)
.toList(); .toList();
this.mOrdiniRESTConsumer.retrieveListaArticoliFromOrdiniUscita(selectedOrdersBase, sitArts -> { this.mOrdiniRESTConsumer.retrieveListaArticoliFromOrdiniUscita(mCurrentCodMdep, selectedOrdersBase, sitArts -> {
if(mtbGrupToFilter != null && !mtbGrupToFilter.isEmpty()) { if (mtbGrupToFilter != null && !mtbGrupToFilter.isEmpty()) {
sitArts = Stream.of(sitArts) sitArts = Stream.of(sitArts)
.filter(x -> Stream.of(mtbGrupToFilter).map(MtbGrup::getCodMgrp).anyMatch(y -> y.equalsIgnoreCase(x.getCodMgrp()))) .filter(x -> Stream.of(mtbGrupToFilter).map(MtbGrup::getCodMgrp).anyMatch(y -> y.equalsIgnoreCase(x.getCodMgrp())))
.toList(); .toList();

View File

@@ -69,6 +69,9 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Inject @Inject
PickingLiberoViewModel mViewModel; PickingLiberoViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
public BindableBoolean thereIsAnOpenedUL = new BindableBoolean(false); public BindableBoolean thereIsAnOpenedUL = new BindableBoolean(false);
public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean(true); public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean(true);
public BindableBoolean thereIsAnyRowInUL = new BindableBoolean(false); public BindableBoolean thereIsAnyRowInUL = new BindableBoolean(false);
@@ -153,7 +156,7 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable(); BarcodeManager.enable();
@@ -334,8 +337,8 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
.setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(canLUBeClosed); .setCanLUBeClosed(canLUBeClosed);
DialogInputQuantityV2View mDialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -345,15 +348,14 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
this.openProgress(); this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
this.closeProgress();
}) })
.show(getActivity().getSupportFragmentManager(), "tag"); .setOnAbort(this::closeProgress)
.show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
public void onRowSaved() { public void onRowSaved() {
getActivity().runOnUiThread(() -> { requireActivity().runOnUiThread(() -> {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}); });
} }

View File

@@ -205,6 +205,7 @@ public class PickingLiberoViewModel {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd;
mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
MtbAart articolo = mtbAartList.get(0); MtbAart articolo = mtbAartList.get(0);
@@ -216,11 +217,11 @@ public class PickingLiberoViewModel {
this.dispatchArt(articolo, ean128Model); this.dispatchArt(articolo, ean128Model);
onComplete.run(); onComplete.run();
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
}, this::sendError); }, this::sendError);

View File

@@ -64,6 +64,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Inject @Inject
PickingResiViewModel mViewmodel; PickingResiViewModel mViewmodel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>(); private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>();
@@ -164,7 +167,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
} }
@@ -319,8 +322,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
.setCanLUBeClosed(false) .setCanLUBeClosed(false)
.setCanPartitaMagBeChanged(false); .setCanPartitaMagBeChanged(false);
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -330,7 +334,8 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.openProgress(); this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> { })
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows(); this.mViewmodel.resetMatchedRows();
}) })
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");

View File

@@ -53,6 +53,9 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
@Inject @Inject
ProdRecuperoMaterialeViewModel mViewModel; ProdRecuperoMaterialeViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private FragmentProdRecuperoMaterialeBinding mBinding; private FragmentProdRecuperoMaterialeBinding mBinding;
private int barcodeScannerIstanceID = -1; private int barcodeScannerIstanceID = -1;
@@ -106,7 +109,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable(); BarcodeManager.enable();
@@ -200,8 +203,9 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
.setCanOverflowOrderQuantity(canOverflowOrderQuantity) .setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanLUBeClosed(canLUBeClosed); .setCanLUBeClosed(canLUBeClosed);
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -210,7 +214,8 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl
.setDataScad(resultDTO.getDataScad()); .setDataScad(resultDTO.getDataScad());
this.mViewModel.onItemDispatched(item, pickedQuantityDTO, sourceMtbColt); this.mViewModel.onItemDispatched(item, pickedQuantityDTO, sourceMtbColt);
}, this::onLoadingEnded) })
.setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }

View File

@@ -10,11 +10,12 @@ import android.widget.Toast;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.ArrayList; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
@@ -26,46 +27,34 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding; import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListModel;
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction; import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdineAcquistoEditActivity extends BaseActivity { public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdineAcquistoEditViewModel.Listener {
private static String DATA_KEY_ORDER = "keyOrdine"; private static String DATA_KEY_ORDER = "keyOrdine";
private Ordine mOrdine; private Ordine mOrdine;
private Griglia mGriglia;
private List<ArticoloOrdine> mArticoli = new ArrayList<>();
private PVEditOrderHelper mhelper;
private ActivityPvOrdineAcquistoEditBinding mBinding; private ActivityPvOrdineAcquistoEditBinding mBinding;
private int mBarcodeScannerIstanceID;
private OrdineAcquistoArtListAdapter mAdapter; private int barcodeScannerIstanceID;
@Inject @Inject
OrdineRepository mOrdineRepository; PVOrdineAcquistoEditViewModel mViewModel;
@Inject
GrigliaRepository mGrigliaRepository; private final ObservableArrayList<OrdineAcquistoArtListModel> mArticoliMutableData = new ObservableArrayList<>();
@Inject
ArticoliOrdineRepository mArticoliOrdineRepository;
@Inject
ArticoloGrigliaRepository mArticoloGrigliaRepository;
public static Intent newInstance(Context context, Ordine ordine) { public static Intent newInstance(Context context, Ordine ordine) {
@@ -84,7 +73,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
.create() .create()
.inject(this); .inject(this);
mhelper = new PVEditOrderHelper(mGrigliaRepository, mArticoliOrdineRepository, mArticoloGrigliaRepository);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit);
mBinding.setViewModel(this); mBinding.setViewModel(this);
@@ -95,25 +83,40 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
if (mOrdine == null) { if (mOrdine == null) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
closeEdit(); close();
} }
if (mOrdine.isTransmitted()) { if (mOrdine.isTransmitted()) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show(); Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
closeEdit(); close();
} }
String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), String.valueOf(mOrdine.getOrdineId()), UtilityDate.formatDate(mOrdine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), String.valueOf(mOrdine.getOrdineId()), UtilityDate.formatDate(mOrdine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString)); mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString));
FabMenuCustomAnimations.changeIconOnFocus(mBinding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp); FabMenuCustomAnimations.changeIconOnFocus(mBinding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp);
initBarcodeReader();
initRecyclerView(); initRecyclerView();
fetchDetails();
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(this::onScanSuccessful)
.setOnScanFailed(this::handleException));
this.mViewModel.setListener(this);
this.mViewModel.getCurrentGriglia().observe(this, griglia -> {
mBinding.codAlis.setText(griglia.getCodAlis());
});
this.mViewModel.getArticoli().observe(this, articoli -> {
mBinding.countArtOrd.setText(String.valueOf(articoli.size()));
mBinding.pvOrdineExport.setVisibility(articoli.size() > 0 ? View.INVISIBLE : View.GONE);
mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE);
if (articoli.isEmpty() && isOrderNewProdsForced()) {
this.mViewModel.orderNewProducts();
}
});
this.mViewModel.init(mOrdine);
} }
@Override @Override
public boolean onSupportNavigateUp() { public boolean onSupportNavigateUp() {
@@ -121,186 +124,133 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
return true; return true;
} }
private void initRecyclerView() { private void initBarcodeReader() {
mBinding.articoliOrdineList.setHasFixedSize(true); barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void initRecyclerView() {
this.mViewModel.getArticoli().observe(this, updatedData -> {
this.mArticoliMutableData.clear();
this.mArticoliMutableData.addAll(convertDataModelToListModel(updatedData));
// this.noItemsToPick.set(!isThereAnyItemToPick(updatedData));
});
var mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoliMutableData)
.setOnItemClicked(this::selectAction);
mBinding.articoliOrdineList.setAdapter(mAdapter);
mBinding.articoliOrdineList.setHasFixedSize(true);
mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this)); mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this));
SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(this, SimpleDividerItemDecoration.VERTICAL);
itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
mBinding.articoliOrdineList.addItemDecoration(itemDecorator); mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::selectAction);
mBinding.articoliOrdineList.setAdapter(mAdapter);
} }
private List<OrdineAcquistoArtListModel> convertDataModelToListModel
(List<ArticoloOrdine> dataList) {
return Stream.of(dataList)
.distinctBy(ArticoloOrdine::getArticoloOrdineId)
.sortBy(x -> x.getDataIns().getTime())
.map(x -> new OrdineAcquistoArtListModel()
.setBadge1(x.getCodMart())
.setDescription(x.getDescrizione())
.setQuantity(BigDecimal.valueOf(x.getQtaOrd()))
.setUntMis(x.getUntMis())
.setOriginalModel(x))
.toList();
}
private void selectAction(ArticoloOrdine articoloOrdine) { private void selectAction(ArticoloOrdine articoloOrdine) {
mBinding.closeActivityFab.close(false); mBinding.closeActivityFab.close(false);
BarcodeManager.disable(); BarcodeManager.disable();
runOnUiThread(() -> DialogAskAction.make(this, runOnUiThread(() -> {
articoloOrdine.getDescrizione(), DialogAskAction.make(this,
articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(), articoloOrdine.getDescrizione(),
() -> this.addArticolo(articoloOrdine), articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(),
() -> this.deleteArticolo(articoloOrdine)).show()); () -> {
this.onItemDispatched(articoloOrdine);
BarcodeManager.enable();
},
() -> {
this.deleteArticolo(articoloOrdine);
BarcodeManager.enable();
}).show();
});
} }
private void deleteArticolo(ArticoloOrdine articoloOrdine) { private void deleteArticolo(ArticoloOrdine articoloOrdine) {
String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?"; String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?";
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> { DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> {
this.openProgress(); this.mViewModel.deleteArticolo(articoloOrdine);
mhelper.removeArticoloFromOrdine(articoloOrdine, () -> { }, () -> {
this.closeProgress();
BarcodeManager.enable();
runOnUiThread(this::fetchArticoli);
}, e -> {
this.closeProgress();
runOnUiThread(() -> UtilityExceptions.defaultException(this, e));
});
}), () -> {
}).show(getSupportFragmentManager(), "tag"); }).show(getSupportFragmentManager(), "tag");
} }
private void handleException(Exception ex) { private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
runOnUiThread(() -> { mBinding.closeActivityFab.close(false);
this.closeProgress(); this.onLoadingStarted();
BarcodeManager.enable();
UtilityExceptions.defaultException(this, ex, false); this.mViewModel.processBarcodeDTO(data, () -> {
this.onLoadingEnded();
});
};
@Override
public void onItemDispatched(ArticoloOrdine articoloOrdine) {
DialogEditArticoloView
.newInstance(articoloOrdine, articolo -> {
runOnUiThread(() -> {
if (articolo != null) {
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
}
this.mViewModel.saveArticolo(articolo);
});
}, () -> {
}).show(this.getSupportFragmentManager(), "tag");
}
public void exportOrdine() {
this.mViewModel.exportOrdine(() -> {
runOnUiThread(() -> {
Toast.makeText(this, "Ordine salvato con successo", Toast.LENGTH_SHORT).show();
close();
});
}); });
} }
private void onScanSuccessful(BarcodeScanDTO dto) {
mBinding.closeActivityFab.close(false);
BarcodeManager.disable();
this.openProgress();
mhelper.checkArticolo(
mOrdine,
dto.getStringValue(),
articoloOrdine -> {
this.closeProgress();
addArticolo(articoloOrdine);
},
e -> {
this.closeProgress();
handleException(e);
}
);
}
private void addArticolo(ArticoloOrdine articoloOrdine) { public void close() {
runOnUiThread(() -> EditArticoloDialog.newInstance(this, mhelper, articoloOrdine, articolo -> {
BarcodeManager.enable();
if (articolo != null) {
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
}
fetchArticoli();
}).show(this.getSupportFragmentManager(), "tag"));
}
private void fetchDetails() {
fetchGriglia();
fetchArticoli();
}
private void orderNewProducts() {
this.openProgress();
mhelper.getNewArticoli(mOrdine.getIdGriglia(), articoli -> {
if (articoli != null && !articoli.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
Stream.of(articoli).forEach(articolo -> {
if (
Stream.of(mArticoli).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty()
&& Stream.of(articoliToSave).filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirst().isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mOrdine);
dto.setQtaOrd(dto.getQtaCnf());
articoliToSave.add(dto);
}
});
if (!articoliToSave.isEmpty()) {
mhelper.saveArticoliToOrdine(articoliToSave, this::fetchArticoli, this::handleException);
} else {
this.closeProgress();
}
} else {
this.closeProgress();
}
}, this::handleException);
}
private void fetchGriglia() {
mhelper.loadGriglia(mOrdine.getIdGriglia(), griglia -> {
runOnUiThread(() -> {
mGriglia = griglia;
mBinding.codAlis.setText(mGriglia.getCodAlis());
});
}, this::handleException);
}
private void fetchArticoli() {
this.openProgress();
mhelper.loadArticoli(mOrdine, articoli -> {
this.closeProgress();
mArticoli = articoli;
runOnUiThread(() -> {
mAdapter.updateItems(mArticoli);
mBinding.countArtOrd.setText(String.valueOf(mArticoli.size()));
mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.INVISIBLE : View.GONE);
mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(mArticoli.size() > 0 ? View.GONE : View.VISIBLE);
if (mArticoli.isEmpty() && isOrderNewProdsForced()) {
orderNewProducts();
}
});
}, this::handleException);
}
public void closeEdit() {
onBackPressed(); onBackPressed();
} }
public void exportOrdine() {
this.openProgress();
PVOrdiniAcquistoRESTConsumer.saveOrdine(mOrdine, mArticoli, mGriglia, (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.closeProgress();
runOnUiThread(() -> {
Toast.makeText(this, "Ordine salvato con successo", Toast.LENGTH_SHORT).show();
onBackPressed();
});
}, e -> runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(this, e);
}));
}, e -> runOnUiThread(() -> {
this.closeProgress();
UtilityExceptions.defaultException(this, e);
}));
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed(); super.onBackPressed();
} }
public void manualSearch() { public void manualSearch() {
BarcodeManager.disable(); BarcodeManager.disable();
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", codice -> { DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", codice -> {
this.openProgress(); this.onLoadingStarted();
mhelper.checkArticolo( this.mViewModel.loadArticolo(codice,
mOrdine, () -> {
codice, this.onLoadingEnded();
articoloOrdine -> { BarcodeManager.enable();
this.closeProgress();
addArticolo(articoloOrdine);
},
e -> {
this.closeProgress();
handleException(e);
} }
); );
}, BarcodeManager::enable).show(); }, BarcodeManager::enable).show();
@@ -309,4 +259,5 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
private boolean isOrderNewProdsForced() { private boolean isOrderNewProdsForced() {
return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia(); return SettingsManager.iDB().getFlagOrdinaNuoviArticoliInGriglia();
} }
} }

View File

@@ -1,7 +1,34 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit; package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit;
import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
@Module(subcomponents = PVOrdineAcquistoEditComponent.class) @Module(subcomponents = PVOrdineAcquistoEditComponent.class)
public class PVOrdineAcquistoEditModule { public class PVOrdineAcquistoEditModule {
@Provides
@Singleton
PVOrdiniAcquistoRESTConsumer providesPVOrdiniAcquistoRESTConsumer() {
return new PVOrdiniAcquistoRESTConsumer();
}
@Provides
@Singleton
PVOrdineAcquistoEditViewModel providesPvOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
GrigliaRepository grigliaRepository,
ArticoliOrdineRepository articoliOrdineRepository,
ArticoloGrigliaRepository articoloGrigliaRepository,
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer) {
return new PVOrdineAcquistoEditViewModel(ordineRepository, grigliaRepository, articoliOrdineRepository, articoloGrigliaRepository, pvOrdiniAcquistoRESTConsumer);
}
} }

View File

@@ -0,0 +1,262 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import java.util.ArrayList;
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.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
public class PVOrdineAcquistoEditViewModel {
@Inject
OrdineRepository mOrdineRepository;
@Inject
GrigliaRepository mGrigliaRepository;
@Inject
ArticoliOrdineRepository mArticoliOrdineRepository;
@Inject
ArticoloGrigliaRepository mArticoloGrigliaRepository;
@Inject
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
private Ordine mCurrentOrdine;
private Listener mListener;
private final MutableLiveData<Griglia> mCurrentGriglia = new MutableLiveData<>();
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
public PVOrdineAcquistoEditViewModel(OrdineRepository ordineRepository,
GrigliaRepository grigliaRepository,
ArticoliOrdineRepository articoliOrdineRepository,
ArticoloGrigliaRepository articoloGrigliaRepository,
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer) {
this.mOrdineRepository = ordineRepository;
this.mGrigliaRepository = grigliaRepository;
this.mArticoliOrdineRepository = articoliOrdineRepository;
this.mArticoloGrigliaRepository = articoloGrigliaRepository;
this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
}
public void init(Ordine ordine) {
this.mCurrentOrdine = ordine;
this.sendOnLoadingStarted();
this.loadGriglia(ordine.getIdGriglia(), griglia -> {
mCurrentGriglia.postValue(griglia);
this.loadArticoli(mCurrentOrdine, articoli -> {
this.mArticoli.postValue(articoli);
this.sendOnLoadingEnded();
});
});
}
public MutableLiveData<Griglia> getCurrentGriglia() {
return mCurrentGriglia;
}
public MutableLiveData<List<ArticoloOrdine>> getArticoli() {
return mArticoli;
}
public void saveArticolo(ArticoloOrdine articolo) {
var newList = this.mArticoli.getValue();
var alreadySavedItem = Stream.of(newList)
.filter(x -> Objects.equals(x.getArticoloOrdineId(), articolo.getArticoloOrdineId()))
.findFirst();
if(alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get());
newList.add(articolo);
this.mArticoli.postValue(newList);
}
public void loadArticolo(String barcode, Runnable onSuccess) {
try {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, barcode, (articolo) -> {
if (articolo != null) {
onSuccess.run();
this.sendOnItemDispatched(articolo);
} else {
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, mCurrentOrdine.getIdGriglia(), artGrid -> {
if (artGrid != null) {
onSuccess.run();
this.sendOnItemDispatched(artGrid.convertToArticoloOrdine(mCurrentOrdine));
} else {
this.sendError(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
}
}, this::sendError);
}
}, this::sendError);
} catch (Exception e) {
this.sendError(e);
}
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.checkArticolo(
mCurrentOrdine,
barcodeScanDTO.getStringValue(),
articoloOrdine -> {
this.sendOnItemDispatched(articoloOrdine);
onComplete.run();
},
this::sendError
);
}
private void loadGriglia(int idGriglia, RunnableArgs<Griglia> onLoad) {
try {
mGrigliaRepository.findGrigliaById(idGriglia, onLoad, this::sendError);
} catch (Exception e) {
this.sendError(e);
}
}
private void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad) {
try {
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError);
} catch (Exception e) {
this.sendError(e);
}
}
private void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) {
try {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> {
if (articolo != null) {
onSuccess.run(articolo);
} else {
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> {
if (artGrid != null) {
onSuccess.run(artGrid.convertToArticoloOrdine(ordine));
} else {
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
}
}, onFail);
}
}, onFail);
} catch (Exception e) {
onFail.run(e);
}
}
private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
}
public void orderNewProducts() {
this.sendOnLoadingStarted();
this.getNewArticoli(mCurrentOrdine.getIdGriglia(), articoli -> {
if (articoli != null && !articoli.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
Stream.of(articoli).forEach(articolo -> {
if (
Stream.of(mArticoli.getValue())
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
&& Stream.of(articoliToSave)
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
dto.setQtaOrd(dto.getQtaCnf());
articoliToSave.add(dto);
}
});
if (!articoliToSave.isEmpty()) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoliToSave, () -> {
Stream.of(articoliToSave).forEach(this::saveArticolo);
this.sendOnLoadingEnded();
}, this::sendError);
} else this.sendOnLoadingEnded();
} else this.sendOnLoadingEnded();
}, this::sendError);
}
public void deleteArticolo(ArticoloOrdine articoloOrdine) {
mArticoliOrdineRepository.deleteArticolo(articoloOrdine, () -> {
this.mArticoli.getValue().remove(articoloOrdine);
this.mArticoli.postValue(this.mArticoli.getValue());
}, this::sendError);
}
public void exportOrdine(Runnable onComplete) {
this.sendOnLoadingStarted();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), mCurrentGriglia.getValue(), (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();
onComplete.run();
}, this::sendError);
}, this::sendError);
}
private void sendOnItemDispatched(ArticoloOrdine articoloOrdine) {
if (this.mListener != null) mListener.onItemDispatched(articoloOrdine);
}
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);
}
public interface Listener extends ILoadingListener {
void onItemDispatched(ArticoloOrdine articoloOrdine);
void onError(Exception ex);
}
public PVOrdineAcquistoEditViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
import dagger.Subcomponent;
@Subcomponent
public interface DialogEditArticoloComponent {
@Subcomponent.Factory
interface Factory {
DialogEditArticoloComponent create();
}
void inject(DialogEditArticoloView dialogEditArticoloView);
}

View File

@@ -0,0 +1,16 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
@Module(subcomponents = DialogEditArticoloComponent.class)
public class DialogEditArticoloModule {
@Provides
DialogEditArticoloViewModel providesDialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
return new DialogEditArticoloViewModel(articoliOrdineRepository);
}
}

View File

@@ -0,0 +1,180 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.fragment.app.DialogFragment;
import java.math.BigDecimal;
import java.math.RoundingMode;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
public class DialogEditArticoloView extends BaseDialogFragment implements DialogEditArticoloViewModel.Listener {
@Inject
DialogEditArticoloViewModel mViewModel;
private final ArticoloOrdine mArticolo;
private final RunnableArgs<ArticoloOrdine> mOnComplete;
private final Runnable mOnAbort;
public ObservableField<BigDecimal> currentNumCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>();
private DialogPvEditArticoloBinding mBindings;
private boolean mEnableDataCallback = true;
public static DialogEditArticoloView newInstance(ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onComplete, Runnable onAbort) {
return new DialogEditArticoloView(articolo, onComplete, onAbort);
}
private DialogEditArticoloView(ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onComplete, Runnable onAbort) {
super();
this.mArticolo = articolo;
this.mOnComplete = onComplete;
this.mOnAbort = onAbort;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, container, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogEditArticoloComponent()
.create()
.inject(this);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
mBindings.toolbar.setTitle("Inserimento articolo");
mBindings.inputQtaOrd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
this.mViewModel
.setListener(this)
.setCurrentArticolo(this.mArticolo)
.setInitialQtaCnf(BigDecimal.valueOf(mArticolo.getQtaCnf()))
.setInitialNumCnf(UtilityBigDecimal.divide(BigDecimal.valueOf(mArticolo.getQtaOrd()), BigDecimal.valueOf(mArticolo.getQtaCnf())).setScale(0, RoundingMode.CEILING))
.setInitialQtaTot(BigDecimal.valueOf(mArticolo.getQtaOrd()));
mBindings.setView(this);
this.onDataChanged();
this.initBindings();
return mBindings.getRoot();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
}
@Override
public void onStart() {
super.onStart();
this.mViewModel.setListener(this);
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
this.mOnAbort.run();
super.onDismiss(dialog);
}
private void initBindings() {
UtilityObservable.addPropertyChanged(this.currentNumCnf, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setNumCnf(value);
}
});
UtilityObservable.addPropertyChanged(this.currentQtaCnf, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setQtaCnf(value);
}
});
UtilityObservable.addPropertyChanged(this.currentQtaTot, (value) -> {
if (this.mEnableDataCallback) {
this.mViewModel.setQtaTot(value);
}
});
mBindings.inputQtaOrd.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
mBindings.inputNumCnfText.requestFocus();
return true;
}
return false;
});
mBindings.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
saveAndExit();
return true;
}
return false;
});
}
public ArticoloOrdine getArticolo() {
return mArticolo;
}
@Override
public void onDataChanged() {
this.mEnableDataCallback = false;
this.currentNumCnf.set(this.mViewModel.getNumCnf());
this.currentQtaCnf.set(this.mViewModel.getQtaCnf());
this.currentQtaTot.set(this.mViewModel.getQtaTot());
this.mBindings.executePendingBindings();
this.mEnableDataCallback = true;
}
public void saveAndExit() {
this.onLoadingStarted();
this.mViewModel.save(newArticolo -> {
this.mOnComplete.run(newArticolo);
this.onLoadingEnded();
dismiss();
});
}
}

View File

@@ -0,0 +1,122 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
import java.math.BigDecimal;
import java.math.RoundingMode;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
public class DialogEditArticoloViewModel {
ArticoliOrdineRepository mArticoliOrdineRepository;
private Listener mListener;
private ArticoloOrdine mCurrentArticolo;
private BigDecimal internalNumCnf;
private BigDecimal internalQtaCnf;
private BigDecimal internalQtaTot;
@Inject
public DialogEditArticoloViewModel(ArticoliOrdineRepository articoliOrdineRepository) {
this.mArticoliOrdineRepository = articoliOrdineRepository;
}
public DialogEditArticoloViewModel setCurrentArticolo(ArticoloOrdine currentArticolo) {
this.mCurrentArticolo = currentArticolo;
return this;
}
public DialogEditArticoloViewModel setInitialNumCnf(BigDecimal numCnf) {
this.internalNumCnf = numCnf;
return this;
}
public DialogEditArticoloViewModel setInitialQtaCnf(BigDecimal qtaCnf) {
this.internalQtaCnf = qtaCnf;
return this;
}
public DialogEditArticoloViewModel setInitialQtaTot(BigDecimal qtaTot) {
this.internalQtaTot = qtaTot;
return this;
}
public void setNumCnf(BigDecimal newValue) {
this.internalNumCnf = newValue;
if (newValue == null) return;
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, internalQtaCnf)
.setScale(2, RoundingMode.CEILING);
this.mListener.onDataChanged();
}
public void setQtaCnf(BigDecimal newValue) {
this.internalQtaCnf = newValue;
if (newValue == null) return;
this.mListener.onDataChanged();
}
public void setQtaTot(BigDecimal newValue) {
this.internalQtaTot = newValue;
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf)
.setScale(0, RoundingMode.CEILING);
this.mListener.onDataChanged();
}
public BigDecimal getNumCnf() {
return this.internalNumCnf;
}
public BigDecimal getQtaCnf() {
return this.internalQtaCnf;
}
public BigDecimal getQtaTot() {
return this.internalQtaTot;
}
public interface Listener {
void onDataChanged();
void onError(Exception ex);
}
public Listener getListener() {
return mListener;
}
public DialogEditArticoloViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
public void save(RunnableArgs<ArticoloOrdine> onComplete) {
if(UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO)) {
this.mListener.onError(new Exception("La quantità ordinata deve essere maggiore di 0"));
return;
}
this.mCurrentArticolo.setQtaOrd(this.internalQtaTot.floatValue());
try {
mArticoliOrdineRepository.saveArticoloToOrdine(this.mCurrentArticolo, () -> {
onComplete.run(this.mCurrentArticolo);
}, this.mListener::onError);
} catch (Exception ex) {
this.mListener.onError(ex);
}
}
}

View File

@@ -1,179 +0,0 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog;
import android.app.Activity;
import android.content.DialogInterface;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.MutableLiveData;
import java.math.BigDecimal;
import java.math.RoundingMode;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.di.BindableBigDecimal;
import it.integry.integrywmsnative.core.di.BindableInteger;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper;
public class EditArticoloDialog extends BaseDialogFragment {
private final Activity mContext;
private DialogPvEditArticoloBinding mBinding;
private final PVEditOrderHelper mHelper;
private final MutableLiveData<ArticoloOrdine> mArticolo = new MutableLiveData<>();
private final RunnableArgs<ArticoloOrdine> onDialogDismiss;
private boolean mLockedInput = false;
public final BindableBigDecimal qtaOrd = new BindableBigDecimal(BigDecimal.ZERO);
public final BindableInteger numCnf = new BindableInteger(0);
public final BindableBigDecimal qtaCnf = new BindableBigDecimal(BigDecimal.ZERO);
public static EditArticoloDialog newInstance(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onDialogDismiss) {
return new EditArticoloDialog(context, helper, articolo, onDialogDismiss);
}
private EditArticoloDialog(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onDialogDismiss) {
mContext = context;
mArticolo.setValue(articolo);
mHelper = helper;
qtaOrd.set(BigDecimal.valueOf(articolo.getQtaOrd()));
numCnf.set(BigDecimal.valueOf(articolo.getQtaOrd()).divide(BigDecimal.valueOf(articolo.getQtaCnf()), 0, RoundingMode.CEILING).intValue());
qtaCnf.set(BigDecimal.valueOf(articolo.getQtaCnf()));
this.onDialogDismiss = onDialogDismiss;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
super.onDismiss(dialog);
ArticoloOrdine articolo = mArticolo.getValue();
if (articolo != null && articolo.getQtaOrd() <= 0f) {
articolo = null;
}
onDialogDismiss.run(articolo);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, null, false);
mBinding.setView(this);
mBinding.toolbar.setTitle("Inserimento articolo");
mBinding.inputQtaOrd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
initBindings();
return mBinding.getRoot();
}
@Override
public void onStart() {
super.onStart();
}
private void initBindings() {
BindableBigDecimal.registerListener(qtaOrd, qta -> {
if (!mLockedInput) {
mLockedInput = true;
ArticoloOrdine articoloOrdine = mArticolo.getValue();
BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf());
int cnf = 0;
if (qtaOrd.get() != null && qtaOrd.get().compareTo(BigDecimal.ZERO) > 0) {
cnf = qtaOrd.get().divide(qtaCnf, 0, RoundingMode.CEILING).intValue();
}
this.numCnf.set(cnf);
this.mBinding.executePendingBindings();
mLockedInput = false;
}
});
BindableInteger.registerListener(numCnf, qta -> {
if (!mLockedInput) {
mLockedInput = true;
ArticoloOrdine articoloOrdine = mArticolo.getValue();
BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf());
this.qtaOrd.set(BigDecimal.valueOf(numCnf.get() * qtaCnf.floatValue()).setScale(2, RoundingMode.CEILING));
this.mBinding.executePendingBindings();
mLockedInput = false;
}
});
mBinding.inputQtaOrd.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// saveAndExit();
mBinding.inputNumCnfText.requestFocus();
return true;
}
return false;
});
mBinding.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
saveAndExit();
return true;
}
return false;
});
}
public void saveAndExit() {
this.onLoadingStarted();
try {
ArticoloOrdine articolo = mArticolo.getValue();
if (articolo == null) {
throw new Exception("Articolo non valido");
}
if (qtaOrd.get().compareTo(BigDecimal.ZERO) <= 0) {
throw new Exception("La quantità ordinata deve essere maggiore di 0");
}
articolo.setQtaOrd(qtaOrd.get().floatValue());
mArticolo.postValue(articolo);
} catch (Exception e) {
mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e));
this.onLoadingEnded();
return;
}
mHelper.saveArticoloToOrdine(mArticolo.getValue(), () -> {
this.onLoadingEnded();
this.dismiss();
}, e -> mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e)));
}
public ArticoloOrdine getArticolo() {
return mArticolo.getValue();
}
public void cancel() {
mArticolo.postValue(null);
this.dismiss();
}
}

View File

@@ -4,7 +4,6 @@ import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
@@ -43,26 +42,6 @@ public class PVEditOrderHelper {
} }
} }
public void loadGriglia(int idGriglia, RunnableArgs<Griglia> onLoad, RunnableArgs<Exception> onError) {
try {
mGrigliaRepository.findGrigliaById(idGriglia, onLoad, onError);
} catch (Exception e) {
onError.run(e);
}
}
public void loadArticoli(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onLoad, RunnableArgs<Exception> onError) {
try {
mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, onError);
} catch (Exception e) {
onError.run(e);
}
}
public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onFail) {
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, onSave, onFail);
}
public void saveArticoliToOrdine(List<ArticoloOrdine> articoli, Runnable onSave, RunnableArgs<Exception> onFail) { public void saveArticoliToOrdine(List<ArticoloOrdine> articoli, Runnable onSave, RunnableArgs<Exception> onFail) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail); mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail);

View File

@@ -5,17 +5,19 @@ import android.view.LayoutInflater;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding; import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding;
import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListHeaderBinding; import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListHeaderBinding;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
@@ -23,9 +25,10 @@ import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<OrdineAcquistoArtListAdapter.SubheaderHolder, OrdineAcquistoArtListAdapter.SingleItemViewHolder> implements SectionTitleProvider { public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<OrdineAcquistoArtListAdapter.SubheaderHolder, OrdineAcquistoArtListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
private Context mContext; private final Context mContext;
private final List<OrdineAcquistoArtListModel> mDataset = new ArrayList<>();
private List<ArticoloOrdine> mDataset;
RunnableArgs<ArticoloOrdine> mOnItemSelect; RunnableArgs<ArticoloOrdine> mOnItemSelect;
@@ -51,28 +54,26 @@ public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<O
} }
public OrdineAcquistoArtListAdapter(Context context, List<ArticoloOrdine> myDataset, RunnableArgs<ArticoloOrdine> onItemSelect) { public OrdineAcquistoArtListAdapter(Context context, ObservableArrayList<OrdineAcquistoArtListModel> myDataset) {
mContext = context; mContext = context;
mDataset = orderItems(myDataset);
mOnItemSelect = onItemSelect; myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
}
});
} }
public void updateItems(List<ArticoloOrdine> updatedDataset) { public OrdineAcquistoArtListAdapter setOnItemClicked(RunnableArgs<ArticoloOrdine> onItemSelect) {
mDataset.clear(); this.mOnItemSelect = onItemSelect;
mDataset.addAll(orderItems(updatedDataset)); return this;
notifyDataSetChanged();
notifyDataChanged();
} }
private List<ArticoloOrdine> orderItems(List<ArticoloOrdine> dataset) {
return Stream.of(dataset)
.distinctBy(ArticoloOrdine::getArticoloOrdineId)
.sortBy(x -> UtilityDate.formatDate(x.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH))
.toList();
}
@Override @Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
@@ -94,7 +95,7 @@ public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter<O
@Override @Override
public void onBindItemViewHolder(OrdineAcquistoArtListAdapter.SingleItemViewHolder h, int itemPosition) { public void onBindItemViewHolder(OrdineAcquistoArtListAdapter.SingleItemViewHolder h, int itemPosition) {
final ArticoloOrdine articoloOrdine = mDataset.get(itemPosition); final ArticoloOrdine articoloOrdine = mDataset.get(itemPosition).getOriginalModel();
final OrdineAcquistoArtListAdapter.SingleItemViewHolder holder = h; final OrdineAcquistoArtListAdapter.SingleItemViewHolder holder = h;
holder.binding.setArticolo(articoloOrdine); holder.binding.setArticolo(articoloOrdine);

View File

@@ -0,0 +1,60 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
public class OrdineAcquistoArtListModel {
private String badge1;
private String description;
private BigDecimal quantity;
private String untMis;
private ArticoloOrdine originalModel;
public String getBadge1() {
return badge1;
}
public OrdineAcquistoArtListModel setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getDescription() {
return description;
}
public OrdineAcquistoArtListModel setDescription(String description) {
this.description = description;
return this;
}
public BigDecimal getQuantity() {
return quantity;
}
public OrdineAcquistoArtListModel setQuantity(BigDecimal quantity) {
this.quantity = quantity;
return this;
}
public String getUntMis() {
return untMis;
}
public OrdineAcquistoArtListModel setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public ArticoloOrdine getOriginalModel() {
return originalModel;
}
public OrdineAcquistoArtListModel setOriginalModel(ArticoloOrdine originalModel) {
this.originalModel = originalModel;
return this;
}
}

View File

@@ -66,7 +66,7 @@ public class DialogScanLisA {
private void initBarcode() { private void initBarcode() {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
mDialog.setBarcodeListener(true); mDialog.setBarcodeListener(true);

View File

@@ -41,7 +41,7 @@ public class OrdineAcquistoPvHelper {
} }
public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFail) { public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFail) {
PVOrdiniAcquistoRESTConsumer.getArticoliListino(griglia.getCodAlis(), dto -> { PVOrdiniAcquistoRESTConsumer.getArticoliListinoStatic(griglia.getCodAlis(), dto -> {
mContext.runOnUiThread(() -> { mContext.runOnUiThread(() -> {
if (dto.getGrigliaAcquistiChild().size() <= 0) { if (dto.getGrigliaAcquistiChild().size() <= 0) {
onFail.run(new Exception("La griglia selezionata (" + griglia.getCodAlis() + ") non esiste o non presenta articoli")); onFail.run(new Exception("La griglia selezionata (" + griglia.getCodAlis() + ") non esiste o non presenta articoli"));

View File

@@ -73,6 +73,9 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
@Inject @Inject
RettificaGiacenzeViewModel mViewModel; RettificaGiacenzeViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
public BindableBoolean thereIsAnOpenedUL = new BindableBoolean(false); public BindableBoolean thereIsAnOpenedUL = new BindableBoolean(false);
public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean(false); public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean(false);
@@ -141,7 +144,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
} }
@@ -320,7 +323,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
thereIsAnOpenedUL.set(false); thereIsAnOpenedUL.set(false);
if(getActivity() != null) ((IPoppableActivity) getActivity()).pop(); if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();
} }
@Override @Override
@@ -331,7 +334,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
() -> onComplete.run(true), () -> onComplete.run(true),
() -> onComplete.run(false) () -> onComplete.run(false)
) )
.show(getActivity().getSupportFragmentManager(), "tag"); .show(getActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
@@ -378,8 +381,9 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
.setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setCanLUBeClosed(canLUBeClosed); .setCanLUBeClosed(canLUBeClosed);
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -389,15 +393,16 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
this.openProgress(); this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> { })
.setOnAbort(() -> {
this.closeProgress(); this.closeProgress();
}) })
.show(getActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
public void onRowSaved() { public void onRowSaved() {
FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); FBToast.successToast(requireActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
} }
@@ -450,7 +455,8 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
null, null,
() -> onComplete.run(true), () -> onComplete.run(true),
() -> onComplete.run(false)) () -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");; .show(getActivity().getSupportFragmentManager(), "tag");
;
} }
@Override @Override
@@ -461,7 +467,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
null, null,
R.string.button_ignore_print, R.string.button_ignore_print,
onComplete) onComplete)
.show(getActivity().getSupportFragmentManager(), "tag"); .show(getActivity().getSupportFragmentManager(), "tag");
} }
@Override @Override
@@ -469,7 +475,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr
DialogYesNo.make(getActivity(), "Posiziona UL", "Vuoi cambiare la posizione della UL corrente?", result -> { DialogYesNo.make(getActivity(), "Posiziona UL", "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) { switch (result) {
case YES: case YES:
DialogAskPositionOfLU.makeBase(getActivity(), false, (status, mtbDepoPosizione) -> { DialogAskPositionOfLU.makeBase(getActivity(), false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) { if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null); onComplete.run(false, null);
} else { } else {

View File

@@ -150,13 +150,14 @@ public class RettificaGiacenzeViewModel {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd;
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (onComplete != null) onComplete.run(); if (onComplete != null) onComplete.run();
if (mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
this.dispatchArt(mtbAartList.get(0), pickData); this.dispatchArt(mtbAartList.get(0), pickData);
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
}, this::sendError); }, this::sendError);

View File

@@ -83,6 +83,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Inject @Inject
SpedizioneViewModel mViewmodel; SpedizioneViewModel mViewmodel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private final ObservableArrayList<SpedizioneListModel> mSpedizioneMutableData = new ObservableArrayList<>(); private final ObservableArrayList<SpedizioneListModel> mSpedizioneMutableData = new ObservableArrayList<>();
@@ -246,7 +249,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
BarcodeManager.enable(); BarcodeManager.enable();
@@ -405,7 +408,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.filter(y -> y.getRefMtbColr() != null && .filter(y -> y.getRefMtbColr() != null &&
y.getRefMtbColr().getId() == mtbColrToDispatch.getId() y.getRefMtbColr().getId() == mtbColrToDispatch.getId()
/* /*
y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) && y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) &&
y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) && y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) &&
@@ -549,7 +552,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs()) BigDecimal qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.filter(y -> y.getRefMtbColr() != null && .filter(y -> y.getRefMtbColr() != null &&
y.getRefMtbColr().getId() == mtbColrToDispatch.getId() /* y.getRefMtbColr().getId() == mtbColrToDispatch.getId() /*
y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) && y.getRefMtbColr().getNumCollo().equals(mtbColrToDispatch.getNumCollo()) &&
y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) && y.getRefMtbColr().getDataColloD().equals(mtbColrToDispatch.getDataColloD()) &&
y.getRefMtbColr().getSerCollo().equals(mtbColrToDispatch.getSerCollo()) && y.getRefMtbColr().getSerCollo().equals(mtbColrToDispatch.getSerCollo()) &&
@@ -821,8 +824,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setCanLUBeClosed(true) .setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged); .setCanPartitaMagBeChanged(canPartitaMagBeChanged);
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf()) .setQtaCnf(resultDTO.getQtaCnf())
@@ -832,7 +836,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.openProgress(); this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> { })
.setOnAbort(() -> {
this.mViewmodel.resetMatchedRows(); this.mViewmodel.resetMatchedRows();
}) })
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");

View File

@@ -626,12 +626,13 @@ public class SpedizioneViewModel {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd;
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if (mtbAartList != null && mtbAartList.size() > 0) { if (mtbAartList != null && mtbAartList.size() > 0) {
this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete); this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete);
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
}, this::sendError); }, this::sendError);
@@ -708,6 +709,7 @@ public class SpedizioneViewModel {
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList) List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
.filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitArtOrdDTO().getCodMart())) .filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitArtOrdDTO().getCodMart()))
.filter(x -> x.getSitArtOrdDTO().isFlagEnableScanArt())
.filter(x -> { .filter(x -> {
MtbPartitaMag mtbPartitaMag = pickData != null && pickData.getManualPickDTO() != null && pickData.getManualPickDTO().getMtbPartitaMag() != null ? pickData.getManualPickDTO().getMtbPartitaMag() : null; MtbPartitaMag mtbPartitaMag = pickData != null && pickData.getManualPickDTO() != null && pickData.getManualPickDTO().getMtbPartitaMag() != null ? pickData.getManualPickDTO().getMtbPartitaMag() : null;
return !mEnableCheckPartitaMag || (mtbPartitaMag != null && UtilityString.equalsIgnoreCase(x.getSitArtOrdDTO().getPartitaMag(), mtbPartitaMag.getPartitaMag())); return !mEnableCheckPartitaMag || (mtbPartitaMag != null && UtilityString.equalsIgnoreCase(x.getSitArtOrdDTO().getPartitaMag(), mtbPartitaMag.getPartitaMag()));
@@ -742,8 +744,8 @@ public class SpedizioneViewModel {
this.getPickingList().postValue(pickingList); this.getPickingList().postValue(pickingList);
} else { } else {
MtbColt refMtbColt = matchedItem.getRefMtbColt(); MtbColt refMtbColt = matchedItem.getRefMtbColt();
MtbColr refMtbColr = refMtbColt != null ? matchedItem.getRefMtbColt().getMtbColr().get(0) : null; MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null;
this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, false); this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null);
} }
} else { } else {

View File

@@ -138,7 +138,7 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable(); BarcodeManager.enable();

View File

@@ -143,7 +143,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable(); BarcodeManager.enable();

View File

@@ -48,6 +48,9 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
@Inject @Inject
VersamentoMerceViewModel mViewModel; VersamentoMerceViewModel mViewModel;
@Inject
DialogInputQuantityV2View mDialogInputQuantityV2View;
private FragmentMainVersamentoMerceBinding mBindings = null; private FragmentMainVersamentoMerceBinding mBindings = null;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>(); private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@@ -120,7 +123,7 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
private void initBarcodeReader() { private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable(); BarcodeManager.enable();
@@ -202,9 +205,10 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
.setCanPartitaMagBeChanged(canBatchLotBeChanged) .setCanPartitaMagBeChanged(canBatchLotBeChanged)
.setCanLUBeClosed(false); .setCanLUBeClosed(false);
this.getActivity().runOnUiThread(() -> { this.requireActivity().runOnUiThread(() -> {
DialogInputQuantityV2View mDialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO)
.setOnComplete((resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
@@ -215,8 +219,9 @@ public class VersamentoMerceFragment extends BaseFragment implements ITitledFrag
onComplete.run(pickedQuantityDTO); onComplete.run(pickedQuantityDTO);
}, this::onLoadingEnded) })
.show(getActivity().getSupportFragmentManager(), "tag"); .setOnAbort(this::onLoadingEnded)
.show(requireActivity().getSupportFragmentManager(), "tag");
}); });
} }

View File

@@ -44,7 +44,7 @@ public class DialogProgressView extends DialogFragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_progress, container, false); mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_progress, container, false);
getDialog().setCanceledOnTouchOutside(false); setCancelable(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mBindings.setTitle(UtilityString.isNullOrEmpty(title) ? requireActivity().getString(R.string.loading) : title); mBindings.setTitle(UtilityString.isNullOrEmpty(title) ? requireActivity().getString(R.string.loading) : title);

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente;
import dagger.Subcomponent;
@Subcomponent
public interface DialogAskClienteComponent {
@Subcomponent.Factory
interface Factory {
DialogAskClienteComponent create();
}
void inject(DialogAskClienteView dialogAskClienteView);
}

View File

@@ -0,0 +1,7 @@
package it.integry.integrywmsnative.view.dialogs.ask_cliente;
import dagger.Module;
@Module(subcomponents = DialogAskClienteComponent.class)
public class DialogAskClienteModule {
}

View File

@@ -14,20 +14,32 @@ import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.lang.reflect.Type;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.VtbDest;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityHashMap;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogAskClienteBinding; import it.integry.integrywmsnative.databinding.DialogAskClienteBinding;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page1ViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel; import it.integry.integrywmsnative.view.dialogs.ask_cliente.viewmodel.DialogAskCliente_Page2ViewModel;
@@ -45,6 +57,12 @@ public class DialogAskClienteView extends BaseDialogFragment {
private boolean mIsClienteSelected = false; private boolean mIsClienteSelected = false;
@Inject
SystemRESTConsumer systemRESTConsumer;
@Inject
DialogProgressView dialogProgressView;
public static DialogAskClienteView newInstance(@NotNull RunnableArgss<VtbDest, String> onComplete, @NotNull Runnable onAbort) { public static DialogAskClienteView newInstance(@NotNull RunnableArgss<VtbDest, String> onComplete, @NotNull Runnable onAbort) {
return new DialogAskClienteView(onComplete, onAbort); return new DialogAskClienteView(onComplete, onAbort);
} }
@@ -69,6 +87,11 @@ public class DialogAskClienteView extends BaseDialogFragment {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
MainApplication.appComponent
.dialogAskClienteComponent()
.create()
.inject(this);
List<Map.Entry<Integer, Class<? extends IDialogAskClienteViewModel>>> views = new ArrayList<>(); List<Map.Entry<Integer, Class<? extends IDialogAskClienteViewModel>>> views = new ArrayList<>();
views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class)); views.add(new AbstractMap.SimpleEntry<>(R.layout.dialog_ask_cliente__page1, DialogAskCliente_Page1ViewModel.class));
@@ -96,21 +119,19 @@ public class DialogAskClienteView extends BaseDialogFragment {
DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page1); DialogAskCliente_Page1ViewModel viewModel1 = (DialogAskCliente_Page1ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page1);
DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page2); DialogAskCliente_Page2ViewModel viewModel2 = (DialogAskCliente_Page2ViewModel) mAdapter.getViewModel(R.layout.dialog_ask_cliente__page2);
viewModel1 viewModel1.setOnConfirmClickListener(() -> {
.setOnConfirmClickListener(() -> { String codAnag = viewModel1.getCurrentCliente();
String codAnag = viewModel1.getCurrentCliente();
if (UtilityString.isNullOrEmpty(codAnag)) { if (UtilityString.isNullOrEmpty(codAnag)) {
this.mIsClienteSelected = true; this.mIsClienteSelected = true;
dismiss(); dismiss();
mOnComplete.run(null, null); mOnComplete.run(null, null);
} }
viewModel2.setCodAnag(codAnag); viewModel2.setCodAnag(codAnag);
mBindings.viewpager.setCurrentItem(mBindings.viewpager.getCurrentItem() + 1, true);
});
mBindings.viewpager.setCurrentItem(mBindings.viewpager.getCurrentItem() + 1, true);
});
viewModel2.setOnConfirmClickListener(() -> { viewModel2.setOnConfirmClickListener(() -> {
DialogAskClienteDestinatarioDTO cliente = viewModel2.getCurrentDestinatario(); DialogAskClienteDestinatarioDTO cliente = viewModel2.getCurrentDestinatario();
@@ -122,9 +143,84 @@ public class DialogAskClienteView extends BaseDialogFragment {
viewModel1.setOnAbortClickListener(this::dismiss); viewModel1.setOnAbortClickListener(this::dismiss);
viewModel2.setOnAbortClickListener(this::dismiss); viewModel2.setOnAbortClickListener(this::dismiss);
this.dialogProgressView.show(this.getParentFragmentManager(), "tag");
this.initClienti(viewModel1, () -> {
this.initDestinatari(viewModel2, () -> {
this.dialogProgressView.dismiss();
}, () -> {
this.dialogProgressView.dismiss();
});
}, () -> {
this.dialogProgressView.dismiss();
});
} }
private void initClienti(DialogAskCliente_Page1ViewModel viewModel, Runnable onComplete, Runnable onAbort) {
Type typeOfObjectsList = new TypeToken<ArrayList<HashMap<String, Object>>>() {
}.getType();
String sqlClienti = "SELECT gtb_anag.cod_anag, rag_soc, jtb_comt.cod_jcom " +
"FROM gtb_anag " +
"LEFT OUTER JOIN jtb_comt ON gtb_anag.cod_anag = jtb_comt.cod_anag " +
"INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag " +
"WHERE vtb_clie.flag_stato = 'A' " +
"ORDER BY rag_soc";
this.systemRESTConsumer.<ArrayList<HashMap<String, Object>>>processSql(sqlClienti, typeOfObjectsList, value -> {
var availableClienti = new ArrayList<DialogAskClienteClienteDTO>();
Stream.of(value)
.groupBy(x -> x.get("codAnag").toString() + " " + x.get("ragSoc").toString())
.forEach(x -> {
DialogAskClienteClienteDTO dialogAskClienteClienteDTO = new DialogAskClienteClienteDTO();
dialogAskClienteClienteDTO.setCodAnag(UtilityHashMap.getValueIfExists(x.getValue().get(0), "codAnag"));
dialogAskClienteClienteDTO.setRagSoc(UtilityHashMap.getValueIfExists(x.getValue().get(0), "ragSoc"));
for (HashMap<String, Object> group : x.getValue()) {
if (group.containsKey("codJcom")) {
dialogAskClienteClienteDTO.getCodJcoms().add(UtilityHashMap.getValueIfExists(group, "codJcom"));
}
}
availableClienti.add(dialogAskClienteClienteDTO);
});
viewModel.setAvailableClienti(availableClienti);
onComplete.run();
}, ex -> {
onAbort.run();
});
}
private void initDestinatari(DialogAskCliente_Page2ViewModel viewModel, Runnable onComplete, Runnable onAbort) {
String sql = "SELECT vtb_dest.cod_anag,\n" +
" cod_vdes,\n" +
" destinatario,\n" +
" indirizzo,\n" +
" cap,\n" +
" citta,\n" +
" prov,\n" +
" nazione\n" +
"FROM vtb_dest\n" +
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = vtb_dest.cod_anag\n" +
"WHERE vtb_clie.flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<DialogAskClienteDestinatarioDTO>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<DialogAskClienteDestinatarioDTO>>processSql(sql, typeOfObjectsList, value -> {
viewModel.setAvailableDestinatari(value);
onComplete.run();
}, ex -> {
onAbort.run();
});
}
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
mAdapter.onDismiss(); mAdapter.onDismiss();

View File

@@ -10,12 +10,9 @@ import androidx.databinding.ViewDataBinding;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import com.tfb.fbtoast.FBToast; import com.tfb.fbtoast.FBToast;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
@@ -24,11 +21,8 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityHashMap;
import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding; import it.integry.integrywmsnative.databinding.DialogAskClientePage1Binding;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteClienteDTO;
@@ -46,7 +40,6 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private Runnable onAbortClickListener; private Runnable onAbortClickListener;
public DialogAskCliente_Page1ViewModel() { public DialogAskCliente_Page1ViewModel() {
} }
@Override @Override
@@ -59,53 +52,18 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
this.mBinding = (DialogAskClientePage1Binding) binding; this.mBinding = (DialogAskClientePage1Binding) binding;
} }
public void setAvailableClienti(ArrayList<DialogAskClienteClienteDTO> availableClienti) {
this.availableClienti = availableClienti;
initializeAdapter(availableClienti);
}
@Override @Override
public void onShow() { public void onShow() {
String sql = "SELECT gtb_anag.cod_anag, rag_soc, jtb_comt.cod_jcom " + mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
"FROM gtb_anag " + .setOnScanSuccessful(onScanSuccessful)
"LEFT OUTER JOIN jtb_comt ON gtb_anag.cod_anag = jtb_comt.cod_anag " + .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
"INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag " + BarcodeManager.enable();
"WHERE vtb_clie.flag_stato = 'A' " +
"ORDER BY rag_soc";
Type typeOfObjectsList = new TypeToken<ArrayList<HashMap<String, Object>>>() { }.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<HashMap<String, Object>>>() {
@Override
public void onSuccess(ArrayList<HashMap<String, Object>> value) {
availableClienti = new ArrayList<>();
Stream.of(value)
.groupBy(x -> x.get("codAnag").toString() + " " + x.get("ragSoc").toString())
.forEach(x -> {
DialogAskClienteClienteDTO dialogAskClienteClienteDTO = new DialogAskClienteClienteDTO();
dialogAskClienteClienteDTO.setCodAnag(UtilityHashMap.getValueIfExists(x.getValue().get(0), "codAnag"));
dialogAskClienteClienteDTO.setRagSoc(UtilityHashMap.getValueIfExists(x.getValue().get(0), "ragSoc"));
for (HashMap<String, Object> group : x.getValue()) {
if (group.containsKey("codJcom")) {
dialogAskClienteClienteDTO.getCodJcoms().add(UtilityHashMap.getValueIfExists(group, "codJcom"));
}
}
availableClienti.add(dialogAskClienteClienteDTO);
});
initializeAdapter(availableClienti);
mBarcodeScannerInstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
BarcodeManager.enable();
}
@Override
public void onFailed(Exception ex) {
}
});
this.mBinding.buttonYes.setOnClickListener(v -> { this.mBinding.buttonYes.setOnClickListener(v -> {
if (validateCliente()) { if (validateCliente()) {
@@ -147,7 +105,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
} else { } else {
DialogAskClienteClienteDTO resultCodJcom = searchBarcodeInCodJcom(barcode); DialogAskClienteClienteDTO resultCodJcom = searchBarcodeInCodJcom(barcode);
if(resultCodJcom != null) { if (resultCodJcom != null) {
mBinding.dropdownCliente.setText(resultCodJcom.toString()); mBinding.dropdownCliente.setText(resultCodJcom.toString());
refreshCodJcoms(resultCodJcom); refreshCodJcoms(resultCodJcom);
mBinding.dropdownCommessa.setText(barcode); mBinding.dropdownCommessa.setText(barcode);
@@ -219,7 +177,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
private boolean validateCliente() { private boolean validateCliente() {
if(SettingsManager.iDB().isFlagAllowEmptyClienteInPickingLibero() && mBinding.inputCliente.getEditText().getText().toString().trim().length() == 0) { if (SettingsManager.iDB().isFlagAllowEmptyClienteInPickingLibero() && mBinding.inputCliente.getEditText().getText().toString().trim().length() == 0) {
return true; return true;
} else return getCurrentCliente() != null; } else return getCurrentCliente() != null;
} }
@@ -229,7 +187,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
.filter(x -> x.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString())) .filter(x -> x.getRagSoc().equalsIgnoreCase(mBinding.inputCliente.getEditText().getText().toString()))
.findFirst(); .findFirst();
if(result.isPresent()) return result.get().getCodAnag(); if (result.isPresent()) return result.get().getCodAnag();
else return null; else return null;
} }
@@ -240,7 +198,7 @@ public class DialogAskCliente_Page1ViewModel implements IDialogAskClienteViewMod
.map(DialogAskClienteClienteDTO::getCodJcoms) .map(DialogAskClienteClienteDTO::getCodJcoms)
.findFirst(); .findFirst();
if(result.isPresent() && Stream.of(result.get()).anyMatch(x -> x.equalsIgnoreCase(mBinding.inputCommessa.getEditText().getText().toString()))) { if (result.isPresent() && Stream.of(result.get()).anyMatch(x -> x.equalsIgnoreCase(mBinding.inputCommessa.getEditText().getText().toString()))) {
return mBinding.inputCommessa.getEditText().getText().toString(); return mBinding.inputCommessa.getEditText().getText().toString();
} else return null; } else return null;
} }

View File

@@ -5,29 +5,24 @@ import android.widget.AutoCompleteTextView;
import androidx.databinding.ViewDataBinding; import androidx.databinding.ViewDataBinding;
import com.google.gson.reflect.TypeToken; import com.annimon.stream.Stream;
import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.DialogAskClientePage2Binding; import it.integry.integrywmsnative.databinding.DialogAskClientePage2Binding;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO; import it.integry.integrywmsnative.view.dialogs.ask_cliente.dto.DialogAskClienteDestinatarioDTO;
public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewModel { public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewModel {
private DialogAskClientePage2Binding mBinding; private DialogAskClientePage2Binding mBinding;
private Context mContext; private Context mContext;
private Runnable mOnConfirm; private Runnable mOnConfirm;
private Runnable mOnAbort; private Runnable mOnAbort;
private List<DialogAskClienteDestinatarioDTO> availableDestinatari; private ArrayList<DialogAskClienteDestinatarioDTO> availableDestinatari;
private String mCodAnag; private String mCodAnag;
@@ -40,6 +35,10 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
this.mBinding = (DialogAskClientePage2Binding) binding; this.mBinding = (DialogAskClientePage2Binding) binding;
} }
public void setAvailableDestinatari(ArrayList<DialogAskClienteDestinatarioDTO> availableDestinatari) {
this.availableDestinatari = availableDestinatari;
}
@Override @Override
public void setContext(Context context) { public void setContext(Context context) {
this.mContext = context; this.mContext = context;
@@ -47,29 +46,18 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
@Override @Override
public void onShow() { public void onShow() {
String sql = "SELECT cod_anag, cod_vdes, destinatario, indirizzo, cap, citta, prov, nazione " + var filteredDestinatari = availableDestinatari != null ? Stream.of(availableDestinatari)
"FROM vtb_dest " + .filter(x -> x.getCodAnag().equalsIgnoreCase(mCodAnag))
"WHERE cod_anag = " + UtilityDB.valueToString(mCodAnag); .toList()
: null;
Type typeOfObjectsList = new TypeToken<ArrayList<DialogAskClienteDestinatarioDTO>>() {
}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DialogAskClienteDestinatarioDTO>>() {
@Override
public void onSuccess(ArrayList<DialogAskClienteDestinatarioDTO> value) {
availableDestinatari = value;
initializeAdapter(value);
if(value == null || value.size() == 0) { if (filteredDestinatari == null || filteredDestinatari.size() == 0) {
mOnConfirm.run(); mOnConfirm.run();
return; return;
} }
}
@Override initializeAdapter(filteredDestinatari);
public void onFailed(Exception ex) {
}
});
this.mBinding.buttonYes.setOnClickListener(v -> { this.mBinding.buttonYes.setOnClickListener(v -> {
@@ -106,7 +94,7 @@ public class DialogAskCliente_Page2ViewModel implements IDialogAskClienteViewMod
} }
private void initializeAdapter(ArrayList<DialogAskClienteDestinatarioDTO> items) { private void initializeAdapter(List<DialogAskClienteDestinatarioDTO> items) {
DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items); DialogAskCliente_Page2_ArrayAdapter adapter = new DialogAskCliente_Page2_ArrayAdapter(mContext, items);

View File

@@ -27,7 +27,7 @@ public class DialogAskCliente_Page2_ArrayAdapter extends ArrayAdapter<DialogAskC
private ListFilter listFilter = new ListFilter(); private ListFilter listFilter = new ListFilter();
public DialogAskCliente_Page2_ArrayAdapter(@NonNull Context context, @NonNull ArrayList<DialogAskClienteDestinatarioDTO> list) { public DialogAskCliente_Page2_ArrayAdapter(@NonNull Context context, @NonNull List<DialogAskClienteDestinatarioDTO> list) {
super(context, 0 , list); super(context, 0 , list);
mContext = context; mContext = context;
mDataset = list; mDataset = list;

View File

@@ -130,7 +130,7 @@ public class DialogAskPositionOfLU {
private void setupBarcode() { private void setupBarcode() {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false)));
mDialog.setOnDismissListener(dialog -> { mDialog.setOnDismissListener(dialog -> {

View File

@@ -242,7 +242,7 @@ public class DialogChooseArtsFromListaArts extends BaseDialogFragment {
BarcodeManager.enable(); BarcodeManager.enable();
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false)));

View File

@@ -23,13 +23,12 @@ import com.google.android.material.textfield.TextInputLayout;
import com.pedromassango.doubleclick.DoubleClick; import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener; import com.pedromassango.doubleclick.DoubleClickListener;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
@@ -47,14 +46,15 @@ import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding; import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@Singleton
public class DialogInputQuantityV2View extends BaseDialogFragment implements DialogInputQuantityV2ViewModel.Listener { public class DialogInputQuantityV2View extends BaseDialogFragment implements DialogInputQuantityV2ViewModel.Listener {
@Inject @Inject
DialogInputQuantityV2ViewModel mViewModel; DialogInputQuantityV2ViewModel mViewModel;
private final DialogInputQuantityV2DTO mDialogInputQuantityV2DTO; private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO;
private final RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> mOnComplete; private RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> mOnComplete;
private final Runnable mOnAbort; private Runnable mOnAbort;
public ObservableField<Integer> currentTextNumCnfToTake = new ObservableField<>(0); public ObservableField<Integer> currentTextNumCnfToTake = new ObservableField<>(0);
public ObservableField<Integer> currentTextNumPezziToTake = new ObservableField<>(0); public ObservableField<Integer> currentTextNumPezziToTake = new ObservableField<>(0);
@@ -86,17 +86,22 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private boolean mEnableDataCallback = true; private boolean mEnableDataCallback = true;
private int mBarcodeScannerIstanceID; private int mBarcodeScannerIstanceID;
private boolean mFirstStart = true;
public static DialogInputQuantityV2View newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, @NotNull RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete, @NotNull Runnable onAbort) {
return new DialogInputQuantityV2View(dialogInputQuantityV2DTO, onComplete, onAbort); public DialogInputQuantityV2View setDialogInputQuantityV2DTO(DialogInputQuantityV2DTO mDialogInputQuantityV2DTO) {
this.mDialogInputQuantityV2DTO = mDialogInputQuantityV2DTO;
return this;
} }
private DialogInputQuantityV2View(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, @NotNull RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete, @NotNull Runnable onAbort) { public DialogInputQuantityV2View setOnComplete(RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> mOnComplete) {
super(); this.mOnComplete = mOnComplete;
return this;
}
this.mDialogInputQuantityV2DTO = dialogInputQuantityV2DTO; public DialogInputQuantityV2View setOnAbort(Runnable mOnAbort) {
this.mOnComplete = onComplete; this.mOnAbort = mOnAbort;
this.mOnAbort = onAbort; return this;
} }
@Override @Override
@@ -165,7 +170,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private void initBarcode() { private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful) .setOnScanSuccessful(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this.context, ex, false))); .setOnScanFailed(ex -> UtilityExceptions.defaultException(this.context, ex, false)));
} }
@@ -203,7 +208,11 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
@Override @Override
public void onStart() { public void onStart() {
super.onStart(); super.onStart();
this.init();
// if(!mFirstStart) {
this.init();
// mFirstStart = false;
// }
int onNumCnfInputChanged = SettingsManager.iDB().getOnNumCnfInputChanged(); int onNumCnfInputChanged = SettingsManager.iDB().getOnNumCnfInputChanged();

View File

@@ -95,7 +95,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA
private void initBarcode() { private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
setBarcodeListener(true); setBarcodeListener(true);

View File

@@ -86,7 +86,7 @@ public class DialogScanArtViewModel {
} }
} else { } else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto //EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(barcodeProd));
} }
}, this::sendError); }, this::sendError);
} }
@@ -124,11 +124,12 @@ public class DialogScanArtViewModel {
barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
} }
String finalBarcodeProd = barcodeProd;
this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
if(mtbAartList != null && mtbAartList.size() > 0) { if(mtbAartList != null && mtbAartList.size() > 0) {
onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null); onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null);
} else { } else {
this.sendError(new NoResultFromBarcodeException()); this.sendError(new NoResultFromBarcodeException(finalBarcodeProd));
} }
}, this::sendError); }, this::sendError);
} }

View File

@@ -126,7 +126,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial
private void initBarcode() { private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull) .setOnScanSuccessful(onScanSuccessfull)
.setOnScanFailed(this::onError)); .setOnScanFailed(this::onError));
setBarcodeListener(true); setBarcodeListener(true);

View File

@@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools" <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"> xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data> <data>
<import type="android.view.View" /> <import type="android.view.View" />
<variable <variable
name="viewModel" name="viewModel"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" /> type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
@@ -18,241 +20,254 @@
android:layout_height="match_parent"> android:layout_height="match_parent">
<LinearLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/full_white" android:background="@color/full_white"
android:orientation="vertical" android:descendantFocusability="blocksDescendants">
android:descendantFocusability="blocksDescendants"
>
<LinearLayout <it.integry.integrywmsnative.ui.ElevatedToolbar
android:id="@+id/elevated_toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:background="@color/full_white" app:layout_constraintTop_toTopOf="parent"
android:orientation="vertical" app:layout_constraintStart_toStartOf="parent"
android:paddingTop="8dp" app:layout_constraintEnd_toEndOf="parent">
tools:context=".gest.contenuto_bancale.ContenutoBancaleActivity">
<it.integry.integrywmsnative.ui.ElevatedToolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/elevated_toolbar" android:id="@+id/toolbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="?actionBarSize">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="modifica ordine"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_gravity="start" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/add_extra_items_toolbar"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:background="@drawable/ripple_effect"
android:adjustViewBounds="true"
android:src="@drawable/ic_search_black_24dp"
android:onClick="@{()->viewModel.manualSearch()}"
android:tint="@color/colorPrimaryGray"/>
</androidx.appcompat.widget.Toolbar>
</it.integry.integrywmsnative.ui.ElevatedToolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/gray_detail_background_round8"
android:orientation="vertical"
android:padding="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ordine: "
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/order_identifier"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="22 ottobre 2018" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Griglia "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_alis"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="italic"
tools:text="4SECCO" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="N. articoli "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/count_art_ord"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="10" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/articoli_ordine_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp"
android:paddingEnd="2dp" />
<LinearLayout
android:id="@+id/scan_art_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="24dp"
android:visibility="visible"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/toolbar_title"
style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="start"
tools:text="modifica ordine" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/add_extra_items_toolbar"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:background="@drawable/ripple_effect"
android:onClick="@{()->viewModel.manualSearch()}"
android:src="@drawable/ic_search_black_24dp"
android:tint="@color/colorPrimaryGray" />
</androidx.appcompat.widget.Toolbar>
</it.integry.integrywmsnative.ui.ElevatedToolbar>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/header_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/gray_detail_background_round8"
android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@id/elevated_toolbar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:padding="16dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ordine:"
android:textColor="@android:color/black"
android:textSize="16sp" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/order_identifier"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@android:color/black"
android:textSize="16sp" android:textSize="16sp"
android:layout_marginStart="8dp" android:textStyle="bold"
android:layout_marginEnd="12dp" tools:text="22 ottobre 2018" />
android:layout_gravity="center_vertical" </androidx.appcompat.widget.LinearLayoutCompat>
android:gravity="center_horizontal"
style="@style/AppTheme.NewMaterial.Text"
android:text="@string/scan_item"/>
</LinearLayout>
</LinearLayout> <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout> <androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Griglia"
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_alis"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:paddingEnd="2dp"
android:textColor="@android:color/black"
android:textStyle="italic"
tools:text="4SAPORIV" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="N. articoli "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/count_art_ord"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="10" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.github.clans.fab.FloatingActionMenu </androidx.appcompat.widget.LinearLayoutCompat>
android:id="@+id/close_activity_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchor="@+id/linearLayout2"
app:layout_anchorGravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu_icon="@drawable/ic_check_white_24dp"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/success_color"
fab:menu_colorPressed="@color/green_400"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton <androidx.recyclerview.widget.RecyclerView
android:id="@+id/pv_ordine_export" android:id="@+id/articoli_ordine_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="92dp"
android:paddingStart="2dp"
android:paddingEnd="2dp"
android:clipToPadding="false"
android:paddingBottom="72dp"
android:scrollbars="vertical"
app:layout_constraintTop_toBottomOf="@id/header_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/scan_art_spinner"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_black_upload" android:layout_gravity="center_horizontal"
android:visibility="gone" android:layout_marginTop="24dp"
app:fab_colorNormal="@color/white" android:orientation="horizontal"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.exportOrdine()}"
fab:fab_label="@string/close_and_export" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check_black_24dp"
android:visibility="visible" android:visibility="visible"
app:fab_colorNormal="@color/white" app:layout_constraintTop_toBottomOf="@id/header_content"
app:fab_colorPressed="@color/white_pressed" app:layout_constraintStart_toStartOf="parent"
app:fab_colorRipple="#66FFFFFF" app:layout_constraintEnd_toEndOf="parent">
app:onClick="@{() -> viewModel.closeEdit()}"
fab:fab_label="@string/close_and_exit" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="12dp"
android:gravity="center_horizontal"
android:text="@string/scan_item"
android:textSize="16sp" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/close_activity_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
app:layout_anchorGravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu_icon="@drawable/ic_check_white_24dp"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/success_color"
fab:menu_colorPressed="@color/green_400"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_export"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_black_upload"
android:visibility="gone"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.exportOrdine()}"
fab:fab_label="@string/close_and_export" />
<com.github.clans.fab.FloatingActionButton
android:id="@+id/pv_ordine_close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_check_black_24dp"
android:visibility="visible"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewModel.close()}"
fab:fab_label="@string/close_and_exit" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout> </layout>

View File

@@ -46,6 +46,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/recipient" android:hint="@string/recipient"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/description_text"> app:layout_constraintTop_toBottomOf="@id/description_text">

View File

@@ -12,7 +12,7 @@
<variable <variable
name="view" name="view"
type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog" /> type="it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView" />
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@@ -552,7 +552,7 @@
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:inputType="number" android:inputType="number"
app:binding="@{view.numCnf}" /> app:binding="@{view.currentNumCnf}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -575,7 +575,7 @@
android:hint="@string/qty_x_pck" android:hint="@string/qty_x_pck"
android:imeOptions="actionDone" android:imeOptions="actionDone"
android:inputType="numberDecimal" android:inputType="numberDecimal"
app:binding="@{view.qtaCnf}" /> app:binding="@{view.currentQtaCnf}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -597,7 +597,7 @@
android:hint="@string/tot_qty" android:hint="@string/tot_qty"
android:inputType="number" android:inputType="number"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
app:binding="@{view.qtaOrd}" /> app:binding="@{view.currentQtaTot}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
@@ -621,7 +621,7 @@
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:layout_marginEnd="4dp" android:layout_marginEnd="4dp"
android:layout_weight="1" android:layout_weight="1"
android:onClick="@{() -> view.cancel()}" android:onClick="@{() -> view.dismiss()}"
app:icon="@drawable/ic_close_24dp" app:icon="@drawable/ic_close_24dp"
app:iconGravity="textStart" app:iconGravity="textStart"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />

View File

@@ -10,7 +10,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:7.1.1' classpath 'com.android.tools.build:gradle:7.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.10' classpath 'com.google.gms:google-services:4.3.10'