Skip to content

Commit

Permalink
FOSFASPRT-9: Fix pro rata calculation for membership payment plan
Browse files Browse the repository at this point in the history
  • Loading branch information
Muhammad Shahrukh committed Jun 5, 2024
1 parent 3a33e5e commit 8c00a56
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ protected function getInstalmentAmountCalculator(array $membershipTypes, $period
}

$instalmentAmountCalculator = new InstalmentAmountCalculator($calculator);
$instalmentAmountCalculator->getCalculator()->calculate();
$lineItems = CRM_Utils_Array::value('line_item', $this->params, []);
$isNotQuickConfig = !empty($lineItems) && count(array_values($lineItems)[0]) > 1;
$instalmentAmountCalculator->getCalculator()->calculate(!$this->isUsingPriceSet() || $isNotQuickConfig);

return $instalmentAmountCalculator;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,15 @@ private function calculateProRatedAmount($amount, $duration, $diff) {
/**
* @throws Exception
*/
public function calculate() {
public function calculate(bool $calculateProRated = TRUE) {
foreach ($this->membershipTypes as $membershipType) {
$settings = CRM_MembershipExtras_SettingsManager::getMembershipTypeSettings($membershipType->id);
$membershipAmount = $membershipType->minimum_fee;
$taxAmount = $this->instalmentTaxAmountCalculator->calculateByMembershipType($membershipType, $membershipAmount);

$skipProRataUntilSetting = $settings[SettingField::ANNUAL_PRORATA_SKIP_ELEMENT] ?? NULL;
if (!empty($skipProRataUntilSetting) && !empty($skipProRataUntilSetting['M']) && $this->isWithinMembershipTypeProRataSkipPeriod($skipProRataUntilSetting)) {
if ((!empty($skipProRataUntilSetting) && !empty($skipProRataUntilSetting['M']) && $this->isWithinMembershipTypeProRataSkipPeriod($skipProRataUntilSetting))
|| !$calculateProRated) {
$amount = $membershipAmount;
}
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

interface CRM_MembershipExtras_Service_MembershipPeriodType_PeriodTypeCalculatorInterface {

public function calculate();
public function calculate(bool $calculateProRated = TRUE);

public function getAmount();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function __construct(array $membershipTypes) {
*
* @throws Exception
*/
public function calculate() {
public function calculate(bool $calculateProRated = TRUE) {
foreach ($this->membershipTypes as $membershipType) {
$amount = $membershipType->minimum_fee;
$taxAmount = $this->instalmentTaxAmountCalculator->calculateByMembershipType($membershipType, $membershipType->minimum_fee);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,22 @@ private function mockParams($membershipPeriodType, $membershipTypeDuration, $mem
'entity_table' => 'civicrm_membership',
'entity_id' => $this->membership['id'],
'contact_id' => $contact['id'],
'line_item' => [
0 => [
1 => [
'membership_type_id' => $membershipType['id'],
'entity_table' => 'civicrm_membership',
'entity_id' => 1,
'line_total' => 1200,
],
2 => [
'membership_type_id' => $membershipType['id'],
'entity_table' => 'civicrm_membership',
'entity_id' => 2,
'line_total' => 1300,
],
],
],
];
}

Expand Down

0 comments on commit 8c00a56

Please sign in to comment.