Skip to content
Snippets Groups Projects
Commit 333ab625 authored by Vadim Justus's avatar Vadim Justus
Browse files

Initial commit

parents
Branches master
No related tags found
No related merge requests found
# Pacemaker customization example
This example demonstrates
- how to create a new import pipeline
- how to extend file resolver to observer import directory
- how to create virtual conditions
- how to add system configurations and default settings
Please refer to [Pacemaker documentation](https://docs.met.tdintern.de/pacemaker/1.2/how-to-extend/import-processes/create-an-additional-import-process.html) for details.
{
"name": "techdivision/product-status-update-import",
"description": "Example module for Pacemaker customizations",
"license": "proprietary",
"require": {
"magento/framework": "^101.0.9 | ^102.0.0 | ^103.0.0",
"techdivision/pacemaker-import-base": "*",
"techdivision/process-pipelines": "*",
"techdivision/pipeline-initializer": "*"
},
"type": "magento2-module",
"autoload": {
"files": [
"registration.php"
],
"psr-4": {
"TechDivision\\ProductStatusUpdateImport\\": ""
}
},
"repositories": [
{
"type": "composer",
"url": "https://repo.met.tdintern.de/"
},
{
"type": "composer",
"url": "https://repo.magento.com/"
}
]
}
<?xml version="1.0"?>
<!--
/**
* Copyright (c) 2019 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*
* @copyright Copyright (c) 2019 TechDivision GmbH (http://www.techdivision.com)
* @author Vadim Justus <v.justus@techdivision.com>
* @link http://www.techdivision.com/
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<section id="techdivision_pacemaker_import">
<group id="product_status_update" showInDefault="1" showInStore="0" showInWebsite="0" sortOrder="1000" translate="label">
<label>Product Status Update</label>
<field id="enabled" translate="label" type="select" sortOrder="25" showInDefault="1" showInWebsite="0" showInStore="0" canRestore="0">
<label>Enable Pipeline</label>
<source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
</field>
<field id="file_name_pattern" translate="label comment" type="text" sortOrder="30" showInDefault="1" showInWebsite="0" showInStore="0" canRestore="0">
<label>File Name Pattern</label>
<comment>Pattern for import file bunches</comment>
</field>
</group>
</section>
</system>
</config>
<?xml version="1.0"?>
<!--
/**
* Copyright (c) 2019 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*
* @copyright Copyright (c) 2019 TechDivision GmbH (http://www.techdivision.com)
* @author Vadim Justus <v.justus@techdivision.com>
* @link http://www.techdivision.com/
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
<default>
<techdivision_pacemaker_import>
<product_status_update>
<enabled>1</enabled>
<file_name_pattern><![CDATA[/product-status-update_(?P<identifier>[0-9a-z\-]*)([_0-9]*?).(csv|ok)/i]]></file_name_pattern>
</product_status_update>
</techdivision_pacemaker_import>
</default>
</config>
<?xml version="1.0"?>
<!--
/**
* Copyright (c) 2019 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*
* @copyright Copyright (c) 2019 TechDivision GmbH (http://www.techdivision.com)
* @author Vadim Justus <v.justus@techdivision.com>
* @link http://www.techdivision.com/
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<virtualType name="TechDivision\ProductStatusUpdateImport\Virtual\Condition\Step\NoConflictingStepInProcess" type="TechDivision\PacemakerImportBase\Model\Condition\Step\NoConflictingStepsInProcess">
<arguments>
<argument name="stepNames" xsi:type="array">
<item name="product_status_update" xsi:type="string">product_status_update</item>
<item name="product_import" xsi:type="string">product_import</item>
</argument>
</arguments>
</virtualType>
<!-- Extend pacemaker_import_catalog pipeline's list of conflicting steps -->
<virtualType name="TechDivision\PacemakerImportCatalog\Virtual\Condition\NoConflictingStepInProcess">
<arguments>
<argument name="stepNames" xsi:type="array">
<item name="product_status_update" xsi:type="string">product_status_update</item>
</argument>
</arguments>
</virtualType>
<virtualType name="TechDivision\ProductStatusUpdateImport\Virtual\ConfigProvider\GetFileNamePattern" type="TechDivision\PacemakerImportBase\Model\ConfigProvider\GetFileNamePattern">
<arguments>
<argument name="scopeConfigPath" xsi:type="string">techdivision_pacemaker_import/product_status_update/file_name_pattern</argument>
</arguments>
</virtualType>
<virtualType name="TechDivision\ProductStatusUpdateImport\Virtual\ImportBunchResolver" type="TechDivision\PacemakerImportBase\Model\ImportBunchResolver">
<arguments>
<argument name="getFileNamePattern" xsi:type="object">TechDivision\ProductStatusUpdateImport\Virtual\ConfigProvider\GetFileNamePattern</argument>
</arguments>
</virtualType>
<type name="TechDivision\PacemakerImportBase\Model\ImportFilesDataFetcher">
<arguments>
<argument name="resolverConfig" xsi:type="array">
<item name="example.product_status_update.import" xsi:type="array">
<item name="resolver" xsi:type="object">TechDivision\ProductStatusUpdateImport\Virtual\ImportBunchResolver</item>
<item name="validator" xsi:type="object">TechDivision\PacemakerImportBase\Api\ImportBunchValidatorInterface</item>
<item name="pipeline_name" xsi:type="string">product_status_update_import</item>
<item name="enable_config_path" xsi:type="string">techdivision_pacemaker_import/product_status_update/enabled</item>
</item>
</argument>
</arguments>
</type>
</config>
{
"magento-edition": "CE",
"magento-version": "2.3.4",
"operation-name" : "add-update",
"archive-artefacts" : false,
"debug-mode" : false,
"entity-type-code" : "catalog_product",
"listeners" : [
{
"app.set.up" : [
"import.listener.render.ansi.art",
"import.listener.initialize.registry"
]
},
{
"app.tear.down" : [
"import.listener.clear.registry"
]
}
],
"databases" : [],
"loggers": [
{
"name": "system",
"channel-name": "logger/system",
"type": "Monolog\\Logger",
"handlers": [
{
"type": "Monolog\\Handler\\ErrorLogHandler",
"formatter": {
"type": "Monolog\\Formatter\\LineFormatter",
"params" : [
{
"format": "[%datetime%] %channel%.%level_name%: %message% %context% %extra%",
"date-format": "Y-m-d H:i:s",
"allow-inline-line-breaks": true,
"ignore-empty-context-and-extra": true
}
]
}
}
],
"processors": [
{
"type": "Monolog\\Processor\\MemoryPeakUsageProcessor"
}
]
}
],
"operations" : [
{
"name" : "add-update",
"plugins" : [
{
"id": "import.plugin.cache.warmer"
},
{
"id": "import.plugin.global.data"
},
{
"id": "import.plugin.subject",
"subjects": [
{
"id": "import.subject.move.files",
"identifier": "move-files",
"file-resolver": {
"prefix": "product-status-update"
},
"ok-file-needed": true
},
{
"id": "import_product.subject.bunch",
"identifier": "files",
"file-resolver": {
"prefix": "product-status-update"
},
"params" : [
{
"copy-images" : false,
"clean-up-empty-columns" : [
"base_image",
"small_image",
"swatch_image",
"thumbnail_image",
"special_price",
"special_price_from_date",
"special_price_to_date"
]
}
],
"observers": [
{
"import": [
"import.observer.attribute.set",
"import.observer.additional.attribute",
"import_product.observer.product",
"import_product.observer.product.attribute.update"
]
}
]
}
]
},
{
"id": "import.plugin.archive"
}
]
}
]
}
<?xml version="1.0"?>
<!--
/**
* Copyright (c) 2020 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*
* @copyright Copyright (c) 2020 TechDivision GmbH (http://www.techdivision.com)
* @author Vadim Justus <v.justus@techdivision.com>
* @link http://www.techdivision.com/
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="TechDivision_ProductStatusUpdateImport" setup_version="1.0.0">
<sequence>
<module name="TechDivision_PacemakerImportBase"/>
</sequence>
</module>
</config>
<?xml version="1.0"?>
<!--
/**
* Copyright (c) 2020 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*
* @copyright Copyright (c) 2020 TechDivision GmbH (http://www.techdivision.com)
* @author Vadim Justus <v.justus@techdivision.com>
* @link http://www.techdivision.com/
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:TechDivision_ProcessPipelines:etc/pipeline.xsd">
<pipeline name="product_status_update_import" description="Example Pipeline for a custom product update import" use-working-directory="true" expire-in="6 hours">
<conditions>
<pipeline_condition type="TechDivision\ProcessPipelines\Helper\Condition\Pipeline\NoAutoSpawn" description="No automatic start for this pipeline"/>
</conditions>
<step name="move_files" executorType="TechDivision\PacemakerImportBase\Model\Executor\MoveFilesToWorkingDirectory" sortOrder="10" description="Move files to working directory.">
<conditions>
<step_condition type="TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit1" description="Try once."/>
</conditions>
</step>
<step name="product_status_update" executorType="TechDivision\PacemakerImportBase\Model\Executor\ImportExecutor" sortOrder="20" description="Import product data">
<conditions>
<step_condition type="TechDivision\ProcessPipelines\Helper\Condition\Step\AttemptsLimit\Limit1" description="Try once."/>
<step_condition type="TechDivision\ProcessPipelines\Helper\Condition\Step\PreviousStepsCompleted" description="Previous step needs to be finished."/>
<step_condition type="TechDivision\ProductStatusUpdateImport\Virtual\Condition\Step\NoConflictingStepInProcess" description="Avoid conflicts between import steps."/>
</conditions>
<arguments>
<argument key="command" value="import:products" />
<argument key="operation" value="add-update" />
<argument key="configuration" value="TechDivision_ProductStatusUpdateImport::etc/import/product-status-update.json" />
</arguments>
</step>
</pipeline>
</config>
<?php
/**
* Copyright (c) 2020 TechDivision GmbH
* All rights reserved
*
* This product includes proprietary software developed at TechDivision GmbH, Germany
* For more information see http://www.techdivision.com/
*
* To obtain a valid license for using this software please contact us at
* license@techdivision.com
*/
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'TechDivision_ProductStatusUpdateImport',
__DIR__
);
product-status-update_20200211-120400_01.csv
sku,store_view_code,attribute_set_code,product_type,status
MS06-XS-Blue,,Default,simple,2
MS06-XS-Green,,Default,simple,2
product-status-update_20200212-120400_01.csv
sku,store_view_code,attribute_set_code,product_type,status
MS06-XS-Blue,,Default,simple,2
MS06-XS-Green,,Default,simple,2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment