Remove requirement to pass 'contribution_status_id' => Pending from order.create
authoreileen <emcnaughton@wikimedia.org>
Sat, 1 Aug 2020 00:36:27 +0000 (12:36 +1200)
committereileen <emcnaughton@wikimedia.org>
Sun, 2 Aug 2020 10:40:29 +0000 (22:40 +1200)
contribution_status_id is a required param, but the only acceptable value is Pending. Let's make it optional.....

api/v3/Order.php
tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php
tests/phpunit/CRM/Contribute/Form/Task/InvoiceTest.php

index 99b270ec29755882805bc62f9a2a9e4439f659b0..32d59a193954a62755d3afd6d7ba9d66a8834a97 100644 (file)
@@ -74,9 +74,9 @@ function civicrm_api3_order_create($params) {
   civicrm_api3_verify_one_mandatory($params, NULL, ['line_items', 'total_amount']);
   $entity = NULL;
   $entityIds = [];
-  $contributionStatus = $params['contribution_status_id'] ?? NULL;
-  if ($contributionStatus !== 'Pending' && 'Pending' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $contributionStatus)) {
-    CRM_Core_Error::deprecatedFunctionWarning("Creating a Order with a status other than pending is deprecated. Currently empty defaults to 'Completed' so as a transition not passing in 'Pending' is deprecated. You can chain payment creation e.g civicrm_api3('Order', 'create', ['blah' => 'blah', 'contribution_status_id' => 'Pending', 'api.Payment.create => ['total_amount' => 5]]");
+  $params['contribution_status_id'] = $params['contribution_status_id'] ?? 'Pending';
+  if ($params['contribution_status_id'] !== 'Pending' && 'Pending' !== CRM_Core_PseudoConstant::getName('CRM_Contribute_BAO_Contribution', 'contribution_status_id', $params['contribution_status_id'])) {
+    CRM_Core_Error::deprecatedFunctionWarning("Creating a Order with a status other than pending is deprecated. Please do not set contribution_status_id, it will default to Pending. You can chain payment creation e.g civicrm_api3('Order', 'create', ['blah' => 'blah', 'contribution_status_id' => 'Pending', 'api.Payment.create => ['total_amount' => 5]]");
   }
 
   if (!empty($params['line_items']) && is_array($params['line_items'])) {
@@ -91,9 +91,7 @@ function civicrm_api3_order_create($params) {
       if ($entityParams) {
         if (in_array($entity, ['participant', 'membership'])) {
           $entityParams['skipLineItem'] = TRUE;
-          if ($contributionStatus === 'Pending') {
-            $entityParams['status_id'] = ($entity === 'participant' ? 'Pending from incomplete transaction' : 'Pending');
-          }
+          $entityParams['status_id'] = ($entity === 'participant' ? 'Pending from incomplete transaction' : 'Pending');
           $entityResult = civicrm_api3($entity, 'create', $entityParams);
           $params['contribution_mode'] = $entity;
           $entityIds[] = $params[$entity . '_id'] = $entityResult['id'];
index f5c9d4fe34b5c0c0916763ff2589b981957c7ada..dd75d167895187c48cad32ecc26f59fda3981538 100644 (file)
@@ -304,7 +304,6 @@ class CRM_Contribute_BAO_ContributionRecurTest extends CiviUnitTestCase {
       'contact_id' => $contactId1,
       'receive_date' => '2010-01-20',
       'financial_type_id' => 'Member Dues',
-      'contribution_status_id' => 'Pending',
       'contribution_recur_id' => $contributionRecurId,
       'total_amount' => 150,
       'api.Payment.create' => ['total_amount' => 150],
index a38b8a2e958e76b727d47b2a1f3dbe8b9a60257a..01172c613359889fd893bfbd85a6f5d7cbf73086 100644 (file)
@@ -136,7 +136,6 @@ class CRM_Contribute_Form_Task_InvoiceTest extends CiviUnitTestCase {
         return $total;
       }),
       'financial_type_id' => $priceFieldValues['values'][0]['financial_type_id'],
-      'contribution_status_id' => 'Pending',
       'currency' => 'USD',
       'line_items' => $lineItemParams,
     ];