Skip to content
Snippets Groups Projects
Commit 35ebb009 authored by mattwire's avatar mattwire
Browse files

Update Mjwpayment.get_payment API to support multiple parameters and options

parent 40cb2ce4
No related branches found
No related tags found
No related merge requests found
...@@ -160,17 +160,12 @@ function _civicrm_api3_mjwpayment_get_payment_spec(&$params) { ...@@ -160,17 +160,12 @@ function _civicrm_api3_mjwpayment_get_payment_spec(&$params) {
'type' => CRM_Utils_Type::T_INT, 'type' => CRM_Utils_Type::T_INT,
'api.aliases' => ['payment_id', 'id'], 'api.aliases' => ['payment_id', 'id'],
], ],
'is_payment' => [
'title' => ts('Is Payment'),
'description' => ts('Is this entry a payment (is_payment=1) or a reversal of a payment (is_payment=0)?'),
'type' => CRM_Utils_Type::T_BOOLEAN,
'api.default' => TRUE,
],
]; ];
} }
/** /**
* Retrieve a set of financial transactions which are payments. * Retrieve a set of financial transactions which are payments.
* @todo This matches Payment.Get following https://github.com/civicrm/civicrm-core/pull/17071 which will be in CiviCRM 5.26
* *
* @param array $params * @param array $params
* Input parameters. * Input parameters.
...@@ -180,56 +175,38 @@ function _civicrm_api3_mjwpayment_get_payment_spec(&$params) { ...@@ -180,56 +175,38 @@ function _civicrm_api3_mjwpayment_get_payment_spec(&$params) {
* @throws \CiviCRM_API3_Exception * @throws \CiviCRM_API3_Exception
*/ */
function civicrm_api3_mjwpayment_get_payment($params) { function civicrm_api3_mjwpayment_get_payment($params) {
$ftParams = []; $params['is_payment'] = TRUE;
$contributionID = $params['entity_id'] ?? NULL;
// To get by contribution ID we need to "join" civicrm_financial_trxn.id on civicrm_entity_financial_trxn.financial_trxn_id // In order to support contribution id we need to do an extra lookup.
// But this is a pseudo API so we can't do that directly (FinancialTrxn can). if ($contributionID) {
if (isset($params['entity_id']) && ($params['entity_table'] === 'civicrm_contribution')) {
$eftParams = [ $eftParams = [
'entity_id' => $params['entity_id'], 'entity_id' => $contributionID,
'entity_table' => $params['entity_table'], 'entity_table' => 'civicrm_contribution',
'options' => ['limit' => 0], 'options' => ['limit' => 0],
'financial_trxn_id.is_payment' => 1,
]; ];
$eft = civicrm_api3('EntityFinancialTrxn', 'get', $eftParams)['values']; $eft = civicrm_api3('EntityFinancialTrxn', 'get', $eftParams)['values'];
$eftIds = []; if (empty($eft)) {
foreach ($eft as $efts) { return civicrm_api3_create_success([], $params, 'Payment', 'get');
if (empty($efts['financial_trxn_id'])) {
continue;
}
$eftIds[] = $efts['financial_trxn_id'];
$map[$efts['financial_trxn_id']] = $efts['entity_id'];
} }
if (!empty($eftIds)) { foreach ($eft as $entityFinancialTrxn) {
$ftParams = [ $params['financial_trxn_id']['IN'][] = $entityFinancialTrxn['financial_trxn_id'];
'id' => ['IN' => $eftIds],
'is_payment' => $params['is_payment'],
];
} }
} }
// If we have IDs from EntityFinancialTrxn merge them here. $financialTrxn = civicrm_api3('FinancialTrxn', 'get', array_merge($params, ['sequential' => FALSE]))['values'];
$ftParams = array_merge($params, $ftParams); if ($contributionID) {
$ftParams['return'] = array_values(CRM_Utils_Array::collect('name', civicrm_api3('FinancialTrxn', 'getfields')['values'])); foreach ($financialTrxn as &$values) {
$ftParams['return'][] = 'id.entity_id'; $values['contribution_id'] = $contributionID;
$ftParams['sequential'] = 0;
$financialTrxn = civicrm_api3('FinancialTrxn', 'get', $ftParams)['values'];
if (empty($eftIds) && !empty($financialTrxn)) {
$eftParams = [
'financial_trxn_id' => ['IN' => array_keys($financialTrxn)],
'entity_table' => 'civicrm_contribution',
];
$eft = civicrm_api3('EntityFinancialTrxn', 'get', $eftParams)['values'];
foreach ($eft as $efts) {
if (empty($efts['financial_trxn_id'])) {
continue;
}
$map[$efts['financial_trxn_id']] = $efts['entity_id'];
} }
} }
// Map contribution_id from id.entity_id elseif (!empty($financialTrxn)) {
foreach ($financialTrxn as &$values) { $entityFinancialTrxns = civicrm_api3('EntityFinancialTrxn', 'get', ['financial_trxn_id' => ['IN' => array_keys($financialTrxn)], 'entity_table' => 'civicrm_contribution', 'options' => ['limit' => 0]])['values'];
$values['contribution_id'] = $map[$values['id']] ?? NULL; foreach ($entityFinancialTrxns as $entityFinancialTrxn) {
$financialTrxn[$entityFinancialTrxn['financial_trxn_id']]['contribution_id'] = $entityFinancialTrxn['entity_id'];
}
} }
return civicrm_api3_create_success($financialTrxn ?? [], $params, 'Mjwpayment', 'get_payment'); return civicrm_api3_create_success($financialTrxn, $params, 'Mjwpayment', 'get_payment');
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment