first commit
This commit is contained in:
15
bundles/KupShop/SalesBundle/Email/SaleCreateEmail.php
Normal file
15
bundles/KupShop/SalesBundle/Email/SaleCreateEmail.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace KupShop\SalesBundle\Email;
|
||||
|
||||
class SaleCreateEmail extends SaleEmail
|
||||
{
|
||||
protected static $name = 'Vytvoření nové prodejky';
|
||||
protected static $type = 'SALE_CREATE';
|
||||
protected static $priority = 0;
|
||||
|
||||
protected $subject = 'Děkujeme za Váš nákup {KOD_PRODEJKY}';
|
||||
protected $template = 'email/email_sale_create.tpl';
|
||||
}
|
||||
165
bundles/KupShop/SalesBundle/Email/SaleEmail.php
Normal file
165
bundles/KupShop/SalesBundle/Email/SaleEmail.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace KupShop\SalesBundle\Email;
|
||||
|
||||
use KupShop\BonusProgramBundle\Utils\BonusProvider;
|
||||
use KupShop\KupShopBundle\Context\ContextManager;
|
||||
use KupShop\KupShopBundle\Context\CurrencyContext;
|
||||
use KupShop\KupShopBundle\Context\LanguageContext;
|
||||
use KupShop\KupShopBundle\Context\UserContext;
|
||||
use KupShop\KupShopBundle\Email\BaseEmail;
|
||||
use KupShop\KupShopBundle\Email\EmailGroupTypeEnum;
|
||||
use KupShop\KupShopBundle\Util\Compat\ServiceContainer;
|
||||
use KupShop\SalesBundle\Entity\Sale;
|
||||
use KupShop\SalesBundle\Util\SalesUtil;
|
||||
use KupShop\SellerBundle\Utils\SellerUtil;
|
||||
use Symfony\Contracts\Service\Attribute\Required;
|
||||
|
||||
class SaleEmail extends BaseEmail
|
||||
{
|
||||
protected static $name = 'Prodejky';
|
||||
|
||||
protected static $type = 'SALE_EMAIL';
|
||||
protected static $group = EmailGroupTypeEnum::SALE;
|
||||
|
||||
protected $subject = 'Prodejka {KOD}';
|
||||
|
||||
private ?Sale $sale = null;
|
||||
|
||||
#[Required]
|
||||
public SellerUtil $sellerUtil;
|
||||
|
||||
public function setSale(Sale $sale): self
|
||||
{
|
||||
$this->sale = $sale;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getSale(): ?Sale
|
||||
{
|
||||
return $this->sale;
|
||||
}
|
||||
|
||||
public function getEmailTemplate($languageID = null): array
|
||||
{
|
||||
if (!$languageID && $this->sale) {
|
||||
$languageID = $this->sale->languageId;
|
||||
}
|
||||
|
||||
return parent::getEmailTemplate($languageID);
|
||||
}
|
||||
|
||||
public function getBasicTemplate($languageID = null)
|
||||
{
|
||||
if (!$languageID && $this->sale) {
|
||||
$languageID = $this->sale->languageId;
|
||||
}
|
||||
|
||||
return parent::getBasicTemplate($languageID);
|
||||
}
|
||||
|
||||
public static function getPlaceholders()
|
||||
{
|
||||
$placeholders = [
|
||||
'EMAIL_UZIVATELE' => ['text' => 'E‑mail uživatele'],
|
||||
'ZPUSOB_DORUCENI' => ['text' => 'Způsob doručení'],
|
||||
'PRODEJNA_EMAIL' => ['text' => 'E-mail prodejny'],
|
||||
'PRODEJNA_TELEFON' => ['text' => 'Telefon prodejny'],
|
||||
'PRODEJNA_NAZEV' => ['text' => 'Název prodejny'],
|
||||
'PRODEJNA_ADRESA' => ['text' => 'Adresa prodejny'],
|
||||
];
|
||||
|
||||
return [self::$type => $placeholders] + (parent::getPlaceholders() ?? []);
|
||||
}
|
||||
|
||||
public function replacePlaceholdersItem($placeholder)
|
||||
{
|
||||
$result = parent::replacePlaceholdersItem($placeholder);
|
||||
|
||||
if (!$result) {
|
||||
switch ($placeholder) {
|
||||
case 'KOD_PRODEJKY':
|
||||
return $this->sale->code;
|
||||
case 'CENA':
|
||||
return printPrice($this->sale->totalPrice, ['currency' => $this->sale->currency, 'ceil' => false, 'decimal' => 'dynamic']);
|
||||
case 'BODY_CELKEM':
|
||||
$user = $this->getSale()->getUser();
|
||||
if (!$user) {
|
||||
return '0';
|
||||
}
|
||||
|
||||
return (string) ServiceContainer::getService(BonusProvider::class)->getActivePointsAmount($user);
|
||||
case 'EMAIL_UZIVATELE':
|
||||
return $this->sale->getUser()?->email;
|
||||
case 'ZPUSOB_DORUCENI':
|
||||
return $this->sale->getDeliveryType()?->name;
|
||||
case 'PRODEJNA_EMAIL':
|
||||
return $this->getSeller()['email'] ?? '';
|
||||
case 'PRODEJNA_TELEFON':
|
||||
return $this->getSeller()['phone'] ?? '';
|
||||
case 'PRODEJNA_NAZEV':
|
||||
return $this->getSeller()['title'] ?? '';
|
||||
case 'PRODEJNA_ADRESA':
|
||||
$seller = $this->getSeller();
|
||||
|
||||
return implode('<br>', [($seller['street'] ?? '').' '.($seller['number'] ?? ''), ($seller['psc'] ?? '').' '.($seller['city'] ?? '')]);
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function testEmail(): array
|
||||
{
|
||||
if (!isset($this->order)) {
|
||||
$this->setTestEntity();
|
||||
}
|
||||
|
||||
$contextManager = ServiceContainer::getService(ContextManager::class);
|
||||
|
||||
try {
|
||||
return $contextManager->activateContexts(
|
||||
[
|
||||
LanguageContext::class => $this->sale->languageId,
|
||||
CurrencyContext::class => $this->sale->currency,
|
||||
UserContext::class => $this->sale->userId,
|
||||
],
|
||||
fn () => parent::testEmail()
|
||||
);
|
||||
} catch (\Throwable $e) {
|
||||
throw new \InvalidArgumentException('E-mail nelze otestovat, protože neexistuje žádná objednávka');
|
||||
}
|
||||
}
|
||||
|
||||
private function setTestEntity(?int $id = null): void
|
||||
{
|
||||
$salesUtil = ServiceContainer::getService(SalesUtil::class);
|
||||
$sale = $salesUtil->getSale($id ?: sqlQueryBuilder()->select('MAX(id)')->from('sales')->execute()->fetchOne());
|
||||
|
||||
$this->setSale($sale);
|
||||
}
|
||||
|
||||
private function getSeller(): ?array
|
||||
{
|
||||
if (empty($this->sale?->sellerId) || !($seller = $this->sellerUtil->getSeller((int) $this->sale?->sellerId))) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $seller;
|
||||
}
|
||||
|
||||
public function __wakeup()
|
||||
{
|
||||
parent::__wakeup();
|
||||
|
||||
$this->sellerUtil = ServiceContainer::getService(SellerUtil::class);
|
||||
}
|
||||
|
||||
public function __sleep()
|
||||
{
|
||||
return array_diff(parent::__sleep(), ['sellerUtil']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user