/** * Filter the query by a related \Thelia\Model\OrderCouponCountry object * * @param \Thelia\Model\OrderCouponCountry|ObjectCollection $orderCouponCountry the related object to use as filter * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL * * @return ChildOrderCouponQuery The current query, for fluid interface */ public function filterByOrderCouponCountry($orderCouponCountry, $comparison = null) { if ($orderCouponCountry instanceof \Thelia\Model\OrderCouponCountry) { return $this->addUsingAlias(OrderCouponTableMap::ID, $orderCouponCountry->getCouponId(), $comparison); } elseif ($orderCouponCountry instanceof ObjectCollection) { return $this->useOrderCouponCountryQuery()->filterByPrimaryKeys($orderCouponCountry->getPrimaryKeys())->endUse(); } else { throw new PropelException('filterByOrderCouponCountry() only accepts arguments of type \\Thelia\\Model\\OrderCouponCountry or Collection'); } }
/** * @param \Thelia\Core\Event\Order\OrderEvent $event * * @throws \Exception if something goes wrong. */ public function afterOrder(OrderEvent $event) { $consumedCoupons = $this->request->getSession()->getConsumedCoupons(); if (is_array($consumedCoupons)) { $con = Propel::getWriteConnection(OrderCouponTableMap::DATABASE_NAME); $con->beginTransaction(); try { foreach ($consumedCoupons as $couponCode) { $couponQuery = CouponQuery::create(); $couponModel = $couponQuery->findOneByCode($couponCode); $couponModel->setLocale($this->request->getSession()->getLang()->getLocale()); /* decrease coupon quantity */ $this->couponManager->decrementQuantity($couponModel, $event->getOrder()->getCustomerId()); /* memorize coupon */ $orderCoupon = new OrderCoupon(); $orderCoupon->setOrder($event->getOrder())->setCode($couponModel->getCode())->setType($couponModel->getType())->setAmount($couponModel->getAmount())->setTitle($couponModel->getTitle())->setShortDescription($couponModel->getShortDescription())->setDescription($couponModel->getDescription())->setExpirationDate($couponModel->getExpirationDate())->setIsCumulative($couponModel->getIsCumulative())->setIsRemovingPostage($couponModel->getIsRemovingPostage())->setIsAvailableOnSpecialOffers($couponModel->getIsAvailableOnSpecialOffers())->setSerializedConditions($couponModel->getSerializedConditions())->setPerCustomerUsageCount($couponModel->getPerCustomerUsageCount()); $orderCoupon->save(); // Copy order coupon free shipping data for countries and modules $couponCountries = CouponCountryQuery::create()->filterByCouponId($couponModel->getId())->find(); /** @var CouponCountry $couponCountry */ foreach ($couponCountries as $couponCountry) { $occ = new OrderCouponCountry(); $occ->setCouponId($orderCoupon->getId())->setCountryId($couponCountry->getCountryId())->save(); } $couponModules = CouponModuleQuery::create()->filterByCouponId($couponModel->getId())->find(); /** @var CouponModule $couponModule */ foreach ($couponModules as $couponModule) { $ocm = new OrderCouponModule(); $ocm->setCouponId($orderCoupon->getId())->setModuleId($couponModule->getModuleId())->save(); } } $con->commit(); } catch (\Exception $ex) { $con->rollBack(); throw $ex; } } // Clear all coupons. $event->getDispatcher()->dispatch(TheliaEvents::COUPON_CLEAR_ALL); }
/** * Adds an object to the instance pool. * * Propel keeps cached copies of objects in an instance pool when they are retrieved * from the database. In some cases you may need to explicitly add objects * to the cache in order to ensure that the same objects are always returned by find*() * and findPk*() calls. * * @param \Thelia\Model\OrderCouponCountry $obj A \Thelia\Model\OrderCouponCountry object. * @param string $key (optional) key to use for instance map (for performance boost if key was already calculated externally). */ public static function addInstanceToPool($obj, $key = null) { if (Propel::isInstancePoolingEnabled()) { if (null === $key) { $key = serialize(array((string) $obj->getCouponId(), (string) $obj->getCountryId())); } // if key === null self::$instances[$key] = $obj; } }
/** * @param Country $country The country object to add. */ protected function doAddCountry($country) { $orderCouponCountry = new ChildOrderCouponCountry(); $orderCouponCountry->setCountry($country); $this->addOrderCouponCountry($orderCouponCountry); // set the back reference to this object directly as using provided method either results // in endless loop or in multiple relations if (!$country->getOrderCoupons()->contains($this)) { $foreignCollection = $country->getOrderCoupons(); $foreignCollection[] = $this; } }
/** * Exclude object from result * * @param ChildOrderCouponCountry $orderCouponCountry Object to remove from the list of results * * @return ChildOrderCouponCountryQuery The current query, for fluid interface */ public function prune($orderCouponCountry = null) { if ($orderCouponCountry) { $this->addCond('pruneCond0', $this->getAliasedColName(OrderCouponCountryTableMap::COUPON_ID), $orderCouponCountry->getCouponId(), Criteria::NOT_EQUAL); $this->addCond('pruneCond1', $this->getAliasedColName(OrderCouponCountryTableMap::COUNTRY_ID), $orderCouponCountry->getCountryId(), Criteria::NOT_EQUAL); $this->combine(array('pruneCond0', 'pruneCond1'), Criteria::LOGICAL_OR); } return $this; }