diff --git a/app/Http/Controllers/PayrollController.php b/app/Http/Controllers/PayrollController.php index c739052..734289d 100644 --- a/app/Http/Controllers/PayrollController.php +++ b/app/Http/Controllers/PayrollController.php @@ -2,7 +2,10 @@ namespace App\Http\Controllers; +use DB; +use App\Models\Product; use App\Models\Payroll; +use App\Models\PayrollItem; use Illuminate\Http\Request; class PayrollController extends Controller @@ -16,12 +19,43 @@ class PayrollController extends Controller { $query = Payroll::with('employee'); + $startDate = now()->startOfMonth()->toDateString(); + $endDate = now()->endOfMonth()->toDateString(); + if ($request->startDate != null && $request->endDate != null) { $query->whereBetween('date', [$request->startDate, $request->endDate]); + $startDate = $request->startDate; + $endDate = $request->endDate; + } else { + $query->whereBetween('date', [$startDate, $endDate]); } - return inertia('Payrolls', [ + return inertia('Payrolls/Index', [ 'payrolls' => $query->orderBy('date', 'desc')->paginate(10), + '_startDate' => $startDate, + '_endDate' => $endDate + ]); + } + + /** + * Created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function create(Request $request) + { + $query = Product::orderBy('id', 'desc'); + + if ($request->q != null) { + $query = Product::where('name', 'like', '%'.$request->q.'%') + ->orWhere('description', 'like', '%'.$request->q.'%') + ->orderBy('created_at', 'desc'); + } + + return inertia('Payrolls/Create', [ + 'products' => $query->paginate(8), + '_search' => $request->q ? $request->q : '', + '_page' => $request->page ? $request->page : 1, ]); } @@ -36,27 +70,68 @@ class PayrollController extends Controller $request->validate([ 'employee_id' => 'required|exists:employees,id', 'date' => 'required|date', - 'amount' => 'required|numeric', 'cuts' => 'nullable|numeric', 'bonus' => 'nullable|numeric', - 'item_count' => 'nullable|numeric', + 'items' => 'required|array', + 'items.*.product_id' => 'required|exists:products,id', + 'items.*.quantity' => 'required|numeric', + 'items.*.price' => 'required|numeric' ]); - $recived = ($request->amount + $request->bonus) - $request->cuts; + $items = collect($request->items)->map(function ($item) { + return [ + 'product_id' => $item['product_id'], + 'quantity' => $item['quantity'], + 'price' => $item['price'], + 'subtotal' => $item['quantity'] * $item['price'] + ]; + }); - Payroll::create([ + $amount = $items->sum('subtotal'); + $itemCount = $items->sum('quantity'); + + $recived = ($amount + $request->bonus) - $request->cuts; + + DB::beginTransaction(); + $payroll = Payroll::create([ 'employee_id' => $request->employee_id, 'date' => $request->date, - 'amount' => $request->amount, + 'amount' => $amount, 'cuts' => $request->cuts, 'bonus' => $request->bonus, - 'item_count' => $request->item_count, + 'item_count' => $itemCount, 'recived' => $recived, ]); + $payroll->items()->saveMany($items->mapInto(PayrollItem::class)); + DB::commit(); + return redirect()->route('payrolls.index'); } + /** + * Edit resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function edit(Request $request, Payroll $payroll) + { + $query = Product::orderBy('id', 'desc'); + + if ($request->q != null) { + $query = Product::where('name', 'like', '%'.$request->q.'%') + ->orWhere('description', 'like', '%'.$request->q.'%') + ->orderBy('created_at', 'desc'); + } + + return inertia('Payrolls/Edit', [ + 'payroll' => $payroll->load(['items.product', 'employee']), + 'products' => $query->paginate(8), + '_search' => $request->q ? $request->q : '', + '_page' => $request->page ? $request->page : 1, + ]); + } + /** * Update the specified resource in storage. * @@ -69,24 +144,43 @@ class PayrollController extends Controller $request->validate([ 'employee_id' => 'required|exists:employees,id', 'date' => 'required|date', - 'amount' => 'required|numeric', 'cuts' => 'nullable|numeric', 'bonus' => 'nullable|numeric', - 'item_count' => 'nullable|numeric', + 'items' => 'required|array', + 'items.*.product_id' => 'required|exists:products,id', + 'items.*.quantity' => 'required|numeric', + 'items.*.price' => 'required|numeric' ]); - $recived = ($request->amount + $request->bonus) - $request->cuts; + $items = collect($request->items)->map(function ($item) { + return [ + 'product_id' => $item['product_id'], + 'quantity' => $item['quantity'], + 'price' => $item['price'], + 'subtotal' => $item['quantity'] * $item['price'] + ]; + }); + + $amount = $items->sum('subtotal'); + $itemCount = $items->sum('quantity'); + $recived = ($amount + $request->bonus) - $request->cuts; + + DB::beginTransaction(); $payroll->update([ 'employee_id' => $request->employee_id, 'date' => $request->date, - 'amount' => $request->amount, + 'amount' => $amount, 'cuts' => $request->cuts, 'bonus' => $request->bonus, - 'item_count' => $request->item_count, + 'item_count' => $itemCount, 'recived' => $recived, ]); + $payroll->items()->delete(); + $payroll->items()->saveMany($items->mapInto(PayrollItem::class)); + DB::commit(); + return redirect()->route('payrolls.index'); } @@ -98,7 +192,11 @@ class PayrollController extends Controller */ public function destroy(Payroll $payroll) { - $payroll->delete(); + DB::transaction(function () use ($payroll) { + $payroll->items()->delete(); + $payroll->delete(); + }); + return redirect()->route('payrolls.index'); } } diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 5dee7cd..35051f0 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -16,13 +16,14 @@ class ProductController extends Controller public function index(Request $request) { if ($request->q != null) { - $query = Product::where('name', 'like', '%'.$request->q.'%')->orWhere('description', 'like', '%'.$request->q.'%')->orderBy('id'); + $query = Product::where('name', 'like', '%'.$request->q.'%')->orWhere('description', 'like', '%'.$request->q.'%')->orderBy('created_at', 'desc'); } else { - $query = Product::orderBy('id'); + $query = Product::orderBy('created_at', 'desc'); } return inertia('Products', [ 'products' => $query->paginate(10), + '_search' => $request->q ? $request->q : '' ]); } diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php new file mode 100644 index 0000000..8b018b0 --- /dev/null +++ b/app/Http/Controllers/ReportController.php @@ -0,0 +1,31 @@ +startOfMonth()->toDateString(); + $endDate = now()->endOfMonth()->toDateString(); + + if ($request->startDate != null && $request->endDate != null) { + $query->whereBetween('date', [$request->startDate, $request->endDate]); + $startDate = $request->startDate; + $endDate = $request->endDate; + } else { + $query->whereBetween('date', [$startDate, $endDate]); + } + + return inertia('Report', [ + 'payrolls' => $query->orderBy('date', 'desc')->paginate(10), + '_startDate' => $startDate, + '_endDate' => $endDate + ]); + } +} diff --git a/app/Models/Payroll.php b/app/Models/Payroll.php index 11aefae..4b3cb95 100644 --- a/app/Models/Payroll.php +++ b/app/Models/Payroll.php @@ -23,4 +23,9 @@ class Payroll extends Model { return $this->belongsTo(Employee::class); } + + public function items() + { + return $this->hasMany(PayrollItem::class); + } } diff --git a/app/Models/PayrollItem.php b/app/Models/PayrollItem.php new file mode 100644 index 0000000..b1d4aab --- /dev/null +++ b/app/Models/PayrollItem.php @@ -0,0 +1,23 @@ +belongsTo(Product::class); + } +} diff --git a/database/migrations/2021_12_31_004855_create_payroll_items_table.php b/database/migrations/2021_12_31_004855_create_payroll_items_table.php new file mode 100644 index 0000000..3fd5d31 --- /dev/null +++ b/database/migrations/2021_12_31_004855_create_payroll_items_table.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('payroll_id')->constrained(); + $table->foreignId('product_id')->constrained(); + $table->decimal('quantity', 12, 2)->default(0); + $table->decimal('price', 12, 2)->default(0); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('payroll_items'); + } +} diff --git a/package-lock.json b/package-lock.json index b1e7056..fc7273e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "dependencies": { "daisyui": "^1.20.0", "moment": "^2.29.1", + "qs": "^6.10.2", "react-datepicker": "^4.5.0", "react-number-format": "^4.9.0", "react-toastify": "^8.1.0", @@ -2928,7 +2929,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -4774,8 +4774,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -4799,7 +4798,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4909,7 +4907,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -4930,7 +4927,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -6684,7 +6680,6 @@ "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7837,7 +7832,6 @@ "version": "6.10.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -8671,7 +8665,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -12382,7 +12375,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -13825,8 +13817,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gensync": { "version": "1.0.0-beta.2", @@ -13844,7 +13835,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -13930,7 +13920,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -13944,8 +13933,7 @@ "has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-tostringtag": { "version": "1.0.0", @@ -15263,8 +15251,7 @@ "object-inspect": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-is": { "version": "1.1.5", @@ -16054,7 +16041,6 @@ "version": "6.10.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.2.tgz", "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -16707,7 +16693,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", diff --git a/package.json b/package.json index 3ae0528..674a157 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "dependencies": { "daisyui": "^1.20.0", "moment": "^2.29.1", + "qs": "^6.10.2", "react-datepicker": "^4.5.0", "react-number-format": "^4.9.0", "react-toastify": "^8.1.0", diff --git a/public/css/app.css b/public/css/app.css index 7224e92..7e0a9bc 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1162,6 +1162,13 @@ html { --tw-shadow: 0 0 0 1px var(--border-color) !important; } +[data-theme=lofi] *:where(.badge) { + border-color: var(--border-color) !important; + --tw-border-opacity: 1 !important; + --tw-text-opacity: 1 !important; + --tw-shadow: 0 0 0 1px var(--border-color) !important; +} + [data-theme=lofi] *:where(.card) { border-color: var(--border-color) !important; --tw-border-opacity: 1 !important; @@ -1440,6 +1447,16 @@ html { --tw-ring-shadow: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-shadow-colored: 0 0 #0000; + --tw-blur: var(--tw-empty,/*!*/ /*!*/); + --tw-brightness: var(--tw-empty,/*!*/ /*!*/); + --tw-contrast: var(--tw-empty,/*!*/ /*!*/); + --tw-grayscale: var(--tw-empty,/*!*/ /*!*/); + --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/); + --tw-invert: var(--tw-empty,/*!*/ /*!*/); + --tw-saturate: var(--tw-empty,/*!*/ /*!*/); + --tw-sepia: var(--tw-empty,/*!*/ /*!*/); + --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/); + --tw-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); } .alert>:not([hidden])~:not([hidden]) { --tw-space-y-reverse: 0; @@ -1476,6 +1493,30 @@ html { align-items: center; justify-content: center; } +.badge { + display: inline-flex; + align-items: center; + justify-content: center; + transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform; + transition-duration: .2s; + transition-timing-function: cubic-bezier(.4, 0, .2, 1); + height: 1.25rem; + font-size: .875rem; + line-height: 1.25rem; + width: -webkit-fit-content; + width: -moz-fit-content; + width: fit-content; + padding-left: .563rem; + padding-right: .563rem; + --tw-bg-opacity: 1; + background-color: hsla(var(--n) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--n) / var(--tw-border-opacity, 1)); + border-width: 1px; + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); + border-radius: var(--rounded-badge, 1.9rem); +} .btn { border-color: hsla(var(--n) / var(--tw-border-opacity, 1)); cursor: pointer; @@ -1563,6 +1604,10 @@ html { transform: rotate(1turn); } } +.btn-group { + display: flex; + flex-wrap: wrap; +} .btn-group>input[type=radio].btn { -webkit-appearance: none; -moz-appearance: none; @@ -1591,6 +1636,16 @@ html { .card figure,.card figure>* { width: 100%; } +.card-actions { + display: flex; + flex-wrap: wrap; + align-items: flex-start; + margin-left: -.25rem; + margin-right: -.25rem; +} +.card-actions>* { + margin: .25rem; +} .card.image-full { display: grid; } @@ -1658,9 +1713,34 @@ html { outline-offset: 2px; box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsla(var(--bc) / .2); } +.input-group { + display: flex; + align-items: stretch; + width: 100%; +} .input-group>*,.input-group>.input { border-radius: 0; } +.input-group :where(span) { + --tw-bg-opacity: 1; + background-color: hsla(var(--b3) / var(--tw-bg-opacity, 1)); + display: flex; + align-items: center; + padding-left: 1rem; + padding-right: 1rem; +} +.input-group :first-child { + border-top-left-radius: var(--rounded-btn, .5rem); + border-top-right-radius: 0; + border-bottom-left-radius: var(--rounded-btn, .5rem); + border-bottom-right-radius: 0; +} +.input-group :last-child { + border-top-left-radius: 0; + border-top-right-radius: var(--rounded-btn, .5rem); + border-bottom-left-radius: 0; + border-bottom-right-radius: var(--rounded-btn, .5rem); +} .link { cursor: pointer; text-decoration: underline; @@ -1743,55 +1823,6 @@ html { justify-content: flex-end; margin-top: 1.5rem; } -.select { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - cursor: pointer; - display: inline-flex; - flex-shrink: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - height: 3rem; - font-size: .875rem; - line-height: 2; - padding-left: 1rem; - padding-right: 2.5rem; - min-height: 3rem; - --tw-bg-opacity: 1; - background-color: hsla(var(--b1) / var(--tw-bg-opacity, 1)); - --tw-border-opacity: 0; - border-color: hsla(var(--bc) / var(--tw-border-opacity, 1)); - border-width: 1px; - font-weight: 600; - transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform; - transition-duration: .2s; - transition-timing-function: cubic-bezier(.4, 0, .2, 1); - border-radius: var(--rounded-btn, .5rem); - background-image: linear-gradient(45deg, transparent 50%, currentColor 0), - linear-gradient(135deg, currentColor 50%, transparent 0); - background-position: calc(100% - 20px) calc(1px + 50%), - calc(100% - 16px) calc(1px + 50%); - background-size: 4px 4px, - 4px 4px; - background-repeat: no-repeat; -} -.select:focus { - outline: 2px solid transparent; - outline-offset: 2px; - box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsla(var(--bc) / .2); -} -.select-disabled,.select[disabled] { - pointer-events: none; - --tw-bg-opacity: 1; - background-color: hsla(var(--b2) / var(--tw-bg-opacity, 1)); - --tw-border-opacity: 1; - border-color: hsla(var(--b2) / var(--tw-border-opacity, 1)); - cursor: not-allowed; - --tw-text-opacity: 0.2; -} .table { position: relative; text-align: left; @@ -1840,6 +1871,12 @@ html { --tw-text-opacity: 1; color: hsla(var(--b2) / var(--tw-text-opacity, 1)); } +.btn-outline .badge { + --tw-border-opacity: 1; + border-color: hsla(var(--nf) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} .btn-outline.btn-primary .badge { --tw-bg-opacity: 1; background-color: hsla(var(--p) / var(--tw-bg-opacity, 1)); @@ -1856,6 +1893,19 @@ html { --tw-text-opacity: 1; color: hsla(var(--sc) / var(--tw-text-opacity, 1)); } +.btn-outline.btn-accent .badge { + --tw-bg-opacity: 1; + background-color: hsla(var(--a) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--a) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--ac) / var(--tw-text-opacity, 1)); +} +.btn-outline .badge.outline { + background-color: transparent; + --tw-border-opacity: 1; + border-color: hsla(var(--nf) / var(--tw-border-opacity, 1)); +} .btn-outline.btn-primary .badge-outline { background-color: transparent; --tw-border-opacity: 1; @@ -1870,6 +1920,27 @@ html { --tw-text-opacity: 1; color: hsla(var(--s) / var(--tw-text-opacity, 1)); } +.btn-outline.btn-accent .badge-outline { + background-color: transparent; + --tw-border-opacity: 1; + border-color: hsla(var(--a) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--a) / var(--tw-text-opacity, 1)); +} +.btn-outline:hover .badge { + --tw-bg-opacity: 1; + background-color: hsla(var(--b2) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--b2) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--bc) / var(--tw-text-opacity, 1)); +} +.btn-outline:hover .badge.outline { + --tw-border-opacity: 1; + border-color: hsla(var(--b2) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} .btn-outline.btn-primary:hover .badge { --tw-bg-opacity: 1; background-color: hsla(var(--pc) / var(--tw-bg-opacity, 1)); @@ -1902,6 +1973,22 @@ html { --tw-text-opacity: 1; color: hsla(var(--sc) / var(--tw-text-opacity, 1)); } +.btn-outline.btn-accent:hover .badge { + --tw-bg-opacity: 1; + background-color: hsla(var(--ac) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--ac) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--a) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-accent:hover .badge.outline { + --tw-bg-opacity: 1; + background-color: hsla(var(--af) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--ac) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--ac) / var(--tw-text-opacity, 1)); +} .btn:active:focus,.btn:active:hover { -webkit-animation: none; animation: none; @@ -1950,6 +2037,23 @@ html { .btn-secondary:focus-visible { box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsl(var(--s)); } +.btn-info { + --tw-bg-opacity: 1; + background-color: hsla(var(--in) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--in) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--b2) / var(--tw-text-opacity, 1)); +} +.btn-info.btn-active,.btn-info:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--in) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--in) / var(--tw-border-opacity, 1)); +} +.btn-info:focus-visible { + box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsl(var(--in)); +} .btn.glass.btn-active,.btn.glass:hover { --glass-opacity: 25%; --glass-border-opacity: 15%; @@ -1957,6 +2061,20 @@ html { .btn.glass:focus-visible { box-shadow: 0 0 0 2px currentColor; } +.btn-outline { + background-color: transparent; + border-color: currentColor; + --tw-text-opacity: 1; + color: hsla(var(--bc) / var(--tw-text-opacity, 1)); +} +.btn-outline:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--bc) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--bc) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--b1) / var(--tw-text-opacity, 1)); +} .btn-outline.btn-primary { --tw-text-opacity: 1; color: hsla(var(--p) / var(--tw-text-opacity, 1)); @@ -1981,6 +2099,66 @@ html { --tw-text-opacity: 1; color: hsla(var(--sc) / var(--tw-text-opacity, 1)); } +.btn-outline.btn-accent { + --tw-text-opacity: 1; + color: hsla(var(--a) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-accent:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--af) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--af) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--ac) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-success { + --tw-text-opacity: 1; + color: hsla(var(--su) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-success:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--su) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--su) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-info { + --tw-text-opacity: 1; + color: hsla(var(--in) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-info:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--in) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--in) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-warning { + --tw-text-opacity: 1; + color: hsla(var(--wa) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-warning:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--wa) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--wa) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-error { + --tw-text-opacity: 1; + color: hsla(var(--er) / var(--tw-text-opacity, 1)); +} +.btn-outline.btn-error:hover { + --tw-bg-opacity: 1; + background-color: hsla(var(--er) / var(--tw-bg-opacity, 1)); + --tw-border-opacity: 1; + border-color: hsla(var(--er) / var(--tw-border-opacity, 1)); + --tw-text-opacity: 1; + color: hsla(var(--nc) / var(--tw-text-opacity, 1)); +} .btn.loading.btn-circle:before,.btn.loading.btn-square:before { margin-right: 0; } @@ -2056,6 +2234,12 @@ html { .card.compact .card-title { margin-bottom: .25rem; } +.card-actions:first-child { + margin-bottom: .5rem; +} +.card-actions:last-child { + margin-top: 1.5rem; +} .checkbox { --chkbg: var(--bc); --chkfg: var(--b1); @@ -2122,6 +2306,9 @@ html { .drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-secondary { box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsl(var(--s)); } +.drawer-toggle:focus-visible~.drawer-content .drawer-button.btn-info { + box-shadow: 0 0 0 2px hsl(var(--b1)), 0 0 0 4px hsl(var(--in)); +} .label-text { font-size: .875rem; line-height: 1.25rem; @@ -2308,26 +2495,6 @@ html { box-shadow: 0 0 0 4px hsl(var(--b1)) inset, 0 0 0 4px hsl(var(--b1)) inset, var(--focus-shadow); } } -.select-disabled::-moz-placeholder,.select[disabled]::-moz-placeholder { - --tw-placeholder-opacity: 0.2; - color: hsla(var(--bc) / var(--tw-placeholder-opacity, 1)); -} -.select-disabled:-ms-input-placeholder,.select[disabled]:-ms-input-placeholder { - --tw-placeholder-opacity: 0.2; - color: hsla(var(--bc) / var(--tw-placeholder-opacity, 1)); -} -.select-disabled::-moz-placeholder, .select[disabled]::-moz-placeholder { - --tw-placeholder-opacity: 0.2; - color: hsla(var(--bc) / var(--tw-placeholder-opacity, 1)); -} -.select-disabled:-ms-input-placeholder, .select[disabled]:-ms-input-placeholder { - --tw-placeholder-opacity: 0.2; - color: hsla(var(--bc) / var(--tw-placeholder-opacity, 1)); -} -.select-disabled::placeholder,.select[disabled]::placeholder { - --tw-placeholder-opacity: 0.2; - color: hsla(var(--bc) / var(--tw-placeholder-opacity, 1)); -} .table :where(th,td) { padding: 1rem; vertical-align: middle; @@ -2448,6 +2615,24 @@ html { border-color: transparent; cursor: not-allowed; } +.btn-sm { + height: 2rem; + padding-left: .75rem; + padding-right: .75rem; + min-height: 2rem; + font-size: .875rem; +} +.btn-square:where(.btn-sm) { + height: 2rem; + padding: 0; + width: 2rem; +} +.btn-circle:where(.btn-sm) { + border-radius: 9999px; + height: 2rem; + padding: 0; + width: 2rem; +} .visible { visibility: visible; } @@ -2475,6 +2660,18 @@ html { .left-0 { left: 0px; } +.right-2\.5 { + right: 0.625rem; +} +.top-2\.5 { + top: 0.625rem; +} +.right-2 { + right: 0.5rem; +} +.top-2 { + top: 0.5rem; +} .z-0 { z-index: 0; } @@ -2492,6 +2689,10 @@ html { margin-left: 0.25rem; margin-right: 0.25rem; } +.my-auto { + margin-top: auto; + margin-bottom: auto; +} .my-2 { margin-top: 0.5rem; margin-bottom: 0.5rem; @@ -2570,6 +2771,9 @@ html { .mt-1 { margin-top: 0.25rem; } +.mb-2 { + margin-bottom: 0.5rem; +} .block { display: block; } @@ -2597,21 +2801,15 @@ html { .h-16 { height: 4rem; } -.h-4 { - height: 1rem; -} .h-6 { height: 1.5rem; } +.h-4 { + height: 1rem; +} .h-24 { height: 6rem; } -.max-h-11 { - max-height: 2.75rem; -} -.max-h-96 { - max-height: 24rem; -} .max-h-screen { max-height: 100vh; } @@ -2627,6 +2825,9 @@ html { .w-auto { width: auto; } +.w-6 { + width: 1.5rem; +} .w-48 { width: 12rem; } @@ -2636,8 +2837,8 @@ html { .w-4 { width: 1rem; } -.w-6 { - width: 1.5rem; +.w-1\/6 { + width: 16.666667%; } .max-w-xl { max-width: 36rem; @@ -2696,6 +2897,12 @@ html { .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); } +.grid-cols-4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} .flex-row { flex-direction: row; } @@ -2720,6 +2927,15 @@ html { .justify-between { justify-content: space-between; } +.justify-items-center { + justify-items: center; +} +.gap-4 { + gap: 1rem; +} +.gap-2 { + gap: 0.5rem; +} .space-x-8 > :not([hidden]) ~ :not([hidden]) { --tw-space-x-reverse: 0; margin-right: calc(2rem * var(--tw-space-x-reverse)); @@ -2745,6 +2961,11 @@ html { margin-right: calc(0.5rem * var(--tw-space-x-reverse)); margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); } +.space-y-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(1rem * var(--tw-space-y-reverse)); +} .overflow-hidden { overflow: hidden; } @@ -2754,14 +2975,6 @@ html { .overflow-y-auto { overflow-y: auto; } -.overscroll-auto { - -ms-scroll-chaining: chained; - overscroll-behavior: auto; -} -.overscroll-contain { - -ms-scroll-chaining: none; - overscroll-behavior: contain; -} .rounded-md { border-radius: 0.375rem; } @@ -2779,6 +2992,10 @@ html { border-top-right-radius: 0.375rem; border-bottom-right-radius: 0.375rem; } +.rounded-l-none { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} .border { border-width: 1px; } @@ -2863,6 +3080,9 @@ html { .p-1 { padding: 0.25rem; } +.p-4 { + padding: 1rem; +} .px-4 { padding-left: 1rem; padding-right: 1rem; @@ -2911,6 +3131,14 @@ html { padding-top: 3rem; padding-bottom: 3rem; } +.px-0\.5 { + padding-left: 0.125rem; + padding-right: 0.125rem; +} +.px-0 { + padding-left: 0px; + padding-right: 0px; +} .pt-8 { padding-top: 2rem; } @@ -3087,6 +3315,9 @@ html { .opacity-100 { opacity: 1; } +.opacity-70 { + opacity: 0.7; +} .shadow-sm { --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); @@ -3127,6 +3358,9 @@ html { .ring-opacity-5 { --tw-ring-opacity: 0.05; } +.filter { + filter: var(--tw-filter); +} .transition { transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter; transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; @@ -3393,6 +3627,11 @@ html { --tw-text-opacity: 1; color: rgb(55 65 81 / var(--tw-text-opacity)); } +.table td, .table th { + padding: 1rem; + vertical-align: middle; + white-space: normal; +} .hover\:border-gray-300:hover { --tw-border-opacity: 1; border-color: rgb(209 213 219 / var(--tw-border-opacity)); @@ -3634,10 +3873,38 @@ html { } @media (min-width: 768px) { + .md\:w-2\/3 { + width: 66.666667%; + } + + .md\:w-1\/3 { + width: 33.333333%; + } + .md\:grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .md\:flex-row { + flex-direction: row; + } + + .md\:items-stretch { + align-items: stretch; + } + + .md\:space-y-0 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0px * var(--tw-space-y-reverse)); + } + + .md\:space-x-4 > :not([hidden]) ~ :not([hidden]) { + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); + } + .md\:border-t-0 { border-top-width: 0px; } diff --git a/public/js/app.js b/public/js/app.js index af53c4b..edfb56b 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -6424,6 +6424,45 @@ function Button(_ref) { /***/ }), +/***/ "./resources/js/Components/CloseIcon.js": +/*!**********************************************!*\ + !*** ./resources/js/Components/CloseIcon.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ CloseIcon) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + + +function CloseIcon(_ref) { + var onClick = _ref.onClick, + className = _ref.className; + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { + className: className, + onClick: onClick, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("svg", { + xmlns: "http://www.w3.org/2000/svg", + className: "h-6 w-6", + fill: "none", + viewBox: "0 0 24 24", + stroke: "currentColor", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + strokeWidth: 2, + d: "M6 18L18 6M6 6l12 12" + }) + }) + }); +} + +/***/ }), + /***/ "./resources/js/Components/Dropdown.js": /*!*********************************************!*\ !*** ./resources/js/Components/Dropdown.js ***! @@ -6761,20 +6800,32 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); -/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js"); +/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! qs */ "./node_modules/qs/lib/index.js"); +/* harmony import */ var qs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(qs__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); + var PageLink = function PageLink(_ref) { var active = _ref.active, label = _ref.label, - url = _ref.url; + url = _ref.url, + params = _ref.params; var className = "mr-1 mb-1 px-4 py-3 border border-solid border-gray-300 rounded text-sm bg-white hover:bg-white ".concat(active && 'focus:outline-none focus:border-indigo-700 focus:text-indigo-700 border-indigo-600 bg-indigo-600 text-white hover:bg-indigo-400'); - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_0__.Link, { + + var onClick = function onClick() { + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_0__.Inertia.get("".concat(url, "&").concat(qs__WEBPACK_IMPORTED_MODULE_1___default().stringify(params)), {}, { + replace: true, + preserveState: true + }); + }; + + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { className: className, - href: url, - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span", { + onClick: onClick, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span", { dangerouslySetInnerHTML: { __html: label } @@ -6788,7 +6839,7 @@ var PageLink = function PageLink(_ref) { var PageInactive = function PageInactive(_ref2) { var label = _ref2.label; var className = 'mr-1 mb-1 px-4 py-3 text-sm border rounded border-solid border-gray-300 text-gray'; - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { className: className, dangerouslySetInnerHTML: { __html: label @@ -6798,21 +6849,24 @@ var PageInactive = function PageInactive(_ref2) { /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (_ref3) { var _ref3$links = _ref3.links, - links = _ref3$links === void 0 ? [] : _ref3$links; + links = _ref3$links === void 0 ? [] : _ref3$links, + _ref3$params = _ref3.params, + params = _ref3$params === void 0 ? null : _ref3$params; // dont render, if there's only 1 page (previous, 1, next) if (links.length === 3) return null; - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div", { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div", { className: "flex flex-wrap mt-6 -mb-1", children: links.map(function (_ref4) { var active = _ref4.active, label = _ref4.label, url = _ref4.url; - return url === null ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(PageInactive, { + return url === null ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(PageInactive, { label: label - }, label) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(PageLink, { + }, label) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(PageLink, { label: label, active: active, - url: url + url: url, + params: params }, label); }) }); @@ -7057,7 +7111,7 @@ function Authenticated(_ref) { children: "Users" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Components_NavLink__WEBPACK_IMPORTED_MODULE_4__["default"], { href: route('payrolls.index'), - active: route().current('payrolls.index'), + active: route().current('payrolls.*'), children: "Gaji" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Components_NavLink__WEBPACK_IMPORTED_MODULE_4__["default"], { href: route('report'), @@ -7156,7 +7210,7 @@ function Authenticated(_ref) { children: "Users" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Components_ResponsiveNavLink__WEBPACK_IMPORTED_MODULE_5__["default"], { href: route('payrolls.index'), - active: route().current('payrolls.index'), + active: route().current('payrolls.*'), children: "Gaji" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Components_ResponsiveNavLink__WEBPACK_IMPORTED_MODULE_5__["default"], { href: route('report'), @@ -7268,14 +7322,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "default": () => (/* binding */ FormEmployeeModal) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); -/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); -/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); -/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); -/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - - +/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); +/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); @@ -7283,15 +7333,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope function FormEmployeeModal(props) { - var _jsx2; - var isOpen = props.isOpen, _props$toggle = props.toggle, toggle = _props$toggle === void 0 ? function () {} : _props$toggle, _props$employee = props.employee, employee = _props$employee === void 0 ? null : _props$employee; - var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.useForm)({ + var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_1__.useForm)({ name: '', whatsapp: '', basic_salary: 0, @@ -7332,7 +7380,7 @@ function FormEmployeeModal(props) { post(route('employees.update', employee), { forceFormData: true, onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been changed')]); + return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.success('The Data has been changed')]); } }); return; @@ -7340,7 +7388,7 @@ function FormEmployeeModal(props) { post(route('employees.store'), { onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); + return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_2__.toast.success('The Data has been saved')]); } }); }; @@ -7349,64 +7397,250 @@ function FormEmployeeModal(props) { setData({ name: employee !== null && employee !== void 0 && employee.name ? employee.name : '', whatsapp: employee !== null && employee !== void 0 && employee.whatsapp ? employee.whatsapp : '', - basic_salary: employee !== null && employee !== void 0 && employee.basic_salary ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.formatIDR)(employee.basic_salary) : '', + basic_salary: employee !== null && employee !== void 0 && employee.basic_salary ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.formatIDR)(employee.basic_salary) : 0, img_alt: employee !== null && employee !== void 0 && employee.photo_url ? employee.photo_url : null }); }, [employee]); - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { className: "modal", style: isOpen ? { opacity: 1, pointerEvents: 'auto', visibility: 'visible' } : {}, - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { className: "modal-box", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h1", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("h1", { className: "font-bold text-2xl pb-8", children: "Barang" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { className: "label-text", children: "Nama" }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("input", { type: "text", placeholder: "nama", className: "input input-bordered ".concat(errors.name && 'input-error'), name: "name", value: data.name, onChange: handleOnChange - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { className: "label-text-alt", children: errors.name }) })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { className: "label-text", children: "Whatsapp" }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("input", { type: "text", placeholder: "whatsapp", className: "input input-bordered ".concat(errors.whatsapp && 'input-error'), name: "whatsapp", value: data.whatsapp, onChange: handleOnChange + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { + className: "label-text-alt", + children: errors.whatsapp + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { + className: "form-control", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { + className: "label-text", + children: "Foto" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { + className: "input input-bordered ".concat(errors.photo && 'input-error'), + onClick: function onClick() { + console.log(inputPhoto.current.click()); + }, + children: data.photo ? data.photo.name : '' + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("input", { + ref: inputPhoto, + type: "file", + className: "hidden", + name: "photo", + onChange: function onChange(e) { + return setData('photo', e.target.files[0]); + }, + accept: "image/png, image/jpeg, image/jpg" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("span", { + className: "label-text-alt", + children: errors.photo + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { + className: "form-control", + children: data.img_alt !== null && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("img", { + src: data.img_alt + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("div", { + className: "modal-action", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { + onClick: handleSubmit, + className: "btn btn-primary", + disabled: processing, + children: "Simpan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", { + onClick: handleCancel, + className: "btn btn-secondary", + disabled: processing, + children: "Batal" + })] + })] + }) + }); +} + +/***/ }), + +/***/ "./resources/js/Modals/FormProductModal.js": +/*!*************************************************!*\ + !*** ./resources/js/Modals/FormProductModal.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ FormProductModal) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); +/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); +/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + +function FormProductModal(props) { + var _jsx2; + + var isOpen = props.isOpen, + _props$toggle = props.toggle, + toggle = _props$toggle === void 0 ? function () {} : _props$toggle, + _props$product = props.product, + product = _props$product === void 0 ? null : _props$product; + + var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.useForm)({ + name: '', + price: 0, + description: '', + photo: null, + img_alt: null + }), + data = _useForm.data, + setData = _useForm.setData, + post = _useForm.post, + processing = _useForm.processing, + errors = _useForm.errors, + clearErrors = _useForm.clearErrors; + + var inputPhoto = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(); + + var handleOnChange = function handleOnChange(event) { + setData(event.target.name, event.target.value); + }; + + var handleReset = function handleReset() { + setData({ + name: '', + price: 0, + description: '', + photo: null, + img_alt: null + }); + clearErrors(); + }; + + var handleCancel = function handleCancel() { + handleReset(); + toggle(); + }; + + var handleSubmit = function handleSubmit() { + if (product !== null) { + post(route('products.update', product), { + forceFormData: true, + onSuccess: function onSuccess() { + return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been changed')]); + } + }); + return; + } + + post(route('products.store'), { + onSuccess: function onSuccess() { + return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); + } + }); + }; + + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + setData({ + name: product !== null && product !== void 0 && product.name ? product.name : '', + price: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.formatIDR)(product !== null && product !== void 0 && product.price ? product.price : 0), + description: product !== null && product !== void 0 && product.description ? product.description : '', + img_alt: product !== null && product !== void 0 && product.photo_url ? product.photo_url : null + }); + }, [product]); + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { + className: "modal", + style: isOpen ? { + opacity: 1, + pointerEvents: 'auto', + visibility: 'visible' + } : {}, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + className: "modal-box", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h1", { + className: "font-bold text-2xl pb-8", + children: "Barang" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + className: "form-control", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + className: "label-text", + children: "Nama" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", { + type: "text", + placeholder: "nama", + className: "input input-bordered ".concat(errors.name && 'input-error'), + name: "name", + value: data.name, + onChange: handleOnChange }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { className: "label", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { className: "label-text-alt", - children: errors.whatsapp + children: errors.name }) })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { @@ -7415,552 +7649,41 @@ function FormEmployeeModal(props) { className: "label", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { className: "label-text", - children: "Gaji Pokok" + children: "Harga" }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx2 = { thousandSeparator: true, - className: "input input-bordered ".concat(errors.basic_salary ? 'input-error' : ''), - value: data.basic_salary + className: "input input-bordered ".concat(errors.price ? 'input-error' : ''), + value: data.price }, _defineProperty(_jsx2, "thousandSeparator", "."), _defineProperty(_jsx2, "decimalSeparator", ","), _defineProperty(_jsx2, "onValueChange", function onValueChange(_ref) { var value = _ref.value; - return setData('basic_salary', value); - }), _defineProperty(_jsx2, "placeholder", "gaji pokok"), _jsx2)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + return setData('price', value); + }), _defineProperty(_jsx2, "placeholder", "harga"), _jsx2)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + className: "label-text-alt", + children: errors.price + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { + className: "form-control", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { + className: "label-text", + children: "Deskripsi" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("textarea", { + className: "textarea h-24 textarea-bordered ".concat(errors.description && 'input-error'), + name: "description", + placeholder: "Deskripsi", + value: data.description, + onChange: handleOnChange + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { className: "label", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { className: "label-text-alt", - children: errors.basic_salary - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text", - children: "Foto" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { - className: "input input-bordered ".concat(errors.photo && 'input-error'), - onClick: function onClick() { - console.log(inputPhoto.current.click()); - }, - children: data.photo ? data.photo.name : '' - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", { - ref: inputPhoto, - type: "file", - className: "hidden", - name: "photo", - onChange: function onChange(e) { - return setData('photo', e.target.files[0]); - }, - accept: "image/png, image/jpeg, image/jpg" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text-alt", - children: errors.photo - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { - className: "form-control", - children: data.img_alt !== null && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("img", { - src: data.img_alt - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "modal-action", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { - onClick: handleSubmit, - className: "btn btn-primary", - disabled: processing, - children: "Simpan" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { - onClick: handleCancel, - className: "btn btn-secondary", - disabled: processing, - children: "Batal" - })] - })] - }) - }); -} - -/***/ }), - -/***/ "./resources/js/Modals/FormPayrollModal.js": -/*!*************************************************!*\ - !*** ./resources/js/Modals/FormPayrollModal.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ FormPayrollModal) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); -/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); -/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-datepicker */ "./node_modules/react-datepicker/dist/react-datepicker.min.js"); -/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react_datepicker__WEBPACK_IMPORTED_MODULE_7__); -/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); -/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); -/* harmony import */ var _Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Selects/EmployeeSelectInput */ "./resources/js/Selects/EmployeeSelectInput.js"); -/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } - -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - - - - - - - - - - -function FormPayrollModal(props) { - var _jsx2, _jsx3, _jsx4, _jsx5; - - var isOpen = props.isOpen, - _props$toggle = props.toggle, - toggle = _props$toggle === void 0 ? function () {} : _props$toggle, - _props$payroll = props.payroll, - payroll = _props$payroll === void 0 ? null : _props$payroll; - - var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.useForm)({ - employee_id: null, - employee_name: '', - date: new Date(), - amount: 0, - cuts: 0, - bonus: 0, - item_count: 0 - }), - data = _useForm.data, - setData = _useForm.setData, - post = _useForm.post, - put = _useForm.put, - processing = _useForm.processing, - errors = _useForm.errors, - reset = _useForm.reset, - clearErrors = _useForm.clearErrors; - - var recived = +data.amount + +data.bonus - +data.cuts; - - var handleSelectedEmployee = function handleSelectedEmployee(employee) { - setData(_objectSpread(_objectSpread({}, data), {}, { - employee_id: employee.id, - employee_name: employee.name, - amount: employee.basic_salary - })); - }; - - var handleReset = function handleReset() { - setData({ - employee_id: null, - employee_name: '', - date: new Date(), - amount: 0, - cuts: 0, - bonus: 0, - item_count: 0 - }); - clearErrors(); - }; - - var handleCancel = function handleCancel() { - handleReset(); - toggle(); - }; - - var handleSubmit = function handleSubmit() { - if (payroll !== null) { - put(route('payrolls.update', payroll), { - onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been changed')]); - } - }); - return; - } - - post(route('payrolls.store'), { - onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); - } - }); - }; - - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { - var _payroll$employee, _payroll$employee2; - - setData({ - employee_id: payroll === null || payroll === void 0 ? void 0 : (_payroll$employee = payroll.employee) === null || _payroll$employee === void 0 ? void 0 : _payroll$employee.id, - employee_name: payroll === null || payroll === void 0 ? void 0 : (_payroll$employee2 = payroll.employee) === null || _payroll$employee2 === void 0 ? void 0 : _payroll$employee2.name, - date: payroll !== null && payroll !== void 0 && payroll.date ? new Date(payroll.date) : new Date(), - amount: payroll !== null && payroll !== void 0 && payroll.amount ? payroll.amount : 0, - cuts: payroll !== null && payroll !== void 0 && payroll.cuts ? payroll.cuts : 0, - bonus: payroll !== null && payroll !== void 0 && payroll.bonus ? payroll.bonus : 0, - item_count: payroll !== null && payroll !== void 0 && payroll.item_count ? payroll.item_count : 0 - }); - }, [payroll]); - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { - className: "modal", - style: isOpen ? { - opacity: 1, - pointerEvents: 'auto', - visibility: 'visible', - overflowY: 'initial' - } : {}, - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "modal-box overflow-y-auto max-h-screen", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("h1", { - className: "font-bold text-2xl pb-8", - children: "Gaji" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Tanggal" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_7___default()), { - selected: data.date, - onChange: function onChange(date) { - return setData('date', date); - }, - format: "dd/mm/yyyy", - className: "input input-bordered ".concat(errors.date ? 'input-error' : ''), - nextMonthButtonLabel: ">", - previousMonthButtonLabel: "<" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.date - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Keryawan" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_4__["default"], { - value: data.employee_name, - onItemSelected: handleSelectedEmployee, - invalid: errors.employee_id ? true : false - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.employee_id - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Gaji Pokok" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx2 = { - thousandSeparator: true, - className: "input input-bordered ".concat(errors.amount ? 'input-error' : ''), - value: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.formatIDR)(data.amount) - }, _defineProperty(_jsx2, "thousandSeparator", "."), _defineProperty(_jsx2, "decimalSeparator", ","), _defineProperty(_jsx2, "onValueChange", function onValueChange(_ref) { - var value = _ref.value; - return setData('amount', value); - }), _defineProperty(_jsx2, "placeholder", "gaji pokok"), _jsx2)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.amount - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Potongan" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx3 = { - thousandSeparator: true, - className: "input input-bordered ".concat(errors.cuts ? 'input-error' : ''), - value: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.formatIDR)(data.cuts) - }, _defineProperty(_jsx3, "thousandSeparator", "."), _defineProperty(_jsx3, "decimalSeparator", ","), _defineProperty(_jsx3, "onValueChange", function onValueChange(_ref2) { - var value = _ref2.value; - return setData('cuts', value); - }), _defineProperty(_jsx3, "placeholder", "potongan"), _jsx3)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.cuts - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Bonus" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx4 = { - thousandSeparator: true, - className: "input input-bordered ".concat(errors.bonus ? 'input-error' : ''), - value: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.formatIDR)(data.bonus) - }, _defineProperty(_jsx4, "thousandSeparator", "."), _defineProperty(_jsx4, "decimalSeparator", ","), _defineProperty(_jsx4, "onValueChange", function onValueChange(_ref3) { - var value = _ref3.value; - return setData('bonus', value); - }), _defineProperty(_jsx4, "placeholder", "bonus"), _jsx4)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.bonus - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Total" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("input", { - value: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.formatIDR)(recived), - className: "input input-bordered", - readOnly: true - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.recived - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text", - children: "Jumlah Item" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx5 = { - thousandSeparator: true, - className: "input input-bordered ".concat(errors.item_count ? 'input-error' : ''), - value: data.item_count - }, _defineProperty(_jsx5, "thousandSeparator", "."), _defineProperty(_jsx5, "decimalSeparator", ","), _defineProperty(_jsx5, "onValueChange", function onValueChange(_ref4) { - var value = _ref4.value; - return setData('item_count', value); - }), _defineProperty(_jsx5, "placeholder", "jumlah item"), _jsx5)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("span", { - className: "label-text-alt", - children: errors.item_count - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("div", { - className: "modal-action", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { - onClick: handleSubmit, - className: "btn btn-primary", - disabled: processing, - children: "Simpan" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("div", { - onClick: handleCancel, - className: "btn btn-secondary", - disabled: processing, - children: "Batal" - })] - })] - }) - }); -} - -/***/ }), - -/***/ "./resources/js/Modals/FormProductModal.js": -/*!*************************************************!*\ - !*** ./resources/js/Modals/FormProductModal.js ***! - \*************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ FormProductModal) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); -/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); -/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); -/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); -/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - - - - - - - - -function FormProductModal(props) { - var _jsx2; - - var isOpen = props.isOpen, - _props$toggle = props.toggle, - toggle = _props$toggle === void 0 ? function () {} : _props$toggle, - _props$product = props.product, - product = _props$product === void 0 ? null : _props$product; - - var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.useForm)({ - name: '', - price: 0, - description: '', - photo: null, - img_alt: null - }), - data = _useForm.data, - setData = _useForm.setData, - post = _useForm.post, - processing = _useForm.processing, - errors = _useForm.errors, - clearErrors = _useForm.clearErrors; - - var inputPhoto = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(); - - var handleOnChange = function handleOnChange(event) { - setData(event.target.name, event.target.value); - }; - - var handleReset = function handleReset() { - setData({ - name: '', - price: 0, - description: '', - photo: null, - img_alt: null - }); - clearErrors(); - }; - - var handleCancel = function handleCancel() { - handleReset(); - toggle(); - }; - - var handleSubmit = function handleSubmit() { - if (product !== null) { - post(route('products.update', product), { - forceFormData: true, - onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been changed')]); - } - }); - return; - } - - post(route('products.store'), { - onSuccess: function onSuccess() { - return Promise.all([handleReset(), toggle(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); - } - }); - }; - - (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { - setData({ - name: product !== null && product !== void 0 && product.name ? product.name : '', - price: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.formatIDR)(product !== null && product !== void 0 && product.price ? product.price : 0), - description: product !== null && product !== void 0 && product.description ? product.description : '', - img_alt: product !== null && product !== void 0 && product.photo_url ? product.photo_url : null - }); - }, [product]); - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", { - className: "modal", - style: isOpen ? { - opacity: 1, - pointerEvents: 'auto', - visibility: 'visible' - } : {}, - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "modal-box", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("h1", { - className: "font-bold text-2xl pb-8", - children: "Barang" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text", - children: "Nama" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("input", { - type: "text", - placeholder: "nama", - className: "input input-bordered ".concat(errors.name && 'input-error'), - name: "name", - value: data.name, - onChange: handleOnChange - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text-alt", - children: errors.name - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text", - children: "Harga" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx2 = { - thousandSeparator: true, - className: "input input-bordered ".concat(errors.price ? 'input-error' : ''), - value: data.price - }, _defineProperty(_jsx2, "thousandSeparator", "."), _defineProperty(_jsx2, "decimalSeparator", ","), _defineProperty(_jsx2, "onValueChange", function onValueChange(_ref) { - var value = _ref.value; - return setData('price', value); - }), _defineProperty(_jsx2, "placeholder", "harga"), _jsx2)), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text-alt", - children: errors.price - }) - })] - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { - className: "form-control", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text", - children: "Deskripsi" - }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("textarea", { - className: "textarea h-24 textarea-bordered ".concat(errors.description && 'input-error'), - name: "description", - placeholder: "Deskripsi", - value: data.description, - onChange: handleOnChange - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("label", { - className: "label", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("span", { - className: "label-text-alt", - children: errors.description + children: errors.description }) })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("div", { @@ -9056,7 +8779,10 @@ function Employees(props) { })] }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_6__["default"], { - links: links + links: links, + params: { + q: search + } })] }) }) @@ -9075,26 +8801,816 @@ function Employees(props) { /***/ }), -/***/ "./resources/js/Pages/Payrolls.js": -/*!****************************************!*\ - !*** ./resources/js/Pages/Payrolls.js ***! - \****************************************/ +/***/ "./resources/js/Pages/Payrolls/Create.js": +/*!***********************************************!*\ + !*** ./resources/js/Pages/Payrolls/Create.js ***! + \***********************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Payrolls) +/* harmony export */ "default": () => (/* binding */ Create) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); -/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-datepicker */ "./node_modules/react-datepicker/dist/react-datepicker.min.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_datepicker__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); /* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js"); +/* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-use */ "./node_modules/react-use/esm/usePrevious.js"); /* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); -/* harmony import */ var _Hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Hooks */ "./resources/js/Hooks/index.js"); +/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); /* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); /* harmony import */ var _Components_Pagination__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/Components/Pagination */ "./resources/js/Components/Pagination.js"); -/* harmony import */ var _Components_ModalConfirm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/Components/ModalConfirm */ "./resources/js/Components/ModalConfirm.js"); -/* harmony import */ var _Modals_FormPayrollModal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/Modals/FormPayrollModal */ "./resources/js/Modals/FormPayrollModal.js"); +/* harmony import */ var _Components_CloseIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/Components/CloseIcon */ "./resources/js/Components/CloseIcon.js"); +/* harmony import */ var _Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/Selects/EmployeeSelectInput */ "./resources/js/Selects/EmployeeSelectInput.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + + + + + + + +function Create(props) { + var _jsx2, _jsx3, _jsx4; + + var _props$products = props.products, + products = _props$products.data, + links = _props$products.links; + var _search = props._search, + _page = props._page; + + var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__.useForm)({ + date: new Date(), + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [] + }), + data = _useForm.data, + setData = _useForm.setData, + post = _useForm.post, + errors = _useForm.errors, + processing = _useForm.processing; + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + loading = _useState2[0], + setLoading = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_search), + _useState4 = _slicedToArray(_useState3, 2), + search = _useState4[0], + setSearch = _useState4[1]; + + var preValue = (0,react_use__WEBPACK_IMPORTED_MODULE_11__["default"])(search); + + var handleSelectedEmployee = function handleSelectedEmployee(employee) { + setData(_objectSpread(_objectSpread({}, data), {}, { + employee_id: employee.id, + employee_name: "".concat(employee.name, " - ").concat(employee.whatsapp) + })); + }; + + var addItem = function addItem(product) { + var itemExist = data.items.find(function (item) { + return item.id === product.id; + }); + + if (itemExist) { + setData('items', data.items.map(function (item) { + if (item.id === product.id) { + return _objectSpread(_objectSpread({}, item), {}, { + quantity: +item.quantity + 1 + }); + } else { + return item; + } + })); + return; + } + + setData('items', data.items.concat(_objectSpread(_objectSpread({}, product), {}, { + product_id: product.id, + quantity: 1 + }))); + }; + + var remoteItem = function remoteItem(product) { + setData('items', data.items.filter(function (item) { + return item.id !== product.id; + })); + }; + + var handleReset = function handleReset() { + setData({ + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [] + }); + }; + + var handleSubmit = function handleSubmit() { + if (data.items.length <= 0) { + alert('barang belum di pilih'); + return; + } + + post(route('payrolls.store'), { + onSuccess: function onSuccess() { + return Promise.all([handleReset(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); + } + }); + }; + + var itemAmount = data.items.reduce(function (amt, item) { + return amt + +item.quantity * +item.price; + }, 0); + var totalAmount = itemAmount - +data.cuts + +data.bonus; + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (preValue) { + setLoading(true); + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_2__.Inertia.get(route(route().current()), { + q: search, + page: _page + }, { + replace: true, + preserveState: true, + onSuccess: function onSuccess() { + setLoading(false); + } + }); + } + }, [search]); + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_5__["default"], { + auth: props.auth, + errors: props.errors, + header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("h2", { + className: "font-semibold text-xl text-gray-800 leading-tight", + children: "Gaji" + }), + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__.Head, { + title: "Payrolls" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "py-12", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-col md:flex-row w-full sm:px-6 lg:px-8 space-y-4 md:space-x-4 md:space-y-0", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "card bg-white w-full md:w-2/3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "p-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "flex flex-row justify-end mb-2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "form-control", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("input", { + type: "text", + className: "input input-bordered", + value: search, + onChange: function onChange(e) { + return setSearch(e.target.value); + }, + placeholder: "Search" + }) + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "grid grid-cols-4 gap-4 ".concat(loading && 'opacity-70'), + children: products.map(function (product) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "rounded bg-white shadow-md", + onClick: function onClick() { + return addItem(product); + }, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("img", { + src: product.photo_url, + style: { + height: '100px' + } + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "p-4 flex flex-col justify-items-center items-center space-y-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "font-bold text-center", + children: product.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "badge", + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(product.price) + })] + })] + }, product.id); + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "flex flex-col items-center", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_6__["default"], { + links: links, + params: { + q: search + } + }) + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "card bg-white w-full md:w-1/3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-col p-2 mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_12___default()), { + selected: data.date, + onChange: function onChange(date) { + return setData('date', date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered ".concat(errors.date ? 'input-error' : ''), + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), errors.date && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.date + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_8__["default"], { + value: data.employee_name, + onItemSelected: handleSelectedEmployee, + invalid: errors.employee_id ? true : false + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.employee_id + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "overflow-x-auto", + style: { + minHeight: '280px' + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("table", { + className: "table w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("thead", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Barang" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Qty" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Subtotal" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", {})] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("tbody", { + children: data.items.map(function (item) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: item.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(item.quantity) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(item.quantity * item.price) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_CloseIcon__WEBPACK_IMPORTED_MODULE_7__["default"], { + className: "btn btn-outline btn-sm px-0.5", + onClick: function onClick() { + return remoteItem(item); + } + }) + })] + }, item.id); + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "card-actions", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "form-control w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Potongan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx2 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right ".concat(errors.cuts ? 'input-error' : ''), + value: data.cuts + }, _defineProperty(_jsx2, "thousandSeparator", "."), _defineProperty(_jsx2, "decimalSeparator", ","), _defineProperty(_jsx2, "onValueChange", function onValueChange(_ref) { + var value = _ref.value; + return setData('cuts', value); + }), _defineProperty(_jsx2, "placeholder", "potongan"), _jsx2))] + }), errors.cuts && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.cuts + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "form-control w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Bonus" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx3 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right ".concat(errors.bonus ? 'input-error' : ''), + value: data.bonus + }, _defineProperty(_jsx3, "thousandSeparator", "."), _defineProperty(_jsx3, "decimalSeparator", ","), _defineProperty(_jsx3, "onValueChange", function onValueChange(_ref2) { + var value = _ref2.value; + return setData('bonus', value); + }), _defineProperty(_jsx3, "placeholder", "bonus"), _jsx3))] + }), errors.bonus && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.bonus + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "form-control w-full mt-2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Total" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx4 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right", + value: totalAmount + }, _defineProperty(_jsx4, "thousandSeparator", "."), _defineProperty(_jsx4, "decimalSeparator", ","), _defineProperty(_jsx4, "readOnly", true), _defineProperty(_jsx4, "placeholder", "total"), _jsx4))] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "grid grid-cols-2 gap-2 w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "btn btn-primary", + disabled: processing, + onClick: handleSubmit, + children: "Simpan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "btn btn-primary", + disabled: processing, + children: "Cetak" + })] + })] + })] + }) + })] + }) + })] + }); +} + +/***/ }), + +/***/ "./resources/js/Pages/Payrolls/Edit.js": +/*!*********************************************!*\ + !*** ./resources/js/Pages/Payrolls/Edit.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Edit) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-datepicker */ "./node_modules/react-datepicker/dist/react-datepicker.min.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_datepicker__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var react_number_format__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-number-format */ "./node_modules/react-number-format/dist/react-number-format.es.js"); +/* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js"); +/* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-use */ "./node_modules/react-use/esm/usePrevious.js"); +/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); +/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _Components_Pagination__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/Components/Pagination */ "./resources/js/Components/Pagination.js"); +/* harmony import */ var _Components_CloseIcon__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/Components/CloseIcon */ "./resources/js/Components/CloseIcon.js"); +/* harmony import */ var _Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/Selects/EmployeeSelectInput */ "./resources/js/Selects/EmployeeSelectInput.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } + +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + + + + + + + + + + + + + + +function Edit(props) { + var _jsx2, _jsx3, _jsx4; + + var _props$products = props.products, + products = _props$products.data, + links = _props$products.links; + var payroll = props.payroll, + _search = props._search, + _page = props._page; + + var _useForm = (0,_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__.useForm)({ + date: new Date(payroll.date), + employee_id: payroll.employee_id, + employee_name: "".concat(payroll.employee.name, " - ").concat(payroll.employee.whatsapp), + cuts: payroll.cuts, + bonus: payroll.bonus, + items: payroll.items.map(function (item) { + return _objectSpread({ + product_id: item.product_id, + quantity: item.quantity + }, item.product); + }) + }), + data = _useForm.data, + setData = _useForm.setData, + put = _useForm.put, + errors = _useForm.errors, + processing = _useForm.processing; + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false), + _useState2 = _slicedToArray(_useState, 2), + loading = _useState2[0], + setLoading = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_search), + _useState4 = _slicedToArray(_useState3, 2), + search = _useState4[0], + setSearch = _useState4[1]; + + var preValue = (0,react_use__WEBPACK_IMPORTED_MODULE_11__["default"])(search); + + var handleSelectedEmployee = function handleSelectedEmployee(employee) { + setData(_objectSpread(_objectSpread({}, data), {}, { + employee_id: employee.id, + employee_name: "".concat(employee.name, " - ").concat(employee.whatsapp) + })); + }; + + var addItem = function addItem(product) { + var itemExist = data.items.find(function (item) { + return item.id === product.id; + }); + + if (itemExist) { + setData('items', data.items.map(function (item) { + if (item.id === product.id) { + return _objectSpread(_objectSpread({}, item), {}, { + quantity: +item.quantity + 1 + }); + } else { + return item; + } + })); + return; + } + + setData('items', data.items.concat(_objectSpread(_objectSpread({}, product), {}, { + product_id: product.id, + quantity: 1 + }))); + }; + + var remoteItem = function remoteItem(product) { + setData('items', data.items.filter(function (item) { + return item.id !== product.id; + })); + }; + + var handleReset = function handleReset() { + setData({ + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [] + }); + }; + + var handleSubmit = function handleSubmit() { + if (data.items.length <= 0) { + alert('barang belum di pilih'); + return; + } + + put(route('payrolls.update', payroll), { + onSuccess: function onSuccess() { + return Promise.all([handleReset(), react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been saved')]); + } + }); + }; + + var itemAmount = data.items.reduce(function (amt, item) { + return amt + +item.quantity * +item.price; + }, 0); + var totalAmount = itemAmount - +data.cuts + +data.bonus; + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (preValue) { + setLoading(true); + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_2__.Inertia.get(route(route().current(), payroll), { + q: search, + page: _page + }, { + replace: true, + preserveState: true, + onSuccess: function onSuccess() { + setLoading(false); + } + }); + } + }, [search]); + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_5__["default"], { + auth: props.auth, + errors: props.errors, + header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("h2", { + className: "font-semibold text-xl text-gray-800 leading-tight", + children: "Gaji" + }), + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_4__.Head, { + title: "Payrolls" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "py-12", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-col md:flex-row w-full sm:px-6 lg:px-8 space-y-4 md:space-x-4 md:space-y-0", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "card bg-white w-full md:w-2/3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "p-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "flex flex-row justify-end mb-2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "form-control", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("input", { + type: "text", + className: "input input-bordered", + value: search, + onChange: function onChange(e) { + return setSearch(e.target.value); + }, + placeholder: "Search" + }) + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "grid grid-cols-4 gap-4 ".concat(loading && 'opacity-70'), + children: products.map(function (product) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "rounded bg-white shadow-md", + onClick: function onClick() { + return addItem(product); + }, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("img", { + src: product.photo_url, + style: { + height: '100px' + } + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "p-4 flex flex-col justify-items-center items-center space-y-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "font-bold text-center", + children: product.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "badge", + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(product.price) + })] + })] + }, product.id); + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "flex flex-col items-center", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_6__["default"], { + links: links, + params: { + q: search + } + }) + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "card bg-white w-full md:w-1/3", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-col p-2 mb-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_12___default()), { + selected: data.date, + onChange: function onChange(date) { + return setData('date', date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered ".concat(errors.date ? 'input-error' : ''), + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), errors.date && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.date + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Selects_EmployeeSelectInput__WEBPACK_IMPORTED_MODULE_8__["default"], { + value: data.employee_name, + onItemSelected: handleSelectedEmployee, + invalid: errors.employee_id ? true : false + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.employee_id + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "overflow-x-auto", + style: { + minHeight: '280px' + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("table", { + className: "table w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("thead", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Barang" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Qty" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Subtotal" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", {})] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("tbody", { + children: data.items.map(function (item) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: item.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(item.quantity) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(item.quantity * item.price) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_CloseIcon__WEBPACK_IMPORTED_MODULE_7__["default"], { + className: "btn btn-outline btn-sm px-0.5", + onClick: function onClick() { + return remoteItem(item); + } + }) + })] + }, item.id); + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "card-actions", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "form-control w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Potongan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx2 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right ".concat(errors.cuts ? 'input-error' : ''), + value: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(data.cuts) + }, _defineProperty(_jsx2, "thousandSeparator", "."), _defineProperty(_jsx2, "decimalSeparator", ","), _defineProperty(_jsx2, "onValueChange", function onValueChange(_ref) { + var value = _ref.value; + return setData('cuts', value); + }), _defineProperty(_jsx2, "placeholder", "potongan"), _jsx2))] + }), errors.cuts && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.cuts + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "form-control w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Bonus" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx3 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right ".concat(errors.bonus ? 'input-error' : ''), + value: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(data.bonus) + }, _defineProperty(_jsx3, "thousandSeparator", "."), _defineProperty(_jsx3, "decimalSeparator", ","), _defineProperty(_jsx3, "onValueChange", function onValueChange(_ref2) { + var value = _ref2.value; + return setData('bonus', value); + }), _defineProperty(_jsx3, "placeholder", "bonus"), _jsx3))] + }), errors.bonus && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text-alt", + children: errors.bonus + }) + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "form-control w-full mt-2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("label", { + className: "input-group w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + children: "Total" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(react_number_format__WEBPACK_IMPORTED_MODULE_1__["default"], (_jsx4 = { + thousandSeparator: true, + className: "input input-bordered w-full text-right", + value: totalAmount + }, _defineProperty(_jsx4, "thousandSeparator", "."), _defineProperty(_jsx4, "decimalSeparator", ","), _defineProperty(_jsx4, "readOnly", true), _defineProperty(_jsx4, "placeholder", "total"), _jsx4))] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "grid grid-cols-2 gap-2 w-full", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "btn btn-primary", + disabled: processing, + onClick: handleSubmit, + children: "Simpan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "btn btn-primary", + disabled: processing, + children: "Cetak" + })] + })] + })] + }) + })] + }) + })] + }); +} + +/***/ }), + +/***/ "./resources/js/Pages/Payrolls/Index.js": +/*!**********************************************!*\ + !*** ./resources/js/Pages/Payrolls/Index.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (/* binding */ Payrolls) +/* harmony export */ }); +/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react-datepicker */ "./node_modules/react-datepicker/dist/react-datepicker.min.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react_datepicker__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js"); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); +/* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js"); +/* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! react-use */ "./node_modules/react-use/esm/usePrevious.js"); +/* harmony import */ var react_toastify__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-toastify */ "./node_modules/react-toastify/dist/react-toastify.esm.js"); +/* harmony import */ var _Hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Hooks */ "./resources/js/Hooks/index.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _Components_Pagination__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/Components/Pagination */ "./resources/js/Components/Pagination.js"); +/* harmony import */ var _Components_ModalConfirm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/Components/ModalConfirm */ "./resources/js/Components/ModalConfirm.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } @@ -9121,25 +9637,27 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + function Payrolls(props) { var _props$payrolls = props.payrolls, payrolls = _props$payrolls.data, links = _props$payrolls.links; + var _startDate = props._startDate, + _endDate = props._endDate; - var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null), + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_startDate ? new Date(_startDate) : new Date()), _useState2 = _slicedToArray(_useState, 2), - payroll = _useState2[0], - setPayroll = _useState2[1]; + startDate = _useState2[0], + setStartDate = _useState2[1]; - var formModal = (0,_Hooks__WEBPACK_IMPORTED_MODULE_4__.useModalState)(false); - - var toggle = function toggle() { - var payroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - setPayroll(payroll); - formModal.toggle(); - }; + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_endDate ? new Date(_endDate) : new Date()), + _useState4 = _slicedToArray(_useState3, 2), + endDate = _useState4[0], + setEndDate = _useState4[1]; - var confirmModal = (0,_Hooks__WEBPACK_IMPORTED_MODULE_4__.useModalState)(false); + var preValue = (0,react_use__WEBPACK_IMPORTED_MODULE_11__["default"])("".concat(startDate, "-").concat(endDate)); + var confirmModal = (0,_Hooks__WEBPACK_IMPORTED_MODULE_5__.useModalState)(false); var handleDelete = function handleDelete(payroll) { confirmModal.setData(payroll); @@ -9150,22 +9668,34 @@ function Payrolls(props) { var payroll = confirmModal.data; if (payroll != null) { - _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_2__.Inertia["delete"](route('payrolls.destroy', payroll), { + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_3__.Inertia["delete"](route('payrolls.destroy', payroll), { onSuccess: function onSuccess() { - return react_toastify__WEBPACK_IMPORTED_MODULE_3__.toast.success('The Data has been deleted'); + return react_toastify__WEBPACK_IMPORTED_MODULE_4__.toast.success('The Data has been deleted'); } }); } }; - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_5__["default"], { + var params = { + startDate: moment__WEBPACK_IMPORTED_MODULE_1___default()(startDate).format('yyyy-MM-DD'), + endDate: moment__WEBPACK_IMPORTED_MODULE_1___default()(endDate).format('yyyy-MM-DD') + }; + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (preValue) { + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_3__.Inertia.get(route(route().current()), params, { + replace: true, + preserveState: true + }); + } + }, [startDate, endDate]); + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_6__["default"], { auth: props.auth, errors: props.errors, header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("h2", { className: "font-semibold text-xl text-gray-800 leading-tight", children: "Gaji" }), - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_1__.Head, { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Head, { title: "Payroll" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { className: "py-12", @@ -9173,17 +9703,91 @@ function Payrolls(props) { className: "flex flex-col w-full sm:px-6 lg:px-8 space-y-2", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { className: "card bg-white w-full", + style: { + minHeight: '400px' + }, children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { className: "card-body", - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { - className: "flex w-full mb-4 justify-between", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { - className: "btn btn-neutral", - onClick: function onClick() { - return toggle(); - }, + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-col md:flex-row space-y-2 md:space-y-0 items-start md:items-stretch w-full mb-4 justify-between", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Link, { + className: "btn btn-neutral my-auto", + href: route('payrolls.create'), children: "Tambah" - }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "flex flex-row md:space-x-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text", + children: "Tanggal Awal" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "relative", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_12___default()), { + selected: startDate, + onChange: function onChange(date) { + setStartDate(date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered", + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "absolute right-2.5 rounded-l-none y-0 flex items-center top-2.5", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("svg", { + xmlns: "http://www.w3.org/2000/svg", + className: "h-6 w-6", + fill: "none", + viewBox: "0 0 24 24", + stroke: "currentColor", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + strokeWidth: 2, + d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" + }) + }) + })] + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("span", { + className: "label-text", + children: "Tanggal Akhir" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("div", { + className: "relative", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_12___default()), { + selected: endDate, + onChange: function onChange(date) { + setEndDate(date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered", + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { + className: "absolute right-2.5 rounded-l-none y-0 flex items-center top-2.5", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("svg", { + xmlns: "http://www.w3.org/2000/svg", + className: "h-6 w-6", + fill: "none", + viewBox: "0 0 24 24", + stroke: "currentColor", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + strokeWidth: 2, + d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" + }) + }) + })] + })] + })] + })] }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { className: "overflow-x-auto", children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("table", { @@ -9194,12 +9798,12 @@ function Payrolls(props) { children: "Tanggal" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { children: "Nama Karyawan" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { - children: "Gaji" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { children: "Potongan" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { children: "Bonus" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { + children: "Total" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", {})] }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("tbody", { @@ -9209,19 +9813,17 @@ function Payrolls(props) { children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatDate)(payroll.date) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { children: payroll.employee.name - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { - children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(payroll.amount) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(payroll.cuts) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { children: (0,_utils__WEBPACK_IMPORTED_MODULE_9__.formatIDR)(payroll.bonus) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + 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)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Link, { className: "btn btn-primary mx-1", - onClick: function onClick() { - return toggle(payroll); - }, + href: route('payrolls.edit', payroll), children: "Edit" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("div", { className: "btn btn-secondary mx-1", @@ -9235,17 +9837,14 @@ function Payrolls(props) { }) })] }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_6__["default"], { - links: links + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_7__["default"], { + links: links, + params: params })] }) }) }) - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Modals_FormPayrollModal__WEBPACK_IMPORTED_MODULE_8__["default"], { - isOpen: formModal.isOpen, - toggle: toggle, - payroll: payroll - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_ModalConfirm__WEBPACK_IMPORTED_MODULE_7__["default"], { + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_ModalConfirm__WEBPACK_IMPORTED_MODULE_8__["default"], { isOpen: confirmModal.isOpen, toggle: confirmModal.toggle, onConfirm: onDelete @@ -9308,7 +9907,7 @@ function Products(props) { products = _props$products.data, links = _props$products.links; - var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(''), + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(props._search), _useState2 = _slicedToArray(_useState, 2), search = _useState2[0], setSearch = _useState2[1]; @@ -9401,8 +10000,6 @@ function Products(props) { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("thead", { children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { - children: "Id" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { children: "Nama" }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { children: "Harga" @@ -9415,9 +10012,7 @@ function Products(props) { }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("tbody", { children: products === null || products === void 0 ? void 0 : products.map(function (product) { return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("tr", { - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("th", { - children: product.id - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { children: product.name }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("td", { children: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.formatIDR)(product.price) @@ -9449,7 +10044,10 @@ function Products(props) { })] }) }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_7__["default"], { - links: links + links: links, + params: { + q: search + } })] }) }) @@ -9477,31 +10075,216 @@ function Products(props) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ Report) +/* harmony export */ "default": () => (/* binding */ Reports) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js"); -/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-datepicker */ "./node_modules/react-datepicker/dist/react-datepicker.min.js"); +/* harmony import */ var react_datepicker__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_datepicker__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! moment */ "./node_modules/moment/moment.js"); +/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @inertiajs/inertia-react */ "./node_modules/@inertiajs/inertia-react/dist/index.js"); -/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +/* harmony import */ var _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @inertiajs/inertia */ "./node_modules/@inertiajs/inertia/dist/index.js"); +/* harmony import */ var react_use__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react-use */ "./node_modules/react-use/esm/usePrevious.js"); +/* harmony import */ var _Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/Layouts/Authenticated */ "./resources/js/Layouts/Authenticated.js"); +/* harmony import */ var _Components_Pagination__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/Components/Pagination */ "./resources/js/Components/Pagination.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/utils */ "./resources/js/utils.js"); +/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react/jsx-runtime */ "./node_modules/react/jsx-runtime.js"); +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } +function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } -function Report(props) { - return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_1__["default"], { +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + + + + + + + + + + + + +function Reports(props) { + var _props$payrolls = props.payrolls, + payrolls = _props$payrolls.data, + links = _props$payrolls.links; + var _startDate = props._startDate, + _endDate = props._endDate; + + var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_startDate ? new Date(_startDate) : new Date()), + _useState2 = _slicedToArray(_useState, 2), + startDate = _useState2[0], + setStartDate = _useState2[1]; + + var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_endDate ? new Date(_endDate) : new Date()), + _useState4 = _slicedToArray(_useState3, 2), + endDate = _useState4[0], + setEndDate = _useState4[1]; + + var preValue = (0,react_use__WEBPACK_IMPORTED_MODULE_8__["default"])("".concat(startDate, "-").concat(endDate)); + (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () { + if (preValue) { + _inertiajs_inertia__WEBPACK_IMPORTED_MODULE_3__.Inertia.get(route(route().current()), { + startDate: moment__WEBPACK_IMPORTED_MODULE_1___default()(startDate).format('yyyy-MM-DD'), + endDate: moment__WEBPACK_IMPORTED_MODULE_1___default()(endDate).format('yyyy-MM-DD') + }, { + replace: true, + preserveState: true + }); + } + }, [startDate, endDate]); + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)(_Layouts_Authenticated__WEBPACK_IMPORTED_MODULE_4__["default"], { auth: props.auth, errors: props.errors, - header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("h2", { + header: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("h2", { className: "font-semibold text-xl text-gray-800 leading-tight", - children: "Laporan" + children: "Gaji" }), - children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Head, { - title: "Report" - }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_inertiajs_inertia_react__WEBPACK_IMPORTED_MODULE_2__.Head, { + title: "Payroll" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { className: "py-12", - children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", { - className: "flex flex-row w-full sm:px-6 lg:px-8 space-x-4" + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "flex flex-col w-full sm:px-6 lg:px-8 space-y-2", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "card bg-white w-full", + style: { + minHeight: '400px' + }, + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "card-body", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "flex flex-col md:flex-row space-y-2 md:space-y-0 items-start md:items-stretch w-full mb-4 justify-between", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "btn-group my-auto", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "btn btn-info btn-outline", + onClick: function onClick() {}, + children: "Download Excel" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "flex flex-row md:space-x-4", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("span", { + className: "label-text", + children: "Tanggal Awal" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "relative", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_9___default()), { + selected: startDate, + onChange: function onChange(date) { + setStartDate(date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered", + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "absolute right-2.5 rounded-l-none y-0 flex items-center top-2.5", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("svg", { + xmlns: "http://www.w3.org/2000/svg", + className: "h-6 w-6", + fill: "none", + viewBox: "0 0 24 24", + stroke: "currentColor", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + strokeWidth: 2, + d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" + }) + }) + })] + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("label", { + className: "label", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("span", { + className: "label-text", + children: "Tanggal Akhir" + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("div", { + className: "relative", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)((react_datepicker__WEBPACK_IMPORTED_MODULE_9___default()), { + selected: endDate, + onChange: function onChange(date) { + setEndDate(date); + }, + format: "dd/mm/yyyy", + className: "input input-bordered", + nextMonthButtonLabel: ">", + previousMonthButtonLabel: "<" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "absolute right-2.5 rounded-l-none y-0 flex items-center top-2.5", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("svg", { + xmlns: "http://www.w3.org/2000/svg", + className: "h-6 w-6", + fill: "none", + viewBox: "0 0 24 24", + stroke: "currentColor", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("path", { + strokeLinecap: "round", + strokeLinejoin: "round", + strokeWidth: 2, + d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" + }) + }) + })] + })] + })] + })] + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("div", { + className: "overflow-x-auto", + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("table", { + className: "table w-full table-zebra", + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("thead", { + children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: "Tanggal" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: "Nama Karyawan" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: "Kontak" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: "Total" + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: "Jumlah Item" + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("tbody", { + children: payrolls.map(function (payroll) { + return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsxs)("tr", { + children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("th", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.formatDate)(payroll.date) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("td", { + children: payroll.employee.name + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("td", { + children: payroll.employee.whatsapp + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.formatIDR)(payroll.recived) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)("td", { + children: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.formatIDR)(payroll.item_count) + })] + }, payroll.id); + }) + })] + }) + }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_Components_Pagination__WEBPACK_IMPORTED_MODULE_5__["default"], { + links: links + })] + }) + }) }) })] }); @@ -98775,8 +99558,12 @@ var map = { "./Dashboard.js": "./resources/js/Pages/Dashboard.js", "./Employees": "./resources/js/Pages/Employees.js", "./Employees.js": "./resources/js/Pages/Employees.js", - "./Payrolls": "./resources/js/Pages/Payrolls.js", - "./Payrolls.js": "./resources/js/Pages/Payrolls.js", + "./Payrolls/Create": "./resources/js/Pages/Payrolls/Create.js", + "./Payrolls/Create.js": "./resources/js/Pages/Payrolls/Create.js", + "./Payrolls/Edit": "./resources/js/Pages/Payrolls/Edit.js", + "./Payrolls/Edit.js": "./resources/js/Pages/Payrolls/Edit.js", + "./Payrolls/Index": "./resources/js/Pages/Payrolls/Index.js", + "./Payrolls/Index.js": "./resources/js/Pages/Payrolls/Index.js", "./Products": "./resources/js/Pages/Products.js", "./Products.js": "./resources/js/Pages/Products.js", "./Report": "./resources/js/Pages/Report.js", diff --git a/resources/css/app.css b/resources/css/app.css index 65b040c..88c5957 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -95,4 +95,10 @@ .react-datepicker__day--range-end { @apply bg-blue-500 text-white hover:text-gray-700 hover:bg-white; +} + +.table td, .table th { + padding: 1rem; + vertical-align: middle; + white-space: normal; } \ No newline at end of file diff --git a/resources/js/Components/CloseIcon.js b/resources/js/Components/CloseIcon.js new file mode 100644 index 0000000..da1d602 --- /dev/null +++ b/resources/js/Components/CloseIcon.js @@ -0,0 +1,22 @@ +import React from 'react' + +export default function CloseIcon({ onClick, className }) { + return ( +
+ + + +
+ ) +} \ No newline at end of file diff --git a/resources/js/Components/Pagination.js b/resources/js/Components/Pagination.js index 366dcac..15c68e9 100644 --- a/resources/js/Components/Pagination.js +++ b/resources/js/Components/Pagination.js @@ -1,37 +1,62 @@ -import { Link } from '@inertiajs/inertia-react'; +import { Inertia } from '@inertiajs/inertia' +import qs from 'qs' -const PageLink = ({ active, label, url }) => { - const className = `mr-1 mb-1 px-4 py-3 border border-solid border-gray-300 rounded text-sm bg-white hover:bg-white ${ active && 'focus:outline-none focus:border-indigo-700 focus:text-indigo-700 border-indigo-600 bg-indigo-600 text-white hover:bg-indigo-400'}` +const PageLink = ({ active, label, url, params }) => { + const className = `mr-1 mb-1 px-4 py-3 border border-solid border-gray-300 rounded text-sm bg-white hover:bg-white ${ + active && + 'focus:outline-none focus:border-indigo-700 focus:text-indigo-700 border-indigo-600 bg-indigo-600 text-white hover:bg-indigo-400' + }` - return ( - - - - ); -}; + const onClick = () => { + Inertia.get( + `${url}&${qs.stringify(params)}`, + {}, + { + replace: true, + preserveState: true, + } + ) + } + + return ( +
+ +
+ ) +} // Previous, if on first page // Next, if on last page // and dots, if exists (...) const PageInactive = ({ label }) => { - const className = 'mr-1 mb-1 px-4 py-3 text-sm border rounded border-solid border-gray-300 text-gray' - return ( -
- ); -}; + const className = + 'mr-1 mb-1 px-4 py-3 text-sm border rounded border-solid border-gray-300 text-gray' + return ( +
+ ) +} -export default ({ links = [] }) => { - // dont render, if there's only 1 page (previous, 1, next) - if (links.length === 3) return null; - return ( -
- {links.map(({ active, label, url }) => { - return url === null ? ( - - ) : ( - - ); - })} -
- ); -}; \ No newline at end of file +export default ({ links = [], params = null }) => { + // dont render, if there's only 1 page (previous, 1, next) + if (links.length === 3) return null + return ( +
+ {links.map(({ active, label, url }) => { + return url === null ? ( + + ) : ( + + ) + })} +
+ ) +} diff --git a/resources/js/Layouts/Authenticated.js b/resources/js/Layouts/Authenticated.js index c2b1857..2634482 100644 --- a/resources/js/Layouts/Authenticated.js +++ b/resources/js/Layouts/Authenticated.js @@ -53,7 +53,7 @@ export default function Authenticated({ auth, header, children }) { Gaji @@ -188,7 +188,7 @@ export default function Authenticated({ auth, header, children }) { Gaji diff --git a/resources/js/Modals/FormEmployeeModal.js b/resources/js/Modals/FormEmployeeModal.js index 2c13476..45dfa7a 100644 --- a/resources/js/Modals/FormEmployeeModal.js +++ b/resources/js/Modals/FormEmployeeModal.js @@ -1,5 +1,4 @@ import React, { useEffect, useRef } from 'react' -import NumberFormat from 'react-number-format' import { useForm } from '@inertiajs/inertia-react' import { toast } from 'react-toastify' import { formatIDR } from '@/utils' @@ -65,7 +64,7 @@ export default function FormEmployeeModal(props) { setData({ name: employee?.name ? employee.name : '', whatsapp: employee?.whatsapp ? employee.whatsapp : '', - basic_salary: employee?.basic_salary ? formatIDR(employee.basic_salary) : '', + basic_salary: employee?.basic_salary ? formatIDR(employee.basic_salary) : 0, img_alt: employee?.photo_url ? employee.photo_url : null, }) }, [employee]) @@ -123,25 +122,6 @@ export default function FormEmployeeModal(props) {
-
- - setData('basic_salary', value)} - placeholder="gaji pokok" - /> - -
- +
diff --git a/resources/js/Pages/Payrolls.js b/resources/js/Pages/Payrolls.js deleted file mode 100644 index 4bc3b62..0000000 --- a/resources/js/Pages/Payrolls.js +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useState } from 'react' -import { Head } from '@inertiajs/inertia-react' -import { Inertia } from '@inertiajs/inertia' -import { toast } from 'react-toastify' - -import { useModalState } from '@/Hooks' -import Authenticated from '@/Layouts/Authenticated' -import Pagination from '@/Components/Pagination' -import ModalConfirm from '@/Components/ModalConfirm' -import FormPayrollModal from '@/Modals/FormPayrollModal' -import { formatIDR, formatDate } from '@/utils' - -export default function Payrolls(props) { - const { data: payrolls, links } = props.payrolls - - const [payroll, setPayroll] = useState(null) - const formModal = useModalState(false) - const toggle = (payroll = null) => { - setPayroll(payroll) - formModal.toggle() - } - - const confirmModal = useModalState(false) - const handleDelete = (payroll) => { - confirmModal.setData(payroll) - confirmModal.toggle() - } - - const onDelete = () => { - const payroll = confirmModal.data - if (payroll != null) { - Inertia.delete(route('payrolls.destroy', payroll), { - onSuccess: () => toast.success('The Data has been deleted'), - }) - } - } - - return ( - - Gaji - - } - > - -
-
-
-
-
-
toggle()} - > - Tambah -
-
-
- - - - - - - - - - - - - {payrolls.map((payroll) => ( - - - - - - - - - ))} - -
TanggalNama KaryawanGajiPotonganBonus
{formatDate(payroll.date)}{payroll.employee.name} - {formatIDR(payroll.amount)} - - {formatIDR(payroll.cuts)} - - {formatIDR(payroll.bonus)} - -
- toggle(payroll) - } - > - Edit -
-
- handleDelete( - payroll - ) - } - > - Delete -
-
-
- -
-
-
-
- - -
- ) -} diff --git a/resources/js/Pages/Payrolls/Create.js b/resources/js/Pages/Payrolls/Create.js new file mode 100644 index 0000000..2570827 --- /dev/null +++ b/resources/js/Pages/Payrolls/Create.js @@ -0,0 +1,333 @@ +import React, { useState, useEffect } from 'react' +import DatePicker from 'react-datepicker' +import NumberFormat from 'react-number-format' +import { Inertia } from '@inertiajs/inertia' +import { usePrevious } from 'react-use' +import { toast } from 'react-toastify' +import { Head, useForm } from '@inertiajs/inertia-react' + +import Authenticated from '@/Layouts/Authenticated' +import Pagination from '@/Components/Pagination' +import CloseIcon from '@/Components/CloseIcon' +import EmployeeSelectInput from '@/Selects/EmployeeSelectInput' +import { formatIDR } from '@/utils' + +export default function Create(props) { + const { data: products, links } = props.products + const { _search, _page } = props + const { data, setData, post, errors, processing } = useForm({ + date: new Date(), + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [], + }) + + const [loading, setLoading] = useState(false) + + const [search, setSearch] = useState(_search) + const preValue = usePrevious(search) + + const handleSelectedEmployee = (employee) => { + setData({ + ...data, + employee_id: employee.id, + employee_name: `${employee.name} - ${employee.whatsapp}`, + }) + } + + const addItem = (product) => { + const itemExist = data.items.find(item => item.id === product.id) + if(itemExist) { + setData( + 'items', + data.items.map(item => { + if(item.id === product.id){ + return { + ...item, + quantity: +item.quantity + 1, + } + } else { + return item + } + }) + ) + return + } + setData('items', data.items.concat({ + ...product, + product_id: product.id, + quantity: 1 + })) + } + + const remoteItem = (product) => { + setData('items', data.items.filter(item => item.id !== product.id)) + } + + const handleReset = () => { + setData({ + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [], + }) + } + + const handleSubmit = () => { + if (data.items.length <= 0) { + alert('barang belum di pilih') + return + } + post(route('payrolls.store'), { + onSuccess: () => + Promise.all([ + handleReset(), + toast.success('The Data has been saved'), + ]), + }) + } + + const itemAmount = data.items.reduce((amt, item) => amt + (+item.quantity * +item.price), 0) + const totalAmount = itemAmount - +data.cuts + +data.bonus + + useEffect(() => { + if (preValue) { + setLoading(true) + Inertia.get( + route(route().current()), + { q: search, page: _page }, + { + replace: true, + preserveState: true, + onSuccess: () => { setLoading(false) }, + } + ) + } + }, [search]) + + return ( + + Gaji + + } + > + +
+
+
+
+
+
+ + setSearch(e.target.value) + } + placeholder="Search" + /> +
+
+
+ {products.map((product) => ( +
addItem(product)} + > + +
+
+ {product.name} +
+
+ {formatIDR(product.price)} +
+
+
+ ))} +
+
+
+ +
+
+
+
+
+
+
+ setData('date', date)} + format="dd/mm/yyyy" + className={`input input-bordered ${ + errors.date ? 'input-error' : '' + }`} + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> + {errors.date && ( + + )} +
+
+ + +
+
+ + + + + + + + + + + {data.items.map((item) => ( + + + + + + + ))} + +
BarangQtySubtotal
{item.name} + {formatIDR(item.quantity)} + + {formatIDR( + item.quantity * item.price + )} + + + remoteItem(item) + } + /> +
+
+
+
+ + {errors.cuts && ( + + )} +
+
+ + {errors.bonus && ( + + )} +
+
+ +
+
+
+ Simpan +
+
+ Cetak +
+
+
+
+
+
+
+
+ ) +} diff --git a/resources/js/Pages/Payrolls/Edit.js b/resources/js/Pages/Payrolls/Edit.js new file mode 100644 index 0000000..8a7d411 --- /dev/null +++ b/resources/js/Pages/Payrolls/Edit.js @@ -0,0 +1,353 @@ +import React, { useState, useEffect } from 'react' +import DatePicker from 'react-datepicker' +import NumberFormat from 'react-number-format' +import { Inertia } from '@inertiajs/inertia' +import { usePrevious } from 'react-use' +import { toast } from 'react-toastify' +import { Head, useForm } from '@inertiajs/inertia-react' + +import Authenticated from '@/Layouts/Authenticated' +import Pagination from '@/Components/Pagination' +import CloseIcon from '@/Components/CloseIcon' +import EmployeeSelectInput from '@/Selects/EmployeeSelectInput' +import { formatIDR } from '@/utils' + +export default function Edit(props) { + const { data: products, links } = props.products + const { payroll, _search, _page } = props + const { data, setData, put, errors, processing } = useForm({ + date: new Date(payroll.date), + employee_id: payroll.employee_id, + employee_name: `${payroll.employee.name} - ${payroll.employee.whatsapp}`, + cuts: payroll.cuts, + bonus: payroll.bonus, + items: payroll.items.map(item => { + return { + product_id: item.product_id, + quantity: item.quantity, + ...item.product, + } + }), + }) + + const [loading, setLoading] = useState(false) + + const [search, setSearch] = useState(_search) + const preValue = usePrevious(search) + + const handleSelectedEmployee = (employee) => { + setData({ + ...data, + employee_id: employee.id, + employee_name: `${employee.name} - ${employee.whatsapp}`, + }) + } + + const addItem = (product) => { + const itemExist = data.items.find((item) => item.id === product.id) + if (itemExist) { + setData( + 'items', + data.items.map((item) => { + if (item.id === product.id) { + return { + ...item, + quantity: +item.quantity + 1, + } + } else { + return item + } + }) + ) + return + } + setData( + 'items', + data.items.concat({ + ...product, + product_id: product.id, + quantity: 1, + }) + ) + } + + const remoteItem = (product) => { + setData( + 'items', + data.items.filter((item) => item.id !== product.id) + ) + } + + const handleReset = () => { + setData({ + employee_id: null, + employee_name: '', + cuts: 0, + bonus: 0, + items: [], + }) + } + + const handleSubmit = () => { + if (data.items.length <= 0) { + alert('barang belum di pilih') + return + } + put(route('payrolls.update', payroll), { + onSuccess: () => + Promise.all([ + handleReset(), + toast.success('The Data has been saved'), + ]), + }) + } + + const itemAmount = data.items.reduce( + (amt, item) => amt + +item.quantity * +item.price, + 0 + ) + const totalAmount = itemAmount - +data.cuts + +data.bonus + + useEffect(() => { + if (preValue) { + setLoading(true) + Inertia.get( + route(route().current(), payroll), + { q: search, page: _page }, + { + replace: true, + preserveState: true, + onSuccess: () => { + setLoading(false) + }, + } + ) + } + }, [search]) + + return ( + + Gaji + + } + > + +
+
+
+
+
+
+ + setSearch(e.target.value) + } + placeholder="Search" + /> +
+
+
+ {products.map((product) => ( +
addItem(product)} + > + +
+
+ {product.name} +
+
+ {formatIDR(product.price)} +
+
+
+ ))} +
+
+
+ +
+
+
+
+
+
+
+ setData('date', date)} + format="dd/mm/yyyy" + className={`input input-bordered ${ + errors.date ? 'input-error' : '' + }`} + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> + {errors.date && ( + + )} +
+
+ + +
+
+ + + + + + + + + + + {data.items.map((item) => ( + + + + + + + ))} + +
BarangQtySubtotal
{item.name} + {formatIDR(item.quantity)} + + {formatIDR( + item.quantity * + item.price + )} + + + remoteItem(item) + } + /> +
+
+
+
+ + {errors.cuts && ( + + )} +
+
+ + {errors.bonus && ( + + )} +
+
+ +
+
+
+ Simpan +
+
+ Cetak +
+
+
+
+
+
+
+
+ ) +} diff --git a/resources/js/Pages/Payrolls/Index.js b/resources/js/Pages/Payrolls/Index.js new file mode 100644 index 0000000..192f9f4 --- /dev/null +++ b/resources/js/Pages/Payrolls/Index.js @@ -0,0 +1,217 @@ +import React, { useState, useEffect } from 'react' +import DatePicker from 'react-datepicker' +import moment from 'moment' +import { Head, Link } from '@inertiajs/inertia-react' +import { Inertia } from '@inertiajs/inertia' +import { usePrevious } from 'react-use' +import { toast } from 'react-toastify' + +import { useModalState } from '@/Hooks' +import Authenticated from '@/Layouts/Authenticated' +import Pagination from '@/Components/Pagination' +import ModalConfirm from '@/Components/ModalConfirm' +import { formatIDR, formatDate } from '@/utils' + +export default function Payrolls(props) { + const { data: payrolls, links } = props.payrolls + const { _startDate, _endDate } = props + + const [startDate, setStartDate] = useState(_startDate ? new Date(_startDate) : new Date()) + const [endDate, setEndDate] = useState(_endDate ? new Date(_endDate) : new Date()) + const preValue = usePrevious(`${startDate}-${endDate}`) + + const confirmModal = useModalState(false) + const handleDelete = (payroll) => { + confirmModal.setData(payroll) + confirmModal.toggle() + } + + const onDelete = () => { + const payroll = confirmModal.data + if (payroll != null) { + Inertia.delete(route('payrolls.destroy', payroll), { + onSuccess: () => toast.success('The Data has been deleted'), + }) + } + } + + const params = { + startDate: moment(startDate).format('yyyy-MM-DD'), + endDate: moment(endDate).format('yyyy-MM-DD'), + } + + useEffect(() => { + if (preValue) { + Inertia.get( + route(route().current()), + params, + { + replace: true, + preserveState: true, + } + ) + } + }, [startDate, endDate]) + + return ( + + Gaji + + } + > + +
+
+
+
+
+ + Tambah + +
+
+ +
+ { + setStartDate(date) + }} + format="dd/mm/yyyy" + className="input input-bordered" + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> +
+ + + +
+
+
+
+ +
+ { + setEndDate(date) + }} + format="dd/mm/yyyy" + className="input input-bordered" + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> +
+ + + +
+
+
+
+
+
+ + + + + + + + + + + + + {payrolls.map((payroll) => ( + + + + + + + + + ))} + +
TanggalNama KaryawanPotonganBonusTotal
+ {formatDate(payroll.date)} + {payroll.employee.name} + {formatIDR(payroll.cuts)} + + {formatIDR(payroll.bonus)} + + {formatIDR(payroll.recived)} + + + Edit + +
+ handleDelete( + payroll + ) + } + > + Delete +
+
+
+ +
+
+
+
+ +
+ ) +} diff --git a/resources/js/Pages/Products.js b/resources/js/Pages/Products.js index a56e0ad..5855f8f 100644 --- a/resources/js/Pages/Products.js +++ b/resources/js/Pages/Products.js @@ -14,7 +14,7 @@ import FormProductModal from '@/Modals/FormProductModal' export default function Products(props) { const { data: products, links } = props.products - const [search, setSearch] = useState('') + const [search, setSearch] = useState(props._search) const preValue = usePrevious(search) const [product, setProduct] = useState(null) @@ -90,7 +90,6 @@ export default function Products(props) { - @@ -101,7 +100,6 @@ export default function Products(props) { {products?.map((product) => ( -
Id Nama Harga Deskripsi
{product.id} {product.name} {formatIDR(product.price)} @@ -143,7 +141,7 @@ export default function Products(props) {
- + diff --git a/resources/js/Pages/Report.js b/resources/js/Pages/Report.js index 64857bd..cebe689 100644 --- a/resources/js/Pages/Report.js +++ b/resources/js/Pages/Report.js @@ -1,24 +1,177 @@ -import React from 'react' -import Authenticated from '@/Layouts/Authenticated' +import React, { useState, useEffect } from 'react' +import DatePicker from 'react-datepicker' +import moment from 'moment' import { Head } from '@inertiajs/inertia-react' +import { Inertia } from '@inertiajs/inertia' +import { usePrevious } from 'react-use' + +import Authenticated from '@/Layouts/Authenticated' +import Pagination from '@/Components/Pagination' +import { formatIDR, formatDate } from '@/utils' + +export default function Reports(props) { + const { data: payrolls, links } = props.payrolls + const { _startDate, _endDate } = props + + const [startDate, setStartDate] = useState( + _startDate ? new Date(_startDate) : new Date() + ) + const [endDate, setEndDate] = useState( + _endDate ? new Date(_endDate) : new Date() + ) + const preValue = usePrevious(`${startDate}-${endDate}`) + + useEffect(() => { + if (preValue) { + Inertia.get( + route(route().current()), + { + startDate: moment(startDate).format('yyyy-MM-DD'), + endDate: moment(endDate).format('yyyy-MM-DD'), + }, + { + replace: true, + preserveState: true, + } + ) + } + }, [startDate, endDate]) -export default function Report(props) { - return ( - - Laporan - - } - > - -
-
- -
-
-
- ) -} \ No newline at end of file + return ( + + Gaji + + } + > + +
+
+
+
+
+
+
{}} + > + Download Excel +
+
+
+
+ +
+ { + setStartDate(date) + }} + format="dd/mm/yyyy" + className="input input-bordered" + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> +
+ + + +
+
+
+
+ +
+ { + setEndDate(date) + }} + format="dd/mm/yyyy" + className="input input-bordered" + nextMonthButtonLabel=">" + previousMonthButtonLabel="<" + /> +
+ + + +
+
+
+
+
+
+ + + + + + + + + + + + {payrolls.map((payroll) => ( + + + + + + + + ))} + +
TanggalNama KaryawanKontakTotalJumlah Item
+ {formatDate(payroll.date)} + {payroll.employee.name}{payroll.employee.whatsapp} + {formatIDR(payroll.recived)} + + {formatIDR(payroll.item_count)} +
+
+ +
+
+
+
+
+ ) +} diff --git a/routes/web.php b/routes/web.php index 1a5f92b..c24c0f0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,6 +7,7 @@ use App\Http\Controllers\UserController; use App\Http\Controllers\ProductController; use App\Http\Controllers\EmployeeController; use App\Http\Controllers\PayrollController; +use App\Http\Controllers\ReportController; use App\Models\User; /* @@ -50,11 +51,13 @@ Route::middleware(['auth'])->group(function () { Route::delete('/employees/{employee}', [EmployeeController::class, 'destroy'])->name('employees.destroy'); Route::get('/payrolls', [PayrollController::class, 'index'])->name('payrolls.index'); + Route::get('/payrolls/create', [PayrollController::class, 'create'])->name('payrolls.create'); Route::post('/payrolls', [PayrollController::class, 'store'])->name('payrolls.store'); + 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('/report', fn () => inertia('Report'))->name('report'); + Route::get('/report', [ReportController::class, 'index'])->name('report'); }); require __DIR__.'/auth.php';