From 91e43e2386ac99bdb66746bc927d76d73d10121c Mon Sep 17 00:00:00 2001
From: ahuininga-orisha <>
Date: Thu, 28 May 2026 13:46:25 +0200
Subject: [PATCH] feat: add discount_percentage attribute to product export
feed
---
.../DiscountPercentage.php | 57 +++++++++++++++++++
.../Products/CollectionDecorator/Price.php | 1 +
etc/di.xml | 2 +
3 files changed, 60 insertions(+)
create mode 100644 Model/Write/Products/CollectionDecorator/DiscountPercentage.php
diff --git a/Model/Write/Products/CollectionDecorator/DiscountPercentage.php b/Model/Write/Products/CollectionDecorator/DiscountPercentage.php
new file mode 100644
index 0000000..596ff94
--- /dev/null
+++ b/Model/Write/Products/CollectionDecorator/DiscountPercentage.php
@@ -0,0 +1,57 @@
+getTypeId() === BundleType::TYPE_CODE) {
+ continue;
+ }
+
+ $discount = $this->calculateDiscount($entity);
+ if ($discount <= 0) {
+ continue;
+ }
+
+ $entity->addAttribute(self::ATTRIBUTE_NAME, $discount);
+ }
+ }
+
+ /**
+ * @param ExportEntity $entity
+ * @return int
+ */
+ private function calculateDiscount(ExportEntity $entity): int
+ {
+ try {
+ $regularPrice = (float)$entity->getAttribute('regular_price', false);
+ $finalPrice = (float)$entity->getAttribute('final_price', false);
+ } catch (InvalidArgumentException $e) {
+ return 0;
+ }
+
+ if ($regularPrice <= 0.00001 || $finalPrice >= $regularPrice) {
+ return 0;
+ }
+
+ return (int)round(($regularPrice - $finalPrice) / $regularPrice * 100);
+ }
+}
diff --git a/Model/Write/Products/CollectionDecorator/Price.php b/Model/Write/Products/CollectionDecorator/Price.php
index cd25b5b..0779f54 100644
--- a/Model/Write/Products/CollectionDecorator/Price.php
+++ b/Model/Write/Products/CollectionDecorator/Price.php
@@ -87,6 +87,7 @@ public function decorate(Collection|PriceCollection $collection): void
$row = $this->applyCombinedPrices($row, $product, $store);
$row = $this->applyPriceFields($row, $priceFields);
+ $row['regular_price'] = (float) $row['price'];
$row['price'] = $this->getPriceValue($row, $priceFields);
$collection->get($entityId)->setFromArray($row);
diff --git a/etc/di.xml b/etc/di.xml
index 815db21..e8fb262 100644
--- a/etc/di.xml
+++ b/etc/di.xml
@@ -81,6 +81,7 @@
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\StockData
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\ChildrenAttributes
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\Price
+ - Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\DiscountPercentage
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\WebsiteLink
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\Review
@@ -104,6 +105,7 @@
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\Children
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\Price
+ - Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\DiscountPercentage
- Tweakwise\Magento2TweakwiseExport\Model\Write\Products\CollectionDecorator\WebsiteLink