Уведомить пользователя по электронной почте, если заказ находится на рассмотрении в течение 2 дней


Что мне нужно сделать, так это: Мне нужно отправить электронное письмо клиенту

if his order has been pending (or some other custom status) for two days and 

cancel the order if this time becomes 3 days.

В электронном письме должен быть заказ и пользовательское сообщение.

Я нашел это http://inchoo.net/magento/cancel-pending-orders / но нужна помощь с отправкой электронной почты.

Любая помощь приветствуется.

Author: Amit Bera, 2014-11-14

3 answers

Привет вам работа в cron сервис, где вы можете отправить электронное письмо клиенту на ежедневной основе.

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

Вам нужно изменить расширение inchoo:

public function cancelPendingOrders()
{

    // load custom variable for the comment
    $msg = Mage::getModel('core/variable')
    ->setStoreId(Mage::app()->getStore()->getId())
    ->loadByCode('pending_payment')
    ->getValue('text');

    // echo $msg;


    $orders = Mage::getModel('sales/order')->getCollection()
    ->addFieldToFilter('status', 'pending')
    ->addFieldToFilter('created_at', array('lt' =>  new Zend_Db_Expr("DATE_ADD('".now()."', INTERVAL -'48' HOUR)"))) ;

    foreach ($orders as $order) {
        // Add the comment and save the order
        $order->addStatusToHistory($order->getStatus(), $msg , $isCustomerNotified = true);
        $order->setStatus('ap');
        $order->save();

    }

}
 1
Author: Amit Bera, 2014-11-14 12:14:28

Как всегда, все можно найти в блоге Inchoo (Эти ребята отличные). Этот пост о пользовательских электронных письмах должен вам помочь.

  1. Создайте шаблон электронной почты в формате HTML
  2. Добавьте его в свой config.xml
  3. Добавьте обработчик электронной почты в свой скрипт
  4. ...
  5. $$$
 1
Author: Sander Mangel, 2014-11-14 08:48:50

В вашем config.xml объявите файл шаблона со следующим:

<?xml version="1.0"?>
<config>
    <global>
        ...
        <template>
            <email>
                <description_of_template translate="label" module="yourmodule">
                    <label>Template Label</label>
                    <file>your_template.html</file>
                    <type>html</type>
                </description_of_template>
            </email>
        </template>
        ....
    </global>
    ...
</config>

Создайте файл шаблона в расположении app/locale/(en_US)/template/email/your_template.html. Это, конечно, может содержать все, что вам нравится, и, вероятно, проще всего основывать его на существующем шаблоне, чтобы сохранить согласованное форматирование. Вот простой пример:

<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
    <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
        <table cellspacing="0" cellpadding="0" border="0" width="100%">
            <tr>
                <td align="center" valign="top" style="padding:20px 0 20px 0">
                    <table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
                        <tr>
                            <td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
                        </tr>
                        <tr>
                            <td valign="top">
                                <h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Hello {{htmlescape var=$customer.getName()}}</h1>
                                <p style="font-size:12px; line-height:16px; margin:0;">
                                    Here is the email for {{htmlescape var=$product.getName()}} you recently requested.<br /><br />
                                    If you have any queries or require support contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}">{{config path='trans_email/ident_support/email'}}</a>.
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;"><center><p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p></center></td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </div>
</body>

Вы заметите разделы электронного письма, такие как {{htmlescape var=$product.getName()}} - это переменные электронной почты, которые будут заменены до отправки электронного письма в соответствии с переменными, которые вы передаете при вызове send() к которому мы вскоре перейдем.

Далее код для фактической отправки электронного письма:

$email = Mage::getModel('core/email_template')->loadDefault('description_of_template');
$email->setTemplateSubject('Some Subject');
$email->setSenderName(Mage::getStoreConfig('trans_email/ident_sales/name', 1));
$email->setSenderEmail(Mage::getStoreConfig('trans_email/ident_sales/email', 1));

$product = Mage::getModel('catalog/product')->load($someproductid);
$store = Mage::getModel('core/store')->load($somestoreid);
$customer = Mage::getModel('customer/customer')->load($somecustomerid);

$data = array('product' => $product, 'store' => $store, 'customer' => $customer);

$success = $email->send($customer->getEmail(), $customer->getName(), $data);

if ($success):
    Mage::log('Email sent');
else:
    Mage::log('Could not send email');
endif;

В приведенном выше массиве $data содержит переменные, которые используются в качестве источника данных для замены содержимого фигурных скобок, поэтому, например, $customer.getName() эквивалентно вызову $customer->getName() для объекта $customer, переданного шаблону как customer в массиве $data.

 1
Author: Jonathan Hussey, 2014-11-14 09:17:34