You are here

private function WebformCivicrmPostProcess::createDeferredPayment in Webform CiviCRM Integration 8.5

Create Pending (Pay Later) Contribution

1 call to WebformCivicrmPostProcess::createDeferredPayment()
WebformCivicrmPostProcess::preSave in src/WebformCivicrmPostProcess.php
Process webform submission when it is about to be saved. Called by the following hook:

File

src/WebformCivicrmPostProcess.php, line 2046
Front-end form validation and post-processing.

Class

WebformCivicrmPostProcess

Namespace

Drupal\webform_civicrm

Code

private function createDeferredPayment() {
  $this->contributionIsIncomplete = TRUE;
  $this->contributionIsPayLater = FALSE;
  $paymentProcessorID = NestedArray::getValue($this->data, [
    'contribution',
    '1',
    'contribution',
    '1',
    'payment_processor_id',
  ]);
  if (empty($paymentProcessorID)) {
    $this->contributionIsPayLater = TRUE;
  }
  else {
    $paymentProcessorClassName = civicrm_api3('PaymentProcessor', 'getvalue', [
      'return' => 'class_name',
      'id' => $paymentProcessorID,
    ]);
    if ($paymentProcessorClassName === 'Payment_Manual') {
      $this->contributionIsPayLater = TRUE;
    }
  }
  $params = $this
    ->contributionParams();
  $params['contribution_status_id'] = 'Pending';
  $params['is_pay_later'] = $this->contributionIsPayLater;
  $numInstallments = wf_crm_aval($params, 'installments', NULL, TRUE);
  $frequencyInterval = wf_crm_aval($params, 'frequency_unit');
  if ($numInstallments != 1 && !empty($frequencyInterval) && $this->contributionIsPayLater) {
    $result = $this
      ->contributionRecur($params, 'deferred');
  }
  else {
    $result = \Drupal::service('webform_civicrm.utils')
      ->wf_civicrm_api('contribution', 'create', $params);
  }
  $this->ent['contribution'][1]['id'] = $result['id'];
}