-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #164 from bold-commerce/Q1-601-v3
Q1-601-v3: Incorrectly calculating discount for the rule type "Fixed amount for whole cart".
- Loading branch information
Showing
8 changed files
with
297 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Bold\Checkout\Api\Data; | ||
|
||
/** | ||
* Discount Data Interface | ||
* @api | ||
*/ | ||
interface DiscountDataInterface | ||
{ | ||
/** | ||
* Get Amount | ||
* | ||
* @return float | ||
*/ | ||
public function getAmount(); | ||
|
||
/** | ||
* Get Base Amount | ||
* | ||
* @return float | ||
*/ | ||
public function getBaseAmount(); | ||
|
||
/** | ||
* Get Original Amount | ||
* | ||
* @return float | ||
*/ | ||
public function getOriginalAmount(); | ||
|
||
/** | ||
* Get Base Original Amount | ||
* | ||
* @return float | ||
*/ | ||
public function getBaseOriginalAmount(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Bold\Checkout\Api\Data; | ||
|
||
/** | ||
* Rule discount Interface | ||
* @api | ||
*/ | ||
interface RuleDiscountInterface | ||
{ | ||
/** | ||
* Get Discount Data | ||
* | ||
* @return \Bold\Checkout\Api\Data\DiscountDataInterface | ||
*/ | ||
public function getDiscountData(); | ||
|
||
/** | ||
* Get Rule Label | ||
* | ||
* @return string | ||
*/ | ||
public function getRuleLabel(); | ||
|
||
/** | ||
* Get Rule ID | ||
* | ||
* @return int | ||
*/ | ||
public function getRuleID(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Bold\Checkout\Model\Data; | ||
|
||
use Bold\Checkout\Api\Data\DiscountDataInterface; | ||
use Magento\Framework\Api\ExtensionAttributesInterface; | ||
use Magento\Framework\Model\AbstractExtensibleModel; | ||
|
||
/** | ||
* Discount Data Model | ||
*/ | ||
class DiscountData extends AbstractExtensibleModel implements DiscountDataInterface | ||
{ | ||
const AMOUNT = 'amount'; | ||
const BASE_AMOUNT = 'base_amount'; | ||
const ORIGINAL_AMOUNT = 'original_amount'; | ||
const BASE_ORIGINAL_AMOUNT = 'base_original_amount'; | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getAmount() | ||
{ | ||
return $this->getData(self::AMOUNT); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getBaseAmount() | ||
{ | ||
return $this->getData(self::BASE_AMOUNT); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getOriginalAmount() | ||
{ | ||
return $this->getData(self::ORIGINAL_AMOUNT); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getBaseOriginalAmount() | ||
{ | ||
return $this->getData(self::BASE_ORIGINAL_AMOUNT); | ||
} | ||
|
||
/** | ||
* Retrieve existing extension attributes object or create a new one. | ||
* | ||
* @return ExtensionAttributesInterface|null | ||
*/ | ||
public function getExtensionAttributes() | ||
{ | ||
return $this->_getExtensionAttributes(); | ||
} | ||
|
||
/** | ||
* Set an extension attributes object. | ||
* | ||
* @param ExtensionAttributesInterface $extensionAttributes | ||
* @return $this | ||
*/ | ||
public function setExtensionAttributes( | ||
ExtensionAttributesInterface $extensionAttributes | ||
) { | ||
return $this->_setExtensionAttributes($extensionAttributes); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Bold\Checkout\Model\Data; | ||
|
||
use Magento\Framework\Api\ExtensionAttributesInterface; | ||
use Magento\Framework\Model\AbstractExtensibleModel; | ||
use Bold\Checkout\Api\Data\RuleDiscountInterface; | ||
|
||
/** | ||
* Data Model for Rule Discount | ||
*/ | ||
class RuleDiscount extends AbstractExtensibleModel implements RuleDiscountInterface | ||
{ | ||
const KEY_DISCOUNT_DATA = 'discount'; | ||
const KEY_RULE_LABEL = 'rule'; | ||
const KEY_RULE_ID = 'rule_id'; | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getDiscountData() | ||
{ | ||
return $this->getData(self::KEY_DISCOUNT_DATA); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getRuleLabel() | ||
{ | ||
return $this->getData(self::KEY_RULE_LABEL); | ||
} | ||
|
||
/** | ||
* @inheritDoc | ||
*/ | ||
public function getRuleID() | ||
{ | ||
return $this->getData(self::KEY_RULE_ID); | ||
} | ||
|
||
/** | ||
* Retrieve existing extension attributes object or create a new one. | ||
* | ||
* @return ExtensionAttributesInterface|null | ||
*/ | ||
public function getExtensionAttributes() | ||
{ | ||
return $this->_getExtensionAttributes(); | ||
} | ||
|
||
/** | ||
* Set an extension attributes object. | ||
* | ||
* @param ExtensionAttributesInterface $extensionAttributes | ||
* @return $this | ||
*/ | ||
public function setExtensionAttributes( | ||
ExtensionAttributesInterface $extensionAttributes | ||
) { | ||
return $this->_setExtensionAttributes($extensionAttributes); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
Model/Quote/Result/Builder/AddBoldDiscountsExtensionAttribute.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Bold\Checkout\Model\Quote\Result\Builder; | ||
|
||
use Bold\Checkout\Api\Data\DiscountDataInterfaceFactory; | ||
use Bold\Checkout\Api\Data\RuleDiscountInterface; | ||
use Bold\Checkout\Api\Data\RuleDiscountInterfaceFactory; | ||
use Magento\Quote\Model\Quote\Item; | ||
|
||
/** | ||
* Add 'bold_discounts' extension attribute to quote item. | ||
*/ | ||
class AddBoldDiscountsExtensionAttribute | ||
{ | ||
/** | ||
* @var DiscountDataInterfaceFactory | ||
*/ | ||
private $discountDataInterfaceFactory; | ||
|
||
/** | ||
* @var RuleDiscountInterfaceFactory | ||
*/ | ||
private $discountInterfaceFactory; | ||
|
||
/** | ||
* @param DiscountDataInterfaceFactory $discountDataInterfaceFactory | ||
* @param RuleDiscountInterfaceFactory $discountInterfaceFactory | ||
*/ | ||
public function __construct( | ||
DiscountDataInterfaceFactory $discountDataInterfaceFactory, | ||
RuleDiscountInterfaceFactory $discountInterfaceFactory | ||
) { | ||
$this->discountDataInterfaceFactory = $discountDataInterfaceFactory; | ||
$this->discountInterfaceFactory = $discountInterfaceFactory; | ||
} | ||
|
||
/** | ||
* Add 'bold_discounts' extension attribute to quote item. | ||
* | ||
* @param Item $item | ||
* @return void | ||
*/ | ||
public function addExtensionAttribute(Item $item): void | ||
{ | ||
$data = [ | ||
'amount' => $item->getDiscountAmount(), | ||
'base_amount' => $item->getBaseDiscountAmount(), | ||
'original_amount' => $item->getOriginalDiscountAmount(), | ||
'base_original_amount' => $item->getBaseOriginalDiscountAmount() | ||
]; | ||
$itemDiscount = $this->discountDataInterfaceFactory->create(['data' => $data]); | ||
$appliedRuleIds = is_array($item->getAppliedRuleIds()) | ||
? $item->getAppliedRuleIds() | ||
: explode(',', $item->getAppliedRuleIds()); | ||
$ruleLabel = $item->getQuote()->getCouponCode() ?: __('Discount'); | ||
$data = [ | ||
'discount' => $itemDiscount, | ||
'rule' => $ruleLabel, | ||
'rule_id' => implode(',', $appliedRuleIds), | ||
]; | ||
/** @var RuleDiscountInterface $itemDiscount */ | ||
$ruleDiscount = $this->discountInterfaceFactory->create(['data' => $data]); | ||
$item->getExtensionAttributes()->setBoldDiscounts([$ruleDiscount]); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters