pro-rata handled

This commit is contained in:
Jon Goldberg 2019-09-09 18:11:08 -04:00
parent 9f939bc840
commit e94484960f
No known key found for this signature in database
GPG Key ID: C2D2247364F9DB13
1 changed files with 33 additions and 11 deletions

View File

@ -3,15 +3,16 @@
class CRM_Tbusainvoicegen_Timebank {
// Live settings
const TBBILLABLEFIELD = 'custom_233';
const BILLABLEMEMBERFIELD = 'custom_236';
const BILLINGPERIODFIELD = 'custom_228';
const TBCREATED = 'custom_112';
// const TBBILLABLEFIELD = 'custom_233';
// const BILLABLEMEMBERFIELD = 'custom_236';
// const BILLINGPERIODFIELD = 'custom_228';
// const TBCREATED = 'custom_112';
// Local dev settings.
// const TBBILLABLEFIELD = 'custom_9';
// const BILLABLEMEMBERFIELD = 'custom_10';
// const BILLINGPERIODFIELD = 'custom_11';
const TBBILLABLEFIELD = 'custom_9';
const BILLABLEMEMBERFIELD = 'custom_10';
const BILLINGPERIODFIELD = 'custom_11';
const TBCREATED = 'custom_27';
/**
* Set the pricing here.
@ -98,7 +99,11 @@ class CRM_Tbusainvoicegen_Timebank {
foreach ($contacts as $k => $contact) {
if (!in_array($k, self::$contributionExists)) {
$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->createContribution();
}
@ -137,11 +142,12 @@ class CRM_Tbusainvoicegen_Timebank {
$adjustedMemberCount = $this->memberCount - 2;
foreach ($this->priceArray as $members => $cost) {
if ($adjustedMemberCount <= $members) {
$this->price = $cost * $this->monthsProRated();
break;
// After this "break", $cost will be accurate.
}
}
// Pro-rate the payment if the timebank is new enough.
$this->price = round($cost * $this->monthsProRated() / 6, 2);
return $this->price;
}
@ -153,12 +159,28 @@ class CRM_Tbusainvoicegen_Timebank {
private function monthsProRated() {
// By default, we bill all 6 months in a billing period.
$monthsProRated = 6;
$beginDate = $this->calculatePeriodBeginDate;
$firstAnniversary = $this->$creationDate->modify("+1 year");
$beginDate = $this->calculatePeriodBeginDate();
$firstAnniversary = $this->creationDate->modify("+1 year");
$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() {
if (!$this->price) {
return;
}
$dueDate = $this->calculateDueDate();
civicrm_api3('Contribution', 'create', [
'financial_type_id' => 'CW License Fee',