From 59e23ae53538137783732183e78a7b7c47c899a6 Mon Sep 17 00:00:00 2001 From: arifal Date: Wed, 28 May 2025 18:24:44 +0700 Subject: [PATCH] create crud product categories and partial update crud products with dealers stock --- .../ProductCategoriesController.php | 124 +++++++++++++ .../ProductsController.php | 120 ++++++++++++ app/Models/Dealer.php | 6 + app/Models/Product.php | 24 +++ app/Models/ProductCategory.php | 18 ++ app/Providers/AppServiceProvider.php | 4 +- composer.json | 1 + composer.lock | 171 +++++++++++++++--- ...113228_create_product_categories_table.php | 33 ++++ ...025_05_28_113324_create_products_table.php | 36 ++++ .../2025_05_28_175140_create_stock_table.php | 36 ++++ database/seeders/DatabaseSeeder.php | 5 + database/seeders/MenuSeeder.php | 39 ++++ database/seeders/ProductAndCategorySeeder.php | 52 ++++++ .../seeders/UserRoleAndPrivilegesSeeder.php | 37 ++++ public/js/index.js | 32 ++++ .../product_categories/index.js | 32 ++++ .../js/warehouse_management/products/index.js | 32 ++++ public/mix-manifest.json | 2 + .../product_categories/index.js | 109 +++++++++++ .../js/warehouse_management/products/index.js | 112 ++++++++++++ resources/views/layouts/backapp.blade.php | 2 +- .../layouts/partials/sidebarMenu.blade.php | 154 ++++++++++++++++ .../product_categories/index.blade.php | 73 ++++++++ .../products/create.blade.php | 37 ++++ .../products/index.blade.php | 48 +++++ routes/web.php | 11 +- webpack.mix.js | 14 +- 28 files changed, 1336 insertions(+), 28 deletions(-) create mode 100644 app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php create mode 100644 app/Http/Controllers/WarehouseManagement/ProductsController.php create mode 100644 app/Models/Product.php create mode 100644 app/Models/ProductCategory.php create mode 100644 database/migrations/2025_05_28_113228_create_product_categories_table.php create mode 100644 database/migrations/2025_05_28_113324_create_products_table.php create mode 100644 database/migrations/2025_05_28_175140_create_stock_table.php create mode 100644 database/seeders/MenuSeeder.php create mode 100644 database/seeders/ProductAndCategorySeeder.php create mode 100644 database/seeders/UserRoleAndPrivilegesSeeder.php create mode 100644 public/js/index.js create mode 100644 public/js/warehouse_management/product_categories/index.js create mode 100644 public/js/warehouse_management/products/index.js create mode 100644 resources/js/warehouse_management/product_categories/index.js create mode 100644 resources/js/warehouse_management/products/index.js create mode 100644 resources/views/warehouse_management/product_categories/index.blade.php create mode 100644 resources/views/warehouse_management/products/create.blade.php create mode 100644 resources/views/warehouse_management/products/index.blade.php diff --git a/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php new file mode 100644 index 0000000..221e5c0 --- /dev/null +++ b/app/Http/Controllers/WarehouseManagement/ProductCategoriesController.php @@ -0,0 +1,124 @@ +first(); + if($request->ajax()){ + $data = ProductCategory::query(); + return DataTables::of($data) + ->addIndexColumn() + ->addColumn('action', function ($row) use ($menu) { + $btn = ''; + + if (Auth::user()->can('delete', $menu)) { + $btn .= ''; + } + + if (Auth::user()->can('update', $menu)) { + $btn .= ''; + } + + return $btn; + }) + ->rawColumns(['action']) + ->make(true); + } + return view('warehouse_management.product_categories.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $validated = $request->validate([ + 'name' => 'required|string|max:255', + ]); + ProductCategory::create($validated); + return response()->json(['success' => true, 'message' => 'Kategori berhasil ditambahkan.']); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + $category = ProductCategory::findOrFail($id); + return response()->json($category); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + $validated = $request->validate([ + 'name' => 'required|string|max:255', + ]); + + $category = ProductCategory::findOrFail($id); + $category->update($validated); + + return response()->json(['success' => true, 'message' => 'Kategori berhasil diperbarui.']); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + ProductCategory::findOrFail($id)->delete(); + return response()->json(['success' => true, 'message' => 'Kategorii berhasil dihapus.']); + } +} diff --git a/app/Http/Controllers/WarehouseManagement/ProductsController.php b/app/Http/Controllers/WarehouseManagement/ProductsController.php new file mode 100644 index 0000000..1766b4f --- /dev/null +++ b/app/Http/Controllers/WarehouseManagement/ProductsController.php @@ -0,0 +1,120 @@ +first(); + if($request->ajax()){ + $data = Product::with(['category','dealers']); + return DataTables::of($data) + ->addIndexColumn() + ->addColumn('category_name', function ($row) { + return $row->category ? $row->category->name : '-'; + }) + ->addColumn('total_stock', function ($row){ + return $row->dealers->sum(function($dealer){ + return $dealer->pivot->quantity ?? 0; + }); + }) + ->addColumn('action', function ($row) use ($menu) { + $btn = ''; + + if (Auth::user()->can('delete', $menu)) { + $btn .= ''; + } + + if (Auth::user()->can('update', $menu)) { + $btn .= ''; + } + + return $btn; + }) + ->rawColumns(['action']) + ->make(true); + } + return view('warehouse_management.products.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + // + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + // + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + // + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Models/Dealer.php b/app/Models/Dealer.php index f97b0e0..9e985d5 100644 --- a/app/Models/Dealer.php +++ b/app/Models/Dealer.php @@ -22,4 +22,10 @@ class Dealer extends Model { return $this->hasMany(Transaction::class, 'dealer_id', 'id'); } + + public function products(){ + return $this->belongsToMany(Product::class, 'stock') + ->withPivot('quantity') + ->withTimestamps(); + } } diff --git a/app/Models/Product.php b/app/Models/Product.php new file mode 100644 index 0000000..eb7392f --- /dev/null +++ b/app/Models/Product.php @@ -0,0 +1,24 @@ +belongsTo(ProductCategory::class, 'product_category_id'); + } + + public function dealers(){ + return $this->belongsToMany(Dealer::class, 'stock') + ->withPivot('quantity') + ->withTimestamps(); + } +} diff --git a/app/Models/ProductCategory.php b/app/Models/ProductCategory.php new file mode 100644 index 0000000..4d271ea --- /dev/null +++ b/app/Models/ProductCategory.php @@ -0,0 +1,18 @@ +hasMany(Product::class, 'product_category_id'); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3f9906b..2a9c4d4 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use App\Models\Menu; +use Carbon\Carbon; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\View; @@ -25,7 +26,8 @@ class AppServiceProvider extends ServiceProvider */ public function boot() { - View::composer(['layouts.partials.sidebarMenu', 'dashboard', 'dealer_recap', 'back.*'], function ($view) { + Carbon::setLocale('id'); + View::composer(['layouts.partials.sidebarMenu', 'dashboard', 'dealer_recap', 'back.*', 'warehouse_management.*'], function ($view) { $menuQuery = Menu::all(); $menus = []; foreach($menuQuery as $menu) { diff --git a/composer.json b/composer.json index cefcec1..fc6546d 100644 --- a/composer.json +++ b/composer.json @@ -14,6 +14,7 @@ "laravel/tinker": "^2.5", "laravel/ui": "^3.4", "maatwebsite/excel": "^3.1", + "nesbot/carbon": "^2.73", "yajra/laravel-datatables-oracle": "^9.20" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 1b92a5e..e0ec070 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f96a1847e52c9eb29681f0fb8fea48c2", + "content-hash": "3e3b47389d4bce664f705134cae65b49", "packages": [ { "name": "asm89/stack-cors", @@ -122,6 +122,75 @@ ], "time": "2021-08-15T20:50:18+00:00" }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/3c430083d0b41ceed84ecccf9dac613241d7305d", + "reference": "3c430083d0b41ceed84ecccf9dac613241d7305d", + "shasum": "" + }, + "require": { + "php": "^7.1.8 || ^8.0" + }, + "conflict": { + "doctrine/dbal": ">=3.7.0" + }, + "require-dev": { + "doctrine/dbal": ">=2.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2023-10-01T12:35:29+00:00" + }, { "name": "dflydev/dot-access-data", "version": "v3.0.1", @@ -2537,35 +2606,41 @@ }, { "name": "nesbot/carbon", - "version": "2.58.0", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/97a34af22bde8d0ac20ab34b29d7bfe360902055", - "reference": "97a34af22bde8d0ac20ab34b29d7bfe360902055", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54 || ^1.0", - "phpunit/php-file-iterator": "^2.0.5", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -2573,10 +2648,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -2586,6 +2657,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -2622,15 +2697,19 @@ }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", "type": "tidelift" } ], - "time": "2022-04-25T19:31:17+00:00" + "time": "2025-01-08T20:10:23+00:00" }, { "name": "nette/schema", @@ -3124,6 +3203,54 @@ }, "time": "2016-08-06T20:24:11+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "1.1.2", @@ -8917,12 +9044,12 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { "php": "^7.3|^8.0" }, - "platform-dev": [], - "plugin-api-version": "2.1.0" + "platform-dev": {}, + "plugin-api-version": "2.6.0" } 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 new file mode 100644 index 0000000..b1af6fb --- /dev/null +++ b/database/migrations/2025_05_28_113228_create_product_categories_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('name'); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('product_categories'); + } +} diff --git a/database/migrations/2025_05_28_113324_create_products_table.php b/database/migrations/2025_05_28_113324_create_products_table.php new file mode 100644 index 0000000..5f48680 --- /dev/null +++ b/database/migrations/2025_05_28_113324_create_products_table.php @@ -0,0 +1,36 @@ +id(); + $table->string('code')->unique(); + $table->string('name'); + $table->text('description')->nullable(); + $table->foreignId('product_category_id')->constrained()->onDelete('cascade'); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('products'); + } +} diff --git a/database/migrations/2025_05_28_175140_create_stock_table.php b/database/migrations/2025_05_28_175140_create_stock_table.php new file mode 100644 index 0000000..fca5bd7 --- /dev/null +++ b/database/migrations/2025_05_28_175140_create_stock_table.php @@ -0,0 +1,36 @@ +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/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 57b73b5..39ad4be 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,5 +14,10 @@ class DatabaseSeeder extends Seeder public function run() { // \App\Models\User::factory(10)->create(); + $this->call([ + MenuSeeder::class, + ProductAndCategorySeeder::class, + UserRoleAndPrivilegesSeeder::class + ]); } } diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php new file mode 100644 index 0000000..8c67eaf --- /dev/null +++ b/database/seeders/MenuSeeder.php @@ -0,0 +1,39 @@ + 'Produk', + 'link' => 'products.index' + ], + [ + 'name' => 'Kategori Produk', + 'link' => 'product_categories.index' + ] + ]; + + foreach ($menus as $menu){ + Menu::updateOrInsert( + ['link' => $menu['link']], + [ + 'name' => $menu['name'], + 'created_at' => now(), + 'updated_at' => now() + ] + ); + } + } +} diff --git a/database/seeders/ProductAndCategorySeeder.php b/database/seeders/ProductAndCategorySeeder.php new file mode 100644 index 0000000..b6b5ab9 --- /dev/null +++ b/database/seeders/ProductAndCategorySeeder.php @@ -0,0 +1,52 @@ + [ + ['code' => 'OLI001', 'name' => 'Oli Mesin 10W-40'], + ['code' => 'OLI002', 'name' => 'Oli Gardan'], + ], + 'Aki & Kelistrikan' => [ + ['code' => 'AKI001', 'name' => 'Aki Kering 12V'], + ['code' => 'AKI002', 'name' => 'Regulator Rectifier'], + ], + 'Rem' => [ + ['code' => 'REM001', 'name' => 'Kampas Rem Belakang'], + ['code' => 'REM002', 'name' => 'Cakram Depan'], + ], + ]; + + + foreach ($categories as $categoryName => $products) { + $category = ProductCategory::firstOrCreate( + ['name' => $categoryName], + ['created_at' => now(), 'updated_at' => now()] + ); + + foreach ($products as $product) { + Product::updateOrCreate( + ['code' => $product['code']], + [ + 'name' => $product['name'], + 'description' => $product['name'], + 'product_category_id' => $category->id + ] + ); + } + } + } +} diff --git a/database/seeders/UserRoleAndPrivilegesSeeder.php b/database/seeders/UserRoleAndPrivilegesSeeder.php new file mode 100644 index 0000000..22e8da6 --- /dev/null +++ b/database/seeders/UserRoleAndPrivilegesSeeder.php @@ -0,0 +1,37 @@ + 'admin']); + + $menus = Menu::all(); + foreach ($menus as $menu) { + Privilege::updateOrCreate( + [ + 'role_id' => $role->id, + 'menu_id' => $menu->id + ], + [ + 'create' => 1, + 'update' => 1, + 'delete' => 1, + 'view' => 1 + ] + ); + } + } +} diff --git a/public/js/index.js b/public/js/index.js new file mode 100644 index 0000000..f66c527 --- /dev/null +++ b/public/js/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/product_categories/index.js": +/*!***********************************************************************!*\ + !*** ./resources/js/warehouse_management/product_categories/index.js ***! + \***********************************************************************/ +/***/ (() => { + +eval("$(function () {\n $('#product-categories-table').DataTable({\n processing: true,\n serverSide: true,\n ajax: '{{ route(\"product_categories.index\") }}',\n columns: [{\n data: 'DT_RowIndex',\n name: 'DT_RowIndex',\n orderable: false,\n searchable: false\n }, {\n data: 'name',\n name: 'name'\n }, {\n data: 'created_at',\n name: 'created_at'\n }, {\n data: 'action',\n name: 'action',\n orderable: false,\n searchable: false\n }]\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzLmpzIiwibmFtZXMiOlsiJCIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJkYXRhIiwibmFtZSIsIm9yZGVyYWJsZSIsInNlYXJjaGFibGUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0X2NhdGVnb3JpZXMvaW5kZXguanM/ZmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIkKGZ1bmN0aW9uICgpIHtcbiAgJCgnI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgICAgc2VydmVyU2lkZTogdHJ1ZSxcbiAgICAgIGFqYXg6ICd7eyByb3V0ZShcInByb2R1Y3RfY2F0ZWdvcmllcy5pbmRleFwiKSB9fScsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgeyBkYXRhOiAnRFRfUm93SW5kZXgnLCBuYW1lOiAnRFRfUm93SW5kZXgnLCBvcmRlcmFibGU6IGZhbHNlLCBzZWFyY2hhYmxlOiBmYWxzZSB9LFxuICAgICAgICAgIHsgZGF0YTogJ25hbWUnLCBuYW1lOiAnbmFtZScgfSxcbiAgICAgICAgICB7IGRhdGE6ICdjcmVhdGVkX2F0JywgbmFtZTogJ2NyZWF0ZWRfYXQnIH0sXG4gICAgICAgICAgeyBkYXRhOiAnYWN0aW9uJywgbmFtZTogJ2FjdGlvbicsIG9yZGVyYWJsZTogZmFsc2UsIHNlYXJjaGFibGU6IGZhbHNlIH1cbiAgICAgIF1cbiAgfSk7XG59KTsiXSwibWFwcGluZ3MiOiJBQUFBQSxDQUFDLENBQUMsWUFBWTtFQUNaQSxDQUFDLENBQUMsMkJBQUQsQ0FBRCxDQUErQkMsU0FBL0IsQ0FBeUM7SUFDckNDLFVBQVUsRUFBRSxJQUR5QjtJQUVyQ0MsVUFBVSxFQUFFLElBRnlCO0lBR3JDQyxJQUFJLEVBQUUseUNBSCtCO0lBSXJDQyxPQUFPLEVBQUUsQ0FDTDtNQUFFQyxJQUFJLEVBQUUsYUFBUjtNQUF1QkMsSUFBSSxFQUFFLGFBQTdCO01BQTRDQyxTQUFTLEVBQUUsS0FBdkQ7TUFBOERDLFVBQVUsRUFBRTtJQUExRSxDQURLLEVBRUw7TUFBRUgsSUFBSSxFQUFFLE1BQVI7TUFBZ0JDLElBQUksRUFBRTtJQUF0QixDQUZLLEVBR0w7TUFBRUQsSUFBSSxFQUFFLFlBQVI7TUFBc0JDLElBQUksRUFBRTtJQUE1QixDQUhLLEVBSUw7TUFBRUQsSUFBSSxFQUFFLFFBQVI7TUFBa0JDLElBQUksRUFBRSxRQUF4QjtNQUFrQ0MsU0FBUyxFQUFFLEtBQTdDO01BQW9EQyxVQUFVLEVBQUU7SUFBaEUsQ0FKSztFQUo0QixDQUF6QztBQVdELENBWkEsQ0FBRCJ9\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/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/product_categories/index.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/js/warehouse_management/product_categories/index.js b/public/js/warehouse_management/product_categories/index.js new file mode 100644 index 0000000..55359c2 --- /dev/null +++ b/public/js/warehouse_management/product_categories/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/product_categories/index.js": +/*!***********************************************************************!*\ + !*** ./resources/js/warehouse_management/product_categories/index.js ***! + \***********************************************************************/ +/***/ (() => { + +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: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false\n }, {\n data: \"name\",\n name: \"name\"\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 }); // 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);\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});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdF9jYXRlZ29yaWVzL2luZGV4LmpzLmpzIiwibmFtZXMiOlsiJCIsImFqYXhTZXR1cCIsImhlYWRlcnMiLCJhdHRyIiwidGFibGVDb250YWluZXIiLCJ1cmwiLCJkYXRhIiwidGFibGUiLCJEYXRhVGFibGUiLCJwcm9jZXNzaW5nIiwic2VydmVyU2lkZSIsImFqYXgiLCJjb2x1bW5zIiwibmFtZSIsIm9yZGVyYWJsZSIsInNlYXJjaGFibGUiLCJkb2N1bWVudCIsInJlYWR5IiwiY2xpY2siLCJyZXNldCIsInZhbCIsInRleHQiLCJtb2RhbCIsInN1Ym1pdCIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImlkIiwibWV0aG9kIiwiX3Rva2VuIiwiX21ldGhvZCIsInN1Y2Nlc3MiLCJyZWxvYWQiLCJlcnJvciIsInhociIsImFsZXJ0IiwiY29uc29sZSIsInJlc3BvbnNlVGV4dCIsIm9uIiwicmVzcG9uc2UiLCJTd2FsIiwiZmlyZSIsInRpdGxlIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNhbmNlbEJ1dHRvbkNvbG9yIiwiY29uZmlybUJ1dHRvblRleHQiLCJ0aGVuIiwicmVzdWx0IiwidmFsdWUiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy93YXJlaG91c2VfbWFuYWdlbWVudC9wcm9kdWN0X2NhdGVnb3JpZXMvaW5kZXguanM/ZmM4NCJdLCJzb3VyY2VzQ29udGVudCI6WyIkLmFqYXhTZXR1cCh7XG4gICAgaGVhZGVyczoge1xuICAgICAgICBcIlgtQ1NSRi1UT0tFTlwiOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgfSxcbn0pO1xubGV0IHRhYmxlQ29udGFpbmVyID0gJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSh7XG4gICAgcHJvY2Vzc2luZzogdHJ1ZSxcbiAgICBzZXJ2ZXJTaWRlOiB0cnVlLFxuICAgIGFqYXg6IHVybCxcbiAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGE6IFwiRFRfUm93SW5kZXhcIixcbiAgICAgICAgICAgIG5hbWU6IFwiRFRfUm93SW5kZXhcIixcbiAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBkYXRhOiBcIm5hbWVcIiwgbmFtZTogXCJuYW1lXCIgfSxcbiAgICAgICAgeyBkYXRhOiBcImFjdGlvblwiLCBuYW1lOiBcImFjdGlvblwiLCBvcmRlcmFibGU6IGZhbHNlLCBzZWFyY2hhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG59KTtcblxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgICQoXCIjYWRkUHJvZHVjdENhdGVnb3J5XCIpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpWzBdLnJlc2V0KCk7XG4gICAgICAgICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKFwiXCIpO1xuICAgICAgICAkKFwiI21vZGFsVGl0bGVcIikudGV4dChcIlRhbWJhaCBLYXRlZ29yaVwiKTtcbiAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgfSk7XG5cbiAgICAvLyBTdWJtaXQgZm9ybSAoYmFpayB0YW1iYWggbWF1cHVuIGVkaXQpXG4gICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlGb3JtXCIpLnN1Ym1pdChmdW5jdGlvbiAoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGlkID0gJChcIiNjYXRlZ29yeV9pZFwiKS52YWwoKTtcbiAgICAgICAgbGV0IHVybCA9IGlkXG4gICAgICAgICAgICA/IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllcy8ke2lkfWBcbiAgICAgICAgICAgIDogYC93YXJlaG91c2UvcHJvZHVjdF9jYXRlZ29yaWVzYDtcbiAgICAgICAgbGV0IG1ldGhvZCA9IGlkID8gXCJQVVRcIiA6IFwiUE9TVFwiO1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIG5hbWU6ICQoXCIjbmFtZVwiKS52YWwoKSxcbiAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICAuLi4oaWQgJiYgeyBfbWV0aG9kOiBcIlBVVFwiIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3RDYXRlZ29yeU1vZGFsXCIpLm1vZGFsKFwiaGlkZVwiKTtcbiAgICAgICAgICAgICAgICAkKFwiI3Byb2R1Y3QtY2F0ZWdvcmllcy10YWJsZVwiKS5EYXRhVGFibGUoKS5hamF4LnJlbG9hZCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW55aW1wYW4gZGF0YVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwgXCIuYnRuLWVkaXQtcHJvZHVjdC1jYXRlZ29yeVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgaWQgPSAkKHRoaXMpLmRhdGEoXCJpZFwiKTtcbiAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJ1cmxcIik7XG4gICAgJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICAkKFwiI25hbWVcIikudmFsKHJlc3BvbnNlLm5hbWUpO1xuICAgICAgICAgICAgJChcIiNtb2RhbFRpdGxlXCIpLnRleHQoXCJFZGl0IEthdGVnb3JpXCIpO1xuICAgICAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcInNob3dcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmdhbWJpbCBkYXRhXCIpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuXG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1kZXN0cm95LXByb2R1Y3QtY2F0ZWdvcnlcIiwgZnVuY3Rpb24gKCkge1xuICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiBcIkhhcHVzIG5hbWEga2F0ZWdvcmk/XCIsXG4gICAgICAgIHRleHQ6IFwiQW5kYSB0aWRhayBha2FuIGJpc2EgbWVuZ2VtYmFsaWthbm55YSFcIixcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgY29uZmlybUJ1dHRvbkNvbG9yOiBcIiNkMzNcIixcbiAgICAgICAgY2FuY2VsQnV0dG9uQ29sb3I6IFwiI2RlZGVkZVwiLFxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCJIYXB1c1wiLFxuICAgIH0pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSAkKHRoaXMpLmRhdGEoXCJhY3Rpb25cIik7XG4gICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBfbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICAgICAgICAgICAgICBfdG9rZW46ICQoJ21ldGFbbmFtZT1cImNzcmYtdG9rZW5cIl0nKS5hdHRyKFwiY29udGVudFwiKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJLYXRlZ29yaSBiZXJoYXNpbCBkaWhhcHVzLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIikuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVuZ2hhcHVzIGthdGVnb3JpLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQUEsQ0FBQyxDQUFDQyxTQUFGLENBQVk7RUFDUkMsT0FBTyxFQUFFO0lBQ0wsZ0JBQWdCRixDQUFDLENBQUMseUJB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\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/product_categories/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/product_categories/index.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/js/warehouse_management/products/index.js b/public/js/warehouse_management/products/index.js new file mode 100644 index 0000000..bb95efa --- /dev/null +++ b/public/js/warehouse_management/products/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/products/index.js": +/*!*************************************************************!*\ + !*** ./resources/js/warehouse_management/products/index.js ***! + \*************************************************************/ +/***/ (() => { + +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 = $(\"#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: \"DT_RowIndex\",\n name: \"DT_RowIndex\",\n orderable: false,\n searchable: false\n }, {\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).ready(function () {\n $(\"#addProductCategory\").click(function () {\n $(\"#productCategoryForm\")[0].reset();\n $(\"#category_id\").val(\"\");\n $(\"#modalTitle\").text(\"Tambah Kategori\");\n $(\"#productCategoryModal\").modal(\"show\");\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);\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});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvd2FyZWhvdXNlX21hbmFnZW1lbnQvcHJvZHVjdHMvaW5kZXguanMuanMiLCJuYW1lcyI6WyIkIiwiYWpheFNldHVwIiwiaGVhZGVycyIsImF0dHIiLCJ0YWJsZUNvbnRhaW5lciIsInVybCIsImRhdGEiLCJ0YWJsZSIsIkRhdGFUYWJsZSIsInByb2Nlc3NpbmciLCJzZXJ2ZXJTaWRlIiwiYWpheCIsImNvbHVtbnMiLCJuYW1lIiwib3JkZXJhYmxlIiwic2VhcmNoYWJsZSIsImRvY3VtZW50IiwicmVhZHkiLCJjbGljayIsInJlc2V0IiwidmFsIiwidGV4dCIsIm1vZGFsIiwic3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiaWQiLCJtZXRob2QiLCJfdG9rZW4iLCJfbWV0aG9kIiwic3VjY2VzcyIsInJlbG9hZCIsImVycm9yIiwieGhyIiwiYWxlcnQiLCJjb25zb2xlIiwicmVzcG9uc2VUZXh0Iiwib24iLCJyZXNwb25zZSIsIlN3YWwiLCJmaXJlIiwidGl0bGUiLCJzaG93Q2FuY2VsQnV0dG9uIiwiY29uZmlybUJ1dHRvbkNvbG9yIiwiY2FuY2VsQnV0dG9uQ29sb3IiLCJjb25maXJtQnV0dG9uVGV4dCIsInRoZW4iLCJyZXN1bHQiLCJ2YWx1ZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL3dhcmVob3VzZV9tYW5hZ2VtZW50L3Byb2R1Y3RzL2luZGV4LmpzP2ZjZDYiXSwic291cmNlc0NvbnRlbnQiOlsiJC5hamF4U2V0dXAoe1xuICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJYLUNTUkYtVE9LRU5cIjogJCgnbWV0YVtuYW1lPVwiY3NyZi10b2tlblwiXScpLmF0dHIoXCJjb250ZW50XCIpLFxuICAgIH0sXG59KTtcbmxldCB0YWJsZUNvbnRhaW5lciA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIik7XG5sZXQgdXJsID0gdGFibGVDb250YWluZXIuZGF0YShcInVybFwiKTtcbmxldCB0YWJsZSA9ICQoXCIjcHJvZHVjdHMtdGFibGVcIikuRGF0YVRhYmxlKHtcbiAgICBwcm9jZXNzaW5nOiB0cnVlLFxuICAgIHNlcnZlclNpZGU6IHRydWUsXG4gICAgYWpheDogdXJsLFxuICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YTogXCJEVF9Sb3dJbmRleFwiLFxuICAgICAgICAgICAgbmFtZTogXCJEVF9Sb3dJbmRleFwiLFxuICAgICAgICAgICAgb3JkZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7IGRhdGE6IFwiY29kZVwiLCBuYW1lOiBcImNvZGVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwibmFtZVwiLCBuYW1lOiBcIm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwiY2F0ZWdvcnlfbmFtZVwiLCBuYW1lOiBcImNhdGVnb3J5Lm5hbWVcIiB9LFxuICAgICAgICB7IGRhdGE6IFwidG90YWxfc3RvY2tcIiwgbmFtZTogXCJ0b3RhbF9zdG9ja1wiIH0sXG4gICAgICAgIHsgZGF0YTogXCJhY3Rpb25cIiwgbmFtZTogXCJhY3Rpb25cIiwgb3JkZXJhYmxlOiBmYWxzZSwgc2VhcmNoYWJsZTogZmFsc2UgfSxcbiAgICBdLFxufSk7XG5cbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAkKFwiI2FkZFByb2R1Y3RDYXRlZ29yeVwiKS5jbGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5Rm9ybVwiKVswXS5yZXNldCgpO1xuICAgICAgICAkKFwiI2NhdGVnb3J5X2lkXCIpLnZhbChcIlwiKTtcbiAgICAgICAgJChcIiNtb2RhbFRpdGxlXCIpLnRleHQoXCJUYW1iYWggS2F0ZWdvcmlcIik7XG4gICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xuICAgIH0pO1xuXG4gICAgLy8gU3VibWl0IGZvcm0gKGJhaWsgdGFtYmFoIG1hdXB1biBlZGl0KVxuICAgICQoXCIjcHJvZHVjdENhdGVnb3J5Rm9ybVwiKS5zdWJtaXQoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBpZCA9ICQoXCIjY2F0ZWdvcnlfaWRcIikudmFsKCk7XG4gICAgICAgIGxldCB1cmwgPSBpZFxuICAgICAgICAgICAgPyBgL3dhcmVob3VzZS9wcm9kdWN0X2NhdGVnb3JpZXMvJHtpZH1gXG4gICAgICAgICAgICA6IGAvd2FyZWhvdXNlL3Byb2R1Y3RfY2F0ZWdvcmllc2A7XG4gICAgICAgIGxldCBtZXRob2QgPSBpZCA/IFwiUFVUXCIgOiBcIlBPU1RcIjtcblxuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBuYW1lOiAkKFwiI25hbWVcIikudmFsKCksXG4gICAgICAgICAgICAgICAgX3Rva2VuOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgLi4uKGlkICYmIHsgX21ldGhvZDogXCJQVVRcIiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0Q2F0ZWdvcnlNb2RhbFwiKS5tb2RhbChcImhpZGVcIik7XG4gICAgICAgICAgICAgICAgJChcIiNwcm9kdWN0LWNhdGVnb3JpZXMtdGFibGVcIikuRGF0YVRhYmxlKCkuYWpheC5yZWxvYWQoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgIGFsZXJ0KFwiR2FnYWwgbWVueWltcGFuIGRhdGFcIik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4kKGRvY3VtZW50KS5vbihcImNsaWNrXCIsIFwiLmJ0bi1lZGl0LXByb2R1Y3QtY2F0ZWdvcnlcIiwgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGlkID0gJCh0aGlzKS5kYXRhKFwiaWRcIik7XG4gICAgY29uc3QgdXJsID0gJCh0aGlzKS5kYXRhKFwidXJsXCIpO1xuICAgICQuYWpheCh7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgJChcIiNjYXRlZ29yeV9pZFwiKS52YWwocmVzcG9uc2UuaWQpO1xuICAgICAgICAgICAgJChcIiNuYW1lXCIpLnZhbChyZXNwb25zZS5uYW1lKTtcbiAgICAgICAgICAgICQoXCIjbW9kYWxUaXRsZVwiKS50ZXh0KFwiRWRpdCBLYXRlZ29yaVwiKTtcbiAgICAgICAgICAgICQoXCIjcHJvZHVjdENhdGVnb3J5TW9kYWxcIikubW9kYWwoXCJzaG93XCIpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgYWxlcnQoXCJHYWdhbCBtZW5nYW1iaWwgZGF0YVwiKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59KTtcblxuJChkb2N1bWVudCkub24oXCJjbGlja1wiLCBcIi5idG4tZGVzdHJveS1wcm9kdWN0LWNhdGVnb3J5XCIsIGZ1bmN0aW9uICgpIHtcbiAgICBTd2FsLmZpcmUoe1xuICAgICAgICB0aXRsZTogXCJIYXB1cyBuYW1hIGthdGVnb3JpP1wiLFxuICAgICAgICB0ZXh0OiBcIkFuZGEgdGlkYWsgYWthbiBiaXNhIG1lbmdlbWJhbGlrYW5ueWEhXCIsXG4gICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjZDMzXCIsXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiBcIiNkZWRlZGVcIixcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwiSGFwdXNcIixcbiAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdXJsID0gJCh0aGlzKS5kYXRhKFwiYWN0aW9uXCIpO1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgX21ldGhvZDogXCJERUxFVEVcIixcbiAgICAgICAgICAgICAgICAgICAgX3Rva2VuOiAkKCdtZXRhW25hbWU9XCJjc3JmLXRva2VuXCJdJykuYXR0cihcImNvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiS2F0ZWdvcmkgYmVyaGFzaWwgZGloYXB1cy5cIik7XG4gICAgICAgICAgICAgICAgICAgICQoXCIjcHJvZHVjdC1jYXRlZ29yaWVzLXRhYmxlXCIpLkRhdGFUYWJsZSgpLmFqYXgucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKHhocikge1xuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkdhZ2FsIG1lbmdoYXB1cyBrYXRlZ29yaS5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAg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\n//# sourceURL=webpack-internal:///./resources/js/warehouse_management/products/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/products/index.js"](); +/******/ +/******/ })() +; \ No newline at end of file diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 2d60117..8f1a7ab 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,4 +1,6 @@ { "/js/app.js": "/js/app.js", + "/js/warehouse_management/product_categories/index.js": "/js/warehouse_management/product_categories/index.js", + "/js/warehouse_management/products/index.js": "/js/warehouse_management/products/index.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 new file mode 100644 index 0000000..2a5b455 --- /dev/null +++ b/resources/js/warehouse_management/product_categories/index.js @@ -0,0 +1,109 @@ +$.ajaxSetup({ + headers: { + "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), + }, +}); +let tableContainer = $("#product-categories-table"); +let url = tableContainer.data("url"); +let table = $("#product-categories-table").DataTable({ + processing: true, + serverSide: true, + ajax: url, + columns: [ + { + data: "DT_RowIndex", + name: "DT_RowIndex", + orderable: false, + searchable: false, + }, + { data: "name", name: "name" }, + { data: "action", name: "action", orderable: false, searchable: false }, + ], +}); + +$(document).ready(function () { + $("#addProductCategory").click(function () { + $("#productCategoryForm")[0].reset(); + $("#category_id").val(""); + $("#modalTitle").text("Tambah Kategori"); + $("#productCategoryModal").modal("show"); + }); + + // Submit form (baik tambah maupun edit) + $("#productCategoryForm").submit(function (e) { + e.preventDefault(); + + let id = $("#category_id").val(); + let url = id + ? `/warehouse/product_categories/${id}` + : `/warehouse/product_categories`; + let method = id ? "PUT" : "POST"; + + $.ajax({ + url: url, + method: method, + data: { + name: $("#name").val(), + _token: $('meta[name="csrf-token"]').attr("content"), + ...(id && { _method: "PUT" }), + }, + success: function () { + $("#productCategoryModal").modal("hide"); + $("#product-categories-table").DataTable().ajax.reload(); + }, + error: function (xhr) { + alert("Gagal menyimpan data"); + console.error(xhr.responseText); + }, + }); + }); +}); +$(document).on("click", ".btn-edit-product-category", function () { + const id = $(this).data("id"); + const url = $(this).data("url"); + $.ajax({ + url: url, + method: "GET", + success: function (response) { + $("#category_id").val(response.id); + $("#name").val(response.name); + $("#modalTitle").text("Edit Kategori"); + $("#productCategoryModal").modal("show"); + }, + error: function (xhr) { + alert("Gagal mengambil data"); + console.error(xhr.responseText); + }, + }); +}); + +$(document).on("click", ".btn-destroy-product-category", function () { + Swal.fire({ + title: "Hapus nama kategori?", + text: "Anda tidak akan bisa mengembalikannya!", + showCancelButton: true, + confirmButtonColor: "#d33", + cancelButtonColor: "#dedede", + confirmButtonText: "Hapus", + }).then((result) => { + if (result.value) { + const url = $(this).data("action"); + $.ajax({ + url: url, + method: "POST", + data: { + _method: "DELETE", + _token: $('meta[name="csrf-token"]').attr("content"), + }, + success: function () { + alert("Kategori berhasil dihapus."); + $("#product-categories-table").DataTable().ajax.reload(); + }, + error: function (xhr) { + alert("Gagal menghapus kategori."); + console.error(xhr.responseText); + }, + }); + } + }); +}); diff --git a/resources/js/warehouse_management/products/index.js b/resources/js/warehouse_management/products/index.js new file mode 100644 index 0000000..f36ac28 --- /dev/null +++ b/resources/js/warehouse_management/products/index.js @@ -0,0 +1,112 @@ +$.ajaxSetup({ + headers: { + "X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"), + }, +}); +let tableContainer = $("#products-table"); +let url = tableContainer.data("url"); +let table = $("#products-table").DataTable({ + processing: true, + serverSide: true, + ajax: url, + columns: [ + { + data: "DT_RowIndex", + name: "DT_RowIndex", + orderable: false, + searchable: false, + }, + { data: "code", name: "code" }, + { data: "name", name: "name" }, + { data: "category_name", name: "category.name" }, + { data: "total_stock", name: "total_stock" }, + { data: "action", name: "action", orderable: false, searchable: false }, + ], +}); + +$(document).ready(function () { + $("#addProductCategory").click(function () { + $("#productCategoryForm")[0].reset(); + $("#category_id").val(""); + $("#modalTitle").text("Tambah Kategori"); + $("#productCategoryModal").modal("show"); + }); + + // Submit form (baik tambah maupun edit) + $("#productCategoryForm").submit(function (e) { + e.preventDefault(); + + let id = $("#category_id").val(); + let url = id + ? `/warehouse/product_categories/${id}` + : `/warehouse/product_categories`; + let method = id ? "PUT" : "POST"; + + $.ajax({ + url: url, + method: method, + data: { + name: $("#name").val(), + _token: $('meta[name="csrf-token"]').attr("content"), + ...(id && { _method: "PUT" }), + }, + success: function () { + $("#productCategoryModal").modal("hide"); + $("#product-categories-table").DataTable().ajax.reload(); + }, + error: function (xhr) { + alert("Gagal menyimpan data"); + console.error(xhr.responseText); + }, + }); + }); +}); +$(document).on("click", ".btn-edit-product-category", function () { + const id = $(this).data("id"); + const url = $(this).data("url"); + $.ajax({ + url: url, + method: "GET", + success: function (response) { + $("#category_id").val(response.id); + $("#name").val(response.name); + $("#modalTitle").text("Edit Kategori"); + $("#productCategoryModal").modal("show"); + }, + error: function (xhr) { + alert("Gagal mengambil data"); + console.error(xhr.responseText); + }, + }); +}); + +$(document).on("click", ".btn-destroy-product-category", function () { + Swal.fire({ + title: "Hapus nama kategori?", + text: "Anda tidak akan bisa mengembalikannya!", + showCancelButton: true, + confirmButtonColor: "#d33", + cancelButtonColor: "#dedede", + confirmButtonText: "Hapus", + }).then((result) => { + if (result.value) { + const url = $(this).data("action"); + $.ajax({ + url: url, + method: "POST", + data: { + _method: "DELETE", + _token: $('meta[name="csrf-token"]').attr("content"), + }, + success: function () { + alert("Kategori berhasil dihapus."); + $("#product-categories-table").DataTable().ajax.reload(); + }, + error: function (xhr) { + alert("Gagal menghapus kategori."); + console.error(xhr.responseText); + }, + }); + } + }); +}); diff --git a/resources/views/layouts/backapp.blade.php b/resources/views/layouts/backapp.blade.php index cf534b1..76968c4 100644 --- a/resources/views/layouts/backapp.blade.php +++ b/resources/views/layouts/backapp.blade.php @@ -114,7 +114,7 @@ License: You must have a valid license purchased only from themeforest(the above - + @yield('javascripts') diff --git a/resources/views/layouts/partials/sidebarMenu.blade.php b/resources/views/layouts/partials/sidebarMenu.blade.php index c5a14a9..f79da12 100644 --- a/resources/views/layouts/partials/sidebarMenu.blade.php +++ b/resources/views/layouts/partials/sidebarMenu.blade.php @@ -130,6 +130,160 @@ @endif + + {{-- Section Header --}} +
+ + Manajemen Pengguna +
+ + {{-- Submenu Items --}} + @can('view', $menus['dealer.index']) +
  • + + + Pengguna + +
  • + @endcan + + @can('view', $menus['category.index']) +
  • + + + Role & Privileges + +
  • + @endcan + + {{-- Section Header --}} +
    + + Manajemen Transaksi +
    + + {{-- Submenu Items --}} + @can('view', $menus['dealer.index']) +
  • + + + Pekerjaan + +
  • + @endcan + + @can('view', $menus['category.index']) +
  • + + + Kategori Pekerjaan + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Dealer + +
  • + @endcan + + {{-- Section Header --}} +
    + + Manajemen Gudang +
    + + {{-- Submenu Items --}} + @can('view', $menus['products.index']) +
  • + + + Produk + +
  • + @endcan + + @can('view', $menus['product_categories.index']) +
  • + + + Kategori Produk + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Mutasi Produk + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Stock Opname + +
  • + @endcan + + {{-- Section Header --}} +
    + + Laporan +
    + + {{-- Submenu Items --}} + @can('view', $menus['dealer.index']) +
  • + + + SA + +
  • + @endcan + + @can('view', $menus['category.index']) +
  • + + + Pekerjaan + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Dealer + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Stok Produk + +
  • + @endcan + + @can('view', $menus['work.index']) +
  • + + + Teknisi + +
  • + @endcan diff --git a/resources/views/warehouse_management/product_categories/index.blade.php b/resources/views/warehouse_management/product_categories/index.blade.php new file mode 100644 index 0000000..d2f4a91 --- /dev/null +++ b/resources/views/warehouse_management/product_categories/index.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.backapp') + +@section('content') +
    +
    +
    + + + +

    + Kategori Produk +

    +
    + @can('create', $menus['product_categories.index']) +
    +
    +
    + +
    +
    +
    + @endcan +
    + +
    +
    + + + + + + + + + +
    NONama KategoriAksi
    + +
    +
    +
    + + +{{-- begin modal --}} + + +{{-- end modal --}} +@endsection + +@section('javascripts') + +@endsection \ No newline at end of file diff --git a/resources/views/warehouse_management/products/create.blade.php b/resources/views/warehouse_management/products/create.blade.php new file mode 100644 index 0000000..924825e --- /dev/null +++ b/resources/views/warehouse_management/products/create.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.backapp') + +@section('content') +
    +
    +
    + + + +

    + Tambah Produk +

    +
    +
    + +
    +
    + +
    +
    + + + + + + + + + + + +
    NOKodeNamaAddressStok
    + +
    +
    +
    +@endsection \ No newline at end of file diff --git a/resources/views/warehouse_management/products/index.blade.php b/resources/views/warehouse_management/products/index.blade.php new file mode 100644 index 0000000..d5208c7 --- /dev/null +++ b/resources/views/warehouse_management/products/index.blade.php @@ -0,0 +1,48 @@ +@extends('layouts.backapp') + +@section('content') +
    +
    +
    + + + +

    + Produk +

    +
    + @can('create', $menus['product_categories.index']) +
    +
    +
    + +
    +
    +
    + @endcan +
    + +
    +
    + + + + + + + + + + + + +
    NOKodeNamaKategoriStokAksi
    + +
    +
    +
    +@endsection + +@section('javascripts') + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index b4856a9..2939e3f 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,12 +7,16 @@ use App\Http\Controllers\ReportController; use App\Http\Controllers\RolePrivilegeController; 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\WorkController; use App\Models\Menu; use App\Models\Privilege; use App\Models\Role; use App\Models\User; use Illuminate\Support\Facades\Route; +use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Auth; /* |-------------------------------------------------------------------------- @@ -26,7 +30,7 @@ use Illuminate\Support\Facades\Route; */ Route::get('/clear', function() { - \Artisan::call('cache:clear'); + Artisan::call('cache:clear'); }); Route::get('delete_role_privileges', function() { @@ -198,6 +202,11 @@ Route::group(['middleware' => 'auth'], function() { Route::get('/report/transaction_sa/export', [ReportController::class, 'sa_export'])->name('report.transaction_sa.export'); 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); + }); }); diff --git a/webpack.mix.js b/webpack.mix.js index 1a2a958..28be5a0 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,4 +1,4 @@ -const mix = require('laravel-mix'); +const mix = require("laravel-mix"); /* |-------------------------------------------------------------------------- @@ -11,6 +11,14 @@ const mix = require('laravel-mix'); | */ -mix.js('resources/js/app.js', 'public/js') - .sass('resources/sass/app.scss', 'public/css') +mix.js("resources/js/app.js", "public/js") + .sass("resources/sass/app.scss", "public/css") + .js( + "resources/js/warehouse_management/product_categories/index.js", + "public/js/warehouse_management/product_categories" + ) + .js( + "resources/js/warehouse_management/products/index.js", + "public/js/warehouse_management/products" + ) .sourceMaps();