Revert "Schema - Fix boolean fields in various tables"
[civicrm-core.git] / CRM / Financial / Form / Export.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 *
14 * @package CRM
15 * @copyright CiviCRM LLC https://civicrm.org/licensing
16 */
17
18 /**
19 * This class provides the functionality to delete a group of
20 * contributions. This class provides functionality for the actual
21 * deletion.
22 */
23 class CRM_Financial_Form_Export extends CRM_Core_Form {
24
25 /**
26 * The financial batch id, used when editing the field
27 *
28 * @var int
29 */
30 protected $_id;
31
32 /**
33 * Financial batch ids.
34 * (comma-separated array)
35 *
36 * @var string
37 */
38 protected $_batchIds = '';
39
40 /**
41 * Export status id.
42 * @var int
43 */
44 protected $_exportStatusId;
45
46 /**
47 * Export format.
48 * @var string
49 */
50 protected $_exportFormat;
51
52 /**
53 * Download export File.
54 * @var bool
55 */
56 protected $_downloadFile = TRUE;
57
58 /**
59 * Build all the data structures needed to build the form.
60 */
61 public function preProcess() {
62 $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);
63
64 // this mean it's a batch action
65 if (!$this->_id) {
66 if (!empty($_GET['batch_id'])) {
67 // validate batch ids
68 $batchIds = explode(',', $_GET['batch_id']);
69 foreach ($batchIds as $batchId) {
70 CRM_Utils_Type::validate($batchId, 'Positive');
71 }
72
73 $this->_batchIds = $_GET['batch_id'];
74 $this->set('batchIds', $this->_batchIds);
75 }
76 else {
77 $this->_batchIds = $this->get('batchIds');
78 }
79 if (!empty($_GET['export_format']) && in_array($_GET['export_format'], ['IIF', 'CSV'])) {
80 $this->_exportFormat = $_GET['export_format'];
81 }
82 }
83 else {
84 $this->_batchIds = $this->_id;
85 }
86
87 $this->_exportStatusId = CRM_Core_PseudoConstant::getKey('CRM_Batch_DAO_Batch', 'status_id', 'Exported');
88
89 // check if batch status is valid, do not allow exported batches to export again
90 $batchStatus = CRM_Batch_BAO_Batch::getBatchStatuses($this->_batchIds);
91
92 foreach ($batchStatus as $batchStatusId) {
93 if ($batchStatusId == $this->_exportStatusId) {
94 $url = CRM_Core_Session::singleton()->readUserContext();
95 CRM_Core_Error::statusBounce(ts('You cannot export batches which have already been exported.'), $url);
96 }
97 }
98
99 $session = CRM_Core_Session::singleton();
100 $session->replaceUserContext(CRM_Utils_System::url('civicrm/financial/financialbatches',
101 "reset=1&batchStatus={$this->_exportStatusId}"));
102 }
103
104 /**
105 * Build the form object.
106 */
107 public function buildQuickForm() {
108 // this mean it's a batch action
109 if (!empty($this->_batchIds)) {
110 $batchNames = CRM_Batch_BAO_Batch::getBatchNames($this->_batchIds);
111 $this->assign('batchNames', $batchNames);
112 // Skip building the form if we already have batches and an export format
113 if ($this->_exportFormat) {
114 $this->postProcess();
115 }
116 }
117
118 $optionTypes = [
119 'IIF' => ts('Export to IIF'),
120 'CSV' => ts('Export to CSV'),
121 ];
122
123 $this->addRadio('export_format', NULL, $optionTypes, NULL, '<br/>', TRUE);
124
125 $this->addButtons(
126 [
127 [
128 'type' => 'next',
129 'name' => ts('Export Batch'),
130 'spacing' => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
131 'isDefault' => TRUE,
132 ],
133 [
134 'type' => 'cancel',
135 'name' => ts('Cancel'),
136 ],
137 ]
138 );
139 }
140
141 /**
142 * Process the form after the input has been submitted and validated.
143 */
144 public function postProcess() {
145 if (!$this->_exportFormat) {
146 $params = $this->exportValues();
147 $this->_exportFormat = $params['export_format'];
148 }
149
150 if ($this->_id) {
151 $batchIds = [$this->_id];
152 }
153 elseif (!empty($this->_batchIds)) {
154 $batchIds = explode(',', $this->_batchIds);
155 }
156 // Recalculate totals
157 $totals = CRM_Batch_BAO_Batch::batchTotals($batchIds);
158
159 // build batch params
160 $session = CRM_Core_Session::singleton();
161 $batchParams['modified_date'] = date('YmdHis');
162 $batchParams['modified_id'] = $session->get('userID');
163 $batchParams['status_id'] = $this->_exportStatusId;
164
165 foreach ($batchIds as $batchId) {
166 $batchParams['id'] = $batchId;
167 // Update totals
168 $batchParams = array_merge($batchParams, $totals[$batchId]);
169 CRM_Batch_BAO_Batch::create($batchParams);
170 }
171
172 CRM_Batch_BAO_Batch::exportFinancialBatch($batchIds, $this->_exportFormat, $this->_downloadFile);
173 }
174
175 }