Skip to content

Commit db32ad3

Browse files
Add option to exclude families from import
1 parent b8ac30d commit db32ad3

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed

Plugin/Job/Product.php

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
namespace JustBetter\AkeneoBundle\Plugin\Job;
4+
5+
use Akeneo\Connector\Helper\Config as ConfigHelper;
6+
use Akeneo\Connector\Job\Product as AkeneoProduct;
7+
use Akeneo\Connector\Model\Source\Filters\Family;
8+
use Akeneo\Connector\Model\Source\Filters\Mode;
9+
use Magento\Framework\App\Config\ScopeConfigInterface;
10+
11+
class Product
12+
{
13+
public const PRODUCTS_FILTERS_EXCLUDED_FAMILIES = 'akeneo_connector/products_filters/excluded_families';
14+
15+
public function __construct(
16+
protected ConfigHelper $configHelper,
17+
protected ScopeConfigInterface $scopeConfig,
18+
protected Family $familyFilter
19+
) {
20+
}
21+
22+
public function getFamiliesToExport(): ?string
23+
{
24+
return $this->scopeConfig->getValue(self::PRODUCTS_FILTERS_EXCLUDED_FAMILIES);
25+
}
26+
27+
public function aroundGetFamiliesToImport(
28+
AkeneoProduct $subject,
29+
callable $proceed
30+
): array {
31+
$families = [];
32+
$familiesToExclude = explode(',', $this->getFamiliesToExport());
33+
34+
$mode = $this->configHelper->getFilterMode();
35+
36+
if ($mode == Mode::ADVANCED && empty($this->configHelper->getFamiliesFilter())) {
37+
$paginationSize = $this->configHelper->getPaginationSize();
38+
$apiFamilies = $subject->getAkeneoClient()->getFamilyApi()->all($paginationSize);
39+
40+
foreach ($apiFamilies as $family) {
41+
if (isset($family['code'])) {
42+
$families[] = $family['code'];
43+
}
44+
}
45+
} else {
46+
$families = $proceed();
47+
}
48+
49+
if (!$families || $families[0] === '') {
50+
$families = array_values($this->familyFilter->getFamilies() ?? []);
51+
}
52+
53+
return array_diff($families, $familiesToExclude);
54+
}
55+
}

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ These features can be enabled / disabled via an extra configuration section call
2626
| Unset Website when empty Product Attribute Mapping | When enabled this will unset the website from the product when a required attribute has no specific value. For example when the Name attribute in Akeneo is empty for the associated website |
2727
| Slack Akeneo import notifications | Setup Slack notifications of Akeneo imports |
2828
| <a href="#import-finished-events">Import finished events</a> | Fires an event for every job that is fully finished | |
29+
| Exclude Families from Import | Allows you to exclude specific families from being imported from Akeneo. _(Stores > Configuration > Catalog > Akeneo Connector > JustBetter Akeneo)_ | |
2930

3031
## Installation
3132
```

etc/adminhtml/system.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,26 @@
174174
</field>
175175
</group>
176176
</group>
177+
<group id="products_filters" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="0" showInStore="0">
178+
<label>Filter Products</label>
179+
<field id="excluded_families" translate="label comment" type="multiselect" sortOrder="145" showInDefault="1" showInWebsite="0" showInStore="0">
180+
<label>Families to exclude</label>
181+
<source_model>Akeneo\Connector\Model\Source\Filters\Family</source_model>
182+
<comment>
183+
<![CDATA[Select the families you want to exclude from retrieving products.<br/><br/>
184+
<b>Import Logic Explanation:</b><br/>
185+
<ul>
186+
<li><b>"Families to exclude" is empty:</b> Only the families selected in "Families to import" will be imported.</li>
187+
<li><b>"Families to import" is empty:</b> All families will be imported, except those selected in "Families to exclude".</li>
188+
<li><b>Both selections are empty:</b> All families will be imported.</li>
189+
</ul>]]>
190+
</comment>
191+
<depends>
192+
<field id="mode">standard</field>
193+
</depends>
194+
<can_be_empty>1</can_be_empty>
195+
</field>
196+
</group>
177197
</section>
178198
</system>
179199
</config>

etc/di.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
<plugin name="JustBetter_ImportFinished" type="JustBetter\AkeneoBundle\Plugin\ImportFinished" sortOrder="1" />
2525
</type>
2626

27+
<type name="Akeneo\Connector\Job\Product">
28+
<plugin name="JustBetter_FamiliesToExclude" type="JustBetter\AkeneoBundle\Plugin\Job\Product" sortOrder="1" />
29+
</type>
30+
2731
<type name="Akeneo\Connector\Job\Option">
2832
<plugin name="JustBetter_ImportFinished" type="JustBetter\AkeneoBundle\Plugin\ImportFinished" sortOrder="1" />
2933
</type>

0 commit comments

Comments
 (0)