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

Материал из Umicms
Перейти к:навигация, поиск
Строка 19: Строка 19:
 
'''$id'''
 
'''$id'''
 
   Идентификатор заказа, который требуется отклонить.
 
   Идентификатор заказа, который требуется отклонить.
 +
 +
Для применения этого макроса скопируйте код макроса в файл /classes/modules/emarket/__custom.php.
 +
 +
== Код макроса ==
 +
 +
<source lang="php">
 +
public function cancelOrder($id = false){
 +
if($id == false){
 +
$id = getRequest('id');
 +
}
 +
$o_coll = umiObjectsCollection::getInstance();
 +
if(!$id || !$o_coll->getObject($id)){
 +
return $result = array('error' => 'Передан неверный статус заказа');
 +
}
 +
$order = order::get($id);
 +
$status_id = $order->getOrderStatus();
 +
$status = $order->getCodeByStatus($status_id);
 +
if($status == 'ready' || $status == 'canceled' || $status == 'rejected' || $status == 'canceled_by_customer'){
 +
return $result = array('error' => 'У данного заказа уже нельзя поменять статус');
 +
}
 +
$order_cust_id = intval($order->getCustomerId());
 +
$current_cust_id = intval(customer::get(true)->getId());
 +
if($order_cust_id !== $current_cust_id){
 +
return $result = array('error' => 'У Вас нет прав на смену статуса этого заказа');
 +
}
 +
$cancel_order_status_id = order::getStatusByCode('canceled_by_customer');
 +
$order->setOrderStatus($cancel_order_status_id);
 +
return $result = array('success' => 'Заказ был отклонен');
 +
}
 +
</source>
 
  [[category:Модуль Интернет магазин]]
 
  [[category:Модуль Интернет магазин]]

Версия 16:06, 17 апреля 2014

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

Задача

Если Вы хотите дать покупателю возможность отклонить заказа через свой личный кабинет, то Вам придется писать кастомный макрос(ы), так как системного макроса нет. Пример макроса даем ниже.

Решение

Сначала создадим в справочнике "статус заказа" еще один элемент:

New status.png

Теперь перейдем к макросу:

%emarket cancelOrder()% — меняет статус заказа на "Отклонен покупателем".

Параметры: emarket cancelOrder($id = false)

$id

  Идентификатор заказа, который требуется отклонить.

Для применения этого макроса скопируйте код макроса в файл /classes/modules/emarket/__custom.php.

Код макроса

public function cancelOrder($id = false){
	if($id == false){
		$id = getRequest('id');
	}
	$o_coll = umiObjectsCollection::getInstance();
	if(!$id || !$o_coll->getObject($id)){
		return $result = array('error' => 'Передан неверный статус заказа');
	}
	$order = order::get($id);
	$status_id = $order->getOrderStatus();
	$status = $order->getCodeByStatus($status_id);
	if($status == 'ready' || $status == 'canceled' || $status == 'rejected' || $status == 'canceled_by_customer'){
		return $result = array('error' => 'У данного заказа уже нельзя поменять статус');
	}
	$order_cust_id = intval($order->getCustomerId());
	$current_cust_id = intval(customer::get(true)->getId());
	if($order_cust_id !== $current_cust_id){
		return $result = array('error' => 'У Вас нет прав на смену статуса этого заказа');
	}
	$cancel_order_status_id = order::getStatusByCode('canceled_by_customer');
	$order->setOrderStatus($cancel_order_status_id);
	return $result = array('success' => 'Заказ был отклонен');
}