diff --git a/app/build.gradle b/app/build.gradle index 59269aad..f5047be7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 301 - def appVersionName = '1.28.7' + def appVersionCode = 302 + def appVersionName = '1.28.8' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 57b9f360..dc9d9392 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -86,6 +86,8 @@ import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdC import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdModule; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCComponent; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCModule; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLUComponent; @@ -137,7 +139,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogEditArticoloModule.class, DialogPrintOrderSSCCListModule.class, ProdLineeProduzioneModule.class, - ProdDettaglioLineaModule.class + ProdDettaglioLineaModule.class, + DialogPrintUlSSCCModule.class }) public interface MainApplicationComponent { @@ -231,6 +234,8 @@ public interface MainApplicationComponent { ProdDettaglioLineaComponent.Factory prodDettaglioLineaComponent(); + DialogPrintUlSSCCComponent.Factory dialogPrintUlSSCCComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index 1eca2d23..ff9e8e25 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -700,4 +700,29 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } + public void loadShipmentUlFromProductionUL(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { + + HashMap params = new HashMap<>(); + params.put("mtb_colr.gestione_rif", mtbColt.getGestione()); + params.put("mtb_colr.ser_collo_rif", mtbColt.getSerCollo()); + params.put("mtb_colr.num_collo_rif", mtbColt.getNumCollo()); + params.put("mtb_colr.data_collo_rif", mtbColt.getDataColloD()); + + String whereCond = UtilityQuery.concatFieldsInWhereCond(params); + + + String query = "select distinct mtb_colt.*\n" + + "from mtb_colt\n" + + " left join mtb_colr on mtb_colt.gestione = mtb_colr.gestione and mtb_colt.data_collo = mtb_colr.data_collo and\n" + + " mtb_colt.ser_collo = mtb_colr.ser_collo and mtb_colt.num_collo = mtb_colr.num_collo\n" + + "where mtb_colt.gestione = 'V'" + + " AND " + whereCond; + + + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.mSystemRESTConsumer.>processSql(query, typeOfObjectsList, data -> { + onComplete.run(data.get(0)); + }, onFailed); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java index 8e656c68..dceba744 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java @@ -51,6 +51,8 @@ import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCView; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.dto.PrintUlDTO; /** * A simple {@link Fragment} subclass. @@ -248,7 +250,19 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements } @Override - public void onDataSaved() { + public void onDataSaved(MtbColt mtbColt) { + PrintUlDTO dto = new PrintUlDTO(); + dto.setMtbColt(mtbColt); + String codJcom = currentOrder.getValue().getCodJcom(); + dto.setFlagPrintShipmentLabel(!UtilityString.isNullOrEmpty(codJcom)); + dto.setFlagPrintProductionLabel(UtilityString.isNullOrEmpty(codJcom)); + DialogPrintUlSSCCView.newInstance(dto, result -> { + if (result.isFlagPrintShipmentLabel() || result.isFlagPrintProductionLabel()) { + this.mViewModel.printSavedMtbColt(result); + } else { + this.mViewModel.refreshMtbColts(); + } + }).show(requireActivity().getSupportFragmentManager(), "DialogPrintUlSSCC"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailModule.java index 72153211..2392a0d3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailModule.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail; import dagger.Module; import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer; @@ -17,8 +18,9 @@ public class ProdRientroMerceOrderDetailModule { @Provides ProdRientroMerceOrderDetailViewModel provideProdRientroMerceOrderDetailViewModel( ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer, - ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { - return new ProdRientroMerceOrderDetailViewModel(prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer); + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, + PrinterRESTConsumer printerRESTConsumer) { + return new ProdRientroMerceOrderDetailViewModel(prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java index 86a613cd..152f96a3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java @@ -6,32 +6,42 @@ import com.annimon.stream.Optional; import com.annimon.stream.Stream; import java.util.Date; +import java.util.HashMap; import java.util.List; import javax.inject.Inject; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.report.ReportType; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.ProdRientroMerceOrderDetailRESTConsumer; import it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail.rest.dto.ImportColliDaProduzioneRequestDTO; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.dto.PrintUlDTO; public class ProdRientroMerceOrderDetailViewModel { - public MutableLiveData> mtbColtsOfOrder = new MutableLiveData<>(); + public final MutableLiveData> mtbColtsOfOrder = new MutableLiveData<>(); private OrdineLavorazioneDTO currentOrder; private final ProdRientroMerceOrderDetailRESTConsumer mProdRientroMerceOrderDetailRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + private final PrinterRESTConsumer mPrinterRESTConsumer; private Listener mListener; @Inject public ProdRientroMerceOrderDetailViewModel(ProdRientroMerceOrderDetailRESTConsumer prodRientroMerceOrderDetailRESTConsumer, - ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) { + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, + PrinterRESTConsumer printerRESTConsumer) { this.mProdRientroMerceOrderDetailRESTConsumer = prodRientroMerceOrderDetailRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + this.mPrinterRESTConsumer = printerRESTConsumer; } public void setOrder(OrdineLavorazioneDTO order) { @@ -40,7 +50,7 @@ public class ProdRientroMerceOrderDetailViewModel { refreshMtbColts(); } - private void refreshMtbColts() { + public void refreshMtbColts() { this.sendOnLoadingStarted(); this.mtbColtsOfOrder.postValue(null); @@ -81,12 +91,9 @@ public class ProdRientroMerceOrderDetailViewModel { .setPesoNetto(pickedQuantityDTO.getPesoNetto()); this.mProdRientroMerceOrderDetailRESTConsumer.importColloDaProduzione(importColliDaProduzioneRequestDTO, mtbColtSaved -> { - synchronized (this.mtbColtsOfOrder) { - refreshMtbColts(); + this.mListener.onDataSaved(mtbColtSaved); } - - this.sendOnLoadingEnded(); }, this::sendError); @@ -136,9 +143,39 @@ public class ProdRientroMerceOrderDetailViewModel { if (this.mListener != null) mListener.onError(ex); } + public void printSavedMtbColt(PrintUlDTO result) { + if (result.isFlagPrintProductionLabel()) { + this.startPrint(result.getMtbColt(), ReportType.ETICHETTA_SSCC_LAVORAZIONE, currentOrder.getCodAnag()); + } else { + this.loadShipmentUlFromProductionUL(result.getMtbColt(), mtbColt -> { + this.startPrint(mtbColt, ReportType.ETICHETTA_SSCC_SPEDIZIONE, mtbColt.getCodAnag()); + }, this::sendError); + } + + } + + private void loadShipmentUlFromProductionUL(MtbColt productionUL, RunnableArgs onLoad, RunnableArgs onError) { + this.mColliMagazzinoRESTConsumer.loadShipmentUlFromProductionUL(productionUL, onLoad, onError); + } + + private void startPrint(MtbColt mtbColt, ReportType reportType, String codAnag) { + HashMap params = new HashMap<>(); + params.put("gestione", mtbColt.getGestione()); + params.put("ser_collo", mtbColt.getSerCollo()); + params.put("num_collo", mtbColt.getNumCollo()); + params.put("data_collo", UtilityDate.formatDate(mtbColt.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH)); + this.mPrinterRESTConsumer.printReportType( + reportType, + SettingsManager.i().getUserSession().getDepo().getCodMdep(), + codAnag, + params, + this::refreshMtbColts, + this::sendError); + } + public interface Listener extends ILoadingListener { - void onDataSaved(); + void onDataSaved(MtbColt mtbColt); void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCComponent.java new file mode 100644 index 00000000..8e991eb7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.printSsccUl; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogPrintUlSSCCComponent { + + @Subcomponent.Factory + interface Factory { + DialogPrintUlSSCCComponent create(); + } + + void inject(DialogPrintUlSSCCView dialogPrintUlSSCCView); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCModule.java new file mode 100644 index 00000000..eb8eb3b7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCModule.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.view.dialogs.printSsccUl; + +import dagger.Module; + +@Module(subcomponents = DialogPrintUlSSCCComponent.class) +public class DialogPrintUlSSCCModule { + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCView.java new file mode 100644 index 00000000..ddf9c523 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/DialogPrintUlSSCCView.java @@ -0,0 +1,110 @@ +package it.integry.integrywmsnative.view.dialogs.printSsccUl; + +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RadioGroup; + +import androidx.annotation.NonNull; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import it.integry.integrywmsnative.MainApplication; +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.DialogPrintUlSsccBinding; +import it.integry.integrywmsnative.view.dialogs.printSsccUl.dto.PrintUlDTO; + +public class DialogPrintUlSSCCView extends BaseDialogFragment { + + + private Context mContext; + private DialogPrintUlSsccBinding mBindings; + private final PrintUlDTO printUlDTO; + private final RunnableArgs onDialogClose; + + + public static DialogPrintUlSSCCView newInstance( + PrintUlDTO printUlDTO, + RunnableArgs onDismiss + ) { + return new DialogPrintUlSSCCView(printUlDTO, onDismiss); + } + + public DialogPrintUlSSCCView(@NotNull PrintUlDTO printUlDTO, @NotNull RunnableArgs onDismiss) { + this.printUlDTO = printUlDTO; + this.onDialogClose = onDismiss; + } + + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mContext = getActivity(); + + mBindings = DialogPrintUlSsccBinding.inflate(inflater, container, false); + + MainApplication.appComponent + .dialogPrintUlSSCCComponent() + .create(); + + mBindings.setView(this); + setCancelable(true); + getDialog().setCanceledOnTouchOutside(true); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + return mBindings.getRoot(); + } + + public void onCheckChange(RadioGroup radioGroup, int id) { + this.printUlDTO.setFlagPrintProductionLabel(id == mBindings.printProductionLabel.getId()); + this.printUlDTO.setFlagPrintShipmentLabel(id == mBindings.printShippingLabel.getId()); + + } + + public void onPositiveClick() { + this.dismiss(); + } + + public void onNegativeClick() { + this.printUlDTO.setFlagPrintProductionLabel(false); + this.printUlDTO.setFlagPrintShipmentLabel(false); + this.dismiss(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + this.onDialogClose.run(this.printUlDTO); + super.onDismiss(dialog); + } + + @Override + public void onCancel(@NonNull DialogInterface dialog) { + this.onNegativeClick(); + super.onCancel(dialog); + } + + @Override + public void onStart() { + if (this.printUlDTO.isFlagPrintShipmentLabel()) { + mBindings.printShippingLabel.setChecked(true); + } else { + mBindings.printProductionLabel.setChecked(true); + } + super.onStart(); + } + + + @Override + public void onError(Exception ex) { + UtilityExceptions.defaultException(this.mContext, ex); + dismiss(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/dto/PrintUlDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/dto/PrintUlDTO.java new file mode 100644 index 00000000..96fc6034 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/printSsccUl/dto/PrintUlDTO.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.view.dialogs.printSsccUl.dto; + +import it.integry.integrywmsnative.core.model.MtbColt; + +public class PrintUlDTO { + private boolean flagPrintShipmentLabel = false; + private boolean flagPrintProductionLabel = false; + private MtbColt mtbColt; + + public boolean isFlagPrintShipmentLabel() { + return flagPrintShipmentLabel; + } + + public PrintUlDTO setFlagPrintShipmentLabel(boolean flagPrintShipmentLabel) { + this.flagPrintShipmentLabel = flagPrintShipmentLabel; + return this; + } + + public boolean isFlagPrintProductionLabel() { + return flagPrintProductionLabel; + } + + public PrintUlDTO setFlagPrintProductionLabel(boolean flagPrintProductionLabel) { + this.flagPrintProductionLabel = flagPrintProductionLabel; + return this; + } + + public MtbColt getMtbColt() { + return mtbColt; + } + + public PrintUlDTO setMtbColt(MtbColt mtbColt) { + this.mtbColt = mtbColt; + return this; + } +} diff --git a/app/src/main/res/layout/dialog_print_ul_sscc.xml b/app/src/main/res/layout/dialog_print_ul_sscc.xml new file mode 100644 index 00000000..ac8db0fe --- /dev/null +++ b/app/src/main/res/layout/dialog_print_ul_sscc.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index eac001d1..15075634 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -409,4 +409,6 @@ Dettaglio linea Materiali versati Scansiona il codice a barre della UL da recuperare + Stampa etichetta spedizione + Stampa etichetta lavorazione \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 50b7eab4..2f5cd34f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -415,4 +415,6 @@ Line details Deposited products Please scan the LU barcode to recover + Print shipping label + Print production label