# Выгрузка заказов Lamoda в Bitrix

Модуль `lamoda` забирает заказы из [Lamoda Seller Partner API v2](https://academy.lamoda.ru/articles/api/intro/00_overview/) и создаёт/обновляет сделки в воронке 7.

## Регистрация модуля

В `config/web.php` родительского приложения:

```php
'lamoda' => [
    'class' => 'app\modules\lamoda\Module',
],
```

В `config/console.php` родительского приложения:

```php
'modules' => [
    'lamoda' => [
        'class' => 'app\modules\lamoda\Module',
    ],
],
```

Миграции:

```bash
php yii migrate --migrationPath=@app/modules/lamoda/migrations
```

## Запуск синхронизации

Из корня приложения (тот же пользователь, что и php-fpm):

```bash
php yii lamoda/sync/orders
```

Чтобы дописать дату заказа (`UF_CRM_1788956455584`) у уже созданных сделок, без повторной выгрузки из Lamoda:

```bash
php yii lamoda/sync/backfill-order-dates
```

Чтобы заново забрать деталки **всех уже сохранённых** заказов (цены позиций, `fullSum`, сумма сделки) — без курсора и без лимита `max_orders`:

```bash
php yii lamoda/sync/backfill-exported-orders
```

Cron, например раз в 10 минут:

```bash
*/10 * * * * cd /path/to/htdocs && php yii lamoda/sync/orders
```

Веб-список всех позиций с фильтром по категориям: `/lamoda/main/index?token=...`.

Вкладка сделки **Lamoda** (`CRM_DEAL_DETAIL_TAB`) регистрируется при установке приложения и показывает позиции связанного заказа. Чтобы вкладка появилась, приложение нужно переустановить.

## Конфигурация

### `config/web.php` (модуль)

| Параметр | Назначение |
|---|---|
| `token` | Токен доступа к веб-странице (`?token=...`) |
| `lamoda.client_id` / `client_secret` / `seller_id` | Ключи Seller API (можно переопределить в `lamoda_config.php`) |
| `lamoda.country` | Страна для номенклатуры, по умолчанию `RU` |
| `moysklad.token` | Bearer-токен JSON API МойСклад (можно переопределить в `moysklad_config.php`) |
| `sync.max_orders` | Тестовый лимит заказов. `50` — последние 50, `0` — инкрементальный курсор без лимита |
| `sync.lookback_days` | Глубина первого боевого прогона |
| `deal.category_id` | Воронка сделок Bitrix (`7`) |
| `deal.*_uf` | Коды UF-полей сделки |

Секреты Lamoda — в `config/lamoda_config.php`:

```php
return [
    'client_id' => '',
    'client_secret' => '',
    'seller_id' => '',
];
```

Секреты МойСклад — в `config/moysklad_config.php`:

```php
return [
    'token' => '',
];
```

OAuth Bitrix — в `config/app_config.php` (как у `additional_agreements`). Если `access_token` пустой, клиент берёт webhook из параметров родительского приложения.

## Что делает прогон

1. OAuth-токен Lamoda (`POST /v2/auth-token`), кэш на `expires_in`.
2. Полная выгрузка категорий `GET /v2/nomenclature-categories`.
3. Заказы: в тесте — 50 последних (`sort=-createdAt`); в бою — дельта по `updatedAtFrom`.
4. Деталка `GET /v2/orders/{id}` (в path поле `id`, не `orderId`).
5. Номенклатуры по SKU — последний EN-уровень `categoryLevels` → `category_id`. Если категории нет в БД — повторная выгрузка справочника один раз за прогон; если всё ещё нет — `null`.
6. МойСклад: товар по `external_sku` = `code` → закупочная цена (рубли), поставщик и `pathName`. Если товара нет — поля позиции `null`. Без токена шаг пропускается.
7. У позиции сохраняется `paidPrice` (рубли, API отдаёт копейки) и валюта. У заказа — `fullSum` → сумма сделки Bitrix (`OPPORTUNITY` / `CURRENCY_ID`).
8. Сделка в воронке 7: `TITLE = Lamoda {orderId}` и UF (id, orderId, paymentMethod, status, дата заказа `createdAt`). Для списков UF недостающее значение добавляется. Работа с Bitrix — в `models/Bitrix/{Scope}/Provider/` (сейчас `Crm`).

## Таблицы

- `lamoda_order`
- `lamoda_order_item`
- `lamoda_category`
- `lamoda_supplier`
- `lamoda_sync_state`
