From 944784dc5c1969d2b8bbe06be6d22f0aa24d1ca4 Mon Sep 17 00:00:00 2001 From: Frank Schubert Date: Thu, 13 Oct 2022 16:03:21 +0200 Subject: [PATCH] preorder price now comes from preorder product's attributes --- Layout/default/Preordercampaign/Form.php | 16 ++++++++ Layout/default/Product/Form.php | 9 +++-- application/Api/v1/PreorderApicontroller.php | 37 +++++++++++++------ .../Preordercampaign/Preordercampaign.php | 18 ++++++++- .../PreordercampaignController.php | 12 ++++++ .../Producttech/ProducttechController.php | 6 +-- 6 files changed, 79 insertions(+), 19 deletions(-) diff --git a/Layout/default/Preordercampaign/Form.php b/Layout/default/Preordercampaign/Form.php index 2c1042d4f..569a6882a 100644 --- a/Layout/default/Preordercampaign/Form.php +++ b/Layout/default/Preordercampaign/Form.php @@ -132,6 +132,16 @@ + +
+ +
+ + Diese Felder müssen beim Bestellen angegeben werden +
+
@@ -222,5 +232,11 @@ placeholder: "", closeOnSelect: false }); + + $("#required_fields").select2({ + allowClear: true, + placeholder: "", + closeOnSelect: false + }); \ No newline at end of file diff --git a/Layout/default/Product/Form.php b/Layout/default/Product/Form.php index 5d74d2685..9d6458aff 100644 --- a/Layout/default/Product/Form.php +++ b/Layout/default/Product/Form.php @@ -162,7 +162,7 @@
- +
@@ -174,13 +174,13 @@
- +
- +
@@ -213,6 +213,9 @@
+ description): ?> + description?> +
diff --git a/application/Api/v1/PreorderApicontroller.php b/application/Api/v1/PreorderApicontroller.php index f54d70f0f..90e665fc6 100644 --- a/application/Api/v1/PreorderApicontroller.php +++ b/application/Api/v1/PreorderApicontroller.php @@ -250,23 +250,30 @@ class PreorderApicontroller extends mfBaseApicontroller { if($type == "order") { $product = $this->campaign->setup_products['activation'][0]; } + if($type == "reorder") { + $product = $this->campaign->setup_products['reorder'][0]; + } if($product) { $preorder_data['setup_product_id'] = $product->id; $preorder_data['price_setup'] = $product->price_setup; if($connection_type == "multi-dwelling") { if($preorder_data['connection_count'] == 2) { - $preorder_data['price_setup'] = round($product->price_setup * 2 - (($product->price_setup * 2) / 100) * TT_PREORDER_DISCOUNT_2); + //$preorder_data['price_setup'] = round($product->price_setup * 2 - (($product->price_setup * 2) / 100) * TT_PREORDER_DISCOUNT_2); + $preorder_data['price_setup'] = ($product->attributes["presales_setup_price2"]->value) ? $product->attributes["presales_setup_price2"]->value : $product->price_setup; } if($connection_type == "multi-dwelling" && $preorder_data['connection_count'] == 3) { - $preorder_data['price_setup'] = round($product->price_setup * 3 - (($product->price_setup * 3) / 100) * TT_PREORDER_DISCOUNT_3); + //$preorder_data['price_setup'] = round($product->price_setup * 3 - (($product->price_setup * 3) / 100) * TT_PREORDER_DISCOUNT_3); + $preorder_data['price_setup'] = ($product->attributes["presales_setup_price3"]->value) ? $product->attributes["presales_setup_price3"]->value : $product->price_setup; } } if($connection_type == "apartment" && $type == "order") { - $preorder_data['price_setup'] = round($product->price_setup - (($product->price_setup) / 100) * TT_PREORDER_DISCOUNT_APART); + //$preorder_data['price_setup'] = round($product->price_setup - (($product->price_setup) / 100) * TT_PREORDER_DISCOUNT_APART); + $preorder_data['price_setup'] = ($product->attributes["presales_setup_price4"]->value) ? $product->attributes["presales_setup_price4"]->value : $product->price_setup; } if($connection_type == "business") { - $preorder_data['price_setup'] = round($product->price_setup - (($product->price_setup) / 100) * TT_PREORDER_DISCOUNT_BUSINESS); + //$preorder_data['price_setup'] = round($product->price_setup - (($product->price_setup) / 100) * TT_PREORDER_DISCOUNT_BUSINESS); + $preorder_data['price_setup'] = ($product->attributes["presales_setup_price_business"]->value) ? $product->attributes["presales_setup_price_business"]->value : $product->price_setup; } } @@ -279,14 +286,22 @@ class PreorderApicontroller extends mfBaseApicontroller { $preorder_data[$key] = $customer->$key; } } + /* - if($customer->type == "tenant") { - $preorder_data['contact_type'] = "tenant"; - } elseif($customer->type == "owner") { - $preorder_data['contact_type'] = "owner"; - } else { - return mfResponse::BadRequest(["message" => "customer type must be 'tenant' or 'owner'"]); - }*/ + * check optional required fields + */ + if(is_array($this->campaign->required_fields) && count($this->campaign->required_fields)) { + if(in_array("contact_type", $this->campaign->required_fields)) { + if($customer->type == "tenant") { + $preorder_data['contact_type'] = "tenant"; + } elseif($customer->type == "owner") { + $preorder_data['contact_type'] = "owner"; + } else { + return mfResponse::BadRequest(["message" => "customer type must be 'tenant' or 'owner'"]); + } + } + } + /* * create preorder record diff --git a/application/Preordercampaign/Preordercampaign.php b/application/Preordercampaign/Preordercampaign.php index 55dbb8e9e..97c93c1c1 100644 --- a/application/Preordercampaign/Preordercampaign.php +++ b/application/Preordercampaign/Preordercampaign.php @@ -5,11 +5,12 @@ class Preordercampaign extends mfBaseModel { private $preorders; private $active_preorders; private $types; - private $setup_products; + private $setup_products = []; private $salesclusters; private $apiusers; private $corsorigins; private $total_homes; + private $required_fields = []; public function addTypes(Array $types) { @@ -50,9 +51,11 @@ class Preordercampaign extends mfBaseModel { public function getSetupProducts() { $provision_products = []; $activation_products = []; + $reorder_products = []; $provisions = ProductModel::search(["attributename" => "presales", "attributevalue" => "provision"]); $activations = ProductModel::search(["attributename" => "presales", "attributevalue" => "activation"]); + $reorders = ProductModel::search(["attributename" => "presales", "attributevalue" => "reorder"]); foreach($provisions as $p) { if(ProductNetworkModel::search(['product_id' => $p->id, "network_id" => $this->network_id])) { @@ -64,8 +67,13 @@ class Preordercampaign extends mfBaseModel { $activation_products[] = $p; } } + foreach($reorders as $p) { + if(ProductNetworkModel::search(['product_id' => $p->id, "network_id" => $this->network_id])) { + $reorder_products[] = $p; + } + } - return ['activation' => $activation_products, 'provision' => $provision_products]; + return ['activation' => $activation_products, 'provision' => $provision_products, 'reorder' => $reorder_products]; } public function getProperty($name) { @@ -81,6 +89,12 @@ class Preordercampaign extends mfBaseModel { return $total; } + if($name == "required_fields") { + if(!$this->required_preorder_fields) return []; + $this->required_fields = json_decode($this->required_preorder_fields); + return $this->required_fields; + } + if($name == "preorders") { $this->preorders = PreorderModel::search(['preordercampaign_id' => $this->id]); diff --git a/application/Preordercampaign/PreordercampaignController.php b/application/Preordercampaign/PreordercampaignController.php index 36ccab215..5689cb895 100644 --- a/application/Preordercampaign/PreordercampaignController.php +++ b/application/Preordercampaign/PreordercampaignController.php @@ -161,6 +161,18 @@ class PreordercampaignController extends mfBaseController { $data['product_type'] = "all"; } + if(is_array($r->required_fields) && count($r->required_fields)) { + $rfields = []; + foreach(['contact_type'] as $afield) { + if(in_array($afield, $r->required_fields)) { + $rfields[] = "contact_type"; + } + } + $data['required_preorder_fields'] = json_encode($rfields); + } else { + $data['required_preorder_fields'] = null; + } + $data['edit_by'] = $this->me->id; diff --git a/application/Producttech/ProducttechController.php b/application/Producttech/ProducttechController.php index 56f9bb200..1b385a6d2 100644 --- a/application/Producttech/ProducttechController.php +++ b/application/Producttech/ProducttechController.php @@ -88,10 +88,10 @@ class ProducttechController extends mfBaseController { $a = []; $a['name'] = $attribute['name']; $a['producttech_id'] = $new_id; - $a['displayname'] = $attribute['displayname']; + $a['displayname'] = htmlentities($attribute['displayname']); $a['value'] = $attribute['value']; - $a['description'] = $attribute['description']; - $a['note'] = $attribute['note']; + $a['description'] = htmlentities($attribute['description']); + $a['note'] = htmlentities($attribute['note']); $a['edit_by'] = $this->me->id; if($aid == "new") {