pro-rata handled
This commit is contained in:
		@@ -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',
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user