On Behalf Of fails to populate in Email Receipt
authorJitendra Purohit <jitendra@fuzion.co.nz>
Wed, 8 Apr 2020 12:22:11 +0000 (17:52 +0530)
committerJitendra Purohit <jitendra@fuzion.co.nz>
Wed, 22 Apr 2020 10:33:28 +0000 (16:03 +0530)
CRM/Activity/BAO/Activity.php
CRM/Contribute/BAO/Contribution.php
CRM/Contribute/Form/Contribution/Confirm.php
tests/phpunit/CRM/Contribute/Form/Contribution/ConfirmTest.php
tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php

index b3457a2e3a66c12a88c36505d92a478910fe0c43..865a4286dc8024b2bca9b359b5605fc019538fc7 100644 (file)
@@ -1704,7 +1704,11 @@ WHERE      activity.id IN ($activityIds)";
       // create activity record only for Completed Contributions
       $contributionCompletedStatusId = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed');
       if ($activity->contribution_status_id != $contributionCompletedStatusId) {
-        return NULL;
+        //For onbehalf payments, create a scheduled activity.
+        if (empty($params['on_behalf'])) {
+          return NULL;
+        }
+        $params['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Scheduled');
       }
       $activityType = $component = 'Contribution';
 
index e98ee415c045d0b30de442b9a582f8fa9ce10b46..d88410bad6e70b7db554249b3bb231ecdfb6ee09 100644 (file)
@@ -2885,6 +2885,11 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
       }
     }
 
+    $relatedContact = CRM_Contribute_BAO_Contribution::getOnbehalfIds($this->id);
+    if (!empty($relatedContact['individual_id'])) {
+      $ids['related_contact'] = $relatedContact['individual_id'];
+    }
+
     if ($paymentProcessorID) {
       $paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getPayment($paymentProcessorID,
         $this->is_test ? 'test' : 'live'
@@ -4552,10 +4557,10 @@ INNER JOIN civicrm_activity ON civicrm_activity_contact.activity_id = civicrm_ac
     if (empty($contribution->_relatedObjects['participant']) && !empty($contribution->_relatedObjects['membership'])) {
       // @fixme Can we remove this if altogether? - we removed the participant if / else and left relatedObjects['participant'] to ensure behaviour didn't change but it is probably not required.
       // @todo - use getRelatedMemberships instead
-      $contribution->contribution_status_id = $contributionParams['contribution_status_id'];
       $contribution->trxn_id = $input['trxn_id'] ?? NULL;
       $contribution->receive_date = CRM_Utils_Date::isoToMysql($contribution->receive_date);
     }
+    $contribution->contribution_status_id = $contributionParams['contribution_status_id'];
 
     CRM_Core_Error::debug_log_message("Contribution record updated successfully");
     $transaction->commit();
index 647cdb71378480edc0e53ac492d459088b868ebb..5acfd7857809a7b6b8a10fb10892d5b3db14ca7b 100644 (file)
@@ -1011,15 +1011,19 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
 
     //create contribution activity w/ individual and target
     //activity w/ organisation contact id when onbelf, CRM-4027
+    $actParams = [];
     $targetContactID = NULL;
-    if (!empty($params['hidden_onbehalf_profile'])) {
+    if (!empty($params['onbehalf_contact_id'])) {
+      $actParams = [
+        'source_contact_id' => $params['onbehalf_contact_id'],
+        'on_behalf' => TRUE,
+      ];
       $targetContactID = $contribution->contact_id;
-      $contribution->contact_id = $contactID;
     }
 
     // create an activity record
     if ($contribution) {
-      CRM_Activity_BAO_Activity::addActivity($contribution, NULL, $targetContactID);
+      CRM_Activity_BAO_Activity::addActivity($contribution, NULL, $targetContactID, $actParams);
     }
 
     $transaction->commit();
index e7287b93933d12ded89856a4bdafceb986e23c6d..7e8cc08a3bb10e5dfde973f5bc5f5d6f0f426f66 100644 (file)
@@ -138,6 +138,40 @@ class CRM_Contribute_Form_Contribution_ConfirmTest extends CiviUnitTestCase {
     $this->assertRegExp("/Paid later via page ID: $contributionPageID2/", $contribution['contribution_source']);
     // check that contribution status is changed to 'Completed' from 'Pending'
     $this->assertEquals('Completed', $contribution['contribution_status']);
+
+    //delete contribution.
+    $this->callAPISuccess('contribution', 'delete', [
+      'id' => $processConfirmResult['contribution']->id,
+    ]);
+
+    //Process on behalf contribution.
+    unset($form->_params['contribution_id']);
+    $form->_contactID = $form->_values['related_contact'] = $form->_params['onbehalf_contact_id'] = $contactID;
+    $form->_params['contact_id'] = $this->organizationCreate();
+    $this->callAPISuccess('Relationship', 'create', [
+      'contact_id_a' => $contactID,
+      'contact_id_b' => $form->_params['contact_id'],
+      'relationship_type_id' => 5,
+      'is_current_employer' => 1,
+    ]);
+    $processConfirmResult = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form,
+      $form->_params,
+      $form->_params['onbehalf_contact_id'],
+      $form->_values['financial_type_id'],
+      0, FALSE
+    );
+    //check if contribution is created on org.
+    $contribution = $this->callAPISuccessGetSingle('Contribution', [
+      'contact_id' => $form->_params['onbehalf_contact_id'],
+    ]);
+
+    $activity = civicrm_api3('Activity', 'get', [
+      'sequential' => 1,
+      'source_record_id' => $contribution['id'],
+      'contact_id' => $form->_params['onbehalf_contact_id'],
+      'activity_type_id' => "Contribution",
+    ]);
+    $this->assertEquals(1, $activity['count']);
   }
 
 }
index 706018d44d472810550d40643eed7ce89f57e0f5..a83f966ac39e0dfeca38ed39a15dece56fae97b7 100644 (file)
@@ -192,7 +192,7 @@ class CRM_Core_Payment_AuthorizeNetIPNTest extends CiviUnitTestCase {
     $this->assertTrue(substr($contribution['contribution_source'], 0, 20) == "Online Contribution:");
     $contributionRecur = $this->callAPISuccess('contribution_recur', 'getsingle', ['id' => $this->_contributionRecurID]);
     $this->assertEquals(5, $contributionRecur['contribution_status_id']);
-    $IPN = new CRM_Core_Payment_AuthorizeNetIPN(array_merge(['receive_date' => '1 July 2010'], $this->getRecurSubsequentTransaction()));
+    $IPN = new CRM_Core_Payment_AuthorizeNetIPN(array_merge(['receive_date' => '2010-07-01'], $this->getRecurSubsequentTransaction()));
     $IPN->main();
     $contribution = $this->callAPISuccess('contribution', 'get', [
       'contribution_recur_id' => $this->_contributionRecurID,