<?php
namespace CioPromotionalOfficeApi;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Plugin;
use Shopware\Core\Framework\Plugin\Context\InstallContext;
class CioPromotionalOfficeApi extends Plugin
{
const FIELDNAME_ORDER_DEBITOR = 'cio_order_debitornumber';
const FIELDNAME_ORDER_PO_INDENTNUMBER = 'cio_order_po_indentnumber';
const FIELDNAME_CUSTOMER_DEBITOR = 'cio_customer_debitornumber';
const FIELDNAME_CUSTOMER_GROUP_DEBITOR = 'cio_customer_group_debitornumber';
const FIELDNAME_PRODUCT_STOCK_INCOMING = 'cio_product_stock_incoming';
const FIELDSET_ORDER = 'custom_orders';
const FIELDSET_CUSTOMER = 'custom_customers';
const FIELDSET_CUSTOMER_GROUP = 'custom_customer_group';
const FIELDSET_PRODUCT = 'custom_productattributes';
private ?object $customFieldRepository;
private ?object $customFieldSetRepository;
private ?object $customFieldSetRelationRepository;
protected function init()
{
/** @var EntityRepositoryInterface $customFieldRepository */
$this->customFieldRepository = $this->container->get('custom_field.repository');
/** @var EntityRepositoryInterface $customFieldSetRepository */
$this->customFieldSetRepository = $this->container->get('custom_field_set.repository');
/** @var EntityRepositoryInterface $customFieldSetRepository */
$this->customFieldSetRelationRepository = $this->container->get('custom_field_set_relation.repository');
}
public function install(InstallContext $installContext): void
{
parent::install($installContext);
$this->init();
$this->createCustomerDebitorNummerCustomField();
$this->createCustomerGroupDebitorNummerCustomField();
$this->createOrderDebitorNummerCustomField();
$this->createOrderPoBestellnummerCustomField();
$this->createProductStockIncomingCustomField();
}
protected function createCustomerDebitorNummerCustomField()
{
$customFieldSetEntity = $this->getFieldSetCustomerEntity();
$this->createFieldSetRelation($customFieldSetEntity, 'customer');
$customFieldEntity = $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDNAME_CUSTOMER_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldEntity)) {
$this->customFieldRepository->create([[
'name' => self::FIELDNAME_CUSTOMER_DEBITOR,
'type' => 'text',
'config' => [
'type' => 'text',
'label' => [
'de-DE' => 'Debitornummer',
'en-GB' => 'Debitor number'
],
'componentName' => 'sw-field',
'customFieldType' => 'text',
'customFieldPosition' => 2
],
'active' => true,
'customFieldSetId' => $customFieldSetEntity->getId()
]], Context::createDefaultContext());
}
}
protected function createCustomerGroupDebitorNummerCustomField()
{
$customFieldSetEntity = $this->getFieldSetCustomerGroupEntity();
$this->createFieldSetRelation($customFieldSetEntity, 'customer_group');
$customFieldEntity = $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDNAME_CUSTOMER_GROUP_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldEntity)) {
$this->customFieldRepository->create([[
'name' => self::FIELDNAME_CUSTOMER_GROUP_DEBITOR,
'type' => 'text',
'config' => [
'type' => 'text',
'label' => [
'de-DE' => 'Debitornummer',
'en-GB' => 'Debitor number'
],
'componentName' => 'sw-field',
'customFieldType' => 'text',
'customFieldPosition' => 2
],
'active' => true,
'customFieldSetId' => $customFieldSetEntity->getId()
]], Context::createDefaultContext());
}
}
protected function createOrderDebitorNummerCustomField()
{
$customFieldSetEntity = $this->getFieldSetOrderEntity();
$this->createFieldSetRelation($customFieldSetEntity, 'order');
$customFieldEntity = $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDNAME_ORDER_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldEntity)) {
$this->customFieldRepository->create([[
'name' => self::FIELDNAME_ORDER_DEBITOR,
'type' => 'text',
'config' => [
'type' => 'text',
'label' => [
'de-DE' => 'Debitornummer',
'en-GB' => 'Debitor number'
],
'componentName' => 'sw-field',
'customFieldType' => 'text',
'customFieldPosition' => 2
],
'active' => true,
'customFieldSetId' => $customFieldSetEntity->getId()
]], Context::createDefaultContext());
}
}
protected function createOrderPoBestellnummerCustomField()
{
$customFieldSetEntity = $this->getFieldSetOrderEntity();
$this->createFieldSetRelation($customFieldSetEntity, 'order');
$customFieldEntity = $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDNAME_ORDER_PO_INDENTNUMBER))->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldEntity)) {
$this->customFieldRepository->create([[
'name' => self::FIELDNAME_ORDER_PO_INDENTNUMBER,
'type' => 'text',
'config' => [
'type' => 'text',
'label' => [
'de-DE' => 'PO-Bestellnummer',
'en-GB' => 'PO order number'
],
'componentName' => 'sw-field',
'customFieldType' => 'text',
'customFieldPosition' => 2
],
'active' => true,
'customFieldSetId' => $customFieldSetEntity->getId()
]], Context::createDefaultContext());
}
}
protected function createProductStockIncomingCustomField()
{
$customFieldSetEntity = $this->getFieldSetProductEntity();
$this->createFieldSetRelation($customFieldSetEntity, 'product');
$customFieldEntity = $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDNAME_PRODUCT_STOCK_INCOMING))->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldEntity)) {
$this->customFieldRepository->create([[
'name' => self::FIELDNAME_PRODUCT_STOCK_INCOMING,
'type' => 'text',
'config' => [
'type' => 'text',
'label' => [
'de-DE' => 'Geplanter Wareneingang',
'en-GB' => 'Planned goods receipt'
],
'componentName' => 'sw-field',
'customFieldType' => 'text',
'customFieldPosition' => 2
],
'active' => true,
'customFieldSetId' => $customFieldSetEntity->getId()
]], Context::createDefaultContext());
}
}
protected function createFieldSetRelation($customFieldSetEntity, $entityName): void
{
$customFieldSetRelationEntity = $this->customFieldSetRelationRepository->search((new Criteria())->addFilter(new EqualsFilter('customFieldSetId', $customFieldSetEntity->getId())), Context::createDefaultContext())->first();
if (is_null($customFieldSetRelationEntity)) {
$this->customFieldSetRelationRepository->create([
[
'customFieldSetId' => $customFieldSetEntity->getId(),
'entityName' => $entityName
]
], Context::createDefaultContext());
}
}
protected function getFieldSetCustomerEntity()
{
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_CUSTOMER)), Context::createDefaultContext())->first();
if (is_null($customFieldSetEntity)) {
$this->customFieldSetRepository->create([
[
'name' => self::FIELDSET_CUSTOMER,
'config' => [
'label' => [
'de-DE' => 'Zusatzfelder Kunden',
'en-GB' => 'Custom Fields Customers'
],
'translated' => true,
],
'active' => true
]
], Context::createDefaultContext());
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_CUSTOMER)), Context::createDefaultContext())->first();
}
return $customFieldSetEntity;
}
protected function getFieldSetCustomerGroupEntity()
{
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_CUSTOMER_GROUP)), Context::createDefaultContext())->first();
if (is_null($customFieldSetEntity)) {
$this->customFieldSetRepository->create([
[
'name' => self::FIELDSET_CUSTOMER_GROUP,
'config' => [
'label' => [
'de-DE' => 'Zusatzfelder Kundengruppe',
'en-GB' => 'Custom Fields Customer Group'
],
'translated' => true,
],
'active' => true
]
], Context::createDefaultContext());
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_CUSTOMER_GROUP)), Context::createDefaultContext())->first();
}
return $customFieldSetEntity;
}
protected function getFieldSetOrderEntity()
{
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_ORDER)), Context::createDefaultContext())->first();
if (is_null($customFieldSetEntity)) {
$this->customFieldSetRepository->create([
[
'name' => self::FIELDSET_ORDER,
'config' => [
'label' => [
'de-DE' => 'Zusatzfelder Bestellungen',
'en-GB' => 'Custom Fields Orders'
],
'translated' => true,
],
'active' => true
]
], Context::createDefaultContext());
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_ORDER)), Context::createDefaultContext())->first();
}
return $customFieldSetEntity;
}
protected function getFieldSetProductEntity()
{
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_PRODUCT)), Context::createDefaultContext())->first();
if (is_null($customFieldSetEntity)) {
$this->customFieldSetRepository->create([
[
'name' => self::FIELDSET_PRODUCT,
'config' => [
'label' => [
'de-DE' => 'Zusatzfelder Produkt',
'en-GB' => 'Custom Fields Product'
],
'translated' => true,
],
'active' => true
]
], Context::createDefaultContext());
$customFieldSetEntity = $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name', self::FIELDSET_PRODUCT)), Context::createDefaultContext())->first();
}
return $customFieldSetEntity;
}
}