In admin the fetch of collection times fails if collection time is outside the window
Opened this issue · 3 comments
Description
Let's say a customer saves a collection time for 7am UTC in 10 days.
Then later today the merchant changes the location hours and excludes the 7am UTC.
Then in admin you'll get an exception when you try to get all the collection times.
RuntimeException:
This collection time isn't part of the recurrence.
at vendor/tilleuls/sylius-click-n-collect-plugin/src/CollectionTime/RecurrenceInstanceFinder.php:51
at CoopTilleuls\SyliusClickNCollectPlugin\CollectionTime\RecurrenceInstanceFinder->__invoke(object(Shipment))
(vendor/tilleuls/sylius-click-n-collect-plugin/src/Controller/Admin/CollectionsApiController.php:63)
at CoopTilleuls\SyliusClickNCollectPlugin\Controller\Admin\CollectionsApiController->__invoke(object(Request), 'cancale')
(vendor/symfony/http-kernel/HttpKernel.php:158)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
(vendor/symfony/http-kernel/HttpKernel.php:80)
at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
(vendor/symfony/http-kernel/Kernel.php:201)
at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
(public/index.php:33)
How to reproduce
Follow steps listed above.
Possible Solution
Solution is just not to validate the collection time in admin: if you have a collection time then the merchant MUST know.
→ quick fix here: 1e32bf2
@jacquesbh I'm also bumping into this issue, your quickfix assumes the duration didn't change, does it not? It seems better to also just save the collection end date and not have the admin use the computer at all?
My fix is a quick fix to bypass the issue. It's not a proper fix :(.
But if the duration changes, it changes at a certain moment, so from this moment the duration is changed… I mean, it works well this way, it's not perfect because all old slots will have a change as well, but we don't care, they're in the past.
Thanks for the response! I'm currently saving the start and end time and took out the checks so the admin area doesn't rely on the location settings. Seems more correct this way.