Выгрузка габаритов и веса в ICML
This commit is contained in:
parent
23bfe5c6fb
commit
6e66eb3aea
@ -59,7 +59,7 @@ class CustomersExport extends Command
|
|||||||
*
|
*
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*
|
*
|
||||||
* @return boolean
|
* @return int
|
||||||
*/
|
*/
|
||||||
protected function execute(InputInterface $input, OutputInterface $output)
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
{
|
{
|
||||||
@ -89,7 +89,7 @@ class CustomersExport extends Command
|
|||||||
if (empty($customers)) {
|
if (empty($customers)) {
|
||||||
$output->writeln('<comment>Customers not found</comment>');
|
$output->writeln('<comment>Customers not found</comment>');
|
||||||
|
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var \Magento\Customer\Model\Customer $customer */
|
/** @var \Magento\Customer\Model\Customer $customer */
|
||||||
@ -112,6 +112,6 @@ class CustomersExport extends Command
|
|||||||
|
|
||||||
$output->writeln('<info>Uploading customers finished</info>');
|
$output->writeln('<info>Uploading customers finished</info>');
|
||||||
|
|
||||||
return true;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
79
src/Console/Command/IcmlGenerate.php
Normal file
79
src/Console/Command/IcmlGenerate.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Retailcrm\Retailcrm\Console\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
|
||||||
|
class IcmlGenerate extends Command
|
||||||
|
{
|
||||||
|
private $icml;
|
||||||
|
private $storeManager;
|
||||||
|
private $appState;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
\Retailcrm\Retailcrm\Model\Icml\Icml $icml,
|
||||||
|
\Magento\Store\Model\StoreManagerInterface $storeManager,
|
||||||
|
\Magento\Framework\App\State $appState
|
||||||
|
) {
|
||||||
|
$this->icml = $icml;
|
||||||
|
$this->storeManager = $storeManager;
|
||||||
|
$this->appState = $appState;
|
||||||
|
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this->setName('retailcrm:icml:generate')
|
||||||
|
->setDescription('Generating ICML catalog in root directory')
|
||||||
|
->addArgument('website', InputArgument::OPTIONAL, 'Website id');
|
||||||
|
|
||||||
|
parent::configure();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate ICML catalog
|
||||||
|
*
|
||||||
|
* @param InputInterface $input
|
||||||
|
* @param OutputInterface $output
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
|
*
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$this->appState->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL);
|
||||||
|
|
||||||
|
$arguments = $input->getArguments();
|
||||||
|
$websites = [];
|
||||||
|
|
||||||
|
if (isset($arguments['website'])) {
|
||||||
|
$websites[] = $this->storeManager->getWebsite($arguments['website']);
|
||||||
|
} else {
|
||||||
|
$websites = $this->storeManager->getWebsites();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$websites) {
|
||||||
|
$output->writeln('<comment>Websites not found</comment>');
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($websites as $website) {
|
||||||
|
try {
|
||||||
|
$this->icml->generate($website);
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
$output->writeln('<comment>' . $exception->getMessage() . '</comment>');
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,8 @@ class Icml
|
|||||||
private $searchCriteriaBuilder;
|
private $searchCriteriaBuilder;
|
||||||
private $productRepository;
|
private $productRepository;
|
||||||
|
|
||||||
|
const DIMENSION_FIELDS = ['height', 'length', 'width'];
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
\Magento\Store\Model\StoreManagerInterface $manager,
|
\Magento\Store\Model\StoreManagerInterface $manager,
|
||||||
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
|
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
|
||||||
@ -217,6 +219,20 @@ class Icml
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!empty($offer['dimensions'])) {
|
||||||
|
$e->appendChild($this->dd->createElement('dimensions'))
|
||||||
|
->appendChild(
|
||||||
|
$this->dd->createTextNode($offer['dimensions'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($offer['weight'])) {
|
||||||
|
$e->appendChild($this->dd->createElement('weight'))
|
||||||
|
->appendChild(
|
||||||
|
$this->dd->createTextNode($offer['weight'])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($offer['params'])) {
|
if (!empty($offer['params'])) {
|
||||||
foreach ($offer['params'] as $param) {
|
foreach ($offer['params'] as $param) {
|
||||||
$paramNode = $this->dd->createElement('param');
|
$paramNode = $this->dd->createElement('param');
|
||||||
@ -309,8 +325,16 @@ class Icml
|
|||||||
$offer['vendor'] = $associatedProduct === null
|
$offer['vendor'] = $associatedProduct === null
|
||||||
? $product->getAttributeText('manufacturer')
|
? $product->getAttributeText('manufacturer')
|
||||||
: $associatedProduct->getAttributeText('manufacturer');
|
: $associatedProduct->getAttributeText('manufacturer');
|
||||||
|
$offer['weight'] = $associatedProduct === null
|
||||||
|
? $product->getWeight()
|
||||||
|
: $associatedProduct->getWeight();
|
||||||
|
|
||||||
$offer['params'] = $this->getOfferParams($product, $customAdditionalAttributes, $associatedProduct);
|
$params = $this->getOfferParams($product, $customAdditionalAttributes, $associatedProduct);
|
||||||
|
|
||||||
|
$offer['params'] = $params['params'];
|
||||||
|
$offer['dimensions'] = $params['dimensions'];
|
||||||
|
|
||||||
|
unset($params);
|
||||||
|
|
||||||
return $offer;
|
return $offer;
|
||||||
}
|
}
|
||||||
@ -333,8 +357,16 @@ class Icml
|
|||||||
}
|
}
|
||||||
|
|
||||||
$attributes = explode(',', $customAdditionalAttributes);
|
$attributes = explode(',', $customAdditionalAttributes);
|
||||||
|
$dimensionsAttrs = [];
|
||||||
|
$dimensions = '';
|
||||||
|
|
||||||
foreach ($attributes as $attributeCode) {
|
foreach ($attributes as $attributeCode) {
|
||||||
|
if ($this->checkDimension($attributeCode) !== false) {
|
||||||
|
$dimensionsAttrs += $this->checkDimension($attributeCode);
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$attribute = $this->resourceModelProduct->getAttribute($attributeCode);
|
$attribute = $this->resourceModelProduct->getAttribute($attributeCode);
|
||||||
$attributeValue = $associatedProduct
|
$attributeValue = $associatedProduct
|
||||||
? $associatedProduct->getData($attributeCode)
|
? $associatedProduct->getData($attributeCode)
|
||||||
@ -350,7 +382,28 @@ class Icml
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $params;
|
if ($dimensionsAttrs && count($dimensionsAttrs) == 3) {
|
||||||
|
$length = $associatedProduct
|
||||||
|
? $associatedProduct->getData($dimensionsAttrs['length'])
|
||||||
|
: $product->getData($dimensionsAttrs['length']);
|
||||||
|
$width = $associatedProduct
|
||||||
|
? $associatedProduct->getData($dimensionsAttrs['width'])
|
||||||
|
: $product->getData($dimensionsAttrs['width']);
|
||||||
|
$height = $associatedProduct
|
||||||
|
? $associatedProduct->getData($dimensionsAttrs['height'])
|
||||||
|
: $product->getData($dimensionsAttrs['height']);
|
||||||
|
|
||||||
|
if ($length && $width && $height) {
|
||||||
|
$dimensions = sprintf(
|
||||||
|
'%s/%s/%s',
|
||||||
|
$length,
|
||||||
|
$width,
|
||||||
|
$height
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ['params' => $params, 'dimensions' => $dimensions];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -383,4 +436,20 @@ class Icml
|
|||||||
|
|
||||||
return $quantity;
|
return $quantity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $attrCode
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function checkDimension($attrCode)
|
||||||
|
{
|
||||||
|
foreach (self::DIMENSION_FIELDS as $dimensionField) {
|
||||||
|
if (mb_strpos($attrCode, $dimensionField) !== false) {
|
||||||
|
return [$dimensionField => $attrCode];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ class Attribute implements \Magento\Framework\Option\ArrayInterface
|
|||||||
'select',
|
'select',
|
||||||
'price'
|
'price'
|
||||||
];
|
];
|
||||||
|
|
||||||
$attributes = $this->entityType->loadByCode('catalog_product')->getAttributeCollection();
|
$attributes = $this->entityType->loadByCode('catalog_product')->getAttributeCollection();
|
||||||
$attributes->addFieldToFilter('frontend_input', $types);
|
$attributes->addFieldToFilter('frontend_input', $types);
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
<argument name="commands" xsi:type="array">
|
<argument name="commands" xsi:type="array">
|
||||||
<item name="orders_export_command" xsi:type="object">Retailcrm\Retailcrm\Console\Command\OrdersExport</item>
|
<item name="orders_export_command" xsi:type="object">Retailcrm\Retailcrm\Console\Command\OrdersExport</item>
|
||||||
<item name="customers_export_command" xsi:type="object">Retailcrm\Retailcrm\Console\Command\CustomersExport</item>
|
<item name="customers_export_command" xsi:type="object">Retailcrm\Retailcrm\Console\Command\CustomersExport</item>
|
||||||
|
<item name="icml_generate_command" xsi:type="object">Retailcrm\Retailcrm\Console\Command\IcmlGenerate</item>
|
||||||
</argument>
|
</argument>
|
||||||
</arguments>
|
</arguments>
|
||||||
</type>
|
</type>
|
||||||
|
Loading…
Reference in New Issue
Block a user