From 339c7f920b1b7904cfedefa845624c8b19a7a8be Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Tue, 27 Feb 2018 22:52:57 +0200 Subject: [PATCH] Adding charts to reports --- app/Models/Activity.php | 67 +++++++++++++++++++ app/Ninja/Reports/AbstractReport.php | 15 +++++ app/Ninja/Reports/ActivityReport.php | 9 ++- resources/lang/en/texts.php | 1 + .../views/reports/chart_builder.blade.php | 1 - .../views/reports/report_builder.blade.php | 24 +++++-- 6 files changed, 111 insertions(+), 6 deletions(-) diff --git a/app/Models/Activity.php b/app/Models/Activity.php index 43b9fff4795e..c5902048d40e 100644 --- a/app/Models/Activity.php +++ b/app/Models/Activity.php @@ -137,4 +137,71 @@ class Activity extends Eloquent return trans("texts.activity_{$activityTypeId}", $data); } + + public function relatedEntityType() + { + switch ($this->activity_type_id) { + case ACTIVITY_TYPE_CREATE_CLIENT: + case ACTIVITY_TYPE_ARCHIVE_CLIENT: + case ACTIVITY_TYPE_DELETE_CLIENT: + case ACTIVITY_TYPE_RESTORE_CLIENT: + case ACTIVITY_TYPE_CREATE_CREDIT: + case ACTIVITY_TYPE_ARCHIVE_CREDIT: + case ACTIVITY_TYPE_DELETE_CREDIT: + case ACTIVITY_TYPE_RESTORE_CREDIT: + return ENTITY_CLIENT; + break; + + case ACTIVITY_TYPE_CREATE_INVOICE: + case ACTIVITY_TYPE_UPDATE_INVOICE: + case ACTIVITY_TYPE_EMAIL_INVOICE: + case ACTIVITY_TYPE_VIEW_INVOICE: + case ACTIVITY_TYPE_ARCHIVE_INVOICE: + case ACTIVITY_TYPE_DELETE_INVOICE: + case ACTIVITY_TYPE_RESTORE_INVOICE: + return ENTITY_INVOICE; + break; + + case ACTIVITY_TYPE_CREATE_PAYMENT: + case ACTIVITY_TYPE_ARCHIVE_PAYMENT: + case ACTIVITY_TYPE_DELETE_PAYMENT: + case ACTIVITY_TYPE_RESTORE_PAYMENT: + case ACTIVITY_TYPE_VOIDED_PAYMENT: + case ACTIVITY_TYPE_REFUNDED_PAYMENT: + case ACTIVITY_TYPE_FAILED_PAYMENT: + return ENTITY_PAYMENT; + break; + + case ACTIVITY_TYPE_CREATE_QUOTE: + case ACTIVITY_TYPE_UPDATE_QUOTE: + case ACTIVITY_TYPE_EMAIL_QUOTE: + case ACTIVITY_TYPE_VIEW_QUOTE: + case ACTIVITY_TYPE_ARCHIVE_QUOTE: + case ACTIVITY_TYPE_DELETE_QUOTE: + case ACTIVITY_TYPE_RESTORE_QUOTE: + case ACTIVITY_TYPE_APPROVE_QUOTE: + return ENTITY_QUOTE; + break; + + case ACTIVITY_TYPE_CREATE_VENDOR: + case ACTIVITY_TYPE_ARCHIVE_VENDOR: + case ACTIVITY_TYPE_DELETE_VENDOR: + case ACTIVITY_TYPE_RESTORE_VENDOR: + case ACTIVITY_TYPE_CREATE_EXPENSE: + case ACTIVITY_TYPE_ARCHIVE_EXPENSE: + case ACTIVITY_TYPE_DELETE_EXPENSE: + case ACTIVITY_TYPE_RESTORE_EXPENSE: + case ACTIVITY_TYPE_UPDATE_EXPENSE: + return ENTITY_EXPENSE; + break; + + case ACTIVITY_TYPE_CREATE_TASK: + case ACTIVITY_TYPE_UPDATE_TASK: + case ACTIVITY_TYPE_ARCHIVE_TASK: + case ACTIVITY_TYPE_DELETE_TASK: + case ACTIVITY_TYPE_RESTORE_TASK: + return ENTITY_TASK; + break; + } + } } diff --git a/app/Ninja/Reports/AbstractReport.php b/app/Ninja/Reports/AbstractReport.php index 1426d38a1090..498a3fdeef24 100644 --- a/app/Ninja/Reports/AbstractReport.php +++ b/app/Ninja/Reports/AbstractReport.php @@ -146,6 +146,21 @@ class AbstractReport return join('', $reportParts); } + protected function getDimension($entity) + { + $subgroup = $this->options['subgroup']; + + if ($subgroup == 'user') { + return $entity->user->getDisplayName(); + } elseif ($subgroup == 'client') { + if ($entity->client) { + return $entity->client->getDisplayName(); + } else { + return trans('texts.unset'); + } + } + } + protected function addChartData($dimension, $date, $amount) { if (! isset($this->chartData[$dimension])) { diff --git a/app/Ninja/Reports/ActivityReport.php b/app/Ninja/Reports/ActivityReport.php index c3ba29583303..0ce8113273e4 100644 --- a/app/Ninja/Reports/ActivityReport.php +++ b/app/Ninja/Reports/ActivityReport.php @@ -23,6 +23,7 @@ class ActivityReport extends AbstractReport $startDate = $this->startDate;; $endDate = $this->endDate; + $subgroup = $this->options['subgroup']; $activities = Activity::scope() ->with('client.contacts', 'user', 'invoice', 'payment', 'credit', 'task', 'expense', 'account') @@ -38,7 +39,13 @@ class ActivityReport extends AbstractReport $this->isExport ? strip_tags($activity->getMessage()) : $activity->getMessage(), ]; - $this->addChartData(ENTITY_ACTIVITY, $activity->created_at, 1); + if ($subgroup == 'category') { + $dimension = trans('texts.' . $activity->relatedEntityType()); + } else { + $dimension = $this->getDimension($activity); + } + + $this->addChartData($dimension, $activity->created_at, 1); } //dd($this->getChartData()); diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index 24263f36f9d7..3eb0139e8e76 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -2766,6 +2766,7 @@ $LANG = array( 'webmail' => 'Webmail', 'group' => 'Group', 'subgroup' => 'Subgroup', + 'unset' => 'Unset', ); diff --git a/resources/views/reports/chart_builder.blade.php b/resources/views/reports/chart_builder.blade.php index becc7b69f553..f5cc167ed383 100644 --- a/resources/views/reports/chart_builder.blade.php +++ b/resources/views/reports/chart_builder.blade.php @@ -105,7 +105,6 @@ function loadPieChart(data) { $(function() { var lineChartData = {!! json_encode($report->getLineChartData()) !!}; loadLineChart(lineChartData); - //console.log(chartData); var pieChartData = {!! json_encode($report->getPieChartData()) !!}; if (pieChartData) { diff --git a/resources/views/reports/report_builder.blade.php b/resources/views/reports/report_builder.blade.php index 8bd17a352aae..dded863bd7d1 100644 --- a/resources/views/reports/report_builder.blade.php +++ b/resources/views/reports/report_builder.blade.php @@ -471,14 +471,13 @@ $subgroup.append(new Option("{{ trans('texts.user') }}", 'user')); - if (['activity', 'expense'].indexOf(reportType) >= 0) { + if (reportType == 'activity') { $subgroup.append(new Option("{{ trans('texts.category') }}", 'category')); - } - - if (reportType == 'aging') { + } else if (reportType == 'aging') { $subgroup.append(new Option("{{ trans('texts.age') }}", 'age')); } else if (reportType == 'expense') { $subgroup.append(new Option("{{ trans('texts.vendor') }}", 'vendor')); + $subgroup.append(new Option("{{ trans('texts.category') }}", 'category')); } else if (reportType == 'payment') { $subgroup.append(new Option("{{ trans('texts.method') }}", 'method')); } else if (reportType == 'profit_and_loss') { @@ -486,6 +485,13 @@ } else if (reportType == 'task') { $subgroup.append(new Option("{{ trans('texts.project') }}", 'project')); } + + if (isStorageSupported()) { + var lastSubgroup = localStorage.getItem('last:report_subgroup'); + if (lastSubgroup) { + $('#subgroup').val(lastSubgroup); + } + } } var sumColumns = []; @@ -542,6 +548,12 @@ } }); + $('#subgroup').change(function() { + if (isStorageSupported()) { + localStorage.setItem('last:report_subgroup', $('#subgroup').val()); + } + }); + // parse 1,000.00 or 1.000,00 function convertStringToNumber(str) { str = str + '' || ''; @@ -643,6 +655,10 @@ if (lastGroup) { $('#group').val(lastGroup); } + var lastSubgroup = localStorage.getItem('last:report_subgroup'); + if (lastSubgroup) { + $('#subgroup').val(lastSubgroup); + } var lastDocumentFilter = localStorage.getItem('last:document_filter'); if (lastDocumentFilter) { $('#document_filter').val(lastDocumentFilter);