diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/NoPrintersFoundException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoPrintersFoundException.java index c7dbc19e..f1ad0975 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/exception/NoPrintersFoundException.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoPrintersFoundException.java @@ -5,6 +5,6 @@ import it.integry.integrywmsnative.core.utility.UtilityResources; public class NoPrintersFoundException extends Exception { public NoPrintersFoundException() { - super(UtilityResources.getString(R.string.exception_printer_not_found)); + super(UtilityResources.getString(R.string.exception_no_printer_found)); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java index c03cbf1f..7362e3a0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java @@ -4,6 +4,7 @@ import android.util.Log; import com.annimon.stream.Stream; +import java.util.HashMap; import java.util.List; import javax.inject.Singleton; @@ -11,6 +12,8 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.JasperDTO; +import it.integry.integrywmsnative.core.rest.model.JasperPairDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColt; @@ -89,7 +92,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { printerService.getAvailablePrinters(codMdep, printerTypeStr).enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { - analyzeAnswer(response, "GetAvailablePrinters", onComplete, onFailed); + analyzeAnswer(response, "GetAvailablePrinters", printerList -> { + printerList = Stream.of(printerList).filter(x -> !UtilityString.isNullOrEmpty(x)).toList(); + onComplete.run(printerList); + }, onFailed); } @Override @@ -130,7 +136,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { .enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - analyzeAnswer(response, "PrintCollo", data -> { + analyzeAnswer(response, "printCollo", data -> { onComplete.run(); }, onFailed); } @@ -142,7 +148,38 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { } else onFailed.run(new Exception(t)); } }); + } + public void printReport(String printerName, String reportName, HashMap params, int quantity, Runnable onComplete, RunnableArgs onFailed) { +// if(BuildConfig.DEBUG) { +// onComplete.run(); +// return; +// } + + JasperDTO jasperDTO = new JasperDTO(); + jasperDTO.setReportName(reportName); + + Stream.of(params) + .forEach(x -> jasperDTO.getParams().add(new JasperPairDTO(x.getKey(), x.getValue()))); + + PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); + printerService + .processPrintReport(printerName, quantity, jasperDTO) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "printReport", data -> { + onComplete.run(); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + if(t.getMessage().contains("Printer not found")) { + onFailed.run(new NoPrintersFoundException()); + } else onFailed.run(new Exception(t)); + } + }); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java index e9067533..f7720d9e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java @@ -2,8 +2,10 @@ package it.integry.integrywmsnative.core.rest.consumers; import java.util.List; +import it.integry.integrywmsnative.core.rest.model.JasperDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import retrofit2.Call; +import retrofit2.http.Body; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.POST; @@ -34,4 +36,11 @@ public interface PrinterRESTConsumerService { ); + @POST("processPrintReport") + Call> processPrintReport( + @Query("printerName") String printerName, + @Query("numberOfCopies") int printQuantity, + @Body JasperDTO jasperDTO + ); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperDTO.java new file mode 100644 index 00000000..0107a5a3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperDTO.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.core.rest.model; + +import java.util.ArrayList; +import java.util.List; + +public class JasperDTO { + + private String reportName; + private List params = new ArrayList<>(); + + public String getReportName() { + return reportName; + } + + public JasperDTO setReportName(String reportName) { + this.reportName = reportName; + return this; + } + + public List getParams() { + return params; + } + + public JasperDTO setParams(List params) { + this.params = params; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperPairDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperPairDTO.java new file mode 100644 index 00000000..d7a95e4d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/JasperPairDTO.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.core.rest.model; + +public class JasperPairDTO { + + private String name; + private Object value; + + public JasperPairDTO(String name, Object value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public JasperPairDTO setName(String name) { + this.name = name; + return this; + } + + public Object getValue() { + return value; + } + + public JasperPairDTO setValue(Object value) { + this.value = value; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 0452c404..fbdde229 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -33,6 +33,7 @@ public class DBSettingsModel { private boolean flagSpedizioneEnableManualPick; private boolean flagSpedizioneCanSelectMultipleOrders; private String produzioneDefaultCodAnag; + private String reportNameSpedizionChiudiOrdine; public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; @@ -231,4 +232,13 @@ public class DBSettingsModel { this.produzioneDefaultCodAnag = produzioneDefaultCodAnag; return this; } + + public String getReportNameSpedizionChiudiOrdine() { + return reportNameSpedizionChiudiOrdine; + } + + public DBSettingsModel setReportNameSpedizionChiudiOrdine(String reportNameSpedizionChiudiOrdine) { + this.reportNameSpedizionChiudiOrdine = reportNameSpedizionChiudiOrdine; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 2f5d917a..806e44b5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -250,6 +250,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SPEDIZIONE") .setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("SPEDIZIONE") + .setKeySection("REPORT_PACKING_LIST")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -271,6 +275,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagSpedizioneEnableManualPick(getValueFromList(list, "SPEDIZIONE", "ENABLE_MANUAL_PICK", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class)); dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); + dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class)); if(onComplete != null) onComplete.run(); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 01826f58..dc3f4356 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -84,6 +84,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public BindableBoolean noItemsToPick = new BindableBoolean(false); public BindableBoolean noLUPresent = new BindableBoolean(true); public BindableBoolean bottomSheetEnabled = new BindableBoolean(false); + public BindableBoolean closeOrderButtonEnabled = new BindableBoolean(false); private boolean mEnableGiacenza; private boolean mFlagShowCodForn; @@ -150,6 +151,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo this.initRecyclerView(); + String reportNameSpedizioneChiudiOrdine = SettingsManager.iDB().getReportNameSpedizionChiudiOrdine(); + closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(reportNameSpedizioneChiudiOrdine)); + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); mEnableGiacenza = !SettingsManager.iDB().isFlagSpedizioneEnableFakeGiacenza(); boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV(); @@ -157,7 +162,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione(); if (mEnableGiacenza) this.openProgress(); - mViewmodel.init(codMdep, mEnableGiacenza, enableCheckPartitaMag, shouldAskPesoLU, canOverflowOrderQuantity, mSitArtOrd, mTestateOrdini, mColliRegistrati); + mViewmodel.init( + codMdep, + mEnableGiacenza, + enableCheckPartitaMag, + shouldAskPesoLU, + canOverflowOrderQuantity, + mSitArtOrd, + mTestateOrdini, + mColliRegistrati, + reportNameSpedizioneChiudiOrdine); } @Override @@ -606,6 +620,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo } + public void closeOrder() { + this.mBindings.spedizioneFab.close(true); + + this.mViewmodel.closeOrder(); + } + @Override public void onLoadingStarted() { this.openProgress(); @@ -620,6 +640,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void onLUOpened(MtbColt mtbColt) { this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione()); noLUPresent.set(false); + closeOrderButtonEnabled.set(false); + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); @@ -630,6 +652,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo this.addExtraItemsEnabled.set(false); noLUPresent.set(true); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); + closeOrderButtonEnabled.set(!UtilityString.isNullOrEmpty(SettingsManager.iDB().getReportNameSpedizionChiudiOrdine())); if (this.mShouldCloseActivity) super.onBackPressed(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 4230a079..d1f69825 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Objects; @@ -91,6 +92,7 @@ public class SpedizioneViewModel { private boolean mEnableCheckPartitaMag; private boolean mCanOverflowOrderQuantity; private boolean mShouldAskPesoLU; + private String mReportNameSpedizioneChiudiOrdine; private MtbColt mCurrentMtbColt = null; @@ -125,7 +127,8 @@ public class SpedizioneViewModel { boolean canOverflowOrderQuantity, List pickingList, List testateOrdini, - List colliRegistrati) { + List colliRegistrati, + String reportNameSpedizioneChiudiOrdine) { this.sendOnLoadingStarted(); this.mDefaultCodMdep = codMdep; @@ -135,6 +138,7 @@ public class SpedizioneViewModel { this.mEnableCheckPartitaMag = enableCheckPartitaMag; this.mCanOverflowOrderQuantity = canOverflowOrderQuantity; this.mShouldAskPesoLU = shouldAskPesoLU; + this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine; if (enableGiacenza) { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { @@ -1217,7 +1221,7 @@ public class SpedizioneViewModel { .setMtbAart(pickingObjectDTO.getMtbAart()); - if(mEnableGiacenza) { + if (mEnableGiacenza) { mtbColr.setRefMtbColr(new MtbColr() .setCodMart(mtbColr.getCodMart()) .setPartitaMag(mtbColr.getPartitaMag()) @@ -1546,6 +1550,56 @@ public class SpedizioneViewModel { this.sendFilterRemoved(); } + public void closeOrder() { + this.sendOnLoadingStarted(); + + Runnable onComplete = () -> this.sendOnLoadingEnded(); + + this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdep, PrinterRESTConsumer.Type.PRIMARIA, printerList -> { + + if (printerList == null || printerList.size() == 0) { + this.sendError(new NoPrintersFoundException()); + onComplete.run(); + return; + } + + + cyclicPrintPackingList( + this.mTestateOrdini.iterator(), + printerList.get(0), + onComplete, + ex -> this.sendLUPrintError(ex, onComplete)); + + }, this::sendError); + + } + + private void cyclicPrintPackingList(@NotNull Iterator sourceTestateOrdineVenditaIterator, String printerName, Runnable onComplete, RunnableArgs onAbort) { + if (sourceTestateOrdineVenditaIterator.hasNext()) { + singlePrintPackingList(sourceTestateOrdineVenditaIterator.next(), printerName, () -> { + cyclicPrintPackingList(sourceTestateOrdineVenditaIterator, printerName, onComplete, onAbort); + }, onAbort); + } else { + onComplete.run(); + } + } + + private void singlePrintPackingList(OrdineVenditaInevasoDTO ordineVenditaInevasoDTO, String printerName, Runnable onComplete, RunnableArgs onFailed) { + HashMap params = new HashMap<>(); + params.put("gestione", ordineVenditaInevasoDTO.getGestione()); + params.put("num_ord", ordineVenditaInevasoDTO.getNumOrd()); + params.put("data_ord", UtilityDate.formatDate(ordineVenditaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH)); + + this.mPrinterRESTConsumer.printReport( + printerName, + this.mReportNameSpedizioneChiudiOrdine, + params, + 1, + onComplete, + onFailed); + + } + public MutableLiveData> getPickingList() { return mPickingList; } diff --git a/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml b/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml new file mode 100644 index 00000000..7e570421 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/activity_spedizione.xml b/app/src/main/res/layout/activity_spedizione.xml index 002c526a..3eefc481 100644 --- a/app/src/main/res/layout/activity_spedizione.xml +++ b/app/src/main/res/layout/activity_spedizione.xml @@ -265,7 +265,17 @@ app:visibility="@{spedizioneView.noLUPresent}"> + + Inserisci quantità Inserisci peso Inserisci le informazioni del TIPO UL e il peso NETTO e LORDO + Chiudi ordine Mostra UL già create Recupera UL Stampa UL @@ -257,6 +258,7 @@ Ultimi arrivi Stampante non trovata + Nessuna stampante trovata Seleziona tutto diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ec14fa05..20f583ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,6 +74,7 @@ Create new LU Insert quantity Insert weight + Close order Show already created LU Insert info about LU TYPE and NET / GROSS weight LU\'s info @@ -262,6 +263,7 @@ Latest arrivals Printer not found + No printer found Select all