3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
18 class CRM_Event_BAO_ParticipantPayment
extends CRM_Event_DAO_ParticipantPayment
{
21 * Creates or updates a participant payment record.
23 * @param array $params
24 * of values to initialize the record with.
29 * the partcipant payment record
31 public static function create(&$params, $ids = []) {
32 $id = $params['id'] ??
$ids['id'] ??
NULL;
34 CRM_Utils_Hook
::pre('edit', 'ParticipantPayment', $id, $params);
37 CRM_Utils_Hook
::pre('create', 'ParticipantPayment', NULL, $params);
40 $participantPayment = new CRM_Event_BAO_ParticipantPayment();
41 $participantPayment->copyValues($params);
43 $participantPayment->id
= $id;
46 $participantPayment->find(TRUE);
48 $participantPayment->save();
50 if (empty($participantPayment->contribution_id
)) {
51 // For an id update contribution_id may be unknown. We want it
52 // further down so perhaps get it before the hooks.
53 $participantPayment->find(TRUE);
56 CRM_Utils_Hook
::post('edit', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
59 CRM_Utils_Hook
::post('create', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
62 //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
63 // but if they have a single line item for the contribution we can assume it should refer to the participant line
64 $lineItemCount = CRM_Core_DAO
::singleValueQuery("select count(*) FROM civicrm_line_item WHERE contribution_id = %1", [
66 $participantPayment->contribution_id
,
70 if ($lineItemCount == 1) {
71 $sql = "UPDATE civicrm_line_item li
72 SET entity_table = 'civicrm_participant', entity_id = %1
73 WHERE contribution_id = %2 AND entity_table = 'civicrm_contribution'";
74 CRM_Core_DAO
::executeQuery($sql, [
75 1 => [$participantPayment->participant_id
, 'Integer'],
76 2 => [$participantPayment->contribution_id
, 'Integer'],
80 return $participantPayment;
84 * Delete the record that are associated with this ParticipantPayment.
85 * Also deletes the associated contribution for this participant
87 * @param array $params
88 * Associative array whose values match the record to be deleted.
91 * true if deleted false otherwise
93 public static function deleteParticipantPayment($params) {
94 $participantPayment = new CRM_Event_DAO_ParticipantPayment();
97 foreach ($params as $field => $value) {
99 $participantPayment->$field = $value;
105 throw new CRM_Core_Exception('Cannot delete participant payment');
108 if ($participantPayment->find(TRUE)) {
109 CRM_Utils_Hook
::pre('delete', 'ParticipantPayment', $participantPayment->id
, $params);
110 CRM_Contribute_BAO_Contribution
::deleteContribution($participantPayment->contribution_id
);
111 $participantPayment->delete();
112 CRM_Utils_Hook
::post('delete', 'ParticipantPayment', $participantPayment->id
, $participantPayment);
113 return $participantPayment;