From 420a25f801e93557b3b20b1413eb6a5046df96b9 Mon Sep 17 00:00:00 2001 From: diashalabi Date: Tue, 28 Sep 2021 15:37:15 +0300 Subject: [PATCH] #2480 Sales Reports --- .../resources/js/admin/dashboard/report.js | 59 +++++++++++++++++ .../advs-module/resources/lang/en/field.php | 9 +++ .../views/admin/dashboard/report.twig | 64 +++++++++++++++++++ .../advs-module/src/Adv/AdvModel.php | 9 +++ .../src/Adv/Contract/AdvInterface.php | 2 + .../src/AdvsModuleServiceProvider.php | 6 ++ .../assets/js/admin/dashboard/report.js | 19 ++++++ .../resources/lang/en/field.php | 8 +++ .../views/admin/dashboard/report.twig | 50 +++++++++++++++ .../Controller/Admin/ReportController.php | 41 ++++++++++++ .../src/ProfileModuleServiceProvider.php | 4 ++ 11 files changed, 271 insertions(+) create mode 100644 addons/default/visiosoft/advs-module/resources/js/admin/dashboard/report.js create mode 100644 addons/default/visiosoft/advs-module/resources/views/admin/dashboard/report.twig create mode 100644 addons/default/visiosoft/profile-module/resources/assets/js/admin/dashboard/report.js create mode 100644 addons/default/visiosoft/profile-module/resources/views/admin/dashboard/report.twig create mode 100644 addons/default/visiosoft/profile-module/src/Http/Controller/Admin/ReportController.php diff --git a/addons/default/visiosoft/advs-module/resources/js/admin/dashboard/report.js b/addons/default/visiosoft/advs-module/resources/js/admin/dashboard/report.js new file mode 100644 index 000000000..92522a569 --- /dev/null +++ b/addons/default/visiosoft/advs-module/resources/js/admin/dashboard/report.js @@ -0,0 +1,59 @@ +$(document).ready( function () { + $('#stockReport').DataTable({ + ajax: '/admin/api/classified/report/stock', + order: [[ 1, "asc" ]], + columns: [ + { + data: 'name', + render: function ( data, type, row, meta ) { + return ` + + ${data ?? productsReportTrans.undefined_product} + + `; + } + }, + { data: 'stock' }, + ], + }); + + $('#activePassiveReport').DataTable({ + ajax: '/admin/api/classified/report/status', + columns: [ + { data: 'status' }, + { data: 'count' }, + ], + }); + + $('#unexplainedReport').DataTable({ + ajax: '/admin/api/classified/report/unexplained', + columns: [ + { + data: 'name', + render: function ( data, type, row, meta ) { + return ` + + ${data ?? productsReportTrans.undefined_product} + + `; + } + }, + ], + }); + + $('#noImageReport').DataTable({ + ajax: '/admin/api/classified/report/no-image', + columns: [ + { + data: 'name', + render: function ( data, type, row, meta ) { + return ` + + ${data ?? productsReportTrans.undefined_product} + + `; + } + }, + ], + }); +} ); diff --git a/addons/default/visiosoft/advs-module/resources/lang/en/field.php b/addons/default/visiosoft/advs-module/resources/lang/en/field.php index b26c57483..f1ecaee86 100644 --- a/addons/default/visiosoft/advs-module/resources/lang/en/field.php +++ b/addons/default/visiosoft/advs-module/resources/lang/en/field.php @@ -383,4 +383,13 @@ return [ 'name_a_z' => 'Name (A to Z)', 'name_z_a' => 'Name (Z to A)', 'select_lang_ads' => 'select the language of the ads', + + // Report + 'product_stock_report' => 'Product Stock Report', + 'active_passive_products_report' => 'Active-Passive Products Report', + 'unexplained_products_report' => 'Unexplained Products Report', + 'non_image_products_report' => 'Non-Image Products Report', + 'product' => 'Product', + 'count' => 'Count', + 'undefined_product' => 'Undefined Product', ]; diff --git a/addons/default/visiosoft/advs-module/resources/views/admin/dashboard/report.twig b/addons/default/visiosoft/advs-module/resources/views/admin/dashboard/report.twig new file mode 100644 index 000000000..9f7e14ae4 --- /dev/null +++ b/addons/default/visiosoft/advs-module/resources/views/admin/dashboard/report.twig @@ -0,0 +1,64 @@ +
+ {% set reports = [ + { + 'title': trans('visiosoft.module.advs::field.product_stock_report'), + 'id': 'stockReport', + 'columns': [ + trans('visiosoft.module.advs::field.product'), + trans('visiosoft.module.advs::field.stock.name'), + ], + }, + { + 'title': trans('visiosoft.module.advs::field.active_passive_products_report'), + 'id': 'activePassiveReport', + 'columns': [ + trans('visiosoft.module.advs::field.status.name'), + trans('visiosoft.module.advs::field.count'), + ], + }, + { + 'title': trans('visiosoft.module.advs::field.unexplained_products_report'), + 'id': 'unexplainedReport', + 'columns': [ + trans('visiosoft.module.advs::field.product'), + ], + }, + { + 'title': trans('visiosoft.module.advs::field.non_image_products_report'), + 'id': 'noImageReport', + 'columns': [ + trans('visiosoft.module.advs::field.product'), + ], + }, + ] %} + + {% for report in reports %} +
+
+
+
{{ report.title }}
+
+ +
+ + + + {% for column in report.columns %} + + {% endfor %} + + +
{{ column }}
+
+
+
+ {% endfor %} +
+ + + +{{ asset_add('scripts.js', 'visiosoft.module.advs::js/admin/dashboard/report.js') }} diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvModel.php b/addons/default/visiosoft/advs-module/src/Adv/AdvModel.php index 6f7377f07..4bc41fee4 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvModel.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvModel.php @@ -543,4 +543,13 @@ class AdvModel extends AdvsAdvsEntryModel implements AdvInterface return $lastCat; } + + public function scopeCurrent($query) + { + return $query + ->whereDate('finish_at', '>=', date("Y-m-d H:i:s")) + ->where('status', '=', 'approved') + ->where('slug', '!=', '') + ->orderBy('publish_at', 'desc'); + } } diff --git a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvInterface.php b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvInterface.php index 87702de18..8d7913146 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvInterface.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvInterface.php @@ -97,4 +97,6 @@ interface AdvInterface extends EntryInterface public function getCatsIDs(); public function lastCategory(); + + public function scopeCurrent($query); } diff --git a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php index 8b96de2d9..b92a5472f 100644 --- a/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php +++ b/addons/default/visiosoft/advs-module/src/AdvsModuleServiceProvider.php @@ -248,6 +248,12 @@ class AdvsModuleServiceProvider extends AddonServiceProvider 'as' => 'visiosoft.module.advs::ad.change.status', 'uses' => 'Visiosoft\AdvsModule\Http\Controller\StatusController@change' ], + + // Admin ReportController + 'admin/api/classified/report/stock' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ReportController@stock', + 'admin/api/classified/report/status' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ReportController@status', + 'admin/api/classified/report/unexplained' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ReportController@unexplained', + 'admin/api/classified/report/no-image' => 'Visiosoft\AdvsModule\Http\Controller\Admin\ReportController@noImage', ]; protected $middleware = [ diff --git a/addons/default/visiosoft/profile-module/resources/assets/js/admin/dashboard/report.js b/addons/default/visiosoft/profile-module/resources/assets/js/admin/dashboard/report.js new file mode 100644 index 000000000..bd649e8d1 --- /dev/null +++ b/addons/default/visiosoft/profile-module/resources/assets/js/admin/dashboard/report.js @@ -0,0 +1,19 @@ +$(document).ready( function () { + $('#newMemberReport').DataTable({ + ajax: '/admin/api/profile/report/latest', + order: [[ 1, "desc" ]], + columns: [ + { data: 'member', defaultContent: usersReportTrans.undefined_member }, + { data: 'date' }, + ], + }); + + $('#loginMemberReport').DataTable({ + ajax: '/admin/api/profile/report/login', + order: [[ 1, "desc" ]], + columns: [ + { data: 'member', defaultContent: usersReportTrans.undefined_member }, + { data: 'date' }, + ], + }); +} ); diff --git a/addons/default/visiosoft/profile-module/resources/lang/en/field.php b/addons/default/visiosoft/profile-module/resources/lang/en/field.php index 62a8abf0d..1f8b23fc6 100644 --- a/addons/default/visiosoft/profile-module/resources/lang/en/field.php +++ b/addons/default/visiosoft/profile-module/resources/lang/en/field.php @@ -496,4 +496,12 @@ return [ 'receive_messages_email' => [ 'name' => 'Receive Messages Email', ], + + // Report + 'member' => 'Member', + 'registered_at' => 'Registered At', + 'login_at' => 'Login At', + 'undefined_member' => 'Undefined Member', + 'new_membership_report' => 'New Membership Report', + 'member_login_reports' => 'Member Login Reports', ]; diff --git a/addons/default/visiosoft/profile-module/resources/views/admin/dashboard/report.twig b/addons/default/visiosoft/profile-module/resources/views/admin/dashboard/report.twig new file mode 100644 index 000000000..63fe3e20d --- /dev/null +++ b/addons/default/visiosoft/profile-module/resources/views/admin/dashboard/report.twig @@ -0,0 +1,50 @@ +
+ {% set reports = [ + { + 'title': trans('visiosoft.module.profile::field.new_membership_report'), + 'id': 'newMemberReport', + 'columns': [ + trans('visiosoft.module.profile::field.member'), + trans('visiosoft.module.profile::field.registered_at'), + ], + }, + { + 'title': trans('visiosoft.module.profile::field.member_login_reports'), + 'id': 'loginMemberReport', + 'columns': [ + trans('visiosoft.module.profile::field.member'), + trans('visiosoft.module.profile::field.login_at'), + ], + }, + ] %} + + {% for report in reports %} +
+
+
+
{{ report.title }}
+
+ +
+ + + + {% for column in report.columns %} + + {% endfor %} + + +
{{ column }}
+
+
+
+ {% endfor %} +
+ + + +{{ asset_add('scripts.js', 'visiosoft.module.profile::assets/js/admin/dashboard/report.js') }} diff --git a/addons/default/visiosoft/profile-module/src/Http/Controller/Admin/ReportController.php b/addons/default/visiosoft/profile-module/src/Http/Controller/Admin/ReportController.php new file mode 100644 index 000000000..cb27c4684 --- /dev/null +++ b/addons/default/visiosoft/profile-module/src/Http/Controller/Admin/ReportController.php @@ -0,0 +1,41 @@ +userRepository = $userRepository; + } + + public function latest() + { + $members = $this->userRepository->newQuery() + ->selectRaw("DATE_FORMAT(created_at, '%d.%m.%Y %H:%i') as date, CONCAT_WS('', first_name, ' ', last_name) AS member") + ->where('created_at', '>=', Carbon::today()->subWeek()) + ->get(); + + return [ + 'data' => $members + ]; + } + + public function login() + { + $members = $this->userRepository->newQuery() + ->selectRaw("DATE_FORMAT(last_login_at, '%d.%m.%Y %H:%i') as date, CONCAT_WS('', first_name, ' ', last_name) AS member") + ->whereNotNull('last_login_at') + ->where('last_login_at', '>=', Carbon::today()->subWeek()) + ->get(); + + return [ + 'data' => $members + ]; + } +} diff --git a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php index b43cd7ceb..3cb843f31 100644 --- a/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php +++ b/addons/default/visiosoft/profile-module/src/ProfileModuleServiceProvider.php @@ -124,6 +124,10 @@ class ProfileModuleServiceProvider extends AddonServiceProvider // CacheController 'ajax/get-user-info' => 'Visiosoft\ProfileModule\Http\Controller\CacheController@getUserInfo', + + // Admin ReportController + 'admin/api/profile/report/latest' => 'Visiosoft\ProfileModule\Http\Controller\Admin\ReportController@latest', + 'admin/api/profile/report/login' => 'Visiosoft\ProfileModule\Http\Controller\Admin\ReportController@login', ]; protected $aliases = [