Как автоматически отключать выгрузку определенных заказов — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 24: Строка 24:
  
 
[[Файл:Use_checkbox.png]]
 
[[Файл:Use_checkbox.png]]
 +
 +
Теперь перейдем к коду, добавим в файл /classes/modules/emarket/custom_events.php следующее:
 +
 +
<source lang="php">
 +
new umiEventListener('systemModifyObject', 'emarket', 'checkStatusOnChange');
 +
</source>
 +
 +
А в файл /classes/modules/emarket/__custom_adm.php добавим код кастомного обработчика:
 +
 +
<source lang="php">
 +
public function checkStatusOnChange(iUmiEventPoint $eventPoint){
 +
if ($eventPoint->getMode() == 'after') {
 +
$object = $eventPoint->getRef('object');
 +
 +
if ($object->getTypeGUID() == 'emarket-order') {
 +
$object_id = $object->getId();
 +
$c_enabled_object = $object->getValue('need_export');
 +
$order = order::get($object_id);
 +
$objects_coll = umiObjectsCollection::getInstance();
 +
$status = $objects_coll->getObject($order->getOrderStatus());
 +
$c_enabled_status = $status->getValue('1c_enabled');
 +
 +
if($c_enabled_status == null && $c_enabled_object == 1){
 +
$object->setValue('need_export', null);
 +
$object->commit();
 +
}else{
 +
return;
 +
}
 +
}else{
 +
return;
 +
}
 +
}else{
 +
return;
 +
}
 +
}
 +
</source>
 
[[category:Интеграция с 1С]]
 
[[category:Интеграция с 1С]]

Версия 11:21, 9 апреля 2014

Актуально для версии 2.9.6

Задача

Как известно, любой оформленный заказа сразу получает галочку "Выгружать заказ в 1С при следующем сеансе связи". Если Вы хотите, чтобы заказы с определенным типом оплаты или доставки, а также заказы с определенным статусом на выгружались, то необходимо производить кастомизации.

Решение

Есть два способа повлиять на выгрузку заказов - использовать событийную модель или кастомизировать xslt шаблон выгрузки. Далее будет рассмотрено по примеру каждого способа.

Решение через обработчик события

Допустим, Вы хотите, чтобы после того, как Ваш менеджер проставил заказу статус "отклонен" или "Отменен", у заказа автоматически отключалась галочка "Выгружать заказ в 1С при следующем сеансе связи" и в 1С он не попадал.

Решать задачу будем с помощью обработчика события systemModifyObject, обратите внимание, что при изменении статуса через административную панель срабатывает именно это событие, а не события модуля emarket.

Сначала дадим возможность управлять "выгружаемостью" заказов по статусам заказа.

Для этого зайдем в тип данных "Статус заказа" и добавим новое поле:

Add status field.png

Потом зайдем в тип данных "Статус заказа", как в справочник, и проставим галочки:

Use checkbox.png

Теперь перейдем к коду, добавим в файл /classes/modules/emarket/custom_events.php следующее:

new umiEventListener('systemModifyObject', 'emarket', 'checkStatusOnChange');

А в файл /classes/modules/emarket/__custom_adm.php добавим код кастомного обработчика:

public function checkStatusOnChange(iUmiEventPoint $eventPoint){	
	if ($eventPoint->getMode() == 'after') {
		$object = $eventPoint->getRef('object');
		
		if ($object->getTypeGUID() == 'emarket-order') {
			$object_id = $object->getId();
			$c_enabled_object = $object->getValue('need_export');
			$order = order::get($object_id);
			$objects_coll = umiObjectsCollection::getInstance();
			$status = $objects_coll->getObject($order->getOrderStatus());
			$c_enabled_status = $status->getValue('1c_enabled');
			
			if($c_enabled_status == null && $c_enabled_object == 1){
				$object->setValue('need_export', null);
				$object->commit();
			}else{
				return;
			}
		}else{
			return;
		}
	}else{
		return;
	}
}