PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.4.1
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.4.1
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
fluent-cart / app / Http / Controllers / Reports / ReportingController.php

ReportingController.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.4.1, at app/Http/Controllers/Reports/ReportingController.php

253 lines 9.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Http\Controllers\Reports;
4
5 use FluentCart\Api\Resource\OrderItemResource;
6 use FluentCart\Api\Resource\OrderResource;
7 use FluentCart\Api\StoreSettings;
8 use FluentCart\App\Helpers\CurrenciesHelper;
9 use FluentCart\App\Helpers\CustomerHelper;
10 use FluentCart\App\Helpers\Status;
11 use FluentCart\App\Http\Controllers\Controller;
12 use FluentCart\App\Models\Order;
13 use FluentCart\App\Modules\ReportingModule\OrdersReport;
14 use FluentCart\App\Modules\ReportingModule\SalesReport;
15 use FluentCart\App\Services\DateTime\DateTime;
16 use FluentCart\App\Services\Report\DashBoardReportService;
17 use FluentCart\App\Services\Report\ReportHelper;
18 use FluentCart\Framework\Http\Request\Request;
19 use FluentCart\Framework\Support\Arr;
20
21 class ReportingController extends Controller
22 {
23 public function getOrderQuickStats(Request $request): array
24 {
25 $compare = true;
26 $fromRange = $request->get('day_range', '-0 days');
27 if ($fromRange == 'this_month') {
28 $fromDate = gmdate('Y-m-01 00:00:00');
29 } else if ($fromRange == 'all_time') {
30 $fromDate = false;
31 $compare = false;
32 } else {
33 $fromDate = gmdate('Y-m-d 00:00:00', strtotime($fromRange));
34 }
35
36 return [
37 'stats' => (new OrdersReport())->getOrderStats($fromDate, false, $compare),
38 'from_date' => $fromDate,
39 'to_date' => gmdate('Y-m-d 23:59:59', current_time('timestamp'))
40 ];
41 }
42
43 public function getSalesGrowth(Request $request, SalesReport $salesReport): array
44 {
45
46 $endYear = $request->get('end_date', Order::query()->max('created_at'));
47 $startYear = $request->get('start_date', Order::query()->min('created_at'));
48
49 $filters = [
50 "status" => ["column" => "status", "operator" => "in", "value" => Status::getOrderSuccessStatuses()],
51 "payment_status" => ["column" => "payment_status", "operator" => "in", "value" => Status::getTransactionSuccessStatuses()],
52 "created_at" => ["column" => "created_at", "operator" => "between", "value" => [$startYear, $endYear]]
53 ];
54
55 return [
56 'sales_data' => $salesReport->getSalesGrowth($filters)
57 ];
58 }
59
60 public function getReportOverview(Request $request): array
61 {
62
63 $params = $request->get('params');
64 $params["status"] = ["column" => "status", "operator" => "in", "value" => Status::getOrderSuccessStatuses()];
65 // $params["payment_status"] = [ "column" => "payment_status", "operator" => "in", "value" => Status::getTransactionSuccessStatuses() ];
66 $queryParam = Arr::only($params, ['created_at', 'status', 'payment_status']);
67
68 $reportOverview = OrderResource::reportOverview($queryParam);
69
70 $ordersByPaymentMethod = OrderResource::orderSummaryByPayment($queryParam);
71
72 return [
73 'data' => $reportOverview,
74 'orders_by_payment_method' => $ordersByPaymentMethod,
75 ];
76
77 }
78
79 public function searchRepeatCustomer(Request $request): array
80 {
81 $params = $request->get('params');
82
83 return [
84 'repeat_customers' => CustomerHelper::getRepeatCustomerBySearch($params)->paginate(Arr::get($params, 'per_page'), ['*'], 'page', Arr::get($params, 'current_page'))
85 ];
86 }
87
88 public function getTopProductsSold(Request $request): array
89 {
90
91
92 return [
93 'top_products_sold' => OrderItemResource::topProductsSold($request->get('params'))
94 ];
95 }
96
97 public function getReportMeta(Request $request): array
98 {
99
100 $startDate = $request->get('params.startDate', null);
101 $endDate = $request->get('params.endDate', null);
102
103 $data = Order::query()
104 ->select('currency')
105 ->selectRaw('COUNT(*) as order_count')
106 ->selectRaw('MIN(created_at) as min_created_at')
107 ->when($startDate && $endDate, function ($query) use ($startDate, $endDate) {
108 $query->whereBetween('created_at', [$startDate, $endDate]);
109 })
110 ->groupBy('currency')
111 ->orderBy('order_count', 'desc')
112 ->get(['currency', 'min_created_at']);
113
114 $min_created_at = $data->min('min_created_at');
115
116 if ($min_created_at < $startDate) {
117 $min_created_at = $startDate;
118 }
119
120 if (!$min_created_at) {
121 $min_created_at = (new DateTime())->format('Y-m-d H:i:s');
122 }
123
124 $currentCurrency = (new StoreSettings())->getCurrency();
125
126 $currencyWithSign = CurrenciesHelper::getCurrencyWithSign([$currentCurrency]);
127
128 return [
129 'currencies' => $currencyWithSign,
130 'min_date' => $min_created_at,
131 'storeMode' => (new StoreSettings())->get('order_mode'),
132 'first_order_date' => Order::query()->min('created_at')
133 ];
134
135 }
136
137 //Dashboard Report Controllers
138
139 public function getDashBoardSummary(Request $request)
140 {
141
142 return DashBoardReportService::getSummary();
143 }
144 public function getRecentOrders(Request $request)
145 {
146
147 return DashBoardReportService::getRecentOrders();
148 }
149
150 public function getRecentActivities(Request $request)
151 {
152
153 $groupKey = Arr::get($request->all(), 'groupKey', 'all');
154 return DashBoardReportService::getRecentActivities($groupKey);
155 }
156 public function getDashBoardStats(Request $request): array
157 {
158 $filters = [
159 'currency' => $request->get('params.currency', null),
160 'payment_status' => $request->get('params.paymentStatus', null) === 'all' ? '' : $request->get('params.paymentStatus', null),
161 ];
162 $startDate = $request->get('params.startDate', null);
163 $endDate = $request->get('params.endDate', null);
164 //
165 // $startDate = null;
166 // $endDate = null;
167
168 if (empty($startDate) && empty($endDate)) {
169 // Retrieve the first order's created_at date and set the start date
170 $firstOrder = Order::query()->orderBy('created_at', 'asc')->first();
171
172 $startDate = $firstOrder ? new DateTime($firstOrder->created_at) : null;
173
174 // Set the end date to the current date
175 $endDate = new DateTime();
176 } else {
177 $startDate = !empty($startDate) ? new DateTime($startDate) : null;
178 $endDate = !empty($endDate) ? new DateTime($endDate) : null;
179 }
180
181 if (!$startDate || !$endDate) {
182 return [
183 'dashBoardStats' => [
184 'total_orders' => [
185 'title' => __('All Orders', 'fluent-cart'),
186 'icon' => 'AllOrdersIcon',
187 'current_count' => 0,
188 'compare_count' => 0,
189 ],
190 'paid_orders' => [
191 'title' => __('Paid Orders', 'fluent-cart'),
192 'icon' => 'Money',
193 'current_count' => 0,
194 'compare_count' => 0,
195 ],
196 'total_paid_order_items' => [
197 'title' => __('Paid Order Items', 'fluent-cart'),
198 'icon' => 'OrderItemsIcon',
199 'current_count' => 0,
200 'compare_count' => 0,
201 ],
202 'total_paid_amounts' => [
203 'title' => __('Order Value (Paid)', 'fluent-cart'),
204 'icon' => 'OrderValueIcon',
205 'current_count' => 0,
206 'compare_count' => 0,
207 'is_cents' => true,
208 ],
209 ]
210 ];
211 }
212 $interval = $startDate->diff($endDate)->days;
213
214 $previousEndDate = (clone $startDate)->modify('-1 day')->endOfDay();
215 $previousStartDate = (clone $previousEndDate)->modify("-$interval days")->setTime(0, 0, 0);
216
217 $service = DashBoardReportService::make($filters)
218 ->setSelects(['id', 'total_amount', 'manual_discount_total', 'tax_total', 'shipping_total', 'total_refund', 'created_at', 'subtotal', 'coupon_discount_total', 'payment_status'])
219 ->setRange($startDate && $endDate ? $previousStartDate : null, $startDate && $endDate ? $endDate : null)
220 ->setAmountColumns(['total_amount', 'manual_discount_total', 'tax_total', 'shipping_total', 'total_refund', 'subtotal', 'coupon_discount_total']);
221
222 return $service->getDashboardStats($startDate, $endDate, $previousStartDate, $previousEndDate);
223
224 }
225
226 public function getSalesGrowthChart(Request $request): array
227 {
228 $params = ReportHelper::processParams($request->get('params'), ['orderStatus']);
229
230 $service = DashBoardReportService::make();
231
232 return [
233 'salesGrowthChart' => $service->getSalesGrowthChart($params)
234 ];
235 }
236
237 public function getCountryHeatMap(Request $request)
238 {
239
240
241 $filters = [
242 'currency' => $request->get('params.currency', null),
243 ];
244
245 $service = DashBoardReportService::make($filters)
246 ->setAmountColumns(['total_amount', 'manual_discount_total', 'tax_total', 'shipping_total', 'total_refund', 'subtotal', 'coupon_discount_total']);
247
248 return $service->getCountryHeatMap();
249
250 }
251
252 }
253