coopcycle / coopcycle-web

Logistics & marketplace platform. Only for worker-owned business.
https://coopcycle.org
Other
565 stars 128 forks source link

Prevent adding tips after click on the `Order` button on the Address page #4140

Closed vladimir-8 closed 4 months ago

vladimir-8 commented 5 months ago

To Reproduce Steps to reproduce the behavior:

  1. Add a few items to the order
  2. Go to Address page
  3. Click Order
  4. Click Add tips, before the next page is loaded
  5. In come cases duplicate adjustments are created

Expected behavior

There should be always a single: fee, tax and delivery adjustment per order

Additional context

Found the following sequence of requests in the logs:

click `Order` button on the restaurant page:
web02 {"message"":"Order #42955 | OrderLogStartProcessor | processing started | triggered by: POST /fr/restaurant/69-cantine-numero-10; at: AppBundle\\Sylius\\OrderProcessing\\OrderLogStartProcessor::process() called at: file: /vendor/sylius/order/Processor/CompositeOrderProcessor.php line: 41 | Sylius\\Component\\Order\\Processor\\CompositeOrderProcessor::process() called at: file: /src/Form/Order/CartType.php line: 123 | AppBundle\\Form\\Order\\CartType::AppBundle\\Form\\Order\\{closure}() called at: file: /vendor/symfony/symfony/src/Symfony/Component/EventDispatcher/EventDispatcher.php line: 230","datetime":"2024-04-04T12:14:45.547423+02:00"}

click on add tips? (#1)
web02 {"message"":"Order #42955 | OrderLogStartProcessor | processing started | triggered by: POST /order/; at: AppBundle\\Sylius\\OrderProcessing\\OrderLogStartProcessor::process() called at: file: /vendor/sylius/order/Processor/CompositeOrderProcessor.php line: 41 | Sylius\\Component\\Order\\Processor\\CompositeOrderProcessor::process() called at: file: /src/Controller/OrderController.php line: 154 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163","datetime":"2024-04-04T12:14:54.974252+02:00"}

click on add tips? (#2)
web02 {"message"":"Order #42955 | OrderLogStartProcessor | processing started | triggered by: POST /order/; at: AppBundle\\Sylius\\OrderProcessing\\OrderLogStartProcessor::process() called at: file: /vendor/sylius/order/Processor/CompositeOrderProcessor.php line: 41 | Sylius\\Component\\Order\\Processor\\CompositeOrderProcessor::process() called at: file: /src/Controller/OrderController.php line: 154 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163","datetime":"2024-04-04T12:14:59.538604+02:00"}

click `Order` button on the address page:
web02 {"message"":"Order #42955 | OrderLogStartProcessor | processing started | triggered by: POST /order/; at: AppBundle\\Sylius\\OrderProcessing\\OrderLogStartProcessor::process() called at: file: /vendor/sylius/order/Processor/CompositeOrderProcessor.php line: 41 | Sylius\\Component\\Order\\Processor\\CompositeOrderProcessor::process() called at: file: /src/Controller/OrderController.php line: 260 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163","datetime":"2024-04-04T12:15:15.832331+02:00"}

click on add tips? (#3)
web02 {"message"":"Order #42955 | OrderLogStartProcessor | processing started | triggered by: POST /order/; at: AppBundle\\Sylius\\OrderProcessing\\OrderLogStartProcessor::process() called at: file: /vendor/sylius/order/Processor/CompositeOrderProcessor.php line: 41 | Sylius\\Component\\Order\\Processor\\CompositeOrderProcessor::process() called at: file: /src/Controller/OrderController.php line: 154 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163","datetime":"2024-04-04T12:15:15.996288+02:00"}

...

(due to) click `Order` button on the address page:
{"message":"Order #42955 | CheckoutSubscriber | postFlush | triggered by: POST /order/; at: Doctrine\\ORM\\EntityManager::flush() called at: file: /src/Controller/OrderController.php line: 271 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163 | Symfony\\Component\\HttpKernel\\HttpKernel::handleRaw() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 75 | Symfony\\Component\\HttpKernel\\HttpKernel::handle() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php line: 202","datetime":"2024-04-04T12:15:17.714748+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691409","datetime":"2024-04-04T12:15:17.714871+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691410","datetime":"2024-04-04T12:15:17.714926+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691411","datetime":"2024-04-04T12:15:17.714969+02:00"}
...

(due to) click on add tips? (#3)
{"message":"Order #42955 | CheckoutSubscriber | postFlush | triggered by: POST /order/; at: Doctrine\\ORM\\EntityManager::flush() called at: file: /src/Controller/OrderController.php line: 155 | AppBundle\\Controller\\OrderController::indexAction() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 163 | Symfony\\Component\\HttpKernel\\HttpKernel::handleRaw() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php line: 75 | Symfony\\Component\\HttpKernel\\HttpKernel::handle() called at: file: /vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php line: 202","datetime":"2024-04-04T12:15:18.098067+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691418","datetime":"2024-04-04T12:15:18.098182+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691420","datetime":"2024-04-04T12:15:18.098237+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691422","datetime":"2024-04-04T12:15:18.098282+02:00"}
{"message":"Order #42955 | CheckoutSubscriber | postFlush | inserted: Sylius\\Component\\Order\\Model\\Adjustment id:691424","datetime":"2024-04-04T12:15:18.098324+02:00"}
...

As I see click Order button on the address page and click on add tips? (#3) where handled in parallel leading to creation of duplicate adjustments in the database (https://github.com/coopcycle/coopcycle-web/issues/4128) and a wrong payment

Also, for some reason channel_id is set to 2, though the order comes from the web.

vladimir-8 commented 5 months ago

https://coopcycle.slack.com/archives/C4UT4DGQ3/p1712232640795689

Paul-Eraman-CoopCycle commented 4 months ago

i tried to do this and i couldnt, but im not sure, maybe its possible on a different phone or something. for the moment i think id call it fixed, but we can keep an eye out for it to come up again