# Методы для работы со складами

## Добавление или изменение склада

Чтобы изменить существующий склад, надо передать поле id с идентификатором склада.
Если id не передать, то будет создан новый склад.
В ответ на запрос возвращается созданный или изменённый склад.

<a id="post-gw-timeslots-api-v1-warehouse"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/warehouse' \
  -X 'POST' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "name": "Тестовый склад",
  "address": "Гельсингфорсская улица, 2А",
  "city_id": 1,
  "contacts": [
    {
      "name": "Имя менеджера склада",
      "phone": "+7 000 000-00-00",
      "country_phone_id": 0
    }
  ],
  "schedule": [
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 1
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 2
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 3
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 4
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 5
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 6
    },
    {
      "time_from": "00:00",
      "time_to": "23:59",
      "day_of_week": 7
    }
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/warehouses.openapi.json)

**Описание полей запроса**
- `name` — Название склада
- `address` — Адрес склада
- `city_id` — Идентификатор города. Ему соответствует название города из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `contacts` — Контакты контактного лица/лиц склада
- `contacts[].name` — Имя контактного лица
- `contacts[].phone` — Телефон контактного лица
- `contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие
- `schedule` — Список рабочих дней склада
- `schedule[].time_from` — Время начала работы склада
- `schedule[].time_to` — Время окончания работы склада
- `schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "warehouse": {
      "id": 29583,
      "schedule": [
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "1"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "2"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "3"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "4"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "5"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "6"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "7"
        }
      ],
      "contacts": [
        {
          "id": 31311,
          "name": "Имя менеджера склада",
          "phone": "+7 000 000-00-00",
          "country_phone_id": "0",
          "warehouse": 29583
        }
      ],
      "name": "Тестовый склад",
      "address": "Гельсингфорсская улица, 2А",
      "owner": 9338034,
      "city_id": 1,
      "country_id": 1,
      "region_id": 153,
      "city_verbose": "Санкт-Петербург, РФ",
      "utc_offset": 180,
      "date_creation": "2023-06-27T09:57:27.615139+03:00",
      "date_modified": "2023-06-27T09:57:27.615186+03:00",
      "deleted": false,
      "is_test": true
    }
  }
}
```

**Описание полей ответа**
- `result.warehouse.id` — Идентификатор склада
- `result.warehouse.schedule` — Список рабочих дней склада
- `result.warehouse.schedule[].time_from` — Время начала работы склада
- `result.warehouse.schedule[].time_to` — Время окончания работы склада
- `result.warehouse.schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `result.warehouse.contacts` — Контакты контактного лица/лиц склада
- `result.warehouse.contacts[].id` — Идентификатор контакта во временных окнах
- `result.warehouse.contacts[].name` — Имя контактного лица
- `result.warehouse.contacts[].phone` — Телефон контактного лица
- `result.warehouse.contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие
- `result.warehouse.name` — Название склада
- `result.warehouse.address` — Адрес склада
- `result.warehouse.owner` — Идентификатор фирмы владельца склада
- `result.warehouse.city_id` — Идентификатор города. Ему соответствует название города из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.country_id` — Идентификатор страны. Ему соответствует название страны из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.region_id` — Идентификатор региона. Ему соответствует название региона из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.city_verbose` — Название города
- `result.warehouse.utc_offset` — Количество минут, на которые время склада отличается от UTC
- `result.warehouse.date_creation` — Дата создания склада
- `result.warehouse.date_modified` — Дата изменения склада
- `result.warehouse.deleted` — Флаг, показывающий удален склад или нет
- `result.warehouse.is_test` — Флаг, показывающий является ли склад тестовым

**Пример ответа (400)**

```json
{}
```


## Получение складов

Возвращается список складов, принадлежащих пользователю, а также список партнерских складов.

<a id="get-gw-timeslots-api-v1-warehouse"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/warehouse' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/warehouses.openapi.json)

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "partners_warehouses_count": 0,
    "partners_warehouses": [],
    "count": 1,
    "warehouses": [
      {
        "id": 34823,
        "schedule": [
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "1"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "2"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "3"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "4"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "5"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "6"
          },
          {
            "time_from": "00:00",
            "time_to": "23:59",
            "day_of_week": "7"
          }
        ],
        "contacts": [
          {
            "id": 36735,
            "name": "Имя менеджера склада",
            "phone": "+7 000 000-00-00",
            "country_phone_id": "0",
            "warehouse": 34823
          }
        ],
        "sms_enabled": false,
        "name": "Тестовый склад",
        "address": "Гельсингфорсская улица, 2А",
        "owner": 4022713,
        "city_id": 1,
        "country_id": 1,
        "region_id": 153,
        "city_verbose": "Санкт-Петербург, РФ",
        "utc_offset": 180,
        "date_creation": "2023-07-04T06:57:45.295611+03:00",
        "date_modified": "2023-07-04T06:57:45.295633+03:00",
        "deleted": false,
        "is_test": true
      }
    ]
  }
}
```


## Удаление складов

Возвращается список удаленных складов

<a id="delete-gw-timeslots-api-v1-warehouse"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/warehouse' \
  -X 'DELETE' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "warehouse_ids": [
    34823
  ]
}'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/warehouses.openapi.json)

**Описание полей запроса**
- `warehouse_ids` — Список идентификаторов складов, которые нужно удалить

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "200": [
      34823
    ],
    "400": [],
    "500": []
  }
}
```

**Описание полей ответа**
- `result.200` — Список идентификаторов удаленных складов
- `result.400` — Список идентификаторов складов, при удалении которых возникли ошибки валидации
- `result.500` — Список идентификаторов складов, при удалении которых возникли ошибки сервера

**Пример ответа (400)**

```json
{
  "error": "bad request",
  "reason": "Необходимо передать список warehouse_ids",
  "details": null
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемый текст ошибки


## Получение информации о складе

<a id="get-gw-timeslots-api-v1-warehouse-{warehouse_id}"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/warehouse/0' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/warehouses.openapi.json)

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "warehouse": {
      "id": 34823,
      "schedule": [
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "1"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "2"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "3"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "4"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "5"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "6"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "7"
        }
      ],
      "contacts": [
        {
          "id": 36735,
          "name": "Имя менеджера склада",
          "phone": "+7 000 000-00-00",
          "country_phone_id": "0",
          "warehouse": 34823
        }
      ],
      "sms_enabled": false,
      "name": "Тестовый склад",
      "address": "Гельсингфорсская улица, 2А",
      "owner": 4022713,
      "city_id": 1,
      "country_id": 1,
      "region_id": 153,
      "city_verbose": "Санкт-Петербург, РФ",
      "utc_offset": 180,
      "date_creation": "2023-07-04T06:57:45.295611+03:00",
      "date_modified": "2023-07-04T06:57:45.295633+03:00",
      "deleted": false,
      "is_test": true
    }
  }
}
```

**Пример ответа (404)**

```json
{
  "error": "not_found",
  "reason": "Склад не найден",
  "details": null
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемый текст ошибки


## Получение информации о загрузке склада

<a id="get-gw-timeslots-api-v1-warehouse-workload-{warehouse_id}"></a>

**Пример запроса (curl):**

```bash
curl 'https://api.ati.su/gw/timeslots/api/v1/warehouse/workload/0?loading_type=any' \
  -X 'GET' \
  -H 'Authorization: Bearer {authorizationToken}' \
  -H 'Content-Type: application/json'
```

**OpenAPI схема:** [JSON](https://ati.su/developers/raw/api/time-slots/warehouses.openapi.json)

**Пример ответа (200)**

```json
{
  "ok": true,
  "result": {
    "workload": [
      {
        "date": "2023-07-04T04:26:09.706493Z",
        "weekday": 2,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-05T04:26:09.706493Z",
        "weekday": 3,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-06T04:26:09.706493Z",
        "weekday": 4,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-07T04:26:09.706493Z",
        "weekday": 5,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-08T04:26:09.706493Z",
        "weekday": 6,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-09T04:26:09.706493Z",
        "weekday": 7,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-10T04:26:09.706493Z",
        "weekday": 1,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-11T04:26:09.706493Z",
        "weekday": 2,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-12T04:26:09.706493Z",
        "weekday": 3,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-13T04:26:09.706493Z",
        "weekday": 4,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-14T04:26:09.706493Z",
        "weekday": 5,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-15T04:26:09.706493Z",
        "weekday": 6,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-16T04:26:09.706493Z",
        "weekday": 7,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      },
      {
        "date": "2023-07-17T04:26:09.706493Z",
        "weekday": 1,
        "possible_slots_count": 24,
        "available_slots_count": 24,
        "loading_level": "low"
      }
    ],
    "warehouse": {
      "id": 34823,
      "schedule": [
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "1"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "2"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "3"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "4"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "5"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "6"
        },
        {
          "time_from": "00:00",
          "time_to": "23:59",
          "day_of_week": "7"
        }
      ],
      "contacts": [
        {
          "id": 36735,
          "name": "Имя менеджера склада",
          "phone": "+7 000 000-00-00",
          "country_phone_id": "0",
          "warehouse": 34823
        }
      ],
      "sms_enabled": false,
      "name": "Тестовый склад",
      "address": "Гельсингфорсская улица, 2А",
      "owner": 4022713,
      "city_id": 1,
      "country_id": 1,
      "region_id": 153,
      "city_verbose": "Санкт-Петербург, РФ",
      "utc_offset": 180,
      "date_creation": "2023-07-04T06:57:45.295611+03:00",
      "date_modified": "2023-07-04T06:57:45.295633+03:00",
      "deleted": false,
      "is_test": true
    }
  }
}
```

**Описание полей ответа**
- `result.workload[].weekday` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `result.warehouse.id` — Идентификатор склада
- `result.warehouse.schedule` — Список рабочих дней склада
- `result.warehouse.schedule[].time_from` — Время начала работы склада
- `result.warehouse.schedule[].time_to` — Время окончания работы склада
- `result.warehouse.schedule[].day_of_week` — Идентификатор дня недели. 1-Понедельник, 2-Вторник, 3-Среда и т. д.
- `result.warehouse.contacts` — Контакты контактного лица/лиц склада
- `result.warehouse.contacts[].id` — Идентификатор контакта во временных окнах
- `result.warehouse.contacts[].name` — Имя контактного лица
- `result.warehouse.contacts[].phone` — Телефон контактного лица
- `result.warehouse.contacts[].country_phone_id` — Идентификатор страны телефона контактного лица. 0-Россия, 1-Украина, 2-Казахстан, 3-Беларусь, 4-Другие
- `result.warehouse.name` — Название склада
- `result.warehouse.address` — Адрес склада
- `result.warehouse.owner` — Идентификатор фирмы владельца склада
- `result.warehouse.city_id` — Идентификатор города. Ему соответствует название города из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.country_id` — Идентификатор страны. Ему соответствует название страны из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.region_id` — Идентификатор региона. Ему соответствует название региона из [словаря](https://ati.su/developers/api/dictionaries/geo/)
- `result.warehouse.city_verbose` — Название города
- `result.warehouse.utc_offset` — Количество минут, на которые время склада отличается от UTC
- `result.warehouse.date_creation` — Дата создания склада
- `result.warehouse.date_modified` — Дата изменения склада
- `result.warehouse.deleted` — Флаг, показывающий удален склад или нет
- `result.warehouse.is_test` — Флаг, показывающий является ли склад тестовым

**Пример ответа (404)**

```json
{
  "error": "not_found",
  "reason": "Склад не найден",
  "details": null
}
```

**Описание полей ответа**
- `error` — Текстовый код ошибки
- `reason` — Человекочитаемый текст ошибки

