Files
outil-82/core/lib/Thelia/Model/Sale.php
2021-01-19 18:19:37 +01:00

161 lines
4.0 KiB
PHP

<?php
namespace Thelia\Model;
use Propel\Runtime\Connection\ConnectionInterface;
use Thelia\Core\Event\Sale\SaleEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Model\Base\Sale as BaseSale;
use Thelia\Model\Tools\ModelEventDispatcherTrait;
class Sale extends BaseSale
{
use ModelEventDispatcherTrait;
/**
* The price offsets types, either amount or percentage
*/
const OFFSET_TYPE_PERCENTAGE = 10;
const OFFSET_TYPE_AMOUNT = 20;
/**
* @return bool true if the sale has an end date, false otherwise
*/
public function hasStartDate()
{
return ! \is_null($this->getStartDate());
}
/**
* @return bool true if the sale has a begin date, false otherwise
*/
public function hasEndDate()
{
return ! \is_null($this->getEndDate());
}
/**
* Get the price offsets for each of the currencies.
*
* @return array an array of (currency ID => offset value)
*/
public function getPriceOffsets()
{
$currencyOffsets = SaleOffsetCurrencyQuery::create()->filterBySaleId($this->getId())->find();
$offsetList = [];
/** @var SaleOffsetCurrency $currencyOffset */
foreach ($currencyOffsets as $currencyOffset) {
$offsetList[$currencyOffset->getCurrencyId()] = $currencyOffset->getPriceOffsetValue();
}
return $offsetList;
}
/**
* Return the products included in this sale.
*
* @return array an array of Products
*/
public function getSaleProductList()
{
$saleProducts = SaleProductQuery::create()->filterBySaleId($this->getId())->groupByProductId()->find();
return $saleProducts;
}
/**
* Return the selected attributes values for each of the selected products.
*
* @return array an array of (product ID => array of attribute availability ID)
*/
public function getSaleProductsAttributeList()
{
$saleProducts = SaleProductQuery::create()->filterBySaleId($this->getId())->orderByProductId()->find();
$selectedAttributes = [];
$currentProduct = false;
/** @var SaleProduct $saleProduct */
foreach ($saleProducts as $saleProduct) {
if ($currentProduct != $saleProduct->getProductId()) {
$currentProduct = $saleProduct->getProductId();
$selectedAttributes[$currentProduct] = [];
}
$selectedAttributes[$currentProduct][] = $saleProduct->getAttributeAvId();
}
return $selectedAttributes;
}
/**
* {@inheritDoc}
*/
public function preInsert(ConnectionInterface $con = null)
{
parent::preInsert($con);
$this->dispatchEvent(TheliaEvents::BEFORE_CREATESALE, new SaleEvent($this));
return true;
}
/**
* {@inheritDoc}
*/
public function postInsert(ConnectionInterface $con = null)
{
parent::postInsert($con);
$this->dispatchEvent(TheliaEvents::AFTER_CREATESALE, new SaleEvent($this));
}
/**
* {@inheritDoc}
*/
public function preUpdate(ConnectionInterface $con = null)
{
parent::preUpdate($con);
$this->dispatchEvent(TheliaEvents::BEFORE_UPDATESALE, new SaleEvent($this));
return true;
}
/**
* {@inheritDoc}
*/
public function postUpdate(ConnectionInterface $con = null)
{
parent::postUpdate($con);
$this->dispatchEvent(TheliaEvents::AFTER_UPDATESALE, new SaleEvent($this));
}
/**
* {@inheritDoc}
*/
public function preDelete(ConnectionInterface $con = null)
{
parent::preDelete($con);
$this->dispatchEvent(TheliaEvents::BEFORE_DELETESALE, new SaleEvent($this));
return true;
}
/**
* {@inheritDoc}
*/
public function postDelete(ConnectionInterface $con = null)
{
parent::postDelete($con);
$this->dispatchEvent(TheliaEvents::AFTER_DELETESALE, new SaleEvent($this));
}
}