From e239937e5ced6216880118288585ff3f4b0bb0e9 Mon Sep 17 00:00:00 2001 From: diashalabi Date: Tue, 28 Sep 2021 16:45:45 +0300 Subject: [PATCH] #2480 Sales Reports --- .../advs-module/src/Adv/AdvRepository.php | 59 +++++++++++++++++++ .../Adv/Contract/AdvRepositoryInterface.php | 10 ++++ .../Controller/Admin/ReportController.php | 55 +++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ReportController.php diff --git a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php index c34007876..cea08a2ce 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php +++ b/addons/default/visiosoft/advs-module/src/Adv/AdvRepository.php @@ -592,4 +592,63 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface return false; } + + public function getStockReport() + { + return $this->newQuery() + ->current() + ->select('stock', 'name', 'advs_advs.id', 'slug') + ->where('is_get_adv', true) + ->where('stock', '<=', 10) + ->leftJoin('advs_advs_translations as classified_trans', function ($join) { + $join->on('advs_advs.id', '=', 'classified_trans.entry_id'); + $join->whereIn('locale', [config('app.locale'), setting_value('streams::default_locale'), 'en']); + }) + ->get(); + } + + public function getAllClassifiedsCount() + { + return $this->newQuery() + ->count(); + } + + public function getCurrentClassifiedsCount() + { + return $this->newQuery() + ->current() + ->count(); + } + + public function getUnexplainedClassifiedsReport() + { + return $this->newQuery() + ->current() + ->select('name', 'advs_advs.id', 'slug') + ->where(function ($query) { + $query->where('advs_desc', '=', '') + ->orWhereNull('advs_desc'); + }) + ->leftJoin('advs_advs_translations as classified_trans', function ($join) { + $join->on('advs_advs.id', '=', 'classified_trans.entry_id'); + $join->whereIn('locale', [config('app.locale'), setting_value('streams::default_locale'), 'en']); + }) + ->get(); + } + + public function getNoImageClassifiedsReport() + { + return $this->newQuery() + ->current() + ->select('name', 'advs_advs.id', 'slug') + ->where(function ($query) { + $query->where('cover_photo', '=', '') + ->orWhereNull('cover_photo'); + }) + ->leftJoin('advs_advs_translations as classified_trans', function ($join) { + $join->on('advs_advs.id', '=', 'classified_trans.entry_id'); + $join->whereIn('locale', [config('app.locale'), setting_value('streams::default_locale'), 'en']); + }) + ->get(); + } } diff --git a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php index 53e667867..4856c3bd3 100644 --- a/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php +++ b/addons/default/visiosoft/advs-module/src/Adv/Contract/AdvRepositoryInterface.php @@ -60,4 +60,14 @@ interface AdvRepositoryInterface extends EntryRepositoryInterface public function findByCFJSON($key, $value); public function uploadImage(); + + public function getStockReport(); + + public function getAllClassifiedsCount(); + + public function getCurrentClassifiedsCount(); + + public function getUnexplainedClassifiedsReport(); + + public function getNoImageClassifiedsReport(); } diff --git a/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ReportController.php b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ReportController.php new file mode 100644 index 000000000..8acc6ac6b --- /dev/null +++ b/addons/default/visiosoft/advs-module/src/Http/Controller/Admin/ReportController.php @@ -0,0 +1,55 @@ +advRepository = $advRepository; + } + + public function stock() + { + return [ + 'data' => $this->advRepository->getStockReport() + ]; + } + + public function status() + { + $all = $this->advRepository->getAllClassifiedsCount(); + $active = $this->advRepository->getCurrentClassifiedsCount(); + + return [ + 'data' => [ + [ + 'status' => 'Active', + 'count' => $active, + ], + [ + 'status' => 'Passive', + 'count' => $all - $active, + ], + ] + ]; + } + + public function unexplained() + { + return [ + 'data' => $this->advRepository->getUnexplainedClassifiedsReport() + ]; + } + + public function noImage() + { + return [ + 'data' => $this->advRepository->getNoImageClassifiedsReport() + ]; + } +}