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)) {