From 94c44ea003126deb1d9a4e3c42bd61c77877f050 Mon Sep 17 00:00:00 2001 From: Benjamin Perche Date: Tue, 22 Jul 2014 13:51:40 +0200 Subject: [PATCH] =?UTF-8?q?Add=20attribute=20combinasions=20in=20export=20?= =?UTF-8?q?=09modifi=C3=A9:=20=20=20=20=20=20=20=20=20core/lib/Thelia/Impo?= =?UTF-8?q?rtExport/Export/Type/ProductPricesExport.php?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Export/Type/ProductPricesExport.php | 72 +++++++++++++------ 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php b/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php index 200a90e3f..d7329f3a2 100644 --- a/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php +++ b/core/lib/Thelia/ImportExport/Export/Type/ProductPricesExport.php @@ -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,45 +64,73 @@ 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() - ->useProductPriceQuery() - ->useCurrencyQuery() - ->addAsColumn("currency_CODE", CurrencyTableMap::CODE) + $query = AttributeCombinationQuery::create() + ->useProductSaleElementsQuery() + ->useProductPriceQuery() + ->useCurrencyQuery() + ->addAsColumn("currency_CODE", CurrencyTableMap::CODE) + ->endUse() + ->addAsColumn("price_PRICE", ProductPriceTableMap::PRICE) + ->addAsColumn("price_PROMO_PRICE", ProductPriceTableMap::PROMO_PRICE) ->endUse() - ->addAsColumn("price_PRICE", ProductPriceTableMap::PRICE) - ->addAsColumn("price_PROMO_PRICE", ProductPriceTableMap::PROMO_PRICE) + ->useProductQuery() + ->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() - ->useProductQuery() - ->useProductI18nQuery(null, Criteria::LEFT_JOIN) - ->addAsColumn("product_TITLE", ProductI18nTableMap::TITLE) + ->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);