# OdataService
Класс для работы с OData API. Наследуется от `HttpClient` и предоставляет интерфейс для построения запросов, фильтрации данных и выполнения CRUD операций.
---
## Инициализация
### `start(): self`
Создает новый экземпляр сервиса.
```php
$service = OdataService::start();
reset(): selfСбрасывает все параметры запроса.
$service->reset();
endpoint(string $endpoint): selfУстанавливает endpoint для запроса.
$service->endpoint('Catalog_Products');
select(string|array $select): selfУказывает поля для выборки.
$service->select(['Name', 'Price']);
$service->select('Name,Price');
expand(string|array $expand): selfДобавляет условия для расширения связанных сущностей.
$service->expand('Category');
$service->expand(['Category', 'Supplier']);
orderBy(string $order): selfУстанавливает сортировку.
$service->orderBy('Name asc');
top(int $top): selfОграничивает количество возвращаемых записей.
$service->top(10);
skip(int $skip): selfПропускает указанное количество записей.
$service->skip(20);
count(): selfДобавляет /$count к endpoint для получения количества записей.
$service->count();
inlineCount(): selfДобавляет параметр $inlinecount=allpages для получения общего количества записей вместе с данными.
$service->inlineCount();
catalog(string $object): selfУстанавливает endpoint для работы с каталогом.
$service->catalog('Products');
// Catalog_Products
document(string $object): selfУстанавливает endpoint для работы с документом.
$service->document('Sales');
// Document_Sales
accRegister(string $object): selfУстанавливает endpoint для работы с регистром накопления.
$service->accRegister('GoodsRemains');
// AccumulationRegister_GoodsRemains
infoRegister(string $object): selfУстанавливает endpoint для работы с регистром сведений.
$service->infoRegister('Prices');
// InformationRegister_Prices
filter(): selfПрименяет установленные фильтры к запросу.
Выбрасывает
\Exception, если фильтры не установлены.
setFiltersParams(string $string): selfДобавляет произвольное условие фильтрации.
$service->setFiltersParams("Price gt 1000");
guid(string $name_key, string $guid): selfДобавляет фильтр по GUID.
$service->guid('Ref_Key', '123e4567-e89b-12d3-a456-426614174000');
filterDate(string|\DateTimeInterface $date, string $operator = "eq", string|\DateTimeInterface $date_end = null, string $typeDate = "Date"): selfДобавляет фильтр по дате.
$service->filterDate('2024-01-01');
$service->filterDate('2024-01-01', 'ge', '2024-12-31');
$service->filterDate(now(), 'ge', null, 'DateTime');
filterNowYear(): selfФильтр за текущий год.
$service->filterNowYear();
filterSubYear(): selfФильтр за прошлый год.
$service->filterSubYear();
filterNowMonth(): selfФильтр за текущий месяц.
$service->filterNowMonth();
filterSubMonth($type = 'Date'): selfФильтр за прошлый месяц.
$service->filterSubMonth();
$service->filterSubMonth('DateTime');
formatDate(string|\DateTimeInterface $date): stringФорматирует дату для OData запроса.
$formattedDate = $service->formatDate(now());
// 2024-01-01T12:00:00
checkConnection(): stringПроверяет соединение с сервером.
$result = $service->checkConnection();
// 'Подключение успешно установлено.'
add(array $data): selfСоздает новую запись.
$service->catalog('Products')
->add([
'Name' => 'Новый продукт',
'Price' => 1000
]);
update(string $Ref_Key, array $data, string $method = 'PATCH'): selfОбновляет существующую запись.
$service->catalog('Products')
->update('123e4567-e89b-12d3-a456-426614174000', [
'Price' => 1500
]);
delete(string $Ref_Key): selfУдаляет запись.
$service->catalog('Products')
->delete('123e4567-e89b-12d3-a456-426614174000');
$result = OdataService::start()
->catalog('Products')
->select(['Name', 'Price', 'Code'])
->filterNowYear()
->expand('Category')
->orderBy('Name asc')
->top(10)
->get();
$count = OdataService::start()
->catalog('Products')
->filterDate(now()->startOfMonth(), 'ge')
->count()
->get();
$service = OdataService::start()
->document('Sales')
->add([
'Number' => '001',
'Date' => now(),
'Amount' => 5000
]);
| Метод | Исключение |
|-------|------------|
| filter() | \Exception |
| update() | GuzzleException |
| add() | GuzzleException |
| delete() | GuzzleException |
HttpClientreset() для сброса состояния