forked from CiviWare/com.megaphonetech.automatchinggift
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
class CRM_AutoMatchingGift_Utils {
 | 
						|
 | 
						|
  /**
 | 
						|
   * Create/Update matching gift.
 | 
						|
   *
 | 
						|
   * @param int $contributionId
 | 
						|
   * @param array $params
 | 
						|
   *
 | 
						|
   */
 | 
						|
  public static function createMatchingGift($contributionId, $params) {
 | 
						|
    $cancelContributionId = $contributionSoftId = $contactID = NULL;
 | 
						|
    $contributionStatus = 'Pending';
 | 
						|
 | 
						|
    foreach ($params as $values) {
 | 
						|
      if ($values['column_name'] == MATCHING_GIFT_CUSTOM_FIELD_NAME && !empty($values['value'])) {
 | 
						|
        $contactID = $values['value'];
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    if (empty($contactID)) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    $matchingFieldId = civicrm_api3('CustomField', 'getvalue', [
 | 
						|
      'return' => "id",
 | 
						|
      'custom_group_id' => MATCHING_GIFT_CONTRI_CUSTOM_GROUP_NAME,
 | 
						|
      'name' => MATCHING_GIFT_CONTRI_CUSTOM_FIELD_NAME,
 | 
						|
    ]);
 | 
						|
 | 
						|
    try {
 | 
						|
      $contributionSoft = civicrm_api3('ContributionSoft', 'getsingle', [
 | 
						|
        'return' => [
 | 
						|
          "contribution_id",
 | 
						|
          'contribution_id.contact_id',
 | 
						|
          'contribution_id.contribution_status_id',
 | 
						|
        ],
 | 
						|
        "custom_{$matchingFieldId}" => $contributionId,
 | 
						|
      ]);
 | 
						|
      if ($contributionSoft['contribution_id.contact_id'] == $contactID) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      $cancelContributionId = $contributionSoft['contribution_id'];
 | 
						|
      $contributionStatus = $contributionSoft['contribution_id.contribution_status_id'];
 | 
						|
      $contributionSoftId = $contributionSoft['id'];
 | 
						|
    }
 | 
						|
    catch (CiviCRM_API3_Exception $e) {
 | 
						|
      // IGNORE NOT FOUND ERROR
 | 
						|
    }
 | 
						|
 | 
						|
    $contributionDetails = civicrm_api3('Contribution', 'getsingle', [
 | 
						|
      'id' => $contributionId,
 | 
						|
      'return' => [
 | 
						|
        'total_amount',
 | 
						|
        'financial_type_id',
 | 
						|
        'contact_id',
 | 
						|
      ],
 | 
						|
    ]);
 | 
						|
 | 
						|
    if ($cancelContributionId) {
 | 
						|
      civicrm_api3('Contribution', 'create', [
 | 
						|
        'id' => $cancelContributionId,
 | 
						|
        'contribution_status_id' => 'Cancelled',
 | 
						|
      ]);
 | 
						|
    }
 | 
						|
 | 
						|
    $contributionParams = [
 | 
						|
      'total_amount' => $contributionDetails['total_amount'],
 | 
						|
      'financial_type_id' => $contributionDetails['financial_type_id'],
 | 
						|
      'contact_id' => $contactID,
 | 
						|
      'contribution_status_id' => $contributionStatus,
 | 
						|
      'is_pay_later' => TRUE,
 | 
						|
    ];
 | 
						|
    $contribution = civicrm_api3('Contribution', 'create', $contributionParams);
 | 
						|
 | 
						|
    civicrm_api3('ContributionSoft', 'create', [
 | 
						|
      'contact_id' => $contributionDetails['contact_id'],
 | 
						|
      'amount' => $contributionDetails['total_amount'],
 | 
						|
      'soft_credit_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionSoft', 'soft_credit_type_id', 'matched_gift'),
 | 
						|
      "custom_{$matchingFieldId}" => $contributionId,
 | 
						|
      'contribution_id' => $contribution['id'],
 | 
						|
      'id' => $contributionSoftId,
 | 
						|
    ]);
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
}
 |