All Data Structures Functions Variables Pages
ReportToExportAdapter.php
1 <?php
2  /*********************************************************************************
3  * Zurmo is a customer relationship management program developed by
4  * Zurmo, Inc. Copyright (C) 2017 Zurmo Inc.
5  *
6  * Zurmo is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY ZURMO, ZURMO DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  *
13  * Zurmo is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  *
23  * You can contact Zurmo, Inc. with a mailing address at 27 North Wacker Drive
24  * Suite 370 Chicago, IL 60606. or at email address contact@zurmo.com.
25  *
26  * The interactive user interfaces in original and modified versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  *
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the Zurmo
32  * logo and Zurmo copyright notice. If the display of the logo is not reasonably
33  * feasible for technical reasons, the Appropriate Legal Notices must display the words
34  * "Copyright Zurmo Inc. 2017. All rights reserved".
35  ********************************************************************************/
36 
40  abstract class ReportToExportAdapter
41  {
42  protected $dataProvider;
43 
44  protected $dataForExport;
45 
46  protected $dataForGrandTotals;
47 
48  protected $headerData;
49 
50  protected $data;
51 
52  protected $report;
53 
54  public function __construct(ReportDataProvider $dataProvider, Report $report)
55  {
56  $this->dataProvider = $dataProvider;
57  $this->report = $report;
58  $this->dataForExport = $dataProvider->getData(true);
59  $grandTotalsRows = $dataProvider->runQueryAndGrandTotalsData();
60  $this->dataForGrandTotals = $grandTotalsRows[0];
61  $this->makeData();
62  }
63 
64  public function getData()
65  {
66  return $this->data;
67  }
68 
69  public function getHeaderData()
70  {
71  return $this->headerData;
72  }
73 
77  protected function makeData()
78  {
79  $isFirstRow = true;
80  $grandTotalsData = array();
81  foreach ($this->dataForExport as $reportResultsRowData)
82  {
83  $data = array();
84  $this->headerData = array();
85  $isFirstColumn = true;
86  foreach ($reportResultsRowData->getDisplayAttributes() as $key => $displayAttribute)
87  {
88  $resolvedAttributeName = $displayAttribute->resolveAttributeNameForGridViewColumn($key);
89  $className = $this->resolveExportClassNameForReportToExportValueAdapter($displayAttribute);
90  $params = array('label' => $displayAttribute->label);
91  $this->resolveParamsForCurrencyTypes($displayAttribute, $params);
92  $this->resolveParamsForGrandTotals($displayAttribute, $params, $isFirstRow, $isFirstColumn);
93  $adapter = new $className($reportResultsRowData, $resolvedAttributeName, $params);
94  $adapter->resolveData($data);
95  $adapter->resolveHeaderData($this->headerData);
96  if ($isFirstRow)
97  {
98  $adapter->resolveGrandTotalsData($grandTotalsData);
99  }
100  $isFirstColumn = false;
101  }
102  $isFirstRow = false;
103  $this->data[] = $data;
104  }
105  if (isset($this->dataForGrandTotals))
106  {
107  $this->data[] = $grandTotalsData;
108  }
109  }
110 
116  {
117  $displayElementType = $displayAttribute->getDisplayElementType();
118  if (@class_exists($displayElementType . 'ForReportToExportValueAdapter'))
119  {
120  return $displayElementType . 'ForReportToExportValueAdapter';
121  }
122  else
123  {
124  return $displayElementType . 'RedBeanModelAttributeValueToExportValueAdapter';
125  }
126  }
127 
132  protected function resolveParamsForCurrencyTypes(DisplayAttributeForReportForm $displayAttribute, & $params)
133  {
134  assert('is_array($params)');
135  if ($displayAttribute->isATypeOfCurrencyValue())
136  {
137  $params['currencyValueConversionType'] = $this->report->getCurrencyConversionType();
138  $params['spotConversionCurrencyCode'] = $this->report->getSpotConversionCurrencyCode();
139  $params['fromBaseToSpotRate'] = $this->report->getFromBaseToSpotRate();
140  }
141  }
142 
143  protected function resolveParamsForGrandTotals(DisplayAttributeForReportForm $displayAttribute, & $params, $isFirstRow, $isFirstColumn)
144  {
145  $grandTotal = null;
146  if (isset($this->dataForGrandTotals) && $isFirstColumn && $isFirstRow)
147  {
148  $grandTotal = Zurmo::t('Core', 'Total');
149  }
150  if (isset($this->dataForGrandTotals[$displayAttribute->columnAliasName]) && !$isFirstColumn && $isFirstRow)
151  {
152  $grandTotal = $this->dataForGrandTotals[$displayAttribute->columnAliasName];
153  }
154  if (isset($grandTotal))
155  {
156  $params['grandTotal'] = $grandTotal;
157  }
158  }
159  }
160 ?>
getData($refresh=false)
resolveParamsForCurrencyTypes(DisplayAttributeForReportForm $displayAttribute, &$params)
resolveExportClassNameForReportToExportValueAdapter(DisplayAttributeForReportForm $displayAttribute)
Generated on Fri Jun 5 2020 07:10:34