Merge pull request #21590 from totten/master-msgtplui
[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 * @var array
35 */
36 protected $_batchIds = [];
37
38 /**
39 * Export status id.
40 * @var int
41 */
42 protected $_exportStatusId;
43
44 /**
45 * Export format.
46 * @var string
47 */
48 protected $_exportFormat;
49
50 /**
51 * Download export File.
52 * @var bool
53 */
54 protected $_downloadFile = TRUE;
55
56 /**
57 * Build all the data structures needed to build the form.
58 */
59 public function preProcess() {
60 $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);
61
62 // this mean it's a batch action
63 if (!$this->_id) {
64 if (!empty($_GET['batch_id'])) {
65 // validate batch ids
66 $batchIds = explode(',', $_GET['batch_id']);
67 foreach ($batchIds as $batchId) {
68 CRM_Utils_Type::validate($batchId, 'Positive');
69 }
70
71 $this->_batchIds = $_GET['batch_id'];
72 $this->set('batchIds', $this->_batchIds);
73 }
74 else {
75 $this->_batchIds = $this->get('batchIds');
76 }
77 if (!empty($_GET['export_format']) && in_array($_GET['export_format'], ['IIF', 'CSV'])) {
78 $this->_exportFormat = $_GET['export_format'];
79 }
80 }
81 else {
82 $this->_batchIds = $this->_id;
83 }
84
85 $this->_exportStatusId = CRM_Core_PseudoConstant::getKey('CRM_Batch_DAO_Batch', 'status_id', 'Exported');
86
87 // check if batch status is valid, do not allow exported batches to export again
88 $batchStatus = CRM_Batch_BAO_Batch::getBatchStatuses($this->_batchIds);
89
90 foreach ($batchStatus as $batchStatusId) {
91 if ($batchStatusId == $this->_exportStatusId) {
92 $url = CRM_Core_Session::singleton()->readUserContext();
93 CRM_Core_Error::statusBounce(ts('You cannot export batches which have already been exported.'), $url);
94 }
95 }
96
97 $session = CRM_Core_Session::singleton();
98 $session->replaceUserContext(CRM_Utils_System::url('civicrm/financial/financialbatches',
99 "reset=1&batchStatus={$this->_exportStatusId}"));
100 }
101
102 /**
103 * Build the form object.
104 */
105 public function buildQuickForm() {
106 // this mean it's a batch action
107 if (!empty($this->_batchIds)) {
108 $batchNames = CRM_Batch_BAO_Batch::getBatchNames($this->_batchIds);
109 $this->assign('batchNames', $batchNames);
110 // Skip building the form if we already have batches and an export format
111 if ($this->_exportFormat) {
112 $this->postProcess();
113 }
114 }
115
116 $optionTypes = [
117 'IIF' => ts('Export to IIF'),
118 'CSV' => ts('Export to CSV'),
119 ];
120
121 $this->addRadio('export_format', NULL, $optionTypes, NULL, '<br/>', TRUE);
122
123 $this->addButtons(
124 [
125 [
126 'type' => 'next',
127 'name' => ts('Export Batch'),
128 'spacing' => '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;',
129 'isDefault' => TRUE,
130 ],
131 [
132 'type' => 'cancel',
133 'name' => ts('Cancel'),
134 ],
135 ]
136 );
137 }
138
139 /**
140 * Process the form after the input has been submitted and validated.
141 */
142 public function postProcess() {
143 if (!$this->_exportFormat) {
144 $params = $this->exportValues();
145 $this->_exportFormat = $params['export_format'];
146 }
147
148 if ($this->_id) {
149 $batchIds = [$this->_id];
150 }
151 elseif (!empty($this->_batchIds)) {
152 $batchIds = explode(',', $this->_batchIds);
153 }
154 // Recalculate totals
155 $totals = CRM_Batch_BAO_Batch::batchTotals($batchIds);
156
157 // build batch params
158 $session = CRM_Core_Session::singleton();
159 $batchParams['modified_date'] = date('YmdHis');
160 $batchParams['modified_id'] = $session->get('userID');
161 $batchParams['status_id'] = $this->_exportStatusId;
162
163 foreach ($batchIds as $batchId) {
164 $batchParams['id'] = $batchId;
165 // Update totals
166 $batchParams = array_merge($batchParams, $totals[$batchId]);
167 CRM_Batch_BAO_Batch::create($batchParams);
168 }
169
170 CRM_Batch_BAO_Batch::exportFinancialBatch($batchIds, $this->_exportFormat, $this->_downloadFile);
171 }
172
173 }