Регистрация
Вход через соцсети
Восстановление пароля

Программное изменение статуса заказа

Новый топик
23.05.2014, 08:53
Ответить | Цитировать
Shnit

Зарегистрирован:
2009-08-05
Сообщений: 3

Товарищи, подскажите как программно изменять статус заказа, чтобы отрабатывали события - "высылать письмо при переходе заказа в данный статус"?
24.05.2014, 19:57
Ответить | Цитировать
Руслан Густокашин
Студия Вэлпис
Руслан Густокашин

Зарегистрирован:
2012-02-06
Сообщений: 869

Хе, а ведь интересный вопрос! Тоже интересует. Если найдете ответ - дайте знать, пожалуйста.

25.05.2014, 15:11
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Событие состоит из действия(checked) и названия сущности(Comment)
Например checkedComment
http://www.netcat.ru/developers/docs/events/

Часть 1 (сообщение системе о событии)
Вам необходимо транслировать события
$nc_core->event->execute в первом параметре передаете "Событие" а далее "Параметры"
Таким образом для того чтобы проверить Что "включили сайт" необходимо
$nc_core->event->execute("checkCatalogue",Catalogue_ID)
А для проверки "удаления компонента из раздела"
$nc_core->event->execute("dropSubClass",Catalogue_ID, Subdivision_ID, Sub_Class_ID)
http://www.netcat.ru/developers/docs/events/system-events/
Внимание! Последний параметр в транслируемом событии может быть как целым числом (в случае, если в действии участвовал один объект), так и массивом чисел (при групповом действии). Методы-слушатели должны учитывать это.

Пример
Код:
// обновление статуса
$db->query("UPDATE Message2045 SET status=2 WHERE Message_ID=5");

// трансляция события
$nc_core->event->execute("updateMessage", 1, 45, 65, 2045, 5);



Часть 2 (прикрепление события)
Для обработки вашей пользовательской функции(дополнительный метод) необходимо во втором параметре передать массив туда будут переданы параметры из таблицы
http://www.netcat.ru/developers/docs/events/system-events/

Пример
Код можно поместить в модуль «Интерфейс разработчика», в файл /netcat/modules/default/function.inc.php
Код:
class ListenUpdateMessage {
public function __construct () {
$nc_core = nc_Core::get_object();
$nc_core->event->bind($this, array("updateMessage" => "updateMessageStatus"));
}

public function updateMessageStatus ( $Catalogue_ID, $Subdivision_ID, $Sub_Class_ID, $Class_ID, $Message_ID ) {
$nc_core = nc_Core::get_object();
$system_env = $nc_core->get_settings();

$status = $nc_core->message->get_by_id( $Class_ID, $Message_ID, "status");

$mailer = new CMIMEMail();
$mailer->mailbody('Статус заказа изменился на '.$status);
$mailer->send('admin@example.com',$system_env['SpamFromEmail'],$system_env['SpamFromEmail'],'Изменение статуса заказа',$system_env['SpamFromName']);

return 0;
}
}

$listenObj = new ListenUpdateMessage();


В итоге в первой части мы транслировали событие системе и когда она его услышала то выполнила вторую часть

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
25.05.2014, 21:59
Ответить | Цитировать
Shnit

Зарегистрирован:
2009-08-05
Сообщений: 3

Решил вопрос таким способом:
Код:

$netshop = nc_netshop::get_instance();
$order = $netshop->load_order($order_id);
$order->set('Status', $new_status);
$netshop->mailer->process_order_status_change($order);
$order->save();


в функции process_order_status_change идет проверка на необходимость отправки писем в зависимости от статуса заказа..
26.05.2014, 11:28
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

Вы ведь хотели через систему событий. Почему решили делать без нее?

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
26.05.2014, 16:45
Ответить | Цитировать
Shnit

Зарегистрирован:
2009-08-05
Сообщений: 3

Я наверно не совсем правильно сформулировал изначальный вопрос.. мне надо было сделать так, чтобы когда я изменяю программно статус отсылалось или не отсылалось письмо в зависимости от настроек шаблонов писем в магазине.

через систему событий тоже дело хорошее, но там получалось надо писать свой велосипед отправки писем и проверки статуса заказа, что не имело смысл, т.к. нашел такую функцию в самой системе)
198 196 2014-05-26 16:45:31 13660
Описание проекта