123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886 |
- <?php
- /**
- * Customizable warehouse items sales report
- */
- class WHSales {
- /**
- * Warehouse instance placeholder
- *
- * @var object
- */
- protected $warehouse = '';
- /**
- * System messages helper instance placeholder
- *
- * @var object
- */
- protected $messages = '';
- /**
- * Sub-reports database abstraction layer
- *
- * @var object
- */
- protected $reportsDb = '';
- /**
- * Sub-reports itemtypes abstraction layer
- *
- * @var object
- */
- protected $reportItemsDb = '';
- /**
- * Contains all available warehouse item types as id=>itemtypeData
- *
- * @var array
- */
- protected $allItemTypes = array();
- /**
- * Contains all available item type names as id=>itemTypeName
- *
- * @var array
- */
- protected $allItemTypeNames = array();
- /**
- * Contains all item types categories as itemtypeId=>categoryName
- *
- * @var array
- */
- protected $allItemCategories = array();
- /**
- * Contains all available sales sub-reports as id=>reportItemTypes[itemTypeId]=>recordId
- *
- * @var array
- */
- protected $allReports = array();
- /**
- * Contains all available sales sub-reports names as id=>name
- *
- * @var array
- */
- protected $allReportNames = array();
- /**
- * Contains year to render data
- *
- * @var int
- */
- protected $showYear = '';
- /**
- * Some predefined constants like routes, URLs, etc here
- */
- const TABLE_SUBREPORTS = 'wh_salesreports';
- const TABLE_REPORT_ITEMS = 'wh_salesitems';
- const RIGHT_EDIT = 'WAREHOUSEDIR';
- const URL_ME = '?module=whsales';
- const ROUTE_REPORT_RENDER = 'viewreport';
- const ROUTE_REPORT_EDIT = 'editreportid';
- const ROUTE_REPORT_DEL = 'deletereportid';
- const ROUTE_ITEM_DEL = 'deletereportitemid';
- const PROUTE_NEWREPORT = 'newreportname';
- const PROUTE_EDITREPORTNAME = 'editreportname';
- const PROUTE_NEWREPORTITEM = 'addnewitemtoreportid';
- const PROUTE_NEWREPORTITEMID = 'addthisitemtoreport';
- const PROUTE_YEAR = 'settargetyear';
- public function __construct() {
- $this->initMessages();
- $this->setYear();
- $this->initWarehouse();
- $this->initReportsDb();
- $this->initReportsItemsDb();
- $this->loadItemTypes();
- $this->loadReports();
- }
- /**
- * Inits warehouse instance for further usage
- *
- * @return void
- */
- protected function initWarehouse() {
- $this->warehouse = new Warehouse();
- }
- /**
- * Inits message helper
- *
- * @return void
- */
- protected function initMessages() {
- $this->messages = new UbillingMessageHelper();
- }
- /**
- * Inits sub-reports database layer
- *
- * @return void
- */
- protected function initReportsDb() {
- $this->reportsDb = new NyanORM(self::TABLE_SUBREPORTS);
- }
- /**
- * Sets current instance target year
- *
- * @return void
- */
- protected function setYear() {
- if (ubRouting::checkPost(self::PROUTE_YEAR)) {
- $this->showYear = ubRouting::post(self::PROUTE_YEAR, 'int');
- } else {
- $this->showYear = curyear();
- }
- }
- /**
- * Inits sub-reports database layer
- *
- * @return void
- */
- protected function initReportsItemsDb() {
- $this->reportItemsDb = new NyanORM(self::TABLE_REPORT_ITEMS);
- }
- /**
- * Loads all existing itemtypes and categories from warehouse
- *
- * @return void
- */
- protected function loadItemTypes() {
- $this->allItemTypes = $this->warehouse->getAllItemTypes();
- $categoriesTmp = $this->warehouse->getAllItemCategories();
- if (!empty($this->allItemTypes)) {
- foreach ($this->allItemTypes as $io => $each) {
- $this->allItemTypeNames[$each['id']] = $each['name'];
- if (isset($categoriesTmp[$each['categoryid']])) {
- $this->allItemCategories[$each['id']] = $categoriesTmp[$each['categoryid']];
- }
- }
- }
- }
- /**
- * Loads all existing reports
- *
- * @return void
- */
- protected function loadReports() {
- $tmpReportNames = $this->reportsDb->getAll();
- if (!empty($tmpReportNames)) {
- foreach ($tmpReportNames as $io => $each) {
- $this->allReportNames[$each['id']] = $each['name'];
- $this->allReports[$each['id']] = array();
- }
- }
- $tmpReportTypes = $this->reportItemsDb->getAll();
- if (!empty($tmpReportTypes)) {
- foreach ($tmpReportTypes as $io => $each) {
- $this->allReports[$each['reportid']][$each['itemtypeid']] = $each['id'];
- }
- }
- }
- /**
- * Renders available sub-reports list with some controls
- *
- * @return string
- */
- public function renderReportsList() {
- $result = '';
- if (!empty($this->allReportNames)) {
- $cells = wf_TableCell(__('Report'));
- if (cfr(self::RIGHT_EDIT)) {
- $cells .= wf_TableCell(__('Actions'));
- }
- $rows = wf_TableRow($cells, 'row1');
- foreach ($this->allReportNames as $eachId => $eachReportName) {
- $cells = wf_TableCell(wf_Link(self::URL_ME . '&' . self::ROUTE_REPORT_RENDER . '=' . $eachId, $eachReportName));
- if (cfr(self::RIGHT_EDIT)) {
- $delUrl = self::URL_ME . '&' . self::ROUTE_REPORT_DEL . '=' . $eachId;
- $editUrl = self::URL_ME . '&' . self::ROUTE_REPORT_EDIT . '=' . $eachId;
- $actControls = wf_JSAlert($delUrl, web_delete_icon(), $this->messages->getDeleteAlert()) . ' ';
- $actControls .= wf_Link($editUrl, web_edit_icon());
- $cells .= wf_TableCell($actControls);
- }
- $rows .= wf_TableRow($cells, 'row5');
- }
- $result .= wf_TableBody($rows, '100%', 0, 'sortable');
- } else {
- $result .= $this->messages->getStyledMessage(__('Nothing to show'), 'warning');
- }
- return($result);
- }
- /**
- * Creates new sales sub-report in database
- *
- * @param string $name
- *
- * @return void/string
- */
- public function createReport($name) {
- $nameF = ubRouting::filters($name, 'mres');
- $result = '';
- if (!empty($nameF)) {
- $this->reportsDb->data('name', $nameF);
- $this->reportsDb->create();
- $newId = $this->reportsDb->getLastId();
- log_register('WHSALES CREATE REPORT `' . $name . '` AS [' . $newId . ']');
- } else {
- $result .= __('Name') . ' ' . __('is empty');
- }
- return($result);
- }
- /**
- * Renames sales sub-report in database
- *
- * @param int $reportId
- * @param string $name
- *
- * @return void/string
- */
- public function renameReport($reportId, $name) {
- $reportId = ubRouting::filters($reportId, 'int');
- $nameF = ubRouting::filters($name, 'mres');
- $result = '';
- if (!empty($nameF) AND ! empty($reportId)) {
- $this->reportsDb->where('id', '=', $reportId);
- $this->reportsDb->data('name', $nameF);
- $this->reportsDb->save();
- log_register('WHSALES RENAME REPORT `' . $name . '` AS [' . $reportId . ']');
- } else {
- $result .= __('Name') . ' ' . __('is empty');
- }
- return($result);
- }
- /**
- * Deletes existing report from database
- *
- * @param int $reportId
- *
- * @return void/error
- */
- public function deleteReport($reportId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $result = '';
- if (!empty($reportId)) {
- if (isset($this->allReportNames[$reportId])) {
- $reportName = $this->allReportNames[$reportId];
- //flushing report
- $this->reportsDb->where('id', '=', $reportId);
- $this->reportsDb->delete();
- //flushing itemtypes
- $this->reportItemsDb->where('reportid', '=', $reportId);
- $this->reportItemsDb->delete();
- log_register('WHSALES DELETE REPORT `' . $reportName . '` AS [' . $reportId . ']');
- } else {
- $result .= __('Report') . ' ' . __('ID') . ' [' . $reportId . '] ' . __('Not exists');
- }
- } else {
- $result .= __('Report') . ' ' . __('ID') . ' ' . __('is empty');
- }
- return($result);
- }
- /**
- * Renders new report creation form
- *
- * @return string
- */
- public function renderCreationForm() {
- $result = '';
- if (cfr(self::RIGHT_EDIT)) {
- $inputs = wf_TextInput(self::PROUTE_NEWREPORT, __('Name'), '', false, 20);
- $inputs .= wf_Submit(__('Create'));
- $form = wf_Form('', 'POST', $inputs, 'glamour');
- $result .= wf_modalAuto(web_icon_create(__('Create new report')), __('Create new report'), $form);
- }
- return($result);
- }
- /**
- * Renders form for addition some new item type to existing report
- *
- * @param int $reportId
- *
- * @return string
- */
- protected function renderItemTypeAddForm($reportId) {
- $result = '';
- $itemsAvail = $this->allItemTypeNames;
- if (isset($this->allReports[$reportId])) {
- //report exists?
- foreach ($this->allReports[$reportId] as $eachItemTypeId => $eachRecordId) {
- if (isset($itemsAvail[$eachItemTypeId])) {
- //already in report
- unset($itemsAvail[$eachItemTypeId]);
- }
- }
- if (!empty($itemsAvail)) {
- $itemsSelector = array();
- //appending category to selector
- foreach ($itemsAvail as $eachItemTypeId => $eachItemTypeName) {
- $itemCategory = (isset($this->allItemCategories[$eachItemTypeId])) ? $this->allItemCategories[$eachItemTypeId] . ' ' : '';
- $itemsSelector[$eachItemTypeId] = $itemCategory . $eachItemTypeName;
- }
- $inputs = wf_HiddenInput(self::PROUTE_NEWREPORTITEM, $reportId);
- $inputs .= wf_SelectorSearchable(self::PROUTE_NEWREPORTITEMID, $itemsSelector, __('Warehouse item type'), '', false) . ' ';
- $inputs .= wf_Submit(__('Append'));
- $result .= wf_Form('', 'POST', $inputs, 'glamour');
- }
- }
- return($result);
- }
- /**
- * Returns item type name by its ID if it exists
- *
- * @param int $itemTypeId
- *
- * @return string
- */
- protected function getItemName($itemTypeId) {
- $result = '';
- if (isset($this->allItemTypeNames[$itemTypeId])) {
- $result = $this->allItemTypeNames[$itemTypeId];
- }
- return($result);
- }
- /**
- * Deletes some itemtype record ID from database
- *
- * @param int $reportId
- * @param int $itemRecordId
- *
- * @return void
- */
- public function deleteReportItem($reportId, $itemRecordId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $itemRecordId = ubRouting::filters($itemRecordId, 'int');
- $this->reportItemsDb->where('id', '=', $itemRecordId);
- $this->reportItemsDb->delete();
- log_register('WHSALES DELETE REPORT [' . $reportId . '] ITEMRECID [' . $itemRecordId . ']');
- }
- /**
- * Appends some itemtype record to existing report
- *
- * @param int $reportId
- * @param int $itemTypeId
- *
- * @return void/string on error
- */
- public function addReportItem($reportId, $itemTypeId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $itemTypeId = ubRouting::filters($itemTypeId, 'int');
- $result = '';
- if (isset($this->allReports[$reportId])) {
- if (isset($this->allItemTypes[$itemTypeId])) {
- $this->reportItemsDb->data('reportid', $reportId);
- $this->reportItemsDb->data('itemtypeid', $itemTypeId);
- $this->reportItemsDb->create();
- $newRecId = $this->reportItemsDb->getLastId();
- log_register('WHSALES ADD REPORT [' . $reportId . '] ITEMTYPE [' . $itemTypeId . '] AS ITEMRECID [' . $newRecId . ']');
- }
- }
- return($result);
- }
- /**
- * Renders report rename form
- *
- * @param int $reportId
- *
- * @return string
- */
- protected function renderRenameForm($reportId) {
- $result = '';
- $reportId = ubRouting::filters($reportId, 'int');
- if (isset($this->allReports[$reportId])) {
- $inputs = wf_TextInput(self::PROUTE_EDITREPORTNAME, __('Name'), $this->getReportName($reportId), false, 20);
- $inputs .= wf_Submit(__('Save'));
- $result .= wf_Form('', 'POST', $inputs, 'glamour');
- }
- return($result);
- }
- /**
- * Renders existing report editing form
- *
- * @param int $reportId
- *
- * @return string
- */
- public function renderEditForm($reportId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $result = '';
- if (isset($this->allReports[$reportId])) {
- $reportItemTypes = $this->allReports[$reportId];
- //rename form
- $result .= $this->renderRenameForm($reportId);
- $result .= wf_delimiter(0);
- if (!empty($this->allItemTypes)) {
- //list of itemtypes in report
- if (!empty($reportItemTypes)) {
- $cells = wf_TableCell(__('Category'));
- $cells .= wf_TableCell(__('Warehouse item type'));
- $cells .= wf_TableCell(__('Actions'));
- $rows = wf_TableRow($cells, 'row1');
- foreach ($reportItemTypes as $eachItemTypeId => $eachItmRecordId) {
- $eachItemCategory = (isset($this->allItemCategories[$eachItemTypeId])) ? $this->allItemCategories[$eachItemTypeId] : '';
- $cells = wf_TableCell($eachItemCategory);
- $cells .= wf_TableCell($this->getItemName($eachItemTypeId));
- $delUrl = self::URL_ME . '&' . self::ROUTE_REPORT_EDIT . '=' . $reportId . '&' . self::ROUTE_ITEM_DEL . '=' . $eachItmRecordId;
- $actLinks = wf_JSAlert($delUrl, web_delete_icon(), $this->messages->getDeleteAlert());
- $cells .= wf_TableCell($actLinks);
- $rows .= wf_TableRow($cells, 'row5');
- }
- $result .= wf_TableBody($rows, '100%', 0, 'sortable');
- } else {
- $result .= $this->messages->getStyledMessage(__('Report doesnt contain any item types'), 'info');
- }
- //append form
- $result .= wf_delimiter(0);
- $result .= $this->renderItemTypeAddForm($reportId);
- } else {
- $result .= $this->messages->getStyledMessage(__('Warehouse item types') . ' ' . __('Not found'), 'warning');
- }
- } else {
- $result .= $this->messages->getStyledMessage(__('Report') . ' ' . __('ID') . ' [' . $reportId . '] ' . __('Not exists'), 'error');
- }
- return($result);
- }
- /**
- * Returns existing report name by its ID
- *
- * @return string
- */
- public function getReportName($reportId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $result = '';
- if (isset($this->allReportNames[$reportId])) {
- $result .= $this->allReportNames[$reportId];
- }
- return($result);
- }
- /**
- * Removes from outcomes non rendered years, move operations, not report itemtypes, etc
- *
- * @param array $allOutcomes
- * @param array $reportItemIds
- *
- * @return array
- */
- protected function filterOutcomes($allOutcomes, $reportItemIds) {
- $result = array();
- $yearMask = $this->showYear . '-';
- if (!empty($allOutcomes)) {
- foreach ($allOutcomes as $io => $each) {
- if (isset($reportItemIds[$each['itemtypeid']])) {
- //ignore storage movements, mistakes or cancellations
- if ($each['desttype'] != 'storage' AND
- $each['desttype'] != 'mistake' AND
- $each['desttype'] != 'cancellation'AND
- ispos($each['date'], $yearMask)) {
- $result[$io] = $each;
- }
- }
- }
- }
- return($result);
- }
- /**
- * Renders year selector form
- *
- * @return string
- */
- protected function renderYearSelector() {
- $result = '';
- $inputs = wf_YearSelectorPreset(self::PROUTE_YEAR, __('Year'), false, ubRouting::post(self::PROUTE_YEAR)) . ' ';
- $inputs .= wf_Submit(__('Show'));
- $result .= wf_Form('', 'POST', $inputs, 'glamour');
- return($result);
- }
- /**
- * Returns selling stats by some itemTypeID from outcomes array
- *
- * @param string $fromDate
- * @param string $toDate
- * @param int $itemTypeId
- * @param array $allOutcomes
- *
- * @return array
- */
- protected function getItemTypeStat($fromDate, $toDate, $itemTypeId, $allOutcomes) {
- $result = array(
- 'count' => 0,
- 'price' => 0,
- 'summ' => 0
- );
- if (!empty($allOutcomes)) {
- foreach ($allOutcomes as $io => $each) {
- if ($each['itemtypeid'] == $itemTypeId) {
- if (zb_isDateBetween($fromDate, $toDate, $each['date'])) {
- $result['count'] += $each['count'];
- $result['price'] = $each['price'];
- $result['summ'] += ($each['price'] * $each['count']);
- }
- }
- }
- }
- return($result);
- }
- /**
- * Render sold items year chart
- *
- * @param array $allOutcomes
- *
- * @return string
- */
- protected function renderChartCount($allOutcomes) {
- $result = '';
- $chartData = array();
- $chartData[] = array(__('Month'), __('Count'));
- if (!empty($allOutcomes)) {
- $sellStats = array();
- $chartOptions = "
- 'focusTarget': 'category',
- 'hAxis': {
- 'color': 'none',
- 'baselineColor': 'none',
- },
- 'vAxis': {
- 'color': 'none',
- 'baselineColor': 'none',
- },
- 'curveType': 'function',
- 'pointSize': 3,
- 'crosshair': {
- trigger: 'none'
- },";
- foreach ($allOutcomes as $io => $each) {
- $monthNum = date("Y-m", strtotime($each['date']));
- if (isset($sellStats[$monthNum])) {
- $sellStats[$monthNum] += $each['count'];
- } else {
- $sellStats[$monthNum] = $each['count'];
- }
- }
- if (!empty($sellStats)) {
- foreach ($sellStats as $eachMonth => $monthStat) {
- $chartData[] = array($eachMonth, $monthStat);
- }
- }
- if (sizeof($chartData) > 1) {
- $result .= wf_gchartsLine($chartData, __('Count'), '100%;', '300px;', $chartOptions);
- }
- }
- return($result);
- }
- /**
- * Render sold items year profit chart
- *
- * @param array $allOutcomes
- *
- * @return string
- */
- protected function renderChartProfit($allOutcomes) {
- $result = '';
- $chartData = array();
- $chartData[] = array(__('Month'), __('Money'));
- if (!empty($allOutcomes)) {
- $sellStats = array();
- $chartOptions = "
- 'focusTarget': 'category',
- 'hAxis': {
- 'color': 'none',
- 'baselineColor': 'none',
- },
- 'vAxis': {
- 'color': 'none',
- 'baselineColor': 'none',
- },
- 'curveType': 'function',
- 'pointSize': 3,
- 'crosshair': {
- trigger: 'none'
- },";
- foreach ($allOutcomes as $io => $each) {
- $monthNum = date("Y-m", strtotime($each['date']));
- if (isset($sellStats[$monthNum])) {
- $sellStats[$monthNum] += ($each['price'] * $each['count']);
- } else {
- $sellStats[$monthNum] = ($each['price'] * $each['count']);
- }
- }
- if (!empty($sellStats)) {
- foreach ($sellStats as $eachMonth => $monthStat) {
- $chartData[] = array($eachMonth, $monthStat);
- }
- }
- if (sizeof($chartData) > 1) {
- $result .= wf_gchartsLine($chartData, __('Money'), '100%;', '300px;', $chartOptions);
- }
- }
- return($result);
- }
- /**
- * Renders existing sales report
- *
- * @param int $reportId
- *
- * @return string
- */
- public function renderReport($reportId) {
- $reportId = ubRouting::filters($reportId, 'int');
- $result = '';
- //default date intervals setting
- $dateCurrentDay = curdate();
- $dateMonthBegin = curmonth() . '-01';
- $dateMonthEnd = curmonth() . '-' . date("t");
- $dateWeekBegin = date("Y-m-d", strtotime('monday this week'));
- $dateWeekEnd = date("Y-m-d", strtotime('sunday this week'));
- $dateYearBegin = $this->showYear . '-01-01';
- $dateYearEnd = $this->showYear . '-12-31';
- //year selector here
- $result .= $this->renderYearSelector();
- $result .= wf_delimiter(0);
- if (isset($this->allReports[$reportId])) {
- //here itemtypeId=>midprice
- $midPrices = array();
- $reportItemIds = $this->allReports[$reportId];
- if (!empty($reportItemIds)) {
- foreach ($reportItemIds as $eachItemId => $eachRecId) {
- $eachItemMidPrice = $this->warehouse->getIncomeMiddlePrice($eachItemId);
- $midPrices[$eachItemId] = $eachItemMidPrice;
- }
- $allOutcomes = $this->warehouse->getAllOutcomes();
- $yearOutcomes = $this->filterOutcomes($allOutcomes, $reportItemIds);
- if (!empty($yearOutcomes)) {
- $sellStats = array(
- 'summarycount' => array(
- 'day' => 0,
- 'week' => 0,
- 'month' => 0,
- 'year' => 0,
- ),
- 'summaryprice' => array(
- 'day' => 0,
- 'week' => 0,
- 'month' => 0,
- 'year' => 0,
- ),
- );
- //sold item counts
- $cells = wf_TableCell(__('Warehouse item type'), '40%');
- $cells .= wf_TableCell(__('Day'), '15%');
- $cells .= wf_TableCell(__('Week'), '15%');
- $cells .= wf_TableCell(__('Month'), '15%');
- $cells .= wf_TableCell(__('Year'), '15%');
- $rows = wf_TableRow($cells, 'row1');
- foreach ($reportItemIds as $eachItemId => $eachRecId) {
- $sellStats['day'] = $this->getItemTypeStat($dateCurrentDay, $dateCurrentDay, $eachItemId, $yearOutcomes);
- $sellStats['week'] = $this->getItemTypeStat($dateWeekBegin, $dateWeekEnd, $eachItemId, $yearOutcomes);
- $sellStats['month'] = $this->getItemTypeStat($dateMonthBegin, $dateMonthEnd, $eachItemId, $yearOutcomes);
- $sellStats['year'] = $this->getItemTypeStat($dateYearBegin, $dateYearEnd, $eachItemId, $yearOutcomes);
- $sellStats['summarycount']['day'] += $sellStats['day']['count'];
- $sellStats['summarycount']['week'] += $sellStats['week']['count'];
- $sellStats['summarycount']['month'] += $sellStats['month']['count'];
- $sellStats['summarycount']['year'] += $sellStats['year']['count'];
- $cells = wf_TableCell($this->allItemTypeNames[$eachItemId]);
- $cells .= wf_TableCell($sellStats['day']['count']);
- $cells .= wf_TableCell($sellStats['week']['count']);
- $cells .= wf_TableCell($sellStats['month']['count']);
- $cells .= wf_TableCell($sellStats['year']['count']);
- $rows .= wf_TableRow($cells, 'row5');
- }
- $cells = wf_TableCell(wf_tag('b') . __('Total') . ' ' . __('pieces') . wf_tag('b', true));
- $cells .= wf_TableCell($sellStats['summarycount']['day']);
- $cells .= wf_TableCell($sellStats['summarycount']['week']);
- $cells .= wf_TableCell($sellStats['summarycount']['month']);
- $cells .= wf_TableCell($sellStats['summarycount']['year']);
- $rows .= wf_TableRow($cells, 'row2');
- $result .= wf_tag('h2') . __('Count') . wf_tag('h2', true);
- $result .= wf_TableBody($rows, '100%', 0, '');
- $result .= wf_delimiter(0);
- //sold items prices
- $cells = wf_TableCell(__('Warehouse item type'), '40%');
- $cells .= wf_TableCell(__('Day'), '15%');
- $cells .= wf_TableCell(__('Week'), '15%');
- $cells .= wf_TableCell(__('Month'), '15%');
- $cells .= wf_TableCell(__('Year'), '15%');
- $rows = wf_TableRow($cells, 'row1');
- foreach ($reportItemIds as $eachItemId => $eachRecId) {
- $sellStats['day'] = $this->getItemTypeStat($dateCurrentDay, $dateCurrentDay, $eachItemId, $yearOutcomes);
- $sellStats['week'] = $this->getItemTypeStat($dateWeekBegin, $dateWeekEnd, $eachItemId, $yearOutcomes);
- $sellStats['month'] = $this->getItemTypeStat($dateMonthBegin, $dateMonthEnd, $eachItemId, $yearOutcomes);
- $sellStats['year'] = $this->getItemTypeStat($dateYearBegin, $dateYearEnd, $eachItemId, $yearOutcomes);
- $sellStats['summaryprice']['day'] += $sellStats['day']['summ'];
- $sellStats['summaryprice']['week'] += $sellStats['week']['summ'];
- $sellStats['summaryprice']['month'] += $sellStats['month']['summ'];
- $sellStats['summaryprice']['year'] += $sellStats['year']['summ'];
- $cells = wf_TableCell($this->allItemTypeNames[$eachItemId]);
- $cells .= wf_TableCell($sellStats['day']['summ']);
- $cells .= wf_TableCell($sellStats['week']['summ']);
- $cells .= wf_TableCell($sellStats['month']['summ']);
- $cells .= wf_TableCell(round($sellStats['year']['summ']));
- $rows .= wf_TableRow($cells, 'row5');
- }
- $cells = wf_TableCell(wf_tag('b') . __('Total') . ' ' . __('money') . wf_tag('b', true));
- $cells .= wf_TableCell($sellStats['summaryprice']['day']);
- $cells .= wf_TableCell($sellStats['summaryprice']['week']);
- $cells .= wf_TableCell($sellStats['summaryprice']['month']);
- $cells .= wf_TableCell(zb_CashBigValueFormat(round($sellStats['summaryprice']['year'])));
- $rows .= wf_TableRow($cells, 'row2');
- $result .= wf_tag('h2') . __('Money') . wf_tag('h2', true);
- $result .= wf_TableBody($rows, '100%', 0, '');
- $result .= wf_delimiter(0);
- //profit prediction
- $cells = wf_TableCell(__('Warehouse item type'), '40%');
- $cells .= wf_TableCell(__('Day'), '15%');
- $cells .= wf_TableCell(__('Week'), '15%');
- $cells .= wf_TableCell(__('Month'), '15%');
- $cells .= wf_TableCell(__('Year'), '15%');
- $rows = wf_TableRow($cells, 'row1');
- $sellStats = array(
- 'summarycount' => array(
- 'day' => 0,
- 'week' => 0,
- 'month' => 0,
- 'year' => 0,
- ),
- 'summaryprice' => array(
- 'day' => 0,
- 'week' => 0,
- 'month' => 0,
- 'year' => 0,
- ),
- );
- $profitStats = array(
- 'day' => 0,
- 'week' => 0,
- 'month' => 0,
- 'year' => 0,
- 'sumday' => 0,
- 'sumweek' => 0,
- 'summonth' => 0,
- 'sumyear' => 0,
- );
- foreach ($reportItemIds as $eachItemId => $eachRecId) {
- $sellStats['day'] = $this->getItemTypeStat($dateCurrentDay, $dateCurrentDay, $eachItemId, $yearOutcomes);
- $sellStats['week'] = $this->getItemTypeStat($dateWeekBegin, $dateWeekEnd, $eachItemId, $yearOutcomes);
- $sellStats['month'] = $this->getItemTypeStat($dateMonthBegin, $dateMonthEnd, $eachItemId, $yearOutcomes);
- $sellStats['year'] = $this->getItemTypeStat($dateYearBegin, $dateYearEnd, $eachItemId, $yearOutcomes);
- $sellStats['summarycount']['day'] += $sellStats['day']['count'];
- $sellStats['summarycount']['week'] += $sellStats['week']['count'];
- $sellStats['summarycount']['month'] += $sellStats['month']['count'];
- $sellStats['summarycount']['year'] += $sellStats['year']['count'];
- $sellStats['summaryprice']['day'] += $sellStats['day']['summ'];
- $sellStats['summaryprice']['week'] += $sellStats['week']['summ'];
- $sellStats['summaryprice']['month'] += $sellStats['month']['summ'];
- $sellStats['summaryprice']['year'] += $sellStats['year']['summ'];
- $profitStats['day'] = $sellStats['day']['summ'] - ($sellStats['day']['count'] * $midPrices[$eachItemId]);
- $profitStats['week'] = $sellStats['week']['summ'] - ($sellStats['week']['count'] * $midPrices[$eachItemId]);
- $profitStats['month'] = $sellStats['month']['summ'] - ($sellStats['month']['count'] * $midPrices[$eachItemId]);
- $profitStats['year'] = $sellStats['year']['summ'] - ($sellStats['year']['count'] * $midPrices[$eachItemId]);
- $profitStats['sumday'] += $profitStats['day'];
- $profitStats['sumweek'] += $profitStats['week'];
- $profitStats['summonth'] += $profitStats['month'];
- $profitStats['sumyear'] += $profitStats['year'];
- $cells = wf_TableCell($this->allItemTypeNames[$eachItemId] . ' (' . __('middle price') . ' ' . $midPrices[$eachItemId] . ')');
- $cells .= wf_TableCell($profitStats['day']);
- $cells .= wf_TableCell($profitStats['week']);
- $cells .= wf_TableCell($profitStats['month']);
- $cells .= wf_TableCell(round($profitStats['year']));
- $rows .= wf_TableRow($cells, 'row5');
- }
- $cells = wf_TableCell(wf_tag('b') . __('Total') . ' ' . __('Profit') . ' ~' . wf_tag('b', true));
- $cells .= wf_TableCell($profitStats['sumday']);
- $cells .= wf_TableCell($profitStats['sumweek']);
- $cells .= wf_TableCell($profitStats['summonth']);
- $cells .= wf_TableCell(zb_CashBigValueFormat(round($profitStats['sumyear'])));
- $rows .= wf_TableRow($cells, 'row2');
- $result .= wf_tag('h2') . __('Profit') . wf_tag('h2', true);
- $result .= wf_TableBody($rows, '100%', 0, '');
- $result .= wf_delimiter(0);
- //some charts here
- $result .= $this->renderChartCount($yearOutcomes);
- $result .= $this->renderChartProfit($yearOutcomes);
- } else {
- $result .= $this->messages->getStyledMessage(__('Nothing to show'), 'info');
- }
- } else {
- $result .= $this->messages->getStyledMessage(__('Report doesnt contain any item types'), 'info');
- }
- } else {
- $result .= $this->messages->getStyledMessage(__('Report') . ' ' . __('ID') . ' [' . $reportId . '] ' . __('Not exists'), 'error');
- }
- $result .= wf_delimiter(0);
- $result .= wf_BackLink(self::URL_ME);
- return($result);
- }
- }
|