pro-rata handled
This commit is contained in:
parent
9f939bc840
commit
e94484960f
@ -3,15 +3,16 @@
|
|||||||
class CRM_Tbusainvoicegen_Timebank {
|
class CRM_Tbusainvoicegen_Timebank {
|
||||||
|
|
||||||
// Live settings
|
// Live settings
|
||||||
const TBBILLABLEFIELD = 'custom_233';
|
// const TBBILLABLEFIELD = 'custom_233';
|
||||||
const BILLABLEMEMBERFIELD = 'custom_236';
|
// const BILLABLEMEMBERFIELD = 'custom_236';
|
||||||
const BILLINGPERIODFIELD = 'custom_228';
|
// const BILLINGPERIODFIELD = 'custom_228';
|
||||||
const TBCREATED = 'custom_112';
|
// const TBCREATED = 'custom_112';
|
||||||
|
|
||||||
// Local dev settings.
|
// Local dev settings.
|
||||||
// const TBBILLABLEFIELD = 'custom_9';
|
const TBBILLABLEFIELD = 'custom_9';
|
||||||
// const BILLABLEMEMBERFIELD = 'custom_10';
|
const BILLABLEMEMBERFIELD = 'custom_10';
|
||||||
// const BILLINGPERIODFIELD = 'custom_11';
|
const BILLINGPERIODFIELD = 'custom_11';
|
||||||
|
const TBCREATED = 'custom_27';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the pricing here.
|
* Set the pricing here.
|
||||||
@ -98,7 +99,11 @@ class CRM_Tbusainvoicegen_Timebank {
|
|||||||
foreach ($contacts as $k => $contact) {
|
foreach ($contacts as $k => $contact) {
|
||||||
if (!in_array($k, self::$contributionExists)) {
|
if (!in_array($k, self::$contributionExists)) {
|
||||||
$tb = new CRM_Tbusainvoicegen_Timebank($k, $contact[self::BILLABLEMEMBERFIELD]);
|
$tb = new CRM_Tbusainvoicegen_Timebank($k, $contact[self::BILLABLEMEMBERFIELD]);
|
||||||
$tb->$dateCreated = new DateTime($contact[self::TBCREATED]);
|
// Don't generate an invoice if there's no "TB Created" date.
|
||||||
|
if (!$contact[self::TBCREATED]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$tb->creationDate = new DateTime($contact[self::TBCREATED]);
|
||||||
$tb->setPrice();
|
$tb->setPrice();
|
||||||
$tb->createContribution();
|
$tb->createContribution();
|
||||||
}
|
}
|
||||||
@ -137,11 +142,12 @@ class CRM_Tbusainvoicegen_Timebank {
|
|||||||
$adjustedMemberCount = $this->memberCount - 2;
|
$adjustedMemberCount = $this->memberCount - 2;
|
||||||
foreach ($this->priceArray as $members => $cost) {
|
foreach ($this->priceArray as $members => $cost) {
|
||||||
if ($adjustedMemberCount <= $members) {
|
if ($adjustedMemberCount <= $members) {
|
||||||
$this->price = $cost * $this->monthsProRated();
|
|
||||||
break;
|
break;
|
||||||
|
// After this "break", $cost will be accurate.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Pro-rate the payment if the timebank is new enough.
|
// Pro-rate the payment if the timebank is new enough.
|
||||||
|
$this->price = round($cost * $this->monthsProRated() / 6, 2);
|
||||||
return $this->price;
|
return $this->price;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,12 +159,28 @@ class CRM_Tbusainvoicegen_Timebank {
|
|||||||
private function monthsProRated() {
|
private function monthsProRated() {
|
||||||
// By default, we bill all 6 months in a billing period.
|
// By default, we bill all 6 months in a billing period.
|
||||||
$monthsProRated = 6;
|
$monthsProRated = 6;
|
||||||
$beginDate = $this->calculatePeriodBeginDate;
|
$beginDate = $this->calculatePeriodBeginDate();
|
||||||
$firstAnniversary = $this->$creationDate->modify("+1 year");
|
$firstAnniversary = $this->creationDate->modify("+1 year");
|
||||||
$interval = $beginDate->diff($firstAnniversary);
|
$interval = $beginDate->diff($firstAnniversary);
|
||||||
|
// First anniversary is before the billing period.
|
||||||
|
if ($interval->invert == 1) {
|
||||||
|
$monthsProRated = 6;
|
||||||
|
}
|
||||||
|
// Starts past the end of the billing period.
|
||||||
|
elseif ($interval->y >= 1 || $interval->m >= 6) {
|
||||||
|
$monthsProRated = 0;
|
||||||
|
}
|
||||||
|
// Falls within the billing period.
|
||||||
|
else {
|
||||||
|
$monthsProRated = 5 - $interval->m;
|
||||||
|
}
|
||||||
|
return $monthsProRated;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createContribution() {
|
private function createContribution() {
|
||||||
|
if (!$this->price) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
$dueDate = $this->calculateDueDate();
|
$dueDate = $this->calculateDueDate();
|
||||||
civicrm_api3('Contribution', 'create', [
|
civicrm_api3('Contribution', 'create', [
|
||||||
'financial_type_id' => 'CW License Fee',
|
'financial_type_id' => 'CW License Fee',
|
||||||
|
Loading…
Reference in New Issue
Block a user