Fix Invoice class to not call validateData
authoreileen <emcnaughton@wikimedia.org>
Sat, 5 Sep 2020 03:07:31 +0000 (15:07 +1200)
committereileen <emcnaughton@wikimedia.org>
Sat, 5 Sep 2020 03:26:51 +0000 (15:26 +1200)
This avoids calling the BaseIPN validateData class from Invoice.php and calls the narrower
loadRelatedObjects to avoid having to change the code around it

CRM/Contribute/Form/Task/Invoice.php
tests/phpunit/CRM/Contribute/Form/Task/InvoiceTest.php

index b2087a6474622c69e45469aa23d3e36017085efd..8701a47c5c88a7e2620e119c042232bb64480cd4 100644 (file)
@@ -210,7 +210,7 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task {
     $pendingStatusId = CRM_Utils_Array::key('Pending', $contributionStatusID);
 
     foreach ($invoiceElements['details'] as $contribID => $detail) {
-      $input = $ids = $objects = [];
+      $input = $ids = [];
       if (in_array($detail['contact'], $invoiceElements['excludeContactIds'])) {
         continue;
       }
@@ -225,11 +225,10 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task {
       $ids['participant'] = $detail['participant'] ?? NULL;
       $ids['event'] = $detail['event'] ?? NULL;
 
-      if (!$invoiceElements['baseIPN']->validateData($input, $ids, $objects, FALSE)) {
-        CRM_Core_Error::statusBounce('Supplied data was not able to be validated');
-      }
-
-      $contribution = &$objects['contribution'];
+      $contribution = new CRM_Contribute_BAO_Contribution();
+      $contribution->id = $contribID;
+      $contribution->fetch();
+      $contribution->loadRelatedObjects($input, $ids, TRUE);
 
       $input['amount'] = $contribution->total_amount;
       $input['invoice_id'] = $contribution->invoice_id;
@@ -237,8 +236,6 @@ class CRM_Contribute_Form_Task_Invoice extends CRM_Contribute_Form_Task {
       $input['contribution_status_id'] = $contribution->contribution_status_id;
       $input['organization_name'] = $contribution->_relatedObjects['contact']->organization_name;
 
-      $objects['contribution']->receive_date = CRM_Utils_Date::isoToMysql($objects['contribution']->receive_date);
-
       // Fetch the billing address. getValues should prioritize the billing
       // address, otherwise will return the primary address.
       $billingAddress = [];
index 01172c613359889fd893bfbd85a6f5d7cbf73086..e652922e80bfecdfde8493a0296238127727e179 100644 (file)
@@ -69,6 +69,7 @@ class CRM_Contribute_Form_Task_InvoiceTest extends CiviUnitTestCase {
 
     $this->assertNotContains('Due Date', $invoiceHTML[$result['id']]);
     $this->assertNotContains('PAYMENT ADVICE', $invoiceHTML[$result['id']]);
+    $this->assertContains('Mr. Anthony Anderson II', $invoiceHTML[$result['id']]);
 
     $this->assertContains('Due Date', $invoiceHTML[$contribution['id']]);
     $this->assertContains('PAYMENT ADVICE', $invoiceHTML[$contribution['id']]);