I have written a custom observer during customer save after event to generate unique coupon codes and append in welcome email during that is sent during Customer Registration.
The coupon code functionality is working fine. Using send() I am trying to pass the custom variables I stored in an array. But I am unable to add it in the template.
Please find below my code snippets.
Observer.php
<?php
class XYZ_Promocode_Model_Observer {
public function customerSaveAfter(Varien_Event_Observer $o) {
$customerData = $o -> getCustomer() -> getData();
if (!$o -> getCustomer() -> getOrigData()) {
$modelcollection = Mage::getModel('salesrule/rule') -> getCollection();
$newCollection = array();
$newCollection = $modelcollection -> getData();
$ruleName = $newCollection[0]['name'];
$rule_id = $newCollection[0]['rule_id'];
if ($rule_id == 1 && $ruleName == "RegisteredUserPromocode") {
$rule = Mage::getModel('salesrule/rule') -> load(1);
$generator = Mage::getModel('salesrule/coupon_massgenerator');
$parameters = array('count' => 1, 'format' => 'alphanumeric', 'dash_every_x_characters' => 4, 'prefix' => 'ABCD-EFGH-', 'suffix' => '-WXYZ', 'length' => 8);
if (!empty($parameters['format'])) {
switch( strtolower($parameters['format']) ) {
case 'alphanumeric' :
case 'alphanum' :
$generator -> setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHANUMERIC);
break;
case 'alphabetical' :
case 'alpha' :
$generator -> setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_ALPHABETICAL);
break;
case 'numeric' :
case 'num' :
$generator -> setFormat(Mage_SalesRule_Helper_Coupon::COUPON_FORMAT_NUMERIC);
break;
}
}
$generator -> setDash(!empty($parameters['dash_every_x_characters']) ? (int)$parameters['dash_every_x_characters'] : 0);
$generator -> setLength(!empty($parameters['length']) ? (int)$parameters['length'] : 6);
$generator -> setPrefix(!empty($parameters['prefix']) ? $parameters['prefix'] : '');
$generator -> setSuffix(!empty($parameters['suffix']) ? $parameters['suffix'] : '');
$rule -> setCouponCodeGenerator($generator);
$rule -> setCouponType(Mage_SalesRule_Model_Rule::COUPON_TYPE_AUTO);
$count = !empty($parameters['count']) ? (int)$parameters['count'] : 1;
$codes = array();
for ($i = 0; $i < $count; $i++) {
$coupon = $rule -> acquireCoupon();
$coupon -> setType(Mage_SalesRule_Helper_Coupon::COUPON_TYPE_SPECIFIC_AUTOGENERATED) -> save();
$code = $coupon -> getCode();
}
$emailTemplate = Mage::getModel('core/email_template') -> loadDefault('coupon_new_customer');
$emailTemplateVariables = array();
$emailTemplateVariables['username'] = $customerData['firstname'] . ' ' . $customerData['lastname'];
$emailTemplateVariables['customer_email'] = $customerData['email'];
$emailTemplateVariables['promo_code'] = $code;
$result = $emailTemplate -> send($customerData['email'], $customerData['firstname'] . ' ' . $customerData['lastname'], $emailTemplateVariables);
}
}
}
}
Ways tried to retrieve in email template:
1. {{var promo_code}}
2. {{var emailTemplateVariables.promo_code}}