Export.php 5.86 KB
Newer Older
totten's avatar
totten committed
1 2 3
<?php
/*
 +--------------------------------------------------------------------+
totten's avatar
totten committed
4
 | CiviCRM version 5                                                  |
totten's avatar
totten committed
5
 +--------------------------------------------------------------------+
yashodha's avatar
yashodha committed
6
 | Copyright CiviCRM LLC (c) 2004-2018                                |
totten's avatar
totten committed
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 +--------------------------------------------------------------------+
 | This file is a part of CiviCRM.                                    |
 |                                                                    |
 | CiviCRM is free software; you can copy, modify, and distribute it  |
 | under the terms of the GNU Affero General Public License           |
 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception.   |
 |                                                                    |
 | CiviCRM is distributed in the hope that it will be useful, but     |
 | WITHOUT ANY WARRANTY; without even the implied warranty of         |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               |
 | See the GNU Affero General Public License for more details.        |
 |                                                                    |
 | You should have received a copy of the GNU Affero General Public   |
 | License and the CiviCRM Licensing Exception along                  |
 | with this program; if not, contact CiviCRM LLC                     |
 | at info[AT]civicrm[DOT]org. If you have questions about the        |
 | GNU Affero General Public License or the licensing of CiviCRM,     |
 | see the CiviCRM license FAQ at http://civicrm.org/licensing        |
 +--------------------------------------------------------------------+
26
 */
totten's avatar
totten committed
27 28 29 30

/**
 *
 * @package CRM
yashodha's avatar
yashodha committed
31
 * @copyright CiviCRM LLC (c) 2004-2018
totten's avatar
totten committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
 */

/**
 * This class provides the functionality to delete a group of
 * contributions. This class provides functionality for the actual
 * deletion.
 */
class CRM_Financial_Form_Export extends CRM_Core_Form {

  /**
   * The financial batch id, used when editing the field
   *
   * @var int
   */
  protected $_id;

  /**
49
   * Financial batch ids.
totten's avatar
totten committed
50 51 52 53
   */
  protected $_batchIds = array();

  /**
54
   * Export status id.
totten's avatar
totten committed
55 56 57 58
   */
  protected $_exportStatusId;

  /**
59
   * Export format.
totten's avatar
totten committed
60 61 62
   */
  protected $_exportFormat;

63 64 65 66 67
  /**
   * Download export File.
   */
  protected $_downloadFile = TRUE;

totten's avatar
totten committed
68
  /**
69
   * Build all the data structures needed to build the form.
totten's avatar
totten committed
70
   */
71
  public function preProcess() {
totten's avatar
totten committed
72 73 74
    $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);

    // this mean it's a batch action
75
    if (!$this->_id) {
totten's avatar
totten committed
76
      if (!empty($_GET['batch_id'])) {
77
        // validate batch ids
totten's avatar
totten committed
78
        $batchIds = explode(',', $_GET['batch_id']);
79
        foreach ($batchIds as $batchId) {
totten's avatar
totten committed
80
          CRM_Utils_Type::validate($batchId, 'Positive');
totten's avatar
totten committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
        }

        $this->_batchIds = $_GET['batch_id'];
        $this->set('batchIds', $this->_batchIds);
      }
      else {
        $this->_batchIds = $this->get('batchIds');
      }
      if (!empty($_GET['export_format']) && in_array($_GET['export_format'], array('IIF', 'CSV'))) {
        $this->_exportFormat = $_GET['export_format'];
      }
    }
    else {
      $this->_batchIds = $this->_id;
    }

97
    $this->_exportStatusId = CRM_Core_PseudoConstant::getKey('CRM_Batch_DAO_Batch', 'status_id', 'Exported');
totten's avatar
totten committed
98

99
    // check if batch status is valid, do not allow exported batches to export again
totten's avatar
totten committed
100 101
    $batchStatus = CRM_Batch_BAO_Batch::getBatchStatuses($this->_batchIds);

102
    foreach ($batchStatus as $batchStatusId) {
totten's avatar
totten committed
103
      if ($batchStatusId == $this->_exportStatusId) {
104 105
        $url = CRM_Core_Session::singleton()->readUserContext();
        CRM_Core_Error::statusBounce(ts('You cannot export batches which have already been exported.'), $url);
totten's avatar
totten committed
106 107 108 109 110
      }
    }

    $session = CRM_Core_Session::singleton();
    $session->replaceUserContext(CRM_Utils_System::url('civicrm/financial/financialbatches',
111
      "reset=1&batchStatus={$this->_exportStatusId}"));
totten's avatar
totten committed
112
  }
113

totten's avatar
totten committed
114
  /**
115
   * Build the form object.
totten's avatar
totten committed
116
   */
117
  public function buildQuickForm() {
totten's avatar
totten committed
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
    // this mean it's a batch action
    if (!empty($this->_batchIds)) {
      $batchNames = CRM_Batch_BAO_Batch::getBatchNames($this->_batchIds);
      $this->assign('batchNames', $batchNames);
      // Skip building the form if we already have batches and an export format
      if ($this->_exportFormat) {
        $this->postProcess();
      }
    }

    $optionTypes = array(
      'IIF' => ts('Export to IIF'),
      'CSV' => ts('Export to CSV'),
    );

    $this->addRadio('export_format', NULL, $optionTypes, NULL, '<br/>', TRUE);

    $this->addButtons(
      array(
        array(
          'type' => 'next',
          'name' => ts('Export Batch'),
          'spacing' => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
          'isDefault' => TRUE,
        ),
        array(
          'type' => 'cancel',
          'name' => ts('Cancel'),
        ),
      )
    );
  }
150

totten's avatar
totten committed
151
  /**
152
   * Process the form after the input has been submitted and validated.
totten's avatar
totten committed
153
   */
totten's avatar
totten committed
154
  public function postProcess() {
totten's avatar
totten committed
155 156 157 158 159 160 161 162
    if (!$this->_exportFormat) {
      $params = $this->exportValues();
      $this->_exportFormat = $params['export_format'];
    }

    if ($this->_id) {
      $batchIds = array($this->_id);
    }
163
    elseif (!empty($this->_batchIds)) {
totten's avatar
totten committed
164 165 166 167 168 169 170 171 172 173 174
      $batchIds = explode(',', $this->_batchIds);
    }
    // Recalculate totals
    $totals = CRM_Batch_BAO_Batch::batchTotals($batchIds);

    // build batch params
    $session = CRM_Core_Session::singleton();
    $batchParams['modified_date'] = date('YmdHis');
    $batchParams['modified_id'] = $session->get('userID');
    $batchParams['status_id'] = $this->_exportStatusId;

175
    foreach ($batchIds as $batchId) {
Pradeep Nayak's avatar
Pradeep Nayak committed
176
      $batchParams['id'] = $batchId;
totten's avatar
totten committed
177 178
      // Update totals
      $batchParams = array_merge($batchParams, $totals[$batchId]);
Pradeep Nayak's avatar
Pradeep Nayak committed
179
      CRM_Batch_BAO_Batch::create($batchParams);
totten's avatar
totten committed
180 181
    }

182
    CRM_Batch_BAO_Batch::exportFinancialBatch($batchIds, $this->_exportFormat, $this->_downloadFile);
totten's avatar
totten committed
183
  }
184

totten's avatar
totten committed
185
}