diff --git a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php index 5e4aac5..3455476 100644 --- a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php +++ b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php @@ -126,7 +126,7 @@ class ProductCategoriesController extends Controller return response()->json(['success' => true, 'message' => 'Kategorii berhasil dihapus.']); } - public function getParents(Request $request) + public function product_category_parents(Request $request) { $parents = ProductCategory::whereNull('parent_id')->get(['id', 'name']); return response()->json($parents); diff --git a/app/Http/Controllers/WarehouseManagement/ProductsController.php b/app/Http/Controllers/WarehouseManagement/ProductsController.php index 2a8c137..fe27591 100644 --- a/app/Http/Controllers/WarehouseManagement/ProductsController.php +++ b/app/Http/Controllers/WarehouseManagement/ProductsController.php @@ -7,10 +7,10 @@ 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 Illuminate\Support\Facades\Log; use Yajra\DataTables\Facades\DataTables; use Illuminate\Validation\Rule; @@ -49,8 +49,10 @@ class ProductsController extends Controller $btn .= ''; + + $btn .= ''; $btn .= ''; @@ -93,10 +95,7 @@ class ProductsController extends Controller '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_category_id' => 'required|exists:product_categories,id' ]); // Create product @@ -108,34 +107,6 @@ class ProductsController extends Controller 'description' => $request->description, 'product_category_id' => $request->product_category_id, ]); - - - - // 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; - - $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); - } return redirect()->route('products.index')->with('success', 'Produk berhasil ditambahkan.'); }catch(\Exception $ex){ @@ -179,77 +150,26 @@ class ProductsController extends Controller */ public function update(Request $request, Product $product) { - $request->validate([ - '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', 'unit', 'product_category_id'])); - - // 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) { - $dealerId = $item['dealer_id']; - $newQty = $item['quantity']; - $syncData[$dealerId] = ['quantity' => $newQty]; - $newStocks[$dealerId] = $newQty; - } + try{ + $request->validate([ + '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' + ]); + + $product->update($request->only(['code', 'name', 'description', 'unit','active', 'product_category_id'])); + + return redirect()->route('products.index')->with('success', 'Produk berhasil diperbarui.'); + }catch(\Exception $ex){ + Log::error($ex->getMessage()); } - - // 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.'); } /** diff --git a/app/Http/Controllers/WarehouseManagement/StockMutationsController.php b/app/Http/Controllers/WarehouseManagement/StockMutationsController.php deleted file mode 100644 index d2c3c20..0000000 --- a/app/Http/Controllers/WarehouseManagement/StockMutationsController.php +++ /dev/null @@ -1,41 +0,0 @@ -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/Http/Controllers/WarehouseManagement/StockOpnamesController.php b/app/Http/Controllers/WarehouseManagement/StockOpnamesController.php deleted file mode 100644 index a859642..0000000 --- a/app/Http/Controllers/WarehouseManagement/StockOpnamesController.php +++ /dev/null @@ -1,40 +0,0 @@ -ajax()) { - $query = StockOpname::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 : '-'; - }) - ->editColumn('opname_date', function ($row) { - return $row->opname_date->format('d M Y'); - }) - ->make(true); - } - - return view('warehouse_management.stock_opnames.index'); - }catch(\Exception $ex){ - Log::error($ex->getMessage()); - } - } -} diff --git a/app/Models/Stock.php b/app/Models/Stock.php deleted file mode 100644 index 7ebde6b..0000000 --- a/app/Models/Stock.php +++ /dev/null @@ -1,27 +0,0 @@ -belongsTo(Product::class); - } - - public function dealer() - { - return $this->belongsTo(Dealer::class); - } -} diff --git a/app/Models/StockMutation.php b/app/Models/StockMutation.php deleted file mode 100644 index 62b24bc..0000000 --- a/app/Models/StockMutation.php +++ /dev/null @@ -1,35 +0,0 @@ -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 deleted file mode 100644 index 44da6bc..0000000 --- a/app/Models/StockOpname.php +++ /dev/null @@ -1,36 +0,0 @@ -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_05_28_113228_create_product_categories_table.php b/database/migrations/2025_05_28_113228_create_product_categories_table.php index b1af6fb..99b2497 100644 --- a/database/migrations/2025_05_28_113228_create_product_categories_table.php +++ b/database/migrations/2025_05_28_113228_create_product_categories_table.php @@ -16,6 +16,7 @@ class CreateProductCategoriesTable extends Migration Schema::create('product_categories', function (Blueprint $table) { $table->id(); $table->string('name'); + $table->foreignId('parent_id')->nullable()->constrained('product_categories')->nullOnDelete(); $table->softDeletes(); $table->timestamps(); }); diff --git a/database/migrations/2025_05_28_113324_create_products_table.php b/database/migrations/2025_05_28_113324_create_products_table.php index 5f48680..d58cfc0 100644 --- a/database/migrations/2025_05_28_113324_create_products_table.php +++ b/database/migrations/2025_05_28_113324_create_products_table.php @@ -17,6 +17,8 @@ class CreateProductsTable extends Migration $table->id(); $table->string('code')->unique(); $table->string('name'); + $table->boolean('active')->default(true); + $table->string('unit')->nullable(); $table->text('description')->nullable(); $table->foreignId('product_category_id')->constrained()->onDelete('cascade'); $table->softDeletes(); diff --git a/database/migrations/2025_05_28_175140_create_stock_table.php b/database/migrations/2025_05_28_175140_create_stock_table.php deleted file mode 100644 index fca5bd7..0000000 --- a/database/migrations/2025_05_28_175140_create_stock_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->foreignId('product_id')->constrained()->onDelete('cascade'); - $table->foreignId('dealer_id')->constrained()->onDelete('cascade'); - $table->integer('quantity')->default(0); - $table->timestamps(); - - $table->unique(['product_id','dealer_id']); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('stock'); - } -} diff --git a/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php b/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php deleted file mode 100644 index fde3f46..0000000 --- a/database/migrations/2025_06_02_095805_add_parent_id_to_product_categories_table.php +++ /dev/null @@ -1,33 +0,0 @@ -foreignId('parent_id')->nullable()->after('name')->constrained('product_categories')->nullOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('product_categories', function (Blueprint $table) { - $table->dropForeign(['parent_id']); - $table->dropColumn('parent_id'); - }); - } -} 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 deleted file mode 100644 index 0ba67d1..0000000 --- a/database/migrations/2025_06_02_162509_create_stock_mutations_table.php +++ /dev/null @@ -1,37 +0,0 @@ -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 deleted file mode 100644 index ce9d145..0000000 --- a/database/migrations/2025_06_02_162952_create_stock_opnames_table.php +++ /dev/null @@ -1,38 +0,0 @@ -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 deleted file mode 100644 index 72d8d53..0000000 --- a/database/migrations/2025_06_02_173028_add_unit_to_products_table.php +++ /dev/null @@ -1,32 +0,0 @@ -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 deleted file mode 100644 index c6d0004..0000000 --- a/database/migrations/2025_06_02_180058_add_active_to_products_table.php +++ /dev/null @@ -1,32 +0,0 @@ -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/public/js/warehouse_management/product_categories/index.js b/public/js/warehouse_management/product_categories/index.js index e01d956..e277235 100644 --- a/public/js/warehouse_management/product_categories/index.js +++ b/public/js/warehouse_management/product_categories/index.js @@ -15,7 +15,7 @@ \***********************************************************************/ /***/ (() => { -eval("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; }\n\nfunction _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; }\n\nfunction _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; }\n\n$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#product-categories-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#product-categories-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"name\",\n name: \"name\"\n }, {\n data: \"parent\",\n name: \"parent\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n loadParentCategories();\n }); // Submit form (baik tambah maupun edit)\n\n $(\"#productCategoryForm\").submit(function (e) {\n e.preventDefault();\n var id = $(\"#category_id\").val();\n var url = id ? \"/warehouse/product_categories/\".concat(id) : \"/warehouse/product_categories\";\n var method = id ? \"PUT\" : \"POST\";\n $.ajax({\n url: url,\n method: method,\n data: _objectSpread({\n name: $(\"#name\").val(),\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n }, id && {\n _method: \"PUT\"\n }),\n success: function success() {\n $(\"#productCategoryModal\").modal(\"hide\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menyimpan data\");\n console.error(xhr.responseText);\n }\n });\n });\n});\n$(document).on(\"click\", \".btn-edit-product-category\", function () {\n var id = $(this).data(\"id\");\n var url = $(this).data(\"url\");\n $.ajax({\n url: url,\n method: \"GET\",\n success: function success(response) {\n $(\"#category_id\").val(response.id);\n $(\"#name\").val(response.name); // Get parent categories and populate select\n\n $.ajax({\n url: \"/warehouse/categories/parents\",\n // Adjust to match your route\n method: \"GET\",\n success: function success(parents) {\n var options = '';\n parents.forEach(function (parent) {\n // Avoid self-select\n if (parent.id !== response.id) {\n options += \"\");\n }\n });\n $(\"#parent_id\").html(options);\n }\n });\n $(\"#modalTitle\").text(\"Edit Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n },\n error: function error(xhr) {\n alert(\"Gagal mengambil data\");\n console.error(xhr.responseText);\n }\n });\n});\n$(document).on(\"click\", \".btn-destroy-product-category\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus nama kategori?\",\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(\"Kategori berhasil dihapus.\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus kategori.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});\n\nfunction loadParentCategories() {\n var selectedId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n $.ajax({\n url: \"/warehouse/categories/parents\",\n // create this route\n type: \"GET\",\n success: function success(data) {\n $(\"#parent_id\").empty().append('');\n data.forEach(function (category) {\n $(\"#parent_id\").append(\"\"));\n });\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50IiwicmVhZHkiLCJjbGljayIsInJlc2V0IiwidmFsIiwidGV4dCIsIm1vZGFsIiwibG9hZFBhcmVudENhdGVnb3JpZXMiLCJzdWJtaXQiLCJlIiwicHJldmVudERlZmF1bHQiLCJpZCIsIm1ldGhvZCIsIl90b2tlbiIsIl9tZXRob2QiLCJzdWNjZXNzIiwicmVsb2FkIiwiZXJyb3IiLCJ4aHIiLCJhbGVydCIsImNvbnNvbGUiLCJyZXNwb25zZVRleHQiLCJvbiIsInJlc3BvbnNlIiwicGFyZW50cyIsIm9wdGlvbnMiLCJmb3JFYWNoIiwicGFyZW50IiwicGFyZW50X2lkIiwiaHRtbCIsIlN3YWwiLCJmaXJlIiwidGl0bGUiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsInRoZW4iLCJyZXN1bHQiLCJ2YWx1ZSIsInNlbGVjdGVkSWQiLCJ0eXBlIiwiZW1wdHkiLCJhcHBlbmQiLCJjYXRlZ29yeSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzP2ZjODQiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpO1xubGV0IHVybCA9IHRhYmxlQ29udGFpbmVyLmRhdGEoXCJ1cmxcIik7XG5sZXQgdGFibGUgPSAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoe1xuICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICBhamF4OiB1cmwsXG4gICAgY29sdW1uczogW1xuICAgICAgICB7IGRhdGE6IFwibmFtZVwiLCBuYW1lOiBcIm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwicGFyZW50XCIsIG5hbWU6IFwicGFyZW50XCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImFjdGlvblwiLCBuYW1lOiBcImFjdGlvblwiLCBvcmRlcmFibGU6IGZhbHNlLCBzZWFyY2hhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICQoXCIjYWRkUHJvZHVjdENhdGVnb3J5XCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpWzBdLnJlc2V0KCk7XG4gICAgICAgICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKFwiXCIpO1xuICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIlRhbWJhaCBLYXRlZ29yaVwiKTtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgICAgIGxvYWRQYXJlbnRDYXRlZ29yaWVzKCk7XG4gICAgfSk7XG5cbiAgICAvLyBTdWJtaXQgZm9ybSAoYmFpayB0YW1iYWggbWF1cHVuIGVkaXQpXG4gICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGlkID0gJChcIiNjYXRlZ29yeV9pZFwiKS52YWwoKTtcbiAgICAgICAgbGV0IHVybCA9IGlkXG4gICAgICAgICAgICA/IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllcy8ke2lkfWBcbiAgICAgICAgICAgIDogYC93YXJlaG91c2UvcHJvZHVjdF9jYXRlZ29yaWVzYDtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlkID8gXCJQVVRcIiA6IFwiUE9TVFwiO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICQoXCIjbmFtZVwiKS52YWwoKSxcbiAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICAuLi4oaWQgJiYgeyBfbWV0aG9kOiBcIlBVVFwiIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW55aW1wYW4gZGF0YVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWVkaXQtcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaWQgPSAkKHRoaXMpLmRhdGEoXCJpZFwiKTtcbiAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJ1cmxcIik7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICAkKFwiI25hbWVcIikudmFsKHJlc3BvbnNlLm5hbWUpO1xuICAgICAgICAgICAgLy8gR2V0IHBhcmVudCBjYXRlZ29yaWVzIGFuZCBwb3B1bGF0ZSBzZWxlY3RcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiBcIi93YXJlaG91c2UvY2F0ZWdvcmllcy9wYXJlbnRzXCIsIC8vIEFkanVzdCB0byBtYXRjaCB5b3VyIHJvdXRlXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChwYXJlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb25zID1cbiAgICAgICAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCI+LS0gVGlkYWsgYWRhIChQYXJlbnQpPC9vcHRpb24+JztcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIHNlbGYtc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50LmlkICE9PSByZXNwb25zZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgKz0gYDxvcHRpb24gdmFsdWU9XCIke3BhcmVudC5pZH1cIiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wYXJlbnRfaWQgPT09IHBhcmVudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0+JHtwYXJlbnQubmFtZX08L29wdGlvbj5gO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwYXJlbnRfaWRcIikuaHRtbChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIkVkaXQgS2F0ZWdvcmlcIik7XG4gICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVuZ2FtYmlsIGRhdGFcIik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5cbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWRlc3Ryb3ktcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgU3dhbC5maXJlKHtcbiAgICAgICAgdGl0bGU6IFwiSGFwdXMgbmFtYSBrYXRlZ29yaT9cIixcbiAgICAgICAgdGV4dDogXCJBbmRhIHRpZGFrIGFrYW4gYmlzYSBtZW5nZW1iYWxpa2FubnlhIVwiLFxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6IFwiI2QzM1wiLFxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogXCIjZGVkZWRlXCIsXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkhhcHVzXCIsXG4gICAgfSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcImFjdGlvblwiKTtcbiAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIF9tZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkthdGVnb3JpIGJlcmhhc2lsIGRpaGFwdXMuXCIpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5naGFwdXMga2F0ZWdvcmkuXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGxvYWRQYXJlbnRDYXRlZ29yaWVzKHNlbGVjdGVkSWQgPSBudWxsKSB7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiBcIi93YXJlaG91c2UvY2F0ZWdvcmllcy9wYXJlbnRzXCIsIC8vIGNyZWF0ZSB0aGlzIHJvdXRlXG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAkKFwiI3BhcmVudF9pZFwiKVxuICAgICAgICAgICAgICAgIC5lbXB0eSgpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBUaWRhayBhZGEgKEthdGVnb3JpIFV0YW1hKSAtLTwvb3B0aW9uPidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjYXRlZ29yeSkge1xuICAgICAgICAgICAgICAgICQoXCIjcGFyZW50X2lkXCIpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgYDxvcHRpb24gdmFsdWU9XCIke2NhdGVnb3J5LmlkfVwiICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZElkID09IGNhdGVnb3J5LmlkID8gXCJzZWxlY3RlZFwiIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICB9PiR7Y2F0ZWdvcnkubmFtZX08L29wdGlvbj5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJBQUQsQ0FBRCxDQUE2QkcsSUFBN0IsQ0FBa0MsU0FBbEM7RUFEWDtBQURELENBQVo7QUFLQSxJQUFJQyxjQUFjLEdBQUdKLENBQUMsQ0FBQywyQkFBRCxDQUF0QjtBQUNBLElBQUlLLEdBQUcsR0FBR0QsY0FBYyxDQUFDRSxJQUFmLENBQW9CLEtBQXBCLENBQVY7QUFDQSxJQUFJQyxLQUFL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SUFBTTtFQUM3Q3hELENBQUMsQ0FBQ1csSUFBRixDQUFPO0lBQ0hOLEdBQUcsRUFBRSwrQkFERjtJQUNtQztJQUN0Q29ELElBQUksRUFBRSxLQUZIO0lBR0gxQixPQUFPLEVBQUUsaUJBQVV6QixJQUFWLEVBQWdCO01BQ3JCTixDQUFDLENBQUMsWUFBRCxDQUFELENBQ0swRCxLQURMLEdBRUtDLE1BRkwsQ0FHUSw0REFIUjtNQUtBckQsSUFBSSxDQUFDb0MsT0FBTCxDQUFhLFVBQVVrQixRQUFWLEVBQW9CO1FBQzdCNUQsQ0FBQyxDQUFDLFlBQUQsQ0FBRCxDQUFnQjJELE1BQWhCLDJCQUNzQkMsUUFBUSxDQUFDakMsRUFEL0IsZ0JBRVE2QixVQUFVLElBQUlJLFFBQVEsQ0FBQ2pDLEVBQXZCLEdBQTRCLFVBQTVCLEdBQXlDLEVBRmpELGNBR1FpQyxRQUFRLENBQUMvQyxJQUhqQjtNQUtILENBTkQ7SUFPSDtFQWhCRSxDQUFQO0FBa0JIIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RfY2F0ZWdvcmllcy9pbmRleC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/index.js\n"); +eval("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; }\n\nfunction _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; }\n\nfunction _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; }\n\n$.ajaxSetup({\n headers: {\n \"X-CSRF-TOKEN\": $('meta[name=\"csrf-token\"]').attr(\"content\")\n }\n});\nvar tableContainer = $(\"#product-categories-table\");\nvar url = tableContainer.data(\"url\");\nvar table = $(\"#product-categories-table\").DataTable({\n processing: true,\n serverSide: true,\n ajax: url,\n columns: [{\n data: \"name\",\n name: \"name\"\n }, {\n data: \"parent\",\n name: \"parent\"\n }, {\n data: \"action\",\n name: \"action\",\n orderable: false,\n searchable: false\n }]\n});\n$(document).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n loadParentCategories();\n }); // Submit form (baik tambah maupun edit)\n\n $(\"#productCategoryForm\").submit(function (e) {\n e.preventDefault();\n var id = $(\"#category_id\").val();\n var url = id ? \"/warehouse/product_categories/\".concat(id) : \"/warehouse/product_categories\";\n var method = id ? \"PUT\" : \"POST\";\n $.ajax({\n url: url,\n method: method,\n data: _objectSpread({\n name: $(\"#name\").val(),\n _token: $('meta[name=\"csrf-token\"]').attr(\"content\")\n }, id && {\n _method: \"PUT\"\n }),\n success: function success() {\n $(\"#productCategoryModal\").modal(\"hide\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menyimpan data\");\n console.error(xhr.responseText);\n }\n });\n });\n});\n$(document).on(\"click\", \".btn-edit-product-category\", function () {\n var id = $(this).data(\"id\");\n var url = $(this).data(\"url\");\n $.ajax({\n url: url,\n method: \"GET\",\n success: function success(response) {\n $(\"#category_id\").val(response.id);\n $(\"#name\").val(response.name); // Get parent categories and populate select\n\n $.ajax({\n url: \"/warehouse/categories/parents\",\n // Adjust to match your route\n method: \"GET\",\n success: function success(parents) {\n var options = '';\n parents.forEach(function (parent) {\n // Avoid self-select\n if (parent.id !== response.id) {\n options += \"\");\n }\n });\n $(\"#parent_id\").html(options);\n }\n });\n $(\"#modalTitle\").text(\"Edit Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\n },\n error: function error(xhr) {\n alert(\"Gagal mengambil data\");\n console.error(xhr.responseText);\n }\n });\n});\n$(document).on(\"click\", \".btn-destroy-product-category\", function () {\n var _this = this;\n\n Swal.fire({\n title: \"Hapus nama kategori?\",\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(\"Kategori berhasil dihapus.\");\n $(\"#product-categories-table\").DataTable().ajax.reload();\n },\n error: function error(xhr) {\n alert(\"Gagal menghapus kategori.\");\n console.error(xhr.responseText);\n }\n });\n }\n });\n});\n\nfunction loadParentCategories() {\n var selectedId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var selectElement = $(\"#parent_id\");\n var urlParents = selectElement.data(\"url\");\n $.ajax({\n url: urlParents,\n type: \"GET\",\n success: function success(data) {\n $(\"#parent_id\").empty().append('');\n data.forEach(function (category) {\n $(\"#parent_id\").append(\"\"));\n });\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50IiwicmVhZHkiLCJjbGljayIsInJlc2V0IiwidmFsIiwidGV4dCIsIm1vZGFsIiwibG9hZFBhcmVudENhdGVnb3JpZXMiLCJzdWJtaXQiLCJlIiwicHJldmVudERlZmF1bHQiLCJpZCIsIm1ldGhvZCIsIl90b2tlbiIsIl9tZXRob2QiLCJzdWNjZXNzIiwicmVsb2FkIiwiZXJyb3IiLCJ4aHIiLCJhbGVydCIsImNvbnNvbGUiLCJyZXNwb25zZVRleHQiLCJvbiIsInJlc3BvbnNlIiwicGFyZW50cyIsIm9wdGlvbnMiLCJmb3JFYWNoIiwicGFyZW50IiwicGFyZW50X2lkIiwiaHRtbCIsIlN3YWwiLCJmaXJlIiwidGl0bGUiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsInRoZW4iLCJyZXN1bHQiLCJ2YWx1ZSIsInNlbGVjdGVkSWQiLCJzZWxlY3RFbGVtZW50IiwidXJsUGFyZW50cyIsInR5cGUiLCJlbXB0eSIsImFwcGVuZCIsImNhdGVnb3J5Il0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0X2NhdGVnb3JpZXMvaW5kZXguanM/ZmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIkLmFqYXhTZXR1cCh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgfSxcbn0pO1xubGV0IHRhYmxlQ29udGFpbmVyID0gJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSh7XG4gICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgIGFqYXg6IHVybCxcbiAgICBjb2x1bW5zOiBbXG4gICAgICAgIHsgZGF0YTogXCJuYW1lXCIsIG5hbWU6IFwibmFtZVwiIH0sXG4gICAgICAgIHsgZGF0YTogXCJwYXJlbnRcIiwgbmFtZTogXCJwYXJlbnRcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiYWN0aW9uXCIsIG5hbWU6IFwiYWN0aW9uXCIsIG9yZGVyYWJsZTogZmFsc2UsIHNlYXJjaGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbn0pO1xuXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gICAgJChcIiNhZGRQcm9kdWN0Q2F0ZWdvcnlcIikuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeUZvcm1cIilbMF0ucmVzZXQoKTtcbiAgICAgICAgJChcIiNjYXRlZ29yeV9pZFwiKS52YWwoXCJcIik7XG4gICAgICAgICQoXCIjbW9kYWxUaXRsZVwiKS50ZXh0KFwiVGFtYmFoIEthdGVnb3JpXCIpO1xuICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwic2hvd1wiKTtcbiAgICAgICAgbG9hZFBhcmVudENhdGVnb3JpZXMoKTtcbiAgICB9KTtcblxuICAgIC8vIFN1Ym1pdCBmb3JtIChiYWlrIHRhbWJhaCBtYXVwdW4gZWRpdClcbiAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeUZvcm1cIikuc3VibWl0KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgaWQgPSAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbCgpO1xuICAgICAgICBsZXQgdXJsID0gaWRcbiAgICAgICAgICAgID8gYC93YXJlaG91c2UvcHJvZHVjdF9jYXRlZ29yaWVzLyR7aWR9YFxuICAgICAgICAgICAgOiBgL3dhcmVob3VzZS9wcm9kdWN0X2NhdGVnb3JpZXNgO1xuICAgICAgICBsZXQgbWV0aG9kID0gaWQgPyBcIlBVVFwiIDogXCJQT1NUXCI7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJChcIiNuYW1lXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgIF90b2tlbjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgICAgICAgICAgICAgIC4uLihpZCAmJiB7IF9tZXRob2Q6IFwiUFVUXCIgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJoaWRlXCIpO1xuICAgICAgICAgICAgICAgICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICh4aHIpIHtcbiAgICAgICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbnlpbXBhbiBkYXRhXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tZWRpdC1wcm9kdWN0LWNhdGVnb3J5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBpZCA9ICQodGhpcykuZGF0YShcImlkXCIpO1xuICAgIGNvbnN0IHVybCA9ICQodGhpcykuZGF0YShcInVybFwiKTtcbiAgICAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKHJlc3BvbnNlLmlkKTtcbiAgICAgICAgICAgICQoXCIjbmFtZVwiKS52YWwocmVzcG9uc2UubmFtZSk7XG4gICAgICAgICAgICAvLyBHZXQgcGFyZW50IGNhdGVnb3JpZXMgYW5kIHBvcHVsYXRlIHNlbGVjdFxuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IFwiL3dhcmVob3VzZS9jYXRlZ29yaWVzL3BhcmVudHNcIiwgLy8gQWRqdXN0IHRvIG1hdGNoIHlvdXIgcm91dGVcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHBhcmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbnMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJzxvcHRpb24gdmFsdWU9XCJcIj4tLSBUaWRhayBhZGEgKFBhcmVudCk8L29wdGlvbj4nO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgc2VsZi1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuaWQgIT09IHJlc3BvbnNlLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyArPSBgPG9wdGlvbiB2YWx1ZT1cIiR7cGFyZW50LmlkfVwiICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnBhcmVudF9pZCA9PT0gcGFyZW50LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfT4ke3BhcmVudC5uYW1lfTwvb3B0aW9uPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3BhcmVudF9pZFwiKS5odG1sKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICQoXCIjbW9kYWxUaXRsZVwiKS50ZXh0KFwiRWRpdCBLYXRlZ29yaVwiKTtcbiAgICAgICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5nYW1iaWwgZGF0YVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcblxuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tZGVzdHJveS1wcm9kdWN0LWNhdGVnb3J5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogXCJIYXB1cyBuYW1hIGthdGVnb3JpP1wiLFxuICAgICAgICB0ZXh0OiBcIkFuZGEgdGlkYWsgYWthbiBiaXNhIG1lbmdlbWJhbGlrYW5ueWEhXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjZDMzXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkZWRlZGVcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiSGFwdXNcIixcbiAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gJCh0aGlzKS5kYXRhKFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgX21ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICAgICAgX3Rva2VuOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiS2F0ZWdvcmkgYmVyaGFzaWwgZGloYXB1cy5cIik7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmdoYXB1cyBrYXRlZ29yaS5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuZnVuY3Rpb24gbG9hZFBhcmVudENhdGVnb3JpZXMoc2VsZWN0ZWRJZCA9IG51bGwpIHtcbiAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gJChcIiNwYXJlbnRfaWRcIik7XG4gICAgbGV0IHVybFBhcmVudHMgPSBzZWxlY3RFbGVtZW50LmRhdGEoXCJ1cmxcIik7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmxQYXJlbnRzLFxuICAgICAgICB0eXBlOiBcIkdFVFwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgJChcIiNwYXJlbnRfaWRcIilcbiAgICAgICAgICAgICAgICAuZW1wdHkoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPVwiXCI+LS0gVGlkYWsgYWRhIChLYXRlZ29yaSBVdGFtYSkgLS08L29wdGlvbj4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgICAgICAkKFwiI3BhcmVudF9pZFwiKS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgIGA8b3B0aW9uIHZhbHVlPVwiJHtjYXRlZ29yeS5pZH1cIiAke1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJZCA9PSBjYXRlZ29yeS5pZCA/IFwic2VsZWN0ZWRcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfT4ke2NhdGVnb3J5Lm5hbWV9PC9vcHRpb24+YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUFBLENBQUMsQ0FBQ0MsU0FBRixDQUFZO0VBQ1JDLE9BQU8sRUFBRTtJQUNMLGdCQUFnQkYsQ0FBQyxDQUFDLHlCQUFELENBQUQsQ0FBNkJHLElBQTdCLENBQWtDLFNBQWxDO0VBRFg7QUFERCxDQUFaO0FBS0EsSUFBSUMsY0FBYyxHQUFHSixDQUFDLENBQUMs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QVA7SUFnQkg7RUFDSixDQTNCRDtBQTRCSCxDQTdCRDs7QUErQkEsU0FBU2Qsb0JBQVQsR0FBaUQ7RUFBQSxJQUFuQmlDLFVBQW1CLHVFQUFOLElBQU07RUFDN0MsSUFBTUMsYUFBYSxHQUFHekQsQ0FBQyxDQUFDLFlBQUQsQ0FBdkI7RUFDQSxJQUFJMEQsVUFBVSxHQUFHRCxhQUFhLENBQUNuRCxJQUFkLENBQW1CLEtBQW5CLENBQWpCO0VBQ0FOLENBQUMsQ0FBQ1csSUFBRixDQUFPO0lBQ0hOLEdBQUcsRUFBRXFELFVBREY7SUFFSEMsSUFBSSxFQUFFLEtBRkg7SUFHSDVCLE9BQU8sRUFBRSxpQkFBVXpCLElBQVYsRUFBZ0I7TUFDckJOLENBQUMsQ0FBQyxZQUFELENBQUQsQ0FDSzRELEtBREwsR0FFS0MsTUFGTCxDQUdRLDREQUhSO01BS0F2RCxJQUFJLENBQUNvQyxPQUFMLENBQWEsVUFBVW9CLFFBQVYsRUFBb0I7UUFDN0I5RCxDQUFDLENBQUMsWUFBRCxDQUFELENBQWdCNkQsTUFBaEIsMkJBQ3NCQyxRQUFRLENBQUNuQyxFQUQvQixnQkFFUTZCLFVBQVUsSUFBSU0sUUFBUSxDQUFDbkMsRUFBdkIsR0FBNEIsVUFBNUIsR0FBeUMsRUFGakQsY0FHUW1DLFFBQVEsQ0FBQ2pELElBSGpCO01BS0gsQ0FORDtJQU9IO0VBaEJFLENBQVA7QUFrQkgiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/index.js\n"); /***/ }) diff --git a/public/js/warehouse_management/products/create.js b/public/js/warehouse_management/products/create.js index 432e719..54b4e7d 100644 --- a/public/js/warehouse_management/products/create.js +++ b/public/js/warehouse_management/products/create.js @@ -15,7 +15,7 @@ \**************************************************************/ /***/ (() => { -eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var addBtn = document.getElementById(\"addDealerRow\");\n var dealerRows = document.getElementById(\"dynamicDealerRows\"); // Get dealer data from Blade\n\n var dealerDataDiv = document.getElementById(\"dealerData\");\n var dealers = JSON.parse(dealerDataDiv.getAttribute(\"data-dealers\")); // 👈 this reads JSON from Blade\n\n var rowCount = 0;\n\n function createDealerRow(index) {\n var dealerOptions = dealers.map(function (d) {\n return \"\");\n }).join(\"\");\n return \"\\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \\n
\\n
\\n \");\n }\n\n addBtn.addEventListener(\"click\", function () {\n dealerRows.insertAdjacentHTML(\"beforeend\", createDealerRow(rowCount));\n rowCount++;\n });\n dealerRows.addEventListener(\"click\", function (e) {\n if (e.target.classList.contains(\"removeDealerRow\")) {\n e.target.closest(\".dealer-row\").remove();\n }\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGRCdG4iLCJnZXRFbGVtZW50QnlJZCIsImRlYWxlclJvd3MiLCJkZWFsZXJEYXRhRGl2IiwiZGVhbGVycyIsIkpTT04iLCJwYXJzZSIsImdldEF0dHJpYnV0ZSIsInJvd0NvdW50IiwiY3JlYXRlRGVhbGVyUm93IiwiaW5kZXgiLCJkZWFsZXJPcHRpb25zIiwibWFwIiwiZCIsImlkIiwibmFtZSIsImpvaW4iLCJpbnNlcnRBZGphY2VudEhUTUwiLCJlIiwidGFyZ2V0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjbG9zZXN0IiwicmVtb3ZlIl0sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0cy9jcmVhdGUuanM/MWQyNyJdLCJzb3VyY2VzQ29udGVudCI6WyJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYWRkQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG4gICAgY29uc3QgZGVhbGVyUm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZHluYW1pY0RlYWxlclJvd3NcIik7XG5cbiAgICAvLyBHZXQgZGVhbGVyIGRhdGEgZnJvbSBCbGFkZVxuICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgY29uc3QgZGVhbGVycyA9IEpTT04ucGFyc2UoZGVhbGVyRGF0YURpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWRlYWxlcnNcIikpOyAvLyDwn5GIIHRoaXMgcmVhZHMgSlNPTiBmcm9tIEJsYWRlXG5cbiAgICBsZXQgcm93Q291bnQgPSAwO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVhbGVyUm93KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGRlYWxlck9wdGlvbnMgPSBkZWFsZXJzXG4gICAgICAgICAgICAubWFwKChkKSA9PiBgPG9wdGlvbiB2YWx1ZT1cIiR7ZC5pZH1cIj4ke2QubmFtZX08L29wdGlvbj5gKVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IGFsaWduLWl0ZW1zLWNlbnRlciBkZWFsZXItcm93XCIgZGF0YS1pbmRleD1cIiR7aW5kZXh9XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiZGVhbGVyX3N0b2NrWyR7aW5kZXh9XVtkZWFsZXJfaWRdXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+LS0gUGlsaWggRGVhbGVyIC0tPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgJHtkZWFsZXJPcHRpb25zfVxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske2luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZURlYWxlclJvd1wiPkhhcHVzPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICBhZGRCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVhbGVyUm93cy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgY3JlYXRlRGVhbGVyUm93KHJvd0NvdW50KSk7XG4gICAgICAgIHJvd0NvdW50Kys7XG4gICAgfSk7XG5cbiAgICBkZWFsZXJSb3dzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoZS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlRGVhbGVyUm93XCIpKSB7XG4gICAgICAgICAgICBlLnRhcmdldC5jbG9zZXN0KFwiLmRlYWxlci1yb3dcIikucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiQUFBQUEsUUFBUSxDQUFDQyxnQkFBVCxDQUEwQixrQkFBMUIsRUFBOEMsWUFBWTtFQUN0RCxJQUFNQyxNQUFNLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUFmO0VBQ0EsSUFBTUMsVUFBVSxHQUFHSixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsbUJBQXhCLENBQW5CLENBRnNELENBSXREOztFQUNBLElBQU1FLGFBQWEsR0FBR0wsUUFBUSxDQUFDRyxjQUFULENBQXdCLFlBQXhCLENBQXRCO0VBQ0EsSUFBTUcsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEIsQ0FOc0QsQ0FNa0I7O0VBRXhFLElBQUlDLFFBQVEsR0FBRyxDQUFmOztFQUVBLFNBQVNDLGVBQVQsQ0FBeUJDLEtBQXpCLEVBQWdDO0lBQzVCLElBQU1DLGFBQWEsR0FBR1AsT0FBTyxDQUN4QlEsR0FEaUIsQ0FDYixVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBRGEsRUFFakJDLElBRmlCLENBRVosRUFGWSxDQUF0QjtJQUdBLHNHQUMwRU4sS0FEMUUsd0dBR3VDQSxLQUh2QywwSkFLZ0JDLGFBTGhCLHVLQVNvREQsS0FUcEQ7RUFnQkg7O0VBRURWLE1BQU0sQ0FBQ0QsZ0JBQVAsQ0FBd0IsT0FBeEIsRUFBaUMsWUFBWTtJQUN6Q0csVUFBVSxDQUFDZSxrQkFBWCxDQUE4QixXQUE5QixFQUEyQ1IsZUFBZSxDQUFDRCxRQUFELENBQTFEO0lBQ0FBLFFBQVE7RUFDWCxDQUhEO0VBS0FOLFVBQVUsQ0FBQ0gsZ0JBQVgsQ0FBNEIsT0FBNUIsRUFBcUMsVUFBVW1CLENBQVYsRUFBYTtJQUM5QyxJQUFJQSxDQUFDLENBQUNDLE1BQUYsQ0FBU0MsU0FBVCxDQUFtQkMsUUFBbkIsQ0FBNEIsaUJBQTVCLENBQUosRUFBb0Q7TUFDaERILENBQUMsQ0FBQ0MsTUFBRixDQUFTRyxPQUFULENBQWlCLGFBQWpCLEVBQWdDQyxNQUFoQztJQUNIO0VBQ0osQ0FKRDtBQUtILENBMUNEIiwiZmlsZSI6Ii4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2NyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/create.js\n"); +eval("document.addEventListener(\"DOMContentLoaded\", function () {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2NyZWF0ZS5qcz8xZDI3Il0sInNvdXJjZXNDb250ZW50IjpbImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHt9KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVksQ0FBRSxDQUE1RCIsImZpbGUiOiIuL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0cy9jcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/create.js\n"); /***/ }) diff --git a/public/js/warehouse_management/products/edit.js b/public/js/warehouse_management/products/edit.js index aff306f..ba321a1 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
\\n
\\n \\n
\\n
\\n \\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 \");\n }).join(\"\");\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkZWFsZXJSb3dDb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImFkZERlYWxlckJ1dHRvbiIsInJvd0luZGV4IiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsIm5ld1JvdyIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJpbm5lckhUTUwiLCJnZW5lcmF0ZURlYWxlck9wdGlvbnMiLCJhcHBlbmRDaGlsZCIsImV2ZW50IiwidGFyZ2V0IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJjbG9zZXN0IiwicmVtb3ZlIiwiZGVhbGVyRGF0YURpdiIsImRlYWxlcnMiLCJKU09OIiwicGFyc2UiLCJnZXRBdHRyaWJ1dGUiLCJtYXAiLCJkIiwiaWQiLCJuYW1lIiwiam9pbiJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcz81YTM4Il0sInNvdXJjZXNDb250ZW50IjpbImRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZGVhbGVyUm93Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkeW5hbWljRGVhbGVyUm93c1wiKTtcbiAgICBsZXQgYWRkRGVhbGVyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZGREZWFsZXJSb3dcIik7XG5cbiAgICAvLyBJbml0aWFsIGluZGV4IGZyb20gZXhpc3RpbmcgZGVhbGVyIHJvd3NcbiAgICBsZXQgcm93SW5kZXggPVxuICAgICAgICBkZWFsZXJSb3dDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5kZWFsZXItc3RvY2stcm93XCIpLmxlbmd0aDtcblxuICAgIGFkZERlYWxlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBuZXdSb3cuY2xhc3NOYW1lID0gXCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZGVhbGVyLXN0b2NrLXJvd1wiO1xuICAgICAgICBuZXdSb3cuaW5uZXJIVE1MID0gYFxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJkZWFsZXJfc3RvY2tbJHtyb3dJbmRleH1dW2RlYWxlcl9pZF1cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIFBpbGloIERlYWxlciAtLTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgJHtnZW5lcmF0ZURlYWxlck9wdGlvbnMoKX1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cImRlYWxlcl9zdG9ja1ske3Jvd0luZGV4fV1bcXVhbnRpdHldXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB2YWx1ZT1cIjFcIiBtaW49XCIxXCIgcmVxdWlyZWQgcGxhY2Vob2xkZXI9XCJKdW1sYWggU3Rva1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtIHJlbW92ZS1kZWFsZXItcm93XCI+IEhhcHVzIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICAgICAgZGVhbGVyUm93Q29udGFpbmVyLmFwcGVuZENoaWxkKG5ld1Jvdyk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVtb3ZhbCBvZiBkZWFsZXIgcm93XG4gICAgZGVhbGVyUm93Q29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXZlbnQudGFyZ2V0ICYmXG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicmVtb3ZlLWRlYWxlci1yb3dcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC50YXJnZXQuY2xvc2VzdChcIi5kZWFsZXItc3RvY2stcm93XCIpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBkZWFsZXIgPG9wdGlvbj4gZWxlbWVudHMgZHluYW1pY2FsbHlcbiAgICBmdW5jdGlvbiBnZW5lcmF0ZURlYWxlck9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlYWxlckRhdGFEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlYWxlckRhdGFcIik7XG4gICAgICAgIGNvbnN0IGRlYWxlcnMgPSBKU09OLnBhcnNlKGRlYWxlckRhdGFEaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1kZWFsZXJzXCIpKTtcbiAgICAgICAgcmV0dXJuIGRlYWxlcnNcbiAgICAgICAgICAgIC5tYXAoKGQpID0+IGA8b3B0aW9uIHZhbHVlPVwiJHtkLmlkfVwiPiR7ZC5uYW1lfTwvb3B0aW9uPmApXG4gICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICB9XG59KTtcbiJdLCJtYXBwaW5ncyI6IkFBQUFBLFFBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsa0JBQTFCLEVBQThDLFlBQVk7RUFDdEQsSUFBSUMsa0JBQWtCLEdBQUdGLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixtQkFBeEIsQ0FBekI7RUFDQSxJQUFJQyxlQUFlLEdBQUdKLFFBQVEsQ0FBQ0csY0FBVCxDQUF3QixjQUF4QixDQUF0QixDQUZzRCxDQUl0RDs7RUFDQSxJQUFJRSxRQUFRLEdBQ1JILGtCQUFrQixDQUFDSSxnQkFBbkIsQ0FBb0MsbUJBQXBDLEVBQXlEQyxNQUQ3RDtFQUdBSCxlQUFlLENBQUNILGdCQUFoQixDQUFpQyxPQUFqQyxFQUEwQyxZQUFZO0lBQ2xELElBQU1PLE1BQU0sR0FBR1IsUUFBUSxDQUFDUyxhQUFULENBQXVCLEtBQXZCLENBQWY7SUFDQUQsTUFBTSxDQUFDRSxTQUFQLEdBQW1CLG9EQUFuQjtJQUNBRixNQUFNLENBQUNHLFNBQVAsNkZBRW1DTixRQUZuQyx5SUFJWU8scUJBQXFCLEVBSmpDLHVKQVFnRFAsUUFSaEQ7SUFjQUgsa0JBQWtCLENBQUNXLFdBQW5CLENBQStCTCxNQUEvQjtJQUNBSCxRQUFRO0VBQ1gsQ0FuQkQsRUFSc0QsQ0E2QnREOztFQUNBSCxrQkFBa0IsQ0FBQ0QsZ0JBQW5CLENBQW9DLE9BQXBDLEVBQTZDLFVBQVVhLEtBQVYsRUFBaUI7SUFDMUQsSUFDSUEsS0FBSyxDQUFDQyxNQUFOLElBQ0FELEtBQUssQ0FBQ0MsTUFBTixDQUFhQyxTQUFiLENBQXVCQyxRQUF2QixDQUFnQyxtQkFBaEMsQ0FGSixFQUdFO01BQ0VILEtBQUssQ0FBQ0MsTUFBTixDQUFhRyxPQUFiLENBQXFCLG1CQUFyQixFQUEwQ0MsTUFBMUM7SUFDSDtFQUNKLENBUEQsRUE5QnNELENBdUN0RDs7RUFDQSxTQUFTUCxxQkFBVCxHQUFpQztJQUM3QixJQUFNUSxhQUFhLEdBQUdwQixRQUFRLENBQUNHLGNBQVQsQ0FBd0IsWUFBeEIsQ0FBdEI7SUFDQSxJQUFNa0IsT0FBTyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsYUFBYSxDQUFDSSxZQUFkLENBQTJCLGNBQTNCLENBQVgsQ0FBaEI7SUFDQSxPQUFPSCxPQUFPLENBQ1RJLEdBREUsQ0FDRSxVQUFDQyxDQUFEO01BQUEsaUNBQXlCQSxDQUFDLENBQUNDLEVBQTNCLGdCQUFrQ0QsQ0FBQyxDQUFDRSxJQUFwQztJQUFBLENBREYsRUFFRkMsSUFGRSxDQUVHLEVBRkgsQ0FBUDtFQUdIO0FBQ0osQ0EvQ0QiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/edit.js\n"); +eval("document.addEventListener(\"DOMContentLoaded\", function () {});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2VkaXQuanM/NWEzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbiAoKSB7fSk7XG4iXSwibWFwcGluZ3MiOiJBQUFBQSxRQUFRLENBQUNDLGdCQUFULENBQTBCLGtCQUExQixFQUE4QyxZQUFZLENBQUUsQ0FBNUQiLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvZWRpdC5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/edit.js\n"); /***/ }) diff --git a/public/js/warehouse_management/stock_opnames/create.js b/public/js/warehouse_management/stock_opnames/create.js new file mode 100644 index 0000000..2350914 --- /dev/null +++ b/public/js/warehouse_management/stock_opnames/create.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_opnames/create.js": +/*!*******************************************************************!*\ + !*** ./resources/js/warehouse_management/stock_opnames/create.js ***! + \*******************************************************************/ +/***/ (() => { + +eval("//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9zdG9ja19vcG5hbWVzL2NyZWF0ZS5qcz9kYzA1Il0sInNvdXJjZXNDb250ZW50IjpbIiJdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiIuL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9zdG9ja19vcG5hbWVzL2NyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/stock_opnames/create.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_opnames/create.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/mix-manifest.json b/public/mix-manifest.json index c08bb48..1891040 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -6,5 +6,6 @@ "/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", "/js/warehouse_management/stock_opnames/index.js": "/js/warehouse_management/stock_opnames/index.js", + "/js/warehouse_management/stock_opnames/create.js": "/js/warehouse_management/stock_opnames/create.js", "/css/app.css": "/css/app.css" } diff --git a/resources/js/warehouse_management/product_categories/index.js b/resources/js/warehouse_management/product_categories/index.js index 8575a78..e5931c0 100644 --- a/resources/js/warehouse_management/product_categories/index.js +++ b/resources/js/warehouse_management/product_categories/index.js @@ -125,8 +125,10 @@ $(document).on("click", ".btn-destroy-product-category", function () { }); function loadParentCategories(selectedId = null) { + const selectElement = $("#parent_id"); + let urlParents = selectElement.data("url"); $.ajax({ - url: "/warehouse/categories/parents", // create this route + url: urlParents, type: "GET", success: function (data) { $("#parent_id") diff --git a/resources/js/warehouse_management/products/create.js b/resources/js/warehouse_management/products/create.js index 312830f..b6ad13e 100644 --- a/resources/js/warehouse_management/products/create.js +++ b/resources/js/warehouse_management/products/create.js @@ -1,43 +1 @@ -document.addEventListener("DOMContentLoaded", function () { - const addBtn = document.getElementById("addDealerRow"); - const dealerRows = document.getElementById("dynamicDealerRows"); - - // Get dealer data from Blade - const dealerDataDiv = document.getElementById("dealerData"); - const dealers = JSON.parse(dealerDataDiv.getAttribute("data-dealers")); // 👈 this reads JSON from Blade - - let rowCount = 0; - - function createDealerRow(index) { - const dealerOptions = dealers - .map((d) => ``) - .join(""); - return ` -
-
- -
-
- -
-
- -
-
- `; - } - - addBtn.addEventListener("click", function () { - dealerRows.insertAdjacentHTML("beforeend", createDealerRow(rowCount)); - rowCount++; - }); - - dealerRows.addEventListener("click", function (e) { - if (e.target.classList.contains("removeDealerRow")) { - e.target.closest(".dealer-row").remove(); - } - }); -}); +document.addEventListener("DOMContentLoaded", function () {}); diff --git a/resources/js/warehouse_management/products/edit.js b/resources/js/warehouse_management/products/edit.js index dcd6aca..b6ad13e 100644 --- a/resources/js/warehouse_management/products/edit.js +++ b/resources/js/warehouse_management/products/edit.js @@ -1,48 +1 @@ -document.addEventListener("DOMContentLoaded", function () { - let dealerRowContainer = document.getElementById("dynamicDealerRows"); - let addDealerButton = document.getElementById("addDealerRow"); - - // Initial index from existing dealer rows - let rowIndex = - dealerRowContainer.querySelectorAll(".dealer-stock-row").length; - - addDealerButton.addEventListener("click", function () { - const newRow = document.createElement("div"); - newRow.className = "form-group row align-items-center dealer-stock-row"; - newRow.innerHTML = ` -
- -
-
- -
-
- -
- `; - dealerRowContainer.appendChild(newRow); - rowIndex++; - }); - - // Handle removal of dealer row - dealerRowContainer.addEventListener("click", function (event) { - if ( - event.target && - event.target.classList.contains("remove-dealer-row") - ) { - event.target.closest(".dealer-stock-row").remove(); - } - }); - - // Function to generate dealer `) - .join(""); - } -}); +document.addEventListener("DOMContentLoaded", function () {}); diff --git a/resources/js/warehouse_management/stock_mutations/index.js b/resources/js/warehouse_management/stock_mutations/index.js deleted file mode 100644 index bc9b10e..0000000 --- a/resources/js/warehouse_management/stock_mutations/index.js +++ /dev/null @@ -1,20 +0,0 @@ -$.ajaxSetup({ - headers: { - "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), - }, -}); -let tableContainer = $("#stock-mutations-table"); -let url = tableContainer.data("url"); -let table = $("#stock-mutations-table").DataTable({ - processing: true, - serverSide: true, - ajax: url, - columns: [ - { data: "product_name", name: "product_name" }, - { data: "dealer_name", name: "dealer_name" }, - { data: "user_name", name: "user_name" }, - { data: "mutation_type_label", name: "mutation_type_label" }, - { data: "quantity", name: "quantity" }, - { data: "created_at", name: "created_at" }, - ], -}); diff --git a/resources/js/warehouse_management/stock_opnames/index.js b/resources/js/warehouse_management/stock_opnames/index.js deleted file mode 100644 index 9e79bf2..0000000 --- a/resources/js/warehouse_management/stock_opnames/index.js +++ /dev/null @@ -1,21 +0,0 @@ -$.ajaxSetup({ - headers: { - "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), - }, -}); -let tableContainer = $("#stock-opnames-table"); -let url = tableContainer.data("url"); -let table = $("#stock-opnames-table").DataTable({ - processing: true, - serverSide: true, - ajax: url, - columns: [ - { data: "product_name", name: "product_name" }, - { data: "dealer_name", name: "dealer_name" }, - { data: "user_name", name: "user_name" }, - { data: "system_quantity", name: "system_quantity" }, - { data: "physical_quantity", name: "physical_quantity" }, - { data: "difference", name: "difference" }, - { data: "opname_date", name: "opname_date" }, - ], -}); diff --git a/resources/views/layouts/partials/sidebarMenu.blade.php b/resources/views/layouts/partials/sidebarMenu.blade.php index 67efa21..76eca2f 100644 --- a/resources/views/layouts/partials/sidebarMenu.blade.php +++ b/resources/views/layouts/partials/sidebarMenu.blade.php @@ -138,18 +138,18 @@ {{-- Submenu Items --}} - @can('view', $menus['dealer.index']) + @can('view', $menus['user.index'])
  • - + Pengguna
  • @endcan - @can('view', $menus['category.index']) + @can('view', $menus['roleprivileges.index'])
  • - + Role & Privileges @@ -163,9 +163,9 @@ {{-- Submenu Items --}} - @can('view', $menus['dealer.index']) + @can('view', $menus['work.index'])
  • - + Pekerjaan @@ -181,9 +181,9 @@
  • @endcan - @can('view', $menus['work.index']) + @can('view', $menus['dealer.index'])
  • - + Dealer @@ -224,9 +224,9 @@
  • @endcan - @can('view', $menus['work.index']) + @can('view', $menus['opnames.index'])
  • - + Stock Opname diff --git a/resources/views/warehouse_management/product_categories/index.blade.php b/resources/views/warehouse_management/product_categories/index.blade.php index 1a5ca87..1f1a8d1 100644 --- a/resources/views/warehouse_management/product_categories/index.blade.php +++ b/resources/views/warehouse_management/product_categories/index.blade.php @@ -5,7 +5,7 @@
    - +

    Tabel Kategori Produk @@ -58,7 +58,7 @@

    - diff --git a/resources/views/warehouse_management/products/create.blade.php b/resources/views/warehouse_management/products/create.blade.php index 02aa1a8..a286f9c 100644 --- a/resources/views/warehouse_management/products/create.blade.php +++ b/resources/views/warehouse_management/products/create.blade.php @@ -5,7 +5,7 @@
    - +

    Tambah Produk

    @@ -59,18 +59,7 @@ @endforeach
    - - {{-- Dynamic Dealer Stock Section --}} -
    -
    - -
    - - -
    - + {{-- Submit --}}
    diff --git a/resources/views/warehouse_management/products/edit.blade.php b/resources/views/warehouse_management/products/edit.blade.php index c027ee3..5f432e5 100644 --- a/resources/views/warehouse_management/products/edit.blade.php +++ b/resources/views/warehouse_management/products/edit.blade.php @@ -5,9 +5,9 @@
    - + -

    Tambah Produk

    +

    Ubah Produk

    @@ -32,6 +32,14 @@
    +
    + + +
    +
    @@ -55,36 +63,6 @@
    - {{-- Stok per Dealer --}} -
    -
    - -
    - @foreach($product->dealers as $index => $dealer) -
    -
    - -
    -
    - -
    -
    - -
    -
    - @endforeach -
    - - -
    - {{-- Submit --}}
    diff --git a/resources/views/warehouse_management/products/index.blade.php b/resources/views/warehouse_management/products/index.blade.php index 30d24d7..172fbea 100644 --- a/resources/views/warehouse_management/products/index.blade.php +++ b/resources/views/warehouse_management/products/index.blade.php @@ -5,7 +5,7 @@
    - +

    Tabel Produk diff --git a/resources/views/warehouse_management/stock_mutations/index.blade.php b/resources/views/warehouse_management/stock_mutations/index.blade.php index faeb386..a75d441 100644 --- a/resources/views/warehouse_management/stock_mutations/index.blade.php +++ b/resources/views/warehouse_management/stock_mutations/index.blade.php @@ -5,7 +5,7 @@
    - +

    Tabel Mutasi Stock Produk diff --git a/resources/views/warehouse_management/stock_opnames/create.blade.php b/resources/views/warehouse_management/stock_opnames/create.blade.php new file mode 100644 index 0000000..f385728 --- /dev/null +++ b/resources/views/warehouse_management/stock_opnames/create.blade.php @@ -0,0 +1,56 @@ +@extends('layouts.backapp') + +@section('content') +
    +
    +
    + + + +

    + Tambah Opname +

    +
    +
    + +
    +
    + @csrf + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + Batal +
    +
    +
    +
    +@endsection + +@section('javascripts') + +@endsection \ No newline at end of file diff --git a/resources/views/warehouse_management/stock_opnames/index.blade.php b/resources/views/warehouse_management/stock_opnames/index.blade.php index 8d0a98a..08536d5 100644 --- a/resources/views/warehouse_management/stock_opnames/index.blade.php +++ b/resources/views/warehouse_management/stock_opnames/index.blade.php @@ -5,13 +5,13 @@
    - +

    - Tabel Mutasi Stock Produk + Tabel Stock Opname

    - @can('create', $menus['mutations.index']) + @can('create', $menus['opnames.index'])
    diff --git a/routes/web.php b/routes/web.php index ed2c533..297d462 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,8 +9,6 @@ use App\Http\Controllers\TransactionController; use App\Http\Controllers\UserController; use App\Http\Controllers\WarehouseManagement\ProductCategoriesController; use App\Http\Controllers\WarehouseManagement\ProductsController; -use App\Http\Controllers\WarehouseManagement\StockMutationsController; -use App\Http\Controllers\WarehouseManagement\StockOpnamesController; use App\Http\Controllers\WorkController; use App\Models\Menu; use App\Models\Privilege; @@ -205,13 +203,31 @@ Route::group(['middleware' => 'auth'], function() { Route::get('/report/transaction_dealer', [ReportController::class, 'transaction_dealer'])->name('report.transaction_dealer'); }); - Route::prefix('warehouse')->group(function (){ - Route::resource('products', ProductsController::class); - Route::resource('product_categories', ProductCategoriesController::class); - Route::get('categories/parents', [ProductCategoriesController::class, 'getParents'])->name('products.parents'); - Route::post('products/{product}/toggle-active', [ProductsController::class, 'toggleActive'])->name('products.toggleActive'); - Route::get('mutations/index',[StockMutationsController::class, 'index'])->name('mutations.index'); - Route::get('opnames/index',[StockOpnamesController::class, 'index'])->name('opnames.index'); + Route::prefix('warehouse')->group(function () { + + // ProductsController routes + Route::prefix('products')->controller(ProductsController::class)->group(function () { + Route::get('/', 'index')->name('products.index'); + Route::get('create', 'create')->name('products.create'); + Route::post('/', 'store')->name('products.store'); + Route::get('{product}', 'show')->name('products.show'); + Route::get('{product}/edit', 'edit')->name('products.edit'); + Route::put('{product}', 'update')->name('products.update'); + Route::delete('{product}', 'destroy')->name('products.destroy'); + Route::post('{product}/toggle-active', 'toggleActive')->name('products.toggleActive'); + }); + + // ProductCategoriesController routes + Route::prefix('product_categories')->controller(ProductCategoriesController::class)->group(function () { + Route::get('/', 'index')->name('product_categories.index'); + Route::get('create', 'create')->name('product_categories.create'); + Route::post('/', 'store')->name('product_categories.store'); + Route::get('parents','product_category_parents')->name('product_categories.parents'); + Route::get('{product_category}', 'show')->name('product_categories.show'); + Route::get('{product_category}/edit', 'edit')->name('product_categories.edit'); + Route::put('{product_category}', 'update')->name('product_categories.update'); + Route::delete('{product_category}', 'destroy')->name('product_categories.destroy'); + }); }); }); diff --git a/webpack.mix.js b/webpack.mix.js index 890e448..0fadc3c 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -29,14 +29,6 @@ mix.js("resources/js/app.js", "public/js") "resources/js/warehouse_management/products/edit.js", "public/js/warehouse_management/products" ) - .js( - "resources/js/warehouse_management/stock_mutations/index.js", - "public/js/warehouse_management/stock_mutations" - ) - .js( - "resources/js/warehouse_management/stock_opnames/index.js", - "public/js/warehouse_management/stock_opnames" - ) .sourceMaps(); mix.browserSync({