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,
];
}
}