<?php

namespace App\DataTables;

use App\AdminDeptStatusReport;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Services\DataTable;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Html\Editor\Editor;
use App\CreditHistory;
use Illuminate\Support\Facades\DB;

class AdminDeptStatusReportDataTable extends DataTable
{

    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)
            ->addColumn('type', function($query) {
                if ($query->user !== null ) {
                    return 'Non-Applicable';
                }else{

                    return null;

                }
            });
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\AdminDeptStatusReport $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query()
    {
        $query = CreditHistory::where("credit_histories.status","owing")
                                ->join('users', 'users.id', '=', 'credit_histories.user_id')
                                ->orderBy('credit_histories.created_at','desc')
                                ->select(DB::raw('credit_histories.status, price, full_name as user, date_credited'));
        return $this->applyScopes($query);

    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {


        return $this->builder()
            ->columns($this->getColumns())
            ->ajax('')
            ->dom('Bfrtip')
            ->parameters([
                'dom' => 'Bfrtip',
                'buttons' => ['csv', 'excel', 'print', 'reload'],
                'order' => [[0, 'desc']]
        ]);
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {

        return [
            'user' => ['title'=>'Name of Client'],
            'price'=>['title'=>"Amount"],
            'date_credited',
            'status'=>['title'=>"Payment Status"],
            'type'=>['title'=>'Type of Client'],

        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'AdminDeptStatusReport_' . time();
    }
}
