diff --git a/app/Http/Controllers/PayrollController.php b/app/Http/Controllers/PayrollController.php index 3efb999..78b4318 100644 --- a/app/Http/Controllers/PayrollController.php +++ b/app/Http/Controllers/PayrollController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use DB; +use PDF; use App\Models\Product; use App\Models\Payroll; use App\Models\PayrollItem; @@ -199,4 +200,14 @@ class PayrollController extends Controller return redirect()->route('payrolls.index'); } + + public function pdf(Payroll $payroll) + { + $pdf = PDF::loadView('payroll', [ + 'payroll' => $payroll->load(['employee', 'items.product']), + 'user' => auth()->user() + ]); + + return $pdf->download($payroll->employee->name.'-'.$payroll->date.'.pdf'); + } } diff --git a/composer.json b/composer.json index 533e439..8a1a3e2 100644 --- a/composer.json +++ b/composer.json @@ -6,6 +6,7 @@ "license": "MIT", "require": { "php": "^7.3|^8.0", + "barryvdh/laravel-dompdf": "^0.9.0", "dompdf/dompdf": "^1.1", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", diff --git a/composer.lock b/composer.lock index 41705aa..63e2fb0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0922ffcc8eeffdaa23c9299eafaf4746", + "content-hash": "c98e6bd315a3d72016e890b6217eaad7", "packages": [ { "name": "asm89/stack-cors", @@ -62,6 +62,72 @@ }, "time": "2021-03-11T06:42:03+00:00" }, + { + "name": "barryvdh/laravel-dompdf", + "version": "v0.9.0", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "5b99e1f94157d74e450f4c97e8444fcaffa2144b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/5b99e1f94157d74e450f4c97e8444fcaffa2144b", + "reference": "5b99e1f94157d74e450f4c97e8444fcaffa2144b", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^1", + "illuminate/support": "^5.5|^6|^7|^8", + "php": "^7.1 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9-dev" + }, + "laravel": { + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ], + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade" + } + } + }, + "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/v0.9.0" + }, + "funding": [ + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2020-12-27T12:05:53+00:00" + }, { "name": "brick/math", "version": "0.9.3", diff --git a/config/app.php b/config/app.php index a8d1a82..b0de8fd 100644 --- a/config/app.php +++ b/config/app.php @@ -229,7 +229,7 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, - + 'PDF' => Barryvdh\DomPDF\Facade::class, ], ]; diff --git a/public/css/app.css b/public/css/app.css index a76f382..efeacf0 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1598,6 +1598,11 @@ html { --tw-text-opacity: 0.4; color: hsla(var(--bc) / var(--tw-text-opacity, 1)); } +.mockup-phone .display { + overflow: hidden; + border-radius: 40px; + margin-top: -25px; +} .modal-box { --tw-bg-opacity: 1; background-color: hsla(var(--b1) / var(--tw-bg-opacity, 1)); @@ -2215,6 +2220,10 @@ html { --tw-border-opacity: 1; border-color: rgb(239 68 68 / var(--tw-border-opacity)); } +.border-black { + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} .bg-white { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); diff --git a/public/js/app.js b/public/js/app.js index 25ef05b..1a9b8b9 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -9883,7 +9883,12 @@ function Payrolls(props) { children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(payroll.recived) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("td", { className: "text-right", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Link, { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("a", { + className: "btn btn-outline mx-1", + href: route('payrolls.pdf', payroll), + download: "".concat(payroll.employee.name, "-").concat(payroll.date, ".pdf"), + children: "PDF" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Link, { className: "btn btn-primary mx-1", href: route('payrolls.edit', payroll), children: "Edit" @@ -9961,7 +9966,8 @@ var Print = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function ref: ref, className: "p-4", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("table", { - className: "border-collapse border border-gray-400 w-full", + className: "border-collapse border border-black w-full", + border: "1", children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("thead", { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("tr", { className: "text-center border", diff --git a/resources/js/Pages/Payrolls/Index.js b/resources/js/Pages/Payrolls/Index.js index 192f9f4..c3c900a 100644 --- a/resources/js/Pages/Payrolls/Index.js +++ b/resources/js/Pages/Payrolls/Index.js @@ -180,9 +180,22 @@ export default function Payrolls(props) { {formatIDR(payroll.recived)} + + PDF + Edit diff --git a/resources/js/Pages/Payrolls/Print.js b/resources/js/Pages/Payrolls/Print.js index 7a4a58f..3234a44 100644 --- a/resources/js/Pages/Payrolls/Print.js +++ b/resources/js/Pages/Payrolls/Print.js @@ -14,7 +14,7 @@ const Print = React.forwardRef((props, ref) => { return ( <>
- +
diff --git a/resources/views/payroll.blade.php b/resources/views/payroll.blade.php new file mode 100644 index 0000000..2cdc551 --- /dev/null +++ b/resources/views/payroll.blade.php @@ -0,0 +1,186 @@ + + + + + + + Document + + +@php +function formatIDR($output) { + return number_format($output, 0, ',', '.'); +} +@endphp + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach($payroll->items as $item) + + + + + + + @endforeach + + + + + + + + + + + + + + + + + +
+
+ GAJIAN KONVEKSI +
+
+ Nama Tukang + + {{ $payroll->employee->name }} + + Nomer Telpon + + {{ $payroll->employee->whatsapp }} +
+ Tanggal Pembuatan + + {{ $payroll->date }} + + Dibuat Oleh + + {{ $user->name }} +
+
+ Detail Gajian +
+
+ # + + Nama Barang + + Harga + + Jumlah +
+ {{ $loop->iteration }} + + {{ $item->product->name }} + + {{ formatIDR($item->price) }} + + {{ formatIDR($item->quantity) }} +
+ Total + + {{ formatIDR($payroll->amount) }} +
+ Potongan/Pinjaman + + {{ formatIDR($payroll->cuts) }} +
+ Bonus + + {{ formatIDR($payroll->bonus) }} +
+ Total Diterima + + {{ formatIDR($payroll->recived) }} +
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index d1849ef..8f76fbb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -56,6 +56,7 @@ Route::middleware(['auth'])->group(function () { Route::get('/payrolls/{payroll}', [PayrollController::class, 'edit'])->name('payrolls.edit'); Route::put('/payrolls/{payroll}', [PayrollController::class, 'update'])->name('payrolls.update'); Route::delete('/payrolls/{payroll}', [PayrollController::class, 'destroy'])->name('payrolls.destroy'); + Route::get('/payrolls/{payroll}/pdf', [PayrollController::class, 'pdf'])->name('payrolls.pdf'); Route::get('/report', [ReportController::class, 'index'])->name('report'); Route::get('/report/export', [ReportController::class, 'export'])->name('report.export');