vendor/cio-sw6/promotional-office-api/src/CioPromotionalOfficeApi.php line 12

Open in your IDE?
  1. <?php
  2. namespace CioPromotionalOfficeApi;
  3. use Shopware\Core\Framework\Context;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  5. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  7. use Shopware\Core\Framework\Plugin;
  8. use Shopware\Core\Framework\Plugin\Context\InstallContext;
  9. class CioPromotionalOfficeApi extends Plugin
  10. {
  11.     const FIELDNAME_ORDER_DEBITOR 'cio_order_debitornumber';
  12.     const FIELDNAME_ORDER_PO_INDENTNUMBER 'cio_order_po_indentnumber';
  13.     const FIELDNAME_CUSTOMER_DEBITOR 'cio_customer_debitornumber';
  14.     const FIELDNAME_CUSTOMER_GROUP_DEBITOR 'cio_customer_group_debitornumber';
  15.     const FIELDNAME_PRODUCT_STOCK_INCOMING 'cio_product_stock_incoming';
  16.     const FIELDSET_ORDER 'custom_orders';
  17.     const FIELDSET_CUSTOMER 'custom_customers';
  18.     const FIELDSET_CUSTOMER_GROUP 'custom_customer_group';
  19.     const FIELDSET_PRODUCT 'custom_productattributes';
  20.     private ?object $customFieldRepository;
  21.     private ?object $customFieldSetRepository;
  22.     private ?object $customFieldSetRelationRepository;
  23.     protected function init()
  24.     {
  25.         /** @var EntityRepositoryInterface $customFieldRepository */
  26.         $this->customFieldRepository $this->container->get('custom_field.repository');
  27.         /** @var EntityRepositoryInterface $customFieldSetRepository */
  28.         $this->customFieldSetRepository $this->container->get('custom_field_set.repository');
  29.         /** @var EntityRepositoryInterface $customFieldSetRepository */
  30.         $this->customFieldSetRelationRepository $this->container->get('custom_field_set_relation.repository');
  31.     }
  32.     public function install(InstallContext $installContext): void
  33.     {
  34.         parent::install($installContext);
  35.         $this->init();
  36.         $this->createCustomerDebitorNummerCustomField();
  37.         $this->createCustomerGroupDebitorNummerCustomField();
  38.         $this->createOrderDebitorNummerCustomField();
  39.         $this->createOrderPoBestellnummerCustomField();
  40.         $this->createProductStockIncomingCustomField();
  41.     }
  42.     protected function createCustomerDebitorNummerCustomField()
  43.     {
  44.         $customFieldSetEntity $this->getFieldSetCustomerEntity();
  45.         $this->createFieldSetRelation($customFieldSetEntity'customer');
  46.         $customFieldEntity $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDNAME_CUSTOMER_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  47.         if (is_null($customFieldEntity)) {
  48.             $this->customFieldRepository->create([[
  49.                 'name' => self::FIELDNAME_CUSTOMER_DEBITOR,
  50.                 'type' => 'text',
  51.                 'config' => [
  52.                     'type' => 'text',
  53.                     'label' => [
  54.                         'de-DE' => 'Debitornummer',
  55.                         'en-GB' => 'Debitor number'
  56.                     ],
  57.                     'componentName' => 'sw-field',
  58.                     'customFieldType' => 'text',
  59.                     'customFieldPosition' => 2
  60.                 ],
  61.                 'active' => true,
  62.                 'customFieldSetId' => $customFieldSetEntity->getId()
  63.             ]], Context::createDefaultContext());
  64.         }
  65.     }
  66.     protected function createCustomerGroupDebitorNummerCustomField()
  67.     {
  68.         $customFieldSetEntity $this->getFieldSetCustomerGroupEntity();
  69.         $this->createFieldSetRelation($customFieldSetEntity'customer_group');
  70.         $customFieldEntity $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDNAME_CUSTOMER_GROUP_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  71.         if (is_null($customFieldEntity)) {
  72.             $this->customFieldRepository->create([[
  73.                 'name' => self::FIELDNAME_CUSTOMER_GROUP_DEBITOR,
  74.                 'type' => 'text',
  75.                 'config' => [
  76.                     'type' => 'text',
  77.                     'label' => [
  78.                         'de-DE' => 'Debitornummer',
  79.                         'en-GB' => 'Debitor number'
  80.                     ],
  81.                     'componentName' => 'sw-field',
  82.                     'customFieldType' => 'text',
  83.                     'customFieldPosition' => 2
  84.                 ],
  85.                 'active' => true,
  86.                 'customFieldSetId' => $customFieldSetEntity->getId()
  87.             ]], Context::createDefaultContext());
  88.         }
  89.     }
  90.     protected function createOrderDebitorNummerCustomField()
  91.     {
  92.         $customFieldSetEntity $this->getFieldSetOrderEntity();
  93.         $this->createFieldSetRelation($customFieldSetEntity'order');
  94.         $customFieldEntity $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDNAME_ORDER_DEBITOR))->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  95.         if (is_null($customFieldEntity)) {
  96.             $this->customFieldRepository->create([[
  97.                 'name' => self::FIELDNAME_ORDER_DEBITOR,
  98.                 'type' => 'text',
  99.                 'config' => [
  100.                     'type' => 'text',
  101.                     'label' => [
  102.                         'de-DE' => 'Debitornummer',
  103.                         'en-GB' => 'Debitor number'
  104.                     ],
  105.                     'componentName' => 'sw-field',
  106.                     'customFieldType' => 'text',
  107.                     'customFieldPosition' => 2
  108.                 ],
  109.                 'active' => true,
  110.                 'customFieldSetId' => $customFieldSetEntity->getId()
  111.             ]], Context::createDefaultContext());
  112.         }
  113.     }
  114.     protected function createOrderPoBestellnummerCustomField()
  115.     {
  116.         $customFieldSetEntity $this->getFieldSetOrderEntity();
  117.         $this->createFieldSetRelation($customFieldSetEntity'order');
  118.         $customFieldEntity $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDNAME_ORDER_PO_INDENTNUMBER))->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  119.         if (is_null($customFieldEntity)) {
  120.             $this->customFieldRepository->create([[
  121.                 'name' => self::FIELDNAME_ORDER_PO_INDENTNUMBER,
  122.                 'type' => 'text',
  123.                 'config' => [
  124.                     'type' => 'text',
  125.                     'label' => [
  126.                         'de-DE' => 'PO-Bestellnummer',
  127.                         'en-GB' => 'PO order number'
  128.                     ],
  129.                     'componentName' => 'sw-field',
  130.                     'customFieldType' => 'text',
  131.                     'customFieldPosition' => 2
  132.                 ],
  133.                 'active' => true,
  134.                 'customFieldSetId' => $customFieldSetEntity->getId()
  135.             ]], Context::createDefaultContext());
  136.         }
  137.     }
  138.     protected function createProductStockIncomingCustomField()
  139.     {
  140.         $customFieldSetEntity $this->getFieldSetProductEntity();
  141.         $this->createFieldSetRelation($customFieldSetEntity'product');
  142.         $customFieldEntity $this->customFieldRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDNAME_PRODUCT_STOCK_INCOMING))->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  143.         if (is_null($customFieldEntity)) {
  144.             $this->customFieldRepository->create([[
  145.                 'name' => self::FIELDNAME_PRODUCT_STOCK_INCOMING,
  146.                 'type' => 'text',
  147.                 'config' => [
  148.                     'type' => 'text',
  149.                     'label' => [
  150.                         'de-DE' => 'Geplanter Wareneingang',
  151.                         'en-GB' => 'Planned goods receipt'
  152.                     ],
  153.                     'componentName' => 'sw-field',
  154.                     'customFieldType' => 'text',
  155.                     'customFieldPosition' => 2
  156.                 ],
  157.                 'active' => true,
  158.                 'customFieldSetId' => $customFieldSetEntity->getId()
  159.             ]], Context::createDefaultContext());
  160.         }
  161.     }
  162.     protected function createFieldSetRelation($customFieldSetEntity$entityName): void
  163.     {
  164.         $customFieldSetRelationEntity $this->customFieldSetRelationRepository->search((new Criteria())->addFilter(new EqualsFilter('customFieldSetId'$customFieldSetEntity->getId())), Context::createDefaultContext())->first();
  165.         if (is_null($customFieldSetRelationEntity)) {
  166.             $this->customFieldSetRelationRepository->create([
  167.                 [
  168.                     'customFieldSetId' => $customFieldSetEntity->getId(),
  169.                     'entityName' => $entityName
  170.                 ]
  171.             ], Context::createDefaultContext());
  172.         }
  173.     }
  174.     protected function getFieldSetCustomerEntity()
  175.     {
  176.         $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_CUSTOMER)), Context::createDefaultContext())->first();
  177.         if (is_null($customFieldSetEntity)) {
  178.             $this->customFieldSetRepository->create([
  179.                 [
  180.                     'name' => self::FIELDSET_CUSTOMER,
  181.                     'config' => [
  182.                         'label' => [
  183.                             'de-DE' => 'Zusatzfelder Kunden',
  184.                             'en-GB' => 'Custom Fields Customers'
  185.                         ],
  186.                         'translated' => true,
  187.                     ],
  188.                     'active' => true
  189.                 ]
  190.             ], Context::createDefaultContext());
  191.             $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_CUSTOMER)), Context::createDefaultContext())->first();
  192.         }
  193.         return $customFieldSetEntity;
  194.     }
  195.     protected function getFieldSetCustomerGroupEntity()
  196.     {
  197.         $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_CUSTOMER_GROUP)), Context::createDefaultContext())->first();
  198.         if (is_null($customFieldSetEntity)) {
  199.             $this->customFieldSetRepository->create([
  200.                 [
  201.                     'name' => self::FIELDSET_CUSTOMER_GROUP,
  202.                     'config' => [
  203.                         'label' => [
  204.                             'de-DE' => 'Zusatzfelder Kundengruppe',
  205.                             'en-GB' => 'Custom Fields Customer Group'
  206.                         ],
  207.                         'translated' => true,
  208.                     ],
  209.                     'active' => true
  210.                 ]
  211.             ], Context::createDefaultContext());
  212.             $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_CUSTOMER_GROUP)), Context::createDefaultContext())->first();
  213.         }
  214.         return $customFieldSetEntity;
  215.     }
  216.     protected function getFieldSetOrderEntity()
  217.     {
  218.         $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_ORDER)), Context::createDefaultContext())->first();
  219.         if (is_null($customFieldSetEntity)) {
  220.             $this->customFieldSetRepository->create([
  221.                 [
  222.                     'name' => self::FIELDSET_ORDER,
  223.                     'config' => [
  224.                         'label' => [
  225.                             'de-DE' => 'Zusatzfelder Bestellungen',
  226.                             'en-GB' => 'Custom Fields Orders'
  227.                         ],
  228.                         'translated' => true,
  229.                     ],
  230.                     'active' => true
  231.                 ]
  232.             ], Context::createDefaultContext());
  233.             $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_ORDER)), Context::createDefaultContext())->first();
  234.         }
  235.         return $customFieldSetEntity;
  236.     }
  237.     protected function getFieldSetProductEntity()
  238.     {
  239.         $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_PRODUCT)), Context::createDefaultContext())->first();
  240.         if (is_null($customFieldSetEntity)) {
  241.             $this->customFieldSetRepository->create([
  242.                 [
  243.                     'name' => self::FIELDSET_PRODUCT,
  244.                     'config' => [
  245.                         'label' => [
  246.                             'de-DE' => 'Zusatzfelder Produkt',
  247.                             'en-GB' => 'Custom Fields Product'
  248.                         ],
  249.                         'translated' => true,
  250.                     ],
  251.                     'active' => true
  252.                 ]
  253.             ], Context::createDefaultContext());
  254.             $customFieldSetEntity $this->customFieldSetRepository->search((new Criteria())->addFilter(new EqualsFilter('name'self::FIELDSET_PRODUCT)), Context::createDefaultContext())->first();
  255.         }
  256.         return $customFieldSetEntity;
  257.     }
  258. }