diff --git a/app/Http/Controllers/WarehouseManagement/ProductsController.php b/app/Http/Controllers/WarehouseManagement/ProductsController.php
index ae6372b..1d91d35 100644
--- a/app/Http/Controllers/WarehouseManagement/ProductsController.php
+++ b/app/Http/Controllers/WarehouseManagement/ProductsController.php
@@ -7,10 +7,12 @@ use App\Models\Dealer;
use App\Models\Menu;
use App\Models\Product;
use App\Models\ProductCategory;
+use App\Models\StockMutation;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Yajra\DataTables\Facades\DataTables;
+use Illuminate\Validation\Rule;
class ProductsController extends Controller
{
@@ -37,13 +39,18 @@ class ProductsController extends Controller
->addColumn('action', function ($row) use ($menu) {
$btn = '
';
- if (Auth::user()->can('delete', $menu)) {
- $btn .= '
Hapus ';
- }
+ // if (Auth::user()->can('delete', $menu)) {
+ // $btn .= '
Hapus ';
+ // }
if (Auth::user()->can('update', $menu)) {
- $btn .= '
Edit ';
+ $btn .= '
Edit ';
}
+
+ $btn .= '
'
+ . ($row->active ? 'Nonaktifkan' : 'Aktifkan') . ' ';
$btn .= '
';
@@ -76,9 +83,15 @@ class ProductsController extends Controller
public function store(Request $request)
{
$request->validate([
- 'code' => 'required|string|unique:products,code',
+ 'code' => [
+ 'required',
+ 'string',
+ Rule::unique('products')->whereNull('deleted_at'),
+ ],
'name' => 'required|string',
'description' => 'nullable|string',
+ 'unit' => 'nullable|string',
+ 'active' => 'required|boolean',
'product_category_id' => 'required|exists:product_categories,id',
'dealer_stock' => 'nullable|array',
'dealer_stock.*.dealer_id' => 'required|exists:dealers,id',
@@ -89,19 +102,33 @@ class ProductsController extends Controller
$product = Product::create([
'code' => $request->code,
'name' => $request->name,
+ 'unit' => $request->unit,
'description' => $request->description,
'product_category_id' => $request->product_category_id,
]);
- // Prepare dealer stock for pivot
+ // Prepare dealer stock for pivot and create mutation records
$pivotData = [];
if ($request->has('dealer_stock')) {
foreach ($request->dealer_stock as $stockData) {
if (empty($stockData['dealer_id']) || !isset($stockData['quantity'])) continue;
-
- $pivotData[$stockData['dealer_id']] = ['quantity' => $stockData['quantity']];
+
+ $dealerId = $stockData['dealer_id'];
+ $quantity = $stockData['quantity'];
+
+ $pivotData[$dealerId] = ['quantity' => $quantity];
+
+ // Create stock mutation for initial stock "in"
+ StockMutation::create([
+ 'product_id' => $product->id,
+ 'dealer_id' => $dealerId,
+ 'mutation_type' => 'in', // karena ini penambahan stok awal
+ 'quantity' => $quantity,
+ 'description' => 'Initial stock added when product created',
+ 'user_id' => Auth::id(),
+ ]);
}
-
+
// Attach dealer stock using pivot table
$product->dealers()->attach($pivotData);
}
@@ -146,28 +173,75 @@ class ProductsController extends Controller
public function update(Request $request, Product $product)
{
$request->validate([
- 'code' => 'required|string|unique:products,code,' . $product->id,
+ 'code' => [
+ 'required',
+ 'string',
+ Rule::unique('products')->ignore($product->id)->whereNull('deleted_at'),
+ ],
'name' => 'required|string',
'description' => 'nullable|string',
+ 'unit' => 'nullable|string',
+ 'active' => 'required|boolean',
'product_category_id' => 'required|exists:product_categories,id',
'dealer_stock' => 'nullable|array',
'dealer_stock.*.dealer_id' => 'required|exists:dealers,id',
'dealer_stock.*.quantity' => 'required|integer|min:0',
]);
- $product->update($request->only(['code', 'name', 'description', 'product_category_id']));
+ $product->update($request->only(['code', 'name', 'description', 'unit', 'product_category_id']));
- // Prepare pivot sync data
+ // Ambil stok lama dari pivot
+ $oldStocks = $product->dealers()->pluck('quantity', 'dealer_id')->toArray();
+
+ // Data baru untuk sync pivot
$syncData = [];
+
+ $newStocks = [];
if ($request->has('dealer_stock')) {
foreach ($request->dealer_stock as $item) {
- $syncData[$item['dealer_id']] = ['quantity' => $item['quantity']];
+ $dealerId = $item['dealer_id'];
+ $newQty = $item['quantity'];
+ $syncData[$dealerId] = ['quantity' => $newQty];
+ $newStocks[$dealerId] = $newQty;
}
}
- // Sync with pivot table
+ // Sync pivot table
$product->dealers()->sync($syncData);
+ // Hitung mutasi stok (selisih)
+ // Mutasi stok untuk stok baru atau perubahan stok
+ foreach ($newStocks as $dealerId => $newQty) {
+ $oldQty = $oldStocks[$dealerId] ?? 0;
+ $diff = $newQty - $oldQty;
+
+ if ($diff != 0) {
+ StockMutation::create([
+ 'product_id' => $product->id,
+ 'dealer_id' => $dealerId,
+ 'mutation_type' => $diff > 0 ? 'in' : 'out',
+ 'quantity' => abs($diff),
+ 'description' => 'Stock updated via product update',
+ 'user_id' => auth()->id(),
+ ]);
+ }
+ }
+
+ // Mutasi stok untuk dealer yang dihapus (stok jadi 0)
+ $deletedDealers = array_diff_key($oldStocks, $newStocks);
+ foreach ($deletedDealers as $dealerId => $oldQty) {
+ if ($oldQty > 0) {
+ StockMutation::create([
+ 'product_id' => $product->id,
+ 'dealer_id' => $dealerId,
+ 'mutation_type' => 'out',
+ 'quantity' => $oldQty,
+ 'description' => 'Stock removed via product update (dealer removed)',
+ 'user_id' => auth()->id(),
+ ]);
+ }
+ }
+
return redirect()->route('products.index')->with('success', 'Produk berhasil diperbarui.');
}
@@ -179,12 +253,41 @@ class ProductsController extends Controller
*/
public function destroy(Product $product)
{
- // Detach all dealer relationships (optional if using cascade on delete)
+ // Ambil stok pivot sebelum hapus
+ $dealerStocks = $product->dealers()->pluck('quantity', 'dealer_id')->toArray();
+
+ // Buat mutasi stok keluar (out) untuk semua stok yang dihapus
+ foreach ($dealerStocks as $dealerId => $qty) {
+ if ($qty > 0) {
+ StockMutation::create([
+ 'product_id' => $product->id,
+ 'dealer_id' => $dealerId,
+ 'mutation_type' => 'out',
+ 'quantity' => $qty,
+ 'description' => 'Stock removed due to product deletion',
+ 'user_id' => auth()->id(),
+ ]);
+ }
+ }
+
+ // Hapus pivot stok dealer
$product->dealers()->detach();
- // Delete the product
+ // Hapus produk
$product->delete();
- return response()->json(['success' => true, 'message' => 'Produk berhasil dihapus.']);
+ return redirect()->route('products.index')->with('success', 'Produk berhasil dihapus.');
+ }
+ public function toggleActive(Request $request, Product $product)
+ {
+ // You can add authorization here
+ $product->active = !$product->active;
+ $product->save();
+
+ return response()->json([
+ 'success' => true,
+ 'active' => $product->active,
+ 'message' => 'Status produk berhasil diperbarui.'
+ ]);
}
}
diff --git a/app/Http/Controllers/WarehouseManagement/StockMutationsController.php b/app/Http/Controllers/WarehouseManagement/StockMutationsController.php
new file mode 100644
index 0000000..d2c3c20
--- /dev/null
+++ b/app/Http/Controllers/WarehouseManagement/StockMutationsController.php
@@ -0,0 +1,41 @@
+ajax()) {
+ $query = StockMutation::with(['product', 'dealer', 'user']);
+
+ return DataTables::of($query)
+ ->addIndexColumn()
+ ->addColumn('product_name', function ($row) {
+ return $row->product ? $row->product->name : '-';
+ })
+ ->addColumn('dealer_name', function ($row) {
+ return $row->dealer ? $row->dealer->name : '-';
+ })
+ ->addColumn('user_name', function ($row) {
+ return $row->user ? $row->user->name : '-';
+ })
+ ->addColumn('mutation_type_label', function ($row) {
+ return $row->mutation_type == 'in'
+ ? 'Masuk '
+ : 'Keluar ';
+ })
+ ->editColumn('created_at', function ($row) {
+ return $row->created_at->format('d M Y H:i');
+ })
+ ->rawColumns(['mutation_type_label'])
+ ->make(true);
+ }
+
+ return view('warehouse_management.stock_mutations.index');
+ }
+}
diff --git a/app/Models/Product.php b/app/Models/Product.php
index eb7392f..5034d7e 100644
--- a/app/Models/Product.php
+++ b/app/Models/Product.php
@@ -10,7 +10,7 @@ class Product extends Model
{
use HasFactory, SoftDeletes;
- protected $fillable = ['code','name','description','product_category_id'];
+ protected $fillable = ['code','name','description','unit','active','product_category_id'];
public function category(){
return $this->belongsTo(ProductCategory::class, 'product_category_id');
diff --git a/app/Models/StockMutation.php b/app/Models/StockMutation.php
new file mode 100644
index 0000000..62b24bc
--- /dev/null
+++ b/app/Models/StockMutation.php
@@ -0,0 +1,35 @@
+belongsTo(Product::class);
+ }
+
+ public function dealer()
+ {
+ return $this->belongsTo(Dealer::class);
+ }
+
+ public function user()
+ {
+ return $this->belongsTo(User::class);
+ }
+}
diff --git a/app/Models/StockOpname.php b/app/Models/StockOpname.php
new file mode 100644
index 0000000..44da6bc
--- /dev/null
+++ b/app/Models/StockOpname.php
@@ -0,0 +1,36 @@
+belongsTo(Product::class);
+ }
+
+ public function dealer()
+ {
+ return $this->belongsTo(Dealer::class);
+ }
+
+ public function user()
+ {
+ return $this->belongsTo(User::class);
+ }
+}
diff --git a/database/migrations/2025_06_02_162509_create_stock_mutations_table.php b/database/migrations/2025_06_02_162509_create_stock_mutations_table.php
new file mode 100644
index 0000000..0ba67d1
--- /dev/null
+++ b/database/migrations/2025_06_02_162509_create_stock_mutations_table.php
@@ -0,0 +1,37 @@
+id();
+ $table->foreignId('product_id')->constrained()->onDelete('cascade');
+ $table->foreignId('dealer_id')->constrained()->onDelete('cascade');
+ $table->enum('mutation_type',['in','out','adjustment']);
+ $table->integer('quantity');
+ $table->text('description')->nullable();
+ $table->foreignId('user_id')->constrained()->onDelete('cascade');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('stock_mutations');
+ }
+}
diff --git a/database/migrations/2025_06_02_162952_create_stock_opnames_table.php b/database/migrations/2025_06_02_162952_create_stock_opnames_table.php
new file mode 100644
index 0000000..ce9d145
--- /dev/null
+++ b/database/migrations/2025_06_02_162952_create_stock_opnames_table.php
@@ -0,0 +1,38 @@
+id();
+ $table->foreignId('product_id')->constrained()->onDelete('cascade');
+ $table->foreignId('dealer_id')->constrained()->onDelete('cascade');
+ $table->integer('system_quantity');
+ $table->integer('physical_quantity');
+ $table->integer('difference');
+ $table->date('opname_date');
+ $table->foreignId('user_id')->constrained()->onDelete('cascade');
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::dropIfExists('stock_opnames');
+ }
+}
diff --git a/database/migrations/2025_06_02_173028_add_unit_to_products_table.php b/database/migrations/2025_06_02_173028_add_unit_to_products_table.php
new file mode 100644
index 0000000..72d8d53
--- /dev/null
+++ b/database/migrations/2025_06_02_173028_add_unit_to_products_table.php
@@ -0,0 +1,32 @@
+string('unit')->nullable()->after('description');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('products', function (Blueprint $table) {
+ $table->dropColumn('unit');
+ });
+ }
+}
diff --git a/database/migrations/2025_06_02_180058_add_active_to_products_table.php b/database/migrations/2025_06_02_180058_add_active_to_products_table.php
new file mode 100644
index 0000000..c6d0004
--- /dev/null
+++ b/database/migrations/2025_06_02_180058_add_active_to_products_table.php
@@ -0,0 +1,32 @@
+boolean('active')->default(true)->after('unit');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('products', function (Blueprint $table) {
+ $table->dropColumn('active');
+ });
+ }
+}
diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php
index 8c67eaf..98100cc 100644
--- a/database/seeders/MenuSeeder.php
+++ b/database/seeders/MenuSeeder.php
@@ -22,6 +22,10 @@ class MenuSeeder extends Seeder
[
'name' => 'Kategori Produk',
'link' => 'product_categories.index'
+ ],
+ [
+ 'name' => 'Mutasi Produk',
+ 'link' => 'mutations.index'
]
];
diff --git a/public/js/warehouse_management/products/edit.js b/public/js/warehouse_management/products/edit.js
index ad8b808..19e1850 100644
--- a/public/js/warehouse_management/products/edit.js
+++ b/public/js/warehouse_management/products/edit.js
@@ -15,7 +15,7 @@
\************************************************************/
/***/ (() => {
-eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var dealerRowContainer = document.getElementById(\"dynamicDealerRows\");\n var addDealerButton = document.getElementById(\"addDealerRow\"); // Initial index from existing dealer rows\n\n var rowIndex = dealerRowContainer.querySelectorAll(\".dealer-stock-row\").length;\n addDealerButton.addEventListener(\"click\", function () {\n var newRow = document.createElement(\"div\");\n newRow.className = \"form-group row align-items-center dealer-stock-row\";\n newRow.innerHTML = \"\\n \\n \\n -- Pilih Dealer -- \\n \").concat(generateDealerOptions(), \"\\n \\n
\\n \\n \\n
\\n \\n Hapus \\n
\\n \");\n dealerRowContainer.appendChild(newRow);\n rowIndex++;\n }); // Handle removal of dealer row\n\n dealerRowContainer.addEventListener(\"click\", function (event) {\n if (event.target && event.target.classList.contains(\"remove-dealer-row\")) {\n event.target.closest(\".dealer-stock-row\").remove();\n }\n }); // Function to generate dealer elements dynamically\n\n function generateDealerOptions() {\n var dealerDataDiv = document.getElementById(\"dealerData\");\n var dealers = JSON.parse(dealerDataDiv.getAttribute(\"data-dealers\"));\n return dealers.map(function (d) {\n return \" \").concat(d.name, \" \");\n }).join(\"\");\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcy5qcyIsIm5hbWVzIjpbImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImRlYWxlclJvd0NvbnRhaW5lciIsImdldEVsZW1lbnRCeUlkIiwiYWRkRGVhbGVyQnV0dG9uIiwicm93SW5kZXgiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwibmV3Um93IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImlubmVySFRNTCIsImdlbmVyYXRlRGVhbGVyT3B0aW9ucyIsImFwcGVuZENoaWxkIiwiZXZlbnQiLCJ0YXJnZXQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImNsb3Nlc3QiLCJyZW1vdmUiLCJkZWFsZXJEYXRhRGl2IiwiZGVhbGVycyIsIkpTT04iLCJwYXJzZSIsImdldEF0dHJpYnV0ZSIsIm1hcCIsImQiLCJpZCIsIm5hbWUiLCJqb2luIl0sInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcz81YTM4Il0sInNvdXJjZXNDb250ZW50IjpbImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVhbGVyUm93Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkeW5hbWljRGVhbGVyUm93c1wiKTtcbiAgICBsZXQgYWRkRGVhbGVyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG5cbiAgICAvLyBJbml0aWFsIGluZGV4IGZyb20gZXhpc3RpbmcgZGVhbGVyIHJvd3NcbiAgICBsZXQgcm93SW5kZXggPVxuICAgICAgICBkZWFsZXJSb3dDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5kZWFsZXItc3RvY2stcm93XCIpLmxlbmd0aDtcblxuICAgIGFkZERlYWxlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBuZXdSb3cuY2xhc3NOYW1lID0gXCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZGVhbGVyLXN0b2NrLXJvd1wiO1xuICAgICAgICBuZXdSb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJkZWFsZXJfc3RvY2tbJHtyb3dJbmRleH1dW2RlYWxlcl9pZF1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIFBpbGloIERlYWxlciAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgJHtnZW5lcmF0ZURlYWxlck9wdGlvbnMoKX1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske3Jvd0luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJKdW1sYWggU3Rva1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZS1kZWFsZXItcm93XCI+IEhhcHVzIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgICAgZGVhbGVyUm93Q29udGFpbmVyLmFwcGVuZENoaWxkKG5ld1Jvdyk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVtb3ZhbCBvZiBkZWFsZXIgcm93XG4gICAgZGVhbGVyUm93Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlLWRlYWxlci1yb3dcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdChcIi5kZWFsZXItc3RvY2stcm93XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBkZWFsZXIgPG9wdGlvbj4gZWxlbWVudHMgZHluYW1pY2FsbHlcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZURlYWxlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgICAgIGNvbnN0IGRlYWxlcnMgPSBKU09OLnBhcnNlKGRlYWxlckRhdGFEaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1kZWFsZXJzXCIpKTtcbiAgICAgICAgcmV0dXJuIGRlYWxlcnNcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtkLmlkfVwiPiR7ZC5uYW1lfTwvb3B0aW9uPmApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7RUFDdEQsSUFBSUMsa0JBQWtCLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixtQkFBeEIsQ0FBekI7RUFDQSxJQUFJQyxlQUFlLEdBQUdKLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUF0QixDQUZzRCxDQUl0RDs7RUFDQSxJQUFJRSxRQUFRLEdBQ1JILGtCQUFrQixDQUFDSSxnQkFBbkIsQ0FBb0MsbUJBQXBDLEVBQXlEQyxNQUQ3RDtFQUdBSCxlQUFlLENBQUNILGdCQUFoQixDQUFpQyxPQUFqQyxFQUEwQyxZQUFZO0lBQ2xELElBQU1PLE1BQU0sR0FBR1IsUUFBUSxDQUFDUyxhQUFULENBQXVCLEtBQXZCLENBQWY7SUFDQUQsTUFBTSxDQUFDRSxTQUFQLEdBQW1CLG9EQUFuQjtJQUNBRixNQUFNLENBQUNHLFNBQVAsNkZBRW1DTixRQUZuQyx5SUFJWU8scUJBQXFCLEVBSmpDLHVKQVFnRFAsUUFSaEQ7SUFjQUgsa0JBQWtCLENBQUNXLFdBQW5CLENBQStCTCxNQUEvQjtJQUNBSCxRQUFRO0VBQ1gsQ0FuQkQsRUFSc0QsQ0E2QnREOztFQUNBSCxrQkFBa0IsQ0FBQ0QsZ0JBQW5CLENBQW9DLE9BQXBDLEVBQTZDLFVBQVVhLEtBQVYsRUFBaUI7SUFDMUQsSUFDSUEsS0FBSyxDQUFDQyxNQUFOLElBQ0FELEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxTQUFiLENBQXVCQyxRQUF2QixDQUFnQyxtQkFBaEMsQ0FGSixFQUdFO01BQ0VILEtBQUssQ0FBQ0MsTUFBTixDQUFhRyxPQUFiLENBQXFCLG1CQUFyQixFQUEwQ0MsTUFBMUM7SUFDSDtFQUNKLENBUEQsRUE5QnNELENBdUN0RDs7RUFDQSxTQUFTUCxxQkFBVCxHQUFpQztJQUM3QixJQUFNUSxhQUFhLEdBQUdwQixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsWUFBeEIsQ0FBdEI7SUFDQSxJQUFNa0IsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEI7SUFDQSxPQUFPSCxPQUFPLENBQ1RJLEdBREUsQ0FDRSxVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBREYsRUFFRkMsSUFGRSxDQUVHLEVBRkgsQ0FBUDtFQUdIO0FBQ0osQ0EvQ0QifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/edit.js\n");
+eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var dealerRowContainer = document.getElementById(\"dynamicDealerRows\");\n var addDealerButton = document.getElementById(\"addDealerRow\"); // Initial index from existing dealer rows\n\n var rowIndex = dealerRowContainer.querySelectorAll(\".dealer-stock-row\").length;\n addDealerButton.addEventListener(\"click\", function () {\n var newRow = document.createElement(\"div\");\n newRow.className = \"form-group row align-items-center dealer-stock-row\";\n newRow.innerHTML = \"\\n \\n \\n -- Pilih Dealer -- \\n \").concat(generateDealerOptions(), \"\\n \\n
\\n \\n \\n
\\n \\n Hapus \\n
\\n \");\n dealerRowContainer.appendChild(newRow);\n rowIndex++;\n }); // Handle removal of dealer row\n\n dealerRowContainer.addEventListener(\"click\", function (event) {\n if (event.target && event.target.classList.contains(\"remove-dealer-row\")) {\n event.target.closest(\".dealer-stock-row\").remove();\n }\n }); // Function to generate dealer elements dynamically\n\n function generateDealerOptions() {\n var dealerDataDiv = document.getElementById(\"dealerData\");\n var dealers = JSON.parse(dealerDataDiv.getAttribute(\"data-dealers\"));\n return dealers.map(function (d) {\n return \" \").concat(d.name, \" \");\n }).join(\"\");\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZWFsZXJSb3dDb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImFkZERlYWxlckJ1dHRvbiIsInJvd0luZGV4IiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsIm5ld1JvdyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbm5lckhUTUwiLCJnZW5lcmF0ZURlYWxlck9wdGlvbnMiLCJhcHBlbmRDaGlsZCIsImV2ZW50IiwidGFyZ2V0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjbG9zZXN0IiwicmVtb3ZlIiwiZGVhbGVyRGF0YURpdiIsImRlYWxlcnMiLCJKU09OIiwicGFyc2UiLCJnZXRBdHRyaWJ1dGUiLCJtYXAiLCJkIiwiaWQiLCJuYW1lIiwiam9pbiJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcz81YTM4Il0sInNvdXJjZXNDb250ZW50IjpbImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVhbGVyUm93Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkeW5hbWljRGVhbGVyUm93c1wiKTtcbiAgICBsZXQgYWRkRGVhbGVyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG5cbiAgICAvLyBJbml0aWFsIGluZGV4IGZyb20gZXhpc3RpbmcgZGVhbGVyIHJvd3NcbiAgICBsZXQgcm93SW5kZXggPVxuICAgICAgICBkZWFsZXJSb3dDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5kZWFsZXItc3RvY2stcm93XCIpLmxlbmd0aDtcblxuICAgIGFkZERlYWxlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBuZXdSb3cuY2xhc3NOYW1lID0gXCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZGVhbGVyLXN0b2NrLXJvd1wiO1xuICAgICAgICBuZXdSb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJkZWFsZXJfc3RvY2tbJHtyb3dJbmRleH1dW2RlYWxlcl9pZF1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIFBpbGloIERlYWxlciAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgJHtnZW5lcmF0ZURlYWxlck9wdGlvbnMoKX1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske3Jvd0luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJKdW1sYWggU3Rva1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZS1kZWFsZXItcm93XCI+IEhhcHVzIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgICAgZGVhbGVyUm93Q29udGFpbmVyLmFwcGVuZENoaWxkKG5ld1Jvdyk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVtb3ZhbCBvZiBkZWFsZXIgcm93XG4gICAgZGVhbGVyUm93Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlLWRlYWxlci1yb3dcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdChcIi5kZWFsZXItc3RvY2stcm93XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBkZWFsZXIgPG9wdGlvbj4gZWxlbWVudHMgZHluYW1pY2FsbHlcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZURlYWxlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgICAgIGNvbnN0IGRlYWxlcnMgPSBKU09OLnBhcnNlKGRlYWxlckRhdGFEaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1kZWFsZXJzXCIpKTtcbiAgICAgICAgcmV0dXJuIGRlYWxlcnNcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtkLmlkfVwiPiR7ZC5uYW1lfTwvb3B0aW9uPmApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7RUFDdEQsSUFBSUMsa0JBQWtCLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixtQkFBeEIsQ0FBekI7RUFDQSxJQUFJQyxlQUFlLEdBQUdKLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUF0QixDQUZzRCxDQUl0RDs7RUFDQSxJQUFJRSxRQUFRLEdBQ1JILGtCQUFrQixDQUFDSSxnQkFBbkIsQ0FBb0MsbUJBQXBDLEVBQXlEQyxNQUQ3RDtFQUdBSCxlQUFlLENBQUNILGdCQUFoQixDQUFpQyxPQUFqQyxFQUEwQyxZQUFZO0lBQ2xELElBQU1PLE1BQU0sR0FBR1IsUUFBUSxDQUFDUyxhQUFULENBQXVCLEtBQXZCLENBQWY7SUFDQUQsTUFBTSxDQUFDRSxTQUFQLEdBQW1CLG9EQUFuQjtJQUNBRixNQUFNLENBQUNHLFNBQVAsNkZBRW1DTixRQUZuQyx5SUFJWU8scUJBQXFCLEVBSmpDLHVKQVFnRFAsUUFSaEQ7SUFjQUgsa0JBQWtCLENBQUNXLFdBQW5CLENBQStCTCxNQUEvQjtJQUNBSCxRQUFRO0VBQ1gsQ0FuQkQsRUFSc0QsQ0E2QnREOztFQUNBSCxrQkFBa0IsQ0FBQ0QsZ0JBQW5CLENBQW9DLE9BQXBDLEVBQTZDLFVBQVVhLEtBQVYsRUFBaUI7SUFDMUQsSUFDSUEsS0FBSyxDQUFDQyxNQUFOLElBQ0FELEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxTQUFiLENBQXVCQyxRQUF2QixDQUFnQyxtQkFBaEMsQ0FGSixFQUdFO01BQ0VILEtBQUssQ0FBQ0MsTUFBTixDQUFhRyxPQUFiLENBQXFCLG1CQUFyQixFQUEwQ0MsTUFBMUM7SUFDSDtFQUNKLENBUEQsRUE5QnNELENBdUN0RDs7RUFDQSxTQUFTUCxxQkFBVCxHQUFpQztJQUM3QixJQUFNUSxhQUFhLEdBQUdwQixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsWUFBeEIsQ0FBdEI7SUFDQSxJQUFNa0IsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEI7SUFDQSxPQUFPSCxPQUFPLENBQ1RJLEdBREUsQ0FDRSxVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBREYsRUFFRkMsSUFGRSxDQUVHLEVBRkgsQ0FBUDtFQUdIO0FBQ0osQ0EvQ0QiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcy5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/edit.js\n");
/***/ })
diff --git a/public/js/warehouse_management/products/index.js b/public/js/warehouse_management/products/index.js
index 3805235..2765602 100644
--- a/public/js/warehouse_management/products/index.js
+++ b/public/js/warehouse_management/products/index.js
@@ -15,7 +15,7 @@
\*************************************************************/
/***/ (() => {
-eval("$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#products-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#products-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"code\",\n name: \"code\"\n }, {\n data: \"name\",\n name: \"name\"\n }, {\n data: \"category_name\",\n name: \"category.name\"\n }, {\n data: \"total_stock\",\n name: \"total_stock\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).on(\"click\", \".btn-destroy-product\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus produk?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Produk berhasil dihapus.\");\n $(\"#products-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus produk.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvaW5kZXguanMuanMiLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50Iiwib24iLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwidGhlbiIsInJlc3VsdCIsInZhbHVlIiwibWV0aG9kIiwiX21ldGhvZCIsIl90b2tlbiIsInN1Y2Nlc3MiLCJhbGVydCIsInJlbG9hZCIsImVycm9yIiwieGhyIiwiY29uc29sZSIsInJlc3BvbnNlVGV4dCJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2luZGV4LmpzP2ZjZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIikuRGF0YVRhYmxlKHtcbiAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgYWpheDogdXJsLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBkYXRhOiBcImNvZGVcIiwgbmFtZTogXCJjb2RlXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcIm5hbWVcIiwgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImNhdGVnb3J5X25hbWVcIiwgbmFtZTogXCJjYXRlZ29yeS5uYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcInRvdGFsX3N0b2NrXCIsIG5hbWU6IFwidG90YWxfc3RvY2tcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiYWN0aW9uXCIsIG5hbWU6IFwiYWN0aW9uXCIsIG9yZGVyYWJsZTogZmFsc2UsIHNlYXJjaGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbn0pO1xuXG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1kZXN0cm95LXByb2R1Y3RcIiwgZnVuY3Rpb24gKCkge1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkhhcHVzIHByb2R1az9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHRpZGFrIGFrYW4gYmlzYSBtZW5nZW1iYWxpa2FubnlhIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkhhcHVzXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcImFjdGlvblwiKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF9tZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIlByb2R1ayBiZXJoYXNpbCBkaWhhcHVzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0cy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5naGFwdXMgcHJvZHVrLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJBQUQsQ0FBRCxDQUE2QkcsSUFBN0IsQ0FBa0MsU0FBbEM7RUFEWDtBQURELENBQVo7QUFLQSxJQUFJQyxjQUFjLEdBQUdKLENBQUMsQ0FBQyxpQkFBRCxDQUF0QjtBQUNBLElBQUlLLEdBQUcsR0FBR0QsY0FBYyxDQUFDRSxJQUFmLENBQW9CLEtBQXBCLENBQVY7QUFDQSxJQUFJQyxLQUFLLEdBQUdQLENBQUMsQ0FBQyxpQkFBRCxDQUFELENBQXFCUSxTQUFyQixDQUErQjtFQUN2Q0MsVUFBVSxFQUFFLElBRDJCO0VBRXZDQyxVQUFVLEVBQUUsSUFGMkI7RUFHdkNDLElBQUksRUFBRU4sR0FIaUM7RUFJdkNPLE9BQU8sRUFBRSxDQUNMO0lBQUVOLElBQUksRUFBRSxNQUFSO0lBQWdCTyxJQUFJLEVBQUU7RUFBdEIsQ0FESyxFQUVMO0lBQUVQLElBQUksRUFBRSxNQUFSO0lBQWdCTyxJQUFJLEVBQUU7RUFBdEIsQ0FGSyxFQUdMO0lBQUVQLElBQUksRUFBRSxlQUFSO0lBQXlCTyxJQUFJLEVBQUU7RUFBL0IsQ0FISyxFQUlMO0lBQUVQLElBQUksRUFBRSxhQUFSO0lBQXVCTyxJQUFJLEVBQUU7RUFBN0IsQ0FKSyxFQUtMO0lBQUVQLElBQUksRUFBRSxRQUFSO0lBQWtCTyxJQUFJLEVBQUUsUUFBeEI7SUFBa0NDLFNBQVMsRUFBRSxLQUE3QztJQUFvREMsVUFBVSxFQUFFO0VBQWhFLENBTEs7QUFKOEIsQ0FBL0IsQ0FBWjtBQWFBZixDQUFDLENBQUNnQixRQUFELENBQUQsQ0FBWUMsRUFBWixDQUFlLE9BQWYsRUFBd0Isc0JBQXhCLEVBQWdELFlBQVk7RUFBQTs7RUFDeERDLElBQUksQ0FBQ0MsSUFBTCxDQUFVO0lBQ05DLEtBQUssRUFBRSxlQUREO0lBRU5DLElBQUksRUFBRSx3Q0FGQTtJQUdOQyxnQkFBZ0IsRUFBRSxJQUhaO0lBSU5DLGtCQUFrQixFQUFFLE1BSmQ7SUFLTkMsaUJBQWlCLEVBQUUsU0FMYjtJQU1OQyxpQkFBaUIsRUFBRTtFQU5iLENBQVYsRUFPR0MsSUFQSCxDQU9RLFVBQUNDLE1BQUQsRUFBWTtJQUNoQixJQUFJQSxNQUFNLENBQUNDLEtBQVgsRUFBa0I7TUFDZCxJQUFNdkIsSUFBRyxHQUFHTCxDQUFDLENBQUMsS0FBRCxDQUFELENBQVFNLElBQVIsQ0FBYSxRQUFiLENBQVo7O01BQ0FOLENBQUMsQ0FBQ1csSUFBRixDQUFPO1FBQ0hOLEdBQUcsRUFBRUEsSUFERjtRQUVId0IsTUFBTSxFQUFFLE1BRkw7UUFHSHZCLElBQUksRUFBRTtVQUNGd0IsT0FBTyxFQUFFLFFBRFA7VUFFRkMsTUFBTSxFQUFFL0IsQ0FBQyxDQUFDLHlCQUFELENBQUQsQ0FBNkJHLElBQTdCLENBQWtDLFNBQWxDO1FBRk4sQ0FISDtRQU9INkIsT0FBTyxFQUFFLG1CQUFZO1VBQ2pCQyxLQUFLLENBQUMsMEJBQUQsQ0FBTDtVQUNBakMsQ0FBQyxDQUFDLGlCQUFELENBQUQsQ0FBcUJRLFNBQXJCLEdBQWlDRyxJQUFqQyxDQUFzQ3VCLE1BQXRDO1FBQ0gsQ0FWRTtRQVdIQyxLQUFLLEVBQUUsZUFBVUMsR0FBVixFQUFlO1VBQ2xCSCxLQUFLLENBQUMseUJBQUQsQ0FBTDtVQUNBSSxPQUFPLENBQUNGLEtBQVIsQ0FBY0MsR0FBRyxDQUFDRSxZQUFsQjtRQUNIO01BZEUsQ0FBUDtJQWdCSDtFQUNKLENBM0JEO0FBNEJILENBN0JEIn0=\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/index.js\n");
+eval("$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#products-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#products-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"code\",\n name: \"code\"\n }, {\n data: \"name\",\n name: \"name\"\n }, {\n data: \"category_name\",\n name: \"category.name\"\n }, {\n data: \"unit\",\n name: \"unit\"\n }, {\n data: \"total_stock\",\n name: \"total_stock\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).on(\"click\", \".btn-destroy-product\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus produk?\",\n text: \"Anda tidak akan bisa mengembalikannya!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Hapus\"\n }).then(function (result) {\n if (result.value) {\n var _url = $(_this).data(\"action\");\n\n $.ajax({\n url: _url,\n method: \"POST\",\n data: {\n _method: \"DELETE\",\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success() {\n alert(\"Produk berhasil dihapus.\");\n $(\"#products-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus produk.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});\n$(document).on(\"click\", \".btn-toggle-active\", function () {\n var button = $(this);\n var url = button.data(\"url\");\n Swal.fire({\n title: \"Status produk?\",\n text: \"Anda yakin ingin mengganti status produk!\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n cancelButtonColor: \"#dedede\",\n confirmButtonText: \"Ya\"\n }).then(function (result) {\n if (result.value) {\n $.ajax({\n url: url,\n method: \"POST\",\n data: {\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n },\n success: function success(response) {\n if (response.success) {\n $(\"#products-table\").DataTable().ajax.reload(null, false);\n alert(response.message);\n }\n },\n error: function error() {\n alert(\"Gagal mengubah status produk.\");\n }\n });\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvaW5kZXguanMuanMiLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50Iiwib24iLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwidGV4dCIsInNob3dDYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uQ29sb3IiLCJjYW5jZWxCdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwidGhlbiIsInJlc3VsdCIsInZhbHVlIiwibWV0aG9kIiwiX21ldGhvZCIsIl90b2tlbiIsInN1Y2Nlc3MiLCJhbGVydCIsInJlbG9hZCIsImVycm9yIiwieGhyIiwiY29uc29sZSIsInJlc3BvbnNlVGV4dCIsImJ1dHRvbiIsInJlc3BvbnNlIiwibWVzc2FnZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2luZGV4LmpzP2ZjZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIikuRGF0YVRhYmxlKHtcbiAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgYWpheDogdXJsLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgICAgeyBkYXRhOiBcImNvZGVcIiwgbmFtZTogXCJjb2RlXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcIm5hbWVcIiwgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImNhdGVnb3J5X25hbWVcIiwgbmFtZTogXCJjYXRlZ29yeS5uYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcInVuaXRcIiwgbmFtZTogXCJ1bml0XCIgfSxcbiAgICAgICAgeyBkYXRhOiBcInRvdGFsX3N0b2NrXCIsIG5hbWU6IFwidG90YWxfc3RvY2tcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiYWN0aW9uXCIsIG5hbWU6IFwiYWN0aW9uXCIsIG9yZGVyYWJsZTogZmFsc2UsIHNlYXJjaGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbn0pO1xuXG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1kZXN0cm95LXByb2R1Y3RcIiwgZnVuY3Rpb24gKCkge1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkhhcHVzIHByb2R1az9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHRpZGFrIGFrYW4gYmlzYSBtZW5nZW1iYWxpa2FubnlhIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkhhcHVzXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcImFjdGlvblwiKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF9tZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIlByb2R1ayBiZXJoYXNpbCBkaWhhcHVzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0cy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5naGFwdXMgcHJvZHVrLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tdG9nZ2xlLWFjdGl2ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGJ1dHRvbiA9ICQodGhpcyk7XG4gICAgbGV0IHVybCA9IGJ1dHRvbi5kYXRhKFwidXJsXCIpO1xuXG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFwiU3RhdHVzIHByb2R1az9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHlha2luIGluZ2luIG1lbmdnYW50aSBzdGF0dXMgcHJvZHVrIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIllhXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3RzLXRhYmxlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLkRhdGFUYWJsZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFqYXgucmVsb2FkKG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmd1YmFoIHN0YXR1cyBwcm9kdWsuXCIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxDQUFD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\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/index.js\n");
/***/ })
diff --git a/public/js/warehouse_management/stock_mutations/index.js b/public/js/warehouse_management/stock_mutations/index.js
new file mode 100644
index 0000000..595a39e
--- /dev/null
+++ b/public/js/warehouse_management/stock_mutations/index.js
@@ -0,0 +1,32 @@
+/*
+ * ATTENTION: An "eval-source-map" devtool has been used.
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
+
+/***/ "./resources/js/warehouse_management/stock_mutations/index.js":
+/*!********************************************************************!*\
+ !*** ./resources/js/warehouse_management/stock_mutations/index.js ***!
+ \********************************************************************/
+/***/ (() => {
+
+eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9zdG9ja19tdXRhdGlvbnMvaW5kZXguanM/OGNlZiJdLCJzb3VyY2VzQ29udGVudCI6WyIiXSwibWFwcGluZ3MiOiIiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvc3RvY2tfbXV0YXRpb25zL2luZGV4LmpzLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/stock_mutations/index.js\n");
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/
+/******/ // startup
+/******/ // Load entry module and return exports
+/******/ // This entry module can't be inlined because the eval-source-map devtool is used.
+/******/ var __webpack_exports__ = {};
+/******/ __webpack_modules__["./resources/js/warehouse_management/stock_mutations/index.js"]();
+/******/
+/******/ })()
+;
\ No newline at end of file
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index 619cc73..480162f 100644
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -4,5 +4,6 @@
"/js/warehouse_management/products/index.js": "/js/warehouse_management/products/index.js",
"/js/warehouse_management/products/create.js": "/js/warehouse_management/products/create.js",
"/js/warehouse_management/products/edit.js": "/js/warehouse_management/products/edit.js",
+ "/js/warehouse_management/stock_mutations/index.js": "/js/warehouse_management/stock_mutations/index.js",
"/css/app.css": "/css/app.css"
}
diff --git a/resources/js/warehouse_management/products/index.js b/resources/js/warehouse_management/products/index.js
index 5d35582..63f6ff3 100644
--- a/resources/js/warehouse_management/products/index.js
+++ b/resources/js/warehouse_management/products/index.js
@@ -13,6 +13,7 @@ let table = $("#products-table").DataTable({
{ data: "code", name: "code" },
{ data: "name", name: "name" },
{ data: "category_name", name: "category.name" },
+ { data: "unit", name: "unit" },
{ data: "total_stock", name: "total_stock" },
{ data: "action", name: "action", orderable: false, searchable: false },
],
@@ -48,3 +49,37 @@ $(document).on("click", ".btn-destroy-product", function () {
}
});
});
+$(document).on("click", ".btn-toggle-active", function () {
+ let button = $(this);
+ let url = button.data("url");
+
+ Swal.fire({
+ title: "Status produk?",
+ text: "Anda yakin ingin mengganti status produk!",
+ showCancelButton: true,
+ confirmButtonColor: "#d33",
+ cancelButtonColor: "#dedede",
+ confirmButtonText: "Ya",
+ }).then((result) => {
+ if (result.value) {
+ $.ajax({
+ url: url,
+ method: "POST",
+ data: {
+ _token: $('meta[name="csrf-token"]').attr("content"),
+ },
+ success: function (response) {
+ if (response.success) {
+ $("#products-table")
+ .DataTable()
+ .ajax.reload(null, false);
+ alert(response.message);
+ }
+ },
+ error: function () {
+ alert("Gagal mengubah status produk.");
+ },
+ });
+ }
+ });
+});
diff --git a/resources/js/warehouse_management/stock_mutations/index.js b/resources/js/warehouse_management/stock_mutations/index.js
new file mode 100644
index 0000000..e69de29
diff --git a/resources/views/warehouse_management/products/create.blade.php b/resources/views/warehouse_management/products/create.blade.php
index 16ee38b..883f507 100644
--- a/resources/views/warehouse_management/products/create.blade.php
+++ b/resources/views/warehouse_management/products/create.blade.php
@@ -26,6 +26,11 @@
+
+ Satuan Produk
+
+
+
Deskripsi
diff --git a/resources/views/warehouse_management/products/edit.blade.php b/resources/views/warehouse_management/products/edit.blade.php
index f711f5e..c027ee3 100644
--- a/resources/views/warehouse_management/products/edit.blade.php
+++ b/resources/views/warehouse_management/products/edit.blade.php
@@ -27,6 +27,11 @@
+
+ Satuan Produk
+
+
+