* @throws \CRM_Core_Exception
*/
public static function create(array $params): CRM_Pledge_DAO_Pledge {
+ $action = empty($params['id']) ? 'create' : 'edit';
+ if ($action === 'create') {
+ $defaults = [
+ 'currency' => CRM_Core_Config::singleton()->defaultCurrency,
+ 'installments' => (int) self::fields()['installments']['default'],
+ 'scheduled_date' => $params['start_date'] ?? date('Ymd'),
+ ];
+ $params = array_merge($defaults, $params);
+ }
- $isRecalculatePledgePayment = self::isPaymentsRequireRecalculation($params);
$transaction = new CRM_Core_Transaction();
$paymentParams = [];
}
$paymentParams['status_id'] = $params['status_id'] ?? NULL;
- $hook = empty($params['id']) ? 'create' : 'edit';
- CRM_Utils_Hook::pre($hook, 'Pledge', $params['id'] ?? NULL, $params);
-
+ CRM_Utils_Hook::pre($action, 'Pledge', $params['id'] ?? NULL, $params);
$pledge = new CRM_Pledge_DAO_Pledge();
// if pledge is complete update end date as current date
}
$pledge->copyValues($params);
-
- // set currency for CRM-1496
- if (!isset($pledge->currency)) {
- $pledge->currency = CRM_Core_Config::singleton()->defaultCurrency;
- }
-
$pledge->save();
-
- CRM_Utils_Hook::post($hook, 'Pledge', $pledge->id, $pledge);
+ CRM_Utils_Hook::post($action, 'Pledge', $pledge->id, $pledge);
// handle custom data.
if (!empty($params['custom']) &&
CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_pledge', $pledge->id);
}
- // skip payment stuff inedit mode
- if (!isset($params['id']) || $isRecalculatePledgePayment) {
+ // skip payment stuff in edit mode
+ if (empty($params['id']) || self::isPaymentsRequireRecalculation($params)) {
// if pledge is pending delete all payments and recreate.
- if ($isRecalculatePledgePayment) {
+ if (!empty(empty($params['id']))) {
CRM_Pledge_BAO_PledgePayment::deletePayments($pledge->id);
}
'version' => $this->_apiversion,
];
}
- $result = $this->civicrm_api($entity, $action, $params);
+ try {
+ $result = $this->civicrm_api($entity, $action, $params);
+ }
+ catch (\API_Exception $e) {
+ // api v4 call failed and threw an exception.
+ return [];
+ }
$this->assertAPIFailure($result, "We expected a failure for $entity $action but got a success", $expectedErrorMessage);
return $result;
}
}
if ($options['sort']) {
foreach (explode(',', $options['sort']) as $sort) {
- list($sortField, $sortDir) = array_pad(explode(' ', trim($sort)), 2, 'ASC');
+ [$sortField, $sortDir] = array_pad(explode(' ', trim($sort)), 2, 'ASC');
$v4Params['orderBy'][$sortField] = $sortDir;
}
}