<?php namespace App\Http\Controllers; use App\Http\Support\ValidationRule; use App\Jobs\SendMail; use App\Models\Kegiatan; use App\Models\KegiatanPeserta; use App\Models\Konferensi; use App\Models\Registrasi; use Carbon\Carbon; use Exception; use GuzzleHttp\Client; use GuzzleHttp\Psr7\MultipartStream; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; use RealRashid\SweetAlert\Facades\Alert; class RegistrasiController extends Controller { public function create(){ $kegiatan = Kegiatan::orderBy('id')->get(); $konferensi = Konferensi::get(); $date = Date('Y-m-d'); // $lastKode = Registrasi::query()->whereDate('created_at', $date)->max('kode_registrasi'); // $nourut = sprintf("%05s", ((int) substr($lastKode, -5))+1); // $tgldaftar = Carbon::now()->format('d-m-Y'); // $komponen = explode('-', $tgldaftar); // $kode_registrasi = $komponen[0].$komponen[1].$nourut; $data = [ 'kegiatan' => $kegiatan, 'konferensi' => $konferensi, // 'kode_registrasi' => $kode_registrasi ]; return view('form_registrasi', $data); } public function preview(Request $request){ $rules = [ 'nama' => 'required|string', 'email' => 'required|email:rfc,dns', 'telepon' => 'required|numeric', 'instansi' => 'required|string', 'jabatan' => 'required|string', 'alamat' => 'required|string', 'kodepos' => 'required|string', 'kota' => 'required|string', ]; $request->validate($rules, ValidationRule::getErrorMessage($rules)); DB::beginTransaction(); try{ $date = Date('Y-m-d'); $lastKode = Registrasi::query()->whereDate('created_at', $date)->max('kode_registrasi'); $nourut = sprintf("%05s", ((int) substr($lastKode, -5))+1); $tgldaftar = Carbon::now()->format('d-m-Y'); $komponen = explode('-', $tgldaftar); $kode_registrasi = $komponen[0].$komponen[1].$nourut; $registrasi = [ 'nama' => strip_tags($request->nama), 'email' => strip_tags($request->email), 'telepon' => strip_tags($request->telepon), 'instansi' => strip_tags($request->instansi), 'jabatan' => strip_tags($request->jabatan), 'alamat' => strip_tags($request->alamat), 'kode_pos' => strip_tags($request->kodepos), 'kota' => strip_tags($request->kota), 'kode_registrasi' => strip_tags($kode_registrasi) ]; $tglRegistrasi = Carbon::now()->format('Y-m-d h:i:s'); $konaspi = Kegiatan::query()->where('id', '498633a9-082c-4a4a-9dbd-e20b678ec15e')->first(); //inisial harga $totalHarga = (int) $konaspi->harga; if($request->konferensi[0] != null || $request->kegiatan0[0] != "498633a9-082c-4a4a-9dbd-e20b678ec15e"){ $i = 0; foreach($request->konferensi as $kon){ $daftarKonferensi[] = $kon; $konferensi = Konferensi::query()->where('id', $kon)->first(); foreach($request->input('kegiatan'.$i) as $keg){ $daftarKegiatan[] = $keg; $kegiatan[] = Kegiatan::select('id', 'nama', 'harga')->where('id', $keg)->first(); } $kegiatanpeserta[] = [ 'id_kegiatan' => $kegiatan[$i]['id'], 'id_konferensi' => $daftarKonferensi[$i], 'nama_kegiatan' => $kegiatan[$i]['nama'], 'nama_konferensi' => $konferensi->nama, 'harga' => $kegiatan[$i]['harga'] ]; $hargaKonferensi[] = [ 'idkon' => $konferensi->id, 'namakon' => $konferensi->nama, 'hargakon' => $konferensi->harga, 'namakeg' => $kegiatan[$i]['nama'] ]; $totalHarga += (int) $konferensi->harga; $i++; } } else{ $hargaKonferensi = null; $kegiatanpeserta[] = [ 'id_kegiatan' => $request->kegiatan0[0], 'id_konferensi' => null, ]; } $data = [ 'registrasi' => $registrasi, 'kegiatanpeserta' => $kegiatanpeserta, 'tglRegistrasi' => $tglRegistrasi, 'konaspi' => $konaspi, 'hargaKonferensi' => $hargaKonferensi, 'totalHarga' => $totalHarga ]; return view('preview', $data)->with('success', 'Data saved successfully'); } catch(Exception $e){ Log::error($e); DB::rollBack(); return redirect()->back() ->with('error', 'Data failed to save'); } } public function store(Request $request) { DB::beginTransaction(); try{ $registrasi = json_decode($request->registrasi, true); $kegiatanpeserta = json_decode($request->kegiatanpeserta, true); $konaspi = json_decode($request->konaspi, true); $hargaKonferensi = json_decode($request->hargaKonferensi, true); $tglRegistrasi = $request->tglRegistrasi; // $totalHargas = $request->totalHarga; $registrasi = Registrasi::query()->create($registrasi); $id_registrasi = $registrasi->id; $jumlahKeg = count($kegiatanpeserta); //inisial harga $konvensi = Kegiatan::find($konaspi['id']); $konv = $konvensi->toArray(); $totalHarga = (int) $konvensi->harga; foreach($kegiatanpeserta as $keg){ $kegpeserta = [ 'id_registrasi' => $id_registrasi, 'id_kegiatan' => $keg['id_kegiatan'], 'id_konferensi' => $keg['id_konferensi'], ]; KegiatanPeserta::query()->create($kegpeserta); if($keg['id_kegiatan'] != '498633a9-082c-4a4a-9dbd-e20b678ec15e'){ $konferensi = Konferensi::query()->where('id', $keg['id_konferensi'])->first(); $kegkonaspi = Kegiatan::find($keg['id_kegiatan']); $totalHarga += (int) $konferensi->harga; $kegPeserta[] = [ 'idkon' => $konferensi->id, 'namakon' => $konferensi->nama, 'hargakon' => $konferensi->harga, 'namakeg' => $kegkonaspi->nama ]; } else{ $kegPeserta = null; } } $multipartData = [ 'noid' => $registrasi['kode_registrasi'], 'nama' => $registrasi['nama'], 'tagihan' => $totalHarga ]; $registrasi->save(); $generatedVa = $this->generateVa($multipartData); $arrResponse = json_decode($generatedVa, true); $registrasi->status_va = $arrResponse['BTNresponse']; $registrasi->tagihan = $totalHarga; $registrasi->save(); if($arrResponse['BTNresponse'] != 'Request has been processed successfully'){ DB::rollBack(); Log::error('---'); Log::error($multipartData); Log::error($arrResponse['BTNresponse']); Log::error('---'); return redirect()->back() ->with('error', 'Data failed to save'); } DB::commit(); $data = [ 'registrasi' => $registrasi, 'tglRegistrasi' => $tglRegistrasi, 'konaspi' => $konv, 'hargaKonferensi' => $kegPeserta, 'totalHarga' => $totalHarga, ]; SendMail::dispatch($data, 'email.invoice', $data['registrasi']->email, 'registrasi', 'email_regis_sent_at'); return view('invoice', $data)->with('success', 'Data saved successfully'); } catch(Exception $e){ Log::error($e); DB::rollBack(); return redirect()->route('user.create') ->with('error', 'Data failed to save'); } } private function generateVa($multipartData) { $client = new Client(); $options = [ 'form_params' => [ 'credential' => '$2a$08$xSX/XuObiJ3GoJWhjDTyXepT64o1ze.A/.OVYB15uzKW3V7pxgZ6O', 'noid' => $multipartData['noid'], 'nama' => $multipartData['nama'], 'tagihan' => $multipartData['tagihan'], 'flag' => 'F', 'expired_date' => '2024-08-01T23:59:59+07:00', 'deskripsi' => 'pembayaran konaspi' ] ]; $response = $client->request('POST', 'https://neosidata.unesa.ac.id/btn_v2/create', $options); return $response->getBody()->getContents(); } public function addFormKegiatan(Request $request) { $data['kegiatan'] = Kegiatan::get(); $data['konferensi'] = Konferensi::get(); $data['i'] = $request->i; return view('form_kegiatan', $data); } public function getDataRegis($va) { $registrasi = Registrasi::query() ->with('pkKegiatan', 'pkRegistrasiPeserta.rKegiatanPeserta', 'pkRegistrasiPeserta.rKonferensiPeserta') ->where('kode_registrasi', $va) ->first(); $konvensi = Kegiatan::query()->find('498633a9-082c-4a4a-9dbd-e20b678ec15e'); $konv = $konvensi->toArray(); $totalHarga = $totalHarga = (int) $konvensi->harga; foreach($registrasi->pkRegistrasiPeserta as $item){ if(is_null($item->rKonferensiPeserta)){ continue; } $konferensi = $item->rKonferensiPeserta; $kegkonaspi = $item->rKegiatanPeserta; $totalHarga += (int) $konferensi->harga; $kegPeserta[] = [ 'idkon' => $konferensi->id, 'namakon' => $konferensi->nama, 'hargakon' => $konferensi->harga, 'namakeg' => $kegkonaspi->nama ]; } $data = [ 'registrasi' => $registrasi, 'tglRegistrasi' => $registrasi->created_at, 'konaspi' => $konv, 'hargaKonferensi' => $kegPeserta, 'totalHarga' => $totalHarga, ]; return $data; } public function updatePembayaran(Request $request, $va) { if($request->bearerToken() != 'zGKEX7CDNLOvVtetz6lqFZzhZv11Gr9Y2MKVIQmqusAyD5STPPEt7ZC1gl8P'){ return response([ 'status' => 403, 'message' => 'unauthorized access' ], 200); } $registrasi = Registrasi::query() ->with('pkKegiatan', 'pkRegistrasiPeserta.rKegiatanPeserta', 'pkRegistrasiPeserta.rKonferensiPeserta') ->where('kode_registrasi', $va) ->update([ 'tanggal_bayar' => Carbon::now() ]); $data = $this->getDataRegis($va); SendMail::dispatch($data, 'email.selesai_pembayaran', $data['registrasi']->email, 'registrasi', 'email_pembayaran_sent_at'); return response([ 'status' => 200, 'message' => 'success' ], 200); } public function testEmail(Request $request) { $data['registrasi'] = Registrasi::query()->where('kode_registrasi', '070300013')->first(); SendMail::dispatch($data, 'email.invoice', $data['registrasi']->email, 'registrasi', 'email_regis_sent_at'); } public function checkRegistrasi(Request $request, $va) { $data = $this->getDataRegis($va); return view('email.selesai_pembayaran', $data); } }