static function isEligibleForGiftAid($contactID, $date = null, $contributionID = null)
 {
     $declaration = self::getDeclaration($contactID, $date, $contributionID);
     $isEligible = $declaration['eligible_for_direct_debit'] == 1;
     // hook can alter the eligibility if needed
     DirectDebit_Utils_Hook::giftAidEligible($isEligible, $contactID, $date, $contributionID);
     return $isEligible;
 }
 /**
  * Given an array of contributionIDs, add them to a batch
  *
  * @param array  $contributionIDs (reference ) the array of contribution ids to be added
  * @param int    $batchID - the batchID to be added to
  *
  * @return array             (total, added, notAdded) ids of contributions added to the batch
  * @access public
  * @static
  */
 static function addContributionToBatch($contributionIDs, $batchID)
 {
     $date = date('YmdHis');
     $contributionsAdded = array();
     $contributionsNotAdded = array();
     require_once "DirectDebit/Utils/DirectDebit.php";
     require_once "CRM/Contribute/BAO/Contribution.php";
     require_once 'CRM/Core/DAO/EntityBatch.php';
     require_once "CRM/Core/BAO/Address.php";
     require_once "CRM/Contact/BAO/Contact.php";
     require_once "CRM/Utils/Address.php";
     foreach ($contributionIDs as $contributionID) {
         $batchContribution =& new CRM_Core_DAO_EntityBatch();
         $batchContribution->entity_table = 'civicrm_contribution';
         $batchContribution->entity_id = $contributionID;
         // check if the selected contribution id already in a batch
         // if not, add to batchContribution else keep the count of contributions that are not added
         if ($batchContribution->find(true)) {
             $contributionsNotAdded[] = $contributionID;
             continue;
         }
         // get additional info
         // get contribution details from Contribution using contribution id
         $params = array('id' => $contributionID);
         CRM_Contribute_BAO_Contribution::retrieve($params, $contribution, $ids);
         $contactId = $contribution['contact_id'];
         // check if contribution is valid for gift aid
         if (DirectDebit_Utils_DirectDebit::isEligibleForGiftAid($contactId, $contribution['receive_date'], $contributionID)) {
             $batchContribution->batch_id = $batchID;
             $batchContribution->save();
             // get display name
             $displayName = CRM_Contact_BAO_Contact::displayName($contactId);
             // get Address & Postal Code from Address
             $params = array('contact_id' => $contactId, 'is_primary' => 1);
             $address = CRM_Core_BAO_Address::getValues($params);
             $address = $address[1];
             //adds all address lines to the report
             $fullFormatedAddress = CRM_Utils_Address::format($address);
             // Use addslashes function to avoid error of the fields have single quotes
             $displayName = addslashes($displayName);
             $fullFormatedAddress = addslashes($fullFormatedAddress);
             $address['postal_code'] = addslashes($address['postal_code']);
             // FIXME: check if there is customTable method
             //$query = "INSERT INTO civicrm_value_direct_debit_details
             //          (entity_id, name, address, post_code, amount)
             //          VALUES ({$contributionID}, '{$displayName}', '{$fullFormatedAddress}', '{$address['postal_code']}', {$contribution['total_amount']})
             //          ON DUPLICATE KEY UPDATE name = '{$displayName}' , address = '{$fullFormatedAddress}' , post_code = '{$address['postal_code']}' , amount = '{$contribution['total_amount']}'";
             $query = "UPDATE civicrm_value_direct_debit_details SET added_to_direct_debit = 1 WHERE entity_id = '{$contributionID}'";
             CRM_Core_DAO::executeQuery($query);
             $contributionsAdded[] = $contributionID;
         } else {
             $contributionsNotAdded[] = $contributionID;
         }
     }
     if (!empty($contributionsAdded)) {
         // if there is any extra work required to be done for contributions that are batched,
         // should be done via hook
         DirectDebit_Utils_Hook::batchContributions($batchID, $contributionsAdded);
     }
     return array(count($contributionIDs), count($contributionsAdded), count($contributionsNotAdded));
 }