Skip to content
Code-Schnipsel Gruppen Projekte
Commit 2f6fd212 erstellt von Patrick Müller's avatar Patrick Müller
Dateien durchsuchen

temp commit

Übergeordneter 4dfdd231
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
{
"name": "quiqqer\/coupons",
"type": "quiqqer-module",
"description": "Coupons for QUIQQER",
"license": "GPL-3.0+",
"authors": [
{
"name": "Patrick M\u00fcller",
"email": "support@pcsg.de",
"homepage": "http:\/\/www.pcsg.de",
"role": "Developer"
}
],
"support": {
"email": "support@pcsg.de"
},
"require": {
"quiqqer\/quiqqer": "^1.2|*@dev",
"quiqqer\/discount": "^1|*@dev",
"quiqqer/products": "^1.3|*@dev"
},
"autoload": {
"psr-4": {
"QUI\\ERP\\Coupons\\": "src\/QUI\/ERP\/Coupons"
}
"name": "quiqqer\/coupons",
"type": "quiqqer-module",
"description": "Coupons for QUIQQER",
"license": "GPL-3.0+",
"authors": [
{
"name": "Patrick M\u00fcller",
"email": "support@pcsg.de",
"homepage": "https:\/\/www.pcsg.de",
"role": "Developer"
}
],
"support": {
"email": "support@pcsg.de"
},
"require": {
"quiqqer\/quiqqer": "^1.2|*@dev",
"quiqqer\/discount": "^1.1|*@dev",
"quiqqer/products": "^1.3|*@dev"
},
"autoload": {
"psr-4": {
"QUI\\ERP\\Coupons\\": "src\/QUI\/ERP\/Coupons"
}
}
}
......@@ -36,4 +36,12 @@
fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketRemovePos"
/>
<event on="onQuiqqerOrderOrderProcessGetBodyBegin"
fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderOrderProcessGetBodyBegin"
/>
<event on="onQuiqqerOrderBasketToOrderBegin"
fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketToOrderBegin"
/>
</events>
......@@ -89,15 +89,15 @@
</groups>
<groups name="quiqqer/coupons" datatype="php">
<locale name="Coupon.mail.subject">
<locale name="ProductCoupon.mail.subject">
<de><![CDATA[Ihr persönlicher Gutschein-Code]]></de>
<en><![CDATA[Your personal coupon code]]></en>
</locale>
<locale name="Coupon.mail.body">
<locale name="ProductCoupon.mail.body">
<de><![CDATA[
<p>Hallo [customerName],</p>
<p>vielen Dank für Ihren Gutschein-Einkauf. Hiermit erhalten Sie Ihren exklusiven Gutschein-Code für "[couponDescription]".</p>
<p>vielen Dank für Ihren Gutschein-Einkauf. Hiermit erhalten Sie Ihren exklusiven Gutschein-Code für "[productTitle]".</p>
<p>
<b>Gutschein-Code:</b> [couponCode]<br/>
<b>Wert:</b> [discountAmountFormatted]<br/>
......@@ -105,6 +105,7 @@
<b>Einlösbar bis:</b> [validUntilDateFormatted]<br/>
</p>
<p>[transferableInfo]</p>
<p>[profileDownloadInfo]</p>
<p>
Beste Grüße<br/>
[company]
......@@ -114,18 +115,28 @@ Beste Grüße<br/>
]]></en>
</locale>
<locale name="Coupon.mail.transferable_info.is_transferable">
<de><![CDATA[Sie dürfen diesen Gutschein verschenken! Der Gutschein-Code ist nicht personalisiert und kann von jedem in unserem Shop eingelöst werden. Bewahren Sie ihn daher gut auf!]]></de>
<locale name="ProductCoupon.mail.transferable_info.is_transferable">
<de>
<![CDATA[Sie dürfen diesen Gutschein verschenken! Der Gutschein-Code ist nicht personalisiert und kann von jedem in unserem Shop eingelöst werden. Bewahren Sie ihn daher gut auf!]]></de>
<en><![CDATA[You may give this coupn as a gift! The coupon code is not personalized and can be redeemed by anyone in our store. Therefore, keep it safe!]]></en>
</locale>
<locale name="Coupon.mail.transferable_info.is_not_transferable">
<de><![CDATA[Bitte bachten Sie: Dieser Gutschein kann nur von Ihnen persönlich eingesetzt werden, wenn Sie in unserem Shop eingeloggt sind. Dritte können den Gutschein-Code nicht einlösen.]]></de>
<locale name="ProductCoupon.mail.transferable_info.is_not_transferable">
<de>
<![CDATA[Bitte bachten Sie: Dieser Gutschein kann nur von Ihnen persönlich eingesetzt werden, wenn Sie in unserem Shop eingeloggt sind. Dritte können den Gutschein-Code nicht einlösen.]]></de>
<en><![CDATA[Please note: This voucher can only be used by you personally when you are logged in to our store. Third parties can not redeem the voucher code.]]></en>
</locale>
<locale name="ProductCoupon.mail.profile_download_info">
<de><![CDATA[Sie finden den Gutschein als PDF-Datei im Anhang oder in Ihrem Benutzer-Profil in unserem Shop (bitte vorher einloggen).]]></de>
<en><![CDATA[You can find the coupon as a PDF file attached or in your user profile in our shop (please log in first).]]></en>
</locale>
<locale name="ProductCoupon.coupon_title">
<de><![CDATA[Produkt #[productId] aus Bestellung [orderId]]]></de>
<en><![CDATA[Product #[productId] from order [orderId]]]></en>
</locale>
<locale name="DownloadProduct.pdf.filename">
<de><![CDATA[Gutschein_[productTitle]__[date]]]></de>
<en><![CDATA[Coupon_[productTitle]__[date]]]></en>
<de><![CDATA[[productTitle]__[date]]]></de>
<en><![CDATA[[productTitle]__[date]]]></en>
</locale>
<locale name="CouponCode.tpl.header">
<de><![CDATA[G U T S C H E I N]]></de>
......@@ -153,8 +164,8 @@ Beste Grüße<br/>
<en><![CDATA[Coupon code [couponCode]]]></en>
</locale>
<locale name="Discount.default_title.product">
<de><![CDATA[Produkt "[productTitle]" (#[productId])]]></de>
<en><![CDATA[Product "[productTitle]" (#[productId])]]></en>
<de><![CDATA["[productTitle]"]]></de>
<en><![CDATA["[productTitle]"]]></en>
</locale>
<locale name="exception.ajax.create.missing_field">
......
......@@ -552,4 +552,62 @@ public static function onQuiqqerOrderCreated(AbstractOrder $Order)
{
QUI\ERP\Coupons\Products\Handler::createCouponCodesFromOrder($Order);
}
public static function onQuiqqerOrderBasketToOrderBegin(
QUI\ERP\Order\Basket\BasketOrder $BasketOrder,
AbstractOrder $Order,
array &$products
) {
foreach ($products as $k => $product) {
$products[$k]['vat'] = 0;
}
}
/**
* quiqqer/order: onQuiqqerOrderOrderProcessGetBodyBegin
*
* Set VAT to 0% for specific coupons.
*
* @param QUI\ERP\Order\OrderProcess $OrderProcess
* @return void
*/
public static function onQuiqqerOrderOrderProcessGetBodyBegin(QUI\ERP\Order\OrderProcess $OrderProcess)
{
try {
$Order = $OrderProcess->getOrder();
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
return;
}
if (empty($Order)) {
return;
}
//
// $OrderBasket = new QUI\ERP\Order\Basket\BasketOrder($Order->getHash());
//
// foreach ($OrderBasket->get)
$Articles = $Order->getArticles();
$articleStock = [];
/** @var QUI\ERP\Accounting\Article $Article */
foreach ($Articles as $Article) {
try {
// Do not parse coupon codes / discounts
if (empty($Article->getId()) || !\is_numeric($Article->getId())) {
continue;
}
$Product = Products::getProduct($Article->getId());
if ($Product instanceof CouponProductType) {
}
} catch (\Exception $Exception) {
QUI\System\Log::writeDebugException($Exception);
continue;
}
}
}
}
......@@ -46,26 +46,41 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
continue;
}
$CouponCode = self::createCouponCodeFromProduct($Product, $Customer);
$couponPdfFile = null;
$CouponCode = self::createCouponCodeFromProduct($Product, $Order, $Customer);
$couponFilePathCustomerDir = null;
// Generate coupon PDF
if ($Product->getFieldValue(CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF)) {
$couponPdfFile = self::createCouponCodePdf($CouponCode, $Product);
// Add PDF file to customer files
CustomerFiles::addFileToCustomer($Customer->getId(), $couponPdfFile);
// Rename file
$productTitelSanitized = preg_replace("/[^\p{L}\p{N} ]/ui", '', $Product->getTitle());
$fileName = QUI::getLocale()->get(
'quiqqer/coupons',
'DownloadProduct.pdf.filename',
[
'productTitle' => \str_replace(' ', '_', $productTitelSanitized),
'date' => \date('Y_m_d')
]
);
\unlink($couponPdfFile);
$fileName .= '__'.\mb_substr($Order->getHash(), 0, 6);
$customerDir = CustomerFiles::getFolderPath($Customer);
$pdfFileCustomer = $customerDir.DIRECTORY_SEPARATOR.\basename($couponPdfFile, '.pdf');
$newCouponPdfFile = \str_replace(\basename($couponPdfFile, '.pdf'), $fileName, $couponPdfFile);
CustomerFiles::addFileToDownloadEntry($Customer->getId(), $pdfFileCustomer);
\rename($couponPdfFile, $newCouponPdfFile);
// Add PDF file to customer files
CustomerFiles::addFileToCustomer($Customer->getId(), $newCouponPdfFile);
CustomerFiles::addFileToDownloadEntry($Customer->getId(), \basename($newCouponPdfFile));
$customerDir = CustomerFiles::getFolderPath($Customer);
$couponFilePathCustomerDir = $customerDir.DIRECTORY_SEPARATOR.\basename($newCouponPdfFile);
}
// Send coupon via email
self::sendCouponMail($CouponCode, $Product, $Customer, $couponPdfFile);
self::sendCouponMail($CouponCode, $Product, $Customer, $couponFilePathCustomerDir);
} catch (\Exception $Exception) {
if ($Exception->getCode() === 404) {
QUI\System\Log::writeDebugException($Exception);
......@@ -80,16 +95,28 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
* Create coupon codes from an order
*
* @param Product $Product
* @param QUI\ERP\Order\AbstractOrder $Order
* @param QUI\Interfaces\Users\User $User - The user that bought the product
* @return CouponCode
*
* @throws QUI\Exception
* @throws \Exception
*/
protected static function createCouponCodeFromProduct(Product $Product, QUI\Interfaces\Users\User $User): CouponCode
{
protected static function createCouponCodeFromProduct(
Product $Product,
QUI\ERP\Order\AbstractOrder $Order,
QUI\Interfaces\Users\User $User
): CouponCode {
$Discount = self::createDiscountFromProduct($Product);
$couponAttributes = [
'title' => QUI::getSystemLocale()->get(
'quiqqer/coupons',
'ProductCoupon.coupon_title',
[
'orderId' => $Order->getPrefixedId(),
'productId' => $Product->getId()
]
),
'maxUsages' => CouponsHandler::MAX_USAGE_ONCE
];
......@@ -170,18 +197,7 @@ protected static function createDiscountFromProduct(Product $Product): Discount
*/
public static function createCouponCodePdf(CouponCode $CouponCode, Product $Product): string
{
$fileName = QUI::getLocale()->get(
'quiqqer/coupons',
'DownloadProduct.pdf.filename',
[
'productTitle' => \str_replace(' ', '_', $Product->getTitle()),
'date' => \date('Y_m_d')
]
);
$Document = new Document([
'filename' => $fileName.'.pdf',
]);
$Document = new Document();
// $Document->setAttribute('foldingMarks', true);
$Document->setAttribute('disableSmartShrinking', true);
......@@ -190,6 +206,7 @@ public static function createCouponCodePdf(CouponCode $CouponCode, Product $Prod
$Document->setAttribute('marginBottom', 40);
$Document->setAttribute('marginLeft', 0);
$Document->setAttribute('marginRight', 0);
$Document->setAttribute('showPageNumbers', false);
$Engine = QUI::getTemplateManager()->getEngine();
......@@ -243,42 +260,49 @@ public static function sendCouponMail(
$Mailer = QUI::getMailManager()->getMailer();
$Mailer->addRecipient($recipient);
$Mailer->setSubject(QUI::getLocale()->get('quiqqer/coupons', 'Coupon.mail.subject'));
$Mailer->setSubject(QUI::getLocale()->get('quiqqer/coupons', 'ProductCoupon.mail.subject'));
$couponViewData = self::getCouponViewData($CouponCode, $Product);
if ($couponViewData['isTransferable']) {
$transferableInfo = QUI::getLocale()->get(
'quiqqer/coupons',
'Coupon.mail.transferable_info.is_transferable'
'ProductCoupon.mail.transferable_info.is_transferable'
);
} else {
$transferableInfo = QUI::getLocale()->get(
'quiqqer/coupons',
'Coupon.mail.transferable_info.is_not_transferable'
'ProductCoupon.mail.transferable_info.is_not_transferable'
);
}
$profileDownloadInfo = '';
if ($couponPdfFile) {
$Mailer->addAttachment($couponPdfFile);
$profileDownloadInfo = QUI::getLocale()->get(
'quiqqer/coupons',
'ProductCoupon.mail.profile_download_info'
);
}
$Mailer->setBody(
QUI::getLocale()->get(
'quiqqer/coupons',
'Coupon.mail.body',
'ProductCoupon.mail.body',
\array_merge(
$couponViewData,
[
'customerName' => $Customer->getName(),
'company' => QUI\ERP\Defaults::conf('company', 'name'),
'transferableInfo' => $transferableInfo
'customerName' => $Customer->getName(),
'company' => QUI\ERP\Defaults::conf('company', 'name'),
'transferableInfo' => $transferableInfo,
'profileDownloadInfo' => $profileDownloadInfo
]
)
)
);
if ($couponPdfFile) {
$Mailer->addAttachment($couponPdfFile);
}
$Mailer->send();
}
......@@ -324,6 +348,7 @@ protected static function getCouponViewData(CouponCode $CouponCode, Product $Pro
return [
'isTransferable' => empty($User),
'couponCode' => $CouponCode->getCode(),
'productTitle' => $Product->getTitle(),
'userName' => $User ? $User->getName() : false,
'couponDescription' => $Product->getFieldValueByLocale(
CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION
......
0% oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren