diff --git a/config/services.php b/config/services.php new file mode 100644 index 000000000..3eb928775 --- /dev/null +++ b/config/services.php @@ -0,0 +1,74 @@ +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', \Sylius\RefundPlugin\Calculator\UnitRefundTotalCalculator::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(\Sylius\RefundPlugin\Calculator\UnitRefundTotalCalculatorInterface::class, 'sylius_refund.calculator.unit_refund_total'); + + $services->set('sylius_refund.refunder.order_item_units', \Sylius\RefundPlugin\Refunder\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', \Sylius\RefundPlugin\Refunder\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', \Sylius\RefundPlugin\Twig\OrderRefundsExtension::class) + ->args([ + service('sylius_refund.provider.order_refunded_total'), + service(\Sylius\RefundPlugin\Provider\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', \Sylius\RefundPlugin\Twig\OrderRefundAvailabilityExtension::class) + ->args([service('sylius_refund.checker.order_refunds_list_availability')]) + ->tag('twig.extension'); + + $services->set('sylius_refund.repository.credit_memo_sequence', \Doctrine\ORM\EntityRepository::class) + ->args([\Sylius\RefundPlugin\Entity\CreditMemoSequence::class]) + ->factory([service('doctrine.orm.entity_manager'), 'getRepository']); + + $services->set('sylius_refund.email_sender.credit_memo', \Sylius\RefundPlugin\Sender\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(\Sylius\RefundPlugin\Sender\CreditMemoEmailSenderInterface::class, 'sylius_refund.email_sender.credit_memo'); + + $services->set('sylius_refund.response_builder.credit_memo_file', \Sylius\RefundPlugin\ResponseBuilder\CreditMemoFileResponseBuilder::class); + + $services->alias(\Sylius\RefundPlugin\ResponseBuilder\CreditMemoFileResponseBuilderInterface::class, 'sylius_refund.response_builder.credit_memo_file'); + + $services->set('sylius_refund.manager.credit_memo_file', \Sylius\RefundPlugin\Manager\CreditMemoFileManager::class) + ->args([service('gaufrette.sylius_refund_credit_memo_filesystem')]); + + $services->alias(\Sylius\RefundPlugin\Manager\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..ff80e47db --- /dev/null +++ b/config/services/actions.php @@ -0,0 +1,63 @@ +services(); + $parameters = $container->parameters(); + + $services->defaults() + ->public(); + + $services->set('sylius_refund.controller.admin.download_credit_memo', \Sylius\RefundPlugin\Action\Admin\DownloadCreditMemoAction::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', \Sylius\RefundPlugin\Action\Shop\DownloadCreditMemoAction::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', \Sylius\RefundPlugin\Action\Admin\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', \Sylius\RefundPlugin\Action\Admin\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', \Sylius\RefundPlugin\Action\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', \Sylius\RefundPlugin\Action\Admin\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..f4871dd5b --- /dev/null +++ b/config/services/checkers.php @@ -0,0 +1,38 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.checker.credit_memo_customer_relation', \Sylius\RefundPlugin\Checker\CreditMemoCustomerRelationChecker::class) + ->args([ + service('sylius.context.customer'), + service('sylius_refund.repository.credit_memo'), + ]); + + $services->alias(\Sylius\RefundPlugin\Checker\CreditMemoCustomerRelationCheckerInterface::class, 'sylius_refund.checker.credit_memo_customer_relation'); + + $services->set('sylius_refund.checker.order_refunding_availability', \Sylius\RefundPlugin\Checker\OrderRefundingAvailabilityChecker::class) + ->args([ + service('sylius.repository.order'), + service('sylius_abstraction.state_machine'), + ]); + + $services->set('sylius_refund.checker.order_refunds_list_availability', \Sylius\RefundPlugin\Checker\OrderRefundsListAvailabilityChecker::class) + ->args([ + service('sylius.repository.order'), + service('sylius_refund.checker.order_refunding_availability'), + ]); + + $services->set('sylius_refund.checker.order_fully_refunded_total', \Sylius\RefundPlugin\Checker\OrderFullyRefundedTotalChecker::class) + ->args([service('sylius_refund.provider.order_refunded_total')]); + + $services->alias(\Sylius\RefundPlugin\Checker\OrderFullyRefundedTotalCheckerInterface::class, 'sylius_refund.checker.order_fully_refunded_total'); + + $services->set('sylius_refund.checker.unit_refunding_availability', \Sylius\RefundPlugin\Checker\UnitRefundingAvailabilityChecker::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(\Sylius\RefundPlugin\Checker\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..e358702b1 --- /dev/null +++ b/config/services/command_bus.php @@ -0,0 +1,35 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.command_handler.refund_units', \Sylius\RefundPlugin\CommandHandler\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', \Sylius\RefundPlugin\CommandHandler\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', \Sylius\RefundPlugin\CommandHandler\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..1816c5872 --- /dev/null +++ b/config/services/converters.php @@ -0,0 +1,56 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.converter.line_items', \Sylius\RefundPlugin\Converter\LineItem\CompositeLineItemConverter::class) + ->args([ + tagged_iterator('sylius_refund.line_item_converter'), + service('sylius_refund.filter.unit_refund'), + ]); + + $services->alias(\Sylius\RefundPlugin\Converter\LineItem\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', \Sylius\RefundPlugin\Converter\Request\RequestToRefundUnitsConverter::class) + ->args([tagged_iterator('sylius_refund.request_to_refund_units_converter')]); + + $services->alias(\Sylius\RefundPlugin\Converter\Request\RequestToRefundUnitsConverterInterface::class, 'sylius_refund.converter.request_to_refund_units'); + + $services->set('sylius_refund.converter.request_to_shipment_refund', \Sylius\RefundPlugin\Converter\Request\RequestToShipmentRefundConverter::class) + ->args([service('sylius_refund.converter.refund_units')]) + ->tag('sylius_refund.request_to_refund_units_converter'); + + $services->alias(\Sylius\RefundPlugin\Converter\Request\RequestToShipmentRefundConverter::class, 'sylius_refund.converter.request_to_shipment_refund'); + + $services->set('sylius_refund.converter.request_to_order_item_unit_refund', \Sylius\RefundPlugin\Converter\Request\RequestToOrderItemUnitRefundConverter::class) + ->args([service('sylius_refund.converter.refund_units')]) + ->tag('sylius_refund.request_to_refund_units_converter'); + + $services->alias(\Sylius\RefundPlugin\Converter\Request\RequestToOrderItemUnitRefundConverter::class, 'sylius_refund.converter.request_to_order_item_unit_refund'); + + $services->set('sylius_refund.converter.line_items.order_item_unit', \Sylius\RefundPlugin\Converter\LineItem\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', \Sylius\RefundPlugin\Converter\LineItem\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', \Sylius\RefundPlugin\Converter\RefundUnitsConverter::class) + ->args([service('sylius_refund.calculator.unit_refund_total')]); + + $services->alias(\Sylius\RefundPlugin\Converter\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..8266931cd --- /dev/null +++ b/config/services/creators.php @@ -0,0 +1,23 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.creator.refund', \Sylius\RefundPlugin\Creator\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(\Sylius\RefundPlugin\Creator\RefundCreatorInterface::class, 'sylius_refund.creator.refund'); + + $services->set('sylius_refund.creator.request_command', \Sylius\RefundPlugin\Creator\RefundUnitsCommandCreator::class) + ->args([service('sylius_refund.converter.request_to_refund_units')]); + + $services->alias(\Sylius\RefundPlugin\Creator\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..c176ee219 --- /dev/null +++ b/config/services/event_bus.php @@ -0,0 +1,41 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.listener.credit_memo_generated', \Sylius\RefundPlugin\Listener\CreditMemoGeneratedEventListener::class) + ->public() + ->args([service('sylius.command_bus')]) + ->tag('messenger.message_handler', ['bus' => 'sylius.event_bus']); + + $services->set('sylius_refund.listener.unit_refunded', \Sylius\RefundPlugin\Listener\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', \Sylius\RefundPlugin\ProcessManager\UnitsRefundedProcessManager::class) + ->public() + ->args([tagged_iterator('sylius_refund.units_refunded.process_step')]) + ->tag('messenger.message_handler', ['bus' => 'sylius.event_bus']); + + $services->alias(\Sylius\RefundPlugin\ProcessManager\UnitsRefundedProcessManagerInterface::class, 'sylius_refund.process_manager.units_refunded'); + + $services->set('sylius_refund.process_manager.refund_payment', \Sylius\RefundPlugin\ProcessManager\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', \Sylius\RefundPlugin\ProcessManager\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..bc9c95d30 --- /dev/null +++ b/config/services/factories.php @@ -0,0 +1,39 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.factory.credit_memo_sequence', \Sylius\RefundPlugin\Factory\CreditMemoSequenceFactory::class); + + $services->alias(\Sylius\RefundPlugin\Factory\CreditMemoSequenceFactoryInterface::class, 'sylius_refund.factory.credit_memo_sequence'); + + $services->set('sylius_refund.factory.refund_type', \Sylius\RefundPlugin\Factory\RefundTypeFactory::class) + ->args(['%sylius_refund.refund_type%']); + + $services->alias(\Sylius\RefundPlugin\Factory\RefundTypeFactoryInterface::class, 'sylius_refund.factory.refund_type'); + + $services->set('sylius_refund.factory.line_item', \Sylius\RefundPlugin\Factory\LineItemFactory::class) + ->args(['%sylius_refund.model.line_item.class%']); + + $services->alias(\Sylius\RefundPlugin\Factory\LineItemFactoryInterface::class, 'sylius_refund.factory.line_item'); + + $services->set('sylius_refund.custom_factory.credit_memo', \Sylius\RefundPlugin\Factory\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(\Sylius\RefundPlugin\Provider\CurrentDateTimeImmutableProviderInterface::class), + ]); + + $services->set('sylius_refund.custom_factory.shop_billing_data', \Sylius\RefundPlugin\Factory\ShopBillingDataFactory::class) + ->decorate('sylius_refund.factory.shop_billing_data', null, 256) + ->args([service('.inner')]); + + $services->set('sylius_refund.custom_factory.customer_billing_data', \Sylius\RefundPlugin\Factory\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..26aedf5c2 --- /dev/null +++ b/config/services/filters.php @@ -0,0 +1,12 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.filter.unit_refund', \Sylius\RefundPlugin\Filter\UnitRefundFilter::class); + + $services->alias(\Sylius\RefundPlugin\Filter\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..a2bdb821e --- /dev/null +++ b/config/services/generators.php @@ -0,0 +1,70 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.generator.credit_memo_number', \Sylius\RefundPlugin\Generator\SequentialCreditMemoNumberGenerator::class) + ->args([ + service('sylius_refund.repository.credit_memo_sequence'), + service('sylius_refund.factory.credit_memo_sequence'), + service('doctrine.orm.entity_manager'), + ]); + + $services->alias(\Sylius\RefundPlugin\Generator\CreditMemoNumberGeneratorInterface::class, 'sylius_refund.generator.credit_memo_number'); + + $services->set('sylius_refund.generator.credit_memo', \Sylius\RefundPlugin\Generator\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(\Sylius\RefundPlugin\Generator\CreditMemoGeneratorInterface::class, 'sylius_refund.generator.credit_memo'); + + $services->set('sylius_refund.generator.credit_memo_file_name', \Sylius\RefundPlugin\Generator\CreditMemoFileNameGenerator::class); + + $services->alias(\Sylius\RefundPlugin\Generator\CreditMemoFileNameGeneratorInterface::class, 'sylius_refund.generator.credit_memo_file_name'); + + $services->set('sylius_refund.generator.credit_memo_pdf_file', \Sylius\RefundPlugin\Generator\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(\Sylius\RefundPlugin\Generator\CreditMemoPdfFileGeneratorInterface::class, 'sylius_refund.generator.credit_memo_pdf_file'); + + $services->set('sylius_refund.generator.tax_items', \Sylius\RefundPlugin\Generator\TaxItemsGenerator::class); + + $services->alias(\Sylius\RefundPlugin\Generator\TaxItemsGeneratorInterface::class, 'sylius_refund.generator.tax_items'); + + $services->set('sylius_refund.generator.credit_memo_identifier', \Sylius\RefundPlugin\Generator\UuidCreditMemoIdentifierGenerator::class); + + $services->alias(\Sylius\RefundPlugin\Generator\CreditMemoIdentifierGeneratorInterface::class, 'sylius_refund.generator.credit_memo_identifier'); + + $services->set('sylius_refund.generator.pdf_options', \Sylius\RefundPlugin\Generator\PdfOptionsGenerator::class) + ->args([ + service('file_locator'), + '%knp_snappy.pdf.options%', + '%sylius_refund.pdf_generator.allowed_files%', + ]); + + $services->alias(\Sylius\RefundPlugin\Generator\PdfOptionsGeneratorInterface::class, 'sylius_refund.generator.pdf_options'); + + $services->set('sylius_refund.generator.twig_to_pdf', \Sylius\RefundPlugin\Generator\TwigToPdfGenerator::class) + ->args([ + service('twig'), + service('knp_snappy.pdf'), + service('sylius_refund.generator.pdf_options'), + ]); + + $services->alias(\Sylius\RefundPlugin\Generator\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..7dde333cd --- /dev/null +++ b/config/services/listeners.php @@ -0,0 +1,14 @@ +services(); + $parameters = $container->parameters(); + + $services->defaults() + ->public(); + + $services->set('sylius_refund.listener.admin_main_menu', \Sylius\RefundPlugin\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..56dc808d0 --- /dev/null +++ b/config/services/providers.php @@ -0,0 +1,71 @@ +services(); + $parameters = $container->parameters(); + $parameters->set('sylius_refund.supported_gateways', ['offline']); + + $services->set('sylius_refund.provider.credit_memo_file', \Sylius\RefundPlugin\Provider\CreditMemoFileProvider::class) + ->args([ + service('sylius_refund.generator.credit_memo_file_name'), + service('sylius_refund.manager.credit_memo_file'), + ]); + + $services->alias(\Sylius\RefundPlugin\Provider\CreditMemoFileProviderInterface::class, 'sylius_refund.provider.credit_memo_file'); + + $services->set('sylius_refund.provider.refunded_shipment_fee', \Sylius\RefundPlugin\Provider\RefundedShipmentFeeProvider::class) + ->args([service('sylius.repository.adjustment')]); + + $services->alias(\Sylius\RefundPlugin\Provider\RefundedShipmentFeeProviderInterface::class, 'sylius_refund.provider.refunded_shipment_fee'); + + $services->set('sylius_refund.provider.order_refunded_total', \Sylius\RefundPlugin\Provider\OrderRefundedTotalProvider::class) + ->args([ + service('sylius_refund.repository.refund'), + service('sylius.repository.order_item_unit'), + ]); + + $services->alias(\Sylius\RefundPlugin\Provider\OrderRefundedTotalProviderInterface::class, 'sylius_refund.provider.order_refunded_total'); + + $services->set('sylius_refund.provider.current_date_time_immutable', \Sylius\RefundPlugin\Provider\CurrentDateTimeImmutableProvider::class); + + $services->alias(\Sylius\RefundPlugin\Provider\CurrentDateTimeImmutableProviderInterface::class, 'sylius_refund.provider.current_date_time_immutable'); + + $services->set('sylius_refund.provider.order_item_unit_total', \Sylius\RefundPlugin\Provider\OrderItemUnitTotalProvider::class) + ->args([service('sylius.repository.order_item_unit')]) + ->tag('sylius_refund.refund_unit_total_provider'); + + $services->set('sylius_refund.provider.shipment_total', \Sylius\RefundPlugin\Provider\ShipmentTotalProvider::class) + ->args([service('sylius.repository.adjustment')]) + ->tag('sylius_refund.refund_unit_total_provider'); + + $services->set('sylius_refund.provider.remaining_total', \Sylius\RefundPlugin\Provider\RemainingTotalProvider::class) + ->args([ + tagged_locator('sylius_refund.refund_unit_total_provider', indexAttribute: 'refund_type', defaultIndexMethod: 'refundType'), + service('sylius_refund.repository.refund'), + ]); + + $services->alias(\Sylius\RefundPlugin\Provider\RemainingTotalProviderInterface::class, 'sylius_refund.provider.remaining_total'); + + $services->set('sylius_refund.provider.unit_refunded_total', \Sylius\RefundPlugin\Provider\UnitRefundedTotalProvider::class) + ->args([service('sylius_refund.repository.refund')]); + + $services->alias(\Sylius\RefundPlugin\Provider\UnitRefundedTotalProviderInterface::class, 'sylius_refund.provider.unit_refunded_total'); + + $services->set('sylius_refund.provider.related_payment_id', \Sylius\RefundPlugin\Provider\DefaultRelatedPaymentIdProvider::class); + + $services->alias(\Sylius\RefundPlugin\Provider\RelatedPaymentIdProviderInterface::class, 'sylius_refund.provider.related_payment_id'); + + $services->set('sylius_refund.provider.refund_payment_methods', \Sylius\RefundPlugin\Provider\SupportedRefundPaymentMethodsProvider::class) + ->args([ + service('sylius.repository.payment_method'), + '%sylius_refund.supported_gateways%', + ]); + + $services->alias(\Sylius\RefundPlugin\Provider\RefundPaymentMethodsProviderInterface::class, 'sylius_refund.provider.refund_payment_methods'); + + $services->set('sylius_refund.provider.tax_rate', \Sylius\RefundPlugin\Provider\TaxRateProvider::class); + + $services->alias(\Sylius\RefundPlugin\Provider\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..7a361283c --- /dev/null +++ b/config/services/queries.php @@ -0,0 +1,14 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.doctrine.orm.query.count_order_item_unit_refunds_belonging_to_order', \Sylius\RefundPlugin\Doctrine\ORM\CountOrderItemUnitRefundsBelongingToOrderQuery::class) + ->args([service('sylius.repository.order_item_unit')]); + + $services->set('sylius_refund.doctrine.orm.query.count_shipment_refunds_belonging_to_order', \Sylius\RefundPlugin\Doctrine\ORM\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..cf516e4a6 --- /dev/null +++ b/config/services/resolvers.php @@ -0,0 +1,23 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.resolver.credit_memo_file', \Sylius\RefundPlugin\Resolver\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(\Sylius\RefundPlugin\Resolver\CreditMemoFileResolverInterface::class, 'sylius_refund.resolver.credit_memo_file'); + + $services->set('sylius_refund.resolver.credit_memo_file_path', \Sylius\RefundPlugin\Resolver\CreditMemoFilePathResolver::class) + ->args(['%sylius_refund.credit_memo_save_path%']); + + $services->alias(\Sylius\RefundPlugin\Resolver\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..00979fe25 --- /dev/null +++ b/config/services/state_resolvers.php @@ -0,0 +1,35 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.state_resolver.order_fully_refunded', \Sylius\RefundPlugin\StateResolver\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(\Sylius\RefundPlugin\StateResolver\OrderFullyRefundedStateResolverInterface::class, 'sylius_refund.state_resolver.order_fully_refunded'); + + $services->set('sylius_refund.state_resolver.order_partially_refunded', \Sylius\RefundPlugin\StateResolver\OrderPartiallyRefundedStateResolver::class) + ->args([ + service('sylius.repository.order'), + service('sylius_abstraction.state_machine'), + service('sylius.manager.order'), + ]); + + $services->alias(\Sylius\RefundPlugin\StateResolver\OrderPartiallyRefundedStateResolverInterface::class, 'sylius_refund.state_resolver.order_partially_refunded'); + + $services->set('sylius_refund.state_resolver.refund_payment_completed_applier', \Sylius\RefundPlugin\StateResolver\RefundPaymentCompletedStateApplier::class) + ->args([ + service('sylius_abstraction.state_machine'), + service('sylius_refund.manager.refund_payment'), + ]); + + $services->alias(\Sylius\RefundPlugin\StateResolver\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..d2baf1b3e --- /dev/null +++ b/config/services/twig_components.php @@ -0,0 +1,13 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.twig_component.customer_credit_memos', \Sylius\RefundPlugin\Twig\Component\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..4655755ab --- /dev/null +++ b/config/services/validators.php @@ -0,0 +1,36 @@ +services(); + $parameters = $container->parameters(); + + $services->set('sylius_refund.validator.refund_units_command', \Sylius\RefundPlugin\Validator\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(\Sylius\RefundPlugin\Validator\RefundUnitsCommandValidatorInterface::class, 'sylius_refund.validator.refund_units_command'); + + $services->set('sylius_refund.validator.order_item_unit_refunds_belonging_to_order', \Sylius\RefundPlugin\Validator\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', \Sylius\RefundPlugin\Validator\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', \Sylius\RefundPlugin\Validator\RefundAmountValidator::class) + ->args([service('sylius_refund.provider.remaining_total')]); + + $services->alias(\Sylius\RefundPlugin\Validator\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..e3b347406 --- /dev/null +++ b/tests/Behat/Resources/services.php @@ -0,0 +1,135 @@ +services(); + $parameters = $container->parameters(); + $parameters->set('sylius.behat.page.admin.order.show.class', \Tests\Sylius\RefundPlugin\Behat\Page\Admin\Order\ShowPage::class); + $parameters->set('sylius.behat.page.shop.order.show.class', \Tests\Sylius\RefundPlugin\Behat\Page\Shop\Order\ShowPage::class); + + $services->defaults() + ->public(); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\OrderRefundsPage::class) + ->parent('sylius.behat.symfony_page'); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\CreditMemoDetailsPage::class) + ->parent('sylius.behat.symfony_page') + ->args([service('sylius.behat.table_accessor')]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\CreditMemoIndexPage::class) + ->parent('sylius.behat.page.admin.crud.index') + ->args(['sylius_refund_admin_credit_memo_index']); + + $services->set(\FriendsOfBehat\PageObjectExtension\Element\Element::class) + ->private() + ->abstract() + ->args([ + service('behat.mink.default_session'), + service('behat.mink.parameters'), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Element\PdfDownloadElement::class) + ->private() + ->parent(\FriendsOfBehat\PageObjectExtension\Element\Element::class); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Application\RefundingContext::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(\Tests\Sylius\RefundPlugin\Behat\Context\Application\CreditMemoContext::class) + ->args([ + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.provider.current_date_time_immutable'), + '%sylius_refund.credit_memo_save_path%', + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Ui\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(\Tests\Sylius\RefundPlugin\Behat\Context\Ui\RefundingContext::class) + ->args([ + service(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\OrderRefundsPage::class), + service('sylius.behat.notification_checker.admin'), + service('sylius.behat.email_checker'), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Ui\CreditMemoContext::class) + ->args([ + service('sylius.behat.page.admin.order.show'), + service(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\CreditMemoIndexPage::class), + service(\Tests\Sylius\RefundPlugin\Behat\Page\Admin\CreditMemoDetailsPage::class), + service(\Tests\Sylius\RefundPlugin\Behat\Element\PdfDownloadElement::class), + service('sylius_refund.repository.credit_memo'), + service('sylius_refund.provider.current_date_time_immutable'), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Setup\RefundingContext::class) + ->args([ + service('sylius.repository.order'), + service('sylius.command_bus'), + service(\Tests\Sylius\RefundPlugin\Behat\Services\Generator\FailedCreditMemoGenerator::class), + service(\Tests\Sylius\RefundPlugin\Behat\Services\Factory\FailedRefundPaymentFactory::class), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Setup\OrderContext::class) + ->args([ + service('sylius.manager.order'), + service('sylius.behat.shared_storage'), + service('sylius_abstraction.state_machine'), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Setup\PaymentContext::class) + ->args([ + service('sylius_abstraction.state_machine'), + service('sylius.behat.shared_storage'), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Transform\OrderContext::class) + ->args([service('sylius.repository.order')]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Transform\PriceContext::class); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Ui\Shop\Customer\CreditMemoContext::class) + ->args([ + service('sylius.behat.page.shop.order.show'), + service(\Tests\Sylius\RefundPlugin\Behat\Element\PdfDownloadElement::class), + ]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Setup\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(\Tests\Sylius\RefundPlugin\Behat\Context\Application\EmailsContext::class) + ->args([service('sylius.behat.email_checker')]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Setup\ProductContext::class) + ->args([service('sylius.behat.context.setup.product')]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Context\Hook\CreditMemosContext::class) + ->args(['%sylius_refund.credit_memo_save_path%']); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Services\Factory\FailedRefundPaymentFactory::class) + ->private() + ->decorate('sylius_refund.factory.refund_payment') + ->args([service('.inner')]); + + $services->set(\Tests\Sylius\RefundPlugin\Behat\Services\Generator\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)) {