0
votes

I am trying to filter using dropdown (select), but I got this error:

Undefined variable: dropdowns (View: C:\xampp\htdocs\bbnaijareport\resources\views\report\bbnaijaonetimebillingsReport.blade.php)"

error

model

   protected $fillable = [
    'msisdn',
    'created_at',
    'amount',
    'billing_channel',   
];

         public static function getFilters() {
        $filter = DB::select(DB::raw('SELECT DISTINCT billing_channel AS filt FROM bbnaija_one_time_billings'));

        foreach ($filter as $key => $value) { 
          $dropdown[$key] = $value->filt; 
        }               
       } 

controller

    public function bbnaijaonetimebillingsReport(Request $request)
{
    $data['title'] = 'Bbnaija One Time Billings';

    $billings = DB::table('bbnaija_one_time_billings')
    ->select(
       'msisdn', 
       'trans_id',
       'ext_id',
         DB::raw('created_at as created_date'),
       'amount',
       'is_complete_transactions',
       'billing_channel'
  )               
 ->orderByRaw('created_at DESC'); 

    $dropdowns=BbnaijaOneTimeBillings::getFilters();

    $start_date = $request->start_date;
    $end_date = $request->end_date;         

    $render=[];       
    if(isset($request->msisdn))
    {
        $billings=$billings->where('msisdn','like','%'.$request->msisdn.'%');
        $render['msisdn']=$request->msisdn;
    }   
    if(isset($request->billing_channel))
    {
        $billings=$billings->where('billing_channel',$request->billing_channel);
        $render['billing_channel']=$request->billing_channel;
    }
    if(isset($request->start_date) && isset($request->end_date))
    {
        $billings=$billings->whereBetween('created_at',[$start_date.' 00:00:00',$end_date.' 23:59:59']);
        $render['start_date']=$request->start_date;
        $render['end_date']=$request->end_date;
    }elseif(isset($request->start_date))
    {
        $billings=$billings->where('created_at',$request->start_date);
        $render['start_date']=$request->start_date;
    }         
    $billings= $billings->orderBy('created_at','DESC');
    $billings= $billings->paginate(15);
    $billings= $billings->appends($render);
     $data["dropdowns"] = $dropdowns;
    $data['billings'] = $billings;

return view('report.bbnaijaonetimebillingsReport',$data);        
}

View

    <div class="row" style="margin-bottom: 10px">
    {{ Form::model(request(),['method'=>'get']) }}
    <div class="col-sm-2">
         {{ Form::text('msisdn',null,['class'=>'form-control','placeholder'=>'MSISDN']) }}
    </div>
    <div class="col-sm-2">
         {{ Form::select('billing_channel',$dropdowns,null,['class'=>'form-control','placeholder'=>'Select Channel']) }}
    </div>        
    <div class="col-sm-3">
        {{ Form::date('start_date',null,['class'=>'form-control','placeholder'=>'Date']) }}
    </div>
    <div class="col-sm-3">
        {{ Form::date('end_date',null,['class'=>'form-control','placeholder'=>'Date']) }}
    </div>           
    <div class="col-xs-2">
        {{ Form::submit('Search',['class'=>'btn btn-warning']) }}
        <a href="{{ route('bbnaijaonetimebillingsexport') }}" class="btn btn-primary"><i class="fa fa-file-excel-o"></i> Excel</a>
    </div>
    {{ Form::close() }}
</div>

The problem is from

{{ Form::select('billing_channel',$dropdowns,null,['class'=>'form-control','placeholder'=>'Select Channel']) }}

I want to filter using billing_channel. It is a field from the table.

How do I resolve the issue

new_error

1
That view on your question is called report.bbnaijaonetimebillingsReport ? your returning it only with $data so how could your view use $dropdowns? - pmiranda
Try with return view('report.bbnaijaonetimebillingsReport',compact('data', 'dropdowns'); - Dhananjay Kyada

1 Answers

0
votes

Pay attention to this line:

return view('report.bbnaijaonetimebillingsReport',$data);

You're not passing $dropdowns to your view. You're passing $data, which contains an array of information, but you're not setting $data["dropdowns"].

Simply correct to:

$dropdowns=BbnaijaOneTimeBillings::getFilters();
$data["dropdowns"] = $dropdowns;