• DE
  • EN
  • ES
  • NL

Blog

Programmgesteuertes Erstellen eines Coupons mit Bedingungen in Magento


Dieser Artikel wurde ursprünglich auf Englisch im Magentron Blog als Programmatically creating a coupon (including the rule) with conditions in Magento veröffentlicht.

Veröffentlicht am Dienstag, 22. Mai 2012 von Jeroen Derks.

Für eines meiner Projekte musste ich programmgesteuert einen zufälligen Coupon für ein bestimmtes Produkt in Magento erstellen. Da ich kein passendes Beispiel gefunden habe, das ich direkt verwenden konnte, poste ich meine Lösung hier.

Hinweis: Dieser Beitrag ist in Arbeit; Ihre Erfahrungen können abweichen — testen Sie also gründlich, bevor Sie diese Lösung in einer Produktivumgebung einsetzen.
Bitte lassen Sie mich wissen, wenn Sie Probleme mit dieser Lösung finden — danke!

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

              // set length of 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');
              // try to generate unique coupon code
              $attempts = 0;
              do {
                  if ($attempts++ >= 8) {
                      Mage::throwException(Mage::helper('mymodule')->__('Unable to create requested Coupons. Please try again.'));
                  }
                  $code = $generator->generateCode();
              } while ($coupon->getResource()->exists($code));

              // create rule
              /** @var Mage_SalesRule_Model_Rule $rule */
              $rule = Mage::getModel('salesrule/rule');
              $rule->setName(Mage::helper('mymodule')->__('Name of the 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();

              // create coupon
              $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();
          

Lassen Sie mich wissen, ob das bei Ihnen funktioniert!

Benötigen Sie Hilfe bei PHP, Magento oder Laravel? Nehmen Sie Kontakt mit mir auf.