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 %}
+
+
+
+
+
+
+
+
+ {% for column in report.columns %}
+ | {{ column }} |
+ {% endfor %}
+
+
+
+
+
+
+ {% 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 %}
+
+
+
+
+
+
+
+
+ {% for column in report.columns %}
+ | {{ column }} |
+ {% endfor %}
+
+
+
+
+
+
+ {% 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 = [