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
-
-
-
-
-
-
- Tanggal |
- Nama Karyawan |
- Gaji |
- Potongan |
- Bonus |
- |
-
-
-
- {payrolls.map((payroll) => (
-
- {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 && (
+
+ )}
+
+
+
+
+
+
+
+
+
+ Barang |
+ Qty |
+ Subtotal |
+ |
+
+
+
+ {data.items.map((item) => (
+
+ {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 && (
+
+ )}
+
+
+
+
+
+
+
+
+
+ Barang |
+ Qty |
+ Subtotal |
+ |
+
+
+
+ {data.items.map((item) => (
+
+ {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="<"
+ />
+
+
+
+
+
+
+
+
+
+ Tanggal |
+ Nama Karyawan |
+ Potongan |
+ Bonus |
+ Total |
+ |
+
+
+
+ {payrolls.map((payroll) => (
+
+
+ {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) {
- Id |
Nama |
Harga |
Deskripsi |
@@ -101,7 +100,6 @@ export default function Products(props) {
{products?.map((product) => (
- {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="<"
+ />
+
+
+
+
+
+
+
+
+
+ Tanggal |
+ Nama Karyawan |
+ Kontak |
+ Total |
+ Jumlah Item |
+
+
+
+ {payrolls.map((payroll) => (
+
+
+ {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';