HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/sarvodayahospital/app/Http/Controllers/EventOrganiserController.php
<?php

namespace App\Http\Controllers;

use App\ccAvenueCrypto;
use App\Mail\ConclaveMail;
use App\Models\EventOrganiser;
use App\Models\Media;
use App\Models\MediaMorph;
use App\Sms;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class EventOrganiserController extends Controller
{
    public function cochlearEventRegistration() {
        return view('pages.cochlear-event-registration');
    }

    public function store(Request $request) {
        $request->validate([
            'amount' => 'required',
            'name' => 'required',
            'profession' => 'required',
            'email' => 'nullable|email',
            'phone' => 'required',
            'organization' => 'required',
            'qualification' => 'required',
            'city' => 'required',
            'other_profession' => 'required_if:profession,Other',
        ]);

        $profession = $request->profession;

        if ($request->profession == 'Other') {
            $profession = $request->other_profession;
        }

        $event = EventOrganiser::create([
            'Name' => $request->title. ' ' .$request->name,
            'Email' => $request->email,
            'Phone' => $request->phone,
            'City' => $request->city,
            'Profession' => $profession,
            'Organization' => $request->organization,
            'Qualification' => $request->qualification,
            'RegistrationID' => $request->registration_id,
            'Amount' => decrypt($request->amount),
            'PaymentStatus' => 'Initiated',
            'EventName' => $request->event_name,
            'TxnNumber' => uniqid(),
            'InvoiceNumber' => $this->generateInvoice()
        ]);

        return redirect()->back()->with('event', $event);
    }

    public function nursingEventRegistration() {
        return view('pages.nursing-event-registration');
    }

    public function nursingStore(Request $request) {
        $request->validate([
            'name' => 'required',
            'profession' => 'required',
            'email' => 'nullable|email',
            'phone' => 'required',
            'organization' => 'required',
            'city' => 'required',
            'id_card' => 'required_if:profession,Other,Student|file|max:2048',
            'other_profession' => 'required_if:profession,Nurse,Nurse Admin',
        ]);

        $profession = $request->profession;

        $amount = $request->amount;

        $currentDate = Carbon::now()->format('Y-m-d');

        $feeExpiredOn = Carbon::parse('2024-04-25')->format('Y-m-d');

        if ($request->profession == 'Other') {
            $profession = $request->other_profession;
        }

        $file = $request->file('id_card');

        $urlPath = null;

        $event = EventOrganiser::create([
            'Name' => $request->title. ' ' .$request->name,
            'Email' => $request->email,
            'Phone' => $request->phone,
            'City' => $request->city,
            'Profession' => $profession,
            'RegistrationID' => $request->other_profession,
            'Organization' => $request->organization,
            'Qualification' => $request->qualification,
            // 'RegistrationID' => $request->registration_id,
            'Amount' => $amount,
            'PaymentStatus' => 'Initiated',
            'EventName' => $request->event_name,
            'TxnNumber' => uniqid(),
            'InvoiceNumber' => $this->generateInvoice()
        ]);

        if ($file) {
            $fileName = time() . $file->getClientOriginalName();
            $filePath = 'events/' . $fileName;
            Storage::disk('s3')->put($filePath, file_get_contents($file), 'public');
            $urlPath = Storage::disk('s3')->url($filePath);

            $media = Media::create([
                'name' => $fileName,
                'url' => $urlPath,
                'hash' => $fileName,
                'mime' => '.png',
                'size' => 100,
                'provider' => 'aws-s3'
            ]);

            MediaMorph::create([
                'upload_file_id' => $media->id,
                'related_id' => $event->id,
                'related_type' => 'event_organisers',
                'field' => 'Attachment',
                'order' => '1'
            ]);
        }

        return redirect()->back()->with('event', $event);
    }

    public function paymentResponse(Request $request) {
        $order_status = '';
        $encResponse = $request->encResp;
        $data = [];

        if ($encResponse) {
            $ccACrypto = new ccAvenueCrypto();
            $workingKey = config('sarvodaya.ccAvenueWorkingKey');
            $rcvdString = $ccACrypto->decrypt($encResponse, $workingKey);
            $order_status = '';
            $decryptValues = explode('&', $rcvdString);
            $dataSize = sizeof($decryptValues);

            for ($i = 0; $i < $dataSize; ++$i) {
                $information = explode('=', $decryptValues[$i]);
                $data[$information[0]] = urldecode($information[1]);
            }

            $order_id = $data['order_id'];

            if ($data['order_status'] == 'Success') {
                info('Event Payment Success');
                $evnt = EventOrganiser::where('TxnNumber', $order_id)->first();

                # Trigger email notification
                if (!is_null($evnt->Email)) {
                    info('Mail Triggered');
                    Mail::to($evnt->Email)
                        ->bcc(config('sarvodaya.lead_recipient.bcc'))
                        ->send(new ConclaveMail($evnt));
                }

                if (!is_null($evnt->Phone)) {
                    $sms = new Sms;
                    $sms->sendWhatsAppConfirmationSMS($evnt->Phone);
                }
            }

            info('Event Payment Status');
            EventOrganiser::where('TxnNumber', $order_id)->update([
                'PaymentStatus' => $data['order_status'],
                'PaymentResponse' => $data,
                'published_at' => Carbon::now()
            ]);

            return view('pages.event-payment-status', compact('data'));
        }

        return view('pages.event-payment-status', compact('data'));
    }

    public function generateInvoice() {
        $invoice_count = EventOrganiser::count();

        return 'T/23-24/C0000'.$invoice_count;
    }

    public function downloadInvoice($order_id) {
        $event_invoice = EventOrganiser::where('TxnNumber', $order_id)->first()->toArray();

        $tax_info = $this->calculateTax($event_invoice['Amount']);

        $logoImg = public_path('img/logo-ori.svg');

        view()->share('event_invoice', $event_invoice);

        $context = stream_context_create([
            'ssl' => [
                'verify_peer' => FALSE,
                'verify_peer_name' => FALSE,
                'allow_self_signed' => TRUE
            ]
        ]);

        $pdf = Pdf::setOptions(['isHtml5ParserEnabled' => true, 'isRemoteEnabled' => true]);
        $pdf->getDomPDF()->setHttpContext($context);
        $pdf->loadView('pages.event-invoice', compact('event_invoice', 'tax_info'));

        return $pdf->download('invoice.pdf');
    }

    protected function calculateTax($amount) {
        $cgst = (int)$amount*9/100;
        $sgst = (int)$amount*9/100;
        $excludeTaxAmt = (int)$amount - (int)$amount*18/100;
        $total_amount = (int)$amount;

        return [
            'cgst' => $cgst,
            'sgst' => $sgst,
            'taxable_value' => $excludeTaxAmt,
            'total_amount' => $total_amount,
        ];
    }
}