From c580a59d4de259872b4386c137e69f45322fad61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de> Date: Wed, 16 Jun 2021 14:50:40 +0200 Subject: [PATCH] feat: coupon products (temp commit) --- bin/backend/controls/Manager.css | 7 ++ events.xml | 8 -- src/QUI/ERP/Coupons/Events.php | 90 +++++-------------- .../Coupons/Products/CouponProductType.php | 11 +-- src/QUI/ERP/Coupons/Products/Handler.php | 7 ++ 5 files changed, 40 insertions(+), 83 deletions(-) diff --git a/bin/backend/controls/Manager.css b/bin/backend/controls/Manager.css index 61aa78d..af2a041 100644 --- a/bin/backend/controls/Manager.css +++ b/bin/backend/controls/Manager.css @@ -104,6 +104,13 @@ width: 50%; } +.quiqqer-coupons-manager-create-advanced-discount table, +.quiqqer-coupons-manager-create-advanced-discount table tbody, +.quiqqer-coupons-manager-create-advanced-discount table tbody tr, +.quiqqer-coupons-manager-create-advanced-discount table tbody tr td { + display: block; +} + .quiqqer-coupons-manager-create-advanced-restrictions { padding-left: 10px; width: 50%; diff --git a/events.xml b/events.xml index 6abc225..eee1145 100644 --- a/events.xml +++ b/events.xml @@ -36,12 +36,4 @@ 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> diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php index 8780beb..7c0b6f2 100644 --- a/src/QUI/ERP/Coupons/Events.php +++ b/src/QUI/ERP/Coupons/Events.php @@ -12,8 +12,6 @@ use QUI\ERP\Coupons\Handler as CouponsHandler; use QUI\ERP\Discount\EventHandling as DiscountEvents; use QUI\ERP\Coupons\Products\CouponProductType; -use QUI\ERP\Coupons\Products\Handler as CouponProductsHandler; -use QUI\ERP\Products\Handler\Products; /** * Class Events @@ -421,7 +419,7 @@ protected static function addCouponToOrder($Order, $coupon) protected static function createProductFields() { $fields = [ - CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE => [ + CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE => [ 'title' => [ 'de' => 'Gutschein-Code ist übertragbar', 'en' => 'Coupon code is transferable' @@ -430,7 +428,7 @@ protected static function createProductFields() 'public' => false, 'standard' => false ], - CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF => [ + CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF => [ 'title' => [ 'de' => 'Gutschein-Code als PDF bereitstellen', 'en' => 'Provide coupon code as PDF' @@ -439,7 +437,7 @@ protected static function createProductFields() 'public' => false, 'standard' => false ], - CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT => [ + CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT => [ 'title' => [ 'de' => 'Gutschein Wert', 'en' => 'Coupon amount' @@ -448,7 +446,7 @@ protected static function createProductFields() 'public' => false, 'standard' => false ], - CouponProductType::PRODUCT_FIELD_ID_DAYS_VALID => [ + CouponProductType::PRODUCT_FIELD_ID_DAYS_VALID => [ 'title' => [ 'de' => 'Gutschein-Code Gültigkeit (Tage)', 'en' => 'Coupon code validity (days)' @@ -457,7 +455,7 @@ protected static function createProductFields() 'public' => false, 'standard' => false ], - CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION => [ + CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION => [ 'title' => [ 'de' => 'Gutschein-Beschreibung', 'en' => 'Coupon description' @@ -465,6 +463,15 @@ protected static function createProductFields() 'type' => Fields::TYPE_INPUT_MULTI_LANG, 'public' => false, 'standard' => false + ], + CouponProductType::PRODUCT_FIELD_ID_IS_PRODUCT_SPECIFIC_COUPON => [ + 'title' => [ + 'de' => 'Ist Gutschein für ein spezifisches Produkt ("Einzweck-Gutschein")', + 'en' => 'Is coupon for a specific product ("single purpose coupon")' + ], + 'type' => Fields::TYPE_BOOL, + 'public' => false, + 'standard' => false ] ]; @@ -515,11 +522,12 @@ public static function onQuiqqerProductsProductCreate(ProductInterface $Product) } $fields = [ - CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE => true, - CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF => true, - CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT => null, - CouponProductType::PRODUCT_FIELD_ID_DAYS_VALID => 1095, // 3 years - CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION => null + CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE => true, + CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF => true, + CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT => null, + CouponProductType::PRODUCT_FIELD_ID_DAYS_VALID => 1095, // 3 years + CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION => null, + CouponProductType::PRODUCT_FIELD_ID_IS_PRODUCT_SPECIFIC_COUPON => false ]; foreach ($fields as $fieldId => $value) { @@ -552,62 +560,4 @@ 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) { - // @todo - } - } catch (\Exception $Exception) { - QUI\System\Log::writeDebugException($Exception); - continue; - } - } - } } diff --git a/src/QUI/ERP/Coupons/Products/CouponProductType.php b/src/QUI/ERP/Coupons/Products/CouponProductType.php index fd6d892..3d5ea3b 100644 --- a/src/QUI/ERP/Coupons/Products/CouponProductType.php +++ b/src/QUI/ERP/Coupons/Products/CouponProductType.php @@ -15,11 +15,12 @@ class CouponProductType extends DigitalProduct /** * Special fields for coupon products */ - const PRODUCT_FIELD_ID_TRANSFERABLE = 670; - const PRODUCT_FIELD_ID_GENERATE_PDF = 671; - const PRODUCT_FIELD_ID_COUPON_AMOUNT = 672; - const PRODUCT_FIELD_ID_DAYS_VALID = 673; - const PRODUCT_FIELD_ID_COUPON_DESCRIPTION = 674; + const PRODUCT_FIELD_ID_TRANSFERABLE = 670; + const PRODUCT_FIELD_ID_GENERATE_PDF = 671; + const PRODUCT_FIELD_ID_COUPON_AMOUNT = 672; + const PRODUCT_FIELD_ID_DAYS_VALID = 673; + const PRODUCT_FIELD_ID_COUPON_DESCRIPTION = 674; + const PRODUCT_FIELD_ID_IS_PRODUCT_SPECIFIC_COUPON = 675; /** * @param QUI\Locale $Locale diff --git a/src/QUI/ERP/Coupons/Products/Handler.php b/src/QUI/ERP/Coupons/Products/Handler.php index 43f3723..a930fd1 100644 --- a/src/QUI/ERP/Coupons/Products/Handler.php +++ b/src/QUI/ERP/Coupons/Products/Handler.php @@ -158,6 +158,13 @@ protected static function createDiscountFromProduct(Product $Product): Discount $discountAmount = $Product->getPrice()->getValue(); } + // Determine discount calculation basis based on coupon type + $isProductSpecificCoupon = $Product->getFieldValue( + CouponProductType::PRODUCT_FIELD_ID_IS_PRODUCT_SPECIFIC_COUPON + ); + + // @todo für Einzweck-Gutscheine muss ein spezieller Rabatt-Typ verwendet werden + /** @var Discount $NewDiscount */ $NewDiscount = $Handler->createChild([ 'active' => 1, -- GitLab