Added coupon_country and coupon_module tables

This commit is contained in:
Franck Allimant
2014-05-14 16:35:16 +02:00
parent c0456e1c07
commit 9c0cc178b4
23 changed files with 7554 additions and 284 deletions

View File

@@ -23,8 +23,11 @@
namespace Thelia\Model;
use Propel\Runtime\Propel;
use Thelia\Model\Base\Coupon as BaseCoupon;
use Thelia\Model\Exception\InvalidArgumentException;
use Thelia\Model\Map\CouponTableMap;
use Thelia\Model\Tools\ModelEventDispatcherTrait;
/**
* Used to provide an effect (mostly a discount)
@@ -38,7 +41,7 @@ use Thelia\Model\Exception\InvalidArgumentException;
class Coupon extends BaseCoupon
{
use \Thelia\Model\Tools\ModelEventDispatcherTrait;
use ModelEventDispatcherTrait;
/**
* Create or Update this Coupon
@@ -57,32 +60,79 @@ class Coupon extends BaseCoupon
* @param int $maxUsage Coupon quantity
* @param string $defaultSerializedRule Serialized default rule added if none found
* @param string $locale Coupon Language code ISO (ex: fr_FR)
* @param array $freeShippingForCountries ID of Countries to which shipping is free
* @param array $freeShippingForMethods ID of Shipping modules for which shipping is free
*
* @throws \Exception
*/
public function createOrUpdate($code, $title, array $effects, $type, $isRemovingPostage, $shortDescription, $description, $isEnabled, $expirationDate, $isAvailableOnSpecialOffers, $isCumulative, $maxUsage, $defaultSerializedRule, $locale = null)
public function createOrUpdate(
$code, $title, array $effects, $type, $isRemovingPostage, $shortDescription, $description,
$isEnabled, $expirationDate, $isAvailableOnSpecialOffers, $isCumulative, $maxUsage, $defaultSerializedRule,
$locale, $freeShippingForCountries, $freeShippingForMethods)
{
$this
->setCode($code)
->setType($type)
->setEffects($effects)
->setIsRemovingPostage($isRemovingPostage)
->setIsEnabled($isEnabled)
->setExpirationDate($expirationDate)
->setIsAvailableOnSpecialOffers($isAvailableOnSpecialOffers)
->setIsCumulative($isCumulative)
->setMaxUsage($maxUsage)
->setLocale($locale)
->setTitle($title)
->setShortDescription($shortDescription)
->setDescription($description);
$con = Propel::getWriteConnection(CouponTableMap::DATABASE_NAME);
// If no rule given, set default rule
if (null === $this->getSerializedConditions()) {
$this->setSerializedConditions($defaultSerializedRule);
$con->beginTransaction();
try {
$this
->setCode($code)
->setType($type)
->setEffects($effects)
->setIsRemovingPostage($isRemovingPostage)
->setIsEnabled($isEnabled)
->setExpirationDate($expirationDate)
->setIsAvailableOnSpecialOffers($isAvailableOnSpecialOffers)
->setIsCumulative($isCumulative)
->setMaxUsage($maxUsage)
->setLocale($locale)
->setTitle($title)
->setShortDescription($shortDescription)
->setDescription($description);
// If no rule given, set default rule
if (null === $this->getSerializedConditions()) {
$this->setSerializedConditions($defaultSerializedRule);
}
$this->save();
// Update countries and modules relation for free shipping
CouponCountryQuery::create()->filterByCouponId($this->id)->delete();
CouponModuleQuery::create()->filterByCouponId($this->id)->delete();
foreach($freeShippingForCountries as $countryId) {
if ($countryId <= 0) continue;
$couponCountry = new CouponCountry();
$couponCountry
->setCouponId($this->getId())
->setCountryId($countryId)
->save();
;
}
foreach($freeShippingForMethods as $moduleId) {
if ($moduleId <= 0) continue;
$couponModule = new CouponModule();
$couponModule
->setCouponId($this->getId())
->setModuleId($moduleId)
->save()
;
}
} catch (\Exception $ex) {
$con->rollback();
throw $ex;
}
$this->save();
}
/**
@@ -198,4 +248,4 @@ class Coupon extends BaseCoupon
return $effects;
}
}
}