• DE
  • ES
  • EN
  • NL
Google+twitterfacebook

Blog

Het creëren van een coupon met voorwaarden in Magento code


Este artículo fui publicado originalmente en Inglés en el Blog Magentron con título 'Programmatically creating a coupon (including the rule) with conditions in Magento'.

Publicado el martes 22 de mayo de 2012 por Jeroen Derks.

Voor een van mijn projecten moest ik om in de code een willekeurige coupon genereren voor een specifiek product in Magento. Omdat ik niet een exacte voorbeeld kon vinden die ik direct kon gebruiken heb ik besloten om mijn oplossing hier te publiceren.

NB: Houd er rekening mee dat dit artikel een werk-in-progress is, de toepasbaarheid en het resultaat kunnen variëren, dus goed testen voordat je deze oplossing in een productieomgeving plaatst.

Laat het weten als je problemen ondervindt met deze oplossing. Bedankt!

<?php
    // laad product
    /** @var Mage_Catalog_Model_Product $product */
    $product = Mage::getModel('catalog/product')
                    ->setStoreId($storeId)
                    ->load($productId);

    // zet de lengte van de coupon code
    /** @var Mage_SalesRule_Model_Coupon_Codegenerator $generator */
    $generator = Mage::getModel('salesrule/coupon_codegenerator')
                        ->setLength(8);
    /** @var Mage_SalesRule_Model_Rule_Condition_Product $conditionProduct */
    $conditionProduct = Mage::getModel('salesrule/rule_condition_product')
                                                ->setType('salesrule/rule_condition_product')
                                                ->setAttribute('sku')
                                                ->setOperator('==')
                                                ->setValue($product->getSku());
                                                
    /** @var Mage_SalesRule_Model_Rule_Condition_Product_Found $conditionProductFound */
    $conditionProductFound = Mage::getModel('salesrule/rule_condition_product_found')
                                            ->setConditions(array($conditionProduct));
    /** @var Mage_SalesRule_Model_Rule_Condition_Combine $condition */
    $condition = Mage::getModel('salesrule/rule_condition_combine')
                    ->setConditions(array($conditionProductFound));
                                                
    /** @var Mage_SalesRule_Model_Coupon $coupon */
    $coupon = Mage::getModel('salesrule/coupon');
    // probeer een unieke coupon code te genereren
    $attempts = 0;
    do {
        if ($attempts++ >= 8) {
            Mage::throwException(Mage::helper('mijnmodule')->__('Unable to create requested Coupons. Please try again.'));
        }
        $code = $generator->generateCode();
    } while ($coupon->getResource()->exists($code));

    // make coupon regel aan
    /** @var Mage_SalesRule_Model_Rule $rule */
    $rule = Mage::getModel('salesrule/rule');
    $rule->setName(Mage::helper('mijnmodule')->__('Naam van de coupon'))
        ->setDescription($rule->getName())
        ->setFromDate(date('Y-m-d'))
        ->setCustomerGroupIds($this->_getCustomerGroups())
        ->setIsActive(1)
        ->setConditionsSerialized(serialize($condition->asArray()))
        //->setActionsSerialized     
        //->setStopRulesProcessing 
        //->setIsAdvanced                     
        ->setSimpleAction(Mage_SalesRule_Model_Rule::BY_FIXED_ACTION)
        ->setDiscountAmount($product->getFinalPrice())
        ->setDiscountQty(1)
        //->setDiscountStep                     
        ->setStopRulesProcessing(0)
        ->setIsRss(0)
        ->setWebsiteIds(array(1))
        ->setCouponType(Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC)
        ->setConditions($condition)
        ->save();            
    
    // maak coupon aan
    $coupon->setId(null)
        ->setRuleId($rule->getRuleId())
        ->setCode($code)
        ->setUsageLimit(1)
        //->setUsagePerCustomer
        //->setTimesUsed
        //->setExpirationDate
        ->setIsPrimary(1)
        ->setCreatedAt(time())
        ->setType(Mage_SalesRule_Helper_Coupon::COUPON_TYPE_SPECIFIC_AUTOGENERATED)
        ->save();

Por favor házmelo saber si este articulo ha sido util para ti. (o no)