From 4a875cf19254c58b8de5175cbca0996075f18090 Mon Sep 17 00:00:00 2001 From: Jens Schuppe Date: Mon, 26 Aug 2024 13:15:06 +0200 Subject: [PATCH] Use API4 for retrieving contributions of SEPA transaction groups, filtering for permissioned financial types only --- CRM/Sepa/Page/ListGroup.php | 191 ++++++++++++++++----------------- l10n/de_DE/LC_MESSAGES/sepa.mo | Bin 72598 -> 73080 bytes l10n/de_DE/LC_MESSAGES/sepa.po | 18 +++- l10n/org.project60.sepa.pot | 8 +- 4 files changed, 111 insertions(+), 106 deletions(-) diff --git a/CRM/Sepa/Page/ListGroup.php b/CRM/Sepa/Page/ListGroup.php index 862bd82f..d7a585f3 100644 --- a/CRM/Sepa/Page/ListGroup.php +++ b/CRM/Sepa/Page/ListGroup.php @@ -14,119 +14,110 @@ | written permission from the original author(s). | +--------------------------------------------------------*/ +use CRM_Sepa_ExtensionUtil as E; +use Civi\Api4\SepaTransactionGroup; +use Civi\Api4\Contribution; + /** * back office sepa group content viewer * * @package CiviCRM_SEPA * */ - - -require_once 'CRM/Core/Page.php'; - class CRM_Sepa_Page_ListGroup extends CRM_Core_Page { function run() { - CRM_Utils_System::setTitle(ts('SEPA Group Contributions', array('domain' => 'org.project60.sepa'))); - if (isset($_REQUEST['group_id'])) { - // get some values - $group_id = (int) $_REQUEST['group_id']; - $financial_types = CRM_Contribute_PseudoConstant::financialType(); - - // load the group - $txgroup = civicrm_api('SepaTransactionGroup', 'getsingle', array('id'=>$group_id, 'version'=>3)); - if (isset($txgroup['is_error']) && $txgroup['is_error']) { - CRM_Core_Session::setStatus(sprintf(ts("Cannot read SEPA transaction group [%s]. Error was: '%s'", array('domain' => 'org.project60.sepa')), $group_id, $txgroup['error_message']), ts("Error", array('domain' => 'org.project60.sepa')), "error"); - } - - // get contribution status option group ID - $status_option_group_id = 99999; - $option_group = civicrm_api3('OptionGroup', 'get', array( - 'name' => 'contribution_status', - 'return' => 'id')); - if (!empty($option_group['id'])) { - $status_option_group_id = $option_group['id']; - } - - // load the group's contributions - $sql = " - SELECT - civicrm_sdd_txgroup.reference AS reference, - civicrm_contact.display_name AS contact_display_name, - civicrm_contact.contact_type AS contact_contact_type, - civicrm_contact.id AS contact_id, - civicrm_contribution.id AS contribution_id, - civicrm_contribution.total_amount AS contribution_amount, - civicrm_contribution.currency AS contribution_currency, - civicrm_contribution.financial_type_id AS contribution_financial_type_id, - civicrm_campaign.title AS contribution_campaign, - civicrm_option_value.label AS contribution_status - FROM - civicrm_sdd_txgroup - LEFT JOIN - civicrm_sdd_contribution_txgroup ON civicrm_sdd_txgroup.id = civicrm_sdd_contribution_txgroup.txgroup_id - LEFT JOIN - civicrm_contribution ON civicrm_contribution.id = civicrm_sdd_contribution_txgroup.contribution_id - LEFT JOIN - civicrm_contact ON civicrm_contact.id = civicrm_contribution.contact_id - LEFT JOIN - civicrm_campaign ON civicrm_campaign.id = civicrm_contribution.campaign_id - LEFT JOIN - civicrm_option_value ON civicrm_option_value.value = civicrm_contribution.contribution_status_id AND civicrm_option_value.option_group_id = {$status_option_group_id} - WHERE - civicrm_sdd_txgroup.id = $group_id;"; - - $total_amount = 0.0; - $total_count = 0; - $total_campaigns = array(); - $total_types = array(); - $total_contacts = array(); - $status_stats = array(); - $contact_base_link = CRM_Utils_System::url('civicrm/contact/view', '&reset=1&cid='); - $contribution_base_link = CRM_Utils_System::url('civicrm/contact/view/contribution', '&reset=1&id=_cid_&cid=_id_&action=view'); - $currency = NULL; - - $contributions = array(); - $result = CRM_Core_DAO::executeQuery($sql); - while ($result->fetch()) { - $currency = $result->contribution_currency; - $contributions[$total_count] = array( - 'contact_display_name' => $result->contact_display_name, - 'contact_type' => $result->contact_contact_type, - 'contact_id' => $result->contact_id, - 'contact_link' => $contact_base_link.$result->contact_id, - 'contribution_link' => str_replace('_id_', $result->contact_id, str_replace('_cid_', $result->contribution_id, $contribution_base_link)), - 'contribution_id' => $result->contribution_id, - 'contribution_status' => $result->contribution_status, - 'contribution_amount' => $result->contribution_amount, - 'contribution_amount_str' => CRM_Utils_Money::format($result->contribution_amount, $result->contribution_currency), - 'financial_type' => $financial_types[$result->contribution_financial_type_id], - 'campaign' => $result->contribution_campaign, - ); + CRM_Utils_System::setTitle(E::ts('SEPA Group Contributions')); + try { + $groupId = CRM_Utils_Request::retrieve('group_id', 'Integer', NULL, TRUE); + $txGroup = SepaTransactionGroup::get(TRUE) + ->selectRowCount() + ->addSelect( + 'id', + 'reference', + 'status_id', + 'COUNT(DISTINCT contribution.id) AS total_count', + 'SUM(contribution.total_amount) AS total_amount', + 'COUNT(DISTINCT contribution.campaign_id) AS different_campaigns', + 'COUNT(DISTINCT contribution.financial_type_id) AS different_types', + 'COUNT(DISTINCT contribution.contact_id) AS different_contacts' + ) + ->addJoin('Contribution AS contribution', 'INNER', 'SepaContributionGroup') + ->addWhere('id', '=', $groupId) + ->addGroupBy('id') + ->execute() + ->single(); + } + catch (CRM_Core_Exception $exception) { + CRM_Core_Error::statusBounce( + E::ts( + 'Cannot read SEPA transaction group [%1]. Error was: %2', + [ + 1 => $groupId, + 2 => $exception->getMessage(), + ] + ), + CRM_Utils_System::url('civicrm/sepa') + ); + } - $total_count += 1; - $total_amount += $result->contribution_amount; - $total_types[$result->contribution_financial_type_id] = 1; - $total_contacts[$result->contact_id] = 1; - $total_campaigns[$result->contribution_campaign] = 1; - $reference = $result->reference; - $status_stats[$result->contribution_status] = 1 + CRM_Utils_Array::value($result->contribution_status, $status_stats, 0); - } + $result = Contribution::get() + ->selectRowCount() + ->addSelect( + 'contact_id.display_name', + 'contact_id.contact_type', + 'contact_id.id', + 'id', + 'total_amount', + 'currency', + 'financial_type_id', + 'financial_type_id:label', + 'campaign_id.title', + 'contribution_status_id:label' + ) + ->addJoin('SepaTransactionGroup AS sepa_transaction_group', 'INNER', 'SepaContributionGroup') + ->addWhere('sepa_transaction_group.id', '=', $groupId) + ->execute(); + $statusStats = []; + $contributions = []; + foreach ($result as $contribution) { + $contributions[] = [ + 'contact_display_name' => $contribution['contact_id.display_name'], + 'contact_type' => $contribution['contact_id.contact_type'], + 'contact_id' => $contribution['contact_id.id'], + 'contact_link' => CRM_Utils_System::url( + 'civicrm/contact/view', + '&reset=1&cid=' . $contribution['contact_id.id'] + ), + 'contribution_link' => CRM_Utils_System::url( + 'civicrm/contact/view/contribution', + '&reset=1&id=' . $contribution['id'] . '&cid=' . $contribution['contact_id.id'] . '&action=view' + ), + 'contribution_id' => $contribution['id'], + 'contribution_status' => $contribution['contribution_status_id:label'], + 'contribution_amount' => $contribution['total_amount'], + 'contribution_amount_str' => CRM_Utils_Money::format($contribution['total_amount'], $contribution['currency']), + 'financial_type_id' => $contribution['financial_type_id'], + 'financial_type' => $contribution['financial_type_id:label'], + 'campaign' => $contribution['campaign_id.title'], + ]; + $statusStats[$contribution['contribution_status_id:label']] = + 1 + ($statusStats[$contribution['contribution_status_id:label']] ?? 0); } - $this->assign("txgroup", $txgroup); - $this->assign("reference", $reference); - $this->assign("group_id", $group_id); - $this->assign("total_count", $total_count); - $this->assign("total_amount", $total_amount); - $this->assign("total_amount_str", CRM_Utils_Money::format($total_amount, $currency)); - $this->assign("contributions", $contributions); - $this->assign("different_campaigns", count($total_campaigns)); - $this->assign("different_types", count($total_types)); - $this->assign("different_contacts", count($total_contacts)); - $this->assign("status_stats", $status_stats); + $this->assign('txgroup', $txGroup); + $this->assign('reference', $txGroup['reference']); + $this->assign('group_id', $groupId); + $this->assign('total_count', $txGroup['total_count']); + $this->assign('total_amount', $txGroup['total_amount']); + $this->assign('total_amount_str', CRM_Utils_Money::format($txGroup['total_amount'], $result->first()['currency'])); + $this->assign('contributions', $contributions); + $this->assign('different_campaigns', $txGroup['different_campaigns']); + $this->assign('different_types', $txGroup['different_types']); + $this->assign('different_contacts', $txGroup['different_contacts']); + $this->assign('status_stats', $statusStats); parent::run(); } -} \ No newline at end of file +} diff --git a/l10n/de_DE/LC_MESSAGES/sepa.mo b/l10n/de_DE/LC_MESSAGES/sepa.mo index 215cd11c62a14acc80233c7e07b72787e1cbd5eb..b9645a54e41b3e56d07ff82c101a8e362df20d4a 100644 GIT binary patch delta 14817 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 J(SN?2{D0sB8#n*} diff --git a/l10n/de_DE/LC_MESSAGES/sepa.po b/l10n/de_DE/LC_MESSAGES/sepa.po index ee0675a5..b2989acb 100644 --- a/l10n/de_DE/LC_MESSAGES/sepa.po +++ b/l10n/de_DE/LC_MESSAGES/sepa.po @@ -262,8 +262,7 @@ msgstr "" #: CRM/Sepa/BAO/SEPAMandate.php CRM/Sepa/Form/CreateMandate.php #: CRM/Sepa/Logic/Queue/Update.php CRM/Sepa/Logic/Status.php #: CRM/Sepa/Page/CloseGroup.php CRM/Sepa/Page/CreateMandate.php -#: CRM/Sepa/Page/DashBoard.php CRM/Sepa/Page/EditMandate.php -#: CRM/Sepa/Page/ListGroup.php js/SepaSettings.js +#: CRM/Sepa/Page/DashBoard.php CRM/Sepa/Page/EditMandate.php js/SepaSettings.js msgid "Error" msgstr "Fehler" @@ -1789,8 +1788,9 @@ msgid "SEPA Group Contributions" msgstr "Zuwendungen der SEPA Gruppe" #: CRM/Sepa/Page/ListGroup.php -msgid "Cannot read SEPA transaction group [%s]. Error was: '%s'" -msgstr "Die SEPA Gruppe [%s] konnte nicht geladen werden. Fehler ist: '%s'" +msgid "Cannot read SEPA transaction group [%1]. Error was: %2" +msgstr "" +"Die SEPA-Transaktionsgruppe [%1] konnte nicht geladen werden. Fehler: %2" #: CRM/Sepa/Page/MandateTab.php sepa.php msgid "SEPA Mandates" @@ -3149,6 +3149,14 @@ msgstr "Dauereinzüge Aktualisieren" msgid "retry collection" msgstr "Einzug erneut versuchen" +#: templates/CRM/Sepa/Page/DashBoard.tpl +msgid "" +"Note that only groups with contributions of authorized financial types are " +"being displayed." +msgstr "" +"Beachten Sie, dass nur Gruppen mit Zuwendungen angezeigt werden, für deren " +"Zuwendungsart Sie die Berechtigung haben." + #: templates/CRM/Sepa/Page/DashBoard.tpl msgid "Group Name" msgstr "Gruppenname" @@ -3804,6 +3812,8 @@ msgid "" "Note that only mandates associated with contributions of authorized " "financial types are being displayed." msgstr "" +"Beachten Sie, dass nur Mandate mit zugehörigen Zuwendungen angezeigt werden, " +"für deren Zuwendungsart Sie die Berechtigung haben." #: templates/CRM/Sepa/Page/MandateTab.tpl msgid "One-Off SEPA Mandates" diff --git a/l10n/org.project60.sepa.pot b/l10n/org.project60.sepa.pot index 67776aa6..84a6e4c5 100644 --- a/l10n/org.project60.sepa.pot +++ b/l10n/org.project60.sepa.pot @@ -178,7 +178,7 @@ msgstr "" msgid "Cannot close mandate [%s], batching in progress!" msgstr "" -#: CRM/Sepa/BAO/SEPAMandate.php CRM/Sepa/Form/CreateMandate.php CRM/Sepa/Logic/Queue/Update.php CRM/Sepa/Logic/Status.php CRM/Sepa/Page/CloseGroup.php CRM/Sepa/Page/CreateMandate.php CRM/Sepa/Page/DashBoard.php CRM/Sepa/Page/EditMandate.php CRM/Sepa/Page/ListGroup.php js/SepaSettings.js +#: CRM/Sepa/BAO/SEPAMandate.php CRM/Sepa/Form/CreateMandate.php CRM/Sepa/Logic/Queue/Update.php CRM/Sepa/Logic/Status.php CRM/Sepa/Page/CloseGroup.php CRM/Sepa/Page/CreateMandate.php CRM/Sepa/Page/DashBoard.php CRM/Sepa/Page/EditMandate.php js/SepaSettings.js msgid "Error" msgstr "" @@ -1519,7 +1519,7 @@ msgid "SEPA Group Contributions" msgstr "" #: CRM/Sepa/Page/ListGroup.php -msgid "Cannot read SEPA transaction group [%s]. Error was: '%s'" +msgid "Cannot read SEPA transaction group [%1]. Error was: %2" msgstr "" #: CRM/Sepa/Page/MandateTab.php sepa.php @@ -2550,6 +2550,10 @@ msgstr "" msgid "retry collection" msgstr "" +#: templates/CRM/Sepa/Page/DashBoard.tpl +msgid "Note that only groups with contributions of authorized financial types are being displayed." +msgstr "" + #: templates/CRM/Sepa/Page/DashBoard.tpl msgid "Group Name" msgstr ""