Add attribute combinasions in export

modifié:         core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php
This commit is contained in:
Benjamin Perche
2014-07-22 13:51:40 +02:00
parent ad3c1ce387
commit 94c44ea003

View File

@@ -12,18 +12,18 @@
namespace Thelia\ImportExport\Export\Type;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\Propel;
use Thelia\Core\FileFormat\Formatting\FormatterData;
use Thelia\Core\FileFormat\FormatType;
use Thelia\ImportExport\Export\ExportHandler;
use Thelia\Model\Base\ProductSaleElementsQuery;
use Thelia\Model\Base\AttributeCombinationQuery;
use Thelia\Model\Lang;
use Thelia\Model\Map\AttributeAvI18nTableMap;
use Thelia\Model\Map\AttributeAvTableMap;
use Thelia\Model\Map\CurrencyTableMap;
use Thelia\Model\Map\ProductI18nTableMap;
use Thelia\Model\Map\ProductPriceTableMap;
use Thelia\Model\Map\ProductSaleElementsTableMap;
use Thelia\Model\ProductI18nQuery;
use Thelia\Model\Tools\ModelCriteriaTools;
use Thelia\Model\Map\ProductTableMap;
/**
* Class ProductPricesExport
@@ -64,18 +64,20 @@ class ProductPricesExport extends ExportHandler
public function buildFormatterData(Lang $lang)
{
$aliases = [
ProductSaleElementsTableMap::REF => "ref",
ProductSaleElementsTableMap::EAN_CODE => "ean",
"product_sale_elements_REF" => "ref",
"product_sale_elements_EAN_CODE" => "ean",
"price_PRICE" => "price",
"price_PROMO_PRICE" => "promo_price",
"currency_CODE" => "currency",
"product_TITLE" => "title",
"attribute_av_i18n_ATTRIBUTES" => "attributes",
];
$locale = $this->real_escape($lang->getLocale());
$defaultLocale = $this->real_escape(Lang::getDefaultLanguage()->getLocale());
$query = ProductSaleElementsQuery::create()
$query = AttributeCombinationQuery::create()
->useProductSaleElementsQuery()
->useProductPriceQuery()
->useCurrencyQuery()
->addAsColumn("currency_CODE", CurrencyTableMap::CODE)
@@ -84,25 +86,51 @@ class ProductPricesExport extends ExportHandler
->addAsColumn("price_PROMO_PRICE", ProductPriceTableMap::PROMO_PRICE)
->endUse()
->useProductQuery()
->useProductI18nQuery(null, Criteria::LEFT_JOIN)
->useProductI18nQuery()
->addAsColumn("product_TITLE", ProductI18nTableMap::TITLE)
->endUse()
->endUse()
->addAsColumn("product_sale_elements_REF", ProductSaleElementsTableMap::REF)
->addAsColumn("product_sale_elements_EAN_CODE", ProductSaleElementsTableMap::EAN_CODE)
->endUse()
->useAttributeAvQuery()
->useAttributeAvI18nQuery(null, Criteria::INNER_JOIN)
->addAsColumn(
"attribute_av_i18n_ATTRIBUTES",
"GROUP_CONCAT(DISTINCT ".AttributeAvI18nTableMap::TITLE.")"
)
->endUse()
->endUse()
->select([
ProductSaleElementsTableMap::REF,
ProductSaleElementsTableMap::EAN_CODE,
"product_sale_elements_REF",
"product_sale_elements_EAN_CODE",
"price_PRICE",
"price_PROMO_PRICE",
"currency_CODE",
"product_TITLE"
"product_TITLE",
"attribute_av_i18n_ATTRIBUTES",
])
->where(
"CASE WHEN `product`.ID IN".
"(SELECT DISTINCT id FROM product_i18n WHERE locale=$locale)".
"THEN product_i18n.locale = $locale ".
"ELSE product_i18n.locale = $defaultLocale ".
"CASE WHEN ".ProductTableMap::ID." IN".
"(SELECT DISTINCT ".ProductI18nTableMap::ID." ".
"FROM `".ProductI18nTableMap::TABLE_NAME."` ".
"WHERE locale=$locale) ".
"THEN ".ProductI18nTableMap::LOCALE." = $locale ".
"ELSE ".ProductI18nTableMap::LOCALE." = $defaultLocale ".
"END"
)
->_and()
->where(
"CASE WHEN ".AttributeAvTableMap::ID." IN".
"(SELECT DISTINCT ".AttributeAvI18nTableMap::ID." ".
"FROM `".AttributeAvI18nTableMap::TABLE_NAME."` ".
"WHERE locale=$locale)".
"THEN ".AttributeAvI18nTableMap::LOCALE." = $locale ".
"ELSE ".AttributeAvI18nTableMap::LOCALE." = $defaultLocale ".
"END"
)
->groupBy("product_sale_elements_REF")
;
$data = new FormatterData($aliases);