<?php declare(strict_types=1);
namespace Virgin\SystemIntegration;
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\Context\UpdateContext;
use Shopware\Core\Framework\Uuid\Uuid;
use Shopware\Core\Framework\Plugin;
use Shopware\Core\System\CustomField\CustomFieldTypes;
use Shopware\Core\Framework\Context;
class SystemIntegration extends Plugin
{
public function update(UpdateContext $installContext): void
{
/* array definizione custom field */
/*$newFields =
[
[
'name' => 'virgin_user_type_code',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'virgin type',
],
],
],
];*/
/* funzione che verifica esistenza dei custom fields,
* li associa ad un set di customfield
* e mette in relazione il set con l'entity customer group
*/
/*$this->addCustomerCustomFields($newFields);
$this->CreateFiled('LEAD','0');
$this->CreateFiled('SOCIO','1');
$this->CreateFiled('EXSOCIO','2');
$this->CreateFiled('INSOLUTO','3');
$this->CreateFiled('BLACKLIST','4');
$this->CreateFiled('DROP ECCEZIONE','5');
$this->CreateFiled('NON DISPONIBILE','6');*/
/* array definition custom field */
/*$newProductFields =
[
[
'name' => 'virgin_exerp_productid',
'type' => CustomFieldTypes::INT,
'config' => [
'componentName' => 'sw-field',
'type' => 'number',
'customFieldType' => 'number',
'numbertype'=> 'int',
'customFieldPosition' => 1,
'label' => [
'en-GB' => 'virgin exerp product id',
],
],
],
[
'name' => 'virgin_exerp_centerid',
'type' => CustomFieldTypes::INT,
'config' => [
'componentName' => 'sw-field',
'type' => 'number',
'numbertype'=> 'int',
'customFieldType' => "number",
'customFieldPosition' => 2,
'label' => [
'en-GB' => 'virgin exerp center id',
],
],
],
[
'name' => 'virgin_exerp_type',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 3,
'label' => [
'en-GB' => 'virgin exerp pagament type',
],
],
],
[
'name' => 'virgin_exerp_name',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 4,
'label' => [
'en-GB' => 'virgin exerp product Name',
],
],
],
[
'name' => 'eft_cash_association_code',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 5,
'label' => [
'en-GB' => 'product number eft/cash associated product',
],
],
],
[
'name' => 'virgin_exerp_externalid',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 5,
'label' => [
'en-GB' => 'virgin exerp external id (reference)',
],
],
],
];*/
$newProductFields = [
[
'name' => 'virgin_exerp_externalid',
'type' => CustomFieldTypes::TEXT,
'config' => [
'componentName' => 'sw-field',
'type' => 'text',
'customFieldType' => 'text',
'customFieldPosition' => 5,
'label' => [
'en-GB' => 'virgin exerp external id (reference)',
],
],
],
];
$this->updateProductCustomFields($newProductFields, 'virgin_product_attributes', 'virgin attributes', 'product');
}
private function CreateFiled($name,$value){
/** esempio di creazione di un customer group da codice */
/** TODO FARE IN MODO CHE NON AGGIUNGA NULLA SE GIÀ PRESENTE A DB */
$context = Context::createDefaultContext();
$customerGroupRepository = $this->container->get('customer_group.repository');
$customerGroupId = Uuid::randomHex();
$customerGroupRepository->create(
[
[
'id' => $customerGroupId,
'name' => $name,
],
],
$context
);
/** update del valore del custom field del customer group appena creato */
$customerGroupRepository->upsert([[
'id' => $customerGroupId,
'customFields' => ['virgin_user_type_code' => $value]
]], $context);
}
// creazione custom fields set
private function addCustomerCustomFields($newCustomerCustomFields)
{
/* @var $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$customFieldRepository = $this->container->get('custom_field.repository');
$context = Context::createDefaultContext();
foreach ($newCustomerCustomFields as $newCustomerCustomField) {
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('custom_field.name', $newCustomerCustomField['name'])
);
$fieldId = $customFieldRepository->searchIds($criteria, $context)->firstId();
if ($fieldId == null) {
$createCustomFields[] = $newCustomerCustomField;
}
}
if (!empty($createCustomFields)) {
$customFieldSetRepository->create([
[
'name' => 'virgin_customergroup_attributes',
'customFields' => $createCustomFields,
'config' => [
'label' => [
'en-GB' => 'virgin attributes',
],
],
'relations' => [
['entityName' => 'customer_group'],
],
],
], $context);
}
}
private function updateProductCustomFields($newProductCustomFields, $setName, $label, $entity)
{
/** @var EntityRepositoryInterface $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$customFieldRepository = $this->container->get('custom_field.repository');
$context = Context::createDefaultContext();
foreach ($newProductCustomFields as $newProductCustomField) {
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('custom_field.name', $newProductCustomField['name'])
);
$fieldId = $customFieldRepository->searchIds($criteria, $context)->firstId();
if ($fieldId == null) {
$createCustomFields[] = $newProductCustomField;
}
}
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('name', $setName)
);
$customFieldSetId = $customFieldSetRepository->searchIds($criteria, $context)->firstId();
if (!empty($createCustomFields)) {
if (null == $customFieldSetId) {
$customFieldSetRepository->create([
[
'name' => $setName,
'customFields' => $createCustomFields,
'config' => [
'label' => [
'en-GB' => $label,
],
],
'relations' => [
['entityName' => $entity],
],
],
], $context);
} else {
$customFieldSetRepository->update(
[
[
'id' => $customFieldSetId,
'customFields' => $createCustomFields
]
], $context);
}
}
}
// creazione Custom Fields per Prodotto
private function addProductCustomFields($newCustomerCustomFields)
{
/* @var $customFieldSetRepository */
$customFieldSetRepository = $this->container->get('custom_field_set.repository');
$customFieldRepository = $this->container->get('custom_field.repository');
$context = Context::createDefaultContext();
foreach ($newCustomerCustomFields as $newCustomerCustomField) {
$criteria = new Criteria();
$criteria->addFilter(
new EqualsFilter('custom_field.name', $newCustomerCustomField['name'])
);
$fieldId = $customFieldRepository->searchIds($criteria, $context)->firstId();
if ($fieldId == null) {
$createCustomFields[] = $newCustomerCustomField;
}
}
if (!empty($createCustomFields)) {
$customFieldSetRepository->create([
[
'name' => 'virgin_product_attributes',
'customFields' => $createCustomFields,
'config' => [
'label' => [
'en-GB' => 'virgin attributes',
],
],
'relations' => [
['entityName' => 'product'],
],
],
], $context);
}
}
}