diff --git a/config/services.php b/config/services.php new file mode 100644 index 000000000..79457cade --- /dev/null +++ b/config/services.php @@ -0,0 +1,90 @@ +services(); + $parameters = $container->parameters(); + $container->import('services/**/*.php'); + + $parameters->set('sylius_refund.default_logo_file', '@SyliusRefundPlugin/assets/sylius-logo.png'); + $parameters->set('sylius_refund.template.logo_file', '%env(default:sylius_refund.default_logo_file:resolve:SYLIUS_REFUND_LOGO_FILE)%'); + + $services->defaults() + ->public(); + + $services->set('sylius_refund.calculator.unit_refund_total', UnitRefundTotalCalculator::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(UnitRefundTotalCalculatorInterface::class, 'sylius_refund.calculator.unit_refund_total'); + + $services->set('sylius_refund.refunder.order_item_units', OrderItemUnitsRefunder::class) + ->args([ + service('sylius_refund.creator.refund'), + service('sylius.event_bus'), + service('sylius_refund.filter.unit_refund'), + ]) + ->tag('sylius_refund.refunder'); + + $services->set('sylius_refund.refunder.order_shipments', OrderShipmentsRefunder::class) + ->args([ + service('sylius_refund.creator.refund'), + service('sylius.event_bus'), + service('sylius_refund.filter.unit_refund'), + ]) + ->tag('sylius_refund.refunder'); + + $services->set('sylius_refund.twig.extension.order_refunds', OrderRefundsExtension::class) + ->args([ + service('sylius_refund.provider.order_refunded_total'), + service(UnitRefundedTotalProviderInterface::class), + service('sylius_refund.checker.unit_refunding_availability'), + service('sylius.repository.order'), + service('sylius_refund.repository.refund_payment'), + service('sylius_refund.factory.refund_type'), + ]) + ->tag('twig.extension'); + + $services->set('sylius_refund.twig.extension.order_refund_availability', OrderRefundAvailabilityExtension::class) + ->args([service('sylius_refund.checker.order_refunds_list_availability')]) + ->tag('twig.extension'); + + $services->set('sylius_refund.repository.credit_memo_sequence', EntityRepository::class) + ->args([CreditMemoSequence::class]) + ->factory([service('doctrine.orm.entity_manager'), 'getRepository']); + + $services->set('sylius_refund.email_sender.credit_memo', CreditMemoEmailSender::class) + ->args([ + service('sylius.email_sender'), + '%sylius_refund.pdf_generator.enabled%', + service('sylius_refund.resolver.credit_memo_file'), + service('sylius_refund.resolver.credit_memo_file_path'), + ]); + + $services->alias(CreditMemoEmailSenderInterface::class, 'sylius_refund.email_sender.credit_memo'); + + $services->set('sylius_refund.response_builder.credit_memo_file', CreditMemoFileResponseBuilder::class); + + $services->alias(CreditMemoFileResponseBuilderInterface::class, 'sylius_refund.response_builder.credit_memo_file'); + + $services->set('sylius_refund.manager.credit_memo_file', CreditMemoFileManager::class) + ->args([service('gaufrette.sylius_refund_credit_memo_filesystem')]); + + $services->alias(CreditMemoFileManagerInterface::class, 'sylius_refund.manager.credit_memo_file'); +}; diff --git a/config/services.xml b/config/services.xml deleted file mode 100644 index ef297f65c..000000000 --- a/config/services.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - @SyliusRefundPlugin/assets/sylius-logo.png - %env(default:sylius_refund.default_logo_file:resolve:SYLIUS_REFUND_LOGO_FILE)% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sylius\RefundPlugin\Entity\CreditMemoSequence - - - - - %sylius_refund.pdf_generator.enabled% - - - - - - - - - - - - - - diff --git a/config/services/actions.php b/config/services/actions.php new file mode 100644 index 000000000..3bb2c5f6b --- /dev/null +++ b/config/services/actions.php @@ -0,0 +1,70 @@ +services(); + $parameters = $container->parameters(); + + $services->defaults() + ->public(); + + $services->set('sylius_refund.controller.admin.download_credit_memo', AdminDownloadCreditMemoAction::class) + ->args([ + service('sylius_refund.resolver.credit_memo_file'), + service('sylius_refund.response_builder.credit_memo_file'), + '%sylius_refund.pdf_generator.enabled%', + ]); + + $services->set('sylius_refund.controller.shop.download_credit_memo', ShopDownloadCreditMemoAction::class) + ->args([ + service('sylius_refund.resolver.credit_memo_file'), + service('sylius_refund.checker.credit_memo_customer_relation'), + service('sylius_refund.response_builder.credit_memo_file'), + '%sylius_refund.pdf_generator.enabled%', + ]); + + $services->set('sylius_refund.controller.admin.order_refunds_list', OrderRefundsListAction::class) + ->args([ + service('sylius.repository.order'), + service('sylius_refund.checker.order_refunds_list_availability'), + service('sylius_refund.provider.refund_payment_methods'), + service('twig'), + service('request_stack'), + service('router'), + ]); + + $services->set('sylius_refund.controller.admin.refund_units', RefundUnitsAction::class) + ->args([ + service('sylius.command_bus'), + service('request_stack'), + service('router'), + service('sylius_refund.creator.request_command'), + service('monolog.logger'), + service('security.csrf.token_manager'), + ]); + + $services->set('sylius_refund.controller.complete_refund_payment', CompleteRefundPaymentAction::class) + ->args([ + service('request_stack'), + service('sylius_refund.repository.refund_payment'), + service('sylius.repository.order'), + service('sylius_refund.state_resolver.refund_payment_completed_applier'), + service('router'), + ]); + + $services->set('sylius_refund.controller.admin.send_credit_memo', SendCreditMemoAction::class) + ->args([ + service('sylius.command_bus'), + service('sylius_refund.repository.credit_memo'), + service('request_stack'), + service('router'), + ]); +}; diff --git a/config/services/actions.xml b/config/services/actions.xml deleted file mode 100644 index 8c9745644..000000000 --- a/config/services/actions.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - %sylius_refund.pdf_generator.enabled% - - - - - - - %sylius_refund.pdf_generator.enabled% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/checkers.php b/config/services/checkers.php new file mode 100644 index 000000000..8a9d43623 --- /dev/null +++ b/config/services/checkers.php @@ -0,0 +1,47 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.checker.credit_memo_customer_relation', CreditMemoCustomerRelationChecker::class) + ->args([ + service('sylius.context.customer'), + service('sylius_refund.repository.credit_memo'), + ]); + + $services->alias(CreditMemoCustomerRelationCheckerInterface::class, 'sylius_refund.checker.credit_memo_customer_relation'); + + $services->set('sylius_refund.checker.order_refunding_availability', OrderRefundingAvailabilityChecker::class) + ->args([ + service('sylius.repository.order'), + service('sylius_abstraction.state_machine'), + ]); + + $services->set('sylius_refund.checker.order_refunds_list_availability', OrderRefundsListAvailabilityChecker::class) + ->args([ + service('sylius.repository.order'), + service('sylius_refund.checker.order_refunding_availability'), + ]); + + $services->set('sylius_refund.checker.order_fully_refunded_total', OrderFullyRefundedTotalChecker::class) + ->args([service('sylius_refund.provider.order_refunded_total')]); + + $services->alias(OrderFullyRefundedTotalCheckerInterface::class, 'sylius_refund.checker.order_fully_refunded_total'); + + $services->set('sylius_refund.checker.unit_refunding_availability', UnitRefundingAvailabilityChecker::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(UnitRefundingAvailabilityCheckerInterface::class, 'sylius_refund.checker.unit_refunding_availability'); +}; diff --git a/config/services/checkers.xml b/config/services/checkers.xml deleted file mode 100644 index e2f4fe30a..000000000 --- a/config/services/checkers.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/command_bus.php b/config/services/command_bus.php new file mode 100644 index 000000000..865ded023 --- /dev/null +++ b/config/services/command_bus.php @@ -0,0 +1,39 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.command_handler.refund_units', RefundUnitsHandler::class) + ->args([ + tagged_iterator('sylius_refund.refunder'), + service('sylius.event_bus'), + service('sylius.repository.order'), + service('sylius_refund.validator.refund_units_command'), + ]) + ->tag('messenger.message_handler', ['bus' => 'sylius.command_bus']); + + $services->set('sylius_refund.command_handler.generate_credit_memo', GenerateCreditMemoHandler::class) + ->args([ + service('sylius_refund.generator.credit_memo'), + service('sylius_refund.manager.credit_memo'), + service('sylius.event_bus'), + service('sylius.repository.order'), + service('sylius_refund.resolver.credit_memo_file'), + '%sylius_refund.pdf_generator.enabled%', + ]) + ->tag('messenger.message_handler', ['bus' => 'sylius.command_bus']); + + $services->set('sylius_refund.command_handler.send_credit_memo', SendCreditMemoHandler::class) + ->args([ + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.email_sender.credit_memo'), + ]) + ->tag('messenger.message_handler', ['bus' => 'sylius.command_bus']); +}; diff --git a/config/services/command_bus.xml b/config/services/command_bus.xml deleted file mode 100644 index 0c4941b22..000000000 --- a/config/services/command_bus.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - %sylius_refund.pdf_generator.enabled% - - - - - - - - - - diff --git a/config/services/converters.php b/config/services/converters.php new file mode 100644 index 000000000..6f6032c35 --- /dev/null +++ b/config/services/converters.php @@ -0,0 +1,67 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.converter.line_items', CompositeLineItemConverter::class) + ->args([ + tagged_iterator('sylius_refund.line_item_converter'), + service('sylius_refund.filter.unit_refund'), + ]); + + $services->alias(LineItemsConverterInterface::class, 'sylius_refund.converter.line_items'); + + $services->alias('sylius_refund.converter.line_items.composite', 'sylius_refund.converter.line_items'); + + $services->set('sylius_refund.converter.request_to_refund_units', RequestToRefundUnitsConverter::class) + ->args([tagged_iterator('sylius_refund.request_to_refund_units_converter')]); + + $services->alias(RequestToRefundUnitsConverterInterface::class, 'sylius_refund.converter.request_to_refund_units'); + + $services->set('sylius_refund.converter.request_to_shipment_refund', RequestToShipmentRefundConverter::class) + ->args([service('sylius_refund.converter.refund_units')]) + ->tag('sylius_refund.request_to_refund_units_converter'); + + $services->alias(RequestToShipmentRefundConverter::class, 'sylius_refund.converter.request_to_shipment_refund'); + + $services->set('sylius_refund.converter.request_to_order_item_unit_refund', RequestToOrderItemUnitRefundConverter::class) + ->args([service('sylius_refund.converter.refund_units')]) + ->tag('sylius_refund.request_to_refund_units_converter'); + + $services->alias(RequestToOrderItemUnitRefundConverter::class, 'sylius_refund.converter.request_to_order_item_unit_refund'); + + $services->set('sylius_refund.converter.line_items.order_item_unit', OrderItemUnitLineItemsConverter::class) + ->args([ + service('sylius.repository.order_item_unit'), + service('sylius_refund.provider.tax_rate'), + service('sylius_refund.factory.line_item'), + ]) + ->tag('sylius_refund.line_item_converter'); + + $services->set('sylius_refund.converter.line_items.shipment', ShipmentLineItemsConverter::class) + ->args([ + service('sylius.repository.adjustment'), + service('sylius_refund.provider.tax_rate'), + service('sylius_refund.factory.line_item'), + ]) + ->tag('sylius_refund.line_item_converter'); + + $services->set('sylius_refund.converter.refund_units', RefundUnitsConverter::class) + ->args([service('sylius_refund.calculator.unit_refund_total')]); + + $services->alias(RefundUnitsConverterInterface::class, 'sylius_refund.converter.refund_units'); +}; diff --git a/config/services/converters.xml b/config/services/converters.xml deleted file mode 100644 index 5be09f48c..000000000 --- a/config/services/converters.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/creators.php b/config/services/creators.php new file mode 100644 index 000000000..b7c5218c0 --- /dev/null +++ b/config/services/creators.php @@ -0,0 +1,28 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.creator.refund', RefundCreator::class) + ->args([ + service('sylius_refund.factory.refund'), + service('sylius_refund.provider.remaining_total'), + service('sylius.repository.order'), + service('sylius_refund.manager.refund'), + ]); + + $services->alias(RefundCreatorInterface::class, 'sylius_refund.creator.refund'); + + $services->set('sylius_refund.creator.request_command', RefundUnitsCommandCreator::class) + ->args([service('sylius_refund.converter.request_to_refund_units')]); + + $services->alias(RequestCommandCreatorInterface::class, 'sylius_refund.creator.request_command'); +}; diff --git a/config/services/creators.xml b/config/services/creators.xml deleted file mode 100644 index b325320bb..000000000 --- a/config/services/creators.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/event_bus.php b/config/services/event_bus.php new file mode 100644 index 000000000..40b4d110a --- /dev/null +++ b/config/services/event_bus.php @@ -0,0 +1,48 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.listener.credit_memo_generated', CreditMemoGeneratedEventListener::class) + ->public() + ->args([service('sylius.command_bus')]) + ->tag('messenger.message_handler', ['bus' => 'sylius.event_bus']); + + $services->set('sylius_refund.listener.unit_refunded', UnitRefundedEventListener::class) + ->public() + ->args([service('sylius_refund.state_resolver.order_partially_refunded')]) + ->tag('messenger.message_handler', ['bus' => 'sylius.event_bus']); + + $services->set('sylius_refund.process_manager.units_refunded', UnitsRefundedProcessManager::class) + ->public() + ->args([tagged_iterator('sylius_refund.units_refunded.process_step')]) + ->tag('messenger.message_handler', ['bus' => 'sylius.event_bus']); + + $services->alias(UnitsRefundedProcessManagerInterface::class, 'sylius_refund.process_manager.units_refunded'); + + $services->set('sylius_refund.process_manager.refund_payment', RefundPaymentProcessManager::class) + ->args([ + service('sylius_refund.state_resolver.order_fully_refunded'), + service('sylius_refund.provider.related_payment_id'), + service('sylius_refund.factory.refund_payment'), + service('sylius.repository.order'), + service('sylius.repository.payment_method'), + service('doctrine.orm.default_entity_manager'), + service('sylius.event_bus'), + ]) + ->tag('sylius_refund.units_refunded.process_step', ['priority' => 50]); + + $services->set('sylius_refund.process_manager.credit_memo', CreditMemoProcessManager::class) + ->args([service('sylius.command_bus')]) + ->tag('sylius_refund.units_refunded.process_step', ['priority' => 100]); +}; diff --git a/config/services/event_bus.xml b/config/services/event_bus.xml deleted file mode 100644 index f6aa78590..000000000 --- a/config/services/event_bus.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/factories.php b/config/services/factories.php new file mode 100644 index 000000000..69a1519cb --- /dev/null +++ b/config/services/factories.php @@ -0,0 +1,50 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.factory.credit_memo_sequence', CreditMemoSequenceFactory::class); + + $services->alias(CreditMemoSequenceFactoryInterface::class, 'sylius_refund.factory.credit_memo_sequence'); + + $services->set('sylius_refund.factory.refund_type', RefundTypeFactory::class) + ->args(['%sylius_refund.refund_type%']); + + $services->alias(RefundTypeFactoryInterface::class, 'sylius_refund.factory.refund_type'); + + $services->set('sylius_refund.factory.line_item', LineItemFactory::class) + ->args(['%sylius_refund.model.line_item.class%']); + + $services->alias(LineItemFactoryInterface::class, 'sylius_refund.factory.line_item'); + + $services->set('sylius_refund.custom_factory.credit_memo', CreditMemoFactory::class) + ->decorate('sylius_refund.factory.credit_memo', null, 256) + ->args([ + service('.inner'), + service('sylius_refund.generator.credit_memo_identifier'), + service('sylius_refund.generator.credit_memo_number'), + service(CurrentDateTimeImmutableProviderInterface::class), + ]); + + $services->set('sylius_refund.custom_factory.shop_billing_data', ShopBillingDataFactory::class) + ->decorate('sylius_refund.factory.shop_billing_data', null, 256) + ->args([service('.inner')]); + + $services->set('sylius_refund.custom_factory.customer_billing_data', CustomerBillingDataFactory::class) + ->decorate('sylius_refund.factory.customer_billing_data', null, 256) + ->args([service('.inner')]); +}; diff --git a/config/services/factories.xml b/config/services/factories.xml deleted file mode 100644 index aba719e7e..000000000 --- a/config/services/factories.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - %sylius_refund.refund_type% - - - - - %sylius_refund.model.line_item.class% - - - - - - - - - - - - - - - - - - - diff --git a/config/services/filters.php b/config/services/filters.php new file mode 100644 index 000000000..dfa6b53d6 --- /dev/null +++ b/config/services/filters.php @@ -0,0 +1,15 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.filter.unit_refund', UnitRefundFilter::class); + + $services->alias(UnitRefundFilterInterface::class, 'sylius_refund.filter.unit_refund'); +}; diff --git a/config/services/filters.xml b/config/services/filters.xml deleted file mode 100644 index ee832b969..000000000 --- a/config/services/filters.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - diff --git a/config/services/generators.php b/config/services/generators.php new file mode 100644 index 000000000..fe5cbfc16 --- /dev/null +++ b/config/services/generators.php @@ -0,0 +1,87 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.generator.credit_memo_number', SequentialCreditMemoNumberGenerator::class) + ->args([ + service('sylius_refund.repository.credit_memo_sequence'), + service('sylius_refund.factory.credit_memo_sequence'), + service('doctrine.orm.entity_manager'), + ]); + + $services->alias(CreditMemoNumberGeneratorInterface::class, 'sylius_refund.generator.credit_memo_number'); + + $services->set('sylius_refund.generator.credit_memo', CreditMemoGenerator::class) + ->args([ + service('sylius_refund.converter.line_items'), + service('sylius_refund.generator.tax_items'), + service('sylius_refund.factory.credit_memo'), + service('sylius_refund.factory.customer_billing_data'), + service('sylius_refund.factory.shop_billing_data'), + ]); + + $services->alias(CreditMemoGeneratorInterface::class, 'sylius_refund.generator.credit_memo'); + + $services->set('sylius_refund.generator.credit_memo_file_name', CreditMemoFileNameGenerator::class); + + $services->alias(CreditMemoFileNameGeneratorInterface::class, 'sylius_refund.generator.credit_memo_file_name'); + + $services->set('sylius_refund.generator.credit_memo_pdf_file', CreditMemoPdfFileGenerator::class) + ->args([ + service('sylius_refund.repository.credit_memo'), + service('file_locator'), + '@SyliusRefundPlugin/download/credit_memo.html.twig', + '%sylius_refund.template.logo_file%', + service('sylius_refund.generator.twig_to_pdf'), + service('sylius_refund.generator.credit_memo_file_name'), + ]); + + $services->alias(CreditMemoPdfFileGeneratorInterface::class, 'sylius_refund.generator.credit_memo_pdf_file'); + + $services->set('sylius_refund.generator.tax_items', TaxItemsGenerator::class); + + $services->alias(TaxItemsGeneratorInterface::class, 'sylius_refund.generator.tax_items'); + + $services->set('sylius_refund.generator.credit_memo_identifier', UuidCreditMemoIdentifierGenerator::class); + + $services->alias(CreditMemoIdentifierGeneratorInterface::class, 'sylius_refund.generator.credit_memo_identifier'); + + $services->set('sylius_refund.generator.pdf_options', PdfOptionsGenerator::class) + ->args([ + service('file_locator'), + '%knp_snappy.pdf.options%', + '%sylius_refund.pdf_generator.allowed_files%', + ]); + + $services->alias(PdfOptionsGeneratorInterface::class, 'sylius_refund.generator.pdf_options'); + + $services->set('sylius_refund.generator.twig_to_pdf', TwigToPdfGenerator::class) + ->args([ + service('twig'), + service('knp_snappy.pdf'), + service('sylius_refund.generator.pdf_options'), + ]); + + $services->alias(TwigToPdfGeneratorInterface::class, 'sylius_refund.generator.twig_to_pdf'); +}; diff --git a/config/services/generators.xml b/config/services/generators.xml deleted file mode 100644 index 9755038f0..000000000 --- a/config/services/generators.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @SyliusRefundPlugin/download/credit_memo.html.twig - %sylius_refund.template.logo_file% - - - - - - - - - - - - - - %knp_snappy.pdf.options% - %sylius_refund.pdf_generator.allowed_files% - - - - - - - - - - - diff --git a/config/services/listeners.php b/config/services/listeners.php new file mode 100644 index 000000000..d33e41079 --- /dev/null +++ b/config/services/listeners.php @@ -0,0 +1,16 @@ +services(); + $parameters = $container->parameters(); + + $services->defaults() + ->public(); + + $services->set('sylius_refund.listener.admin_main_menu', AdminMainMenuListener::class) + ->tag('kernel.event_listener', ['event' => 'sylius.menu.admin.main', 'method' => 'addCreditMemosSection']); +}; diff --git a/config/services/listeners.xml b/config/services/listeners.xml deleted file mode 100644 index 2b220e0f3..000000000 --- a/config/services/listeners.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/config/services/providers.php b/config/services/providers.php new file mode 100644 index 000000000..51d13172d --- /dev/null +++ b/config/services/providers.php @@ -0,0 +1,92 @@ +services(); + $parameters = $container->parameters(); + $parameters->set('sylius_refund.supported_gateways', ['offline']); + + $services->set('sylius_refund.provider.credit_memo_file', CreditMemoFileProvider::class) + ->args([ + service('sylius_refund.generator.credit_memo_file_name'), + service('sylius_refund.manager.credit_memo_file'), + ]); + + $services->alias(CreditMemoFileProviderInterface::class, 'sylius_refund.provider.credit_memo_file'); + + $services->set('sylius_refund.provider.refunded_shipment_fee', RefundedShipmentFeeProvider::class) + ->args([service('sylius.repository.adjustment')]); + + $services->alias(RefundedShipmentFeeProviderInterface::class, 'sylius_refund.provider.refunded_shipment_fee'); + + $services->set('sylius_refund.provider.order_refunded_total', OrderRefundedTotalProvider::class) + ->args([ + service('sylius_refund.repository.refund'), + service('sylius.repository.order_item_unit'), + ]); + + $services->alias(OrderRefundedTotalProviderInterface::class, 'sylius_refund.provider.order_refunded_total'); + + $services->set('sylius_refund.provider.current_date_time_immutable', CurrentDateTimeImmutableProvider::class); + + $services->alias(CurrentDateTimeImmutableProviderInterface::class, 'sylius_refund.provider.current_date_time_immutable'); + + $services->set('sylius_refund.provider.order_item_unit_total', OrderItemUnitTotalProvider::class) + ->args([service('sylius.repository.order_item_unit')]) + ->tag('sylius_refund.refund_unit_total_provider'); + + $services->set('sylius_refund.provider.shipment_total', ShipmentTotalProvider::class) + ->args([service('sylius.repository.adjustment')]) + ->tag('sylius_refund.refund_unit_total_provider'); + + $services->set('sylius_refund.provider.remaining_total', RemainingTotalProvider::class) + ->args([ + tagged_locator('sylius_refund.refund_unit_total_provider', indexAttribute: 'refund_type', defaultIndexMethod: 'refundType'), + service('sylius_refund.repository.refund'), + ]); + + $services->alias(RemainingTotalProviderInterface::class, 'sylius_refund.provider.remaining_total'); + + $services->set('sylius_refund.provider.unit_refunded_total', UnitRefundedTotalProvider::class) + ->args([service('sylius_refund.repository.refund')]); + + $services->alias(UnitRefundedTotalProviderInterface::class, 'sylius_refund.provider.unit_refunded_total'); + + $services->set('sylius_refund.provider.related_payment_id', DefaultRelatedPaymentIdProvider::class); + + $services->alias(RelatedPaymentIdProviderInterface::class, 'sylius_refund.provider.related_payment_id'); + + $services->set('sylius_refund.provider.refund_payment_methods', SupportedRefundPaymentMethodsProvider::class) + ->args([ + service('sylius.repository.payment_method'), + '%sylius_refund.supported_gateways%', + ]); + + $services->alias(RefundPaymentMethodsProviderInterface::class, 'sylius_refund.provider.refund_payment_methods'); + + $services->set('sylius_refund.provider.tax_rate', TaxRateProvider::class); + + $services->alias(TaxRateProviderInterface::class, 'sylius_refund.provider.tax_rate'); +}; diff --git a/config/services/providers.xml b/config/services/providers.xml deleted file mode 100644 index ac0d194d3..000000000 --- a/config/services/providers.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - offline - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %sylius_refund.supported_gateways% - - - - - - - diff --git a/config/services/queries.php b/config/services/queries.php new file mode 100644 index 000000000..729660e48 --- /dev/null +++ b/config/services/queries.php @@ -0,0 +1,17 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.doctrine.orm.query.count_order_item_unit_refunds_belonging_to_order', CountOrderItemUnitRefundsBelongingToOrderQuery::class) + ->args([service('sylius.repository.order_item_unit')]); + + $services->set('sylius_refund.doctrine.orm.query.count_shipment_refunds_belonging_to_order', CountShipmentRefundsBelongingToOrderQuery::class) + ->args([service('sylius.repository.adjustment')]); +}; diff --git a/config/services/queries.xml b/config/services/queries.xml deleted file mode 100644 index 1377e7538..000000000 --- a/config/services/queries.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/config/services/resolvers.php b/config/services/resolvers.php new file mode 100644 index 000000000..365453068 --- /dev/null +++ b/config/services/resolvers.php @@ -0,0 +1,28 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.resolver.credit_memo_file', CreditMemoFileResolver::class) + ->args([ + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.provider.credit_memo_file'), + service('sylius_refund.generator.credit_memo_pdf_file'), + service('sylius_refund.manager.credit_memo_file'), + ]); + + $services->alias(CreditMemoFileResolverInterface::class, 'sylius_refund.resolver.credit_memo_file'); + + $services->set('sylius_refund.resolver.credit_memo_file_path', CreditMemoFilePathResolver::class) + ->args(['%sylius_refund.credit_memo_save_path%']); + + $services->alias(CreditMemoFilePathResolverInterface::class, 'sylius_refund.resolver.credit_memo_file_path'); +}; diff --git a/config/services/resolvers.xml b/config/services/resolvers.xml deleted file mode 100644 index 1296a5da2..000000000 --- a/config/services/resolvers.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - %sylius_refund.credit_memo_save_path% - - - - diff --git a/config/services/state_resolvers.php b/config/services/state_resolvers.php new file mode 100644 index 000000000..552334297 --- /dev/null +++ b/config/services/state_resolvers.php @@ -0,0 +1,42 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.state_resolver.order_fully_refunded', OrderFullyRefundedStateResolver::class) + ->args([ + service('sylius_abstraction.state_machine'), + service('sylius.manager.order'), + service('sylius_refund.checker.order_fully_refunded_total'), + service('sylius.repository.order'), + ]); + + $services->alias(OrderFullyRefundedStateResolverInterface::class, 'sylius_refund.state_resolver.order_fully_refunded'); + + $services->set('sylius_refund.state_resolver.order_partially_refunded', OrderPartiallyRefundedStateResolver::class) + ->args([ + service('sylius.repository.order'), + service('sylius_abstraction.state_machine'), + service('sylius.manager.order'), + ]); + + $services->alias(OrderPartiallyRefundedStateResolverInterface::class, 'sylius_refund.state_resolver.order_partially_refunded'); + + $services->set('sylius_refund.state_resolver.refund_payment_completed_applier', RefundPaymentCompletedStateApplier::class) + ->args([ + service('sylius_abstraction.state_machine'), + service('sylius_refund.manager.refund_payment'), + ]); + + $services->alias(RefundPaymentCompletedStateApplierInterface::class, 'sylius_refund.state_resolver.refund_payment_completed_applier'); +}; diff --git a/config/services/state_resolvers.xml b/config/services/state_resolvers.xml deleted file mode 100644 index a28186272..000000000 --- a/config/services/state_resolvers.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/services/twig_components.php b/config/services/twig_components.php new file mode 100644 index 000000000..215195b3c --- /dev/null +++ b/config/services/twig_components.php @@ -0,0 +1,15 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.twig_component.customer_credit_memos', OrderCreditMemosComponent::class) + ->args([service('sylius_refund.repository.credit_memo')]) + ->tag('sylius.twig_component', ['key' => 'sylius_refund:shop:account:credit_memos']) + ->tag('sylius.twig_component', ['key' => 'sylius_refund:admin:credit_memos']); +}; diff --git a/config/services/twig_components.xml b/config/services/twig_components.xml deleted file mode 100644 index 2554c076b..000000000 --- a/config/services/twig_components.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - diff --git a/config/services/validators.php b/config/services/validators.php new file mode 100644 index 000000000..1d3544b06 --- /dev/null +++ b/config/services/validators.php @@ -0,0 +1,43 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.validator.refund_units_command', RefundUnitsCommandValidator::class) + ->args([ + service('sylius_refund.checker.order_refunding_availability'), + service('sylius_refund.validator.refund_amount'), + tagged_iterator('sylius_refund.validator.unit_refunds_belonging_to_order'), + ]); + + $services->alias(RefundUnitsCommandValidatorInterface::class, 'sylius_refund.validator.refund_units_command'); + + $services->set('sylius_refund.validator.order_item_unit_refunds_belonging_to_order', OrderItemUnitRefundsBelongingToOrderValidator::class) + ->args([ + service('sylius_refund.filter.unit_refund'), + service('sylius_refund.doctrine.orm.query.count_order_item_unit_refunds_belonging_to_order'), + ]) + ->tag('sylius_refund.validator.unit_refunds_belonging_to_order'); + + $services->set('sylius_refund.validator.shipment_refunds_belonging_to_order', ShipmentRefundsBelongingToOrderValidator::class) + ->args([ + service('sylius_refund.filter.unit_refund'), + service('sylius_refund.doctrine.orm.query.count_shipment_refunds_belonging_to_order'), + ]) + ->tag('sylius_refund.validator.unit_refunds_belonging_to_order'); + + $services->set('sylius_refund.validator.refund_amount', RefundAmountValidator::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(RefundAmountValidatorInterface::class, 'sylius_refund.validator.refund_amount'); +}; diff --git a/config/services/validators.xml b/config/services/validators.xml deleted file mode 100644 index a4f146649..000000000 --- a/config/services/validators.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/DependencyInjection/SyliusRefundExtension.php b/src/DependencyInjection/SyliusRefundExtension.php index 1752bdf83..9cf89d0e4 100644 --- a/src/DependencyInjection/SyliusRefundExtension.php +++ b/src/DependencyInjection/SyliusRefundExtension.php @@ -24,7 +24,7 @@ use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface; -use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; final class SyliusRefundExtension extends AbstractResourceExtension implements PrependExtensionInterface { @@ -38,8 +38,8 @@ public function load(array $configs, ContainerBuilder $container): void $configs = $this->processConfiguration($configuration, $configs); - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config')); - $loader->load('services.xml'); + $loader = new PhpFileLoader($container, new FileLocator(__DIR__ . '/../../config')); + $loader->load('services.php'); $this->tagsAutoconfiguration($container, [ 'sylius_refund.units_refunded.process_step' => UnitsRefundedProcessStepInterface::class, diff --git a/tests/Behat/Resources/services.php b/tests/Behat/Resources/services.php new file mode 100644 index 000000000..a3862aadb --- /dev/null +++ b/tests/Behat/Resources/services.php @@ -0,0 +1,160 @@ +services(); + $parameters = $container->parameters(); + $parameters->set('sylius.behat.page.admin.order.show.class', AdminOrderShowPage::class); + $parameters->set('sylius.behat.page.shop.order.show.class', ShopOrderShowPage::class); + + $services->defaults() + ->public(); + + $services->set(OrderRefundsPage::class) + ->parent('sylius.behat.symfony_page'); + + $services->set(CreditMemoDetailsPage::class) + ->parent('sylius.behat.symfony_page') + ->args([service('sylius.behat.table_accessor')]); + + $services->set(CreditMemoIndexPage::class) + ->parent('sylius.behat.page.admin.crud.index') + ->args(['sylius_refund_admin_credit_memo_index']); + + $services->set(Element::class) + ->private() + ->abstract() + ->args([ + service('behat.mink.default_session'), + service('behat.mink.parameters'), + ]); + + $services->set(PdfDownloadElement::class) + ->private() + ->parent(Element::class); + + $services->set(ApplicationRefundingContext::class) + ->args([ + service('sylius.repository.order'), + service('sylius_refund.repository.refund'), + service('sylius_refund.provider.remaining_total'), + service('sylius.command_bus'), + service('sylius.behat.email_checker'), + ]); + + $services->set(ApplicationCreditMemoContext::class) + ->args([ + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.provider.current_date_time_immutable'), + '%sylius_refund.credit_memo_save_path%', + ]); + + $services->set(ManagingOrdersContext::class) + ->args([ + service('sylius.behat.page.admin.order.show'), + service('sylius.behat.page.admin.order.index'), + service('sylius.behat.notification_checker.shop'), + ]); + + $services->set(UiRefundingContext::class) + ->args([ + service(OrderRefundsPage::class), + service('sylius.behat.notification_checker.admin'), + service('sylius.behat.email_checker'), + ]); + + $services->set(UiCreditMemoContext::class) + ->args([ + service('sylius.behat.page.admin.order.show'), + service(CreditMemoIndexPage::class), + service(CreditMemoDetailsPage::class), + service(PdfDownloadElement::class), + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.provider.current_date_time_immutable'), + ]); + + $services->set(SetupRefundingContext::class) + ->args([ + service('sylius.repository.order'), + service('sylius.command_bus'), + service(FailedCreditMemoGenerator::class), + service(FailedRefundPaymentFactory::class), + ]); + + $services->set(SetupOrderContext::class) + ->args([ + service('sylius.manager.order'), + service('sylius.behat.shared_storage'), + service('sylius_abstraction.state_machine'), + ]); + + $services->set(PaymentContext::class) + ->args([ + service('sylius_abstraction.state_machine'), + service('sylius.behat.shared_storage'), + ]); + + $services->set(TransformOrderContext::class) + ->args([service('sylius.repository.order')]); + + $services->set(PriceContext::class); + + $services->set(ShopCustomerCreditMemoContext::class) + ->args([ + service('sylius.behat.page.shop.order.show'), + service(PdfDownloadElement::class), + ]); + + $services->set(ChannelContext::class) + ->args([ + service('sylius.behat.shared_storage'), + service('sylius.behat.factory.default_united_states_channel'), + service('sylius.behat.factory.default_channel'), + service('sylius.manager.channel'), + ]); + + $services->set(EmailsContext::class) + ->args([service('sylius.behat.email_checker')]); + + $services->set(ProductContext::class) + ->args([service('sylius.behat.context.setup.product')]); + + $services->set(CreditMemosContext::class) + ->args(['%sylius_refund.credit_memo_save_path%']); + + $services->set(FailedRefundPaymentFactory::class) + ->private() + ->decorate('sylius_refund.factory.refund_payment') + ->args([service('.inner')]); + + $services->set(FailedCreditMemoGenerator::class) + ->private() + ->decorate('sylius_refund.generator.credit_memo') + ->args([service('.inner')]); +}; diff --git a/tests/Behat/Resources/services.xml b/tests/Behat/Resources/services.xml deleted file mode 100644 index 579220efe..000000000 --- a/tests/Behat/Resources/services.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - Tests\Sylius\RefundPlugin\Behat\Page\Admin\Order\ShowPage - Tests\Sylius\RefundPlugin\Behat\Page\Shop\Order\ShowPage - - - - - - - - - - - sylius_refund_admin_credit_memo_index - - - - - - - - - - - - - - - - - - - - %sylius_refund.credit_memo_save_path% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %sylius_refund.credit_memo_save_path% - - - - - - - - - - - diff --git a/tests/TestApplication/config/config.yaml b/tests/TestApplication/config/config.yaml index 18c891fe6..cd2d45697 100644 --- a/tests/TestApplication/config/config.yaml +++ b/tests/TestApplication/config/config.yaml @@ -5,3 +5,9 @@ imports: twig: paths: '%kernel.project_dir%/../../../tests/TestApplication/templates': ~ + +knp_snappy: + pdf: + enabled: true + binary: '%env(resolve:WKHTMLTOPDF_PATH)%' + options: [] diff --git a/tests/TestApplication/config/services_test.php b/tests/TestApplication/config/services_test.php index 516df18fc..031158122 100644 --- a/tests/TestApplication/config/services_test.php +++ b/tests/TestApplication/config/services_test.php @@ -9,7 +9,7 @@ if (str_starts_with($env, 'test')) { $container->import('../../../vendor/sylius/sylius/src/Sylius/Behat/Resources/config/services.xml'); - $container->import('@SyliusRefundPlugin/tests/Behat/Resources/services.xml'); + $container->import('@SyliusRefundPlugin/tests/Behat/Resources/services.php'); } if (filter_var($_ENV['TEST_SYLIUS_REFUND_PDF_GENERATION_DISABLED'], FILTER_VALIDATE_BOOLEAN)) {