diff --git a/app/build.gradle b/app/build.gradle index 2a614131..8cf696ff 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 286 - def appVersionName = '1.26.3' + def appVersionCode = 287 + def appVersionName = '1.27.0' 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 0557c19c..26d9a408 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -45,6 +45,8 @@ import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisogn import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaModule; +import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneComponent; +import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneModule; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeComponent; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeModule; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; @@ -61,6 +63,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule; import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent; import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule; +import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListComponent; +import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListModule; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent; @@ -128,7 +132,9 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DocInterniEditFormModule.class, DialogSelectDocRowsModule.class, DialogAskClienteModule.class, - DialogEditArticoloModule.class + DialogEditArticoloModule.class, + DialogPrintOrderSSCCListModule.class, + ProdLineeProduzioneModule.class }) public interface MainApplicationComponent { @@ -216,6 +222,10 @@ public interface MainApplicationComponent { DialogEditArticoloComponent.Factory dialogEditArticoloComponent(); + DialogPrintOrderSSCCListComponent.Factory dialogPrintOrderSSCCListComponent(); + + ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java index d446996f..8e1c4763 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java @@ -8,6 +8,7 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoF import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoFragment; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment; +import it.integry.integrywmsnative.gest.prod_linee_produzione.ProdLineeProduzioneFragment; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment; @@ -45,137 +46,145 @@ public class MenuConfiguration extends BaseMenuConfiguration { .setDrawerIcon(R.drawable.ic_black_latest_delivery) .setFragmentFactory(UltimiArriviFornitoreFragment::newInstance)) ).addGroup( - new MenuGroup() - .setGroupText(R.string.checkout) - .setGroupId(R.id.nav_group_spedizione) - .setCodMenu("MM010") + new MenuGroup() + .setGroupText(R.string.checkout) + .setGroupId(R.id.nav_group_spedizione) + .setCodMenu("MM010") + + .addItem(new MenuItem() + .setID(R.id.nav_spedizione) + .setCodMenu("MG046") + .setTitleText(R.string.vendita_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_spedizione) + .setDrawerIcon(R.drawable.ic_black_upload) + .setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.VENDITA, null, -1, null))) + + .addItem(new MenuItem() + .setID(R.id.nav_free_picking) + .setCodMenu("MG047") + .setTitleText(R.string.free_picking) + .setTitleIcon(R.drawable.ic_dashboard_picking_libero) + .setDrawerIcon(R.drawable.ic_black_barcode_scanner) + .setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.VENDITA))) + + .addItem(new MenuItem() + .setID(R.id.nav_resi_cliente) + .setCodMenu("MG048") + .setTitleText(R.string.fragment_ultime_consegne_cliente_title) + .setTitleIcon(R.drawable.ic_latest_delivery_customer) + .setDrawerIcon(R.drawable.ic_black_latest_delivery) + .setFragmentFactory(UltimeConsegneClienteFragment::newInstance)) + ).addGroup(new MenuGroup() + .setGroupText(R.string.manufacture) + .setGroupId(R.id.nav_group_produzione) + .setCodMenu("MM009") .addItem(new MenuItem() - .setID(R.id.nav_spedizione) - .setCodMenu("MG046") - .setTitleText(R.string.vendita_title_fragment) - .setTitleIcon(R.drawable.ic_dashboard_spedizione) - .setDrawerIcon(R.drawable.ic_black_upload) - .setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.VENDITA, null, -1, null))) + .setID(R.id.nav_prod_ordine_produzione) + .setCodMenu("MG049") + .setTitleText(R.string.prod_ordine_produzione_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_prod_accettazione_produzione) + .setDrawerIcon(R.drawable.ic_black_external) + .setFragmentFactory(ProdOrdineProduzioneElencoFragment::newInstance)) .addItem(new MenuItem() - .setID(R.id.nav_free_picking) - .setCodMenu("MG047") - .setTitleText(R.string.free_picking) - .setTitleIcon(R.drawable.ic_dashboard_picking_libero) - .setDrawerIcon(R.drawable.ic_black_barcode_scanner) - .setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.VENDITA))) + .setID(R.id.nav_prod_ordine_lavorazione) + .setCodMenu("MG050") + .setTitleText(R.string.prod_ordine_lavorazione_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_prod_picking_lavorazione) + .setDrawerIcon(R.drawable.ic_black_external) + .setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, null))) .addItem(new MenuItem() - .setID(R.id.nav_resi_cliente) - .setCodMenu("MG048") - .setTitleText(R.string.fragment_ultime_consegne_cliente_title) - .setTitleIcon(R.drawable.ic_latest_delivery_customer) - .setDrawerIcon(R.drawable.ic_black_latest_delivery) - .setFragmentFactory(UltimeConsegneClienteFragment::newInstance)) - ).addGroup(new MenuGroup() - .setGroupText(R.string.manufacture) - .setGroupId(R.id.nav_group_produzione) - .setCodMenu("MM009") - - .addItem(new MenuItem() - .setID(R.id.nav_prod_ordine_produzione) - .setCodMenu("MG049") - .setTitleText(R.string.prod_ordine_produzione_title_fragment) - .setTitleIcon(R.drawable.ic_dashboard_prod_accettazione_produzione) - .setDrawerIcon(R.drawable.ic_black_external) - .setFragmentFactory(ProdOrdineProduzioneElencoFragment::newInstance)) - - .addItem(new MenuItem() - .setID(R.id.nav_prod_ordine_lavorazione) - .setCodMenu("MG050") - .setTitleText(R.string.prod_ordine_lavorazione_title_fragment) - .setTitleIcon(R.drawable.ic_dashboard_prod_picking_lavorazione) - .setDrawerIcon(R.drawable.ic_black_external) - .setFragmentFactory(() -> OrdiniUscitaElencoFragment.newInstance(GestioneEnum.PRODUZIONE, GestioneEnum.LAVORAZIONE, -1, null))) - - .addItem(new MenuItem() - .setID(R.id.nav_free_lav_picking) - .setCodMenu("MG051") - .setTitleText(it.integry.integrywmsnative.R.string.free_lav_picking) - .setTitleIcon(R.drawable.ic_dashboard_prod_picking_libero) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_barcode_scanner) - .setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE))) - - .addItem(new MenuItem() - .setID(R.id.nav_prod_posizionamento_da_ord) - .setCodMenu("MG052") - .setTitleText(R.string.prod_fabbisogno_linee_prod_title) - .setTitleIcon(R.drawable.ic_dashboard_prod_versamento_merce) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_load_shelf) - .setFragmentFactory(ProdFabbisognoLineeProdFragment::newInstance)) - - .addItem(new MenuItem() - .setID(R.id.nav_prod_versamento_materiale) - .setCodMenu("MG053") - .setTitleText(R.string.prod_versamento_materiale_title_fragment) - .setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale) - .setDrawerIcon(R.drawable.ic_black_external) - .setFragmentFactory(ProdVersamentoMaterialeFragment::newInstance)) - - .addItem(new MenuItem() - .setID(R.id.nav_prod_recupero_materiale) - .setCodMenu("MG054") - .setTitleText(R.string.prod_recupero_materiale_title_fragment) - .setTitleIcon(R.drawable.ic_dashboard_prod_recupero_materiale) - .setDrawerIcon(R.drawable.ic_black_external) - .setFragmentFactory(ProdRecuperoMaterialeFragment::newInstance)) - - .addItem(new MenuItem() - .setID(it.integry.integrywmsnative.R.id.nav_prod_rientro_merce) - .setCodMenu("MG059") - .setTitleText(it.integry.integrywmsnative.R.string.rientro_merce_fragment_title) - .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_accettazione_produzione) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_external) - .setFragmentFactory(ProdRientroMerceFragment::newInstance)) - ).addGroup( - new MenuGroup() - .setGroupText(R.string.internal_handling) - .setGroupId(R.id.nav_group_movimentazione_interna) - .setCodMenu("MM011") + .setID(R.id.nav_free_lav_picking) + .setCodMenu("MG051") + .setTitleText(it.integry.integrywmsnative.R.string.free_lav_picking) + .setTitleIcon(R.drawable.ic_dashboard_prod_picking_libero) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_barcode_scanner) + .setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE))) .addItem(new MenuItem() - .setID(R.id.nav_versamento_merce) - .setCodMenu("MG055") - .setTitleText(R.string.versamento_merce_fragment_title) - .setTitleIcon(R.drawable.ic_dashboard_versamento_merce) - .setDrawerIcon(R.drawable.ic_black_load_shelf) - .setFragmentFactory(VersamentoMerceFragment::newInstance)) + .setID(R.id.nav_prod_posizionamento_da_ord) + .setCodMenu("MG052") + .setTitleText(R.string.prod_fabbisogno_linee_prod_title) + .setTitleIcon(R.drawable.ic_dashboard_prod_versamento_merce) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_load_shelf) + .setFragmentFactory(ProdFabbisognoLineeProdFragment::newInstance)) .addItem(new MenuItem() - .setID(R.id.nav_rettifica_giacenze) - .setCodMenu("MG056") - .setTitleText(R.string.rettifica_giacenze_fragment_title) - .setTitleIcon(R.drawable.ic_dashboard_rettifica_giacenze) - .setDrawerIcon(R.drawable.ic_black_empty_box) - .setFragmentFactory(RettificaGiacenzeFragment::newInstance)) - - - ).addGroup( - new MenuGroup() - .setCodMenu("MM012") - .setGroupText(it.integry.integrywmsnative.R.string.punto_vendita) - .setGroupId(it.integry.integrywmsnative.R.id.nav_group_puntivendita) + .setID(R.id.nav_prod_versamento_materiale) + .setCodMenu("MG053") + .setTitleText(R.string.prod_versamento_materiale_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_prod_versamento_materiale) + .setDrawerIcon(R.drawable.ic_black_external) + .setFragmentFactory(ProdVersamentoMaterialeFragment::newInstance)) .addItem(new MenuItem() - .setCodMenu("MG057") - .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto) - .setTitleText(it.integry.integrywmsnative.R.string.generate_orders) - .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) - .setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance)) + .setID(R.id.nav_prod_recupero_materiale) + .setCodMenu("MG054") + .setTitleText(R.string.prod_recupero_materiale_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_prod_recupero_materiale) + .setDrawerIcon(R.drawable.ic_black_external) + .setFragmentFactory(ProdRecuperoMaterialeFragment::newInstance)) + .addItem(new MenuItem() - .setCodMenu("MG058") - .setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni) - .setTitleText(it.integry.integrywmsnative.R.string.doc_interni) - .setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni) - .setFragmentFactory(DocInterniFragment::newInstance)) + .setID(it.integry.integrywmsnative.R.id.nav_prod_rientro_merce) + .setCodMenu("MG059") + .setTitleText(it.integry.integrywmsnative.R.string.rientro_merce_fragment_title) + .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_accettazione_produzione) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_external) + .setFragmentFactory(ProdRientroMerceFragment::newInstance)) + + .addItem(new MenuItem() + .setID(it.integry.integrywmsnative.R.id.nav_prod_linee) + .setCodMenu("MG061") + .setTitleText(it.integry.integrywmsnative.R.string.nav_prod_linee_title) + .setTitleIcon(R.drawable.ic_production_line) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_production_line) + .setFragmentFactory(ProdLineeProduzioneFragment::newInstance)) + ).addGroup( + new MenuGroup() + .setGroupText(R.string.internal_handling) + .setGroupId(R.id.nav_group_movimentazione_interna) + .setCodMenu("MM011") + + .addItem(new MenuItem() + .setID(R.id.nav_versamento_merce) + .setCodMenu("MG055") + .setTitleText(R.string.versamento_merce_fragment_title) + .setTitleIcon(R.drawable.ic_dashboard_versamento_merce) + .setDrawerIcon(R.drawable.ic_black_load_shelf) + .setFragmentFactory(VersamentoMerceFragment::newInstance)) + + .addItem(new MenuItem() + .setID(R.id.nav_rettifica_giacenze) + .setCodMenu("MG056") + .setTitleText(R.string.rettifica_giacenze_fragment_title) + .setTitleIcon(R.drawable.ic_dashboard_rettifica_giacenze) + .setDrawerIcon(R.drawable.ic_black_empty_box) + .setFragmentFactory(RettificaGiacenzeFragment::newInstance)) + + + ).addGroup( + new MenuGroup() + .setCodMenu("MM012") + .setGroupText(it.integry.integrywmsnative.R.string.punto_vendita) + .setGroupId(it.integry.integrywmsnative.R.id.nav_group_puntivendita) + + .addItem(new MenuItem() + .setCodMenu("MG057") + .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto) + .setTitleText(it.integry.integrywmsnative.R.string.generate_orders) + .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) + .setFragmentFactory(PVOrdiniAcquistoGrigliaFragment::newInstance)) + .addItem(new MenuItem() + .setCodMenu("MG058") + .setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni) + .setTitleText(it.integry.integrywmsnative.R.string.doc_interni) + .setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni) + .setFragmentFactory(DocInterniFragment::newInstance)) // .addItem(new MenuItem() // .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi) @@ -183,7 +192,7 @@ public class MenuConfiguration extends BaseMenuConfiguration { // .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) // .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) // .setFragmentClass(PVOrdiniAcquistoTransmittedListFragment.newInstance())) - ); + ); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ImageViewBinders.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ImageViewBinders.java new file mode 100644 index 00000000..3f135d3c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ImageViewBinders.java @@ -0,0 +1,12 @@ +package it.integry.integrywmsnative.core.di.binders; + +import androidx.appcompat.widget.AppCompatImageView; +import androidx.databinding.BindingAdapter; + +public class ImageViewBinders { + @BindingAdapter("tint") + public static void bindImageViewTint(final AppCompatImageView view, final int color) { + view.setColorFilter(color, android.graphics.PorterDuff.Mode.MULTIPLY); + } + +} 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 97050900..1bb11bd7 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 @@ -11,7 +11,6 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.report.ReportType; import it.integry.integrywmsnative.core.rest.RESTBuilder; @@ -21,6 +20,7 @@ import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -156,10 +156,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { printReportType(reportType, codMdep, null, params, onComplete, onFailed); } - public void printClosedOrders(List closedOrders, String codMdep, Runnable onComplete, RunnableArgs onFailed) { + public void printClosedOrders(PrintOrderCloseDTO dto, String codMdep, Runnable onComplete, RunnableArgs onFailed) { PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class, 240); - Call> callable = printerService.printClosedOrders(codMdep, closedOrders); + Call> callable = printerService.printClosedOrders(codMdep, dto); callable.enqueue(new Callback<>() { @Override public void onResponse(Call> call, Response> response) { 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 f4bd2e97..6706bee0 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,11 +2,11 @@ package it.integry.integrywmsnative.core.rest.consumers; import java.util.List; -import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.rest.model.JasperDTO; import it.integry.integrywmsnative.core.rest.model.ReportTypeDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.POST; @@ -41,7 +41,7 @@ public interface PrinterRESTConsumerService { @POST("wms/printClosedOrders") Call> printClosedOrders( @Query("codMdep") String codMdep, - @Body List closedOrders + @Body PrintOrderCloseDTO printOrderCloseDTO ); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java new file mode 100644 index 00000000..035536f1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java @@ -0,0 +1,91 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import com.google.gson.JsonObject; + +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class ProductionLinesRESTConsumer extends _BaseRESTConsumer { + + public void avviaLineaDiProduzione(String codJfas, Integer hrNum, Runnable onComplete, RunnableArgs onFailed) { + ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class); + Call> callable = restService.avviaLineaDiProduzione(codJfas, hrNum); + callable.enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "avviaLineaDiProduzione", data -> { + onComplete.run(); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void arrestaLineaDiProduzione(String codJfas, Runnable onComplete, RunnableArgs onFailed) { + ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class); + Call> callable = restService.arrestaLineaDiProduzione(codJfas); + callable.enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "arrestaLineaDiProduzione", data -> { + onComplete.run(); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void avviaProduzioneArticoloSuLinea(String codJfas, String codMart, String partitaMag, Runnable onComplete, RunnableArgs onFailed) { + ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class, 300); + Call> callable = restService.avviaProduzioneArticoloSuLinea(codJfas, codMart, partitaMag); + callable.enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "avviaProduzioneArticoloSuLinea", data -> { + onComplete.run(); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void getStatoLinee(String codMdep, RunnableArgs> onComplete, RunnableArgs onFailed) { + ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class); + Call>> callable = restService.getStatoLinee(codMdep); + callable.enqueue(new Callback<>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getStatoLinee", onComplete::run, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumerService.java new file mode 100644 index 00000000..c225d8d4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumerService.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import com.google.gson.JsonObject; + +import java.util.List; + +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface ProductionLinesRESTConsumerService { + + @POST("mes_v2/avviaLineaDiProduzione") + Call> avviaLineaDiProduzione(@Query("codJfas") String codJfas, @Query("hrNum") Integer hrNum); + + @POST("mes_v2/arrestaLineaDiProduzione") + Call> arrestaLineaDiProduzione(@Query("codJfas") String codJfas); + + @POST("mes_v2/avviaProduzioneArticoloSuLinea") + Call> avviaProduzioneArticoloSuLinea(@Query("codJfas") String codJfas, @Query("codMart") String codMart, @Query("partitaMag") String partitaMag); + + @GET("mes_v2/statoLineeProd") + Call>> getStatoLinee(@Query("codMdep") String codMdep); +} 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 d0a41ab6..86c32edd 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 @@ -270,14 +270,6 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SPEDIZIONE") .setKeySection("FLAG_CAN_SELECT_MULTIPLE_ORDERS")); - stbGestSetupList.add(new StbGestSetup() - .setGestName("PICKING") - .setSection("SPEDIZIONE") - .setKeySection("FLAG_PRINT_PACKING_LIST_ON_CLOSE")); - stbGestSetupList.add(new StbGestSetup() - .setGestName("PICKING") - .setSection("SPEDIZIONE") - .setKeySection("FLAG_PRINT_ETICHETTE_ON_CLOSE")); stbGestSetupList.add(new StbGestSetup() .setGestName("PICKING") .setSection("SPEDIZIONE") @@ -331,8 +323,6 @@ 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.setFlagPrintPackingListOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", Boolean.class)); -// dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(getValueFromList(list, "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", 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.setDocInterniCheckFornitore(getValueFromList(list, "DOC_INTERNI", "CHECK_FORNITORE", String.class)); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index fa6558ac..ef97b9d6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -32,6 +32,10 @@ public class UtilityBarcode { return barcodeScanDTO != null && (barcodeScanDTO.getType() == BarcodeType.CODE128 || barcodeScanDTO.getType() == BarcodeType.EAN128); } + public static boolean isEan128(BarcodeScanDTO barcodeScanDTO) { + return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128; + } + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { return isEtichettaPosizione(barcodeScanDTO, true); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneComponent.java new file mode 100644 index 00000000..b7167ea2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione; + +import dagger.Subcomponent; + +@Subcomponent +public interface ProdLineeProduzioneComponent { + + @Subcomponent.Factory + interface Factory { + ProdLineeProduzioneComponent create(); + } + + void inject(ProdLineeProduzioneFragment prodLineeProduzioneFragment); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java new file mode 100644 index 00000000..92fa730b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java @@ -0,0 +1,187 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione; + +import android.content.Context; +import android.os.Bundle; +import android.text.Html; +import android.text.InputType; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.appcompat.widget.AppCompatTextView; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.DialogStartProduction; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; +import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter; +import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; + +public class ProdLineeProduzioneFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ProdLineeProduzioneViewModel.Listener { + + + @Inject + ProdLineeProduzioneViewModel mViewModel; + + private final ObservableArrayList mLinesObservableList = new ObservableArrayList<>(); + private FragmentLineeProdBinding mBinding; + private ElevatedToolbar mToolbar; + private int barcodeScannerIstanceID = -1; + private final RunnableArgs onScanSuccessful = data -> { + this.onLoadingStarted(); + + this.mViewModel.processBarcodeDTO(data); + }; + + public static ProdLineeProduzioneFragment newInstance() { + return new ProdLineeProduzioneFragment(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_linee_prod, container, false); + MainApplication.appComponent + .prodLineeProduzioneComponent() + .create() + .inject(this); + + mViewModel.setListener(this); + mBinding.setLifecycleOwner(this); + this.initRecyclerView(); + this.initBarcodeReader(); + mViewModel.init(); + + return mBinding.getRoot(); + } + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(onScanSuccessful) + .setOnScanFailed(this::onError)); + } + + @Override + public void setScrollToolbar(ElevatedToolbar toolbar) { + mToolbar = toolbar; + } + + public void refreshLineeProd(List linesList) { + this.mLinesObservableList.clear(); + if (linesList != null) { + + this.mLinesObservableList.addAll(linesList); + } + } + + private void initRecyclerView() { + this.mViewModel.getProdLinesList().observe(getViewLifecycleOwner(), this::refreshLineeProd); + LinesListAdapter prodLinesListAdapter = new LinesListAdapter(this.requireActivity(), this.mLinesObservableList); + prodLinesListAdapter.setEmptyView(this.mBinding.linesListEmptyView); + this.mBinding.linesMainList.setAdapter(prodLinesListAdapter); + this.mBinding.linesMainList.setLayoutManager(new LinearLayoutManager(this.requireActivity())); + prodLinesListAdapter.setOnItemClicked(this.mViewModel::onLineSelected); + if (mToolbar != null) + mToolbar.setRecyclerView(this.mBinding.linesMainList); + } + + public void requestResources(ProdLineStatusDTO prodLine) { + this.onLoadingEnded(); + BarcodeManager.disable(); + requireActivity().runOnUiThread(() -> { + + DialogSimpleInputHelper.makeInputDialog(requireContext(), "Inserisci il numero di risorse da allocare", qta -> { + this.onLoadingStarted(); + try { + Integer hrNum = Integer.parseInt(qta); + this.mViewModel.startProductionLine(prodLine, hrNum); + } catch (NumberFormatException ex) { + this.onError(new Exception("Inserire un numero di risorse valido")); + } + }, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show(); + }); + } + + public void requestOrderChange(ProdLineStatusDTO prodLine) { + this.onLoadingEnded(); + requireActivity().runOnUiThread(() -> { + DialogStartProduction.newInstance((dto) -> { + this.mViewModel.checkBarcodeAndStartOrdine(prodLine, dto); + }).show(getChildFragmentManager(), "DialogStartProduction"); + }); + } + + public void requestProductionStop(ProdLineStatusDTO prodLine) { + this.onLoadingEnded(); + BarcodeManager.disable(); + if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) { + mViewModel.stopProduction(prodLine); + } else { + this.confirmOrderClose(() -> { + mViewModel.stopProduction(prodLine); + }); + } + + } + + @Override + public void successDialog(String message, Runnable onComplete) { + BarcodeManager.disable(); + requireActivity().runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success), + new SpannableString(message), null, onComplete).show(getChildFragmentManager(), "successDialog")); + + } + + @Override + public void selectLine(ProdLineStatusDTO dto) { + this.onLoadingEnded(); + BarcodeManager.disable(); + if (!dto.isStarted()) { + this.requestResources(dto); + } else { + BottomSheetLineAction.newInstance(dto, this::requestResources, this::requestOrderChange, this::requestProductionStop, BarcodeManager::enable).show(getChildFragmentManager(), "BottomSheetLineAction"); + } + } + + @Override + public void confirmOrderClose(Runnable onConfirm) { + this.onLoadingEnded(); + requireActivity().runOnUiThread(() -> { + DialogSimpleMessageView.makeWarningDialog( + Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea." + + "

" + + "Continuare?"), + null, + onConfirm, + BarcodeManager::enable + ).show(getChildFragmentManager(), "confirmOrderClose"); + }); + } + + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + titleText.setText(context.getText(R.string.nav_prod_linee_title).toString()); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java new file mode 100644 index 00000000..a36e3629 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; +import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; + +@Module(subcomponents = ProdRientroMerceComponent.class) +public class ProdLineeProduzioneModule { + + @Provides + ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { + return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer, barcodeRESTConsumer); + } + + @Provides + @Singleton + ProductionLinesRESTConsumer providesProductionLinesRESTConsumer() { + return new ProductionLinesRESTConsumer(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java new file mode 100644 index 00000000..d2ac9714 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java @@ -0,0 +1,142 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione; + +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; + +public class ProdLineeProduzioneViewModel { + + + private final ProductionLinesRESTConsumer productionLinesRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final MutableLiveData> prodLines = new MutableLiveData<>(); + + private Listener mListener; + + @Inject + public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { + this.productionLinesRESTConsumer = productionLinesRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + } + + public void init() { + this.sendOnLoadingStarted(); + reloadLines(); + + } + + private void reloadLines() { + BarcodeManager.disable(); + sendOnLoadingStarted(); + this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> { + this.sendOnLoadingEnded(); + BarcodeManager.enable(); + prodLines.postValue(lineeProdList); + }, this::sendError); + } + + public MutableLiveData> getProdLinesList() { + return prodLines; + } + + public void setListener(Listener listener) { + this.mListener = listener; + } + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { + String codJfas = barcodeScanDTO.getStringValue(); + + ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null; + if (prodLine != null) { + this.onLineSelected(prodLine); + } else { + this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata")); + } + + + } + + + 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 void startProductionLine(ProdLineStatusDTO prodLine, Integer hrNum) { + this.sendOnLoadingStarted(); + this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(), + hrNum, + () -> this.mListener.successDialog("Operazione completata", this::reloadLines), + this::sendError); + } + + public void onLineSelected(ProdLineStatusDTO lineSelected) { + mListener.selectLine(lineSelected); + } + + public void checkBarcodeAndStartOrdine(ProdLineStatusDTO prodLine, BarcodeScanDTO dto) { + this.sendOnLoadingStarted(); + mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> { + String codMart = ean128.Content; + String partitaMag = ean128.BatchLot; + if (!prodLine.isStarted()) { + this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!")); + } else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) { + this.startProduction(prodLine, codMart, partitaMag); + } else { + this.mListener.confirmOrderClose(() -> { + this.startProduction(prodLine, codMart, partitaMag); + }); + } + }, this::sendError); + } + + private void startProduction(ProdLineStatusDTO prodLine, String codMart, String partitaMag) { + this.sendOnLoadingStarted(); + this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag, + () -> this.mListener.successDialog("Operazione completata", this::reloadLines), + this::sendError); + } + + public void stopProduction(ProdLineStatusDTO prodLine) { + this.sendOnLoadingStarted(); + this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(), + () -> this.mListener.successDialog("Operazione completata", this::reloadLines), + this::sendError); + } + + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void successDialog(String message, Runnable onComplete); + + void selectLine(ProdLineStatusDTO prodLineStatusDTO); + + void confirmOrderClose(Runnable onConfirm); + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java new file mode 100644 index 00000000..07f3f01c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java @@ -0,0 +1,111 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; + +public class BottomSheetLineAction extends BottomSheetDialogFragment { + + private BottomSheetLineActionsBinding mBinding; + + private ProdLineStatusDTO prodLine; + private RunnableArgs onChangeResourcesRequest; + private RunnableArgs onChangeOrdersRequest; + private RunnableArgs onLineCloseRequest; + private Runnable onCancelAction; + + public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, RunnableArgs onChangeResourcesRequest, RunnableArgs onChangeOrdersRequest, RunnableArgs onLineCloseRequest, Runnable onCancel) { + BottomSheetLineAction fragment = new BottomSheetLineAction(); + fragment + .setProdLine(dto) + .setOnChangeResourcesRequest(onChangeResourcesRequest) + .setOnChangeOrdersRequest(onChangeOrdersRequest) + .setOnLineCloseRequest(onLineCloseRequest) + .setOnCancelAction(onCancel); + return fragment; + } + + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = BottomSheetLineActionsBinding.inflate(inflater, container, false); + mBinding.setLifecycleOwner(this); + mBinding.setView(this); + mBinding.setListModel(this.prodLine); + + return mBinding.getRoot(); + } + + public BottomSheetLineAction setOnCancelAction(Runnable onCancelAction) { + this.onCancelAction = onCancelAction; + return this; + } + + public BottomSheetLineAction setOnChangeResourcesRequest(RunnableArgs onChangeResourcesRequest) { + this.onChangeResourcesRequest = onChangeResourcesRequest; + return this; + } + + + public BottomSheetLineAction setOnChangeOrdersRequest(RunnableArgs onChangeOrdersRequest) { + this.onChangeOrdersRequest = onChangeOrdersRequest; + return this; + } + + + public BottomSheetLineAction setOnLineCloseRequest(RunnableArgs onLineCloseRequest) { + this.onLineCloseRequest = onLineCloseRequest; + return this; + } + + public ProdLineStatusDTO getProdLine() { + return prodLine; + } + + public BottomSheetLineAction setProdLine(ProdLineStatusDTO prodLine) { + this.prodLine = prodLine; + return this; + } + + public void onResourcesClicked() { + if (this.onChangeResourcesRequest != null) { + this.onChangeResourcesRequest.run(prodLine); + } + this.dismiss(); + + } + + public void onPlayClicked() { + if (this.onChangeOrdersRequest != null) { + this.onChangeOrdersRequest.run(prodLine); + } + this.dismiss(); + } + + public void onStopClicked() { + if (this.onLineCloseRequest != null) { + this.onLineCloseRequest.run(prodLine); + } + this.dismiss(); + } + + @Override + public void onCancel(@NonNull DialogInterface dialog) { + if (this.onCancelAction != null) { + onCancelAction.run(); + } + super.onCancel(dialog); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java new file mode 100644 index 00000000..d1fa80ba --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java @@ -0,0 +1,77 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; + +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 androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.databinding.DialogStartProductionBinding; + +public class DialogStartProduction extends BaseDialogFragment { + private int barcodeScannerIstanceID = -1; + private RunnableArgs onScanSuccessful; + private DialogStartProductionBinding mBinding; + + public static DialogStartProduction newInstance(RunnableArgs onScanSuccessful) { + + Bundle args = new Bundle(); + + DialogStartProduction fragment = new DialogStartProduction(); + fragment.setArguments(args); + fragment.setOnScanSuccessful(onScanSuccessful); + return fragment; + } + + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onDismiss(dialog); + } + + public DialogStartProduction setOnScanSuccessful(RunnableArgs onScanSuccessful) { + this.onScanSuccessful = onScanSuccessful; + return this; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = DialogStartProductionBinding.inflate(inflater, container, false); + mBinding.setLifecycleOwner(this); + this.initBarcodeReader(); + setCancelable(true); + getDialog().setCanceledOnTouchOutside(true); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + return mBinding.getRoot(); + } + + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(this::processBarcode) + .setOnScanFailed(this::onError)); + BarcodeManager.enable(); + } + + private void processBarcode(BarcodeScanDTO barcodeScanDTO) { + if (UtilityBarcode.isEan128(barcodeScanDTO)) { + this.onScanSuccessful.run(barcodeScanDTO); + this.dismiss(); + } else { + this.onError(new Exception("Il barcode scansionato non è valido!")); + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java new file mode 100644 index 00000000..10808248 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java @@ -0,0 +1,129 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione.dto; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; + +public class ProdLineStatusDTO { + + private String codJfas; + + private String descrizione; + + private String codMdepLav; + + private Date datetimeStart; + + private Date datetimeEnd; + + private BigDecimal maxAllocazione; + + private Integer qtaAllocate; + + private String listaOrd; + + + public String getCodJfas() { + return codJfas; + } + + public ProdLineStatusDTO setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public ProdLineStatusDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getCodMdepLav() { + return codMdepLav; + } + + public ProdLineStatusDTO setCodMdepLav(String codMdepLav) { + this.codMdepLav = codMdepLav; + return this; + } + + public Date getDatetimeStart() { + return datetimeStart; + } + + public ProdLineStatusDTO setDatetimeStart(Date datetimeStart) { + this.datetimeStart = datetimeStart; + return this; + } + + public Date getDatetimeEnd() { + return datetimeEnd; + } + + public ProdLineStatusDTO setDatetimeEnd(Date datetimeEnd) { + this.datetimeEnd = datetimeEnd; + return this; + } + + public BigDecimal getMaxAllocazione() { + return maxAllocazione; + } + + public ProdLineStatusDTO setMaxAllocazione(BigDecimal maxAllocazione) { + this.maxAllocazione = maxAllocazione; + return this; + } + + public Integer getQtaAllocate() { + return qtaAllocate; + } + + public ProdLineStatusDTO setQtaAllocate(Integer qtaAllocate) { + this.qtaAllocate = qtaAllocate; + return this; + } + + public String getListaOrd() { + return listaOrd; + } + + public ProdLineStatusDTO setListaOrd(String listaOrd) { + this.listaOrd = listaOrd; + return this; + } + + public boolean isStarted() { + return datetimeStart != null && datetimeEnd == null; + } + + + public boolean isPaused() { + if (datetimeEnd == null) { + return false; + } + Calendar today = Calendar.getInstance(); + today.set(Calendar.MILLISECOND, 0); + today.set(Calendar.SECOND, 0); + today.set(Calendar.MINUTE, 0); + today.set(Calendar.HOUR_OF_DAY, 0); + Calendar lastCloseTime = Calendar.getInstance(); + lastCloseTime.setTime(datetimeEnd); + lastCloseTime.set(Calendar.MILLISECOND, 0); + lastCloseTime.set(Calendar.SECOND, 0); + lastCloseTime.set(Calendar.MINUTE, 0); + lastCloseTime.set(Calendar.HOUR_OF_DAY, 0); + return datetimeStart != null && datetimeEnd != null && today.equals(lastCloseTime); + } + + public String getLabel() { + return codJfas + " - " + descrizione; + } + + public String getRisorseLabel() { + return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : ""); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ui/LinesListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ui/LinesListAdapter.java new file mode 100644 index 00000000..c7f01ae0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ui/LinesListAdapter.java @@ -0,0 +1,62 @@ +package it.integry.integrywmsnative.gest.prod_linee_produzione.ui; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.RecyclerView; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView; +import it.integry.integrywmsnative.databinding.FragmentLineeProdMainListModelBinding; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; + +public class LinesListAdapter extends ExtendedRecyclerView { + private Context mContext; + + private RunnableArgs mOnItemClicked; + + public LinesListAdapter(Context context, ObservableArrayList myDataset) { + super(myDataset); + this.mContext = context; + } + + @NonNull + @Override + public LinesListAdapter.SingleItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + FragmentLineeProdMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.fragment_linee_prod_main_list_model, parent, false); + return new LinesListAdapter.SingleItemViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull LinesListAdapter.SingleItemViewHolder holder, int position) { + final ProdLineStatusDTO line = mDataset.get(position); + + holder.binding.setListModel(line); + holder.binding.executePendingBindings(); + holder.binding.getRoot().setOnClickListener(v -> { + if (this.mOnItemClicked != null) + this.mOnItemClicked.run(line); + }); + } + + + public void setOnItemClicked(RunnableArgs onItemClicked) { + this.mOnItemClicked = onItemClicked; + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + FragmentLineeProdMainListModelBinding binding; + + SingleItemViewHolder(FragmentLineeProdMainListModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + +} 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 ebf9b083..54b87d73 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 @@ -56,10 +56,12 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; +import it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list.DialogPrintOrderSSCCListView; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; +import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter; import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; @@ -722,11 +724,11 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void onLUPrintError(Exception ex, Runnable onComplete) { this.onLoadingEnded(); DialogSimpleMessageView.makeErrorDialog( - new SpannableString(ex.getMessage()), - null, - null, - R.string.button_ignore_print, - onComplete) + new SpannableString(ex.getMessage()), + null, + null, + R.string.button_ignore_print, + onComplete) .show(getSupportFragmentManager(), "tag"); ; } @@ -747,10 +749,10 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), - null, - () -> onComplete.run(true), - () -> onComplete.run(false) - ) + null, + () -> onComplete.run(true), + () -> onComplete.run(false) + ) .show(getSupportFragmentManager(), "tag"); } @@ -849,12 +851,58 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo }).show(); } + public void askShouldPrintPackingList(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs onComplete) { + DialogSimpleMessageView.makeInfoDialog( + getResources().getString(R.string.action_close_order), + new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)), + null, + () -> { + printOrderCloseDTO.setFlagPrintPackingList(true); + if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) { + this.askShouldPrintSSCC(printOrderCloseDTO, onComplete); + } else { + onComplete.run(printOrderCloseDTO); + } + }, + () -> { + printOrderCloseDTO.setFlagPrintPackingList(false); + if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) { + this.askShouldPrintSSCC(printOrderCloseDTO, onComplete); + } else { + onComplete.run(printOrderCloseDTO); + } + } + ) + .show(getSupportFragmentManager(), "tag"); + } + + public void askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs onComplete) { + DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, onComplete).show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView"); + } + @Override public void onBatchLotSelectionRequest(List availableBatchLots, RunnableArgs onComplete) { DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete) .show(getSupportFragmentManager(), "tag"); } + @Override + public void onCloseOrderPrintRequest(RunnableArgs onComplete) { + PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO(); + if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) { + this.askShouldPrintPackingList(printOrderCloseDTO, onComplete); + } else if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) { + this.askShouldPrintSSCC(printOrderCloseDTO, onComplete); + } + + } + + @Override + public void onOrderClosed() { + this.onLoadingEnded(); + this.onBackPressed(); + } + @Override public void onRowSaved() { FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); 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 42809d10..be80c0ea 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 @@ -68,6 +68,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUEx import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; +import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; public class SpedizioneViewModel { @@ -304,6 +305,14 @@ public class SpedizioneViewModel { if (this.mListener != null) mListener.onLoadingStarted(); } + private void sendOnCloseOrderPrintRequest(RunnableArgs onComplete) { + if (this.mListener != null) mListener.onCloseOrderPrintRequest(onComplete); + } + + private void sendOnOrderClosed() { + if (this.mListener != null) mListener.onOrderClosed(); + } + private void sendOnLoadingEnded() { if (this.mListener != null) mListener.onLoadingEnded(); } @@ -1853,13 +1862,16 @@ public class SpedizioneViewModel { public void closeOrder() { this.sendOnLoadingStarted(); if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) { - printClosedOrders(this.mTestateOrdini, this::sendOnLoadingEnded, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded)); + this.sendOnCloseOrderPrintRequest(this::onCloseOrderPrintRequest); } } - private void printClosedOrders(List listOrdiniInevasi, Runnable onSuccess, RunnableArgs onAbort) { - HashMap params = new HashMap<>(); - List closedOrders = Stream.of(listOrdiniInevasi).map(ord -> { + private void onCloseOrderPrintRequest(PrintOrderCloseDTO dto) { + if (!dto.isFlagPrintPackingList() && !dto.isFlagPrintSSCC()) { + this.sendOnOrderClosed(); + return; + } + List closedOrders = Stream.of(this.mTestateOrdini).map(ord -> { DtbOrdt ordV = new DtbOrdt(); ordV.setDataOrd(ord.getDataOrdS()) .setNumOrd(ord.getNumOrd()) @@ -1867,9 +1879,15 @@ public class SpedizioneViewModel { .setCodAnag(ord.getCodAnagOrd()); return ordV; }).toList(); + dto.setPrintList(closedOrders); + printClosedOrders(dto, this::sendOnOrderClosed, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded)); + } + + private void printClosedOrders(PrintOrderCloseDTO dto, Runnable onSuccess, RunnableArgs onAbort) { + this.mPrinterRESTConsumer.printClosedOrders( - closedOrders, + dto, SettingsManager.i().getUserSession().getDepo().getCodMdep(), onSuccess, onAbort); @@ -1974,6 +1992,10 @@ public class SpedizioneViewModel { void onLUPositionChangeRequest(RunnableArgss onComplete); void onBatchLotSelectionRequest(List availableBatchLots, RunnableArgs onComplete); + + void onCloseOrderPrintRequest(RunnableArgs onComplete); + + void onOrderClosed(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListComponent.java new file mode 100644 index 00000000..a33db83c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogPrintOrderSSCCListComponent { + + @Subcomponent.Factory + interface Factory { + DialogPrintOrderSSCCListComponent create(); + } + + void inject(DialogPrintOrderSSCCListView dialogPrintOrderSSCCListView); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListModule.java new file mode 100644 index 00000000..8dbc4503 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListModule.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogPrintOrderSSCCListComponent.class) +public class DialogPrintOrderSSCCListModule { + + + @Provides + DialogPrintOrderSSCCListViewModel providesDialogPrintOrderSSCCListViewModel() { + return new DialogPrintOrderSSCCListViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListView.java new file mode 100644 index 00000000..773d9daf --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListView.java @@ -0,0 +1,115 @@ +package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list; + +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 androidx.databinding.DataBindingUtil; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +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.DialogPrintOrderSsccListBinding; +import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; + +public class DialogPrintOrderSSCCListView extends BaseDialogFragment { + + + @Inject + DialogPrintOrderSSCCListViewModel mViewModel; + + private Context mContext; + private DialogPrintOrderSsccListBinding mBindings; + private final PrintOrderCloseDTO printOrderCloseDTO; + private final RunnableArgs onDialogClose; + + + public static DialogPrintOrderSSCCListView newInstance( + PrintOrderCloseDTO printOrderCloseDTO, + RunnableArgs onDismiss + ) { + return new DialogPrintOrderSSCCListView(printOrderCloseDTO, onDismiss); + } + + public DialogPrintOrderSSCCListView(@NotNull PrintOrderCloseDTO printOrderCloseDTO, @NotNull RunnableArgs onDismiss) { + this.printOrderCloseDTO = printOrderCloseDTO; + this.onDialogClose = onDismiss; + } + + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mContext = getActivity(); + + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_print_order_sscc_list, container, false); + + MainApplication.appComponent + .dialogPrintOrderSSCCListComponent() + .create() + .inject(this); + 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.printOrderCloseDTO.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId()); + } + + public void onPositiveClick() { + this.printOrderCloseDTO.setFlagPrintSSCC(true); + this.dismiss(); + } + + public void onNegativeClick() { + this.printOrderCloseDTO.setFlagPrintSSCC(false); + this.dismiss(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + this.onDialogClose.run(this.printOrderCloseDTO); + super.onDismiss(dialog); + } + + @Override + public void onCancel(@NonNull DialogInterface dialog) { + this.onNegativeClick(); + super.onCancel(dialog); + } + + @Override + public void onStart() { + if (this.printOrderCloseDTO.isFlagSkipPrintedSSCC()) { + mBindings.printOnlyNew.setChecked(true); + } else { + mBindings.printAll.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/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListViewModel.java new file mode 100644 index 00000000..b516384b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/print_sscc_list/DialogPrintOrderSSCCListViewModel.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.gest.spedizione.dialogs.print_sscc_list; + +public class DialogPrintOrderSSCCListViewModel { + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/model/PrintOrderCloseDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/model/PrintOrderCloseDTO.java new file mode 100644 index 00000000..508b0e05 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/model/PrintOrderCloseDTO.java @@ -0,0 +1,48 @@ +package it.integry.integrywmsnative.gest.spedizione.model; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.DtbOrdt; + +public class PrintOrderCloseDTO { + private boolean flagPrintPackingList = false; + private boolean flagPrintSSCC = false; + private boolean flagSkipPrintedSSCC = true; + private List printList; + + public boolean isFlagPrintPackingList() { + return flagPrintPackingList; + } + + public PrintOrderCloseDTO setFlagPrintPackingList(boolean flagPrintPackingList) { + this.flagPrintPackingList = flagPrintPackingList; + return this; + } + + public boolean isFlagPrintSSCC() { + return flagPrintSSCC; + } + + public PrintOrderCloseDTO setFlagPrintSSCC(boolean flagPrintSSCC) { + this.flagPrintSSCC = flagPrintSSCC; + return this; + } + + public boolean isFlagSkipPrintedSSCC() { + return flagSkipPrintedSSCC; + } + + public PrintOrderCloseDTO setFlagSkipPrintedSSCC(boolean flagSkipPrintedSSCC) { + this.flagSkipPrintedSSCC = flagSkipPrintedSSCC; + return this; + } + + public List getPrintList() { + return printList; + } + + public PrintOrderCloseDTO setPrintList(List printList) { + this.printList = printList; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java index 1ad3cfae..1bf800bb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java @@ -4,6 +4,7 @@ import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; +import android.text.InputType; import android.view.LayoutInflater; import androidx.databinding.DataBindingUtil; @@ -21,15 +22,14 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; public class DialogSimpleInputHelper { - private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick, Integer inputType) { Dialog dialog = new Dialog(mContext); DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog); - DialogInputGeneralBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_input_general, null, false); viewModel - .setOnPositive(()->{ + .setOnPositive(() -> { onPositiveClick.run(mBinding.generalInput.getText().toString()); }) @@ -38,50 +38,79 @@ public class DialogSimpleInputHelper { mBinding.setViewmodel(viewModel); //Title VIEW + mBinding.titleText.setText(titleText); - if (!UtilityString.isNullOrEmpty(hintText)){ + if (!UtilityString.isNullOrEmpty(hintText)) { mBinding.generalInput.setHint(hintText); } - if (!UtilityString.isNullOrEmpty(defaultTextValue)){ + if (!UtilityString.isNullOrEmpty(defaultTextValue)) { mBinding.generalInput.setText(defaultTextValue); } - + if (inputType != null) { + mBinding.generalInput.setInputType(InputType.TYPE_CLASS_NUMBER); + } //Content View dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(false); dialog.setContentView(mBinding.getRoot()); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - UtilityDialog.setTo90PercentWidth(mContext,dialog); + UtilityDialog.setTo90PercentWidth(mContext, dialog); return dialog; } - public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs onPositiveClick, Runnable onNegativeClick) { return makeBase(mContext, title, null, null, onPositiveClick, - onNegativeClick); + onNegativeClick, + null); } - public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick) { return makeBase(mContext, title, defaultTextValue, hintText, onPositiveClick, - onNegativeClick); + onNegativeClick, + null); + + } + + public static Dialog makeInputDialog(Context mContext, String title, RunnableArgs onPositiveClick, Runnable onNegativeClick, Integer inputType) { + + return makeBase(mContext, + title, + null, + null, + onPositiveClick, + onNegativeClick, + inputType); } + public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick, Integer inputType) { + + return makeBase(mContext, + title, + defaultTextValue, + hintText, + onPositiveClick, + onNegativeClick, + inputType); + + } + } diff --git a/app/src/main/res/drawable/ic_baseline_pause_24.xml b/app/src/main/res/drawable/ic_baseline_pause_24.xml new file mode 100644 index 00000000..938bd7f1 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_pause_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_person_add_24.xml b/app/src/main/res/drawable/ic_baseline_person_add_24.xml new file mode 100644 index 00000000..ee564be1 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_person_add_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml b/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml new file mode 100644 index 00000000..e3fd2e9d --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_stop_24.xml b/app/src/main/res/drawable/ic_baseline_stop_24.xml new file mode 100644 index 00000000..19bcbee7 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_stop_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_production_line.png b/app/src/main/res/drawable/ic_production_line.png new file mode 100644 index 00000000..19f5ada7 Binary files /dev/null and b/app/src/main/res/drawable/ic_production_line.png differ diff --git a/app/src/main/res/drawable/ic_stop_circle_24.xml b/app/src/main/res/drawable/ic_stop_circle_24.xml new file mode 100644 index 00000000..d1561510 --- /dev/null +++ b/app/src/main/res/drawable/ic_stop_circle_24.xml @@ -0,0 +1,6 @@ + + + diff --git a/app/src/main/res/layout/bottom_sheet_line_actions.xml b/app/src/main/res/layout/bottom_sheet_line_actions.xml new file mode 100644 index 00000000..9bd37c8e --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet_line_actions.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_print_order_sscc_list.xml b/app/src/main/res/layout/dialog_print_order_sscc_list.xml new file mode 100644 index 00000000..775bc03c --- /dev/null +++ b/app/src/main/res/layout/dialog_print_order_sscc_list.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_start_production.xml b/app/src/main/res/layout/dialog_start_production.xml new file mode 100644 index 00000000..f9894f3a --- /dev/null +++ b/app/src/main/res/layout/dialog_start_production.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/doc_interni_list_model.xml b/app/src/main/res/layout/doc_interni_list_model.xml index ec1ec865..d1d26706 100644 --- a/app/src/main/res/layout/doc_interni_list_model.xml +++ b/app/src/main/res/layout/doc_interni_list_model.xml @@ -1,12 +1,12 @@ - + + - + tools:text="13 Apr" /> + tools:text="0 Articoli" /> diff --git a/app/src/main/res/layout/fragment_linee_prod.xml b/app/src/main/res/layout/fragment_linee_prod.xml new file mode 100644 index 00000000..13b3603a --- /dev/null +++ b/app/src/main/res/layout/fragment_linee_prod.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_linee_prod_main_list_model.xml b/app/src/main/res/layout/fragment_linee_prod_main_list_model.xml new file mode 100644 index 00000000..440ad8a1 --- /dev/null +++ b/app/src/main/res/layout/fragment_linee_prod_main_list_model.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 8c33f7c0..bfbeb35a 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -8,6 +8,7 @@ Attendere Caricamento Completato + Successo %s del %s]]> %s del %s]]> %s del %s]]> @@ -267,6 +268,9 @@ Recupero dati Attendi qualche istante + VGAlimenti personalizzazione + Base personalizzazione + IME personalizzazione Stampante Accettazione @@ -277,6 +281,10 @@ Posizionamento Vuoi procedere con la stampa di una %s + Vuoi stampare le packing list degli ordini chiusi? + Vuoi stampare le etichette SSCC degli ordini chiusi? + Stampa solo le nuove etichette + Stampa tutte le etichette Crea nuova UL Visualizza basket Apri UL @@ -383,4 +391,17 @@ Nuovo articolo in griglia Seleziona la riga da modificare Colli in arrivo + Linee di produzione + Nessuna linea disponibile + In lavorazione + In pausa + Ferma + Risorse allocate + Ordini in lavorazione + Ridistribuisci risorse + Avvia nuova produzione + Arresta produzione + Inizio produzione + Ultima produzione + Nessuna linea disponibile \ No newline at end of file diff --git a/app/src/main/res/values/buttons_style.xml b/app/src/main/res/values/buttons_style.xml index ab5ce6a4..32a7b14e 100644 --- a/app/src/main/res/values/buttons_style.xml +++ b/app/src/main/res/values/buttons_style.xml @@ -3,46 +3,53 @@ - - - + + \ No newline at end of file diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 116c8646..189b3627 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -26,8 +26,9 @@ - - + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 798447af..76328c7f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,6 +45,7 @@ Waiting Loading Completed + Success Search… Login Permissions are required for app to work properly @@ -283,6 +284,10 @@ Placement Do you want print a %s? + Do you want print the packing lists of the closed orders? + Do you want print the SSCC labels for the closed orders? + Print only new labels + Print all labels Create new LU View basket Open LU @@ -392,4 +397,17 @@ Newly added product Select document row to edit Incoming packages + Production lines + No line available + in progress + Stand by + Stopped + Resources set + Orders in progress + Redistribute resources + Start production + Stop production + Production start + Last production + No production line available