private function getCouponOrder(CouponCoupon $Coupon, $discount, $preOrderId) { $this->Customer = $this->createCustomer('*****@*****.**'); $Order = $this->createOrder($this->Customer); $Order->setPreOrderId($preOrderId); $details = $Coupon->getCouponDetails(); /** @var \Plugin\Coupon\Entity\CouponCouponDetail $CouponDetail */ $CouponDetail = $details[0]; $Product = $CouponDetail->getProduct(); $ProductClasses = $Product->getProductClasses(); $ProductClass = $ProductClasses[0]; $orderDetails = $Order->getOrderDetails(); foreach ($orderDetails as $OrderDetail) { $Order->removeOrderDetail($OrderDetail); } $OrderDetail = new OrderDetail(); $TaxRule = $this->app['eccube.repository.tax_rule']->getByRule(); // デフォルト課税規則 $OrderDetail->setProduct($Product)->setProductClass($ProductClass)->setProductName($Product->getName())->setProductCode($ProductClass->getCode())->setPrice($ProductClass->getPrice02())->setQuantity(1)->setTaxRule($TaxRule->getCalcRule()->getId())->setTaxRate($TaxRule->getTaxRate()); $this->app['orm.em']->persist($OrderDetail); $OrderDetail->setOrder($Order); $Order->addOrderDetail($OrderDetail); $CouponOrder = new CouponCouponOrder(); $CouponOrder->setDelFlg(Constant::DISABLED); $CouponOrder->setDiscount($discount); $CouponOrder->setUserId($this->Customer->getId()); $CouponOrder->setCouponId($Coupon->getId()); $CouponOrder->setOrderId($Order->getId()); $CouponOrder->setPreOrderId($Order->getPreOrderId()); $CouponOrder->setCouponCd($Coupon->getCouponCd()); return $CouponOrder; }
/** * カテゴリがクーポン適用の対象か調査する. * 下位のカテゴリから上位のカテゴリに向けて検索する * * @param \Plugin\Coupon\Entity\CouponCoupon $Coupon * @param \Eccube\Entity\Order $Order * @return boolean */ private function containsCategory(\Plugin\Coupon\Entity\CouponCoupon $Coupon, \Eccube\Entity\Order $Order) { // クーポンの対象カテゴリIDを配列にする $targetCategoryIds = array(); foreach ($Coupon->getCouponDetails() as $detail) { $targetCategoryIds[] = $detail->getCategory()->getId(); } // 受注データからカテゴリIDを取得する foreach ($Order->getOrderDetails() as $orderDetail) { foreach ($orderDetail->getProduct()->getProductCategories() as $productCategory) { if ($this->existsDepthCategory($targetCategoryIds, $productCategory->getCategory())) { return true; } } } return false; }