2 namespace Report\Report;
7 * Stock Control Report.
10 class LoadVsSold extends \Utility\Service\Report
18 protected $_title = 'Loaded and Sold';
22 protected $_subject = 'Vehicles loaded vs vehicles sold';
26 protected $_description = 'Vehicles loaded vs vehicles sold.';
30 protected $_notes = array(
31 'Confidential information, generated using Bid 4 Cars, for more information visit bid4cars.com.na'
36 protected $_headers = array(
44 protected $_fields = array(
52 protected $_totals = array(
59 protected $_currencyFields = array();
68 public function build()
70 $config = $this->em->getConfiguration();
71 $config->addCustomStringFunction('DATE_FORMAT', 'UVd\DoctrineFunction\DateFormat');
72 $config->addCustomStringFunction('SOUNDEX', 'UVd\DoctrineFunction\Soundex');
74 $year = $this->_input['year'];
75 $this->_data = array();
80 'company.name as companyName',
81 'tradeCenter.name as tradeCenterName',
84 'stock.id as stockId',
85 'SOUNDEX(stock.stockNumber) as stockNumber',
86 'SOUNDEX(stock.registrationNumber) as registrationNumber',
87 'SOUNDEX(stock.vinNumber) as vinNumber',
88 'SOUNDEX(stock.engineNumber) as engineNumber',
89 'DATE_FORMAT(auction.endDate ,\'%Y-%m\') as month',
94 $query = 'SELECT [SELECTION] '
95 . 'FROM \Stock\Entity\Stock stock '
96 . 'JOIN stock.auction auction '
97 . 'JOIN stock.company company '
98 . 'LEFT JOIN company.tradeCenter tradeCenter '
99 . 'LEFT JOIN company.region region '
100 . 'LEFT JOIN company.group grp '
101 . 'LEFT JOIN company.groupDivision division '
102 . 'LEFT JOIN company.regionalManager manager '
104 . 'ORDER BY auction.endDate';
105 $where[] = 'auction.jobState != :status';
106 $params['status'] = 'Active';
108 $this->_queries['Date Range From'] = $year . '-01-01';
109 $where[] = 'auction.endDate >= :dateFrom';
110 $params['dateFrom'] = new \DateTime($year . '-01-01');
112 $this->_queries['Date Range Until'] = $year . '-12-31';
113 $where[] = 'auction.endDate <= :dateTo';
114 $params['dateTo'] = new \DateTime($year . '-12-31');
116 if (isset($this->_input['group'])
117 && !empty($this->_input['group'])
118 && 'null' != $this->_input['group'])
120 $this->_queries['Group'] = $this->em
121 ->find('\Company\Entity\Group', $this->_input['group'])
123 $where[] = 'grp.id = :group';
124 $params['group'] = $this->_input['group'];
126 if (isset($this->_input['region'])
127 && !empty($this->_input['region'])
128 && 'null' != $this->_input['region'])
130 $this->_queries['Region'] = $this->em
131 ->find('\Location\Entity\Region', $this->_input['region'])
133 $where[] = 'region.id = :region';
134 $params['region'] = $this->_input['region'];
137 if (isset($this->_input['groupDivision'])
138 && !empty($this->_input['groupDivision'])
139 && 'null' != $this->_input['groupDivision'])
141 $this->_queries['Division'] = $this->em
142 ->find('\Company\Entity\GroupDivision', $this->_input['groupDivision'])
144 $where[] = 'division.id = :division';
145 $params['division'] = $this->_input['groupDivision'];
148 if (isset($this->_input['company'])
149 && !empty($this->_input['company'])
150 && 'null' != $this->_input['company'])
152 $this->_queries['Dealership'] = $this->em
153 ->find('\Company\Entity\Company', $this->_input['company'])
155 $where[] = 'company.id = :company';
156 $params['company'] = $this->_input['company'];
159 /* if (isset($this->_input['regionalManager'])
160 && !empty($this->_input['regionalManager'])
161 && 'null' != $this->_input['regionalManager'])
163 $where[] = 'manager.id IN (:regionalManager)';
164 $params['regionalManager'] = $this->_input['regionalManager'];
168 $query = str_replace(array(
169 '[SELECTION]', '[WHERE]'
171 implode(', ', $selection) . ' ',
173 ? 'WHERE ' . implode(' AND ', $where) . ' '
177 $query = $this->em->createQuery($query);
179 && $query->setParameters($params);
180 $result = $query->getScalarResult();
186 foreach ($result as $id => $row)
188 $combo = $row['name']
189 . '.' . $row['firstName']
190 . '.' . $row['familyName']
191 . '.' . $row['stockNumber']
192 . '.' . $row['registrationNumber']
193 . '.' . $row['vinNumber']
194 . '.' . $row['engineNumber']
195 . '.' . $row['month'];
196 $fullName = $row['firstName'] . ' ' . $row['familyName'];
197 $divisionName = $row['name'];
198 $companyName = $row['companyName'];
199 if (!is_null($row['tradeCenterName']))
201 $centers["$divisionName.$companyName"] = $row['tradeCenterName'];
204 #-> Division aggregation.
205 if (!isset($prepDvsn[$divisionName]))
207 $prepDvsn[$divisionName] = array();
209 if (!isset($prepDvsn[$divisionName][$fullName]))
211 $prepDvsn[$divisionName][$fullName] = array();
213 if (!isset($prepDvsn[$divisionName][$fullName][$row['month']]))
215 $prepDvsn[$divisionName][$fullName][$row['month']] = array();
217 if (!isset($prepDvsn[$divisionName][$fullName][$row['month']][$combo]))
219 $prepDvsn[$divisionName][$fullName][$row['month']][$combo] = $row;
222 #-> Company aggregation.
223 if (!isset($prepComp[$divisionName]))
225 $prepComp[$divisionName] = array();
227 if (!isset($prepComp[$divisionName][$fullName]))
229 $prepComp[$divisionName][$fullName] = array();
231 if (!isset($prepComp[$divisionName][$fullName][$companyName]))
233 $prepComp[$divisionName][$fullName][$companyName] = array();
235 if (!isset($prepComp[$divisionName][$fullName][$companyName][$row['month']]))
237 $prepComp[$divisionName][$fullName][$companyName][$row['month']] = array();
239 if (!isset($prepComp[$divisionName][$fullName][$companyName][$row['month']][$combo]))
241 $prepComp[$divisionName][$fullName][$companyName][$row['month']][$combo] = $row;
244 $this->_data['TradeCenterData'] = $centers;
248 foreach ($prepDvsn as $division => $row1)
250 $output[$division] = array();
251 foreach ($row1 as $manager => $row2)
253 $output[$division][$manager] = array();
254 foreach ($row2 as $month => $row3)
256 $output[$division][$manager][$month] = array(
261 foreach ($row3 as $combo => $data)
263 $output[$division][$manager][$month][$data['jobState']]++;
269 $this->_data['DivisionData'] = $output;
273 foreach ($prepComp as $division => $row1)
275 $output[$division] = array();
276 foreach ($row1 as $manager => $row2)
278 $output[$division][$manager] = array();
279 foreach ($row2 as $company => $row3)
281 $output[$division][$manager][$company] = array();
282 foreach ($row3 as $month => $row4)
284 $output[$division][$manager][$company][$month] = array(
289 foreach ($row4 as $combo => $data)
291 $output[$division][$manager][$company][$month][$data['jobState']]++;
298 $this->_data['CompanyData'] = $output;
301 $this->_queries['year'] = $year;