diff --git a/bin/backend/controls/Manager.css b/bin/backend/controls/Manager.css index 61aa78dd75cd81c9b4b6a08dd7c799e5d06cdd6f..af2a0412443929e6bc7957a3ce4ec341b23a412f 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 6abc2256d8a13bdf3becc6826f8e60d3bbd05c93..eee1145194a3b769c08f260fc47bfd7c292adf0a 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 8780beb8c0a3a34406f5e5bd98e53285a74cbb95..7c0b6f28842ee6d316e5e37b6d6f7085b747a8bc 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 fd6d89260232df075c82c309ff56ac6ba3377121..3d5ea3b97cf0b9d11808dcf17b16935c29e32a14 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 43f372319086639cd0c1b5f04cfea5afa2e1df9a..a930fd16a83ec07281f84a9c23d4090a1d156098 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,