From 116ee184a8f1481cc0b4d9783ef0be64bcc08768 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Tue, 29 Jun 2021 09:46:06 +0200
Subject: [PATCH] feat: coupon products

---
 products.xml                             |  1 +
 src/QUI/ERP/Coupons/Events.php           | 76 ++++++++++++++----------
 src/QUI/ERP/Coupons/Products/Handler.php |  3 +-
 3 files changed, 46 insertions(+), 34 deletions(-)

diff --git a/products.xml b/products.xml
index 6a634fa..cb83a20 100644
--- a/products.xml
+++ b/products.xml
@@ -12,6 +12,7 @@
                     <field>672</field>
                     <field>673</field>
                     <field>674</field>
+                    <field>675</field>
                 </fields>
             </fieldCategory>
         </fieldCategories>
diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php
index 7c0b6f2..e00a78f 100644
--- a/src/QUI/ERP/Coupons/Events.php
+++ b/src/QUI/ERP/Coupons/Events.php
@@ -420,58 +420,64 @@ protected static function createProductFields()
     {
         $fields = [
             CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE               => [
-                'title'    => [
+                'title'         => [
                     'de' => 'Gutschein-Code ist übertragbar',
                     'en' => 'Coupon code is transferable'
                 ],
-                'type'     => Fields::TYPE_BOOL,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_BOOL,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => false
             ],
             CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF               => [
-                'title'    => [
+                'title'         => [
                     'de' => 'Gutschein-Code als PDF bereitstellen',
                     'en' => 'Provide coupon code as PDF'
                 ],
-                'type'     => Fields::TYPE_BOOL,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_BOOL,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => false
             ],
             CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT              => [
-                'title'    => [
+                'title'         => [
                     'de' => 'Gutschein Wert',
                     'en' => 'Coupon amount'
                 ],
-                'type'     => Fields::TYPE_FLOAT,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_FLOAT,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => true
             ],
             CouponProductType::PRODUCT_FIELD_ID_DAYS_VALID                 => [
-                'title'    => [
+                'title'         => [
                     'de' => 'Gutschein-Code Gültigkeit (Tage)',
                     'en' => 'Coupon code validity (days)'
                 ],
-                'type'     => Fields::TYPE_INT,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_INT,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => true
             ],
             CouponProductType::PRODUCT_FIELD_ID_COUPON_DESCRIPTION         => [
-                'title'    => [
+                'title'         => [
                     'de' => 'Gutschein-Beschreibung',
                     'en' => 'Coupon description'
                 ],
-                'type'     => Fields::TYPE_INPUT_MULTI_LANG,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_INPUT_MULTI_LANG,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => true
             ],
             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")'
+                'title'         => [
+                    'de' => 'Ist Gutschein für spezifische Produkte ("Einzweck-Gutschein")',
+                    'en' => 'Is coupon for specific products ("single purpose coupon")'
                 ],
-                'type'     => Fields::TYPE_BOOL,
-                'public'   => false,
-                'standard' => false
+                'type'          => Fields::TYPE_BOOL,
+                'public'        => false,
+                'standard'      => false,
+                'requiredField' => false
             ]
         ];
 
@@ -494,7 +500,8 @@ protected static function createProductFields()
                     'systemField'   => 0,
                     'standardField' => !empty($field['standard']) ? 1 : 0,
                     'publicField'   => !empty($field['public']) ? 1 : 0,
-                    'options'       => !empty($field['options']) ? $field['options'] : null
+                    'options'       => !empty($field['options']) ? $field['options'] : null,
+                    'requiredField' => !empty($field['requiredField']) ? 1 : 0
                 ]);
             } catch (\Exception $Exception) {
                 QUI\System\Log::writeException($Exception);
@@ -521,13 +528,16 @@ public static function onQuiqqerProductsProductCreate(ProductInterface $Product)
             return;
         }
 
+        $UniqueProduct = $Product->createUniqueProduct();
+        $UniqueProduct->calc();
+
         $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_IS_PRODUCT_SPECIFIC_COUPON => false
+            CouponProductType::PRODUCT_FIELD_ID_TRANSFERABLE       => true,
+            CouponProductType::PRODUCT_FIELD_ID_GENERATE_PDF       => true,
+            CouponProductType::PRODUCT_FIELD_ID_COUPON_AMOUNT      => $UniqueProduct->getPrice()->getValue(),
+            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 // @todo later
         ];
 
         foreach ($fields as $fieldId => $value) {
diff --git a/src/QUI/ERP/Coupons/Products/Handler.php b/src/QUI/ERP/Coupons/Products/Handler.php
index a930fd1..ab2c75c 100644
--- a/src/QUI/ERP/Coupons/Products/Handler.php
+++ b/src/QUI/ERP/Coupons/Products/Handler.php
@@ -170,7 +170,8 @@ protected static function createDiscountFromProduct(Product $Product): Discount
             'active'        => 1,
             'discount'      => $discountAmount,
             'discount_type' => DiscountHandler::DISCOUNT_TYPE_CURRENCY,
-            'hidden'        => 1
+            'hidden'        => 1,
+            'scope'         => DiscountHandler::DISCOUNT_SCOPE_GRAND_TOTAL
         ]);
 
         $L             = new QUI\Locale();
-- 
GitLab