Программно отправлять / отслеживать почту - PullRequest
5 голосов
/ 27 марта 2012

В Magento 1.4 я успешно использую этот код, чтобы отметить заказ как завершенный и добавить к нему код отслеживания доставки:

$order = Mage::getModel('sales/order')->loadByIncrementId($increment_id);

if($order->canShip())
{
$itemQty =  $order->getItemsCollection()->count();
$ship = Mage::getModel('sales/service_order', $order)->prepareShipment($itemQty);
$ship = new Mage_Sales_Model_Order_Shipment_Api();
$shipmentId = $ship->create($increment_id);
}

$shipment_collection = Mage::getResourceModel('sales/order_shipment_collection');
$shipment_collection->addAttributeToFilter('order_id', $order_id);

foreach($shipment_collection as $sc) {
    $shipment = Mage::getModel('sales/order_shipment');
    $shipment->load($sc->getId());
    if($shipment->getId() != '') { 
        $track = Mage::getModel('sales/order_shipment_track')
                 ->setShipment($shipment)
                 ->setData('title', $type)
                 ->setData('number', $code)
                 ->setData('carrier_code', 'custom')
                 ->setData('order_id', $shipment->getData('order_id'))
                 ->save();
        }
} 

Он работает правильно, но я не могу найти нужный фрагменткод Мне нужно отправить письмо с подтверждением отгрузки клиенту, например, когда вы отметите нужную ячейку и подтвердите доставку в бэкэнде magento.

Заранее большое спасибо за вашу помощь.

Ответы [ 2 ]

5 голосов
/ 27 марта 2012
                if($shipment){
                    if(!$shipment->getEmailSent()){
                        $shipment->sendEmail(true);
                        $shipment->setEmailSent(true);
                        $shipment->save();                          
                    }
                }   
0 голосов
/ 08 ноября 2017

Я потратил много времени на то, чтобы возиться с этим сам ... вместо того, чтобы использовать модель sales / order_shipment_track для добавления отслеживания, вы можете использовать тот же Api, который вы использовали для создания отгрузки, а затем выполнить это с помощью sendInfo () Api.способ отправить письмо с информацией об отслеживании.(переименовано в $ ship из примера OP в $ shipmentApi)

    //add tracking info ($shippingCarrier is case sensitive)
    $shipmentApi->addTrack($shipmentIncrementId, $shippingCarrier, $shippingTitle, $trackingNumber);

    //send shipment email with tracking info
    $shipmentApi->sendInfo($shipmentIncrementId);

Полный пример:

if($order->canShip()){

    $shipmentApi = Mage::getModel('sales/order_shipment_api');

    //pass false for email, unless you want Magento to send the shipment email without any tracking info
    //could also be written as $shipmentIncrementId = $shipmentApi->create($order->getIncrementId());
    $shipmentIncrementId = $shipmentApi->create($order->getIncrementId(), array(), '' , false, 0); 

    //add tracking info ($shippingCarrier is case sensitive)
    $shipmentApi->addTrack($shipmentIncrementId, $shippingCarrier, $shippingTitle, $trackingNumber);

    //send shipment email with tracking info
    $shipmentApi->sendInfo($shipmentIncrementId);
}

См. app\code\core\Mage\Sales\Model\Order\Shipment\Api.php для всех методов.

...