Export.php 5.82 KB
Newer Older
totten's avatar
totten committed
1 2 3
<?php
/*
 +--------------------------------------------------------------------+
Kurund Jalmi's avatar
Kurund Jalmi committed
4
 | CiviCRM version 4.7                                                |
totten's avatar
totten committed
5
 +--------------------------------------------------------------------+
yashodha's avatar
yashodha committed
6
 | Copyright CiviCRM LLC (c) 2004-2017                                |
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-2017
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 63
   */
  protected $_exportFormat;

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

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

        $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;
    }

Kurund Jalmi's avatar
Kurund Jalmi committed
92
    $allBatchStatus = CRM_Core_PseudoConstant::get('CRM_Batch_DAO_Batch', 'status_id');
totten's avatar
totten committed
93 94
    $this->_exportStatusId = CRM_Utils_Array::key('Exported', $allBatchStatus);

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

98
    foreach ($batchStatus as $batchStatusId) {
totten's avatar
totten committed
99
      if ($batchStatusId == $this->_exportStatusId) {
100 101
        $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
102 103 104 105 106
      }
    }

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

totten's avatar
totten committed
110
  /**
111
   * Build the form object.
totten's avatar
totten committed
112
   */
113
  public function buildQuickForm() {
totten's avatar
totten committed
114 115 116 117 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
    // 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'),
        ),
      )
    );
  }
146

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

    if ($this->_id) {
      $batchIds = array($this->_id);
    }
159
    elseif (!empty($this->_batchIds)) {
totten's avatar
totten committed
160 161 162 163 164 165 166 167 168 169 170
      $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;

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

    CRM_Batch_BAO_Batch::exportFinancialBatch($batchIds, $this->_exportFormat);
  }
180

totten's avatar
totten committed
181
}