Vtrio - Version 1.0.0

Version Notes

First stable version

Download this release

Release Info

Developer BrainSINS
Extension Vtrio
Version 1.0.0
Comparing to
See all releases


Code changes from version 0.1.0 to 1.0.0

app/code/community/Vtrio/CustomReports/Helper/Data.php CHANGED
@@ -13,9 +13,7 @@ class Vtrio_CustomReports_Helper_Data extends Mage_Core_Helper_Abstract
13
 
14
  public function exportReportToCSV($reportArr,$report_period)
15
  {
16
-
17
- $headers = array('Period', 'Product Name', 'SKU', 'Total Price', 'Quantity Ordered');
18
-
19
  $fp = fopen('php://output', 'w');
20
  if ($fp && $reportArr) {
21
  //echo "in";
@@ -24,12 +22,12 @@ class Vtrio_CustomReports_Helper_Data extends Mage_Core_Helper_Abstract
24
  header('Pragma: no-cache');
25
  header('Expires: 0');
26
  fputcsv($fp, $headers);
27
-
28
  foreach ($reportArr as $arr_row) {
29
  $values = array();
30
-
31
  $totalQty = $totalQty+$arr_row['qty_ordered'];
32
  $totalPrice = $totalPrice+$arr_row['price'];
 
 
33
  if($report_period == 'month'){
34
  $dateVal1 = explode("-",$arr_row['created_at']);
35
  $createdDate = $dateVal1[1]."/".$dateVal1[0];
@@ -40,11 +38,9 @@ class Vtrio_CustomReports_Helper_Data extends Mage_Core_Helper_Abstract
40
  $date = date_create($arr_row['created_at']);
41
  $createdDate = date_format($date,"M d, Y");
42
  }
43
-
44
- array_push($values,$createdDate,$arr_row['name'],$arr_row['sku'],number_format($arr_row['price'], 2, '.', ''),number_format($arr_row['qty_ordered'], 2, '.', ''));
45
  fputcsv($fp, $values);
46
  }
47
-
48
  $values = array();
49
  array_push($values,'','','','','');
50
  fputcsv($fp, $values);
@@ -52,12 +48,19 @@ class Vtrio_CustomReports_Helper_Data extends Mage_Core_Helper_Abstract
52
  array_push($values,'','Total','',number_format($totalPrice, 2, '.', ''),number_format($totalQty, 2, '.', ''));
53
  fputcsv($fp, $values);
54
 
 
 
55
  die;
 
56
  }
 
57
  else {
 
58
  echo "no result";
 
59
  }
60
- }
 
61
 
62
  public function nestedSubCategory($subcatId,$space,$selectedId = null)
63
  {
13
 
14
  public function exportReportToCSV($reportArr,$report_period)
15
  {
16
+ $headers = array('Period', 'Product Name', 'SKU', 'Total Price', 'Quantity Ordered', 'Billing Address', 'Shipping Address');
 
 
17
  $fp = fopen('php://output', 'w');
18
  if ($fp && $reportArr) {
19
  //echo "in";
22
  header('Pragma: no-cache');
23
  header('Expires: 0');
24
  fputcsv($fp, $headers);
 
25
  foreach ($reportArr as $arr_row) {
26
  $values = array();
 
27
  $totalQty = $totalQty+$arr_row['qty_ordered'];
28
  $totalPrice = $totalPrice+$arr_row['price'];
29
+ $shippingAddr = $arr_row['shipping_address'];
30
+ $billingAddr = $arr_row['billing_address'];
31
  if($report_period == 'month'){
32
  $dateVal1 = explode("-",$arr_row['created_at']);
33
  $createdDate = $dateVal1[1]."/".$dateVal1[0];
38
  $date = date_create($arr_row['created_at']);
39
  $createdDate = date_format($date,"M d, Y");
40
  }
41
+ array_push($values,$createdDate,$arr_row['name'],$arr_row['sku'],number_format($arr_row['price'], 2, '.', ''),number_format($arr_row['qty_ordered'], 2, '.', ''),$billingAddr,$shippingAddr);
 
42
  fputcsv($fp, $values);
43
  }
 
44
  $values = array();
45
  array_push($values,'','','','','');
46
  fputcsv($fp, $values);
48
  array_push($values,'','Total','',number_format($totalPrice, 2, '.', ''),number_format($totalQty, 2, '.', ''));
49
  fputcsv($fp, $values);
50
 
51
+
52
+
53
  die;
54
+
55
  }
56
+
57
  else {
58
+
59
  echo "no result";
60
+
61
  }
62
+
63
+ }
64
 
65
  public function nestedSubCategory($subcatId,$space,$selectedId = null)
66
  {
app/code/community/Vtrio/CustomReports/Model/Collection.php CHANGED
@@ -137,6 +137,67 @@ class Vtrio_CustomReports_Model_Collection extends Mage_Core_Model_Abstract
137
 
138
  $reportArr = array();
139
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  if($from && $to){
141
 
142
  $fromExp = explode('/',$from);
137
 
138
  $reportArr = array();
139
 
140
+ if($from && $to){
141
+
142
+ $fromExp = explode('/',$from);
143
+ $toExp = explode('/',$to);
144
+
145
+ if(!empty($order_statuses)){
146
+ $status = " and sfo.status in (";
147
+ for($i = 0;$i<count($order_statuses);$i++){
148
+
149
+ if($i==count($order_statuses)-1){
150
+ $status .= "'".$order_statuses[$i]."')";
151
+ }else{
152
+ $status .= "'".$order_statuses[$i]."',";
153
+ }
154
+ }
155
+ }else{
156
+ $status = "";
157
+ }
158
+
159
+ $fromDate = $fromExp[2]."-".$fromExp[0]."-".$fromExp[1]." 00:00:00";
160
+ $toDate = $toExp[2]."-".$toExp[0]."-".$toExp[1]." 23:59:00";
161
+
162
+ $store_id = (trim($store_id))?" and sfoi.store_id='$store_id'":'';
163
+ $catalog_category_table= Mage::getSingleton('core/resource')->getTableName('catalog_category_product');
164
+ if($catId){
165
+ $category = " left join $catalog_category_table as ccp on ccp.product_id=sfoi.product_id ";
166
+ if($subCatId){
167
+ $categoryWhere = (trim($subCatId))?" and ccp.category_id='$subCatId'":'';
168
+ }else{
169
+ $categoryWhere = (trim($catId))?" and ccp.category_id='$catId'":'';
170
+ }
171
+ }else{
172
+ $category = "";
173
+ $categoryWhere = "";
174
+ }
175
+
176
+
177
+ $sale_flat_table= Mage::getSingleton('core/resource')->getTableName('sales_flat_order_item');
178
+ $sales_flat_order_table = Mage::getSingleton('core/resource')->getTableName('sales_flat_order');
179
+
180
+ $sql = "SELECT sfoi.created_at as date, sfoi.name, sfoi.sku, sfoi.price, sfoi.qty_ordered,
181
+ (select CONCAT(sfoa.firstname,' ',sfoa.lastname,'\n',sfoa.street,'\n',sfoa.city,', ',sfoa.region,', ',sfoa.postcode,'\n',sfoa.country_id) from sales_flat_order_address as sfoa where sfoa.entity_id=sfo.shipping_address_id) as shipping_address,
182
+ (select CONCAT(sfoa1.firstname,' ',sfoa1.lastname,'\n',sfoa1.street,'\n',sfoa1.city,', ',sfoa1.region,', ',sfoa1.postcode,'\n',sfoa1.country_id) from sales_flat_order_address as sfoa1 where sfoa1.entity_id=sfo.billing_address_id) as billing_address
183
+ FROM $sale_flat_table as sfoi
184
+ left join $sales_flat_order_table as sfo on sfo.entity_id=sfoi.order_id
185
+ $category
186
+ WHERE sfoi.created_at between '$fromDate' and '$toDate' $store_id $categoryWhere $status and sfoi.price >0 and sfoi.base_price >0
187
+ order by sfoi.created_at";
188
+
189
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
190
+ $reportArr = $connection->fetchAll($sql);
191
+ }
192
+ return $reportArr;
193
+ }
194
+
195
+
196
+
197
+ public function getReportCSV1($catId,$subCatId,$from,$to,$report_period,$store_id,$order_statuses){
198
+
199
+ $reportArr = array();
200
+
201
  if($from && $to){
202
 
203
  $fromExp = explode('/',$from);
app/code/community/Vtrio/CustomReports/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Vtrio_CustomReports>
5
- <version>0.1.0</version>
6
  </Vtrio_CustomReports>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Vtrio_CustomReports>
5
+ <version>1.0.0</version>
6
  </Vtrio_CustomReports>
7
  </modules>
8
  <global>
app/design/adminhtml/default/default/template/vtrio/customreports/gridproduct.phtml CHANGED
@@ -1,326 +1,356 @@
1
  <link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('vtriocustomreport/pagination.css');?>" />
2
  <?php
 
3
  if($this->getRequest()->getParams()){
4
- $key = ($this->getRequest()->getParam('key'))?$this->getRequest()->getParam('key'):'';
5
- $catId = ($this->getRequest()->getParam('category'))?$this->getRequest()->getParam('category'):'';
6
- $subCatId = ($this->getRequest()->getParam('subcategory'))?$this->getRequest()->getParam('subcategory'):'';
7
- $from = ($this->getRequest()->getParam('from'))?$this->getRequest()->getParam('from'):'';
8
- $to = ($this->getRequest()->getParam('to'))?$this->getRequest()->getParam('to'):'';
9
- $report_period = ($this->getRequest()->getParam('report_period'))?$this->getRequest()->getParam('report_period'):'';
10
- $store_ids = ($this->getRequest()->getParam('store_ids'))?$this->getRequest()->getParam('store_ids'):'';
11
- $website1 = ($this->getRequest()->getParam('website'))?$this->getRequest()->getParam('website'):'';
12
- $website2 = ($this->getRequest()->getParam('store'))?$this->getRequest()->getParam('store'):'';
13
- $website3 = ($this->getRequest()->getParam('group'))?$this->getRequest()->getParam('group'):'';
14
- $export = ($this->getRequest()->getParam('export'))?$this->getRequest()->getParam('export'):'';
15
- $showOrderStatus = ($this->getRequest()->getParam('show_order_statuses'))?$this->getRequest()->getParam('show_order_statuses'):'';
16
- if($showOrderStatus == '1'){
17
- $order_statuses= ($this->getRequest()->getParam('order_statuses'))?$this->getRequest()->getParam('order_statuses'):'';
18
- }else{
19
- $order_statuses= "";
20
- }
21
- if(trim($website1)){
22
- $website = $website1;
23
- }else if($website2){
24
- $website = $website2;
25
- }else{
26
- $website = $website3;
27
- }
28
- $page = ($this->getRequest()->getParam('page'))?$this->getRequest()->getParam('page'):'';
29
- $limit = ($this->getRequest()->getParam('limit'))?$this->getRequest()->getParam('limit'):20;
 
 
 
30
  }
31
- $helper = Mage::helper('customreports');
32
- $paginationArr = $helper->paginationCtrl($catId,$subCatId,$from,$to,$report_period,$store_ids,$order_statuses,$limit,$page);
33
- $start = $paginationArr['start'];
34
- $limit = ($paginationArr['limit'])?$paginationArr['limit']:$limit;
35
- $pagination = $paginationArr['paginationLink'];
36
- $model = Mage::getModel('customreports/collection');
37
- $reportArr = $model->getReport($catId,$subCatId,$from,$to,$report_period,$store_ids,$order_statuses,$start,$limit);
38
- $gridColSpan = $model->gridColSpan($reportArr,$report_period);
39
- $orderStatus = $model->getOrderStatus();
 
 
 
40
  ?>
 
41
  <?php echo $this->getStoreSwitcherHtml() ?>
42
  <div class="entry-edit">
43
- <form method="post" action="<?php echo Mage::helper('core/url')->getCurrentUrl();?>" id="filter_form">
44
- <div></div>
45
- <div class="entry-edit-head">
46
- <h4 class="icon-head head-edit-form fieldset-legend">Filter</h4>
47
- <div class="form-buttons"></div>
48
- </div>
49
- <div id="sales_report_base_fieldset" class="fieldset ">
50
- <div class="hor-scroll">
51
- <table cellspacing="0" class="form-list">
52
- <tbody>
53
- <tr>
54
- <td class="hidden" colspan="2">
55
- <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
56
- <input type="hidden" value="<?php echo $website;?>" name="store_ids" id="sales_report_store_ids">
57
- <input type="hidden" value="<?php echo $limit;?>" name="limit" id="limit">
58
- <input type="hidden" value="<?php echo $page;?>" name="page" id="page">
59
- </td>
60
- </tr>
61
- <tr>
62
- <td class="label"><label for="sales_report_period_type">Category</label></td>
63
- <td class="value">
64
- <select class=" select" title="Period" name="category" id="category" onchange="categoryChange(this)">
65
- <option value="">----------------------Please Select----------------------</option>
66
- <?php
67
- $category = Mage::getModel('catalog/category');
68
- $tree = $category->getTreeModel();
69
- $tree->load();
70
- $ids = $tree->getCollection()->getAllIds();
71
- if ($ids){
72
- foreach ($ids as $id){
73
- $cat = Mage::getModel('catalog/category');
74
- $cat->load($id);
75
- if($cat->getLevel()==2 && $cat->getIsActive()==1){
76
- $selected = ($catId == $cat->getId())?'selected = true':'';
77
- ?>
78
- <option value=<?php echo $cat->getId();?> <?php echo $selected;?>><?php echo $cat->getName();?></option>
79
- <?php }
80
- }
81
- }?>
82
- </select>
83
- </td>
84
- </tr>
85
- <tr>
86
- <td class="label"><label for="sales_report_period_type">Sub-Category</label></td>
87
- <td class="value">
88
- <div id="getSubCategory">
89
- <select class=" select" title="Period" name="subcategory" id="subcategory">
90
- <option value="">----------------------Please Select----------------------</option>
91
- <?php
92
- $catId = $this->getRequest()->getParam('category');
93
- $children = Mage::getModel('catalog/category')->getCategories($catId);
94
- $helper = Mage::helper('customreports');
95
- foreach ($children as $subCategory) {
96
- $selectedSubCategory = ($subCatId == $subCategory->getId())?'selected = true':'';
97
- $id = $subCategory->getId();
98
- $name = $subCategory->getName();
99
- $option .= "<option value='$id' $selectedSubCategory>$name</option>";
100
- $option .= $helper->nestedSubCategory($id,3,$subCatId);
101
- }
102
- echo $option;
103
- ?>
104
- </select>
105
- </div>
106
- </td>
107
- </tr>
108
- <tr>
109
- <td class="label"><label for="sales_report_show_order_statuses">Order Status</label></td>
110
- <td class="value">
111
- <select class=" select" name="show_order_statuses" id="sales_report_show_order_statuses" onChange="getStatus()">
112
- <option selected="selected" value="0" <?php echo ($showOrderStatus == '0')?'selected=true':'';?>>Any</option>
113
- <option value="1" <?php echo ($showOrderStatus == '1')?'selected=true':'';?>>Specified</option>
114
- </select>
115
- <p id="note_show_order_statuses" class="note"><span>Applies to Any of the Specified Order Statuses</span></p>
116
- </td>
117
- </tr>
118
- <tr style="<?php echo ($showOrderStatus == '0' || $showOrderStatus == '')?'display:none':'';?>" id="orderStatus">
119
- <td class="label"></td>
120
- <td class="value">
121
- <select multiple="multiple" class=" select multiselect" size="10" name="order_statuses[]" id="sales_report_order_statuses">
122
- <?php
123
- foreach ($orderStatus as $orderStatus_row) {
124
- $statusName = $orderStatus_row['status'];
125
- $statuslabel = $orderStatus_row['label'];
126
- $selected = (in_array($statusName, $order_statuses))?'selected=true':'';
127
-
128
- ?>
129
- <option value="<?php echo $statusName;?>" <?php echo $selected;?>><?php echo $statuslabel;?></option>
130
- <?php } ?>
131
- </select>
132
- </td>
133
- </tr>
134
- <tr>
135
- <td class="label"><label for="sales_report_from">From <span class="required">*</span></label></td>
136
- <td class="value">
137
- <input type="text" style="width:110px !important;" class=" required-entry input-text" title="From" value="<?php echo $from;?>" id="sales_report_from" name="from"> <img style="" title="Select Date" id="sales_report_from_trig" class="v-middle" alt="" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);?>/skin/adminhtml/default/default/images/grid-cal.gif">
138
- <div id="period_date_from_advaice"></div>
139
- <script type="text/javascript">
140
- //&lt;![CDATA[
141
- Calendar.setup({
142
- inputField: "sales_report_from",
143
- ifFormat: "%m/%e/%Y",
144
- showsTime: false,
145
- button: "sales_report_from_trig",
146
- align: "Bl",
147
- singleClick : true
148
- });
149
- //]]&gt;
150
- </script>
151
- </td>
152
- </tr>
153
- <tr>
154
- <td class="label"><label for="sales_report_to">To <span class="required">*</span></label></td>
155
- <td class="value">
156
- <input type="text" style="width:110px !important;" class=" required-entry input-text" title="To" value="<?php echo $to;?>" id="sales_report_to" name="to"> <img style="" title="Select Date" id="sales_report_to_trig" class="v-middle" alt="" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);?>skin/adminhtml/default/default/images/grid-cal.gif">
157
- <div id="period_date_to_advaice"></div>
158
- <script type="text/javascript">
159
- //&lt;![CDATA[
160
- Calendar.setup({
161
- inputField: "sales_report_to",
162
- ifFormat: "%m/%e/%Y",
163
- showsTime: false,
164
- button: "sales_report_to_trig",
165
- align: "Bl",
166
- singleClick : true
167
- });
168
- //]]&gt;
169
- </script>
170
- </td>
171
- </tr>
172
- <tr>
173
- <td class="label"><label for="sales_report_to">Period</label></td>
174
- <td class="value">
175
- <select name="report_period" id="report_period" class="select">
176
- <option value="day" <?php echo ($report_period == 'day')?'selected="true"':'';?>>Day</option>
177
- <option value="month" <?php echo ($report_period == 'month')?'selected="true"':'';?>>Month</option>
178
- <option value="year" <?php echo ($report_period == 'year')?'selected="true"':'';?>>Year</option>
179
- </td>
180
- </tr>
181
- </tbody>
182
- </table>
183
- </div>
184
- </div>
185
- <table cellspacing="0" class="actions">
186
- <tr>
187
- <td>
188
- <?php echo $pagination;?>
189
- </td>
190
- <td class=" a-right">
191
- <img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/>&nbsp; <?php echo $this->__('Export to:') ?>
192
- <select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
193
- <option value="csv">CSV</option>
194
- </select>
195
- <button style="" onclick="doExport()" class="scalable task" type="button" title="Export" id="export">Export</button>
196
- </td>
197
- </tr>
198
- </table>
199
- </form>
 
 
 
200
  </div>
 
201
  <!-- ----------------------- Grid ---------------------- --->
202
- <div class="grid">
203
- <table cellspacing="0" class="data" id="<?php echo $this->getId() ?>_table">
204
- <col/>
205
- <?php foreach ($this->getColumns() as $_column): ?>
206
- <col <?php echo $_column->getHtmlProperty() ?>/>
207
- <?php endforeach; ?>
208
- <thead>
209
- <tr class="headings">
210
- <th class="no-link" style="width:100px"><span class="no-br"><?php echo $this->getPeriodText() ?></span></th>
211
- <?php foreach ($this->getColumns() as $_column): ?>
212
- <th <?php echo $_column->getHeaderHtmlProperty() ?>><span class="no-br"><?php echo $_column->getHeaderHtml() ?></span></th>
213
- <?php endforeach; ?>
214
- </tr>
215
- </thead>
216
- <?php if(count($reportArr) == 0):?>
217
- <tbody>
218
- <tr class="even">
219
- <td colspan="5" class="empty-text a-center">No records found.</td>
220
- </tr>
221
- </tbody>
222
- <?php else: ?>
223
- <tbody>
224
- <?php
225
- $totalQty = 0;
226
- $totalPrice = 0;
227
- $i = 0;
228
- $j = 0;
229
- $k = 0;
230
- foreach ($reportArr as $arr_row) {
231
- $totalQty = $totalQty+$arr_row['qty_ordered'];
232
- $totalPrice = $totalPrice+$arr_row['price'];
233
- if($report_period == 'month'){
234
- $dateVal1 = explode("-",$arr_row['created_at']);
235
- $createdDate = $dateVal1[1]."/".$dateVal1[0];
236
- }else if($report_period == 'year'){
237
- $dateVal1 = explode("-",$arr_row['created_at']);
238
- $createdDate = $dateVal1[0];
239
- }else{
240
- $date = date_create($arr_row['created_at']);
241
- $createdDate = date_format($date,"M d, Y");
242
- }
243
- if($gridColSpan[$k] == $i){
244
- $i = 0;$k++;
245
- }
246
- if($i == 0){ ?>
247
- <tr title="#" class="pointer">
248
- <td class=" " rowspan="<?php echo $gridColSpan[$k];?>"><span class="nobr"><?php echo $createdDate;?></span></td>
249
- <td class=" "><?php echo $arr_row['name'];?></td>
250
- <td class=" a-right "><?php echo $arr_row['sku'];?></td>
251
- <td class=" a-right "><?php echo number_format($arr_row['price'], 2, '.', '');?></td>
252
- <td class=" a-right last"><?php echo number_format($arr_row['qty_ordered'], 2, '.', '');?></td>
253
- </tr>
254
- <?php }else{ ?>
255
- <tr class="">
256
- <td class=" "><?php echo $arr_row['name'];?></td>
257
- <td class=" a-right "><?php echo $arr_row['sku'];?></td>
258
- <td class=" a-right "><?php echo number_format($arr_row['price'], 2, '.', '');?></td>
259
- <td class=" a-right last"><?php echo number_format($arr_row['qty_ordered'], 2, '.', '');?></td>
260
- </tr/>
261
- <?php
262
- }
263
- $i++;
264
- }
265
- ?>
266
- </tbody>
267
- <tfoot>
268
- <tr class="totals">
269
- <th class="">Total&nbsp;</th>
270
- <th class="">&nbsp;</th>
271
- <th class=" a-right">&nbsp;</th>
272
- <th class=" a-right"><?php echo number_format($totalPrice, 2, '.', '');?>&nbsp;</th>
273
- <th class=" a-right"><?php echo number_format($totalQty, 2, '.', '');?>&nbsp;</th>
274
- </tr>
275
- </tfoot>
276
- <?php endif; ?>
277
- </table>
 
 
 
 
278
  </div>
 
279
  <script type="text/javascript">
280
- function filterFormSubmit() {
281
- var filters = $$('#sales_report_from', '#sales_report_to');
282
- var elements = [];
283
- for(var i in filters){
284
- if(filters[i].value && filters[i].value.length && !filters[i].disabled) elements.push(filters[i]);
285
- }
286
- var validator = new Validation('filter_form');
287
- if (validator.validate()) {
288
- document.getElementById("export").value= '';
289
- document.getElementById("page").value= '';
290
- document.forms["filter_form"].submit();
291
- }
292
- }
293
- function categoryChange(cat){
294
- var catId = cat.value;
295
- var newArrivals = "";
296
- $url = '<?php echo $this->getUrl("customreports/report_index/getsubcategory");?>?catId='+catId;
297
- new Ajax.Request($url, {
298
- onSuccess: function(response) {
299
- console.log(response);
300
- document.getElementById('getSubCategory').innerHTML = response.responseText;
301
  }
302
- });
303
- }
304
- function doExport(){
305
- var exportType = document.getElementById("customReport_export").value;
306
- $parm = '?period=<?php echo $report_period;?>&catId=<?php echo $catId;?>&subCatId=<?php echo $subCatId;?>&from=<?php echo $from;?>&to=<?php echo $to;?>&store_id=<?php echo $store_id;?>&order_statuses=<?php echo $order_statuses;?>';
307
- $url = '<?php echo $this->getUrl("customreports/report_index/csv_export");?>'+$parm;
308
- document.location.href= $url;
309
- }
310
- function getStatus(){
311
- if(document.getElementById("sales_report_show_order_statuses").value == '1'){
312
- document.getElementById("orderStatus").style.display='';
313
- }else{
314
- document.getElementById("orderStatus").style.display="none";
315
- }
316
- }
317
- function getPaginationLimit(val){
318
- var limit = val.value;
319
- document.getElementById("limit").value= limit;
320
- document.forms["filter_form"].submit();
321
- }
322
- function setPage(page){
323
- document.getElementById("page").value= page;
324
- document.forms["filter_form"].submit();
325
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  </script>
 
 
 
1
  <link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('vtriocustomreport/pagination.css');?>" />
2
  <?php
3
+
4
  if($this->getRequest()->getParams()){
5
+ $key = ($this->getRequest()->getParam('key'))?$this->getRequest()->getParam('key'):'';
6
+ $catId = ($this->getRequest()->getParam('category'))?$this->getRequest()->getParam('category'):'';
7
+ $subCatId = ($this->getRequest()->getParam('subcategory'))?$this->getRequest()->getParam('subcategory'):'';
8
+ $from = ($this->getRequest()->getParam('from'))?$this->getRequest()->getParam('from'):'';
9
+ $to = ($this->getRequest()->getParam('to'))?$this->getRequest()->getParam('to'):'';
10
+ $report_period = ($this->getRequest()->getParam('report_period'))?$this->getRequest()->getParam('report_period'):'';
11
+ $store_ids = ($this->getRequest()->getParam('store_ids'))?$this->getRequest()->getParam('store_ids'):'';
12
+ $website1 = ($this->getRequest()->getParam('website'))?$this->getRequest()->getParam('website'):'';
13
+ $website2 = ($this->getRequest()->getParam('store'))?$this->getRequest()->getParam('store'):'';
14
+ $website3 = ($this->getRequest()->getParam('group'))?$this->getRequest()->getParam('group'):'';
15
+ $export = ($this->getRequest()->getParam('export'))?$this->getRequest()->getParam('export'):'';
16
+ $showOrderStatus = ($this->getRequest()->getParam('show_order_statuses'))?$this->getRequest()->getParam('show_order_statuses'):'';
17
+ if($showOrderStatus == '1'){
18
+ $order_statuses= ($this->getRequest()->getParam('order_statuses'))?$this->getRequest()->getParam('order_statuses'):'';
19
+
20
+ }else{
21
+ $order_statuses= "";
22
+ }
23
+
24
+ if(trim($website1)){
25
+ $website = $website1;
26
+ }else if($website2){
27
+ $website = $website2;
28
+ }else{
29
+ $website = $website3;
30
+ }
31
+
32
+ $page = ($this->getRequest()->getParam('page'))?$this->getRequest()->getParam('page'):'';
33
+ $limit = ($this->getRequest()->getParam('limit'))?$this->getRequest()->getParam('limit'):50;
34
  }
35
+
36
+ $helper = Mage::helper('customreports');
37
+ $paginationArr = $helper->paginationCtrl($catId,$subCatId,$from,$to,$report_period,$store_ids,$order_statuses,$limit,$page);
38
+ $start = $paginationArr['start'];
39
+ $limit = ($paginationArr['limit'])?$paginationArr['limit']:$limit;
40
+ $pagination = $paginationArr['paginationLink'];
41
+
42
+ $model = Mage::getModel('customreports/collection');
43
+ $reportArr = $model->getReport($catId,$subCatId,$from,$to,$report_period,$store_ids,$order_statuses,$start,$limit);
44
+ $gridColSpan = $model->gridColSpan($reportArr,$report_period);
45
+ $orderStatus = $model->getOrderStatus();
46
+
47
  ?>
48
+
49
  <?php echo $this->getStoreSwitcherHtml() ?>
50
  <div class="entry-edit">
51
+ <form method="post" action="<?php echo Mage::helper('core/url')->getCurrentUrl();?>" id="filter_form">
52
+ <div></div>
53
+ <div class="entry-edit-head">
54
+ <h4 class="icon-head head-edit-form fieldset-legend">Filter</h4>
55
+ <div class="form-buttons"></div>
56
+ </div>
57
+ <div id="sales_report_base_fieldset" class="fieldset ">
58
+ <div class="hor-scroll">
59
+ <table cellspacing="0" class="form-list">
60
+ <tbody>
61
+ <tr>
62
+ <td class="hidden" colspan="2">
63
+ <input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />
64
+ <input type="hidden" value="<?php echo $website;?>" name="store_ids" id="sales_report_store_ids">
65
+ <input type="hidden" value="<?php echo $limit;?>" name="limit" id="limit">
66
+ <input type="hidden" value="<?php echo $page;?>" name="page" id="page">
67
+ </td>
68
+ </tr>
69
+ <tr>
70
+ <td class="label"><label for="sales_report_period_type">Category</label></td>
71
+ <td class="value">
72
+ <select class=" select" title="Period" name="category" id="category" onchange="categoryChange(this)">
73
+ <option value="">----------------------Please Select----------------------</option>
74
+ <?php
75
+ $category = Mage::getModel('catalog/category');
76
+ $tree = $category->getTreeModel();
77
+ $tree->load();
78
+
79
+ $ids = $tree->getCollection()->getAllIds();
80
+ if ($ids){
81
+ foreach ($ids as $id){
82
+ $cat = Mage::getModel('catalog/category');
83
+ $cat->load($id);
84
+ if($cat->getLevel()==2 && $cat->getIsActive()==1){
85
+ $selected = ($catId == $cat->getId())?'selected = true':'';
86
+ ?>
87
+ <option value=<?php echo $cat->getId();?> <?php echo $selected;?>><?php echo $cat->getName();?></option>
88
+ <?php }
89
+ }
90
+ }?>
91
+ </select>
92
+ </td>
93
+ </tr>
94
+ <tr>
95
+ <td class="label"><label for="sales_report_period_type">Sub-Category</label></td>
96
+ <td class="value">
97
+ <div id="getSubCategory">
98
+ <select class=" select" title="Period" name="subcategory" id="subcategory">
99
+ <option value="">----------------------Please Select----------------------</option>
100
+ <?php
101
+ $catId = $this->getRequest()->getParam('category');
102
+ $children = Mage::getModel('catalog/category')->getCategories($catId);
103
+ $helper = Mage::helper('customreports');
104
+ foreach ($children as $subCategory) {
105
+ $selectedSubCategory = ($subCatId == $subCategory->getId())?'selected = true':'';
106
+ $id = $subCategory->getId();
107
+ $name = $subCategory->getName();
108
+ $option .= "<option value='$id' $selectedSubCategory>$name</option>";
109
+ $option .= $helper->nestedSubCategory($id,3,$subCatId);
110
+ }
111
+ echo $option;
112
+ ?>
113
+ </select>
114
+ </div>
115
+ </td>
116
+ </tr>
117
+ <tr>
118
+ <td class="label"><label for="sales_report_show_order_statuses">Order Status</label></td>
119
+ <td class="value">
120
+ <select class=" select" name="show_order_statuses" id="sales_report_show_order_statuses" onChange="getStatus()">
121
+ <option selected="selected" value="0" <?php echo ($showOrderStatus == '0')?'selected=true':'';?>>Any</option>
122
+ <option value="1" <?php echo ($showOrderStatus == '1')?'selected=true':'';?>>Specified</option>
123
+ </select>
124
+ <p id="note_show_order_statuses" class="note"><span>Applies to Any of the Specified Order Statuses</span></p>
125
+ </td>
126
+ </tr>
127
+ <tr style="<?php echo ($showOrderStatus == '0' || $showOrderStatus == '')?'display:none':'';?>" id="orderStatus">
128
+ <td class="label"></td>
129
+ <td class="value">
130
+ <select multiple="multiple" class=" select multiselect" size="10" name="order_statuses[]" id="sales_report_order_statuses">
131
+ <?php
132
+ foreach ($orderStatus as $orderStatus_row) {
133
+ $statusName = $orderStatus_row['status'];
134
+ $statuslabel = $orderStatus_row['label'];
135
+ $selected = (in_array($statusName, $order_statuses))?'selected=true':'';
136
+
137
+ ?>
138
+ <option value="<?php echo $statusName;?>" <?php echo $selected;?>><?php echo $statuslabel;?></option>
139
+ <?php } ?>
140
+ </select>
141
+ </td>
142
+ </tr>
143
+ <tr>
144
+ <td class="label"><label for="sales_report_from">From <span class="required">*</span></label></td>
145
+ <td class="value">
146
+ <input type="text" style="width:110px !important;" class=" required-entry input-text" title="From" value="<?php echo $from;?>" id="sales_report_from" name="from"> <img style="" title="Select Date" id="sales_report_from_trig" class="v-middle" alt="" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);?>/skin/adminhtml/default/default/images/grid-cal.gif">
147
+ <div id="period_date_from_advaice"></div>
148
+ <script type="text/javascript">
149
+ //&lt;![CDATA[
150
+ Calendar.setup({
151
+ inputField: "sales_report_from",
152
+ ifFormat: "%m/%e/%Y",
153
+ showsTime: false,
154
+ button: "sales_report_from_trig",
155
+ align: "Bl",
156
+ singleClick : true
157
+ });
158
+ //]]&gt;
159
+ </script>
160
+ </td>
161
+ </tr>
162
+ <tr>
163
+ <td class="label"><label for="sales_report_to">To <span class="required">*</span></label></td>
164
+ <td class="value">
165
+ <input type="text" style="width:110px !important;" class=" required-entry input-text" title="To" value="<?php echo $to;?>" id="sales_report_to" name="to"> <img style="" title="Select Date" id="sales_report_to_trig" class="v-middle" alt="" src="<?php echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);?>skin/adminhtml/default/default/images/grid-cal.gif">
166
+ <div id="period_date_to_advaice"></div>
167
+ <script type="text/javascript">
168
+ //&lt;![CDATA[
169
+ Calendar.setup({
170
+ inputField: "sales_report_to",
171
+ ifFormat: "%m/%e/%Y",
172
+ showsTime: false,
173
+ button: "sales_report_to_trig",
174
+ align: "Bl",
175
+ singleClick : true
176
+ });
177
+ //]]&gt;
178
+ </script>
179
+ </td>
180
+ </tr>
181
+ <tr>
182
+ <td class="label"><label for="sales_report_to">Period</label></td>
183
+ <td class="value">
184
+ <select name="report_period" id="report_period" class="select">
185
+ <option value="day" <?php echo ($report_period == 'day')?'selected="true"':'';?>>Day</option>
186
+ <option value="month" <?php echo ($report_period == 'month')?'selected="true"':'';?>>Month</option>
187
+ <option value="year" <?php echo ($report_period == 'year')?'selected="true"':'';?>>Year</option>
188
+ </td>
189
+ </tr>
190
+ </tbody>
191
+ </table>
192
+ </div>
193
+ </div>
194
+
195
+ <table cellspacing="0" class="actions">
196
+ <tr>
197
+ <td>
198
+ <?php echo $pagination;?>
199
+ </td>
200
+ <td class=" a-right">
201
+ <img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/>&nbsp; <?php echo $this->__('Export to:') ?>
202
+ <select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
203
+ <option value="csv">CSV</option>
204
+ </select>
205
+ <button style="" onclick="doExport()" class="scalable task" type="button" title="Export" id="export">Export</button>
206
+ </td>
207
+ </tr>
208
+ </table>
209
+
210
+ </form>
211
  </div>
212
+
213
  <!-- ----------------------- Grid ---------------------- --->
214
+
215
+ <div class="grid">
216
+ <table cellspacing="0" class="data" id="<?php echo $this->getId() ?>_table">
217
+ <col/>
218
+ <?php foreach ($this->getColumns() as $_column): ?>
219
+ <col <?php echo $_column->getHtmlProperty() ?>/>
220
+ <?php endforeach; ?>
221
+
222
+ <thead>
223
+ <tr class="headings">
224
+ <th class="no-link" style="width:100px"><span class="no-br"><?php echo $this->getPeriodText() ?></span></th>
225
+ <?php foreach ($this->getColumns() as $_column): ?>
226
+ <th <?php echo $_column->getHeaderHtmlProperty() ?>><span class="no-br"><?php echo $_column->getHeaderHtml() ?></span></th>
227
+ <?php endforeach; ?>
228
+ </tr>
229
+ </thead>
230
+ <?php if(count($reportArr) == 0):?>
231
+ <tbody>
232
+ <tr class="even">
233
+ <td colspan="5" class="empty-text a-center">No records found.</td>
234
+ </tr>
235
+ </tbody>
236
+ <?php else: ?>
237
+ <tbody>
238
+ <?php
239
+ $totalQty = 0;
240
+ $totalPrice = 0;
241
+ $i = 0;
242
+ $j = 0;
243
+ $k = 0;
244
+ foreach ($reportArr as $arr_row) {
245
+ $totalQty = $totalQty+$arr_row['qty_ordered'];
246
+ $totalPrice = $totalPrice+$arr_row['price'];
247
+ if($report_period == 'month'){
248
+ $dateVal1 = explode("-",$arr_row['created_at']);
249
+ $createdDate = $dateVal1[1]."/".$dateVal1[0];
250
+ }else if($report_period == 'year'){
251
+ $dateVal1 = explode("-",$arr_row['created_at']);
252
+ $createdDate = $dateVal1[0];
253
+ }else{
254
+ $date = date_create($arr_row['created_at']);
255
+ $createdDate = date_format($date,"M d, Y");
256
+ }
257
+
258
+ if($gridColSpan[$k] == $i){
259
+ $i = 0;$k++;
260
+ }
261
+ if($i == 0){ ?>
262
+ <tr title="#" class="pointer">
263
+ <td class=" " rowspan="<?php echo $gridColSpan[$k];?>"><span class="nobr"><?php echo $createdDate;?></span></td>
264
+ <td class=" "><?php echo $arr_row['name'];?></td>
265
+ <td class=" a-right "><?php echo $arr_row['sku'];?></td>
266
+ <td class=" a-right "><?php echo number_format($arr_row['price'], 2, '.', '');?></td>
267
+ <td class=" a-right last"><?php echo number_format($arr_row['qty_ordered'], 2, '.', '');?></td>
268
+ </tr>
269
+
270
+ <?php }else{ ?>
271
+ <tr class="">
272
+ <td class=" "><?php echo $arr_row['name'];?></td>
273
+ <td class=" a-right "><?php echo $arr_row['sku'];?></td>
274
+ <td class=" a-right "><?php echo number_format($arr_row['price'], 2, '.', '');?></td>
275
+ <td class=" a-right last"><?php echo number_format($arr_row['qty_ordered'], 2, '.', '');?></td>
276
+ </tr/>
277
+ <?php
278
+ }
279
+ $i++;
280
+ }
281
+ ?>
282
+ </tbody>
283
+ <tfoot>
284
+ <tr class="totals">
285
+ <th class="">Total&nbsp;</th>
286
+ <th class="">&nbsp;</th>
287
+ <th class=" a-right">&nbsp;</th>
288
+ <th class=" a-right"><?php echo number_format($totalPrice, 2, '.', '');?>&nbsp;</th>
289
+ <th class=" a-right"><?php echo number_format($totalQty, 2, '.', '');?>&nbsp;</th>
290
+ </tr>
291
+ </tfoot>
292
+ <?php endif; ?>
293
+ </table>
294
  </div>
295
+
296
  <script type="text/javascript">
297
+
298
+ function filterFormSubmit() {
299
+
300
+ var filters = $$('#sales_report_from', '#sales_report_to');
301
+ var elements = [];
302
+ for(var i in filters){
303
+ if(filters[i].value && filters[i].value.length && !filters[i].disabled) elements.push(filters[i]);
304
+ }
305
+
306
+ var validator = new Validation('filter_form');
307
+ if (validator.validate()) {
308
+ document.getElementById("export").value= '';
309
+ document.getElementById("page").value= '';
310
+ document.forms["filter_form"].submit();
311
+ }
 
 
 
 
 
 
312
  }
313
+
314
+ function categoryChange(cat){
315
+ var catId = cat.value;
316
+ var newArrivals = "";
317
+
318
+ $url = '<?php echo $this->getUrl("customreports/report_index/getsubcategory");?>?catId='+catId;
319
+ new Ajax.Request($url, {
320
+ onSuccess: function(response) {
321
+ console.log(response);
322
+ document.getElementById('getSubCategory').innerHTML = response.responseText;
323
+ }
324
+ });
325
+ }
326
+
327
+ function doExport(){
328
+ var exportType = document.getElementById("customReport_export").value;
329
+ $parm = '?period=<?php echo $report_period;?>&catId=<?php echo $catId;?>&subCatId=<?php echo $subCatId;?>&from=<?php echo $from;?>&to=<?php echo $to;?>&store_id=<?php echo $store_id;?>&order_statuses=<?php echo $order_statuses;?>';
330
+ $url = '<?php echo $this->getUrl("customreports/report_index/csv_export");?>'+$parm;
331
+ document.location.href= $url;
332
+ }
333
+
334
+ function getStatus(){
335
+ if(document.getElementById("sales_report_show_order_statuses").value == '1'){
336
+ document.getElementById("orderStatus").style.display='';
337
+ }else{
338
+ document.getElementById("orderStatus").style.display="none";
339
+ }
340
+ }
341
+
342
+ function getPaginationLimit(val){
343
+ var limit = val.value;
344
+ document.getElementById("limit").value= limit;
345
+ document.forms["filter_form"].submit();
346
+ }
347
+
348
+ function setPage(page){
349
+ document.getElementById("page").value= page;
350
+ document.forms["filter_form"].submit();
351
+ }
352
+
353
  </script>
354
+
355
+
356
+
app/etc/modules/Vtrio_CustomReports.xml CHANGED
@@ -4,7 +4,7 @@
4
  <Vtrio_CustomReports>
5
  <active>true</active>
6
  <codePool>community</codePool>
7
- <version>0.1.0</version>
8
  </Vtrio_CustomReports>
9
  </modules>
10
  </config>
4
  <Vtrio_CustomReports>
5
  <active>true</active>
6
  <codePool>community</codePool>
7
+ <version>1.0.0</version>
8
  </Vtrio_CustomReports>
9
  </modules>
10
  </config>
package.xml CHANGED
@@ -1,21 +1,18 @@
1
  <?xml version="1.0"?>
2
  <package>
3
- <name>Vtrio</name>
4
- <version>0.1.0</version>
5
- <stability>devel</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">MITL</license>
7
  <channel>community</channel>
8
  <extends/>
9
- <summary>VReport is a module which will help users to generate sales report in a more user friendly way. User could run reports based on Category ,Sub-Category and Time.</summary>
10
- <description>VReport is a module which will help users to generate sales report in a more user friendly way. User could run reports based on Category ,Sub-Category and Time.&#xD;
11
- &#xD;
12
- &#xB7; Using the filter user could choose which category needs to have a search and report done. The drop down box is comprehensive and lists down all the Product Main Categories. So reports could be generated in detail, like which product category has been ordered from which date to which date and how many orders are in what statuses.&#xD;
13
- Sub Category &#x2013; Lists down each Category&#x2019;s division and is even more widespread. This search enables the user to get reports for each sub category under each product. This gives a better understanding of things due to its detailed listing.</description>
14
- <notes>First development release</notes>
15
  <authors><author><name>Developer</name><user>Developer</user><email>dev@vtrio.com</email></author></authors>
16
- <date>2016-02-10</date>
17
- <time>09:00:32</time>
18
- <contents><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="vtriocustomreport"><file name="pagination.css" hash="3e61bea82df74a73e3b00c1952aa9770"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="vtrio"><dir name="customreports"><file name="gridproduct.phtml" hash="8ada844139e34c37e508157191cd9bea"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="app"><dir name="etc"><dir name="modules"><file name="Vtrio_CustomReports.xml" hash="e89d1e1daf11b114edc43d860abd7ec4"/></dir></dir><dir name="code"><dir name="community"><dir name="Vtrio"><dir name="CustomReports"><dir name="Block"><dir name="Report"><dir name="Custom"><file name="Grid.php" hash="97be1eeaff2eabf3ed16dd4214a3abf9"/></dir><file name="Custom.php" hash="53ca9fae5564ba0c877c1a8e6e89e5e1"/></dir></dir><dir name="Helper"><file name="Data.php" hash="1361f3ea2073be4db3fa0e4790692bb6"/></dir><dir name="Model"><file name="Collection.php" hash="7e61f5a05a43590303a6070f1c3c2f04"/></dir><dir name="controllers"><dir name="Report"><file name="IndexController.php" hash="1afc4f670300dfe40466ebe75c182420"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="08112c6bf1a058fce42ee7a8f87b34c5"/><file name="config.xml" hash="f7a5e3b1a491346cb80627c250c72ce5"/></dir></dir></dir></dir></dir></dir></target></contents>
19
  <compatible/>
20
- <dependencies><required><php><min>5.3.0</min><max>5.6.14</max></php></required></dependencies>
21
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
+ <name>VReport</name>
4
+ <version>1.0.0</version>
5
+ <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">MITL</license>
7
  <channel>community</channel>
8
  <extends/>
9
+ <summary>VReport module helps users to generate reports in more user friendly and business prospective way.</summary>
10
+ <description>VReport module helps users to generate reports in more user friendly and business prospective way. The report can be generated Category and Sub Categories wise. Additionaly the module provides time based and Order Status based filters and export options.Export file contains details like Product Name,SKU,total Price,Quantity Ordered, shipping and billing addres. The report will help store owners in setting business plans based on order status and category.</description>
11
+ <notes>First stable version</notes>
 
 
 
12
  <authors><author><name>Developer</name><user>Developer</user><email>dev@vtrio.com</email></author></authors>
13
+ <date>2016-03-11</date>
14
+ <time>05:11:05</time>
15
+ <contents><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="vtriocustomreport"><file name="pagination.css" hash="3e61bea82df74a73e3b00c1952aa9770"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="vtrio"><dir name="customreports"><file name="gridproduct.phtml" hash="07dedcdaff3a17bc8510bb1f38e257e0"/></dir></dir></dir></dir></dir></dir></target><target name="mage"><dir name="app"><dir name="code"><dir name="community"><dir name="Vtrio"><dir name="CustomReports"><dir name="Block"><dir name="Report"><dir name="Custom"><file name="Grid.php" hash="97be1eeaff2eabf3ed16dd4214a3abf9"/></dir><file name="Custom.php" hash="53ca9fae5564ba0c877c1a8e6e89e5e1"/></dir></dir><dir name="Helper"><file name="Data.php" hash="4fe236db0b3efb39c7283593a14dbbfe"/></dir><dir name="Model"><file name="Collection.php" hash="b479f4ec0e9b3c131b57910f227f634c"/></dir><dir name="controllers"><dir name="Report"><file name="IndexController.php" hash="1afc4f670300dfe40466ebe75c182420"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="08112c6bf1a058fce42ee7a8f87b34c5"/><file name="config.xml" hash="0eb9f31ed975e9ef178a34a191009eda"/></dir></dir></dir></dir></dir><dir name="etc"><dir><dir name="modules"><file name="Vtrio_CustomReports.xml" hash="b476d1292e2a46bac9e48dcefa7672a8"/></dir></dir></dir></dir><dir name="modules"><file name="Vtrio_CustomReports.xml" hash=""/></dir></target></contents>
16
  <compatible/>
17
+ <dependencies><required><php><min>5.3.0</min><max>7.0.0</max></php></required></dependencies>
18
  </package>