<?php

namespace App\Http\Controllers\TestCenter;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\Models\Booking;
use App\Models\Client;
use App\Models\TestCenter;
use App\Repositories\SimplyBookRepository;
use App\Repositories\SmsRepository;
use DB;
use Crypt;
use PDF;
use SimpleSoftwareIO\QrCode\Facades\QrCode;
use Auth;
use Illuminate\Support\Facades\Mail;
use App\Mail\PdfCreate;
                    
/**
 * Class BookingController.
 */
class BookingController extends Controller
{
    /**
     * @var model
     * @var testCenterModel
     * @var clientModel
     * @var simpleBookRepository
     * @var smsRepository
     */
    protected $model;
    protected $testCenterModel;
    protected $simpleBookRepository;
    protected $smsRepository;

    /**
     * BookingController constructor.
     *
     * @param model $model
     * @param testCenterModel $testCenterModel
     * @param clientModel $clientModel
     * @param simpleBookRepository $simpleBookRepository
     * @param smsRepository $smsRepository
     */
    public function __construct()
    {
        $this->model = new Booking;
        $this->testCenterModel = new TestCenter;
        $this->clientModel = new Client;
        $this->simpleBookRepository = new SimplyBookRepository;
        $this->smsRepository = new SmsRepository;
    }

    /**
     * BookingController list method.
     *
     */
    public function index(Request $req) 
    {
    	if($req->post()){
            //dd($req->post());
            $draw = $req->draw;
            $row = $req->start;
            $rowperpage = $req->length; // Rows display per page
            $columnIndex = $req->order[0]['column']; // Column index
            $columnName = $req->columns[$columnIndex]['data'] ? $req->columns[$columnIndex]['data'] : 'id'; // Column name
            $columnSortOrder = $req->order[0]['dir'] ? $req->order[0]['dir'] : 'asc'; // asc or desc
            
            ## Total number of records without filtering
            $outputtotalRecord = $this->model
                                    ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                    ->leftJoin('services','services.id','=','bookings.service_id')
                                    ->leftJoin('clients','clients.id','=','bookings.client_id')
                                    ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                    ->where('bookings.status', 0)
									->whereDate('bookings.created_at', date('Y-m-d'))
                                    ->get()
                                    ->count();

            ## Total number of record with filtering
            $outputtotalRecordwithFilter = $this->model
                                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                            ->leftJoin('services','services.id','=','bookings.service_id')
                                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                            ->where('bookings.status', 0)
											 ->whereDate('bookings.created_at', date('Y-m-d'));
                                            //->groupBy('bookings.id');

            ## Fetch records
            $outputs = $this->model
                            ->select(DB::raw('bookings.*, bookings.id as sl_no,test_centers.test_center_name, services.name as service_name, clients.name as client_name, clients.email as email, clients.phone as phone, clients.info_value4 as personnumber'))
                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                            ->leftJoin('services','services.id','=','bookings.service_id')
                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                            ->where('bookings.status', 0)
							->whereDate('bookings.created_at', date('Y-m-d'))
                            //->groupBy('bookings.id')
                            ->orderBy($columnName, $columnSortOrder)
                            ->skip($row)
                            ->take($rowperpage);

            
            $outputtotalRecordwithFilter = $outputtotalRecordwithFilter->get()->count();
            $outputs = $outputs->get();
           // echo $outputs->toSql(); die;
            //echo '<pre>';print_r($quizes);die;
            $data = array();
            if($outputs){
                foreach($outputs as $key=>$output){
                    $bookingId = base64_encode($output->id);
                   // $bookingId = Crypt::encrypt($output->id);
                    if($output->status == 1) {
                        $status = 'Paid';
                    } else {
                        $status = 'Confirmed'; 
                    }
                    $data[] = array( 
                        "sl_no"=>$key+$row+1,
                        "service_name"=>$output->service_name,
                        "client_name"=>$output->client_name,
                        "email"=>$output->email,
                        "phone"=>$output->phone,                        
                        "invoice_datetime"=>date('d-m-Y H:i',strtotime($output->invoice_datetime)),
                        "booking_code"=>$output->code ,
						"personnumber"=>$output->personnumber,
                         "action"=>(($output->invoice_payment_received == 0) ? '<a href="javascript:void(0)" class="make_paid" title="Make Paid" data-id="'.base64_encode($output->id).'" style="padding: 5px;"><i class="fa fa-check-circle" style="color: #0062cc"></i></a>': ''),

                    );
                }
            }
            

            $response = array(
                "draw" => intval($draw),
                "iTotalRecords" => $outputtotalRecord,
                "iTotalDisplayRecords" => $outputtotalRecordwithFilter,
                "aaData" => $data
            );

            echo json_encode($response);die;
        }
        return view('testcenter.pages.booking.list'); 
    }

    /**
     * BookingController paid list method.
     *
     */
    public function paid(Request $req) 
    {
        if($req->post()){
            //dd($req->post());
            $draw = $req->draw;
            $row = $req->start;
            $rowperpage = $req->length; // Rows display per page
            $columnIndex = $req->order[0]['column']; // Column index
            $columnName = $req->columns[$columnIndex]['data'] ? $req->columns[$columnIndex]['data'] : 'id'; // Column name
           // $columnSortOrder = $req->order[0]['dir']; // asc or desc
			$columnSortOrder = $req->order[0]['dir'] ? $req->order[0]['dir'] : 'asc'; // asc or desc
            
            ## Total number of records without filtering
            $outputtotalRecord = $this->model
                                    ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                    ->leftJoin('services','services.id','=','bookings.service_id')
                                    ->leftJoin('clients','clients.id','=','bookings.client_id')
                                    ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                    ->whereNotIn('bookings.service_id', [3,4])
                                    ->where('bookings.status', 1)
                                    ->where('bookings.test_status', 0)
									 ->whereDate('bookings.created_at', date('Y-m-d'))
                                    ->get()
                                    ->count();

            ## Total number of record with filtering
            $outputtotalRecordwithFilter = $this->model
                                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                            ->leftJoin('services','services.id','=','bookings.service_id')
                                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                            ->whereNotIn('bookings.service_id', [3,4])
                                            ->where('bookings.status', 1)
                                            ->where('bookings.test_status', 0)
											 ->whereDate('bookings.created_at', date('Y-m-d'));
                                            //->groupBy('bookings.id');

            ## Fetch records
            $outputs = $this->model
                            ->select(DB::raw('bookings.*, bookings.id as sl_no,test_centers.test_center_name, services.name as service_name, clients.name as client_name, clients.email as email, clients.phone as phone, clients.info_value4 as personnumber'))
                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                            ->leftJoin('services','services.id','=','bookings.service_id')
                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                            ->whereNotIn('bookings.service_id', [3,4])
                            ->where('bookings.status', 1)
                            ->where('bookings.test_status', 0)
                            ->whereDate('bookings.created_at', date('Y-m-d'))
                            //->groupBy('bookings.id')
                            ->orderBy($columnName, $columnSortOrder)
                            ->skip($row)
                            ->take($rowperpage);

            
            $outputtotalRecordwithFilter = $outputtotalRecordwithFilter->get()->count();
            $outputs = $outputs->get();
            //echo $tests->toSql(); die;
            //echo '<pre>';print_r($quizes);die;
            $data = array();
            if($outputs){
				//dd($output);
                foreach($outputs as $key=>$output){
				
                    $bookingId = base64_encode($output->id);
                    //$bookingId = Crypt::encrypt($output->id);
                    if($output->status == 1) {
                        $status = 'Paid';
                    } else {
                        $status = 'Confirmed'; 
                    }
                    $data[] = array( 
                        "sl_no"=>$key+$row+1,
                        "service_name"=>$output->service_name,
                        "client_name"=>$output->client_name,
                        "email"=>$output->email,
                        "phone"=>$output->phone,
						"invoice_datetime"=>date('d-m-Y H:i',strtotime($output->invoice_datetime)),
                        "booking_code"=>$output->code ,
						"personnumber"=>$output->personnumber,
                        "action"=>'<a href="'.route('testcenter.booking.detail', base64_encode($output->id)).'" class="" title="Details" style="padding: 5px;"><i class="fa fa-eye" style="color: #0062cc"></i></a>'.
                            (($output->test_status > 0) ? '<a target="_blank" href="'.route('testcenter.booking.newpdf', $bookingId).'" class="" title="Generate PDF" style="padding: 5px;"><i class="fa fa-file" style="color: #0062cc"></i></a>': '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="update_test_status" title="Update Test Status" style="padding: 5px;"><i class="fa fa-exchange" style="color: #0062cc"></i></a>').
                            ((file_exists(storage_path('app/pdf/qrcode-'.$output->id.'.pdf'))) ? '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="resend_mail" title="Send mail" style="padding: 5px;"><i class="fa fa-envelope" style="color: #0062cc"></i></a>':''),

                    );
                }
            }
            

            $response = array(
                "draw" => intval($draw),
                "iTotalRecords" => $outputtotalRecord,
                "iTotalDisplayRecords" => $outputtotalRecordwithFilter,
                "aaData" => $data
            );

            echo json_encode($response);die;
        }
        return view('testcenter.pages.booking.paid_list'); 
    }

    /**
     * Bank delete method.
     *
     * @param $req
     *
     * @return json
     */
    public function delete(Request $req) 
    {
        $response = [];
        if($req->post()){
            $id = base64_decode($req->id);
            $this->model->where('id', $id)->delete();             
            $response = array('status'=>200, 'message'=>'success', 'result'=>[]); 
            return response()->json($response);
        }
    }

    /**Status change method.
     *
     * @param $req
     *
     * @return json
     */
    public function status(Request $req) 
    {
        if($req->post()){
            $bookingDetails = $this->model->find(base64_decode($req->id));
            if($bookingDetails){
                $authentication = $this->simpleBookRepository->authentication();
                if($authentication){
                    $payment = $this->simpleBookRepository->payment($authentication, $bookingDetails->invoice_id);
					//dd($payment);
                    if($payment){
                        $this->model->where('id',base64_decode($req->id))->update([
                                'status'=>1, 
								'final_invoice_no'=>$payment['number'] ? $payment['number'] : null,
                                'invoice_payment_received'=>1,
                                'payment_datetime'=>$payment['payment_datetime'] ? $payment['payment_datetime'] : date('Y-m-d H:i:s'),
                                'deposit'=>$payment['deposit'] ? $payment['deposit'] : 0,
                            ]);
                        $response = array('status'=>200, 'message'=>'success', 'result'=>[]);   
                    } else {
                        $response = array('status'=>201, 'message'=>'failure', 'result'=>[]);   
                    }
                } else {
                    $response = array('status'=>201, 'message'=>'failure', 'result'=>[]);
                }                
            } else {
                $response = array('status'=>201, 'message'=>'failure', 'result'=>[]);
            }
            return response()->json($response);
        }
    }

    /**Details method.
     *
     * @param $req
     *
     * @return json
     */
    public function details(Request $req) 
    {
        if($req->id){
            $bookingDetails = $this->model
                                ->leftJoin('clients','clients.id','=','bookings.client_id')
                                ->leftJoin('services','services.id','=','bookings.service_id')
                                ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                ->where('bookings.id', base64_decode($req->id))
                                ->select(DB::raw('*, bookings.id, clients.name as client_name, services.name as service_name'))
                                ->first();
            $bookingId = $req->id;
            //$bookingId = Crypt::encrypt(base64_decode($req->id));
            if($bookingDetails){
                return view('testcenter.pages.booking.details')
                    ->withBookingId($bookingId)             
                    ->withBooking($bookingDetails);               
            } else {
                return redirect()->route('testcenter.booking.list');
            }
        }
    }

    /**Status change method.
     *
     * @param $req
     *
     * @return json
     */
    public function test_status(Request $req) 
    {
        if($req->post()){
            $bookingId = base64_decode($req->id);
            //$bookingId = Crypt::decrypt($req->id);
            $bookingDetails = $this->model->find($bookingId);
            if($bookingDetails){
                $updated = $this->model->where('id', $bookingId)->update(['test_status'=>$req->test_status]);
                if($updated){
                    $authentication = $this->simpleBookRepository->authentication();
                    if($authentication){
                        $booking_data = $this->simpleBookRepository->bookingDetails($authentication, $bookingDetails->booking_id);
                        if($booking_data){
                            if(count($booking_data['additional_fields'])>0){
                                foreach ($booking_data['additional_fields'] as $key => $additional_fields) {
                                   if($key<4){
									   $inr = [
													'info'.($key+1)=>$additional_fields['field_name'],
													'info_value'.($key+1)=>$additional_fields['value'],
												];
										$this->clientModel->where('id', $bookingDetails->client_id)->update($inr);
								   }
                                }
                            }
                        }
                    }
                    $gen_str = route('testcenter.booking.newpdf', $req->id);
                    $qrcode = QrCode::size(100)
                                ->format('svg')
                                ->generate($gen_str, storage_path('app/qrcodes/'.'qrcode-'.$bookingId.'.svg'));

                    /************all functionality *****************/
                    $data['booking'] = $this->model
                                        ->leftJoin('clients','clients.id','=','bookings.client_id')
                                        ->leftJoin('services','services.id','=','bookings.service_id')
                                        ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                        ->where('bookings.id', $bookingId)
                                        ->select(DB::raw('*, bookings.id, clients.name as client_name, services.name as service_name'))
                                        ->first();
                    $pdf = PDF::loadView('testcenter.pages.booking.pdf', $data);
                    //$pdf = PDF::loadHTML('<h1>Test</h1>');
                    //$bid=rand(1,100);
					//dd($data['booking']);
                    
                   if(!file_exists(storage_path('app/pdf/qrcode-'.$bookingId.'.pdf'))){
                        $pdf->save(storage_path('app/pdf/qrcode-'.$bookingId.'.pdf'));
                        //$pdf->save(storage_path('app/pdf/qrcode-72'.$bid.'.pdf'));
                        //Send SMS
						
						
						 if(strpos($data['booking']->service_name, 'Antikroppstest')== true){
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt testresultat har visat NEGATIVT för antikroppar. Du kommer åt ditt testcertifikat här: ".route('testcenter.booking.newpdf', $req->id);
							 }elseif($data['booking']->test_status == 1){
								 $message="Ditt testresultat har visat POSITIVT för Antikroppar. Du kommer åt ditt testcertifikat här: ".route('testcenter.booking.newpdf', $req->id);								 
							 }
						 }else{
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt provresultat visar att du är NEGATIV. Du kommer åt ditt test Certifikat här: ".route('testcenter.booking.newpdf', $req->id);
							 }elseif($data['booking']->test_status == 1){
								 $message="Ditt provresultat visar att du är POSITIV. Du har en pågående infektion av COVID-19 och måste stanna hemma för att inte smitta andra. Du måste enligt smittskyddslagen följa vissa regler för att förhindra smitta andra. Vi kommer att ringa dig för en smittspårning och mer information hittar du i mejlet som skickats till dig. Du kommer åt ditt test Certifikat här: ".route('testcenter.booking.newpdf', $req->id);								 
							 }							 
						 }
							 
						
                        if(isset($data['booking']->phone)){
                            $sms = array(
                                "from" => "PharmaUse",   /* Can be up to 11 alphanumeric characters */
                                "to" => $data['booking']->phone,  /* The mobile number you want to send to */
                                "message" => $message,
                                "dryrun" => "no"
                              //  "dryrun" => "no"
                            );
                            $sendSMS = $this->smsRepository->sendSMS($sms);
                            //var_dump( $sendSMS);
                        }
                        //Email
                        if(isset($data['booking']->email)){
                             if(strpos($data['booking']->service_name, 'Antikroppstest')== true){
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt testresultat har visat NEGATIVT för Antikroppar. Du kommer åt ditt testcertifikat här:";
								 $message_extra="";
							 }elseif($data['booking']->test_status == 1){
								 $message="Ditt testresultat har visat POSITIVT för Antikroppar. Du kommer åt ditt testcertifikat här: ";$message_extra="";								 
							 }
						 }else{
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt provresultat visar att du är NEGATIV. Du kommer åt ditt test Certifikat här: ";
								 $message_extra="";
							 }elseif($data['booking']->test_status == 1){
								 $message="Du har testat positivt för COVID-19.<br />Du måste enligt smittskyddslagen följa vissa regler för att inte smitta andra:";	
								 $message_extra="<p>Du ska skydda personer i din omgivning. Det står i smittskyddslagen och kallas för skyddsplikt. Det är viktigt att du läser Smittskyddsbladet och informationen om positivt provsvar för COVID-19 följer instruktionerna för att skydda andra, du ska även dela de förhållningsregler som gäller för personer inom ditt hushåll och dem du haft kontakt med.</p><br /><br/>
<p><b>
Nedan hittar du informationsblad som ger dig rådande riktlinjer.</b><br/><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/smittskyddsblad/corona/covid-19---patientinformation-bekraftat-fall---smittskyddsblad.pdf\">Covid-19 Förhållningsregler för dig som testat positivt</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/information-och-instruktioner-till-nara-kontakt-ej-hushallskontakt-till-fall-av-covid-19.pdf\">Covid-19 hushållskontakt, Till hushåll med bekräftat fall.</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/smittsparning/information-till-chefer-utanfor-varden-lagledare-med-flera.pdf\">Information och instruktioner till nära kontakt till bekräftat fall av covid-19 (skane.se)</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/smittsparning/information-till-chefer-utanfor-varden-lagledare-med-flera.pdf\">Information till chefer utanför vården, lagledare med flera (skane.se)</a><br/>
<br/>
</p><br/><br/>
<p>Du måste berätta för alla du bor eller har bott med, att de ska testa sig 5 dagar efter att du testade dig. De ska testa sig även om de inte har några symtom. Om de får eller har symtom ska de inte vänta 5 dagar testa sig direkt.<br/></p><br/><br/>
<p>Alla du bor eller har bott med ska också stanna hemma under minst sju dagar. De kan få smittbärarpenning om de är över 18 år och inte kan arbeta hemifrån under tiden. Om de redan haft covid-19 inom de senaste 6 månaderna, behöver de däremot inte stanna hemma om de är friska. De kan inte heller få smittbärarpenning.<br/></p><br/><br/>
<p>Regeringen har beslutat att tillfälligt ta bort kravet på läkarintyg vid ansökan om smittbärarpenning som gäller covid-19. Det gäller från och med 6 februari och fram till och med 30 april 2021. Det krävs fortfarande att en läkare har beslutat om avstängning från arbetet, enligt smittskyddslagen, för att ha rätt till ersättningen. Behöver du ett sådant så kan du mejla vårt läkarteam med en kopia på ditt testcertifikat till <a href=\"mailto:lakare@pharmause.com\">lakare@pharmause.com</a><br/></p><br/><br/>
<p>Vi kommer att ringa dig för att göra en smittspårning.</p>";								 
							 }							 
						 }
                                    
                            $emailData = array(
                                'name' => isset($data['booking']->client_name) ? $data['booking']->client_name : '',
                                'message' => $message ,
                                'message_extra' => $message_extra ? $message_extra : '',
                                'link' => route('testcenter.booking.newpdf', $req->id)
                            );
                            Mail::to($data['booking']->email, '')->send(new PdfCreate($emailData));
                        }
                   }
                    /************all functionality *****************/
                    $response = array('status'=>200, 'message'=>'success', 'result'=>[]);   
                } else {
                    $response = array('status'=>201, 'message'=>'failure', 'result'=>[]);   
                }              
            } else {
                $response = array('status'=>201, 'message'=>'failure', 'result'=>[]);
            }
            return response()->json($response);
        }
    }

    /**Generate PDF method.
     *
     * @param $req
     *
     * @return json
     */
    public function generate_pdf(Request $req) 
    {
        if($req->id){
            
            $bookingId = Crypt::decrypt($req->id);
            //echo '<img src="'.url('storage/qrcode-'.$bookingId.'.svg').'">';die;
            //$pdf = PDF::loadView('pdf.invoice', $data);
            

            //echo '<iframe src="'.url('pdf/qrcode-'.$bookingId.'.pdf').'"></iframe>'; 
            echo '<body style="margin:0px;padding:0px;overflow:hidden">
                    <iframe src="'.url('pdf/qrcode-'.$bookingId.'.pdf').'" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
                </body>';die;
            //return $pdf->stream();
        }
    }


    /**Generate PDF method.
     *
     * @param $req
     *
     * @return json
     */
    public function newgenerate_pdf(Request $req) 
    {
        if($req->id){
            $bookingId = base64_decode($req->id);
            //$bookingId = Crypt::decrypt($req->id);
            //echo '<img src="'.url('storage/qrcode-'.$bookingId.'.svg').'">';die;
            //$pdf = PDF::loadView('pdf.invoice', $data);
            

            //echo '<iframe src="'.url('pdf/qrcode-'.$bookingId.'.pdf').'"></iframe>'; 
            echo '<body style="margin:0px;padding:0px;overflow:hidden">
                    <iframe src="'.url('pdf/qrcode-'.$bookingId.'.pdf').'" frameborder="0" style="overflow:hidden;height:100%;width:100%" height="100%" width="100%"></iframe>
                </body>';die;
            //return $pdf->stream();
        }
    }

    /**Generate PDF method.
     *
     * @param $req
     *
     * @return json
     */
    public function resend_mail(Request $req) 
    {
        if($req->id){
         //   $bookingId = Crypt::decrypt($req->id);
            $bookingId = base64_decode($req->id);
            $data['booking'] = $this->model
                                ->leftJoin('clients','clients.id','=','bookings.client_id')
                                ->leftJoin('services','services.id','=','bookings.service_id')
                                ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                ->where('bookings.id', $bookingId)
                                ->select(DB::raw('*, bookings.id, clients.name as client_name, services.name as service_name'))
								->first();
            if(isset($req->email_address)){
				
				
				if(strpos($data['booking']->service_name, 'Antikroppstest')== true){
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt testresultat har visat NEGATIVT för Antikroppar. Du kommer åt ditt testcertifikat här:";
								 $message_extra="";
							 }elseif($data['booking']->test_status == 1){
								 $message="Ditt testresultat har visat POSITIVT för Antikroppar. Du kommer åt ditt testcertifikat här: ";$message_extra="";								 
							 }
						 }else{
							 if($data['booking']->test_status == 2){								 
								 $message="Ditt provresultat visar att du är NEGATIV. Du kommer åt ditt test Certifikat här: ";
								 $message_extra="";
							 }elseif($data['booking']->test_status == 1){
								 $message="Du har testat positivt för COVID-19.<br />Du måste enligt smittskyddslagen följa vissa regler för att inte smitta andra:";	
								 $message_extra="<p>Du ska skydda personer i din omgivning. Det står i smittskyddslagen och kallas för skyddsplikt. Det är viktigt att du läser Smittskyddsbladet och informationen om positivt provsvar för COVID-19 följer instruktionerna för att skydda andra, du ska även dela de förhållningsregler som gäller för personer inom ditt hushåll och dem du haft kontakt med.</p><br /><br/>
<p><b>
Nedan hittar du informationsblad som ger dig rådande riktlinjer.</b><br/><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/smittskyddsblad/corona/covid-19---patientinformation-bekraftat-fall---smittskyddsblad.pdf\">Covid-19 Förhållningsregler för dig som testat positivt</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/information-och-instruktioner-till-nara-kontakt-ej-hushallskontakt-till-fall-av-covid-19.pdf\">Covid-19 hushållskontakt, Till hushåll med bekräftat fall.</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/smittsparning/information-till-chefer-utanfor-varden-lagledare-med-flera.pdf\">Information och instruktioner till nära kontakt till bekräftat fall av covid-19 (skane.se)</a><br/>
<a href=\"https:\//vardgivare.skane.se/siteassets/1.-vardriktlinjer/smittskydd/corona/smittsparning/information-till-chefer-utanfor-varden-lagledare-med-flera.pdf\">Information till chefer utanför vården, lagledare med flera (skane.se)</a><br/>
<br/>
</p><br/><br/>
<p>Du måste berätta för alla du bor eller har bott med, att de ska testa sig 5 dagar efter att du testade dig. De ska testa sig även om de inte har några symtom. Om de får eller har symtom ska de inte vänta 5 dagar testa sig direkt.<br/></p><br/><br/>
<p>Alla du bor eller har bott med ska också stanna hemma under minst sju dagar. De kan få smittbärarpenning om de är över 18 år och inte kan arbeta hemifrån under tiden. Om de redan haft covid-19 inom de senaste 6 månaderna, behöver de däremot inte stanna hemma om de är friska. De kan inte heller få smittbärarpenning.<br/></p><br/><br/>
<p>Regeringen har beslutat att tillfälligt ta bort kravet på läkarintyg vid ansökan om smittbärarpenning som gäller covid-19. Det gäller från och med 6 februari och fram till och med 30 april 2021. Det krävs fortfarande att en läkare har beslutat om avstängning från arbetet, enligt smittskyddslagen, för att ha rätt till ersättningen. Behöver du ett sådant så kan du mejla vårt läkarteam med en kopia på ditt testcertifikat till <a href=\"mailto:lakare@pharmause.com\">lakare@pharmause.com</a><br/></p><br/><br/>
<p>Vi kommer att ringa dig för att göra en smittspårning.</p>";								 
							 }							 
						 }
				
				
				
				
				
                $emailData = array(
                    'name' => isset($data['booking']->client_name) ? $data['booking']->client_name : '',
                    'message' => $message ,
                    'message_extra' => $message_extra ? $message_extra : '',
                   // 'link' => route('testcenter.booking.pdf', $req->id)
                    'link' => route('testcenter.booking.newpdf', $req->id)
                );
                Mail::to($req->email_address, '')->send(new PdfCreate($emailData));
            }
            $response = array('status'=>200, 'message'=>'success', 'result'=>[]);
            return response()->json($response);
        }
    }

    /**All task done list.
     *
     * @param $req
     *
     * @return json
     */
    public function doneList(Request $req) 
    {
       if($req->post()){
            //dd($req->post());
            $draw = $req->draw;
            $row = $req->start;
            $rowperpage = $req->length; // Rows display per page
            $columnIndex = $req->order[0]['column']; // Column index
            $columnName = $req->columns[$columnIndex]['data'] ? $req->columns[$columnIndex]['data'] : 'id'; // Column name
           // $columnSortOrder = $req->order[0]['dir']; // asc or desc
            $columnSortOrder = $req->order[0]['dir'] ? $req->order[0]['dir'] : 'asc'; // asc or desc
            
            ## Total number of records without filtering
            $outputtotalRecord = $this->model
                                    ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                    ->leftJoin('services','services.id','=','bookings.service_id')
                                    ->leftJoin('clients','clients.id','=','bookings.client_id')
                                    ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                    ->where('bookings.status', 1)
                                     ->where('bookings.test_status', '>', 0)
                                     ->whereDate('bookings.created_at', date('Y-m-d'))
                                    ->get()
                                    ->count();

            ## Total number of record with filtering
            $outputtotalRecordwithFilter = $this->model
                                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                            ->leftJoin('services','services.id','=','bookings.service_id')
                                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                                            ->where('bookings.status', 1)
                                             ->where('bookings.test_status', '>', 0)
                                             ->whereDate('bookings.created_at', date('Y-m-d'));
                                            //->groupBy('bookings.id');

            ## Fetch records
            $outputs = $this->model
                            ->select(DB::raw('bookings.*, bookings.id as sl_no,test_centers.test_center_name, services.name as service_name, clients.name as client_name, clients.email as email, clients.phone as phone, clients.info_value4 as personnumber'))
                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                            ->leftJoin('services','services.id','=','bookings.service_id')
                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                            ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                            ->where('bookings.status', 1)
                             ->where('bookings.test_status', '>', 0)
                            ->whereDate('bookings.created_at', date('Y-m-d'))
                            //->groupBy('bookings.id')
                            ->orderBy($columnName, $columnSortOrder)
                            ->skip($row)
                            ->take($rowperpage);

            
            $outputtotalRecordwithFilter = $outputtotalRecordwithFilter->get()->count();
            $outputs = $outputs->get();
            //echo $tests->toSql(); die;
            //echo '<pre>';print_r($quizes);die;
            $data = array();
            if($outputs){
                //dd($output);
                foreach($outputs as $key=>$output){
                
                    $bookingId = base64_encode($output->id);
                    //$bookingId = Crypt::encrypt($output->id);
                    if($output->status == 1) {
                        $status = 'Paid';
                    } else {
                        $status = 'Confirmed'; 
                    }

                    if($output->test_status == 1) {
                        $test_status = 'Positive';
                    } else if($output->test_status == 2) {
                        $test_status = 'Negative'; 
                    }

                    $data[] = array( 
                        "sl_no"=>$key+$row+1,
                        "service_name"=>$output->service_name,
                        "client_name"=>$output->client_name,
                        "email"=>$output->email,
                        "phone"=>$output->phone,
                        "invoice_datetime"=>date('d-m-Y H:i',strtotime($output->invoice_datetime)),
                        "booking_code"=>$output->code ,
                        "personnumber"=>$output->personnumber,
                        "test_status"=>$test_status,
                        "action"=>'<a href="'.route('testcenter.booking.donedetail', base64_encode($output->id)).'" class="" title="Details" style="padding: 5px;"><i class="fa fa-eye" style="color: #0062cc"></i></a>'.
                            (($output->test_status > 0) ? '<a target="_blank" href="'.route('testcenter.booking.newpdf', $bookingId).'" class="" title="Generate PDF" style="padding: 5px;"><i class="fa fa-file" style="color: #0062cc"></i></a>': '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="update_test_status" title="Update Test Status" style="padding: 5px;"><i class="fa fa-exchange" style="color: #0062cc"></i></a>').
                            ((file_exists(storage_path('app/pdf/qrcode-'.$output->id.'.pdf'))) ? '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="resend_mail" title="Send mail" style="padding: 5px;"><i class="fa fa-envelope" style="color: #0062cc"></i></a>':''),

                    );
                }
            }
            

            $response = array(
                "draw" => intval($draw),
                "iTotalRecords" => $outputtotalRecord,
                "iTotalDisplayRecords" => $outputtotalRecordwithFilter,
                "aaData" => $data
            );

            echo json_encode($response);die;
        }
        return view('testcenter.pages.booking.done_list'); 
    }

    /**Done Details method.
     *
     * @param $req
     *
     * @return json
     */
    public function doneDetails(Request $req) 
    {
        if($req->id){
            $bookingDetails = $this->model
                                ->leftJoin('clients','clients.id','=','bookings.client_id')
                                ->leftJoin('services','services.id','=','bookings.service_id')
                                ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                ->where('bookings.id', base64_decode($req->id))
                                ->select(DB::raw('*, bookings.id, clients.name as client_name, services.name as service_name'))
                                ->first();
            $bookingId = $req->id;
            //$bookingId = Crypt::encrypt(base64_decode($req->id));
            if($bookingDetails){
                return view('testcenter.pages.booking.done-details')
                    ->withBookingId($bookingId)             
                    ->withBooking($bookingDetails);               
            } else {
                return redirect()->route('testcenter.booking.donelist');
            }
        }
    }


    /**All PCR Test list.
     *
     * @param $req
     *
     * @return json
     */
    public function pcrList(Request $req) 
    {
       if($req->post()){
            //dd($req->post());
            $draw = $req->draw;
            $row = $req->start;
            $rowperpage = $req->length; // Rows display per page
            $columnIndex = $req->order[0]['column']; // Column index
            $columnName = $req->columns[$columnIndex]['data'] ? $req->columns[$columnIndex]['data'] : 'id'; // Column name
           // $columnSortOrder = $req->order[0]['dir']; // asc or desc
            $columnSortOrder = $req->order[0]['dir'] ? $req->order[0]['dir'] : 'asc'; // asc or desc
            
            ## Total number of records without filtering
            $outputtotalRecord = $this->model
                                    ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                    ->leftJoin('services','services.id','=','bookings.service_id')
                                    ->leftJoin('clients','clients.id','=','bookings.client_id')
                                    //->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)                                  

                                    ->where(function ($q) {
                                        $q->where('bookings.service_id', 3)->orWhere('bookings.service_id', 4);
                                    })

                                     ->where('bookings.status', 1)
                                     ->where('bookings.test_status', 0)
                                     ->whereDate('bookings.created_at', date('Y-m-d'))
                                    ->get()
                                    ->count();  
                                  //  dd($outputtotalRecord );                                  

            ## Total number of record with filtering
            $outputtotalRecordwithFilter = $this->model
                                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                            ->leftJoin('services','services.id','=','bookings.service_id')
                                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                                          //  ->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)                                           
                                            ->where(function ($q) {
                                                $q->where('bookings.service_id', 3)->orWhere('bookings.service_id', 4);
                                            })
                                            ->where('bookings.status', 1)
                                            ->where('bookings.test_status', 0)
                                             ->whereDate('bookings.created_at', date('Y-m-d'));
                                            //->groupBy('bookings.id');

            ## Fetch records
            $outputs = $this->model
                            ->select(DB::raw('bookings.*, bookings.id as sl_no,test_centers.test_center_name, services.name as service_name, clients.name as client_name, clients.email as email, clients.phone as phone, clients.info_value4 as personnumber'))
                            ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                            ->leftJoin('services','services.id','=','bookings.service_id')
                            ->leftJoin('clients','clients.id','=','bookings.client_id')
                            //->where('bookings.provider_id', Auth::guard('testcenter')->user()->test_center_id)
                            ->where(function ($q) {
                                        $q->where('bookings.service_id', 3)->orWhere('bookings.service_id', 4);
                                    })
                            ->where('bookings.status', 1)
                            ->where('bookings.test_status', 0)
                            ->whereDate('bookings.created_at', date('Y-m-d'))
                            //->groupBy('bookings.id')
                            ->orderBy($columnName, $columnSortOrder)
                            ->skip($row)
                            ->take($rowperpage);

            
            $outputtotalRecordwithFilter = $outputtotalRecordwithFilter->get()->count();
            $outputs = $outputs->get();
            //echo $tests->toSql(); die;
            //echo '<pre>';print_r($quizes);die;
            $data = array();
            if($outputs){
                //dd($output);
                foreach($outputs as $key=>$output){
                
                    $bookingId = base64_encode($output->id);
                    //$bookingId = Crypt::encrypt($output->id);
                    if($output->status == 1) {
                        $status = 'Paid';
                    } else {
                        $status = 'Confirmed'; 
                    }
                    /*if($output->test_status == 1) {
                        $test_status = 'Positive';
                    } else if($output->test_status == 2) {
                        $test_status = 'Negative'; 
                    }*/
                    $data[] = array( 
                        "sl_no"=>$key+$row+1,
                        "service_name"=>$output->service_name,
                        "client_name"=>$output->client_name,
                        "email"=>$output->email,
                        "phone"=>$output->phone,
                        "invoice_datetime"=>date('d-m-Y H:i',strtotime($output->invoice_datetime)),
                        "booking_code"=>$output->code ,
                        "personnumber"=>$output->personnumber,
                        //"test_status"=>$test_status,
                        "action"=>'<a href="'.route('testcenter.booking.pcrdetail', base64_encode($output->id)).'" class="" title="Details" style="padding: 5px;"><i class="fa fa-eye" style="color: #0062cc"></i></a>'.
                            (($output->test_status > 0) ? '<a target="_blank" href="'.route('testcenter.booking.newpdf', $bookingId).'" class="" title="Generate PDF" style="padding: 5px;"><i class="fa fa-file" style="color: #0062cc"></i></a>': '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="update_test_status" title="Update Test Status" style="padding: 5px;"><i class="fa fa-exchange" style="color: #0062cc"></i></a>').
                            ((file_exists(storage_path('app/pdf/qrcode-'.$output->id.'.pdf'))) ? '<a href="javascript:void(0)" data-id="'.$bookingId.'" class="resend_mail" title="Send mail" style="padding: 5px;"><i class="fa fa-envelope" style="color: #0062cc"></i></a>':''),

                    );
                }
            }
            

            $response = array(
                "draw" => intval($draw),
                "iTotalRecords" => $outputtotalRecord,
                "iTotalDisplayRecords" => $outputtotalRecordwithFilter,
                "aaData" => $data
            );

            echo json_encode($response);die;
        }
        return view('testcenter.pages.pcr.pcr_list'); 
    }

    /**Done Details method.
     *
     * @param $req
     *
     * @return json
     */
    public function pcrDetails(Request $req) 
    {
        if($req->id){
            $bookingDetails = $this->model
                                ->leftJoin('clients','clients.id','=','bookings.client_id')
                                ->leftJoin('services','services.id','=','bookings.service_id')
                                ->leftJoin('test_centers','test_centers.id','=','bookings.provider_id')
                                ->where('bookings.id', base64_decode($req->id))
                                ->select(DB::raw('*, bookings.id, clients.name as client_name, services.name as service_name'))
                                ->first();
            $bookingId = $req->id;
            //$bookingId = Crypt::encrypt(base64_decode($req->id));
            if($bookingDetails){
                return view('testcenter.pages.pcr.pcr-details')
                    ->withBookingId($bookingId)             
                    ->withBooking($bookingDetails);               
            } else {
                return redirect()->route('testcenter.booking.pcrlist');
            }
        }
    }



}
