CRm-14197 where a participant_payment contribution has a single line item point it...
authorEileen McNaughton <eileen@fuzion.co.nz>
Tue, 20 May 2014 08:10:06 +0000 (20:10 +1200)
committerEileen McNaughton <eileen@fuzion.co.nz>
Wed, 28 May 2014 07:44:27 +0000 (19:44 +1200)
CRM/Event/BAO/ParticipantPayment.php

index 663d0fb55558601e73125fb10b711771f089421d..555df5dd25a36a523cef8d4e452da1f88bd0add0 100644 (file)
@@ -69,6 +69,16 @@ class CRM_Event_BAO_ParticipantPayment extends CRM_Event_DAO_ParticipantPayment
       CRM_Utils_Hook::post('create', 'ParticipantPayment', NULL, $participantPayment);
     }
 
+    //generally if people are creating participant_payments via the api they won't be setting the line item correctly - we can't help them if they are doing complex transactions
+    // but if they have a single line item for the contribution we can assume it should refer to the participant line
+    $lineItemCount = CRM_Core_DAO::singleValueQuery("select count(*) FROM civicrm_line_item WHERE contribution_id = %1", array(1 => array($participantPayment->contribution_id, 'Integer')));
+    if($lineItemCount == 1) {
+      $sql = "UPDATE civicrm_line_item li
+      SET entity_table = 'civicrm_participant', entity_id = %1
+      WHERE contribution_id = %2 AND entity_table = 'civicrm_contribution'";
+      CRM_Core_DAO::executeQuery($sql, array(1 => array($participantPayment->participant_id, 'Integer'), 2 => array($participantPayment->contribution_id, 'Integer')));
+    }
+
     return $participantPayment;
   }