diff --git a/CRM/Admin/Form/Setting/BankingSettings.php b/CRM/Admin/Form/Setting/BankingSettings.php index 647d73cb..ac51f382 100644 --- a/CRM/Admin/Form/Setting/BankingSettings.php +++ b/CRM/Admin/Form/Setting/BankingSettings.php @@ -117,6 +117,13 @@ public function buildQuickForm() { 'positiveInteger' ); + // allow status reset on transactions + $this->add( + 'checkbox', + 'allow_trx_reset', + E::ts("Allow status reset on ignored transactions"), + ''); + // store bank accounts $this->add( 'checkbox', @@ -187,6 +194,7 @@ public function setDefaultValues() { $defaults['banking_log_level'] = Civi::settings()->get('banking_log_level'); $defaults['banking_log_file'] = Civi::settings()->get('banking_log_file'); $defaults[CRM_Banking_Config::SETTING_MAX_CONTACTS_ON_LOOKUP] = CRM_Banking_Config::getMaxContactsOnLookup(); + $defaults['allow_trx_reset'] = Civi::settings()->get('allow_trx_reset'); $defaults['reference_store_disabled'] = Civi::settings()->get('reference_store_disabled'); $defaults['reference_normalisation'] = Civi::settings()->get('reference_normalisation'); $defaults['recently_completed_cutoff'] = Civi::settings()->get('recently_completed_cutoff'); @@ -222,6 +230,9 @@ public function postProcess(): void { CRM_Core_BAO_Navigation::resetNavigation(); } + // allow trx status reset + Civi::settings()->set('allow_trx_reset', !empty($values['allow_trx_reset'])); + // process menu entry Civi::settings()->set('json_editor_mode', $values['json_editor_mode']); diff --git a/CRM/Banking/Page/Review.php b/CRM/Banking/Page/Review.php index fdb8420a..c3f1e20e 100755 --- a/CRM/Banking/Page/Review.php +++ b/CRM/Banking/Page/Review.php @@ -101,6 +101,9 @@ public function run() { } } + $allow_trx_reset = CRM_Core_BAO_Setting::getItem('CiviBanking', 'allow_trx_reset'); + $this->assign('allow_trx_reset', $allow_trx_reset); + // parse structured data $this->assign('btxstatus', $choices[$btx_bao->status_id]); $this->assign('payment', $btx_bao); diff --git a/api/v3/BankingTransaction.php b/api/v3/BankingTransaction.php index edfbcae3..648c7b94 100755 --- a/api/v3/BankingTransaction.php +++ b/api/v3/BankingTransaction.php @@ -23,6 +23,40 @@ * */ +/** + * Adjust Metadata for Reset action + * + * The metadata is used for setting defaults, documentation & validation + * @param array $params array or parameters determined by getfields + */ +function _civicrm_api3_banking_transaction_reset_spec(&$params) { + $params['trx_id'] = array( + 'title' => 'Transaction ID', + 'description' => 'The transaction ID to perform the status reset', + 'required' => TRUE, + 'type' => CRM_Utils_Type::T_INT, + ); +} + +/** + * civicrm_api3_banking_transaction_reset + * Resets a transaction's status into the status NEW + * Will also remove any suggestions stored into this transaction + * + * @param mixed $params + * @return void + */ +function civicrm_api3_banking_transaction_reset($params) { + // update the transaction + if (is_numeric($params['trx_id'])) { + // Get the status ID for new (not-analysed transaction) + $status_id_new = (int) banking_helper_optionvalueid_by_groupname_and_name('civicrm_banking.bank_tx_status', 'new'); + CRM_Core_DAO::executeQuery("UPDATE `civicrm_bank_tx` SET `status_id` = ({$status_id_new}), suggestions = NULL WHERE `id` = '{$params['trx_id']}'"); + return civicrm_api3_create_success('Status reset complete'); + } + +} + /** * Add an BankingTransaction for a contact * diff --git a/templates/CRM/Admin/Form/Setting/BankingSettings.tpl b/templates/CRM/Admin/Form/Setting/BankingSettings.tpl index d632b69f..a01d3af8 100644 --- a/templates/CRM/Admin/Form/Setting/BankingSettings.tpl +++ b/templates/CRM/Admin/Form/Setting/BankingSettings.tpl @@ -57,6 +57,12 @@
+