-1

I am getting an error saying that 'data in return Datatables::($data) is undefined'

public function datatable(){
        if (isset($_GET['status']) && $_GET['status'] != '') {
            $status = $_GET['status'];
        } else {
            $status = 0;
        }

        $startDate = "01" . "-" . date('m-Y');
        $endDate = date('d-m-Y');
        $mode = 'all';

        if (isset($_GET['startDate']) && $_GET['startDate'] != '') {
            $startDate = $_GET['startDate'];
        }
        if (isset($_GET['endDate']) && $_GET['endDate'] != '') {
            $startDate = $_GET['startDate'];
        }
        if (isset($_GET['mode'])) {
            $mode = $_GET['mode'];
        }

        $startDateQuery = date('Y-m-d', strtotime($startDate));
        $endDateQuery = date('Y-m-d', strtotime($endDate));

        if ($status == "0"){
            if ($mode == "all") {
                $data = PurchaseH::select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '0');
            }
            if ($mode == "limited") {
                $data = PurchaseH::select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '0')->whereBetween('purchase_h.date', [$startDateQuery,$endDateQuery]);
            }
        }else{
                if ($mode == "all") {
                    $data = PurchaseH::select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '2')->where('purchase_h.status', '=', $status);
                }
                if ($mode == 'limited') {
                    $data = PurchaseH::select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '2')->where('purchase_h.status', '=', $status)->whereBetween('purchase_h.date', [$startDateQuery, $endDateQuery]);
                }
        }
            return DataTables::of($data)
                ->addColumn('action', function ($data) {
                    $url_edit = url('transaction/purchase-order/'.$data->id.'/edit');
                    $url = url('transaction/purchase-order/'.$data->id);
                    $url_receive = url('transaction/purchase-order/receive/'.$data->id);
                    $view = "<a class='btn btn-action btn-primary' href='$url' title='View'><i class='nav-icon fas fa-eye'></i></a>";
                    $edit = "";
                    $receive = "";
                    $delete = "";

                    if ($data->status == 'order') {
                        $edit = "<a class='btn btn-action btn-warning' href='$url_edit' title='View'><i class='nav-icon fas fa-edit'></i></a>";
                        $receive = "<button class='btn btn-secondary' data-url='$url_receive' onclick='receiveData(this)'><i class='nav-icon fas fa-hand-holding'></i></button>";
                        $delete = "<button class='btn btn-danger' data-url='$url' onclick='deleteData(this)'><i class='nav-icon fas fa-trash'></i></button>";

                        return $view."".$edit."".$delete."".$receive;
                    }
                })
                ->editColumn('date', function ($data) {
                    return date('d-m-Y', strtotime($data->date));
                })
                ->editColumn('total', function ($data) {
                    return number_format($data->total, 0, '.', ',');
                })->make(true);
//        } catch (\Exception $e) {
//        }
    }
Nigel Ren
  • 56,122
  • 11
  • 43
  • 55
Ikenna
  • 17
  • 5
  • As `$data` is defined in various `if` blocks, it is possible that some routes will not set this variable. – Nigel Ren Sep 19 '20 at 07:28

1 Answers1

1

Make your query as below.

$data = PurchaseH::query();
if ($status == "0"){
    if ($mode == "all") {
        $data = $data->select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '0');
    }
    if ($mode == "limited") {
        $data = $data->select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '0')->whereBetween('purchase_h.date', [$startDateQuery,$endDateQuery]);
    }
}else{
        if ($mode == "all") {
            $data = $data->select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '2')->where('purchase_h.status', '=', $status);
        }
        if ($mode == 'limited') {
            $data = $data->select('purchase_h.*', 'vendors.name')->leftJoin('vendors', 'purchase_h.id_ven', '=', 'vendors.id')->where('purchase_h.active', '!=', '2')->where('purchase_h.status', '=', $status)->whereBetween('purchase_h.date', [$startDateQuery, $endDateQuery]);
        }
}

You are getting this error cause of no $data are returning from if else condition.

Dilip Hirapara
  • 14,810
  • 3
  • 27
  • 49