@extends('layouts.app') @section('title', 'Корзина — teeu') @section('seo') @endsection {{-- Корзина и оформление заказа — одна страница (макет редизайна «Корзина»): слева товары по продавцам, способ оплаты и имя получателя; справа липкая панель с итогом по отмеченным позициям и пунктами выдачи. --}} @section('content') @php($lineCount = $rows->count())

Корзина

@if ($lineCount > 0) {{ $lineCount }} {{ \App\Support\Ru::plural($lineCount, ['товар', 'товара', 'товаров']) }} @endif
@if (session('status'))
{{ session('status') }}
@endif @if ($rows->isEmpty())
Корзина пуста

Добавьте товары из каталога — они появятся здесь.

Перейти в каталог
@else @if ($errors->any())
@foreach ($errors->all() as $e)
{{ $e }}
@endforeach
@endif {{-- Минимальный заказ у продавца считается здесь же, на лету: сумма по ВЫБРАННЫМ строкам продавца × их текущее количество (степпер меняет его без перезагрузки и сообщает событием cart-qty). Невыбранная группа не оформляется — и порог её не проверяется. Окончательное слово за сервером (CheckoutService), здесь — подсказка, чтобы до него не доходить зря. --}} @php($cartQty = $rows->mapWithKeys(fn ($r) => [(string) $r['item']->id => (int) $r['item']->quantity])) @php($cartPrice = $rows->mapWithKeys(fn ($r) => [(string) $r['item']->id => (float) $r['price']])) @php($cartMinimums = $rows->groupBy(fn ($r) => $r['item']->product?->seller_id) ->map(fn ($g) => [ 'min' => $g->first()['item']->product?->seller?->minimumOrderAmount(), 'ids' => $g->filter(fn ($r) => $r['eligible'])->map(fn ($r) => (string) $r['item']->id)->values()->all(), ]) ->filter(fn ($m) => $m['min'] !== null)->values()) {{-- Без выбранного пункта выдачи оформить нельзя (продавцу некуда отправлять). --}} @php($registry = app(\App\Services\Shipping\CarrierRegistry::class)) @php($pickupAvailable = $registry->pickupAvailable()) @php($needPickup = $pickupAvailable && auth()->user()->pickupPoints()->doesntExist()) @php($fmt = fn ($v) => number_format((float) $v, 0, '.', ' ').' ₽')
@csrf
{{-- #15: cart grouped by seller with a per-seller select-all + per-item checkboxes. --}} @foreach ($rows->groupBy(fn ($r) => $r['item']->product?->seller_id) as $sellerId => $sellerRows) @php($seller = $sellerRows->first()['item']->product?->seller) @php($eligibleIds = $sellerRows->filter(fn ($r) => $r['eligible'])->map(fn ($r) => (string) $r['item']->id)->values()->all())
{{-- Шапка группы больше не один общий
@endforeach {{-- Адрес доставки отключён: доставка теперь через пункты выдачи (панель справа). --}} {{-- Способ оплаты. Выбирается один раз здесь: дальше сумму назначает продавец, когда посчитает доставку, и меняться способ уже не должен. --}}
Как будете платить
@foreach (\App\Enums\PaymentMethod::cases() as $method) @endforeach
{{-- Организация нужна только счёту: показываем блок при этом способе и не мешаем остальным. --}} @php($__orgs = auth()->user()->organizations()->orderByDesc('is_default')->get())
@if ($__orgs->isEmpty())

Чтобы получить счёт, добавьте организацию в разделе «Мои организации». Без неё продавец не сможет выписать документ.

@else @endif
{{-- Вход по телефону имени не даёт, а продавцу надо к кому-то обращаться. Спрашиваем один раз здесь и сохраняем в профиль — второй раз не спросим. --}} @if (blank(auth()->user()->name))

Продавец увидит это имя в заказе. Сохраним в профиль — спросим только сейчас.

@error('buyer_name')

{{ $message }}

@enderror
@endif
@endif @endsection