Интеграция 1С каталога
Пакет содержит модели, миграции и data handler'ы для интеграции с 1С.
Для работы API созданы специальные action palax\onec_catalog\core\integration\api\action\IntegrateAction
и контроллер palax\onec_catalog\core\integration\api\controller\IntegrationController
.
Контроллер сделан абстрактным, чтобы разработчик мог сделать собственную верификацию пользователя.
Также для интеграции необходим лишь 1 endpoint
. Он указан в абстрактном контроллере, поэтому, строго говоря, другие data handler'ы не должны понадобиться.
При желании его, как и любой другой класс в пакете, можно переписать/расширить.
Для корректной работы миграций необходимо использовать PostgresQL
не ниже 12 версии.
main.php
конфиг должен содержать путь к миграциям:
...
'vendorPath' => Yii::getAlias('@vendor'),
'controllerMap' => [
'migrate' => [
'class' => MigrateController::class,
'migrationPath' => null,
'migrationNamespaces' => [
'palax\yii2core\file\migrations',
'palax\onec_catalog\console\migrations',
...
],
],
],
...
Также инициализацию компонента:
...
'components' => [
...
// 1C
CMLLoaderInterface::class => [
'class' => CMLLoader::class,
'commerceML' => new CommerceML(),
'commerceMLPath' => Yii::getAlias('@data/commerceml'),
'useDatePrefix' => true,
],
]
Заказы
Для работы экспорта заказов необходимо указать класс "экспортер".
В пакете реализован класс OrderToXmlAdapter
, но в нем нет функциональности выгрузки контрагентов.
Поэтому ее нужно писать самостоятельно в проекте.
Чтобы контрагенты импортировались и привязывались к импортированным заказам необходимо имплементировать интерфейс PartnerFromXmlAdapterInterface
Пример подключения классов в main.php
конфиге:
'container' => [
'definitions' => [
OrderToXmlAdapterInterface::class => OrderToXmlAdapter::class,
PartnerFromXmlAdapterInterface::class => PartnerFromXmlAdapter::class,
],
],
'components' => [ ... ]
Статусы
Пакет не предоставляет какие-либо статусы для заказов по-умолчанию. Это связано с тем, что у каждого проекта может быть своя специфика и особенности.
Для статусов есть 2 енума:
-
StatusKind
- вид статуса, то к чему он относится (к заказу, элементу заказа, доставке или оплате); -
StatusType
- тип статуса, т.е. какой он по сути (начальный,конченыйконечный или промежуточный.
Статус "отменен" и подобные реализуются с помощью типа StatusType::Final
и какого-либо внешнего флага. Например, у заказов помимо статуса есть флаг is_cancelled
, который за это отвечает.
К сожалению, в PHP нельзя расширять енумы, поэтому, чтобы добавить свое значение в него, необходимо вносить правки в исходный (этот) пакет.
Оплаты
У заказов также имеются оплаты. Для более удобной работы они были вынесены в отдельную сущность. Это позволяет имеет несколько оплат одновременно и расширять их функциональность не затрагивая работу заказов.
У оплаты имеется тип PaymentType
. На данный момент там имеется только 3 типа (нал, картой и онлайн).
Для расширения функциональности добавление новых типов в этот енум приветствуется.
У оплаты имеется статус. Предполагается, что по факты статусов будет лишь 2: "не оплачена" и "оплачена", но ничто не мешает сделать их больше
Для обозначения того, что "оплата оплачена" необходимо использовать статус StatusType::Final
.
В иных случаях (отмена, забыл, забил и т.п.) необходимо использовать либо StatusType::Initial
, либо StatusType::Intermediate
.
Для дополнения моделей, например, оплаты можно выбрать один из двух вариантов:
- Наследовать модель и добавить туда необходимые поля
- Создать отдельную модель с суффиксом
AuxData
, например,PaymentAuxData
, куда будут складываться дополнительные данныеУ каждого подхода свои плюсы и минусы, решение должно приниматься для каждого проекта свое.
Моя личная рекомендация для большей части проектов - использовать второй вариант.