Uname:Linux machinox-server 6.17.0-1013-aws #13~24.04.1-Ubuntu SMP Fri Apr 24 21:36:58 UTC 2026 aarch64

Base Dir : /var/www/machinox.in

User : root


403WebShell
403Webshell
Server IP : 13.235.167.51  /  Your IP : 216.73.217.116
Web Server : Apache
System : Linux machinox-server 6.17.0-1013-aws #13~24.04.1-Ubuntu SMP Fri Apr 24 21:36:58 UTC 2026 aarch64
User : root ( 0)
PHP Version : 8.2.29
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/app.machinox.in/app/Http/Controllers/Admin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/app.machinox.in/app/Http/Controllers/Admin/ReportsController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Advertisement;
use App\Models\BoostAd;
use App\Models\ContactQuery;
use App\Models\MachineEnquiry;
use App\Models\Operator;
use App\Models\Transaction;
use App\Models\User;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ReportsController extends Controller
{

    public function getReports(Request $request, $type)
    {
        try {
            $export = $request->get('export', 'csv');
            $keyword = $request->get('keyword');
            $status = $request->get('status');
            $catId = $request->get('cat_id');
            $sort_by = $request->get('sort_by', 'transactions.created_at');
            $order_by = $request->get('order_by', 'desc');
            $trxType = $request->get('trx_type');
            $is_block = $request->get('is_block');

            $startDate = Carbon::parse($request->get('start_date'));
            $endDate = Carbon::parse($request->get('end_date'));

            // -----------------------
            // SMART DATE FILTER LOGIC
            // -----------------------
            $applyDateFilter = function ($query, $column) use ($startDate, $endDate, $request) {
                $hasStart = $request->filled('start_date');
                $hasEnd = $request->filled('end_date');

                if ($hasStart && $hasEnd) {
                    return $query->whereBetween($column, [
                        $startDate->startOfDay(),
                        $endDate->endOfDay()
                    ]);
                }

                if ($hasStart) {
                    return $query->where($column, '>=', $startDate->startOfDay());
                }

                if ($hasEnd) {
                    return $query->where($column, '<=', $endDate->endOfDay());
                }

                return $query; 
            };

            switch ($type) {

                // -------------------------------------
                // APP USERS
                // -------------------------------------
                case 'APP_USERS':
                    $query = User::query()
                        ->select([
                            'name',
                            'email',
                            'mobile_number',
                            'dial_code',
                            DB::raw("CASE WHEN is_operator = 1 THEN 'Yes' ELSE 'No' END AS is_operator"),
                            'created_at as registered_on'
                        ])
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('name', 'LIKE', "%$keyword%")
                                    ->orWhere('email', 'LIKE', "%$keyword%")
                                    ->orWhere('mobile_number', 'LIKE', "%$keyword%");
                            });
                        })
                        ->when($is_block, function ($query) use ($is_block){
                            $query->where('is_block', true);
                        });

                    $applyDateFilter($query, 'created_at');

                    $query->orderBy('created_at', 'desc');

                    $fileName = 'App_Users_Report';
                    $message = trans('messages.APP_USERS_FETCHED');
                    break;


                // -------------------------------------
                // CUSTOMERS
                // -------------------------------------
                case 'CUSTOMERS':
                    $query = User::query()
                        ->join('operators', 'operators.user_id', '=', 'users.id')
                        ->select([
                            'users.name',
                            'users.email',
                            'users.mobile_number',
                            'users.created_at as joined_on'
                        ])
                        ->where('users.is_operator', false)
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('users.name', 'LIKE', "%$keyword%")
                                    ->orWhere('users.email', 'LIKE', "%$keyword%")
                                    ->orWhere('users.mobile_number', 'LIKE', "%$keyword%");
                            });
                        });

                    $applyDateFilter($query, 'users.created_at');

                    $query->orderBy('users.created_at', 'desc');

                    $fileName = 'Customers_Report';
                    $message = trans('messages.CUSTOMERS_FETCHED');
                    break;

                // -------------------------------------
                // OPERATORS
                // -------------------------------------
                case 'OPERATORS':
                    $query = User::query()
                        ->join('operators', 'operators.user_id', '=', 'users.id')
                        ->select([
                            'users.name as operator_name',
                            'users.email',
                            'users.mobile_number',
                            DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') AS experience"),
                            'operators.technical_skills',
                            'users.created_at as joined_on'
                        ])
                        ->where('users.is_operator', true)
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('users.name', 'LIKE', "%$keyword%")
                                    ->orWhere('users.email', 'LIKE', "%$keyword%")
                                    ->orWhere('users.mobile_number', 'LIKE', "%$keyword%");
                            });
                        });

                    $applyDateFilter($query, 'users.created_at');

                    $query->orderBy('users.created_at', 'desc');

                    $fileName = 'Operators_Report';
                    $message = trans('messages.OPERATORS_FETCHED');
                    break;

                // -------------------------------------
                // JOB SEEKERS
                // -------------------------------------
                case 'JOB_SEEKERS':
                    $query = Operator::query()
                        ->join('users', 'users.id', '=', 'operators.user_id')
                        ->select([
                            'users.name as user_name',
                            'users.email as user_email',
                            'users.mobile_number as mobile',
                            DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') AS experience"),
                            'operators.technical_skills',
                            'operators.open_to_work',
                            'operators.created_at as registered_on'
                        ])
                        ->where('open_to_work', true)
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('users.name', 'LIKE', "%$keyword%")
                                    ->orWhere('users.email', 'LIKE', "%$keyword%")
                                    ->orWhere('users.mobile_number', 'LIKE', "%$keyword%");
                            });
                        });

                    $applyDateFilter($query, 'operators.created_at');

                    $query->orderBy('operators.created_at', 'desc');

                    $fileName = 'Job_Seekers_Report';
                    $message = trans('messages.JOB_SEEKERS_FETCHED');
                    break;

                // -------------------------------------
                // SELL / RENT ADS
                // -------------------------------------
                case 'SELL':
                case 'RENT':
                    $query = Advertisement::query()
                        ->join('users', 'users.id', '=', 'advertisements.user_id')
                        ->select([
                            'users.name as user_name',
                            'advertisements.title',
                            'advertisements.advertise_type',
                            'advertisements.price',
                            'advertisements.status',
                            'advertisements.created_at as posted_on'
                        ])
                        ->where('advertise_type', strtoupper($type))
                        ->where('is_draft', false)
                        ->when($catId, fn($q) => $q->where('machine_type_id', $catId))
                        ->when($status, fn($q) => $q->where('status', $status));

                    $applyDateFilter($query, 'advertisements.created_at');

                    $query->orderBy('advertisements.created_at', 'desc');

                    $fileName = ucfirst(strtolower($type)) . '_Advertisements_Report';
                    $message = trans('messages.' . strtoupper($type) . '_ADS_FETCHED');
                    break;

                // -------------------------------------
                // MACHINE ENQUIRY
                // -------------------------------------
                case 'MACHINE_ENQUIRY':
                    $query = MachineEnquiry::query()
                        ->join('users', 'users.id', '=', 'machine_enquiries.user_id')
                        ->select([
                            'users.name as user_name',
                            'users.email as user_email',
                            'users.mobile_number as user_mobile',
                            'machine_enquiries.brand_name',
                            'machine_enquiries.equipment_name',
                            'machine_enquiries.model',
                            'machine_enquiries.capacity',
                            'machine_enquiries.address',
                            'machine_enquiries.created_at as enquiry_date',
                        ])
                        ->whereNull('users.deleted_at')
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('brand_name', 'LIKE', "%$keyword%")
                                    ->orWhere('equipment_name', 'LIKE', "%$keyword%")
                                    ->orWhere('model', 'LIKE', "%$keyword%")
                                    ->orWhere('capacity', 'LIKE', "%$keyword%")
                                    ->orWhereHas('user', function ($userQuery) use ($keyword) {
                                        $userQuery->where('name', 'LIKE', "%$keyword%")
                                            ->orWhere('email', 'LIKE', "%$keyword%")
                                            ->orWhere('mobile_number', 'LIKE', "%$keyword%");
                                    });
                            });
                        });

                    $applyDateFilter($query, 'machine_enquiries.created_at');

                    $query->orderBy('machine_enquiries.created_at', 'desc');

                    $fileName = 'Machine_Enquiries_Report';
                    $message = trans('messages.MACHINE_ENQUIRY_FETCHED');
                    break;

                // -------------------------------------
                // CUSTOMER QUERIES
                // -------------------------------------
                case 'CUSTOMER_QUERIES':
                    $query = ContactQuery::query()
                        ->select([
                            'name as contact_name',
                            'email as contact_email',
                            'mobile_number as contact_mobile',
                            'message',
                            'status',
                            'feedback',
                            'created_at as submitted_on',
                        ])
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->where('name', 'LIKE', "%$keyword%")
                                    ->orWhere('message', 'LIKE', "%$keyword%");
                            });
                        })
                        ->when($status, fn($q) => $q->where('status', $status));

                    $applyDateFilter($query, 'created_at');

                    $query->orderBy('created_at', 'desc');

                    $fileName = 'Customer_Queries_Report';
                    $message = trans('messages.CUSTOMER_QUERIES_FETCHED');
                    break;

                // -------------------------------------
                // BOOSTED ADS
                // -------------------------------------
                case 'BOOSTED_ADS':
                    $query = BoostAd::query()
                        ->join('advertisements', 'advertisements.id', '=', 'boost_ads.ad_id')
                        ->join('users', 'users.id', '=', 'advertisements.user_id')
                        ->select([
                            'advertisements.title as ad_title',
                            'advertisements.advertise_type',
                            'users.name as user_name',
                            'boost_ads.state',
                            'boost_ads.start_date',
                            'boost_ads.end_date',
                            'boost_ads.created_at as boosted_on'
                        ]);

                    $applyDateFilter($query, 'boost_ads.created_at');

                    $query->orderBy('boost_ads.created_at', 'desc');

                    $fileName = 'Boosted_Ads_Report';
                    $message = trans('messages.BOOSTED_ADS_FETCHED');
                    break;

                // -------------------------------------
                // TRANSACTIONS
                // -------------------------------------
                case 'TRANSACTIONS':
                    $query = Transaction::query()
                        ->join('users', 'users.id', '=', 'transactions.user_id')
                        ->select([
                            'transactions.cust_trx_id',
                            'users.name as user_name',
                            'transactions.type',
                            'transactions.trx_id',
                            'transactions.razorpay_payment_id',
                            'transactions.trx_amount',
                            'transactions.currency',
                            'transactions.payment_status',
                            'transactions.created_at as transaction_date'
                        ])
                        ->where('trx_status', 'SUCCESS')
                        ->when($keyword, function ($query) use ($keyword) {
                            $query->where(function ($q) use ($keyword) {
                                $q->whereHas('plans', function ($planQuery) use ($keyword) {
                                    $planQuery->where('type', 'LIKE', "%$keyword%")
                                        ->orWhere('duration', 'LIKE', "%$keyword%");
                                })
                                    ->orWhere('status', 'LIKE', "%$keyword%")
                                    ->orWhere('trx_status', 'LIKE', "%$keyword%")
                                    ->orWhere('cust_trx_id', 'LIKE', "%$keyword%")
                                    ->orWhere('trx_id', 'LIKE', "%$keyword%");
                            });
                        });

                    $applyDateFilter($query, 'transactions.created_at');

                    $list = $query->orderBy($sort_by, $order_by)
                        ->get()
                        ->map(function ($item) {
                            if (in_array($item->type, ['NEW', 'RENEW', 'UPGRADE'], true)) {
                                $item->type = 'SUBSCRIPTION';
                            }
                            return $item;
                        });

                    if ($trxType) {
                        $list = $list->where('type', $trxType)->values();
                    }

                    if ($export === 'pdf') {
                        return $this->exportDetailedPDF($list, 'Transactions_Report');
                    }

                    return $this->exportDetailedCSV($list, 'Transactions_Report');

                default:
                    return $this->sendError(trans('messages.INVALID_REPORT_TYPE'));
            }

            $records = $query->get();

            if ($export === 'pdf') {
                return $this->exportDetailedPDF($records, $fileName);
            }

            return $this->exportDetailedCSV($records, $fileName);
        } catch (Exception $e) {
            return $this->sendError($e->getMessage());
        }
    }


    // public function getReports(Request $request, $type)
    // {
    //     try {
    //         $export = $request->get('export', 'csv');
    //         $keyword = $request->get('keyword');
    //         $status = $request->get('status');
    //         $catId = $request->get('cat_id');
    //         $sort_by = $request->get('sort_by', 'transactions.created_at');
    //         $order_by = $request->get('order_by', 'desc');
    //         $trxType = $request->get('trx_type');

    //         $startDate = Carbon::parse($request->get('start_date', now()->startOfMonth()));
    //         $endDate = Carbon::parse($request->get('end_date', now()));
    //         $applyDateFilter = function ($query, $column) use ($startDate, $endDate, $request) {
    //             $hasStart = $request->filled('start_date');
    //             $hasEnd = $request->filled('end_date');

    //             if ($hasStart && $hasEnd) {
    //                 return $query->whereBetween($column, [
    //                     $startDate->startOfDay(),
    //                     $endDate->endOfDay()
    //                 ]);
    //             }

    //             if ($hasStart) {
    //                 return $query->where($column, '>=', $startDate->startOfDay());
    //             }

    //             if ($hasEnd) {
    //                 return $query->where($column, '<=', $endDate->endOfDay());
    //             }

    //             return $query; 
    //         };
    //         switch ($type) {
    //             case 'APP_USERS':
    //                 $query = User::query()
    //                     ->select([
    //                         'name',
    //                         'email',
    //                         'mobile_number',
    //                         'dial_code',
    //                         'created_at as registered_on'
    //                     ])
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('email', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('mobile_number', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->whereBetween('created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('created_at', 'desc');

    //                 $fileName = 'App_Users_Report';
    //                 $message = trans('messages.APP_USERS_FETCHED');
    //                 break;

    //             case 'CUSTOMERS':
    //                 $query = User::query()
    //                     ->join('operators', 'operators.user_id', '=', 'users.id')
    //                     ->select([
    //                         'users.name',
    //                         'users.email',
    //                         'users.mobile_number',
    //                         'users.created_at as joined_on'
    //                     ])
    //                     ->where('users.is_operator', false)
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('users.name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.email', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.mobile_number', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->whereBetween('users.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('users.created_at', 'desc');

    //                 $fileName = 'Customers_Report';
    //                 $message = trans('messages.CUSTOMERS_FETCHED');
    //                 break;


    //             case 'OPERATORS':
    //                 $query = User::query()
    //                     ->join('operators', 'operators.user_id', '=', 'users.id')
    //                     ->select([
    //                         'users.name as operator_name',
    //                         'users.email',
    //                         'users.mobile_number',
    //                         DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') as experience"),
    //                         'operators.technical_skills',
    //                         'users.created_at as joined_on'
    //                     ])
    //                     ->where('users.is_operator', true)
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('users.name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.email', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.mobile_number', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->whereBetween('users.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('users.created_at', 'desc');

    //                 $fileName = 'Operators_Report';
    //                 $message = trans('messages.OPERATORS_FETCHED');
    //                 break;

    //             case 'JOB_SEEKERS':
    //                 $query = Operator::query()
    //                     ->join('users', 'users.id', '=', 'operators.user_id')
    //                     ->select([
    //                         'users.name as user_name',
    //                         'users.email as user_email',
    //                         'users.mobile_number as mobile',
    //                         DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') as experience"),
    //                         'operators.technical_skills',
    //                         'operators.open_to_work',
    //                         'operators.created_at as registered_on'
    //                     ])
    //                     ->where('open_to_work', true)
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('users.name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.email', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('users.mobile_number', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->whereBetween('operators.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('operators.created_at', 'desc');

    //                 $fileName = 'Job_Seekers_Report';
    //                 $message = trans('messages.JOB_SEEKERS_FETCHED');
    //                 break;

    //             case 'SELL':
    //             case 'RENT':
    //                 $query = Advertisement::query()
    //                     ->join('users', 'users.id', '=', 'advertisements.user_id')
    //                     ->select([
    //                         'users.name as user_name',
    //                         'advertisements.title',
    //                         'advertisements.advertise_type',
    //                         'advertisements.price',
    //                         'advertisements.status',
    //                         'advertisements.created_at as posted_on'
    //                     ])
    //                     ->where('advertise_type', strtoupper($type))
    //                     ->where('is_draft', false)
    //                     ->when($catId, function ($query) use ($catId) {
    //                         $query->where('machine_type_id', $catId);
    //                     })
    //                     ->when($status, function ($query) use ($status) {
    //                         $query->where('status', $status);
    //                     })
    //                     ->whereBetween('advertisements.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('advertisements.created_at', 'desc');

    //                 $fileName = ucfirst(strtolower($type)) . '_Advertisements_Report';
    //                 $message = trans('messages.' . strtoupper($type) . '_ADS_FETCHED');
    //                 break;

    //             case 'MACHINE_ENQUIRY':
    //                 $query = MachineEnquiry::query()
    //                     ->join('users', 'users.id', '=', 'machine_enquiries.user_id')
    //                     ->select([
    //                         'users.name as user_name',
    //                         'users.email as user_email',
    //                         'users.mobile_number as user_mobile',
    //                         'machine_enquiries.brand_name',
    //                         'machine_enquiries.equipment_name',
    //                         'machine_enquiries.model',
    //                         'machine_enquiries.capacity',
    //                         'machine_enquiries.address',
    //                         'machine_enquiries.created_at as enquiry_date',
    //                     ])
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('brand_name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('equipment_name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('model', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('capacity', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhereHas('user', function ($userQuery) use ($keyword) {
    //                                     $userQuery->where('name', 'LIKE', '%' . $keyword . '%')
    //                                         ->orWhere('email', 'LIKE', '%' . $keyword . '%')
    //                                         ->orWhere('mobile_number', 'LIKE', '%' . $keyword . '%');
    //                                 });
    //                         });
    //                     })
    //                     ->whereBetween('machine_enquiries.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('machine_enquiries.created_at', 'desc');

    //                 $fileName = 'Machine_Enquiries_Report';
    //                 $message = trans('messages.MACHINE_ENQUIRY_FETCHED');
    //                 break;

    //             case 'CUSTOMER_QUERIES':
    //                 $query = ContactQuery::query()
    //                     ->select([
    //                         'name as contact_name',
    //                         'email as contact_email',
    //                         'mobile_number as contact_mobile',
    //                         'message',
    //                         'status',
    //                         'feedback',
    //                         'created_at as submitted_on',
    //                     ])
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->where('name', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('message', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->when($status, fn($q) => $q->where('status', $status))
    //                     ->whereBetween('created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('created_at', 'desc');

    //                 $fileName = 'Customer_Queries_Report';
    //                 $message = trans('messages.CUSTOMER_QUERIES_FETCHED');
    //                 break;

    //             case 'BOOSTED_ADS':
    //                 $query = BoostAd::query()
    //                     ->join('advertisements', 'advertisements.id', '=', 'boost_ads.ad_id')
    //                     ->join('users', 'users.id', '=', 'advertisements.user_id')
    //                     ->select([
    //                         'advertisements.title as ad_title',
    //                         'advertisements.advertise_type',
    //                         'users.name as user_name',
    //                         'boost_ads.state',
    //                         'boost_ads.start_date',
    //                         'boost_ads.end_date',
    //                         'boost_ads.created_at as boosted_on'
    //                     ])
    //                     ->whereBetween('boost_ads.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('boost_ads.created_at', 'desc');

    //                 $fileName = 'Boosted_Ads_Report';
    //                 $message = trans('messages.BOOSTED_ADS_FETCHED');
    //                 break;

    //             case 'TRANSACTIONS':
    //                 $query = Transaction::query()
    //                     ->join('users', 'users.id', '=', 'transactions.user_id')
    //                     ->select([
    //                         'transactions.cust_trx_id',
    //                         'users.name as user_name',
    //                         'transactions.type',
    //                         'transactions.trx_id',
    //                         'transactions.razorpay_payment_id',
    //                         'transactions.trx_amount',
    //                         'transactions.currency',
    //                         'transactions.payment_status',
    //                         'transactions.created_at as transaction_date'
    //                     ])
    //                     ->where('trx_status', 'SUCCESS')
    //                     ->when($keyword, function ($query) use ($keyword) {
    //                         $query->where(function ($q) use ($keyword) {
    //                             $q->whereHas('plans', function ($planQuery) use ($keyword) {
    //                                 $planQuery->where('type', 'LIKE', '%' . $keyword . '%')
    //                                     ->orWhere('duration', 'LIKE', '%' . $keyword . '%');
    //                             })
    //                                 ->orWhere('status', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('trx_status', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('cust_trx_id', 'LIKE', '%' . $keyword . '%')
    //                                 ->orWhere('trx_id', 'LIKE', '%' . $keyword . '%');
    //                         });
    //                     })
    //                     ->whereBetween('transactions.created_at', [$startDate->startOfDay(), $endDate->endOfDay()]);

    //                 $list = $query->orderBy($sort_by, $order_by)
    //                     ->get()
    //                     ->map(function ($item) {
    //                         if (in_array($item->type, ['NEW', 'RENEW', 'UPGRADE'], true)) {
    //                             $item->type = 'SUBSCRIPTION';
    //                         }
    //                         return $item;
    //                     });

    //                 if ($trxType) {
    //                     $list = $list->where('type', $trxType)->values();
    //                 }

    //                 if ($export === 'pdf') {
    //                     return $this->exportDetailedPDF($list, 'Transactions_Report');
    //                 }
    //                 return $this->exportDetailedCSV($list, 'Transactions_Report');

    //             default:
    //                 return $this->sendError(trans('messages.INVALID_REPORT_TYPE'));
    //         }

    //         $records = $query->get();

    //         if ($export === 'pdf') {
    //             return $this->exportDetailedPDF($records, $fileName);
    //         }
    //         return $this->exportDetailedCSV($records, $fileName);
    //     } catch (Exception $e) {
    //         return $this->sendError($e->getMessage());
    //     }
    // }

    // public function getReports(Request $request, $type)
    // {
    //     try {
    //         $export = $request->get('export', 'csv');
    //         $startDate = Carbon::parse($request->get('start_date', now()->startOfMonth()));
    //         $endDate = Carbon::parse($request->get('end_date', now()));

    //         switch ($type) {
    //             case 'APP_USERS':
    //                 $query = User::query()
    //                     ->select([
    //                         'uuid',
    //                         'name',
    //                         'email',
    //                         'mobile_number',
    //                         'dial_code',
    //                         'country_code',
    //                         'profile_image',
    //                         'created_at as registered_on'
    //                     ])
    //                     ->whereBetween('created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('created_at', 'desc');
    //                 $fileName = 'App_Users_Report';
    //                 $message = trans('messages.APP_USERS_FETCHED');
    //                 break;

    //             case 'OPERATORS':
    //                 $query = User::query()
    //                     ->join('operators', 'operators.user_id', '=', 'users.id')
    //                     ->select([
    //                         'users.name as operator_name',
    //                         'users.email',
    //                         'users.mobile_number',
    //                         DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') as experience"),
    //                         'operators.technical_skills',
    //                         'users.created_at as joined_on'
    //                     ])
    //                     ->where('users.is_operator', true)
    //                     ->whereBetween('users.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('users.created_at', 'desc');
    //                 $fileName = 'Operators_Report';
    //                 $message = trans('messages.OPERATORS_FETCHED');
    //                 break;

    //             case 'JOB_SEEKERS':
    //                 $query = Operator::query()
    //                     ->join('users', 'users.id', '=', 'operators.user_id')
    //                     ->select([
    //                         'users.name as user_name',
    //                         'users.email as user_email',
    //                         'users.mobile_number as mobile',
    //                         DB::raw("CONCAT(operators.exp_year, ' Years ', operators.exp_month, ' Months') as experience"),
    //                         'operators.technical_skills',
    //                         'operators.open_to_work',
    //                         'operators.created_at as registered_on'
    //                     ])
    //                     ->where('open_to_work', true)
    //                     ->whereBetween('operators.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('operators.created_at', 'desc');
    //                 $fileName = 'Job_Seekers_Report';
    //                 $message = trans('messages.JOB_SEEKERS_FETCHED');
    //                 break;

    //             case 'SELL':
    //             case 'RENT':
    //                 $query = Advertisement::query()
    //                     ->join('users', 'users.id', '=', 'advertisements.user_id')
    //                     ->select([
    //                         'advertisements.uuid',
    //                         'users.name as user_name',
    //                         'advertisements.title',
    //                         'advertisements.advertise_type',
    //                         'advertisements.price',
    //                         'advertisements.status',
    //                         'advertisements.created_at as posted_on'
    //                     ])
    //                     ->where('advertise_type', strtoupper($type))
    //                     ->whereBetween('advertisements.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('advertisements.created_at', 'desc');
    //                 $fileName = ucfirst(strtolower($type)) . '_Advertisements_Report';
    //                 $message = trans('messages.' . strtoupper($type) . '_ADS_FETCHED');
    //                 break;

    //             case 'MACHINE_ENQUIRY':
    //                 $query = MachineEnquiry::query()
    //                     ->join('users', 'users.id', '=', 'machine_enquiries.user_id')
    //                     ->select([
    //                         'users.name as user_name',
    //                         'users.email as user_email',
    //                         'users.mobile_number as user_mobile',
    //                         'machine_enquiries.brand_name',
    //                         'machine_enquiries.equipment_name',
    //                         'machine_enquiries.model',
    //                         'machine_enquiries.capacity',
    //                         'machine_enquiries.address',
    //                         'machine_enquiries.created_at as enquiry_date',
    //                     ])
    //                     ->whereBetween('machine_enquiries.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('machine_enquiries.created_at', 'desc');
    //                 $fileName = 'Machine_Enquiries_Report';
    //                 $message = trans('messages.MACHINE_ENQUIRY_FETCHED');
    //                 break;

    //             case 'CUSTOMER_QUERIES':
    //                 $query = ContactQuery::query()
    //                     ->select([
    //                         'name as contact_name',
    //                         'email as contact_email',
    //                         'mobile_number as contact_mobile',
    //                         'message',
    //                         'status',
    //                         'feedback',
    //                         'created_at as submitted_on',
    //                     ])
    //                     ->whereBetween('created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('created_at', 'desc');
    //                 $fileName = 'Customer_Queries_Report';
    //                 $message = trans('messages.CUSTOMER_QUERIES_FETCHED');
    //                 break;

    //             case 'BOOSTED_ADS':
    //                 $query = BoostAd::query()
    //                     ->join('advertisements', 'advertisements.id', '=', 'boost_ads.ad_id')
    //                     ->join('users', 'users.id', '=', 'advertisements.user_id')
    //                     ->select([
    //                         'advertisements.title as ad_title',
    //                         'advertisements.advertise_type',
    //                         'users.name as user_name',
    //                         'boost_ads.state',
    //                         'boost_ads.start_date',
    //                         'boost_ads.end_date',
    //                         'boost_ads.created_at as boosted_on'
    //                     ])
    //                     ->whereBetween('boost_ads.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('boost_ads.created_at', 'desc');
    //                 $fileName = 'Boosted_Ads_Report';
    //                 $message = trans('messages.BOOSTED_ADS_FETCHED');
    //                 break;

    //             case 'TRANSACTIONS':
    //                 $query = Transaction::query()
    //                     ->join('users', 'users.id', '=', 'transactions.user_id')
    //                     ->select([
    //                         'transactions.cust_trx_id',
    //                         'users.name as user_name',
    //                         'transactions.type',
    //                         'transactions.trx_id',
    //                         'transactions.razorpay_payment_id',
    //                         'transactions.trx_amount',
    //                         'transactions.currency',
    //                         'transactions.payment_status',
    //                         'transactions.created_at as transaction_date'
    //                     ])
    //                     ->where('trx_status', 'SUCCESS')
    //                     ->whereBetween('transactions.created_at', [$startDate->startOfDay(), $endDate->endOfDay()])
    //                     ->orderBy('transactions.created_at', 'desc');
    //                 $fileName = 'Transactions_Report';
    //                 $message = trans('messages.TRANSACTIONS_FETCHED');
    //                 break;

    //             default:
    //                 return $this->sendError(trans('messages.INVALID_REPORT_TYPE'));
    //         }

    //         $records = $query->get();

    //         if ($export === 'pdf') {
    //             return $this->exportDetailedPDF($records, $fileName);
    //         }
    //         return $this->exportDetailedCSV($records, $fileName);
    //     } catch (Exception $e) {
    //         return $this->sendError($e->getMessage());
    //     }
    // }
}

Youez - 2016 - github.com/yon3zu
LinuXploit