The ``basketTotal`` partial expects ``$sale_channel`` as a top-level
view variable. The cart page passed it correctly, but the checkout
page and the AJAX basket refresh only passed it nested inside
``$basket``.
Replaces the simple address radio list in the checkout page with the
richer ``Shop.Customers.partials.addresses`` partial already used on
the profile edit page. Customers can now choose among existing
addresses, add a new one on-the-fly, or delete an address directly
from the checkout flow.
Each rule (length, lowercase, uppercase, number, special character)
shows a live check/cross icon as the user types. Also aligns
``handlePasswordChange`` server-side validation with the boilerplate
``Password`` rule (was only enforcing min 8 chars).
The password change form on the profile page (``Mes coordonnées``)
was scaffolded but never wired to any backend logic. The fields
``current-password``, ``new-password`` and ``new-password_confirmation``
were silently ignored by ``Customers::storeFull()``.
- Add ``handlePasswordChange()`` in ``CustomerController`` that
validates current password, confirmation match, and 8-char minimum
before hashing and saving.
- Remove ``required`` attribute from password fields so the form can
submit for profile-only updates without filling password fields.
- Strip password fields from request data before passing to
``storeFull()`` to avoid Eloquent mass-assignment noise.
Display a tailored confirmation message when the customer pays by
check or wire transfer, including a warning about the 30-day
cancellation policy. The payment type is passed as a query parameter
so the message survives page reloads.
- Add ``getOrderConfirmedByCheckContent()`` and
``getOrderConfirmedByWireContent()`` to ``Contents`` repository
- Flash ``payment_type`` through redirect query parameter
- Add migration inserting content rows (id 10, 11)
- Update confirmed view with green checkmark and warning icon