示例#1
0
 public function testToOptionArray()
 {
     $formatTitle = 'format Title';
     $expected = [['label' => $formatTitle, 'value' => 0]];
     $this->salesRuleCoupon->expects($this->once())->method('getFormatsList')->will($this->returnValue([$formatTitle]));
     $this->assertEquals($expected, $this->model->toOptionArray());
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function toOptionArray()
 {
     $formatsList = $this->_salesRuleCoupon->getFormatsList();
     $result = [];
     foreach ($formatsList as $formatId => $formatTitle) {
         $result[] = ['value' => $formatId, 'label' => $formatTitle];
     }
     return $result;
 }
示例#3
0
 /**
  * Increase the length of Code if probability is low
  *
  * @return void
  */
 protected function increaseLength()
 {
     $maxProbability = $this->getMaxProbability() ? $this->getMaxProbability() : self::MAX_PROBABILITY_OF_GUESSING;
     $chars = count($this->salesRuleCoupon->getCharset($this->getFormat()));
     $size = $this->getQty();
     $length = (int) $this->getLength();
     $maxCodes = pow($chars, $length);
     $probability = $size / $maxCodes;
     if ($probability > $maxProbability) {
         do {
             $length++;
             $maxCodes = pow($chars, $length);
             $probability = $size / $maxCodes;
         } while ($probability > $maxProbability);
         $this->setLength($length);
     }
 }
示例#4
0
 /**
  * Generate Coupons Pool
  *
  * @throws \Magento\Framework\Model\Exception
  * @return $this
  */
 public function generatePool()
 {
     $this->_generatedCount = 0;
     $size = $this->getQty();
     $maxProbability = $this->getMaxProbability() ? $this->getMaxProbability() : self::MAX_PROBABILITY_OF_GUESSING;
     $maxAttempts = $this->getMaxAttempts() ? $this->getMaxAttempts() : self::MAX_GENERATE_ATTEMPTS;
     /** @var $coupon \Magento\SalesRule\Model\Coupon */
     $coupon = $this->_couponFactory->create();
     $chars = count($this->_salesRuleCoupon->getCharset($this->getFormat()));
     $length = (int) $this->getLength();
     $maxCodes = pow($chars, $length);
     $probability = $size / $maxCodes;
     //increase the length of Code if probability is low
     if ($probability > $maxProbability) {
         do {
             $length++;
             $maxCodes = pow($chars, $length);
             $probability = $size / $maxCodes;
         } while ($probability > $maxProbability);
         $this->setLength($length);
     }
     $now = $this->dateTime->formatDate($this->_date->gmtTimestamp());
     for ($i = 0; $i < $size; $i++) {
         $attempt = 0;
         do {
             if ($attempt >= $maxAttempts) {
                 throw new \Magento\Framework\Model\Exception(__('We cannot create the requested Coupon Qty. Please check your settings and try again.'));
             }
             $code = $this->generateCode();
             $attempt++;
         } while ($this->getResource()->exists($code));
         $expirationDate = $this->getToDate();
         if ($expirationDate instanceof \Zend_Date) {
             $expirationDate = $expirationDate->toString(\Magento\Framework\Stdlib\DateTime::DATETIME_INTERNAL_FORMAT);
         }
         $coupon->setId(null)->setRuleId($this->getRuleId())->setUsageLimit($this->getUsesPerCoupon())->setUsagePerCustomer($this->getUsesPerCustomer())->setExpirationDate($expirationDate)->setCreatedAt($now)->setType(\Magento\SalesRule\Helper\Coupon::COUPON_TYPE_SPECIFIC_AUTOGENERATED)->setCode($code)->save();
         $this->_generatedCount++;
     }
     return $this;
 }
示例#5
0
 public function testGetSeparator()
 {
     $this->assertEquals($this->separator, $this->helper->getCodeSeparator());
 }