/home/mip/mip/app/Modules/Client/Controllers/Applicants/SourceApplicantsController.php
<?php

namespace QxCMS\Modules\Client\Controllers\Applicants;

use Auth;
use Excel;
use Datatables;

use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;

use QxCMS\Modules\Client\Repositories\Applicants\ApplicantRepositoryInterface as Applicant;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;

class SourceApplicantsController extends Controller
{
    protected $applicant;

    protected $auth;
	protected $permission;
	protected $prefix_name = '';
    protected $module_id = 21;

	public function __construct(Permission $permission, Applicant $applicant)
	{
        $this->applicant = $applicant;

		$this->permission = $permission;
		$this->auth = Auth::guard('client');
		$this->prefix_name = config('modules.client');
        $this->getDetails($this->module_id);
	}

	public function permissions()
    {
        return $this->permission->getPermission($this->module_id);
    }

    public function index()
    {
    	$this->authorize('activated', $this->permissions());
    	$data['permissions'] = $this->permissions();
        return view('Client::applicants.source-applicant.index', $data);
    }

    public function show(Request $request)
    {
        $this->authorize('activated', $this->permissions());
        $data['permissions'] = $this->permissions();
        $data['count'] = $this->applicant->getSourceApplicant($request)->count();
        if($data['count'] == 0){
            return view('Client::no-data');
        }else{
            return view('Client::applicants.source-applicant.view', $data);
        }
    }

    public function excel(Request $request)
    {
        $data['applicants'] = $this->applicant->getSourceApplicant($request)->orderByRaw("last_name ASC, first_name ASC, middle_name ASC")->get();
        $data['count'] = $this->applicant->getSourceApplicant($request)->count();
        $data['type'] = 'Applicant Source';

        Excel::create('Applicant Source Result', function($excel) use ($data){
            $excel->setTitle('Applicant Source');

            $excel->sheet('sheet1', function($sheet) use ($data) {
                $sheet->loadView('Client::applicants.source-applicant.includes.source-applicant-table', $data);
            });
        })->export('xlsx');
    }

    public function getSourceApplicantsData(Request $request)
    {
        $applicant = $this->applicant->getSourceApplicant($request);

        return Datatables::of($applicant)
        ->editColumn('full_name', function($applicant){
            return $applicant->last_name.', '.$applicant->first_name.' '.$applicant->middle_name;
        })
        ->orderColumn('full_name', 'last_name $1, first_name $1, middle_name $1')
        ->make(true);
    }
}