private:koding:hostcms:modules:shop:cart:markup:additionalfields.php
<?php
 
defined('HOSTCMS') || exit('HostCMS: access denied.');
 
/**
 * Наблюдатель для работы с наценкой товара.
 */
class Shop_Order_Item_Observer_AdditionalFields
{
	/**
	 * Метод обратного вызова для кастомного поля shop_order_item.markup
	 * 
	 * @param  Shop_Order_Item_Model  $oShopOrderItem
	 * @param  array  $aArgs
	 * @return string
	 */
	static public function onCallmarkup(Shop_Order_Item_Model $oShopOrderItem, array $aArgs)
	{
		$markup = self::_getMarkup($oShopOrderItem);
 
		if ($markup)
		{
			return $markup . ' ' . $oShopOrderItem->Shop_Order->Shop->Shop_Currency->name;
		}
		else
		{
			return '—';
		}
	}
 
	/**
	 * Метод обратного вызова для кастомного поля shop_order_item.price_without_markup
	 * 
	 * @param  Shop_Order_Item_Model  $oShopOrderItem
	 * @param  array  $aArgs
	 * @return string
	 */
	static public function onCallprice_without_markup(Shop_Order_Item_Model $oShopOrderItem, array $aArgs)
	{
		return $oShopOrderItem->price - self::_getMarkup($oShopOrderItem);
	}
 
	/**
	 * Добавляет наценку товара в заказе
	 * 
	 * @param  Shop_Order_Item_Model $oShopOrderItem
	 * @param  array $aArgs
	 * @return void
	 */
	static public function onBeforeRedeclaredGetXml(Shop_Order_Item_Model $oShopOrderItem, array $aArgs)
	{
		$oShopOrderItem
			->addEntity(
				Core::factory('Core_Xml_Entity')
					->name('markup')
					->value(self::_getMarkup($oShopOrderItem))
			);
	}
 
	/**
	 * Возвращает наценку для товара в заказе
	 * 
	 * @param  Shop_Order_Item_Model  $oShopOrderItem
	 * @return number
	 */
	static protected function _getMarkup(Shop_Order_Item_Model $oShopOrderItem)
	{
		if (!$oShopOrderItem->shop_item_id)
		{
			return 0;
		}
 
		$oShopOrder = $oShopOrderItem->Shop_Order;
 
		$oShopOrderPropertyList = Core_Entity::factory('Shop_Order_Property_List', $oShopOrder->Shop->id);
		$oProperty = $oShopOrderPropertyList->Properties->getByTagName('markups');
 
		if (!$oProperty)
		{
			return 0;
		}
 
		$aoPropertyValues = $oShopOrder->getPropertyValues(TRUE, array($oProperty->id));
 
		if (!count($aoPropertyValues))
		{
			return 0;
		}
 
		$aMakups = @json_decode($aoPropertyValues[0]->value, TRUE);
 
		if (isset($aMakups[$oShopOrderItem->shop_item_id]))
		{
			return $aMakups[$oShopOrderItem->shop_item_id];
		}
 
		return 0;
	}
}

Страницу создал Максим Засорин 23.01.17 в 14:43

private/koding/hostcms/modules/shop/cart/markup/additionalfields.php.txt · Last modified: 27.06.17 в 16:04 by maximzasorin_gmail.com