public function duplicateCoupon(CouponInterface $coupon, DateTime $dateFrom = null)
    {
        /**
         * Creates a valid date interval given the referent Coupon.
         */
        if (null === $dateFrom) {
            $dateFrom = $this
                ->dateTimeFactory
                ->create();
        }

        $dateTo = null;
        if ($coupon->getValidTo() instanceof DateTime) {
            $interval = $coupon->getValidFrom()->diff($coupon->getValidTo());
            $dateTo = clone $dateFrom;
            $dateTo->add($interval);
        }

        /**
         * @var CouponInterface $couponGenerated
         */
        $couponGenerated = $this->couponFactory->create();
        $couponCode = $this
            ->couponCodeGenerator
            ->generate(10);

        $couponGenerated
            ->setCode($couponCode)
            ->setName($coupon->getName())
            ->setType($coupon->getType())
            ->setPrice($coupon->getPrice())
            ->setDiscount($coupon->getDiscount())
            ->setCount($coupon->getCount())
            ->setPriority($coupon->getPriority())
            ->setMinimumPurchase($coupon->getMinimumPurchase())
            ->setValidFrom($dateFrom)
            ->setValidTo($dateTo)
            ->setValue($coupon->getValue())
            ->setRule($coupon->getRule())
            ->setEnforcement($coupon->getEnforcement())
            ->setEnabled(true);

        return $couponGenerated;
    }
public function duplicateCoupon(CouponInterface $coupon, DateTime $dateFrom = null)
    {
        /**
         * Creates a valid date interval given the referent Coupon.
         */
        if (null === $dateFrom) {
            $dateFrom = $this
                ->dateTimeFactory
                ->create();
        }

        $dateTo = null;
        if ($coupon->getValidTo() instanceof DateTime) {
            $interval = $coupon->getValidFrom()->diff($coupon->getValidTo());
            $dateTo = clone $dateFrom;
            $dateTo->add($interval);
        }

        /**
         * @var CouponInterface $couponGenerated
         */
        $couponGenerated = $this->couponFactory->create();
        $couponCode = $this
            ->couponCodeGenerator
            ->generate(10);

        $couponGenerated
            ->setCode($couponCode)
            ->setName($coupon->getName())
            ->setType($coupon->getType())
            ->setPrice($coupon->getPrice())
            ->setDiscount($coupon->getDiscount())
            ->setCount($coupon->getCount())
            ->setPriority($coupon->getPriority())
            ->setMinimumPurchase($coupon->getMinimumPurchase())
            ->setValidFrom($dateFrom)
            ->setValidTo($dateTo)
            ->setValue($coupon->getValue())
            ->setRule($coupon->getRule())
            ->setEnforcement($coupon->getEnforcement())
            ->setEnabled(true);

        return $couponGenerated;
    }
public function duplicateCoupon ( CouponInterface $ coupon , DateTime $ dateFrom = null ) { /**
         * Creates a valid date interval given the referent Coupon.
         */ if ( null === $ dateFrom ) { $ dateFrom = $ this -> dateTimeFactory -> create ( ) ; } $ dateTo = null ; if ( $ coupon -> getValidTo ( ) instanceof DateTime ) { $ interval = $ coupon -> getValidFrom ( ) -> diff ( $ coupon -> getValidTo ( ) ) ; $ dateTo = clone $ dateFrom ; $ dateTo -> add ( $ interval ) ; } /**
         * @var CouponInterface $couponGenerated
         */ $ couponGenerated = $ this -> couponFactory -> create ( ) ; $ couponCode = $ this -> couponCodeGenerator -> generate ( 10 ) ; $ couponGenerated -> setCode ( $ couponCode ) -> setName ( $ coupon -> getName ( ) ) -> setType ( $ coupon -> getType ( ) ) -> setPrice ( $ coupon -> getPrice ( ) ) -> setDiscount ( $ coupon -> getDiscount ( ) ) -> setCount ( $ coupon -> getCount ( ) ) -> setPriority ( $ coupon -> getPriority ( ) ) -> setMinimumPurchase ( $ coupon -> getMinimumPurchase ( ) ) -> setValidFrom ( $ dateFrom ) -> setValidTo ( $ dateTo ) -> setValue ( $ coupon -> getValue ( ) ) -> setRule ( $ coupon -> getRule ( ) ) -> setEnforcement ( $ coupon -> getEnforcement ( ) ) -> setEnabled ( true ) ; return $ couponGenerated ; }
Creates a new coupon instance, given an existing Coupon as reference.

You can specify a DateTime new coupon will be valid from.
If not specified, current DateTime will be used

If given coupon is valid forever, new coupon will also be
Otherwise, this method will add to validFrom, the same interval than given Coupon

Also can be specified how new Coupon name must be defined.
If none, automatic generator will add to existing name, 10 random digits.

Given Coupon name: FOO
New Coupon name: FOO_a67b6786a6

Coupons are only generated, and are not persisted in Manager nor Flushed

@param CouponInterface $coupon   Reference coupon
@param DateTime        $dateFrom Date From. If null, takes actual dateTime

@return CouponInterface Coupon generated
Creates a new coupon instance given an existing Coupon as reference .