From 4d476bea75c9e99596d14c2debf001df6edb0faf Mon Sep 17 00:00:00 2001 From: JokoPrasetio Date: Tue, 5 Aug 2025 16:00:45 +0700 Subject: [PATCH] progress laporan --- app/Http/Controllers/CustomerController.php | 14 +- app/Http/Controllers/PesananController.php | 86 ++ app/Mail/NotifikasiCustomer.php | 73 ++ app/Mail/NotifikasiKonfirmasiPembayaran.php | 61 ++ app/Mail/NotifikasiPembayaran.php | 47 ++ composer.json | 4 +- composer.lock | 737 +++++++++++++++++- config/database.php | 10 +- config/queue.php | 2 +- public/gambar/qris.jpg | Bin 0 -> 93331 bytes public/js/checkout/index.js | 249 +++--- public/js/order_guest/index.js | 2 +- public/js/pekerjaan/_init.js | 2 + public/js/pekerjaan/action.js | 4 + public/js/pesanan_pending/_init.js | 3 + public/js/pesanan_pending/action.js | 4 + public/js/pesanan_selesai/_init.js | 2 + public/js/pesanan_selesai/detail_order.js | 4 + .../pesanan/pekerjaan/index.blade.php | 41 +- .../pesanan/pekerjaan/modal/export.blade.php | 43 + .../dashboard/pesanan/pekerjaan/pdf.blade.php | 170 ++++ .../dashboard/pesanan/pending/index.blade.php | 7 + .../pesanan/pending/modal/export.blade.php | 43 + .../dashboard/pesanan/pending/pdf.blade.php | 162 ++++ .../dashboard/pesanan/selesai/index.blade.php | 7 + .../pesanan/selesai/modal/export.blade.php | 43 + .../dashboard/pesanan/selesai/pdf.blade.php | 162 ++++ .../guest/checkout/checkout_payment.blade.php | 2 + .../modal/confirmPaymentBilling.blade.php | 36 + .../guest/checkout/modal/noteOrder.blade.php | 28 + .../views/guest/checkout/step/step3.blade.php | 94 +-- resources/views/guest/layout_mail.blade.php | 25 + .../views/mail/notifikasi-customer.blade.php | 12 + routes/web.php | 12 + 34 files changed, 2022 insertions(+), 169 deletions(-) create mode 100644 app/Mail/NotifikasiCustomer.php create mode 100644 app/Mail/NotifikasiKonfirmasiPembayaran.php create mode 100644 app/Mail/NotifikasiPembayaran.php create mode 100644 public/gambar/qris.jpg create mode 100644 resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php create mode 100644 resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php create mode 100644 resources/views/dashboard/pesanan/pending/modal/export.blade.php create mode 100644 resources/views/dashboard/pesanan/pending/pdf.blade.php create mode 100644 resources/views/dashboard/pesanan/selesai/modal/export.blade.php create mode 100644 resources/views/dashboard/pesanan/selesai/pdf.blade.php create mode 100644 resources/views/guest/checkout/modal/confirmPaymentBilling.blade.php create mode 100644 resources/views/guest/checkout/modal/noteOrder.blade.php create mode 100644 resources/views/guest/layout_mail.blade.php create mode 100644 resources/views/mail/notifikasi-customer.blade.php diff --git a/app/Http/Controllers/CustomerController.php b/app/Http/Controllers/CustomerController.php index 7812906..8afb953 100644 --- a/app/Http/Controllers/CustomerController.php +++ b/app/Http/Controllers/CustomerController.php @@ -2,12 +2,15 @@ namespace App\Http\Controllers; +use App\Mail\NotifikasiCustomer; +use App\Mail\NotifikasiPembayaran; use App\Models\Karbohidrat; use App\Models\Order; use App\Models\OrderDetail; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; class CustomerController extends Controller @@ -255,7 +258,8 @@ class CustomerController extends Controller $payloadOrderDetail['jumlah'] = $value['jumlah']; $payloadOrderDetail['tgl_antar'] = $value['tgl']; $payloadOrderDetail['type'] = $value['kategoriPemesanan']; - $payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id']; + $payloadOrderDetail['karbohidrat_id'] = $value['karbohidrat_id'] ?? null; + $payloadOrderDetail['catatan'] = $value['catatan'] ?? null; if($cart['jenis_menu'] === "paket"){ $payloadOrderDetail['master_paket_menu_id'] = $cart['id_menu']; }else{ @@ -265,7 +269,9 @@ class CustomerController extends Controller } } //code... - + if($order->email){ + Mail::to($order->email)->queue(new NotifikasiCustomer($order->nama_pemesan, $order->no_order, $order->total_harga)); + } DB::commit(); return response()->json([ 'status' => true, @@ -319,6 +325,9 @@ class CustomerController extends Controller // Update data order $order->update($payload); + if($order->email){ + Mail::to($order->email)->queue(new NotifikasiPembayaran($order->nama_pemesan, $order->no_order)); + } DB::commit(); session()->flash('payment_success', true); session()->flash('no_order', $noOrder); @@ -328,7 +337,6 @@ class CustomerController extends Controller ], 200); return back()->with('success', 'Bukti pembayaran berhasil diunggah.'); } catch (\Throwable $th) { - dd($th); DB::rollBack(); return response([ 'status' => false, diff --git a/app/Http/Controllers/PesananController.php b/app/Http/Controllers/PesananController.php index 3c9609a..b290dd9 100644 --- a/app/Http/Controllers/PesananController.php +++ b/app/Http/Controllers/PesananController.php @@ -2,12 +2,15 @@ namespace App\Http\Controllers; +use App\Mail\NotifikasiKonfirmasiPembayaran; use App\Models\Order; use App\Models\OrderDetail; +use Barryvdh\DomPDF\Facade\Pdf; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Mail; class PesananController extends Controller { @@ -86,6 +89,11 @@ class PesananController extends Controller $payload['note_dibatalkan'] = request('note_dibatalkan'); } $order->update($payload); + + if($order->email){ + Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga)); + } + DB::connection('dbOrderGizi')->commit(); return response()->json([ 'status' => true, @@ -113,6 +121,10 @@ class PesananController extends Controller 'cara_pembayaran' => 'Billing' ]; $order->update($payload); + + if($order->email){ + Mail::to($order->email)->queue(new NotifikasiKonfirmasiPembayaran($order->nama_pemesan, $order->no_order, $order->total_harga)); + } DB::connection('dbOrderGizi')->commit(); return response()->json([ 'status' => true, @@ -239,6 +251,80 @@ class PesananController extends Controller 'data' => $data ]); } + + public function exportPekerjaan(){ + $startDate = request('start_date'); + $endDate = request('end_date'); + $now = Carbon::now()->format('Y-m-d H-i'); + $orderDetail = OrderDetail::with(['menu', 'paketMenu', 'order'])->whereHas('order', function($q){ + $q->where('status_order', 'Lunas'); + })->whereBetween('tgl_antar', [$startDate, $endDate])->get(); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $data = [ + 'pekerjaan' => $orderDetail, + 'waktu_cetak' => $waktu_cetak, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.pekerjaan.pdf', $data); + return $pdf->stream("daftar-pesanan-{$now}.pdf"); + } + + + public function exportPending(){ + $startDate = Carbon::parse(request('start_date'))->startOfDay(); + $endDate = Carbon::parse(request('end_date'))->endOfDay(); + $order = Order::where('statusenabled', true) + ->whereBetween('entry_at', [$startDate, $endDate]) + ->with('orderDetail') + ->whereHas('orderDetail', function($q) { + $q->where('status_order', '!=', 'Selesai'); + }) + ->get(); + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + + $data = [ + 'waktu_cetak' => $waktu_cetak, + 'orders' => $order, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.pending.pdf', $data); + + return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); + } + + public function exportSelesai(){ + $startDate = Carbon::parse(request('start_date'))->startOfDay(); + $endDate = Carbon::parse(request('end_date'))->endOfDay(); + + $order = Order::where('statusenabled', true) + ->whereBetween('entry_at', [$startDate, $endDate]) + ->with('orderDetail') + ->whereHas('orderDetail') // hanya order yang punya detail + ->whereDoesntHave('orderDetail', function($q) { + $q->where('status_order', '!=', 'Selesai'); + }) + ->get(); + + $startDateFormatted = Carbon::parse($startDate)->locale('id')->translatedFormat('d F Y'); + $endDateFormatted = Carbon::parse($endDate)->locale('id')->translatedFormat('d F Y'); + $waktu_cetak = Carbon::now()->locale('id')->translatedFormat('d F Y'); + + $data = [ + 'waktu_cetak' => $waktu_cetak, + 'orders' => $order, + 'startDate' => $startDateFormatted, + 'endDate' => $endDateFormatted + ]; + $pdf = Pdf::loadView('dashboard.pesanan.selesai.pdf', $data); + + return $pdf->stream('laporan-pesanan-' . now()->format('Ymd-His') . '.pdf'); + } /** * Show the form for creating a new resource. */ diff --git a/app/Mail/NotifikasiCustomer.php b/app/Mail/NotifikasiCustomer.php new file mode 100644 index 0000000..5cad41a --- /dev/null +++ b/app/Mail/NotifikasiCustomer.php @@ -0,0 +1,73 @@ +pemesan = $pemesan; + $this->noOrder = $noOrder; + $this->total_harga = $total_harga; + } + + /** + * Get the message content definition. + */ + public function build(){ + return $this->subject('Konfirmasi Pesanan Anda')->html(" +
+

✅ Pesanan Berhasil!

+

Halo, {$this->pemesan},

+

Terima kasih telah melakukan pemesanan. Berikut detail pesanan Anda:

+ + + + + + + + + + + + + + + + + + +
No. Order{$this->noOrder}
Tanggal" . now()->format('d M Y H:i') . "
StatusMenunggu Pembayaran
Nominal Harus BayarRp ". number_format($this->total_harga, 0,',', '.') + ."
+ +

Silakan segera lakukan pembayaran ke rekening berikut:

+ + +

Jika Anda tidak merasa melakukan pesanan ini, abaikan email ini.

+ +
+

© " . date('Y') . " RSAB Harapan Kita

+
+ "); + } +} diff --git a/app/Mail/NotifikasiKonfirmasiPembayaran.php b/app/Mail/NotifikasiKonfirmasiPembayaran.php new file mode 100644 index 0000000..799922b --- /dev/null +++ b/app/Mail/NotifikasiKonfirmasiPembayaran.php @@ -0,0 +1,61 @@ +pemesan = $pemesan; + $this->noOrder = $noOrder; + $this->total_harga = $total_harga; + } + + /** + * Get the message content definition. + */ + public function build(){ + return $this->subject('Pembayaran Telah Dikonfirmasi')->html(" +
+

✅ Pembayaran Berhasil Diverifikasi

+

Halo, {$this->pemesan},

+

Pembayaran kamu untuk pesanan #{$this->noOrder} telah berhasil kami verifikasi.

+ + + + + + + + + + + + + + +
Nomor Order{$this->noOrder}
Total PembayaranRp " . number_format($this->total_harga, 0, ',', '.') . "
StatusPembayaran Diterima
+ +

Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.

+ +
+

© " . date('Y') . " RSAB Harapan Kita

+
+ "); + } +} diff --git a/app/Mail/NotifikasiPembayaran.php b/app/Mail/NotifikasiPembayaran.php new file mode 100644 index 0000000..f792a63 --- /dev/null +++ b/app/Mail/NotifikasiPembayaran.php @@ -0,0 +1,47 @@ +pemesan = $pemesan; + $this->noOrder = $noOrder; + } + + /** + * Get the message content definition. + */ + public function build(){ + return $this->subject('Pembayaran Diterima - Menunggu Konfirmasi')->html(" +
+

Menunggu Konfirmasi Pembayaran

+

Halo, {$this->pemesan},

+

Kami telah menerima bukti pembayaran untuk pesanan kamu dengan nomor {$this->noOrder}.

+

Tim kami akan segera memverifikasi pembayaran tersebut.

+ +

Mohon tunggu konfirmasi selanjutnya dari admin. Kami akan kirimkan email ketika pembayaran telah diverifikasi.

+ +

Terima kasih telah melakukan pemesanan.

+ +
+

© " . date('Y') . " RSAB Harapan Kita

+
+ "); + } +} diff --git a/composer.json b/composer.json index f75565d..ceae8c3 100644 --- a/composer.json +++ b/composer.json @@ -7,8 +7,10 @@ "license": "MIT", "require": { "php": "^8.2", + "barryvdh/laravel-dompdf": "^3.1", "laravel/framework": "^12.0", - "laravel/tinker": "^2.10.1" + "laravel/tinker": "^2.10.1", + "phpoffice/phpspreadsheet": "^4.5" }, "require-dev": { "fakerphp/faker": "^1.23", diff --git a/composer.lock b/composer.lock index 5a8f211..4bf5e89 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,85 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "88970a0117c062eed55fa8728fc43833", + "content-hash": "696ae0d1187bc1634529f1760a11ffd0", "packages": [ + { + "name": "barryvdh/laravel-dompdf", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d", + "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^3.0", + "illuminate/support": "^9|^10|^11|^12", + "php": "^8.1" + }, + "require-dev": { + "larastan/larastan": "^2.7|^3.0", + "orchestra/testbench": "^7|^8|^9|^10", + "phpro/grumphp": "^2.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf", + "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf" + }, + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-02-13T15:07:54+00:00" + }, { "name": "brick/math", "version": "0.13.1", @@ -135,6 +212,85 @@ ], "time": "2024-02-09T16:56:22+00:00" }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.3", @@ -378,6 +534,161 @@ ], "time": "2024-02-05T11:56:58+00:00" }, + { + "name": "dompdf/dompdf", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "a51bd7a063a65499446919286fb18b518177155a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/a51bd7a063a65499446919286fb18b518177155a", + "reference": "a51bd7a063a65499446919286fb18b518177155a", + "shasum": "" + }, + "require": { + "dompdf/php-font-lib": "^1.0.0", + "dompdf/php-svg-lib": "^1.0.0", + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-gd": "*", + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v3.1.0" + }, + "time": "2025-01-15T14:09:04+00:00" + }, + { + "name": "dompdf/php-font-lib", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "The FontLib Community", + "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/dompdf/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/1.0.1" + }, + "time": "2024-12-02T14:37:59+00:00" + }, + { + "name": "dompdf/php-svg-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "The SvgLib Community", + "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/dompdf/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.0" + }, + "time": "2024-04-29T13:26:35+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.4.0", @@ -2006,6 +2317,258 @@ ], "time": "2024-12-08T08:18:47+00:00" }, + { + "name": "maennchen/zipstream-php", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.2" + }, + "require-dev": { + "brianium/paratest": "^7.7", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^11.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2025-01-27T12:07:53+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "masterminds/html5", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/Masterminds/html5-php.git", + "reference": "fcf91eb64359852f00d921887b219479b4f21251" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Masterminds\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Butcher", + "email": "technosophos@gmail.com" + }, + { + "name": "Matt Farina", + "email": "matt@mattfarina.com" + }, + { + "name": "Asmir Mustafic", + "email": "goetas@gmail.com" + } + ], + "description": "An HTML5 parser and serializer.", + "homepage": "http://masterminds.github.io/html5-php", + "keywords": [ + "HTML5", + "dom", + "html", + "parser", + "querypath", + "serializer", + "xml" + ], + "support": { + "issues": "https://github.com/Masterminds/html5-php/issues", + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" + }, + "time": "2025-07-25T09:04:22+00:00" + }, { "name": "monolog/monolog", "version": "3.9.0", @@ -2507,6 +3070,112 @@ ], "time": "2025-05-08T08:14:37+00:00" }, + { + "name": "phpoffice/phpspreadsheet", + "version": "4.5.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "2ea9786632e6fac1aee601b6e426bcc723d8ce13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2ea9786632e6fac1aee601b6e426bcc723d8ce13", + "reference": "2ea9786632e6fac1aee601b6e426bcc723d8ce13", + "shasum": "" + }, + "require": { + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.1", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1 || ^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0 || ^2.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/4.5.0" + }, + "time": "2025-07-24T05:15:59+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.3", @@ -3271,6 +3940,72 @@ }, "time": "2025-06-25T14:20:11+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "v8.9.0", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9", + "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41", + "rawr/cross-data-providers": "^2.0.0" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0" + }, + "time": "2025-07-11T13:20:48+00:00" + }, { "name": "symfony/clock", "version": "v7.3.0", diff --git a/config/database.php b/config/database.php index 56a1849..c3004ca 100644 --- a/config/database.php +++ b/config/database.php @@ -85,11 +85,11 @@ return [ 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DB_URL'), - 'host' => env('DB_HOST', '127.0.0.1'), - 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'laravel'), - 'username' => env('DB_USERNAME', 'root'), - 'password' => env('DB_PASSWORD', ''), + 'host' => env('DB_HOST_ORDER_GIZI', '127.0.0.1'), + 'port' => env('DB_PORT_ORDER_GIZI', '5432'), + 'database' => env('DB_DATABASE_ORDER_GIZI', 'laravel'), + 'username' => env('DB_USERNAME_ORDER_GIZI', 'root'), + 'password' => env('DB_PASSWORD_ORDER_GIZI', ''), 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, diff --git a/config/queue.php b/config/queue.php index f022e81..1b945dd 100644 --- a/config/queue.php +++ b/config/queue.php @@ -36,7 +36,7 @@ return [ 'database' => [ 'driver' => 'database', - 'connection' => env('DB_QUEUE_CONNECTION'), + 'connection' => env('DB_CONNECTION_ORDER_GIZI'), 'table' => env('DB_QUEUE_TABLE', 'jobs'), 'queue' => env('DB_QUEUE', 'default'), 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), diff --git a/public/gambar/qris.jpg b/public/gambar/qris.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5d0d0f8bd9e675f1206fd80b1e8a39102ee0de7 GIT binary patch literal 93331 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 Ow^H;QfbIT0|9=1ixbCn3 literal 0 HcmV?d00001 diff --git a/public/js/checkout/index.js b/public/js/checkout/index.js index 442c28c..200ae39 100644 --- a/public/js/checkout/index.js +++ b/public/js/checkout/index.js @@ -7,6 +7,16 @@ let order_id = sessionStorage.getItem('order_id') || '[]'; // EVENT ON LOAD // ======================= document.addEventListener('DOMContentLoaded', () => { + const checkCart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const validChart = checkCart.length > 0 && checkCart.every(item => + Array.isArray(item.pesanan) && + item.pesanan.length > 0 + ); + if(!validChart){ + window.location.href ='/'; + return + } + $("#cartButton").addClass('d-none'); $("#no_order_result").val(order_id) let currentStep = 0; @@ -57,7 +67,7 @@ document.addEventListener('DOMContentLoaded', () => { } } - + if (!sessionStorage.getItem('order_id')) { await submitOrderToServer(); // async function simpan ke server @@ -241,105 +251,114 @@ function renderCartSummary() { const countDate = pesananList.length; pesananHTML += ` -
-
+
+
- -
- -
+ +
+ +
- - ${item.apakah_someday ? `` : ` -
- -
`} + +
+ +
- -
- + + ${(karhohidrats || []).map(k => ` + + `).join('')} + +
`} - ${ - item.apakah_someday - ? ( - item.apakah_menu_siang && item.apakah_menu_sore - ? ` - - - ` - : item.apakah_menu_siang - ? `` + +
+ -
+ ) + } + +
- -
-
- - - -
-
+ +
+
+ + + +
+
- -
- ${countDate > 1 - ? `` - : ''} -
+ +
+ ${countDate > 1 + ? `` + : '' + } +
+ +
+
-
- `; }); const itemHTML = `
+
${item.nama_menu}
-
${item.nama_menu}
@@ -356,15 +375,15 @@ function renderCartSummary() { ${item.kalori ? `
Kalori: ${item.kalori} kkal
` : ''} -
Silakan isi tanggal pemesanan dan pilih karbohidrat yang diinginkan
+
Silakan isi tanggal pemesanan, catatan pemesanan (opsional) dan pilih karbohidrat yang diinginkan
${pesananHTML} - +
' - +
Total: Rp ${itemTotal.toLocaleString('id-ID')}
@@ -422,7 +441,6 @@ function onKategoriChange(itemId, index, isToday) { const kategori = selectEl.value; let now = new Date(); let jam = now.getHours(); - console.log(isToday); if (kategori === "Makan Siang" && isToday && jam >= 10) { batasLewat = true; @@ -554,6 +572,8 @@ function validateCartBeforeSubmit() { let errorMessage = ""; cart.forEach((item, index) => { + console.log(item.apakah_someday); + const pesananList = item.pesanan || []; pesananList.forEach((pesanan, i) => { if (!pesanan.tgl) { @@ -565,7 +585,7 @@ function validateCartBeforeSubmit() { } else if (!pesanan.jumlah || pesanan.jumlah <= 0) { isValid = false; errorMessage = `Jumlah harus lebih dari 0 pada item "${item.nama_menu}" (baris ${i + 1})`; - }else if(!pesanan.karbohidrat_id){ + }else if(!pesanan.karbohidrat_id && !item?.apakah_someday){ isValid = false; errorMessage = `Karbohidrat belum diisi pada item "${item.nama_menu}" (baris ${i + 1})` } @@ -582,7 +602,9 @@ function hitungTotalHarga(){ let total =0; cart.forEach(item => { - const harga = biodata.jenis_customer === "Karyawan RSAB Harapan Kita" ? item.harga_karyawan || 0 : item.harga_public || 0 + const harga = biodata.jenis_customer === "Karyawan RSAB Harapan Kita" ? item.harga_karyawan : item.harga_public || 0 + console.log(harga); + const itemTotal = item.pesanan?.reduce((sum, p) => sum + (p.jumlah * harga), 0); total += itemTotal }) @@ -619,9 +641,9 @@ function initFlatpickrTersedia(item, i) { const totalMenitFlatSekarang = jamFlat * 60 + menitFlat; const menitBatasFlat = 13 * 60; - + const lewatBatasNormal = totalMenitFlatSekarang >= menitBatasFlat; - + // Ambil string tgl_tersedia dan ubah jadi array tanggal lengkap const dayNumbers = (item.tgl_tersedia || "") .split(',') @@ -650,7 +672,8 @@ function initFlatpickrTersedia(item, i) { availableDates.push(fullDateStr); } else { const selisihHari = Math.floor((fullDate - now) / (1000 * 60 * 60 * 24)); - + console.log(selisihHari); + if (selisihHari >= 1 || (selisihHari === 1 && !lewatBatasNormal)) { availableDates.push(fullDateStr); } @@ -659,6 +682,7 @@ function initFlatpickrTersedia(item, i) { } + let minTanggal = 'today'; // Jika item adalah someday dan waktu sekarang sudah lewat 13:00 @@ -669,23 +693,15 @@ function initFlatpickrTersedia(item, i) { } - - if(!item.apakah_someday){ - availableDates = availableDates.filter(dateStr => { - const dateObj = new Date(dateStr); - const selisihHari = Math.floor((dateObj - now) / (1000 * 60 * 60 * 24)); - return selisihHari >= 1 || (selisihHari === 1 && !lewatBatasNormal); - }); - } - flatpickr(`#tanggal-${item.id}-${i}`, { dateFormat: "Y-m-d", - ...(item?.apakah_someday ? { minDate: minTanggal,} : {enable : availableDates}), + ...(item?.apakah_someday ? {minDate: minTanggal} : {enable:availableDates}), defaultDate: item.pesanan[i]?.tgl || null, onChange: function(selectedDates, dateStr) { onTanggalChange(item.id, i, dateStr); } - }); + }); + } function increment(itemId, index) { @@ -708,6 +724,7 @@ function decrement(itemId, index) { } + function toggleBuktiPembayaran() { const metode = document.getElementById("cara_pembayaran").value; const buktiSection = document.getElementById("bukti_section"); @@ -717,9 +734,11 @@ function toggleBuktiPembayaran() { if (metode === "billing") { buktiSection.style.display = "none"; buktiInput.required = false; + $("#modalActionMethodBillingOrder").modal('show') } else { buktiSection.style.display = "block"; buktiInput.required = true; + $("#modalActionMethodBillingOrder").modal('hide') } } @@ -741,3 +760,39 @@ function validateTanggalPemesanan(item, tglDipilih) { return { valid: true }; } + +function notedOrder(id, i) { + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const item = cart.find(item => item.id === id); + const note = item?.pesanan?.[i]?.catatan || ''; + + $("#note_order").val(note); + $("#submitNote").data('id', id).data('index', i); + $("#notedPOrder").modal('show'); +} + + +document.querySelectorAll('.auto-expand').forEach(function(textarea){ + textarea.addEventListener('input', function () { + this.style.height = 'auto'; + this.style.height = this.scrollHeight + 'px'; + }); +}) + +document.getElementById('submitNote').addEventListener('click', function(e){ + e.preventDefault() + const id = $(this).data('id') + const index = $(this).data('index') + const noted = $("#note_order").val() + const cart = JSON.parse(sessionStorage.getItem('cart') || '[]'); + const item =cart.find(item => item.id === id) + console.log(id, index, item); + + if(item && item.pesanan && item.pesanan[index]){ + item.pesanan[index].catatan = noted + sessionStorage.setItem('cart', JSON.stringify(cart)); + $("#notedPOrder").modal('hide') + }else{ + alert('gagal menyimpan catatan') + } +}); diff --git a/public/js/order_guest/index.js b/public/js/order_guest/index.js index e999588..d8c9e54 100644 --- a/public/js/order_guest/index.js +++ b/public/js/order_guest/index.js @@ -376,7 +376,7 @@ id_menu :idMenu, nama_menu : $("#cathering_order_name").text(), harga_karyawan : parseRupiahToNumber($("#cathering_order_price_karyawan").text()), - harga_kp : parseRupiahToNumber($("#cathering_order_price_keluarga_pasien").text()), + harga_public : parseRupiahToNumber($("#cathering_order_price_public").text()), foto: resultFoto, jenis_menu: $('#cathering_order_jenis_menu').text(), deskripsi:$("#cathering_order_deskripsi").text(), diff --git a/public/js/pekerjaan/_init.js b/public/js/pekerjaan/_init.js index 48e92e2..5b40f3f 100644 --- a/public/js/pekerjaan/_init.js +++ b/public/js/pekerjaan/_init.js @@ -3,3 +3,5 @@ const datatablePekerjaan = $("#datatablePekerjaan") const modalDetailOrder = document.getElementById('modalDetailOrder'); const modalActionOrder = document.getElementById('modalActionApproveOrder'); + +const modalExport = document.getElementById('modalExportPekerjaan'); diff --git a/public/js/pekerjaan/action.js b/public/js/pekerjaan/action.js index 4bd7401..1eb0c3c 100644 --- a/public/js/pekerjaan/action.js +++ b/public/js/pekerjaan/action.js @@ -106,3 +106,7 @@ document.getElementById('formActionApproveOrder').addEventListener('submit', fun }); }); }); + +function exportPekerjaan(){ + new bootstrap.Modal(modalExport).show() +} diff --git a/public/js/pesanan_pending/_init.js b/public/js/pesanan_pending/_init.js index d82324a..0b8a2de 100644 --- a/public/js/pesanan_pending/_init.js +++ b/public/js/pesanan_pending/_init.js @@ -10,3 +10,6 @@ const formActionApproveBillingOrder = $("#formActionApproveBillingOrder") const modalActionProgressOrder = document.getElementById('modalActionProgressOrder') const formActionProgressOrder = $("#formActionProgressOrder") + + +const modalExport = document.getElementById('modalExportPending'); diff --git a/public/js/pesanan_pending/action.js b/public/js/pesanan_pending/action.js index 2807b50..b9dea08 100644 --- a/public/js/pesanan_pending/action.js +++ b/public/js/pesanan_pending/action.js @@ -143,3 +143,7 @@ function approveProgress(order_id){ new bootstrap.Modal(modalActionProgressOrder).show(); fetchDetailOrder(order_id) } + +function exportPending(){ + new bootstrap.Modal(modalExport).show(); +} diff --git a/public/js/pesanan_selesai/_init.js b/public/js/pesanan_selesai/_init.js index 362e0b4..ba22bf3 100644 --- a/public/js/pesanan_selesai/_init.js +++ b/public/js/pesanan_selesai/_init.js @@ -2,3 +2,5 @@ const datatableSelesai = $("#datatablePesananSelesai") const modalActionSelesaiOrder = document.getElementById('modalActionSelesaiOrder') const formActionSelesaiOrder = $("#formActionSelesaiOrder") + +const modalExport = document.getElementById('modalExportSelesai') diff --git a/public/js/pesanan_selesai/detail_order.js b/public/js/pesanan_selesai/detail_order.js index f870816..f2612bf 100644 --- a/public/js/pesanan_selesai/detail_order.js +++ b/public/js/pesanan_selesai/detail_order.js @@ -106,3 +106,7 @@ function orderSelesai(order_id){ new bootstrap.Modal(modalActionSelesaiOrder).show(); fetchDetailOrder(order_id) } + +function exportSelesai(){ + new bootstrap.Modal(modalExport).show(); +} diff --git a/resources/views/dashboard/pesanan/pekerjaan/index.blade.php b/resources/views/dashboard/pesanan/pekerjaan/index.blade.php index d8a5a06..e9c08bd 100644 --- a/resources/views/dashboard/pesanan/pekerjaan/index.blade.php +++ b/resources/views/dashboard/pesanan/pekerjaan/index.blade.php @@ -9,20 +9,34 @@
-
-
Pekerjaan
-
- - - - -
+
+ +
+ Pekerjaan +
+ + +
+ + + + +
+ + + + +
+
+
@@ -31,6 +45,7 @@ @include('dashboard.pesanan.pekerjaan.modal.detail') @include('dashboard.pesanan.pekerjaan.modal.action') + @include('dashboard.pesanan.pekerjaan.modal.export') diff --git a/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php b/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php new file mode 100644 index 0000000..45cf30e --- /dev/null +++ b/resources/views/dashboard/pesanan/pekerjaan/modal/export.blade.php @@ -0,0 +1,43 @@ + + diff --git a/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php new file mode 100644 index 0000000..644e32e --- /dev/null +++ b/resources/views/dashboard/pesanan/pekerjaan/pdf.blade.php @@ -0,0 +1,170 @@ + + + + + Daftar Pesanan + + + + +
+

Daftar Pesanan

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+ +
+ Dicetak pada: {{ $waktu_cetak }} +
+ + + + + + + + + + + + + + + + + @forelse ($pekerjaan as $i => $row) + + + + + + + + + + + + @empty + + + + @endforelse + +
NoNama PemesanStatus OrderTanggal AntarWaktu PemesananMenuKeteranganJumlahHarga Satuan (Rp)
{{ $i + 1 }} + {{ $row['order']['nama_pemesan'] ?? '-' }} + @if (!empty($row['order']['jenis_customer'])) +
({{ $row['order']['jenis_customer'] }}) + @endif +
{{ $row['status_order'] ?? '-' }} + {{ isset($row['tgl_antar']) + ? \Carbon\Carbon::parse($row['tgl_antar'])->locale('id')->translatedFormat('d F Y') + : '-' }} + {{ $row['type'] ?? '-' }}{{ $row['menu']['nama_menu'] ?? '-' }} + @php + $jenis = strtolower($row['order']['jenis_customer'] ?? ''); + @endphp + @if ($jenis === 'keluarga pasien / penunggu pasien') + Nama Pasien: {{ $row['order']['nama_pasien'] ?? '-' }}
+ Ruang: {{ $row['order']['ruang_perawatan'] ?? '-' }} / {{ $row['order']['no_kamar_perawatan'] ?? '-' }}
+ Kelas: {{ $row['order']['kelas_perawatan'] ?? '-' }} + @elseif ($jenis === 'masyarakat umum') + {{ $row['order']['alamat'] ?? '-' }} + @elseif ($jenis === 'karyawan rsab harapan kita') + Bagian: {{ $row['order']['bagian_instalasi'] ?? '-' }}
+ Ext: {{ $row['order']['no_ekstensien'] ?? '-' }} + @else + - + @endif +
{{ $row['jumlah'] ?? 0 }}{{ number_format($row['harga_satuan'], 0, ',', '.') }}
Tidak ada data
+ + + + + diff --git a/resources/views/dashboard/pesanan/pending/index.blade.php b/resources/views/dashboard/pesanan/pending/index.blade.php index 40cac4e..e980ebe 100644 --- a/resources/views/dashboard/pesanan/pending/index.blade.php +++ b/resources/views/dashboard/pesanan/pending/index.blade.php @@ -11,6 +11,10 @@
Pesanan Pending
+
+
@@ -22,6 +26,8 @@ placeholder="Pilih tanggal" readonly>
+
+
@@ -32,6 +38,7 @@ @include('dashboard.pesanan.pending.modal.action') @include('dashboard.pesanan.pending.modal.confirmBilling') @include('dashboard.pesanan.pending.modal.actionProgressPesanan') +@include('dashboard.pesanan.pending.modal.export') diff --git a/resources/views/dashboard/pesanan/pending/modal/export.blade.php b/resources/views/dashboard/pesanan/pending/modal/export.blade.php new file mode 100644 index 0000000..7b1baff --- /dev/null +++ b/resources/views/dashboard/pesanan/pending/modal/export.blade.php @@ -0,0 +1,43 @@ + + diff --git a/resources/views/dashboard/pesanan/pending/pdf.blade.php b/resources/views/dashboard/pesanan/pending/pdf.blade.php new file mode 100644 index 0000000..d0e2d77 --- /dev/null +++ b/resources/views/dashboard/pesanan/pending/pdf.blade.php @@ -0,0 +1,162 @@ + + + + + Laporan Pesanan + + + + +
+

Laporan Pesanan Pending

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+ +
+ Dicetak pada: {{ $waktu_cetak }} +
+ + + + + + + + + + + + + + + + + @php $no = 1; @endphp + @forelse ($orders as $order) + @foreach ($order->orderDetail as $i => $detail) + + + + + + + + + + + + @endforeach + @empty + + + + @endforelse + + + +
NoNo OrderNama PemesanMenuStatus OrderJumlahHarga Satuan (Rp)Tanggal AntarWaktu
{{ $i === 0 ? $no++ : '' }}{{ $i === 0 ? $order->no_order : '' }} + @if ($i === 0) + {{ $order->nama_pemesan }} + @if ($order->jenis_customer) +
({{ $order->jenis_customer }}) + @endif + @endif +
{{ $detail->menu->nama_menu ?? '-' }}{{ $detail->status_order ?? '-' }}{{ $detail->jumlah }}{{ number_format($detail->harga_satuan, 0, ',', '.') }} + {{ $detail->tgl_antar + ? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y') + : '-' }} + {{ $detail->type }}
Tidak ada data pesanan
+ + + + + diff --git a/resources/views/dashboard/pesanan/selesai/index.blade.php b/resources/views/dashboard/pesanan/selesai/index.blade.php index 4b3ce6e..4d5197d 100644 --- a/resources/views/dashboard/pesanan/selesai/index.blade.php +++ b/resources/views/dashboard/pesanan/selesai/index.blade.php @@ -11,6 +11,10 @@
Pesanan Selesai
+
+
@@ -22,6 +26,8 @@ placeholder="Pilih tanggal" readonly>
+
+
@@ -30,6 +36,7 @@
@include('dashboard.pesanan.selesai.modal.actionPesananSelesai') +@include('dashboard.pesanan.selesai.modal.export') diff --git a/resources/views/dashboard/pesanan/selesai/modal/export.blade.php b/resources/views/dashboard/pesanan/selesai/modal/export.blade.php new file mode 100644 index 0000000..3e318cb --- /dev/null +++ b/resources/views/dashboard/pesanan/selesai/modal/export.blade.php @@ -0,0 +1,43 @@ + + diff --git a/resources/views/dashboard/pesanan/selesai/pdf.blade.php b/resources/views/dashboard/pesanan/selesai/pdf.blade.php new file mode 100644 index 0000000..94b74a1 --- /dev/null +++ b/resources/views/dashboard/pesanan/selesai/pdf.blade.php @@ -0,0 +1,162 @@ + + + + + Laporan Pesanan + + + + +
+

Laporan Pesanan Selesai

+ @if($startDate === $endDate) +
Periode: {{ $startDate }}
+ @else +
Periode: {{ $startDate }} - {{ $endDate }}
+ @endif +
RSAB Harapan Kita
+
+ +
+ Dicetak pada: {{ $waktu_cetak }} +
+ + + + + + + + + + + + + + + + + @php $no = 1; @endphp + @forelse ($orders as $order) + @foreach ($order->orderDetail as $i => $detail) + + + + + + + + + + + + @endforeach + @empty + + + + @endforelse + + + +
NoNo OrderNama PemesanMenuStatus OrderJumlahHarga Satuan (Rp)Tanggal AntarWaktu
{{ $i === 0 ? $no++ : '' }}{{ $i === 0 ? $order->no_order : '' }} + @if ($i === 0) + {{ $order->nama_pemesan }} + @if ($order->jenis_customer) +
({{ $order->jenis_customer }}) + @endif + @endif +
{{ $detail->menu->nama_menu ?? '-' }}{{ $detail->status_order ?? '-' }}{{ $detail->jumlah }}{{ number_format($detail->harga_satuan, 0, ',', '.') }} + {{ $detail->tgl_antar + ? \Carbon\Carbon::parse($detail->tgl_antar)->locale('id')->translatedFormat('d F Y') + : '-' }} + {{ $detail->type }}
Tidak ada data pesanan
+ + + + + diff --git a/resources/views/guest/checkout/checkout_payment.blade.php b/resources/views/guest/checkout/checkout_payment.blade.php index 0b9b672..cbc5d74 100644 --- a/resources/views/guest/checkout/checkout_payment.blade.php +++ b/resources/views/guest/checkout/checkout_payment.blade.php @@ -46,6 +46,8 @@
+ @include('guest.checkout.modal.noteOrder') + @include('guest.checkout.modal.confirmPaymentBilling') diff --git a/resources/views/guest/checkout/modal/confirmPaymentBilling.blade.php b/resources/views/guest/checkout/modal/confirmPaymentBilling.blade.php new file mode 100644 index 0000000..43a2980 --- /dev/null +++ b/resources/views/guest/checkout/modal/confirmPaymentBilling.blade.php @@ -0,0 +1,36 @@ + + diff --git a/resources/views/guest/checkout/modal/noteOrder.blade.php b/resources/views/guest/checkout/modal/noteOrder.blade.php new file mode 100644 index 0000000..27263a1 --- /dev/null +++ b/resources/views/guest/checkout/modal/noteOrder.blade.php @@ -0,0 +1,28 @@ + diff --git a/resources/views/guest/checkout/step/step3.blade.php b/resources/views/guest/checkout/step/step3.blade.php index 3b7701a..4d7c591 100644 --- a/resources/views/guest/checkout/step/step3.blade.php +++ b/resources/views/guest/checkout/step/step3.blade.php @@ -4,7 +4,7 @@
- Pembayaran
@@ -15,63 +15,63 @@
Detail Pembayaran
-
    - -
  • -
    - No Order -
    -
    - -
    - -
    + +
- + +
+
Bank
+
Bank BCA
+
- -
  • - Bank - Bank BCA -
  • + +
    +
    Nama Rek.
    +
    RSAB Harapan Kita
    +
    - -
  • - Nama Rek. - RSAB Harapan Kita -
  • - - -
  • -
    - No.Rek -
    -
    - -
    - 1234-5678-9101 +
    + 1234-5678-9101 +
  • - - -
  • - Nominal - -
  • + +
    +
    Nominal
    +
    Rp 0
    +
    + + +
    +
    Waktu Pembayaran
    +
    +
    + +
    +
    - -
  • - Waktu Pembayaran - -
  • -

    Mohon untuk melakukan pembayaran sebelum batas waktu yang tertera, lalu unggah bukti pembayaran sebagai konfirmasi.

    diff --git a/resources/views/guest/layout_mail.blade.php b/resources/views/guest/layout_mail.blade.php new file mode 100644 index 0000000..8626944 --- /dev/null +++ b/resources/views/guest/layout_mail.blade.php @@ -0,0 +1,25 @@ +
    +

    ✅ Pembayaran Berhasil Diverifikasi

    +

    Halo, {$this->nama},

    +

    Pembayaran kamu untuk pesanan #{$this->no_order} telah berhasil kami verifikasi.

    + + + + + + + + + + + + + + +
    Nomor Order{$this->no_order}
    Total PembayaranRp " . number_format($this->total_harga, 0, ',', '.') . "
    StatusPembayaran Diterima
    + +

    Pesanan kamu sedang kami proses. Silakan tunggu pemberitahuan berikutnya untuk pengambilan makanan.

    + +
    +

    © " . date('Y') . " RSAB Harapan Kita

    +
    diff --git a/resources/views/mail/notifikasi-customer.blade.php b/resources/views/mail/notifikasi-customer.blade.php new file mode 100644 index 0000000..de9a155 --- /dev/null +++ b/resources/views/mail/notifikasi-customer.blade.php @@ -0,0 +1,12 @@ + +# Introduction + +The body of your message. + + +Button Text + + +Thanks,
    +{{ config('app.name') }} +
    diff --git a/routes/web.php b/routes/web.php index e4fa830..2a93925 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,8 @@ use App\Http\Controllers\KarbohidratController; use App\Http\Controllers\KlasifikasiMenuController; use App\Http\Controllers\MenuController; use App\Http\Controllers\PesananController; +use App\Mail\NotifikasiCustomer; +use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Route; @@ -43,16 +45,19 @@ Route::group(['middleware' => ['auth']], function(){ Route::get('/pending', [PesananController::class, 'index']); Route::get('datatable/pending', [PesananController::class, 'getDataPending']); + Route::post('pending/export', [PesananController::class, 'exportPending']); Route::put('/pending/action/{order_id}', [PesananController::class, 'actionOrder']); Route::put('/pending/action-billing/{order_id}', [PesananController::class, 'actionOrderViaBilling']); Route::get('/pending/action-progress-order/{order_id}', [PesananController::class, 'getDataOrderDetail']); Route::post('/pending/update-detail-status/{order_id}', [PesananController::class, 'updateDetailStatusOrder']); Route::get('/selesai', [PesananController::class, 'indexSelesai']); + Route::post('/selesai/export', [PesananController::class, 'exportSelesai']); Route::get('datatable/selesai', [PesananController::class, 'getDataSelesai']); Route::get('/pekerjaan', [PesananController::class, 'pekerjaan']); Route::get('datatable/pekerjaan', [PesananController::class, 'getPekerjaan']); + Route::post('pekerjaan/export', [PesananController::class, 'exportPekerjaan']); Route::get('/pekerjaan/detail/{id}', [PesananController::class, 'getPekerjaanDetail']); }); @@ -69,3 +74,10 @@ Route::get('/success-page', [CustomerController::class, 'success']); Route::get('/check-order', [CustomerController::class, 'checkOrder']); Route::get('/check-order/search', [CustomerController::class, 'searchOrder']); +// Route::get('/send-mail', function(){ +// Mail::to('skyjok14@gmail.com')->queue(new NotifikasiCustomer('Test')); +// }); + +Route::get('/dumy', function(){ + return view('guest.layout_mail'); +});