From bca5ca34be5f76a42c3ae6004321612448a0620a Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Fri, 28 Dec 2018 11:19:09 +0000 Subject: [PATCH 1/5] remove deprecated syntax - ParseError: syntax error, unexpected 'new' (T_NEW) --- CRM/Civigiftaid/Utils/Contribution.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CRM/Civigiftaid/Utils/Contribution.php b/CRM/Civigiftaid/Utils/Contribution.php index 7df66d3..fcc6b53 100644 --- a/CRM/Civigiftaid/Utils/Contribution.php +++ b/CRM/Civigiftaid/Utils/Contribution.php @@ -95,8 +95,8 @@ public static function addContributionToBatch($contributionIDs, $batchID) { ); foreach ($contributionIDs as $contributionID) { - //$batchContribution =& new CRM_Core_DAO_EntityBatch( ); - $batchContribution =& new CRM_Batch_DAO_EntityBatch(); + //$batchContribution = new CRM_Core_DAO_EntityBatch( ); + $batchContribution = new CRM_Batch_DAO_EntityBatch(); $batchContribution->entity_table = 'civicrm_contribution'; $batchContribution->entity_id = $contributionID; @@ -187,7 +187,7 @@ public static function removeContributionFromBatch($contributionIDs) { foreach ($contributions as $contribution) { if (!empty($contribution['batch_id'])) { - $batchContribution =& new CRM_Batch_DAO_EntityBatch(); + $batchContribution = new CRM_Batch_DAO_EntityBatch(); $batchContribution->entity_table = 'civicrm_contribution'; $batchContribution->entity_id = $contribution['contribution_id']; $batchContribution->batch_id = $contribution['batch_id']; @@ -343,7 +343,7 @@ public static function validationRemoveContributionFromBatch(&$contributionIDs) foreach ($contributionIDs as $contributionID) { - $batchContribution =& new CRM_Batch_DAO_EntityBatch(); + $batchContribution = new CRM_Batch_DAO_EntityBatch(); $batchContribution->entity_table = 'civicrm_contribution'; $batchContribution->entity_id = $contributionID; @@ -395,7 +395,7 @@ public static function validateContributionToBatch(&$contributionIDs) { require_once "CRM/Contribute/BAO/Contribution.php"; foreach ($contributionIDs as $contributionID) { - $batchContribution =& new CRM_Batch_DAO_EntityBatch(); + $batchContribution = new CRM_Batch_DAO_EntityBatch(); $batchContribution->entity_table = 'civicrm_contribution'; $batchContribution->entity_id = $contributionID; From 06f44b4d4d197244949c16cd4e1ab5e80e7685c3 Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Fri, 28 Dec 2018 18:33:49 +0000 Subject: [PATCH 2/5] add to batch - validation through queue - avoid timeout --- CRM/Civigiftaid/Form/Task/AddToBatch.php | 133 +++++++++++++++++- CRM/Civigiftaid/Utils/Contribution.php | 1 + .../CRM/Civigiftaid/Form/Task/AddToBatch.tpl | 3 +- 3 files changed, 133 insertions(+), 4 deletions(-) diff --git a/CRM/Civigiftaid/Form/Task/AddToBatch.php b/CRM/Civigiftaid/Form/Task/AddToBatch.php index ceb8a27..8253af6 100644 --- a/CRM/Civigiftaid/Form/Task/AddToBatch.php +++ b/CRM/Civigiftaid/Form/Task/AddToBatch.php @@ -53,9 +53,15 @@ class CRM_Civigiftaid_Form_Task_AddToBatch extends CRM_Contribute_Form_Task { function preProcess() { parent::preProcess(); - require_once 'CRM/Civigiftaid/Utils/Contribution.php'; - list($total, $added, $alreadyAdded, $notValid) = - CRM_Civigiftaid_Utils_Contribution::validateContributionToBatch($this->_contributionIds); + $isStatsDone = CRM_Utils_Request::retrieve('processed', 'Boolean', $this, FALSE, 0); + if (empty($isStatsDone)) { + $runner = $this->getRunner($this->_contributionIds); + if ($runner) { + $runner->runAllViaWeb(); + } + } + list( $total, $added, $alreadyAdded, $notValid ) = $this->getValidationStats(); + $this->assign('selectedContributions', $total); $this->assign('totalAddedContributions', count($added)); $this->assign('alreadyAddedContributions', count($alreadyAdded)); @@ -114,6 +120,8 @@ function buildQuickForm() { $this->setDefaults($defaults); $this->addDefaultButtons(ts('Add to batch')); + $revalidateUrl = CRM_Utils_System::url(CRM_Utils_System::currentPath(), "_qf_AddToBatch_display=1&qfKey={$this->controller->_key}&processed=0", FALSE, NULL, FALSE); + $this->assign('revalidateURL', $revalidateUrl); } /** @@ -195,4 +203,123 @@ public function postProcess() { $transaction->commit(); CRM_Core_Session::setStatus($status); }//end of function + + /** + * Build a queue of tasks by dividing contributions in sets. + */ + public function getRunner($contributionIds) { + $queue = CRM_Queue_Service::singleton()->create(array( + 'name' => 'ADD_TO_GIFTAID', + 'type' => 'Sql', + 'reset' => TRUE, + )); + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + $total = count($contributionIds); + $batchLimit = 10; + for ($i = 0; $i < ceil($total/$batchLimit); $i++) { + $start = $i * $batchLimit; + $contribIds = array_slice($contributionIds, $start, $batchLimit, TRUE); + $task = new CRM_Queue_Task( + array ('CRM_Civigiftaid_Form_Task_AddToBatch', 'validateContributionToBatchLimit'), + array($contribIds, $qfKey), + "Validated " . $i*$batchLimit . " contributions out of " . $total + ); + $queue->createItem($task); + } + // Setup the Runner + $url = CRM_Utils_System::url(CRM_Utils_System::currentPath(), "_qf_AddToBatch_display=1&qfKey={$this->controller->_key}&processed=1", FALSE, NULL, FALSE); + $runner = new CRM_Queue_Runner(array( + 'title' => ts('Validating Contributions..'), + 'queue' => $queue, + 'errorMode'=> CRM_Queue_Runner::ERROR_ABORT, + 'onEndUrl' => $url + )); + // reset stats + self::resetValidationStats($qfKey); + + return $runner; + } + + /** + * Carry out batch validations. + * + * @param \CRM_Queue_TaskContext $ctx + * @param array $contributionIds + * + * @return int + */ + static function validateContributionToBatchLimit(CRM_Queue_TaskContext $ctx, $contributionIds, $qfKey) { + list( $total, $added, $alreadyAdded, $notValid ) = + CRM_Civigiftaid_Utils_Contribution::validateContributionToBatch($contributionIds); + $cache = self::getCache(); + $key = self::getCacheKey($qfKey); + $stats = $cache->get($key); + if (empty($stats)) { + $stats = array( + 'total' => $total, + 'added' => $added, + 'alreadyAdded' => $alreadyAdded, + 'notValid' => $notValid, + ); + $cache->set($key, $stats); + } else { + $stats = array( + 'total' => $stats['total'] + $total, + 'added' => array_merge($stats['added'], $added), + 'alreadyAdded' => array_merge($stats['alreadyAdded'], $alreadyAdded), + 'notValid' => array_merge($stats['notValid'], $notValid), + ); + $cache->set($key, $stats); + } + return CRM_Queue_Task::TASK_SUCCESS; + } + + /** + * Fetch cache object. + * + * @return object CRM_Utils_Cache_SqlGroup + */ + static function getCache() { + $cache = new CRM_Utils_Cache_SqlGroup(array( + 'group' => 'Civigiftaid', + )); + return $cache; + } + + /** + * Fetch cache key. + * + * @return string cache key + */ + static function getCacheKey($qfKey) { + return "civigiftaid_addtobatch_stats_{$qfKey}"; + } + + /** + * Get validation stats from cache. + * + * @return array + */ + public function getValidationStats() { + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + $cache = self::getCache(); + $stats = $cache->get(self::getCacheKey($qfKey)); + return array( + empty($stats['total']) ? 0 : $stats['total'], + $stats['added'], + $stats['alreadyAdded'], + $stats['notValid'] + ); + } + + /** + * Reset validation stats for giftaid + * + * @return array + */ + static function resetValidationStats($qfKey) { + $cache = self::getCache(); + $key = self::getCacheKey($qfKey); + $cache->set($key, CRM_Core_DAO::$_nullArray); + } } diff --git a/CRM/Civigiftaid/Utils/Contribution.php b/CRM/Civigiftaid/Utils/Contribution.php index fcc6b53..db525f5 100644 --- a/CRM/Civigiftaid/Utils/Contribution.php +++ b/CRM/Civigiftaid/Utils/Contribution.php @@ -423,6 +423,7 @@ public static function validateContributionToBatch(&$contributionIDs) { } } + CRM_Core_DAO::freeResult(); return array( count($contributionIDs), $contributionsAdded, diff --git a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl index dd47bcf..ed998fa 100644 --- a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl +++ b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl @@ -201,5 +201,6 @@
  • Related Contact's gift aid declaration does not cover the contribution date
  • - {$form.buttons.html} +
        {$form.buttons._qf_AddToBatch_next.html} {$form.buttons._qf_AddToBatch_back.html} {ts}Re Validate{/ts} +
    From 5ee03ac69055f2f6f1dfbde21b0539e1fa1d77b8 Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Wed, 2 Jan 2019 11:35:14 +0000 Subject: [PATCH 3/5] get rid of explicit revalidation button --- CRM/Civigiftaid/Form/Task/AddToBatch.php | 6 ++++-- templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CRM/Civigiftaid/Form/Task/AddToBatch.php b/CRM/Civigiftaid/Form/Task/AddToBatch.php index 8253af6..574b4f1 100644 --- a/CRM/Civigiftaid/Form/Task/AddToBatch.php +++ b/CRM/Civigiftaid/Form/Task/AddToBatch.php @@ -61,6 +61,10 @@ function preProcess() { } } list( $total, $added, $alreadyAdded, $notValid ) = $this->getValidationStats(); + if (in_array($this->controller->getButtonName(), array('_qf_AddToBatch_back', '_qf_AddToBatch_next'))) { + // reset the flag, so it's revalidated next time. + $this->set('processed', 0); + } $this->assign('selectedContributions', $total); $this->assign('totalAddedContributions', count($added)); @@ -120,8 +124,6 @@ function buildQuickForm() { $this->setDefaults($defaults); $this->addDefaultButtons(ts('Add to batch')); - $revalidateUrl = CRM_Utils_System::url(CRM_Utils_System::currentPath(), "_qf_AddToBatch_display=1&qfKey={$this->controller->_key}&processed=0", FALSE, NULL, FALSE); - $this->assign('revalidateURL', $revalidateUrl); } /** diff --git a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl index ed998fa..dd47bcf 100644 --- a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl +++ b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl @@ -201,6 +201,5 @@
  • Related Contact's gift aid declaration does not cover the contribution date
  • -
        {$form.buttons._qf_AddToBatch_next.html} {$form.buttons._qf_AddToBatch_back.html} {ts}Re Validate{/ts} -
    + {$form.buttons.html} From 2adaae6261f1f8b1fba4a949b863e82112ecb1f3 Mon Sep 17 00:00:00 2001 From: Deepak Srivastava Date: Wed, 2 Jan 2019 11:51:03 +0000 Subject: [PATCH 4/5] 1. use constant for batch limit, 2. re-ordering methods --- CRM/Civigiftaid/Form/Task/AddToBatch.php | 61 +++++++++++++----------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/CRM/Civigiftaid/Form/Task/AddToBatch.php b/CRM/Civigiftaid/Form/Task/AddToBatch.php index 574b4f1..af154fb 100644 --- a/CRM/Civigiftaid/Form/Task/AddToBatch.php +++ b/CRM/Civigiftaid/Form/Task/AddToBatch.php @@ -42,6 +42,8 @@ class CRM_Civigiftaid_Form_Task_AddToBatch extends CRM_Contribute_Form_Task { + const VALIDATION_QUEUE_BATCH_LIMIT = 10; + protected $_id = NULL; /** @@ -209,7 +211,7 @@ public function postProcess() { /** * Build a queue of tasks by dividing contributions in sets. */ - public function getRunner($contributionIds) { + function getRunner($contributionIds) { $queue = CRM_Queue_Service::singleton()->create(array( 'name' => 'ADD_TO_GIFTAID', 'type' => 'Sql', @@ -217,7 +219,7 @@ public function getRunner($contributionIds) { )); $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); $total = count($contributionIds); - $batchLimit = 10; + $batchLimit = self::VALIDATION_QUEUE_BATCH_LIMIT; for ($i = 0; $i < ceil($total/$batchLimit); $i++) { $start = $i * $batchLimit; $contribIds = array_slice($contributionIds, $start, $batchLimit, TRUE); @@ -242,6 +244,34 @@ public function getRunner($contributionIds) { return $runner; } + /** + * Get validation stats from cache. + * + * @return array + */ + function getValidationStats() { + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + $cache = self::getCache(); + $stats = $cache->get(self::getCacheKey($qfKey)); + return array( + empty($stats['total']) ? 0 : $stats['total'], + $stats['added'], + $stats['alreadyAdded'], + $stats['notValid'] + ); + } + + /** + * Reset validation stats for giftaid + * + * @return array + */ + static function resetValidationStats($qfKey) { + $cache = self::getCache(); + $key = self::getCacheKey($qfKey); + $cache->set($key, CRM_Core_DAO::$_nullArray); + } + /** * Carry out batch validations. * @@ -297,31 +327,4 @@ static function getCacheKey($qfKey) { return "civigiftaid_addtobatch_stats_{$qfKey}"; } - /** - * Get validation stats from cache. - * - * @return array - */ - public function getValidationStats() { - $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); - $cache = self::getCache(); - $stats = $cache->get(self::getCacheKey($qfKey)); - return array( - empty($stats['total']) ? 0 : $stats['total'], - $stats['added'], - $stats['alreadyAdded'], - $stats['notValid'] - ); - } - - /** - * Reset validation stats for giftaid - * - * @return array - */ - static function resetValidationStats($qfKey) { - $cache = self::getCache(); - $key = self::getCacheKey($qfKey); - $cache->set($key, CRM_Core_DAO::$_nullArray); - } } From 191e097a1b6bacbae06211953c0bbf7cac8ac2b8 Mon Sep 17 00:00:00 2001 From: krishgopi Date: Tue, 8 Jan 2019 18:05:44 +0000 Subject: [PATCH 5/5] Move listing of Add to Batch contribution records to a separate page to avoid the delay on Add-to-Batch form --- CRM/Civigiftaid/Form/Task/AddToBatch.php | 35 ++-- CRM/Civigiftaid/Page/AddToBatchSummary.php | 54 ++++++ .../CRM/Civigiftaid/Form/Task/AddToBatch.tpl | 179 ++++-------------- .../Civigiftaid/Page/AddToBatchSummary.tpl | 39 ++++ xml/Menu/civigiftaid.xml | 6 + 5 files changed, 155 insertions(+), 158 deletions(-) create mode 100644 CRM/Civigiftaid/Page/AddToBatchSummary.php create mode 100644 templates/CRM/Civigiftaid/Page/AddToBatchSummary.tpl diff --git a/CRM/Civigiftaid/Form/Task/AddToBatch.php b/CRM/Civigiftaid/Form/Task/AddToBatch.php index af154fb..7f153bf 100644 --- a/CRM/Civigiftaid/Form/Task/AddToBatch.php +++ b/CRM/Civigiftaid/Form/Task/AddToBatch.php @@ -73,25 +73,22 @@ function preProcess() { $this->assign('alreadyAddedContributions', count($alreadyAdded)); $this->assign('notValidContributions', count($notValid)); - // get details of contribution that will be added to this batch. - $contributionsAddedRows = - CRM_Civigiftaid_Utils_Contribution::getContributionDetails($added); - $this->assign('contributionsAddedRows', $contributionsAddedRows); - - // get details of contribution thatare already added to this batch. - $contributionsAlreadyAddedRows = array(); - $contributionsAlreadyAddedRows = - CRM_Civigiftaid_Utils_Contribution::getContributionDetails($alreadyAdded); - $this->assign( - 'contributionsAlreadyAddedRows', - $contributionsAlreadyAddedRows - ); + $qfKey = CRM_Utils_Request::retrieve('qfKey', 'String', $this); + + // URL to view contributions that will be added to this batch + $tobeAddedUrlParams = 'status=tobeadded&qfKey='.$qfKey; + $contributionsTobeAddedUrl = CRM_Utils_System::url('civicrm/addtobatch/summary', $tobeAddedUrlParams); + $this->assign('contributionsTobeAddedUrl', $contributionsTobeAddedUrl ); + + // URL to view contributions that are already added to this batch + $alreadyAddedUrlParams = 'status=alreadyadded&qfKey='.$qfKey; + $contributionsAlreadyAddedUrl = CRM_Utils_System::url('civicrm/addtobatch/summary', $alreadyAddedUrlParams); + $this->assign('contributionsAlreadyAddedUrl', $contributionsAlreadyAddedUrl ); - // get details of contribution that are not valid for giftaid - $contributionsNotValid = array(); - $contributionsNotValid = - CRM_Civigiftaid_Utils_Contribution::getContributionDetails($notValid); - $this->assign('contributionsNotValid', $contributionsNotValid); + // URL to view contributions that are not valid for giftaid + $invalidUrlParams = 'status=invalid&qfKey='.$qfKey; + $contributionsInvalidUrl = CRM_Utils_System::url('civicrm/addtobatch/summary', $invalidUrlParams); + $this->assign('contributionsInvalidUrl', $contributionsInvalidUrl ); } /** @@ -312,7 +309,7 @@ static function validateContributionToBatchLimit(CRM_Queue_TaskContext $ctx, $co * @return object CRM_Utils_Cache_SqlGroup */ static function getCache() { - $cache = new CRM_Utils_Cache_SqlGroup(array( + $cache = new CRM_Utils_Cache_SqlGroup(array( 'group' => 'Civigiftaid', )); return $cache; diff --git a/CRM/Civigiftaid/Page/AddToBatchSummary.php b/CRM/Civigiftaid/Page/AddToBatchSummary.php new file mode 100644 index 0000000..d32ff3f --- /dev/null +++ b/CRM/Civigiftaid/Page/AddToBatchSummary.php @@ -0,0 +1,54 @@ +assign('contributionsRows', $contributionsRows); + $this->assign('errorMessage', $errorMessage); + + parent::run(); + } + +} diff --git a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl index dd47bcf..718a2fd 100644 --- a/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl +++ b/templates/CRM/Civigiftaid/Form/Task/AddToBatch.tpl @@ -51,145 +51,46 @@

    {ts}Summary{/ts}

    -

    Number of selected contributions: {$selectedContributions}

    - - {if $totalAddedContributions} -
    -
    - Number of contributions that will be added to this batch: {$totalAddedContributions} -
    - -
    - - - - - - - - - - - - - {foreach from=$contributionsAddedRows item=row} - - - - - - - - - - - - - {/foreach} -
    {ts}Name{/ts}{ts}Gift Aidable Amount{/ts}{ts}Total Amount{/ts}{ts}No of items{/ts}{ts}Type{/ts}{ts}Source{/ts}{ts}Received{/ts}
    - {$row.display_name} - {$row.gift_aidable_amount}{$row.total_amount}{$row.line_items|@count}{$row.financial_account}{$row.source}{$row.receive_date}
    - {include file="CRM/Civigiftaid/Form/Task/LineItems.tpl" contributionId=$row.contribution_id} -
    -
    - -
    - - {else} - {include file="CRM/Civigiftaid/Form/Task/EmptyAccordion.tpl" content="Number of contributions that will be added to this batch: $totalAddedContributions"} - {/if} - {if $alreadyAddedContributions} -
    -
    - Number of contributions already in a batch: {$alreadyAddedContributions} -
    - -
    - - - - - - - - - - - - - - {foreach from=$contributionsAlreadyAddedRows item=row} - - - - - - - - - - - - - - {/foreach} -
    {ts}Name{/ts}{ts}Gift Aidable Amount{/ts}{ts}Total Amount{/ts}{ts}No of items{/ts}{ts}Type{/ts}{ts}Source{/ts}{ts}Received{/ts}{ts}Batch{/ts}
    - {$row.display_name} - {$row.gift_aidable_amount}{$row.total_amount}{$row.line_items|@count}{$row.financial_account}{$row.source}{$row.receive_date}{$row.batch}
    - {include file="CRM/Civigiftaid/Form/Task/LineItems.tpl" contributionId=$row.contribution_id} -
    -
    - -
    - - {else} - {include file="CRM/Civigiftaid/Form/Task/EmptyAccordion.tpl" content="Number of contributions already in a batch: $alreadyAddedContributions"} - {/if} - {if $notValidContributions} -
    -
    - Number of contributions not valid for gift aid: {$notValidContributions} -
    - -
    - - - - - - - - - - - - - {foreach from=$contributionsNotValid item=row} - - - - - - - - - - - - - {/foreach} -
    {ts}Name{/ts}{ts}Gift Aidable Amount{/ts}{ts}Total Amount{/ts}{ts}No of items{/ts}{ts}Type{/ts}{ts}Source{/ts}{ts}Received{/ts}
    - {$row.display_name} - {$row.gift_aidable_amount}{$row.total_amount}{$row.line_items|@count}{$row.financial_account}{$row.source}{$row.receive_date}
    - {include file="CRM/Civigiftaid/Form/Task/LineItems.tpl" contributionId=$row.contribution_id} -
    -
    - -
    - - {else} - {include file="CRM/Civigiftaid/Form/Task/EmptyAccordion.tpl" content="Number of contributions not valid for gift aid: $notValidContributions"} - {/if} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Number of selected contributions:{$selectedContributions}
    Number of contributions that will be added to this batch:{$totalAddedContributions} + {if $totalAddedContributions} + {ts}view contributions{/ts} + {/if} +
    Number of contributions already in a batch:{$alreadyAddedContributions} + {if $alreadyAddedContributions} + {ts}view contributions{/ts} + {/if} +
    Number of contributions not valid for gift aid:{$notValidContributions} + {if $notValidContributions} + {ts}view contributions{/ts} + {/if} +

    {ts}Use this form to submit Gift Aid contributions. Note that this action is irreversible, i.e. you cannot take contributions out of a batch once they have been added.{/ts}

    diff --git a/templates/CRM/Civigiftaid/Page/AddToBatchSummary.tpl b/templates/CRM/Civigiftaid/Page/AddToBatchSummary.tpl new file mode 100644 index 0000000..0242ee3 --- /dev/null +++ b/templates/CRM/Civigiftaid/Page/AddToBatchSummary.tpl @@ -0,0 +1,39 @@ +{if $errorMessage} +
    + {ts}{$errorMessage}{/ts} +
    +{else} + + + + + + + + + + + {foreach from=$contributionsRows item=row} + + + + + + + + {/foreach} +
    {ts}Name{/ts}{ts}Amount{/ts}{ts}Type{/ts}{ts}Source {/ts}{ts}Received{/ts}
    {$row.display_name}{$row.total_amount}{$row.financial_account}{$row.source}{$row.receive_date}
    +{/if} + +{literal} + +{/literal} \ No newline at end of file diff --git a/xml/Menu/civigiftaid.xml b/xml/Menu/civigiftaid.xml index d7ac255..8d35814 100644 --- a/xml/Menu/civigiftaid.xml +++ b/xml/Menu/civigiftaid.xml @@ -6,4 +6,10 @@ Admin access CiviCRM + + civicrm/addtobatch/summary + AddToBatchContributions + CRM_Civigiftaid_Page_AddToBatchSummary + access CiviContribute +