Для товаров интернет-магазина есть возможно указывать специальные цены, зависящие от количества приобретаемого товара. Данные о таких ценах, если я все правильно понял хранятся в БД в таблице
shop_specialprices.
Есть желание создавать такие типы цен прямо в 1С и загружать их в CMS в процессе автоматического обмена с сайтом.
Для этого в XML offers.xml был изменен код.
Было так:
<КоммерческаяИнформация>
<ПакетПредложений>
<Предложения>
<Предложение>
<Цены>
<Цена>
</Цена>
</Цены>
</Предложение>
</Предложения>
</ПакетПредложений>
</КоммерческаяИнформация>
В тег
<Цена> были добавлены дочерние теги.
Стало так.
<КоммерческаяИнформация>
<ПакетПредложений>
<Предложения>
<Предложение>
<Цены>
<Цена>
<Специальные>
<Специальная>
<МинКол />
<МаксКол />
<Значение />
<Процент />
</Специальная>
</Специальные>
</Цена>
</Цены>
</Предложение>
</Предложения>
</ПакетПредложений>
</КоммерческаяИнформация>
В код контроллера импорта товаров
Shop_Item_Import_Cml_Controller я внес следующие изменения (начиная со строки 1660 файла /modules/shop/item/import/cml/controller.php).
foreach ($this->xpath($oProposal, 'Цены/Цена') as $oPrice)
{
Core_Event::notify(get_class($this) . '.onBeforeImportShopItemPrice', $this, array($oShopItem, $packageOfProposals, $oProposal, $oPrice));
// Внесенные мною изменения
// Если есть специальные цены
if ( $this->xpath($oPrice, 'Специальные/Специальная') ) {
$oItem_SpecialPrices = $oShopItem->Shop_Specialprices->getByShop_Item_Id( $oShopItem->id );
// Удаляем существующие связи со спец.ценами
$oItem_SpecialPrices->deleteAll( FALSE );
}
foreach ( $this->xpath($oPrice, 'Специальные/Специальная') as $oSpecialPrice ) {
// Если не установлены и минимальное, и макисмальное значения, ничего не делать
if (!$oSpecialPrice->МинКол && !$oSpecialPrice->МаксКол) {
continue;
}
// Сохраняем новые специальные цены
$oShop_Specialprice = Core_Entity::factory( "Shop_Specialprice" );
$oShop_Specialprice->shop_item_id( $oShopItem->id )
->min_quantity( $oSpecialPrice->МинКол )
->max_quantity($oSpecialPrice->МаксКол )
->price( $oSpecialPrice->Значение )
->percent($oSpecialPrice->Процент )
->save();
}
// Далее стандартный код контроллера
Всё ли правильно я задумал? Или что-то не там и не так дописано?