/**
  * build all the data structures needed to build the form
  *
  * @return void
  * @access public
  */
 function preProcess()
 {
     //check for permission to edit contributions
     if (!CRM_Core_Permission::check('issue cdn tax receipts')) {
         CRM_Core_Error::fatal(ts('You do not have permission to access this page', array('domain' => 'org.civicrm.cdntaxreceipts')));
     }
     parent::preProcess();
     $thisYear = date("Y");
     $this->_years = array($thisYear, $thisYear - 1, $thisYear - 2);
     $receipts = array();
     foreach ($this->_years as $year) {
         $receipts[$year] = array('email' => 0, 'print' => 0, 'total' => 0, 'contrib' => 0);
     }
     // count and categorize contributions
     foreach ($this->_contactIds as $id) {
         foreach ($this->_years as $year) {
             list($issuedOn, $receiptId) = cdntaxreceipts_annual_issued_on($id, $year);
             $eligible = count(cdntaxreceipts_contributions_not_receipted($id, $year));
             if ($eligible > 0) {
                 list($method, $email) = cdntaxreceipts_sendMethodForContact($id);
                 $receipts[$year][$method]++;
                 $receipts[$year]['total']++;
                 $receipts[$year]['contrib'] += $eligible;
             }
         }
     }
     $this->_receipts = $receipts;
 }
예제 #2
0
 /**
  * build all the data structures needed to build the form
  *
  * @return void
  * @access public
  */
 function preProcess()
 {
     //check for permission to view contributions
     if (!CRM_Core_Permission::check('access CiviContribute')) {
         CRM_Core_Error::fatal(ts('You do not have permission to access this page'));
     }
     parent::preProcess();
     $contributionId = CRM_Utils_Array::value('id', $_GET);
     $contactId = CRM_Utils_Array::value('cid', $_GET);
     if (isset($contributionId) && isset($contactId)) {
         $this->set('contribution_id', $contributionId);
         $this->set('contact_id', $contactId);
     } else {
         $contributionId = $this->get('contribution_id');
         $contactId = $this->get('contact_id');
     }
     // might be callback to retrieve the downloadable PDF file
     $download = CRM_Utils_Array::value('download', $_GET);
     if ($download == 1) {
         $this->sendFile($contributionId, $contactId);
         // exits
     }
     list($issuedOn, $receiptId) = cdntaxreceipts_issued_on($contributionId);
     if (isset($receiptId)) {
         $existingReceipt = cdntaxreceipts_load_receipt($receiptId);
         $this->_reissue = 1;
         $this->_receipt = $existingReceipt;
     } else {
         $this->_reissue = 0;
     }
     list($method, $email) = cdntaxreceipts_sendMethodForContact($contactId);
     $this->_method = $method;
     if ($method == 'email') {
         $this->_sendTarget = $email;
     }
     // may need to offer a PDF file for download, if returning from form submission.
     // this sets up the form with proper JS to download the file, it doesn't actually send the file.
     // see ?download=1 for sending the file.
     $pdfDownload = CRM_Utils_Array::value('file', $_GET);
     if ($pdfDownload == 1) {
         $this->_pdfFile = 1;
     }
 }
 /**
  * build all the data structures needed to build the form
  *
  * @return void
  * @access public
  */
 function preProcess()
 {
     //check for permission to edit contributions
     if (!CRM_Core_Permission::check('issue cdn tax receipts')) {
         CRM_Core_Error::fatal(ts('You do not have permission to access this page', array('domain' => 'org.civicrm.cdntaxreceipts')));
     }
     parent::preProcess();
     $this->_contributions_status = array();
     $this->_issue_type = array('original', 'duplicate');
     $this->_receipts = array();
     $this->_years = array();
     $receipts = array('totals' => array('total_contrib' => 0, 'loading_errors' => 0, 'total_contacts' => 0, 'original' => 0, 'duplicate' => 0));
     $this->_contributions_status = cdntaxreceipts_contributions_get_status($this->_contributionIds);
     // Get the number of years selected
     foreach ($this->_contributions_status as $contrib_status) {
         $this->_years[$contrib_status['receive_year']] = $contrib_status['receive_year'];
     }
     foreach ($this->_years as $year) {
         foreach ($this->_issue_type as $issue_type) {
             $receipts[$issue_type][$year] = array('total_contrib' => 0, 'total_amount' => 0, 'email' => array('contribution_count' => 0, 'receipt_count' => 0), 'print' => array('contribution_count' => 0, 'receipt_count' => 0), 'total_contacts' => 0, 'total_eligible_amount' => 0, 'not_eligible' => 0, 'not_eligible_amount' => 0, 'contact_ids' => array());
         }
     }
     // Count and categorize contributions
     foreach ($this->_contributionIds as $id) {
         $status = isset($this->_contributions_status[$id]) ? $this->_contributions_status[$id] : NULL;
         if (is_array($status)) {
             $year = $status['receive_year'];
             $issue_type = empty($status['receipt_id']) ? 'original' : 'duplicate';
             $receipts[$issue_type][$year]['total_contrib']++;
             // Note: non-deductible amount has already had hook called in cdntaxreceipts_contributions_get_status
             $receipts[$issue_type][$year]['total_amount'] += $status['total_amount'];
             $receipts[$issue_type][$year]['not_eligible_amount'] += $status['non_deductible_amount'];
             if ($status['eligible']) {
                 list($method, $email) = cdntaxreceipts_sendMethodForContact($status['contact_id']);
                 $receipts[$issue_type][$year][$method]['contribution_count']++;
                 if (!isset($receipts[$issue_type][$year]['contact_ids'][$status['contact_id']])) {
                     $receipts[$issue_type][$year]['contact_ids'][$status['contact_id']] = array('issue_method' => $method, 'contributions' => array());
                     $receipts[$issue_type][$year][$method]['receipt_count']++;
                 }
                 // Here we store all the contribution details for each contact_id
                 $receipts[$issue_type][$year]['contact_ids'][$status['contact_id']]['contributions'][$id] = $status;
             } else {
                 $receipts[$issue_type][$year]['not_eligible']++;
                 // $receipts[$issue_type][$year]['not_eligible_amount'] += $status['total_amount'];
             }
             // Global totals
             $receipts['totals']['total_contrib']++;
             $receipts['totals'][$issue_type]++;
             if ($status['contact_id']) {
                 $receipts['totals']['total_contacts']++;
             }
         } else {
             $receipts['loading_errors']++;
         }
     }
     foreach ($this->_issue_type as $issue_type) {
         foreach ($this->_years as $year) {
             $receipts[$issue_type][$year]['total_contacts'] = count($receipts[$issue_type][$year]['contact_ids']);
         }
     }
     $this->_receipts = $receipts;
 }